00001
00002
00003
00004
00005
00006
00007
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
00049
00050
00051
00052
00053
00054
00055 #define IP_PSEUDOHEADER_LENGHT 12
00056
00057 struct IP_Pseudoheader {
00058 volatile unsigned long IP_SourceIP;
00059 volatile unsigned long IP_DestinationIP;
00060 volatile unsigned char IP_ZERO;
00061 volatile unsigned char IP_Protokoll;
00062 volatile unsigned int IP_TCP_lenght;
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 {
00069 volatile unsigned int TCP_Port;
00070 };
00071
00072
00073
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
00081 #define CONNECTTIMEOUT 500 // angabe in 1/100 sec
00082 #define TimeOutCounter 20 // angabe in 1 sec
00083
00084
00085 struct TCP_SOCKET {
00086 volatile unsigned char ConnectionState;
00087 volatile unsigned char SendState;
00088 volatile unsigned int SourcePort;
00089 volatile unsigned int DestinationPort;
00090 volatile unsigned long SourceIP;
00091 volatile unsigned long SequenceNumber;
00092 volatile unsigned long AcknowledgeNumber;
00093 volatile unsigned int Windowsize;
00094 volatile unsigned int SendetBytes;
00095 volatile unsigned int Timeoutcounter;
00096 volatile unsigned char MACadress[6];
00097 volatile unsigned int Bufferlenght;
00098 volatile unsigned char Recivebuffer[ MAX_RECIVEBUFFER_LENGHT ];
00099 };
00100
00101
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
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
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
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