📄 api.lst
字号:
C51 COMPILER V7.06 API 09/26/2008 13:35:56 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE API
OBJECT MODULE PLACED IN ..\OUT\Api.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Source\Api.c BROWSE DEBUG OBJECTEXTEND PRINT(..\OUT\Api.lst) OBJECT(..\O
-UT\Api.obj)
stmt level source
1 /*
2 *****************************************************************************************************
3 *
4 * File name: api.c
5 *****************************************************************************************************
6 */
7 #include "..\head\includes.h"
8
9
10
11
12 /*
13 *****************************************************************************************************
14 *FUNC: 申请一个套接字
15 *NOTE: 套接字序号,如果返回为ERR_SOCK_FULL,说明所有套接字已被使用
16 *****************************************************************************************************
17 */
18 #if 0
unsigned char TCPSocket()
{
unsigned char i;
for (i=0; i<NO_CONNECTION; i++) { //扫描所有的套接字,找到第一个空余的
if (!conxn[i].bUsed) {
conxn[i].bUsed = TRUE; //标志该套接字已使用
return i;
}
}
if(NO_CONNECTION == i) { //无空余的套接字,则返回大于5的序列号
return ERR_SOCK_FULL;
}
}
#endif
34
35 /*
36 *****************************************************************************************************
37 *FUNC: 向指定IP、端口连接
38 *NOTE: 套接字序号,目的IP、目的端口、OnReceive函数、OnClose函数
39 *****************************************************************************************************
40 */
41 void TCPConnect(unsigned char sock, union IP_address destip, unsigned int destport,
42 void ( * recv)(unsigned char xdata *buf ,unsigned int size),
43 void ( * close)(),
44 void ( * connect)())
45 {
46 1 conxn[sock].ip.dwords = destip.dwords; //目的IP
47 1 conxn[sock].localport = LocalPort + sock; //本地端口
48 1 conxn[sock].port = destport; //目的端口
49 1 conxn[sock].socket_type = CLIENT; //本地类型
50 1 conxn[sock].state = STATE_SYN_SENT; //网络状态变迁状态STATE_SYN_SENT
51 1
52 1 EA = 0;
53 1 conxn[sock].my_sequence = initial_sequence_nr; //我的SEQ
54 1 conxn[sock].his_sequence = 0; //我的ACK
C51 COMPILER V7.06 API 09/26/2008 13:35:56 PAGE 2
55 1 initial_sequence_nr += 64000L;
56 1 EA = 1;
57 1
58 1 conxn[sock].recv = recv; //回调函数实体化
59 1 conxn[sock].close = close;
60 1 conxn[sock].connect = connect;
61 1 tcp_send(&TCPSend,FLG_SYN, 28, sock); //发请求链接标志
62 1 }
63
64
65 /*
66 *****************************************************************************************************
67 *FUNC: 发送数据
68 *NOTE: 如果发送成功,返回0,否则,返回错误代码
69 1:第一次数据先入UNACK缓冲区,但UNACK数据响应后,如果WAITFORSEND有数据则移入到UNACK缓冲区发送
70 *****************************************************************************************************
71 */
72 unsigned char User_TCPSend(unsigned char sock,unsigned char xdata *buf, unsigned int size)
73 {
74 1
75 1 if (conxn[sock].state != STATE_ESTABLISHED) { //没链路
76 2 return ERR_NO_ESTABLISH;
77 2 }
78 1
79 1 if (conxn[sock].pUnAcked->bUsed) { //等待响应被占用
80 2 return ERR_BUF_FULL; //入WAITFORSEND缓冲区失败返回洪金枝添加
81 2 }
82 1
83 1 tcp_senddata(&TCPSend,buf,size+20,sock,0); //加上20字节tcp头部
84 1 return TRUE;
85 1
86 1 }
87
88 /*
89 *****************************************************************************************************
90 *FUNC: 监听某个端口
91 *NOTE: 入参:端口号,套接字编号
92 *****************************************************************************************************
93 */
94 #if 0
unsigned char TCPListen(unsigned char sock,unsigned short ucPort,
void ( * recv)(unsigned char xdata *buf ,unsigned int size),
void ( * close)(),
void ( * connect)())
{
if(sock >= NO_CONNECTION)
return NO_CONNECTION; //套接字编号超过最大编号
conxn[sock].ip.dwords = my_ip_address.dwords;
conxn[sock].localport = ucPort;
conxn[sock].port = 0; //不知道对方的端口号
conxn[sock].socket_type = SERVER;
conxn[sock].state = STATE_LISTEN;
conxn[sock].my_sequence = initial_sequence_nr;
conxn[sock].his_sequence = 0;
initial_sequence_nr += 64000L;
//回调函数实体化
conxn[sock].recv = recv;
conxn[sock].close = close;
conxn[sock].connect = connect;
}
#endif
C51 COMPILER V7.06 API 09/26/2008 13:35:56 PAGE 3
117 /*
118 *****************************************************************************************************
119 *FUNC: 用户主动关闭套接字,并释放资源
120 *NOTE: 入参:套接字编号
121 *****************************************************************************************************
122 */
123 #if 0
void TCPClose(unsigned char sock)
{
conxn[sock].ip.dwords = 0;
conxn[sock].localport = 0;
conxn[sock].port = 0;
conxn[sock].socket_type = 0;
conxn[sock].state = STATE_CLOSED;
EA = 0;
conxn[sock].my_sequence = 0;
conxn[sock].his_sequence = 0;
EA = 1;
//将未被ACK空间和待发送数据包缓冲区设置为未被占用
conxn[sock].pUnAcked ->bUsed = FALSE;
conxn[sock].bUsed = FALSE;
//调用OnClose回调函数
(* conxn[sock].close)();
}
#endif
144
145 /*
146 *****************************************************************************************************
147 * 应用层
148 *****************************************************************************************************
149 */
150
151
152 /*
153 *****************************************************************************************************
154 *FUNC: 收到TCP数据后用户处理,收到数据后回调函数,由用户自己添加相应功能
155 *NOTE: 入参:数据缓冲区首地址,数据包长度
156 //User_TCPSend(IndexOfClient,buf,size); //Uart0Putsl(buf,size);
157 *****************************************************************************************************
158 */
159 void OnReceive(unsigned char xdata *buf,unsigned int size) reentrant
160 {
161 1 TimerSec[T_SEND_HEART] = HeartTimeOutBak; //心跳包时间初始化
162 1 SendHeartFlag = FALSE; //清已发心跳包
163 1 FramePush2(buf,size);
164 1 }
165
166
167 /*
168 *****************************************************************************************************
169 *FUNC: 连接成功后回调函数,由用户根据自己需要表些
170 *NOTE: 入参:套接字编号
171 //发送注册包//WP+ID+SIM+MIP
172 *****************************************************************************************************
173 */
174 void LoginMsg(void)
175 {
176 1 unsigned char xdata RegBody[50];
177 1 unsigned char xdata sim[]="13003804577";
178 1 unsigned char length=0;
C51 COMPILER V7.06 API 09/26/2008 13:35:56 PAGE 4
179 1
180 1 //HintMsg(7,ConfigReg.reg.LocalIpStr); //移动IP这里指本地IP
181 1 //sprintf(RegBody,"WP%s%s%s\0",ModelIdBak,sim,ConfigReg.reg.LocalIpStr);
182 1 IpToStr(my_ip_address); //用现在的本地IP,可能是手动分配,也可能是自动指派
183 1 HintMsg(7,IpString); //移动IP这里指本地IP
184 1 sprintf(RegBody,"WP%s%s%s\0",ModelIdBak,sim,IpString);
185 1 length = strlen(RegBody);
186 1 User_TCPSend(IndexOfClient,RegBody,length);
187 1
188 1 HintMsg(8,NULL); //提示连接成功
189 1
190 1 }
191
192
193 void OnConnect() reentrant
194 {
195 1 //unsigned char xdata testeven[15];
196 1 LED(CONNECT_LED,OFF);
197 1 bConnect = TRUE;
198 1 SendHeartFlag = FALSE; //清已发心跳包
199 1 ConnectNum = RECONNECT_NUM; //重连次数填初值
200 1 TimerSec[T_SEND_HEART] = HeartTimeOutBak; //心跳包时间初始化
201 1 OnLineTime = 0; //连续在线时间清0,以便函统计
202 1 SentHeartTime = 0;
203 1 #ifdef PROTOCOL_2004
LoginMsg2004();
#else
206 1 LoginMsg(); //发送注册包
207 1 #endif
208 1
209 1 #if 0
//68 99 99 99 99 99 99 68 01 02 44 E9 96 16
testeven[0] = 0x68;
testeven[1] = 0x99;
testeven[2] = 0x99;
testeven[3] = 0x99;
testeven[4] = 0x99;
testeven[5] = 0x99;
testeven[6] = 0x99;
testeven[7] = 0x68;
testeven[8] = 0x01;
testeven[9] = 0x02;
testeven[10] = 0x44;
testeven[11] = 0xe9;
testeven[12] = 0x96;
testeven[13] = 0x16;
Uart0Putsl(testeven,14);
#endif
229 1 }
230
231 /*
232 *****************************************************************************************************
233 *FUNC: 套接字关闭后回调函数
234 *NOTE: 入参:套接字编号
235 *****************************************************************************************************
236 */
237 void OnClose() reentrant
238 {
239 1 LED(CONNECT_LED,ON);
240 1 bConnect = FALSE;
C51 COMPILER V7.06 API 09/26/2008 13:35:56 PAGE 5
241 1 SendHeartFlag = FALSE; //清已发心跳包
242 1 OnLineTime = 0;
243 1 SentHeartTime = 0;
244 1 }
245
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 657 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- 62
PDATA SIZE = ---- ----
DATA SIZE = ---- 18
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -