3# liwenz
Keil有自带的例程,里面改写TCP CALLBACK函数,TCP_EVT_DATA在这个状态下,表示已经接受到数据,可以进行处理,处理的时候直接发送就OK 了
U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
/* This function is called by the TCP module on TCP event */
/* Check the 'Net_Config.h' for possible events. */
par = par;
if (soc != socket_tcp) {
return (0);
}
switch (evt) {
case TCP_EVT_DATA:
/* TCP data frame has arrived, data is located at *par1, */
/* data length is par2. Allocate buffer to send reply. */
procrec(ptr);
break;
case TCP_EVT_CONREQ:
/* Remote peer requested connect, accept it */
return (1);
case TCP_EVT_CONNECT:
/* The TCP socket is connected */
return (1);
}
return (0);
}
void procrec (U8 *buf) {
switch (buf[0]) {
case BLINKLED:
LED_out (buf[1]);
break;
case READADC:
send_data(disp_buf);
break;
}
}
/*--------------------------- TCP send --------------------------------------*/
void send_data (U8 *databuf) {
U8 *sendbuf;
/* TCP */
if (socket_tcp != 0) {
/* Start Connection */
switch (tcp_get_state(socket_tcp)) {
case TCP_STATE_FREE:
case TCP_STATE_CLOSED:
tcp_connect (socket_tcp, Rem_IP, PORT_NUM, 0);
break;
case TCP_STATE_CONNECT:
if (tcp_check_send (socket_tcp) == __TRUE) {
sendbuf = tcp_get_buf(SENDLEN);
sendbuf[0] = READADC;
sendbuf[1] = databuf[0];
sendbuf[2] = databuf[1];
sendbuf[3] = databuf[2];
sendbuf[4] = databuf[3];
sendbuf[5] = databuf[4];
tcp_send (socket_tcp, sendbuf, SENDLEN);
}
break;
}
}
}
|