📄 socket.lst
字号:
C51 COMPILER V6.21 SOCKET 05/04/2005 09:30:04 PAGE 1
C51 COMPILER V6.21, COMPILATION OF MODULE SOCKET
OBJECT MODULE PLACED IN .\ROM\SOCKET.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SOCKET.C OPTIMIZE(6,SPEED) BROWSE MODP2 DEFINE(KEIL) DEBUG OBJECTEXTEND COD
-E SYMBOLS PRINT(.\Lst\SOCKET.lst) OBJECT(.\ROM\SOCKET.obj)
stmt level source
1 /*
2 ###############################################################################
3 File Include Section
4 ###############################################################################
5 */
6 #include "socket_inc.h"
7 /*
8 ###############################################################################
9 Define Part
10 ###############################################################################
11 */
12 //#ifndef _LITTLE_ENDIAN_
13 //#define DEBUG // Add debugging code
14
15 /*
16 ###############################################################################
17 Local Variable Declaration Section
18 ###############################################################################
19 */
20 unsigned int xdata Local_Port; // Designate Local Port
21 unsigned int xdata SMASK[MAX_SOCK_NUM]; // Variable to store MASK of Tx in each channel, on setting d
-ynamic memory size.
22 unsigned int xdata RMASK[MAX_SOCK_NUM]; // Variable to store MASK of Rx in each channel, on setting d
-ynamic memory size.
23 unsigned int xdata SSIZE[MAX_SOCK_NUM]; // Maximun Tx memory size by each channel
24 unsigned int xdata RSIZE[MAX_SOCK_NUM]; // Maximun Rx memory size by each channel
25 unsigned char xdata* SBUFBASEADDRESS[MAX_SOCK_NUM]; // Maximun Tx memory base address by each channel
26 unsigned char xdata* RBUFBASEADDRESS[MAX_SOCK_NUM]; // Maximun Rx memory base address by each channel
27
28 /*
29 ###############################################################################
30 Function Implementation Section
31 ###############################################################################
32 */
33
34 void Int0(void) interrupt 0
35 {
36 1 EX0 = 0; // INT0 DISABLE
37 1 EX0 = 1;
38 1 }
39
40 void iinchip_init(void)
41 {
42 1 Local_Port = 1000; // This default value will be set if you didn't designate it when you crea
-te a socket
43 1 // If you don't designate port number and create a socket continuously,
44 1 // the port number will be assigned with incremented by one to Local_Port
45 1 *((volatile unsigned char xdata*)(TMODE)) = TMODE_SWRESET;
46 1 }
47
48 void sysinit(unsigned char sbufsize, unsigned char rbufsize)
49 {
50 1 unsigned char i;
51 1 unsigned int ssum,rsum;
C51 COMPILER V6.21 SOCKET 05/04/2005 09:30:04 PAGE 2
52 1
53 1 IINCHIP_WRITE(TX_DMEM_SIZE, sbufsize); // Set Tx memory size for each channel
54 1 IINCHIP_WRITE(RX_DMEM_SIZE, rbufsize); // Set Rx memory size for each channel
55 1
56 1 ssum = 0;
57 1 rsum = 0;
58 1 SBUFBASEADDRESS[0] = SEND_DATA_BUF; // Set Base Address of Tx memory for channel #0
59 1 RBUFBASEADDRESS[0] = RECV_DATA_BUF; // Set Base Address of Rx memory for channel #0
60 1
61 1 for(i = 0 ; i < MAX_SOCK_NUM; i++) // Set maximum memory size for Tx and Rx, mask, base add
-ress of memory by each channel
62 1 {
63 2 SSIZE[i] = 0;
64 2 RSIZE[i] = 0;
65 2 if(ssum < 8192)
66 2 {
67 3 switch((sbufsize >> i*2) & 0x03) // Set maximum Tx memory size
68 3 {
69 4 case 0:
70 4 SSIZE[i] = 1024;
71 4 SMASK[i] = 0x03FF;
72 4 break;
73 4 case 1:
74 4 SSIZE[i] = 2048;
75 4 SMASK[i] = 0x07FF;
76 4 break;
77 4 case 2:
78 4 SSIZE[i] = 4096;
79 4 SMASK[i] = 0x0FFF;
80 4 break;
81 4 default:
82 4 SSIZE[i] = 8192;
83 4 SMASK[i] = 0x1FFF;
84 4 break;
85 4 }
86 3 }
87 2 if(rsum < 8192)
88 2 {
89 3 switch((rbufsize>> i*2) & 0x03) // Set maximum Rx memory size
90 3 {
91 4 case 0:
92 4 RSIZE[i] = 1024;
93 4 RMASK[i] = 0x03FF;
94 4 break;
95 4 case 1:
96 4 RSIZE[i] = 2048;
97 4 RMASK[i] = 0x07FF;
98 4 break;
99 4 case 2:
100 4 RSIZE[i] = 4096;
101 4 RMASK[i] = 0x0FFF;
102 4 break;
103 4 default:
104 4 RSIZE[i] = 8192;
105 4 RMASK[i] = 0x1FFF;
106 4 break;
107 4 }
108 3 }
109 2 ssum += SSIZE[i];
110 2 rsum += RSIZE[i];
111 2 if(i != 0) // Set base address of Tx and Rx memory for channel #1,#2,#3
112 2 {
C51 COMPILER V6.21 SOCKET 05/04/2005 09:30:04 PAGE 3
113 3 SBUFBASEADDRESS[i] = SBUFBASEADDRESS[i-1] + SSIZE[i-1];
114 3 RBUFBASEADDRESS[i] = RBUFBASEADDRESS[i-1] + RSIZE[i-1];
115 3 }
116 2 #ifdef DEBUG
printf("%bd : %d %d", i, SSIZE[i], RSIZE[i]);
#endif
119 2 }
120 1 wait_1us(1);
121 1 }
122
123 void setMACAddr(unsigned char * addr)
124 {
125 1 unsigned char i;
126 1
127 1 for (i = 0; i < 6; i++) {
128 2 IINCHIP_WRITE((SRC_HA_PTR + i), addr[i]);
129 2 }
130 1 }
131
132 void setgateway(unsigned char * addr)
133 {
134 1 unsigned char i;
135 1
136 1 for (i = 0; i < 4; i++) {
137 2 IINCHIP_WRITE((GATEWAY_PTR + i), addr[i]);
138 2 }
139 1 }
140
141 void setIP(unsigned char * addr)
142 {
143 1 unsigned char i;
144 1
145 1 for (i = 0; i < 4; i++) {
146 2 IINCHIP_WRITE((SRC_IP_PTR + i), addr[i]);
147 2 }
148 1 }
149
150 void setsubmask(unsigned char * addr)
151 {
152 1 unsigned char i;
153 1
154 1 for (i = 0; i < 4; i++) {
155 2 IINCHIP_WRITE((SUBNET_MASK_PTR + i), addr[i]);
156 2 }
157 1 }
158
159 /*---------------*/
160 #ifdef __IP_RAW__
void setIPprotocol(unsigned char s, unsigned char ipprotocol)
{
IINCHIP_WRITE(IP_PROTOCOL(s), ipprotocol);
}
#endif
166
167 /*---------------*/
168 #ifdef __OPT__
void setINTMask(unsigned char mask)
{
IINCHIP_WRITE(INTMASK, mask);
}
void settimeout(unsigned char * val)
C51 COMPILER V6.21 SOCKET 05/04/2005 09:30:04 PAGE 4
{
unsigned char i;
for (i = 0; i < 3; i++) {
IINCHIP_WRITE((TIMEOUT_PTR + i), val[i]);
}
}
void getDestAddr(unsigned char ch, unsigned char * addr)
{
addr[0] = IINCHIP_READ(DST_IP_PTR(ch));
addr[1] = IINCHIP_READ(DST_IP_PTR(ch)+1);
addr[2] = IINCHIP_READ(DST_IP_PTR(ch)+2);
addr[3] = IINCHIP_READ(DST_IP_PTR(ch)+3);
}
void Send_KeepalivePacket(unsigned char s)
{
IINCHIP_WRITE(COMMAND(s),CSENDKEEPALIVE); /* SEND command */
}
#endif
196
197 /*---------------*/
198 #ifdef _DEF_IINCHIP_PPP
199 void getLocalAddr(unsigned char * addr)
200 {
201 1 addr[0] = IINCHIP_READ(SRC_IP_PTR);
202 1 addr[1] = IINCHIP_READ(SRC_IP_PTR+1);
203 1 addr[2] = IINCHIP_READ(SRC_IP_PTR+2);
204 1 addr[3] = IINCHIP_READ(SRC_IP_PTR+3);
205 1 }
206 void getDestMAC(unsigned char ch, unsigned char * addr)
207 {
208 1 addr[0] = IINCHIP_READ(DST_HA_PTR(ch));
209 1 addr[1] = IINCHIP_READ(DST_HA_PTR(ch)+1);
210 1 addr[2] = IINCHIP_READ(DST_HA_PTR(ch)+2);
211 1 addr[3] = IINCHIP_READ(DST_HA_PTR(ch)+3);
212 1 addr[4] = IINCHIP_READ(DST_HA_PTR(ch)+4);
213 1 addr[5] = IINCHIP_READ(DST_HA_PTR(ch)+5);
214 1 }
215 unsigned int getDestPort(unsigned char ch)
216 {
217 1 unsigned int ret;
218 1 #ifndef _LITTLE_ENDIAN_
219 1 ret = IINCHIP_READ(DST_PORT_PTR(ch));
220 1 ret = (ret << 8) + IINCHIP_READ(DST_PORT_PTR(ch) + 1);
221 1 #else
ret = IINCHIP_READ(DST_PORT_PTR(ch)+1);
ret = (ret << 8) + IINCHIP_READ(DST_PORT_PTR(ch));
#endif
225 1 return ret;
226 1 }
227 #endif
228 /*---------------*/
229
230 /**
231 * return :
232 * 1 => success
233 * 0 => fail
234 */
235 unsigned char socket(unsigned char s, unsigned char protocol, unsigned int port, unsigned char flag)
236 {
C51 COMPILER V6.21 SOCKET 05/04/2005 09:30:04 PAGE 5
237 1 unsigned char ret;
238 1 if ((protocol == SOCK_STREAM) || (protocol == SOCK_DGRAM) || (protocol == SOCK_ICMPM) || (protocol == SOC
-K_IPL_RAWM) || (protocol == SOCK_MACL_RAWM) || (protocol == SOCK_PPPOEM))
239 1 {
240 2 // 1. first, CLOSE
241 2 IINCHIP_WRITE(COMMAND(s),CCLOSE);
242 2 // 2. write protocol
243 2 IINCHIP_WRITE(OPT_PROTOCOL(s),protocol | flag);
244 2 // 3. write Port number
245 2 if (port != 0) {
246 3 #ifndef _LITTLE_ENDIAN_
247 3 IINCHIP_WRITE(SRC_PORT_PTR(s),(unsigned char)((port & 0xff00) >> 8));
248 3 IINCHIP_WRITE((SRC_PORT_PTR(s) + 1),(unsigned char)(port & 0x00ff));
249 3 #else
IINCHIP_WRITE((SRC_PORT_PTR(s)+1),(unsigned char)((port & 0xff00) >> 8));
IINCHIP_WRITE(SRC_PORT_PTR(s),(unsigned char)(port & 0x00ff));
#endif
253 3 } else {
254 3 Local_Port++; // if don't set the source port, set Local_Port number.
255 3 #ifndef _LITTLE_ENDIAN_
256 3 IINCHIP_WRITE(SRC_PORT_PTR(s),(unsigned char)((Local_Port & 0xff00) >> 8));
257 3 IINCHIP_WRITE((SRC_PORT_PTR(s) + 1),(unsigned char)(Local_Port & 0x00ff));
258 3 #else
IINCHIP_WRITE((SRC_PORT_PTR(s)+1),(unsigned char)((Local_Port & 0xff00) >> 8));
IINCHIP_WRITE(SRC_PORT_PTR(s),(unsigned char)(Local_Port & 0x00ff));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -