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 PutSocketData( unsigned int Socket, unsigned int Datalenght, unsigned char * Sendbuffer );
00040 void SendData( unsigned int Socket, unsigned int Datalenght, unsigned char * Sendbuffer );
00041 unsigned PutSocketData_P( unsigned int Socket, unsigned int Datalenght, const prog_char * Sendbuffer );
00042 void SendData_P ( unsigned int Socket, unsigned int Datalenght, const prog_char * Sendbuffer );
00043
00044
00045
00046
00047
00048
00049
00050
00051 #define IP_PSEUDOHEADER_LENGHT 12
00052
00053 struct IP_Pseudoheader {
00054 volatile unsigned long IP_SourceIP;
00055 volatile unsigned long IP_DestinationIP;
00056 volatile unsigned char IP_ZERO;
00057 volatile unsigned char IP_Protokoll;
00058 volatile unsigned int IP_TCP_lenght;
00059 };
00060
00061 #define MAX_LISTEN_PORTS 4 // Anzahl der Port auf den gelauscht wird
00062 #define TCP_Port_not_use 0
00063
00064 struct TCP_PORT {
00065 volatile unsigned int TCP_Port;
00066 };
00067
00068
00069
00070
00071 #define MAX_TCP_CONNECTIONS 2 // maximale gleichzeitige verbindungen
00072 #define MAX_TCP_RETRANSMISSIONS 5
00073 #define MAX_RECIVEBUFFER_LENGHT 64
00074 #define CLOSETIMEOUT 400 // angabe in 1/100 sec
00075 #define RETRANSMISSIONTIMEOUT 200 // angabe in 1/100 sec
00076
00077 #define TimeOutCounter 20 // angabe in 1 sec
00078
00079
00080 struct TCP_SOCKET {
00081 volatile unsigned char ConnectionState;
00082 volatile unsigned char SendState;
00083 volatile unsigned int SourcePort;
00084 volatile unsigned int DestinationPort;
00085 volatile unsigned long SourceIP;
00086 volatile unsigned long SequenceNumber;
00087 volatile unsigned long AcknowledgeNumber;
00088 volatile unsigned int Windowsize;
00089 volatile unsigned int SendetBytes;
00090 volatile unsigned int Timeoutcounter;
00091 volatile unsigned char MACadress[6];
00092 volatile unsigned int Bufferlenght;
00093 volatile unsigned char Recivebuffer[ MAX_RECIVEBUFFER_LENGHT ];
00094 };
00095
00096
00097
00098 #define SOCKET_NOT_USE 0x00 // SOCKET ist Frei
00099 #define SOCKET_SYNINIT 0x01 // SOCKET SYN init
00100 #define SOCKET_WAIT2SYNACK 0x04 // SOCKET hat SYN & ACK gesendet und wartet auf ACK
00101 #define SOCKET_SYNACK_OK 0x05 // SOCKET hat SYN+ACK nachen einen SYN empfangen ( fuer berbindungsaufbau )
00102 #define SOCKET_READY2USE 0x0F // SYN erfolgreich und Socket bereit zur übernahme durch den Anwender
00103 #define SOCKET_READY 0x10 // Socket ist Bereit zur Benutzung
00104 #define SOCKET_WAIT2FINACK 0x81 // SOCKET wartet auch das FIN + ACK nach einem FIN + ACK
00105 #define SOCKET_WAIT2FIN 0x82 // SOCKET wartet auch das ACK nach einem FIN + ACK
00106 #define SOCKET_RESET 0x83 // SOCKET empfängt RST ( Reset )
00107 #define SOCKET_CLOSE 0xff // SOCKET geschlossen
00108
00109 #define NO_SOCKET_USED 0xffff // Rueckgabewert
00110
00111
00112
00113 #define SOCKET_READY2SEND 0x00 // Socket bereit zum senden
00114 #define SOCKET_DATASENDED 0x80 // Socket hat Daten gesendet aber Window ist nicht voll und wartet auf ACK für Daten
00115 #define SOCKET_BUSY 0xff // Socket hat Daten gesendet und warten auf ACK für Daten
00116
00117
00118
00119 #define TCP_HEADER_LENGHT 24
00120 #define MAX_TCP_Datalenght 128
00121
00122 struct TCP_header {
00123 volatile unsigned int TCP_SourcePort;
00124 volatile unsigned int TCP_DestinationPort;
00125 volatile unsigned long TCP_SequenceNumber;
00126 volatile unsigned long TCP_AcknowledgeNumber;
00127 volatile unsigned char TCP_DataOffset;
00128 volatile unsigned char TCP_ControllFlags;
00129 volatile unsigned int TCP_Window;
00130 volatile unsigned int TCP_Checksum;
00131 volatile unsigned int TCP_UrgentPointer;
00132 volatile unsigned char TCP_Options[4];
00133 };
00134
00135
00136
00137 #define TCP_NON_FLAG 0x00 // kein Flag gesetzt
00138 #define TCP_FIN_FLAG 0x01 // Verbindung beenden gesenden/empfangen
00139 #define TCP_SYN_FLAG 0x02 // Verbindung aufbauen gesenden/empfangen
00140 #define TCP_RST_FLAG 0x04 // Reset gesenden/empfangen
00141 #define TCP_PSH_FLAG 0x08 // Push gesendet/empfangen
00142 #define TCP_ACK_FLAG 0x10 // Acknowledge gesendet/empfangen
00143 #define TCP_URG_FLAG 0X20 // Urgentflag für dringlichkeit gesetzt
00144
00145 #endif
00146