1 /*--------------------------------------------------------------------
2 * TITLE: Plasma TCP/IP Protocol Stack
3 * AUTHOR: Steve Rhoads (rhoadss@yahoo.com)
4 * DATE CREATED: 4/22/06
6 * PROJECT: Plasma CPU core
7 * COPYRIGHT: Software placed into the public domain by the author.
8 * Software 'as is' without warranty. Author liable for nothing.
10 * Plasma TCP/IP Protocol Stack
11 *--------------------------------------------------------------------*/
14 #define PACKET_SIZE 600
15 #define FRAME_COUNT 100
16 #define FRAME_COUNT_SYNC 50
17 #define FRAME_COUNT_SEND 10
18 #define FRAME_COUNT_RCV 5
19 #define RETRANSMIT_TIME 110
20 #define SOCKET_TIMEOUT 15
21 #define SEND_WINDOW 7000
22 #define RECEIVE_WINDOW 5120
24 typedef enum IPMode_e {
30 typedef enum IPState_e {
41 typedef void (*IPFuncPtr)();
43 typedef struct IPFrame {
44 uint8 packet[PACKET_SIZE];
45 struct IPFrame *next, *prev;
46 struct IPSocket *socket;
50 uint8 state, retryCnt;
53 typedef struct IPSocket {
54 struct IPSocket *next, *prev;
67 struct IPFrame *frameReadHead;
68 struct IPFrame *frameReadTail;
70 struct IPFrame *frameSend;
83 void EthernetSendPacket(const unsigned char *packet, int length); //Windows
84 void EthernetInit(unsigned char MacAddress[6]);
85 int EthernetReceive(unsigned char *buffer, int length);
86 void EthernetTransmit(unsigned char *buffer, int length);
89 void IPInit(IPFuncPtr frameSendFunction, uint8 macAddress[6], char name[6]);
90 IPFrame *IPFrameGet(int freeCount);
91 int IPProcessEthernetPacket(IPFrame *frameIn, int length);
94 IPSocket *IPOpen(IPMode_e mode, uint32 ipAddress, uint32 port, IPFuncPtr funcPtr);
95 void IPWriteFlush(IPSocket *socket);
96 uint32 IPWrite(IPSocket *socket, const uint8 *buf, uint32 length);
97 uint32 IPRead(IPSocket *socket, uint8 *buf, uint32 length);
98 void IPClose(IPSocket *socket);
100 void IPPrintf(IPSocket *socket, char *message, int arg0, int arg1, int arg2, int arg3);
102 void IPPrintf(IPSocket *socket, char *message, ...);
104 void IPResolve(char *name, IPFuncPtr resolvedFunc, void *arg);
105 uint32 IPAddressSelf(void);
108 #define HTML_LENGTH_CALLBACK -2
109 #define HTML_LENGTH_LIST_END -1
110 typedef struct PageEntry_s {
115 void HttpInit(const PageEntry_t *Pages, int UseFiles);
118 void HtmlInit(int UseFiles);
121 void FtpdInit(int UseFiles);
122 IPSocket *FtpTransfer(uint32 ip, char *user, char *passwd,
123 char *filename, uint8 *buf, int size,
124 int send, void (*callback)(uint8 *data, int size));
125 void TftpdInit(void);
126 IPSocket *TftpTransfer(uint32 ip, char *filename, uint8 *buffer, int size,
127 void (*callback)(uint8 *data, int bytes));
128 void ConsoleInit(void);
129 void *IPNameValue(const char *name, void *value);