基本信息
源码名称:w6100芯片TCPS实例(STM32F103)
源码大小:4.77M
文件格式:.rar
开发语言:C/C++
更新时间:2024-08-01
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 3 元×
微信扫码支付:3 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port, uint8_t loopback_mode) //2020-03-11
{
int32_t ret;
int8_t status,inter;
uint8_t tmp = 0;
datasize_t received_size;
uint8_t arg_tmp8;
getsockopt(sn, SO_STATUS, &status); // »ñÈ¡socket snµÄ״̬ 2020-03-11
switch(status)
{
case SOCK_ESTABLISHED : // ´¦ÓÚSOCK_ESTABLISHED״̬£¬¿ÉÒÔ½øÐÐÊÕ·¢ 2020-03-11
ctlsocket(sn,CS_GET_INTERRUPT,&inter); // ¶ÁÈ¡ÖжÏ2020-03-11 inter=getSn_IR(sn); µÈЧ¿ÉÌæ»»
if(inter & Sn_IR_CON) // Á¬½ÓÖжϲúÉú±íʾ£¬TCPÁ¬½Ó³É¹¦£¬ÖжÏÏ£¬ÆäËüÄÚÈݿɸù¾ÝÐèÒªÌí¼Ó»òɾ³ý 2020-03-11
{
arg_tmp8 = Sn_IR_CON;
ctlsocket(sn,CS_CLR_INTERRUPT,&arg_tmp8); // »Øд£¬Çå³ýÖжϱê¼Ç£¬½øÈëÁ¬½ÓÖжϺóÐèÒªÇå³ý¡£2020-03-11
}
getsockopt(sn, SO_RECVBUF, &received_size); // ÅжÏsocketÓÐûÓнÓÊܵ½Êý¾Ý£ºÍ¬ received_size=getSn_RX_RSR(sn);µÈЧ¿ÉÌæ»» 2020-03-11
if(received_size>0)
{
ret = recv(sn, buf, received_size); //½«»º´æÖÐÊÕµ½µÄÊý¾Ý·ÅÈëbufÖУsreceived_sizeÊÇÏ£ÍûÊÕµ½µÄÊý¾Ý£¬·µ»ØretÊÇʵ¼ÊÊÕµ½µÄÊý¾Ý 2020-03-11
ret = send(sn, buf, ret); // ·¢Ëͺ¯Êý£¬·¢ËÍbufÖ㤶ÈΪretµÄÊý¾Ý 2020-03-11
}
break;
case SOCK_CLOSE_WAIT : // ¸Ã״̬¼´½«¹Ø±Õ£¬ µ«»¹´¦ÓÚÁ¬½Ó״̬£¬ÏÈ´¦ÀíÍêÊÕ·¢ºó£¬ÔÙ»ØDISCONÃüÁÍê³É4´Î»ÓÊÖ¡£
ret = recv(sn, buf, received_size); //½«»º´æÖÐÊÕµ½µÄÊý¾Ý·ÅÈëbufÖУsreceived_sizeÊÇÏ£ÍûÊÕµ½µÄÊý¾Ý£¬·µ»ØretÊÇʵ¼ÊÊÕµ½µÄÊý¾Ý 2020-03-11
if(ret>0) //bufÖеÄÊý¾Ý´óÓÚ0£¬¿ÉÒÔÆô¶¯·¢ËÍ
{
ret = send(sn, buf, ret); // ·¢Ëͺ¯Êý£¬·¢ËÍbufÖ㤶ÈΪretµÄÊý¾Ý
}
if((ret = disconnect(sn)) != SOCK_OK) return ret; // µ÷ÓÃDISCONÃüÁÍê³É4´Î»ÓÊÖ¡£2020-03-11
break;
case SOCK_INIT : //SOCK³õʼÍê³É £¬ÅäÖÃΪTCP״̬³É¹¦ 2020-03-11
if( (ret = listen(sn)) != SOCK_OK) // ÅäÖÃΪ·þÎñÆ÷ģʽ 2020-03-11
return ret;
break;
case SOCK_CLOSED: // ´¦ÓÚCLOSE״̬£¬ÐèÒªÅäÖÃSOCKETº¯Êý 2020-03-11
switch(loopback_mode) // Ö§³ÖIPV4 ,IPV6 IPV4/IPV6 3ÖÖģʽ
{
case AS_IPV4:
tmp = socket(sn, Sn_MR_TCP4, port, SOCK_IO_NONBLOCK); //ÅäÖÃsocket 2020-03-11
printf("\r\nW6100 IPV4 Server port: %d\r\n",port); //´òÓ¡ÅäÖÃsocket 2020-03-11
break;
case AS_IPV6:
tmp = socket(sn, Sn_MR_TCP6, port, SOCK_IO_NONBLOCK); //ÅäÖÃsocket 2020-03-11
printf("\r\nW6100 IPV6 Server port: %d\r\n",port); //´òÓ¡ÅäÖÃsocket 2020-03-1
break;
case AS_IPDUAL:
tmp = socket(sn, Sn_MR_TCPD, port, SOCK_IO_NONBLOCK); //ÅäÖÃsocket 2020-03-11
printf("\r\nW6100 IPV4/IPV6 Server port: %d\r\n",port); //´òÓ¡ÅäÖÃsocket 2020-03-11
break;
default:
break;
}
if(tmp != sn) /* reinitialize the socket */
{
#ifdef _LOOPBACK_DEBUG_
printf("%d : Fail to create socket.\r\n",sn);
#endif
return SOCKERR_SOCKNUM;
}
break;
default:
break;
}
return 1;
}
int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port, uint8_t loopback_mode) //2020-03-11
{
int32_t ret;
int8_t status,inter;
uint8_t tmp = 0;
datasize_t received_size;
uint8_t arg_tmp8;
getsockopt(sn, SO_STATUS, &status); // »ñÈ¡socket snµÄ״̬ 2020-03-11
switch(status)
{
case SOCK_ESTABLISHED : // ´¦ÓÚSOCK_ESTABLISHED״̬£¬¿ÉÒÔ½øÐÐÊÕ·¢ 2020-03-11
ctlsocket(sn,CS_GET_INTERRUPT,&inter); // ¶ÁÈ¡ÖжÏ2020-03-11 inter=getSn_IR(sn); µÈЧ¿ÉÌæ»»
if(inter & Sn_IR_CON) // Á¬½ÓÖжϲúÉú±íʾ£¬TCPÁ¬½Ó³É¹¦£¬ÖжÏÏ£¬ÆäËüÄÚÈݿɸù¾ÝÐèÒªÌí¼Ó»òɾ³ý 2020-03-11
{
arg_tmp8 = Sn_IR_CON;
ctlsocket(sn,CS_CLR_INTERRUPT,&arg_tmp8); // »Øд£¬Çå³ýÖжϱê¼Ç£¬½øÈëÁ¬½ÓÖжϺóÐèÒªÇå³ý¡£2020-03-11
}
getsockopt(sn, SO_RECVBUF, &received_size); // ÅжÏsocketÓÐûÓнÓÊܵ½Êý¾Ý£ºÍ¬ received_size=getSn_RX_RSR(sn);µÈЧ¿ÉÌæ»» 2020-03-11
if(received_size>0)
{
ret = recv(sn, buf, received_size); //½«»º´æÖÐÊÕµ½µÄÊý¾Ý·ÅÈëbufÖУsreceived_sizeÊÇÏ£ÍûÊÕµ½µÄÊý¾Ý£¬·µ»ØretÊÇʵ¼ÊÊÕµ½µÄÊý¾Ý 2020-03-11
ret = send(sn, buf, ret); // ·¢Ëͺ¯Êý£¬·¢ËÍbufÖ㤶ÈΪretµÄÊý¾Ý 2020-03-11
}
break;
case SOCK_CLOSE_WAIT : // ¸Ã״̬¼´½«¹Ø±Õ£¬ µ«»¹´¦ÓÚÁ¬½Ó״̬£¬ÏÈ´¦ÀíÍêÊÕ·¢ºó£¬ÔÙ»ØDISCONÃüÁÍê³É4´Î»ÓÊÖ¡£
ret = recv(sn, buf, received_size); //½«»º´æÖÐÊÕµ½µÄÊý¾Ý·ÅÈëbufÖУsreceived_sizeÊÇÏ£ÍûÊÕµ½µÄÊý¾Ý£¬·µ»ØretÊÇʵ¼ÊÊÕµ½µÄÊý¾Ý 2020-03-11
if(ret>0) //bufÖеÄÊý¾Ý´óÓÚ0£¬¿ÉÒÔÆô¶¯·¢ËÍ
{
ret = send(sn, buf, ret); // ·¢Ëͺ¯Êý£¬·¢ËÍbufÖ㤶ÈΪretµÄÊý¾Ý
}
if((ret = disconnect(sn)) != SOCK_OK) return ret; // µ÷ÓÃDISCONÃüÁÍê³É4´Î»ÓÊÖ¡£2020-03-11
break;
case SOCK_INIT : //SOCK³õʼÍê³É £¬ÅäÖÃΪTCP״̬³É¹¦ 2020-03-11
if( (ret = listen(sn)) != SOCK_OK) // ÅäÖÃΪ·þÎñÆ÷ģʽ 2020-03-11
return ret;
break;
case SOCK_CLOSED: // ´¦ÓÚCLOSE״̬£¬ÐèÒªÅäÖÃSOCKETº¯Êý 2020-03-11
switch(loopback_mode) // Ö§³ÖIPV4 ,IPV6 IPV4/IPV6 3ÖÖģʽ
{
case AS_IPV4:
tmp = socket(sn, Sn_MR_TCP4, port, SOCK_IO_NONBLOCK); //ÅäÖÃsocket 2020-03-11
printf("\r\nW6100 IPV4 Server port: %d\r\n",port); //´òÓ¡ÅäÖÃsocket 2020-03-11
break;
case AS_IPV6:
tmp = socket(sn, Sn_MR_TCP6, port, SOCK_IO_NONBLOCK); //ÅäÖÃsocket 2020-03-11
printf("\r\nW6100 IPV6 Server port: %d\r\n",port); //´òÓ¡ÅäÖÃsocket 2020-03-1
break;
case AS_IPDUAL:
tmp = socket(sn, Sn_MR_TCPD, port, SOCK_IO_NONBLOCK); //ÅäÖÃsocket 2020-03-11
printf("\r\nW6100 IPV4/IPV6 Server port: %d\r\n",port); //´òÓ¡ÅäÖÃsocket 2020-03-11
break;
default:
break;
}
if(tmp != sn) /* reinitialize the socket */
{
#ifdef _LOOPBACK_DEBUG_
printf("%d : Fail to create socket.\r\n",sn);
#endif
return SOCKERR_SOCKNUM;
}
break;
default:
break;
}
return 1;
}