net/tcp.h

gehe zur Dokumentation dieser Datei
00001 
00002 //***************************************************************************
00003 // *            tcp.h
00004 // *
00005 // *  Sat Jun  3 23:01:49 2006
00006 // *  Copyright  2006  User
00007 // *  Email
00008 //****************************************************************************/
00009 #ifndef __TCP_H__
00010         #define __TCP_H__
00011 
00012         #include <avr/pgmspace.h>
00013 
00014         extern unsigned int TXErrorCounter;
00015         extern unsigned int RXErrorCounter;
00016         
00017         void tcp_init( void );
00018 
00019         void tcp( unsigned int packet_lenght, unsigned char *buffer);
00020         void TCPTimeOutHandler( void );
00021 
00022         unsigned int Getfreesocket(void);
00023         unsigned int GetSocket( unsigned char * buffer);
00024         unsigned int RegisterSocket( unsigned char *buffer);
00025         
00026         unsigned int CopyTCPdata2socketbuffer( unsigned int Socket, unsigned int Datalenght , unsigned char *buffer);
00027         void MakeTCPheader( unsigned int Socket, unsigned char TCP_flags, unsigned int Datalenght, unsigned int Windowsize, unsigned char *buffer );
00028         
00029         unsigned int RegisterTCPPort( unsigned int Port );
00030         void UnRegisterTCPPort( unsigned int Port );
00031         unsigned int CheckPortInList( unsigned int Port );
00032         unsigned int CheckPortRequest( unsigned int Port );
00033         unsigned int CheckSocketState( unsigned int Socket );
00034         void CloseTCPSocket( unsigned int Socket);
00035         unsigned int Connect2IP( unsigned long IP, unsigned int Port );
00036         
00037         unsigned int GetSocketData( unsigned int Socket , unsigned int bufferlen, unsigned char * buffer);
00038         unsigned int GetSocketNextLine( unsigned int Socket , unsigned int bufferlen, unsigned char * buffer);
00039         unsigned int PutSocketData( unsigned int Socket, unsigned int Datalenght, unsigned char * Sendbuffer );
00040         unsigned int PutSocketData_P( unsigned int Socket, unsigned int Datalenght, const prog_char * Sendbuffer );
00041         unsigned int PutSocketData_RPE( unsigned int Socket, unsigned int Datalenght, unsigned char * Sendbuffer, unsigned char Mode );
00042         void SendData_RPE( unsigned int Socket, unsigned int Datalenght, unsigned char * Sendbuffer, unsigned char Mode );
00043         
00044         #define RAM             0
00045         #define FLASH   1
00046         #define EEPROM  2
00047         
00048         // Struktur für den Pseudoheader, dieser wird bei der Berechnung der TCP-Checksumme benötigt und wird vor dem TCP-header gesetzt.
00049         // Jetzt wird zur berechnung der Checksumme im TCP-header die Checksumme auf 0 gesetzt.
00050         // Danach wird die Checksumme für den Pseudoheader, TCP-header und dem Nutzdatensgment ( TCP_Segment ) berechnet.
00051         // wenn die Checksumme errechnet ist kann wird diese in die TCP-header geschrieben.
00052         // wenn alles okay kann der empfängr auf dem selben weg rückwerts die checksumme kontrollieren und bekommt als ergenis 0 zurück, weil
00053         // das ergebnis der Checkumme ja auch im TCP_header mit drinne steht.
00054         
00055         #define IP_PSEUDOHEADER_LENGHT 12
00056         
00057         struct IP_Pseudoheader {
00058                         volatile unsigned long IP_SourceIP;                     // Quell IP
00059                         volatile unsigned long IP_DestinationIP;                // Ziel IP
00060                         volatile unsigned char IP_ZERO;                         // muss 0 sein
00061                         volatile unsigned char IP_Protokoll;                    // bei TCP immer 6
00062                         volatile unsigned int IP_TCP_lenght;                    // länge des Nutzdaten Segmentes ( TCP_Segment )
00063         };
00064         
00065         #define MAX_LISTEN_PORTS 4                                      // Anzahl der Port auf den gelauscht wird
00066         #define TCP_Port_not_use 0
00067         
00068         struct TCP_PORT {                                                       // Struktur für Ports
00069                         volatile unsigned int TCP_Port;
00070         };
00071         
00072         // Struktur für den Connection SOocket. Hier werden die Sockets für die TCP-Verbindungen angelegt und den wichtige Werte gespeichert.
00073         // damit kann man jede verbindung genau nachverfolgen und auch halten.
00074         
00075         #define MAX_TCP_CONNECTIONS                     2       // maximale gleichzeitige verbindungen
00076         #define MAX_TCP_RETRANSMISSIONS         5
00077         #define MAX_RECIVEBUFFER_LENGHT         64
00078         #define CLOSETIMEOUT                            200                     // angabe in 1/100 sec
00079         #define RETRANSMISSIONTIMEOUT           500                     // angabe in 1/100 sec
00080                                                                                                                 // der timeout für retransmission
00081         #define CONNECTTIMEOUT                          500                             // angabe in 1/100 sec
00082         #define TimeOutCounter                          20                              // angabe in 1 sec
00083                                                                                                                 // timeout für das socket wie lange keine daten mehr ausgetauscht wurden
00084         
00085         struct TCP_SOCKET {
00086                         volatile unsigned char ConnectionState;                         // 1 Byte
00087                         volatile unsigned char SendState;                                       // 1 Byte
00088                         volatile unsigned int SourcePort;                                       // 2 byte
00089                         volatile unsigned int DestinationPort;                          // 2 Byte
00090                         volatile unsigned long SourceIP;                                        // 4 Byte       
00091                         volatile unsigned long SequenceNumber;                          // 4 Byte
00092                         volatile unsigned long AcknowledgeNumber;                       // 4 Byte
00093                         volatile unsigned int Windowsize;                                       // 2 Byte
00094                         volatile unsigned int SendetBytes;                                      // 2 Byte
00095                         volatile unsigned int Timeoutcounter;                           // 2 Byte
00096                         volatile unsigned char MACadress[6];                            // 6 Byte
00097                         volatile unsigned int Bufferlenght;                                     // 2 Byte = 32 Byte + Bufferlenght
00098                         volatile unsigned char Recivebuffer[ MAX_RECIVEBUFFER_LENGHT ];
00099         };
00100         
00101         // definitionen für die ConnectionState
00102         
00103         #define SOCKET_NOT_USE          0x00                    // SOCKET ist Frei      
00104         #define SOCKET_SYNINIT          0x01                    // SOCKET SYN init
00105         #define SOCKET_WAIT2SYNACK      0x04                    // SOCKET hat SYN & ACK gesendet und wartet auf ACK
00106         #define SOCKET_SYNACK_OK        0x05                    // SOCKET hat SYN+ACK nachen einen SYN empfangen ( fuer berbindungsaufbau )
00107         #define SOCKET_READY2USE        0x0F                    // SYN erfolgreich und Socket bereit zur übernahme durch den Anwender
00108         #define SOCKET_READY            0x10                    // Socket ist Bereit zur Benutzung
00109         #define SOCKET_WAIT2FINACK      0x81                    // SOCKET wartet auch das FIN + ACK nach einem FIN + ACK
00110         #define SOCKET_WAIT2FIN         0x82                    // SOCKET wartet auch das ACK nach einem FIN + ACK
00111         #define SOCKET_RESET            0x83                    // SOCKET empfängt RST ( Reset )
00112         #define SOCKET_CLOSE            0xff                    // SOCKET geschlossen
00113 
00114     #define NO_SOCKET_USED              0xffff           // Rueckgabewert
00115         
00116         // definitionen für die SendState
00117         
00118         #define SOCKET_READY2SEND       0x00                    // Socket bereit zum senden
00119         #define SOCKET_DATASENDED       0x80                    // Socket hat Daten gesendet aber Window ist nicht voll und wartet auf ACK für Daten
00120         #define SOCKET_BUSY                     0xff                    // Socket hat Daten gesendet und warten auf ACK für Daten
00121         
00122         // der TCP-header :-)
00123         
00124         #define TCP_HEADER_LENGHT       24
00125         #define MAX_TCP_Datalenght      64
00126         
00127         struct TCP_header {
00128                         volatile unsigned int TCP_SourcePort;
00129                         volatile unsigned int TCP_DestinationPort;
00130                         volatile unsigned long TCP_SequenceNumber;
00131                         volatile unsigned long TCP_AcknowledgeNumber;
00132                         volatile unsigned char TCP_DataOffset;
00133                         volatile unsigned char TCP_ControllFlags;
00134                         volatile unsigned int TCP_Window;
00135                         volatile unsigned int TCP_Checksum;
00136                         volatile unsigned int TCP_UrgentPointer;
00137                         volatile unsigned char TCP_Options[4];
00138         };
00139                         
00140         // die einzelnen Controllflags des TCP-headers
00141         
00142         #define  TCP_NON_FLAG                   0x00            // kein Flag gesetzt
00143         #define  TCP_FIN_FLAG                   0x01            // Verbindung beenden gesenden/empfangen
00144         #define  TCP_SYN_FLAG                   0x02            // Verbindung aufbauen gesenden/empfangen
00145         #define  TCP_RST_FLAG                   0x04            // Reset gesenden/empfangen
00146         #define  TCP_PSH_FLAG                   0x08            // Push gesendet/empfangen
00147         #define  TCP_ACK_FLAG                   0x10        // Acknowledge gesendet/empfangen
00148         #define  TCP_URG_FLAG                   0X20            // Urgentflag für dringlichkeit gesetzt
00149         
00150 #endif
00151 

Erzeugt am Thu Oct 12 16:41:57 2006 für MikroEthernetBoard von  doxygen 1.4.6