From ec570b9afca0414c64d29740f6451e5e37dc4711 Mon Sep 17 00:00:00 2001 From: Zhangwen <13970730+mkc46119@user.noreply.gitee.com> Date: Mon, 3 Mar 2025 23:14:27 +0800 Subject: [PATCH] =?UTF-8?q?feature=EF=BC=9A1.=E4=BB=BB=E5=8A=A13:WIFI?= =?UTF-8?q?=E5=92=8C=E6=9C=8D=E5=8A=A1=E5=99=A8=E8=BF=9E=E6=8E=A5ok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 5 +- keilp/cc_as_stc02_ps5ws.uvprojx | 74 +-- source/app/app_config.c | 7 +- source/app/app_config.h | 2 +- source/app/app_task_tcp.c | 2 +- source/app/app_task_tcp_control.c | 6 +- source/app/main.c | 37 +- source/app/main.h | 6 +- source/app/task_SmartConfig.c | 88 ++++ source/app/task_SmartConfig.h | 34 ++ source/app/task_appstatus.c | 13 +- source/app/task_key.c | 4 +- source/app/task_keystatus.c | 2 +- source/app/task_register.c | 4 +- source/app/task_w600 copy.c | 744 ++++++++++++++++++++++++++++++ source/app/task_w600.c | 294 ++++-------- source/app/task_w600.h | 54 +-- source/bsp/bsp_config.c | 2 +- source/bsp/bsp_config.h | 2 +- source/clib/clib.c | 6 +- source/clib/clib.h | 1 + source/msp/UART0.C | 2 +- source/msp/UART2.c | 4 + source/msp/UART3.c | 3 +- source/msp/UART4.C | 2 +- source/msp/UARTX.h | 17 +- 26 files changed, 1067 insertions(+), 348 deletions(-) create mode 100644 source/app/task_SmartConfig.c create mode 100644 source/app/task_SmartConfig.h create mode 100644 source/app/task_w600 copy.c diff --git a/.vscode/settings.json b/.vscode/settings.json index eed65d3..8df605c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -39,6 +39,9 @@ "task_appstatus.h": "c", "bsp_wt2605b.h": "c", "task_apptset.h": "c", - "task_keystatus.h": "c" + "task_keystatus.h": "c", + "type.h": "c", + "task_smartconfig.h": "c", + "uartx.h": "c" } } \ No newline at end of file diff --git a/keilp/cc_as_stc02_ps5ws.uvprojx b/keilp/cc_as_stc02_ps5ws.uvprojx index 2aaadc5..c62c413 100644 --- a/keilp/cc_as_stc02_ps5ws.uvprojx +++ b/keilp/cc_as_stc02_ps5ws.uvprojx @@ -368,60 +368,25 @@ 1 ..\source\app\main.c - - task_register.c - 1 - ..\source\app\task_register.c - app_config.c 1 ..\source\app\app_config.c - task_w600.c - 1 - ..\source\app\task_w600.c - - - task_key.c - 1 - ..\source\app\task_key.c - - - app_task_tcp_control.c - 1 - ..\source\app\app_task_tcp_control.c - - - task_pen_head.c + task_appstatus.c 1 - ..\source\app\task_pen_head.c + ..\source\app\task_appstatus.c - app_task_tcp.c + task_appTEST.c 1 - ..\source\app\app_task_tcp.c + ..\source\app\task_appTEST.c - app_task_speech.c + task_keystatus.c 1 - ..\source\app\app_task_speech.c - - - task_game.c - 1 - ..\source\app\task_game.c - - - task_btn.c - 1 - ..\source\app\task_btn.c - - - app_data_save.c - 1 - ..\source\app\app_data_save.c + ..\source\app\task_keystatus.c @@ -439,24 +404,19 @@ ..\source\bsp\chipid.c - rs485.c - 1 - ..\source\bsp\rs485.c - - - w600.c + bsp_key.c 1 - ..\source\bsp\w600.c + ..\source\bsp\bsp_key.c - bsp_oid.c + bsp_led.c 1 - ..\source\bsp\bsp_oid.c + ..\source\bsp\bsp_led.c - bsp_btn.c + bsp_WT2605B.c 1 - ..\source\bsp\bsp_btn.c + ..\source\bsp\bsp_WT2605B.c @@ -562,16 +522,6 @@ asp - - - asp_oid.c - 1 - ..\source\asp\asp_oid.c - - - - - New Group diff --git a/source/app/app_config.c b/source/app/app_config.c index 2ec6339..4e58816 100644 --- a/source/app/app_config.c +++ b/source/app/app_config.c @@ -18,9 +18,11 @@ void L3_param_init(void) //station模式状态 G.st_status = 0; //0:none 1:wifi_ok 2:tcp_connect_ok //station模式sid - Lc_strcpy(G.st_sid,"ccsens"); + Lc_strcpy(G.st_sid,"YFRS"); + // Lc_strcpy(G.st_sid,"iPhone11"); //station模式pwd - Lc_strcpy(G.st_pwd,"ccsens123"); + Lc_strcpy(G.st_pwd,"99999999"); + // Lc_strcpy(G.st_pwd,"12345678"); //ap模式状态 G.ap_status = 0;//0: none 1: ap_ok 2:tcp_server_ok //ap模式sid @@ -152,6 +154,7 @@ void L3_reg_reset(void) G.pen_up = 0; G.datapkg = 0; G.pen_t = 1; + G.debug = 1; diff --git a/source/app/app_config.h b/source/app/app_config.h index e33819b..f23bf4c 100644 --- a/source/app/app_config.h +++ b/source/app/app_config.h @@ -2,6 +2,7 @@ #define APP_COMMON_H #include "../clib/type.h" +#include "../clib/clib.h" #include "../bsp/bsp_config.h" #include "../tpc/ccmodbus.h" #include "../tpc/modbus.h" @@ -40,7 +41,6 @@ typedef enum WIFI_CONNECTED = 3, //WIFI连接成功 TCP_CONNECTED = 4, //TCP连接成 - }APP_STATUS; typedef struct global_register diff --git a/source/app/app_task_tcp.c b/source/app/app_task_tcp.c index 169a171..7f7f261 100644 --- a/source/app/app_task_tcp.c +++ b/source/app/app_task_tcp.c @@ -57,7 +57,7 @@ void L3_task_tcp_handle(TS_tcp *s) // if(s_uart2_tcp_rec.ok) { // s_uart2_tcp_rec.ok = 0; - s_task_gm35_flow.tcp_last_recv_stmp = s_nos_tick.t_1s; + _s_task_w600_para.tcp_last_recv_stmp = s_nos_tick.t_1s; // s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp); //L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num); if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver) diff --git a/source/app/app_task_tcp_control.c b/source/app/app_task_tcp_control.c index a80080e..99f093d 100644 --- a/source/app/app_task_tcp_control.c +++ b/source/app/app_task_tcp_control.c @@ -24,14 +24,14 @@ void L3_task_tcp_control_handle(TS_tcp_control *s)//判定是否抬笔/缓冲区 TTSS_Task_init() L2_task_go(D_task_tcp_control_01); TTSS_Task_step(D_task_tcp_control_01) - if(s->conn_ok_pool != s_task_gm35_flow.conn_ok) + if(s->conn_ok_pool != _s_task_w600_para.conn_ok) { G.authed = 0; - s->conn_ok_pool =s_task_gm35_flow.conn_ok; //s->conn_ok_pool=1 + s->conn_ok_pool =_s_task_w600_para.conn_ok; //s->conn_ok_pool=1 } L2_task_go(D_task_tcp_control_02); TTSS_Task_step(D_task_tcp_control_02)//是否发认证包 - if(s_task_gm35_flow.conn_ok) + if(_s_task_w600_para.conn_ok) { if(!G.authed)//authed == 0 { diff --git a/source/app/main.c b/source/app/main.c index 93bd737..ac3f92a 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -36,21 +36,28 @@ void L0_BSP_init(void) L0_PW_3V3_INIT(); // 控制3v3输出(OID,WIFI) L0_PW_3V3_ON(); + + LED2 = 0; } void L0_TASK_init(void) { //系统状态任务初始化 L3_task_AppStatus_init(); - L3_task_AppTest_init(); + // L3_task_AppTest_init(); L3_task_KeyStatus_init(); + + //w600任务初始化 + L3_task_W600_flow_init(W600_ST); + + L3_task_SmartConfig_init(); + + // //游戏任务初始化 // L3_task_game_init(); // //寄存器监听任务初始化 // L3_task_reglisten_init(); - // //w600任务初始化 - // L3_task_gm35_flow_init(W600_ST); // //笔头任务初始化 // L1_oid_init(); // //语音模块初始化 @@ -106,7 +113,6 @@ void main(void) { // L1_Oid_readoid(); - if(1 == s_nos_tick.t1s_heartbeat)//1s { s_nos_tick.t1s_heartbeat = 0;//置0清空 @@ -120,17 +126,24 @@ void main(void) // L0_uart0_uc('='); // L0_uart0_uchex(data_save_arr[i].val); // L0_uart0_0d0a(); - // } - // L0_uart0_sendArrayHex(data_save_arr, 30); - L0_uart0_uc('.'); - // L0_uart0_uc(L2_ReadKey1()); - // L0_uart0_uc(L2_ReadKey2()); - // L0_uart0_uc(L2_ReadKey3()); + // } + // L0_uart0_sendstr("R.app_status = "); + // L0_uart0_uchex(R.app_status); + // L0_uart0_0d0a(); + // L0_uart0_uc('@'); + // L0_uart0_ulhex((U32)&task_smartconfig); } L3_task_appstatus_handler(&_s_task_appstatus); - // L3_task_AppTest_handler(&_s_task_apptest); + // // L3_task_AppTest_handler(&_s_task_apptest); L3_task_keystatus_handler(&_s_task_keystatus); + + // // WIFI + L3_uart2_wifi_parse(); + L2_task_W600_flow_handle(&_s_task_w600_para); + + //配网任务 + // L3_task_SmartConfig_handler(&task_smartconfig); // // 串口2的 接收数据 测试 // if(ts_uart[uNum2].r.ok == 1) @@ -190,7 +203,7 @@ void main(void) //WIFI // L3_uart2_exp_protocol(&s_uart2_at); - // L2_task_gm35_flow_handle(&s_task_gm35_flow); + // L2_task_W600_flow_handle(&_s_task_w600_para); //寄存器值监控 // L3_task_reglisten_handle(&s_task_reglisten); diff --git a/source/app/main.h b/source/app/main.h index 7a27894..3b78deb 100644 --- a/source/app/main.h +++ b/source/app/main.h @@ -60,7 +60,7 @@ ///#include "../app/task_debug.h" #include "../app/task_register.h" #include "../app/task_encrypt.h" -#include "../app/task_w600.h" + #include "../app/task_key.h" #include "../app/app_task_tcp.h" #include "../app/app_task_tcp_control.h" @@ -71,6 +71,10 @@ #include "../app/task_appstatus.h" #include "../app/task_appTEST.h" #include "../app/task_keystatus.h" +#include "../app/task_w600.h" +#include "../app/task_SmartConfig.h" + + #include "../bsp/bsp_led.h" #include "../bsp/bsp_key.h" diff --git a/source/app/task_SmartConfig.c b/source/app/task_SmartConfig.c new file mode 100644 index 0000000..bd29a65 --- /dev/null +++ b/source/app/task_SmartConfig.c @@ -0,0 +1,88 @@ +//////////////////////////////////////////////////////////////////////////// +///@copyright Copyright (c) 2018, 传控科技 All rights reserved. +///------------------------------------------------------------------------- +/// @file bsp_drv.c +/// @brief bsp @ driver config +///------------------------------------------------------------------------- +/// @version 1.0 +/// @author CC +/// @date 20180331 +/// @note cc_AS_stc02 +////////////////////////////////////////////////////////////////////////////// + +#include "../app/task_smartconfig.h" +#include "../app/app_config.h" +#include "../app/task_w600.h" +#include "../msp/uartx.h" +#include "../msp/uart0.h" +#include "../msp/uart2.h" +#include "../clib/clib.h" + + +S_TASK_SMART_CONFIG task_smartconfig; + + +void L3_task_SmartConfig_init(void) +{ + L1_task_init(&task_smartconfig.task); + task_smartconfig.status = 0; + L3_task_s_go(task_smartconfig,D_task_init); +} + +#define D_task_DETECTCHANGE 0x50 +#define D_task_SAMRTCONFIG 0x51 +#define D_task_SMARTCSUCCESS 0x52 +#define D_task_SAMRTCSTOP 0x53 +#define D_task_SAMRTCSTOPPED 0x54 + + +void L3_task_SmartConfig_handler(S_TASK_SMART_CONFIG *s) +{ + TTSS_Task_init() + L2_task_go(D_task_DETECTCHANGE); + L0_uart0_uc('*'); + L0_uart0_uchex(task_smartconfig.status); + L0_uart0_uchex(s->status); + L0_uart0_0d0a(); + L0_uart0_ulhex((U32)s); + + TTSS_Task_step(D_task_DETECTCHANGE) + if(s->status != R.app_status) + { + + task_smartconfig.status = R.app_status; + if(task_smartconfig.status == WIFI_CONFIG) + { + L0_uart0_sendstr("task_smartconfig.status == WIFI_CONFIG"); + L3_gm35_send_str(AT_INS_ST_STARTSMART); //开启SmartC + L2_task_go_Tdelay(D_task_SAMRTCONFIG,D_Tdelay_500ms); + } + } + TTSS_Task_step(D_task_SAMRTCONFIG) + if(Lc_strStartsWith(ts_uart[uNum2].r.buf,"\r\nOK")) + { + L0_uart0_sendstr("SmartConfig Enter-->"); + // 语音输出:进入配网模式,请配合手机 + L2_task_go_Tdelay(D_task_SMARTCSUCCESS,D_Tdelay_300ms); + } + TTSS_Task_step(D_task_SMARTCSUCCESS) + if(Lc_strStartsWith(ts_uart[uNum2].r.buf,"\r\nsmartconfig type")) + { + L0_uart0_sendstr("SmartConfig Success!"); + // 语音输出:配网模式成功,请重启设备 + L2_task_go_Tdelay(D_task_SAMRTCSTOP,D_Tdelay_300ms); + } + TTSS_Task_step(D_task_SAMRTCSTOP) + L3_gm35_send_str(AT_INS_ST_STOPSMART); + L2_task_go_Tdelay(D_task_SAMRTCSTOPPED,D_Tdelay_300ms); + + TTSS_Task_step(D_task_SAMRTCSTOPPED) + if (Lc_strStartsWith(ts_uart[uNum2].r.buf,"\r\nOK")) + { + L0_uart0_sendstr("SmartConfig Stop!"); + R.app_status = WIFI_CONNECTED; + L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_300ms); + } + + TTSS_Task_end(); +} \ No newline at end of file diff --git a/source/app/task_SmartConfig.h b/source/app/task_SmartConfig.h new file mode 100644 index 0000000..39fdb99 --- /dev/null +++ b/source/app/task_SmartConfig.h @@ -0,0 +1,34 @@ +//////////////////////////////////////////////////////////////////////////// +///@copyright Copyright (c) 2018, 传控科技 All rights reserved. +///------------------------------------------------------------------------- +/// @file bsp_drv.h +/// @brief bsp @ driver config +///------------------------------------------------------------------------- +/// @version 1.0 +/// @author CC +/// @date 20180331 +/// @note cc_AS_stc02 + +////////////////////////////////////////////////////////////////////////////// + +#ifndef _TASK_SMARTC_H +#define _TASK_SMARTC_H + +#include "../ctask/task.h" +#include "../app/app_config.h" +#include "../clib/type.h" + + + +typedef struct _s_task_smartc +{ + TS_task task; + APP_STATUS status; +}S_TASK_SMART_CONFIG; + +extern S_TASK_SMART_CONFIG task_smartconfig; + +extern void L3_task_SmartConfig_init(void); +extern void L3_task_SmartConfig_handler(S_TASK_SMART_CONFIG *s); + +#endif // #ifndef diff --git a/source/app/task_appstatus.c b/source/app/task_appstatus.c index 28c4a66..0047f42 100644 --- a/source/app/task_appstatus.c +++ b/source/app/task_appstatus.c @@ -29,12 +29,12 @@ void L3_task_AppStatus_init(void) L3_task_s_go(_s_task_appstatus,D_task_init); } -#define D_task_DETECTCHANGE 0x50 -#define D_task_HANDLECHANGE 0x51 -#define D_task_WIFICONFIG_STATUS01 0x52 -#define D_task_WIFICONFIG_STATUS02 0x53 -#define D_task_WIFICONN_STATUS01 0x54 -#define D_task_WIFICONN_STATUS02 0x55 +#define D_task_DETECTCHANGE 0x50 +#define D_task_HANDLECHANGE 0x51 +#define D_task_WIFICONFIG_STATUS01 0x52 +#define D_task_WIFICONFIG_STATUS02 0x53 +#define D_task_WIFICONN_STATUS01 0x54 +#define D_task_WIFICONN_STATUS02 0x55 void L3_task_appstatus_handler(S_TASK_APPSTATUS *s) @@ -89,7 +89,6 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s) // L2_WT2605B_PWRON(); // Lc_delay_ms(1000); L2_WT2605B_broadcast(&audio_config_mode); -// // L2_WT2605B_broadcast(&audio_Wifi_Config); // // OID和WIFI通电 // L0_PW_3V3_ON(); } diff --git a/source/app/task_key.c b/source/app/task_key.c index a88f153..c4f090c 100644 --- a/source/app/task_key.c +++ b/source/app/task_key.c @@ -226,8 +226,8 @@ void L3_task_key_handle(struct _s_task_key_ *p) // // LED1 = 0; // L3_gm35_send_str("+++"); // Lc_delay_ms(1000); - // //s_task_gm35_flow.mode=W600_AP; - // L3_task_gm35_flow_init(W600_AP); + // //_s_task_w600_para.mode=W600_AP; + // L3_task_W600_flow_init(W600_AP); // //G.w600_mode = 0; } else diff --git a/source/app/task_keystatus.c b/source/app/task_keystatus.c index a390479..ba52cb1 100644 --- a/source/app/task_keystatus.c +++ b/source/app/task_keystatus.c @@ -48,7 +48,7 @@ void L3_task_keystatus_handler(S_TASK_KEYSTATUS *s) else { U32 diff = D_sys_now -s->Key1_Down_Begin_Time; - L0_uart0_ulhex(diff); + // L0_uart0_ulhex(diff); if (diff >= LongKey_PWR_MSeconds/JIFFIES && s->Key1_handled == 0) { if (R.app_status == POW_OFF) diff --git a/source/app/task_register.c b/source/app/task_register.c index 429d0bc..c66d162 100644 --- a/source/app/task_register.c +++ b/source/app/task_register.c @@ -40,8 +40,8 @@ void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s) { L3_gm35_send_str("+++"); Lc_delay_ms(1000); - //s_task_gm35_flow.mode=W600_AP; - L3_task_gm35_flow_init(W600_AP); + //_s_task_w600_para.mode=W600_AP; + L3_task_W600_flow_init(W600_AP); G.w600_mode = 0; } diff --git a/source/app/task_w600 copy.c b/source/app/task_w600 copy.c new file mode 100644 index 0000000..2fbd3a0 --- /dev/null +++ b/source/app/task_w600 copy.c @@ -0,0 +1,744 @@ +//////////////////////////////////////////////////////////////////////////// +///@copyright Copyright (c) 2018, 传控科技 All rights reserved. +///------------------------------------------------------------------------- +/// @file bsp_test.c.c +/// @brief bsp @ driver config +///------------------------------------------------------------------------- +/// @version 1.0 +/// @author CC +/// @date 20180331 +/// @note cc_AS_stc02 +////////////////////////////////////////////////////////////////////////////// + +#include "task_w600.h" + +#include "app_config.h" +#include "../msp/uart0.h" +#include "../msp/uart2.h" +#include "../asp/asp_oid.h" +#include "../bsp/bsp_config.h" + +struct _s_task_W600_Para _s_task_w600_para; +//TS_tcp_control ts_tcp_control; +//TS_tcp ts_tcp; + + + +#define LEN_GPRS_TCP_PKG 18 + +U8 ins_cipsend[30] = "AT+CIPSEND=000\r\n"; + +U8 * _cipsend_hex(U8 len) +{ + U8 pos = Lc_strlen("AT+CIPSEND="); + ins_cipsend[pos++] = len % 1000 / 100 + '0'; + ins_cipsend[pos++] = len % 100 / 10 + '0'; + ins_cipsend[pos++] = len % 10 / 1 + '0'; + + return ins_cipsend; +} + +void L3_gm35_send_str(U8 *str) +{ + L0_uart2_sendstr(str); + if(G.debug) + { + L0_uart0_sendstr(str); + } +} + +//将数据放入gm35待发送缓冲区 +void L3_gm35_send_data(U8 *buf , U16 len) +{ + //L3_gm35_send_str(_cipsend_hex(len)); +// L0_uart2_sendArray(buf,len); + if(G.debug) + { + L0_uart0_sendArray(buf,len); + } +} + +void L3_gm35_rcv_data(U8* buf,U8 num) +{ + if(G.debug) + { + L0_uart0_sendstr("ATRCV="); + L0_uart0_uchex(num); + L0_uart0_sendArray(buf,num+3); + } +} + +U8 wifi_ins[64]; +char *GET_WIFI_INS() +{ + //AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" + Lc_strcpy(wifi_ins,"AT+CWJAP_DEF=\""); + Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),G.st_sid); + Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),"\",\""); + Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),G.st_pwd); + Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),"\"\r\n"); + return wifi_ins; +} + +U8 wifi_rev_buf[64], wifi_tmp[64]; +U8 tmp_num = 0; +void L3_uart2_wifi_parse(void) +{ + if (ts_uart[uNum2].r.ok == 1) + { + U8 *ptr = wifi_rev_buf; + ts_uart[uNum2].r.ok = 0; + Lc_buf_copy_uc(wifi_rev_buf, ts_uart[uNum2].r.buf, ts_uart[uNum2].r.num); + wifi_rev_buf[ts_uart[uNum2].r.num] = 0; + while(*ptr) + { + U8 c = *ptr++; + if(c != '\r' && c != '\n') + { + wifi_tmp[tmp_num++] = c; + } + else + { + wifi_tmp[tmp_num] = 0; + if(tmp_num == 0) + { + continue; + } + L0_uart0_uc('>'); + L0_uart0_sendstr(wifi_tmp); + L0_uart0_0d0a(); + if(Lc_strcmp(wifi_tmp,"OK") == 0) + { + // L0_uart0_sendstr("Moudle Answer:OK AND ins_ok = 1"); + _s_task_w600_para.ins_ok = 1; + } + else if(Lc_strcmp(wifi_tmp,"WIFI GOT IP") == 0) + { + _s_task_w600_para.st_wifi_ok = 1; + } + else if(Lc_strcmp(wifi_tmp,"CONNECT") == 0) + { + _s_task_w600_para.serve_ok = 1; + } + tmp_num = 0; + } + } + } +} +void L3_uart2_wifi_parse111(void) +{ + if (ts_uart[uNum2].r.ok == 1) + { + U8 *pPara = ts_uart[uNum2].r.buf; + pPara[ts_uart[uNum2].r.num] = 0; + ts_uart[uNum2].r.ok = 0; + L0_uart0_uc('$'); + // L0_uart0_sendArray(ts_uart[uNum2].r.buf,ts_uart[uNum2].r.num); + L0_uart0_sendstr(ts_uart[uNum2].r.buf); + + if(Lc_strStartsWith(pPara,"\r\nOK")) + { + LED3 = ~LED3; + L0_uart0_sendstr("Moudle Answer:OK AND ins_ok = 1"); + L0_uart0_0d0a(); + _s_task_w600_para.ins_ok = 1; + } + // if (Lc_strStartsWith(pPara,"WIFI DISCONNECT")) + // { + // LED3 = ~LED3; + // } + else if(Lc_strStartsWith(pPara,"WIFI GOT IP")) + { + _s_task_w600_para.st_wifi_ok = 1; + } + else if(Lc_strStartsWith(pPara,"ERROR")) + { + _s_task_w600_para.st_error= 1; + } + else if(Lc_strStartsWith(pPara,"no change")) + { + _s_task_w600_para.serve_ok= 1; + } + else if(Lc_strStartsWith(pPara,"CIPMUX and")) + { + _s_task_w600_para.ap_serve_ok = 1; + } + + //Station模式判定 + if(_s_task_w600_para.mode == W600_ST) + { + if(Lc_strStartsWith(pPara,"WIFI GOT IP")) + { + _s_task_w600_para.st_wifi_ok = 1; + } + else if(Lc_strStartsWith(pPara,"ALREADY CONNECTED")) + { + _s_task_w600_para.st_cip_ok = 1; + } + } + } +} + +#if 0 + +void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p) +{ + if (1 == p->ok ) + { + U8 *pPara = p->buf + 1; + _s_task_w600_para.gprs_last_recv_stmp = s_nos_tick.t_1s; + //通用判定 + if(Lc_strStartsWith(pPara,"OK")) + { + _s_task_w600_para.ins_ok = 1; + } + else if(Lc_strStartsWith(pPara,"ERROR")) + { + _s_task_w600_para.st_error= 1; + } + else if(Lc_strStartsWith(pPara,"no change")) + { + _s_task_w600_para.serve_ok= 1; + } + else if(Lc_strStartsWith(pPara,"CIPMUX and")) + { + _s_task_w600_para.ap_serve_ok = 1; + } + + //Station模式判定 + if(_s_task_w600_para.mode == W600_ST) + { + if(Lc_strStartsWith(pPara,"WIFI GOT IP")) + { + _s_task_w600_para.st_wifi_ok = 1; + } + else if(Lc_strStartsWith(pPara,"ALREADY CONNECTED")) + { + _s_task_w600_para.st_cip_ok = 1; + } + } + //AP模式判定 + else if(_s_task_w600_para.mode == W600_AP) + { + if(Lc_strStartsWith(pPara,"+IPD,")) + { + //解析协议,success + //1将id,pwd放入寄存器2.ok=1 + //失败不处理不设置标志位 + //buf: [20]+IPD,0,5:#ccsens:ccsens123$ 后面没\0 + //pPara: +IPD,0,5:#ccsens:ccsens123$ + + int j = 0 , len = p->buf[0]; + p->buf[len+1] = 0;//在+IPD,0,5:#ccsens:ccsens123$后加0 + for(j=0;jok = 0; + } +} +#endif + +//------------------------------------------------------ gm35 tasks -------------------------------- + + +void L3_task_W600_flow_init(U8 mode) +{ + L1_task_init(&_s_task_w600_para.task); + L3_task_s_go(_s_task_w600_para,D_task_init); + _s_task_w600_para.mode = mode; + _s_task_w600_para.send = 0; + _s_task_w600_para.conn_ok = 0; +#if 0 + g_at_send_status.send_lock = 0; + g_at_send_status.module_ok = 0; + g_at_send_status.sim_ok = 0; + g_at_send_status.net_ok = 0; + g_at_send_status.gprs_ok = 0; + g_at_send_status.conn_ok = 0; + + g_at_send_status.ins_stmp = 0; //每次发送指令时设置 + + g_at_send_status.heart_stmp = 0; //连接成功时设置 + g_at_send_status.data_stmp = 0; + g_at_send_status.sign_flag = 0; + g_at_send_status.ack_flag = 0; + + g_at_send_status.gprs_last_recv_stmp = 0; //接收到指令时设置 + g_at_send_status.tcp_last_recv_stmp = 0; //连接成功和接收到数据时设置 + g_at_send_status.tcp_close_stmp = 0; //重新上电和检测到断开时设置 + g_at_send_status.gm35_reboot_times = 0; //连接成功时清0 +#endif +} + + +//------------------------ GM35 Flow Handle ----------------------------------- +#define TTSS_TASK_GM35_MODE 0x01 + +#define TTSS_TASK_GM35_FLOW_ATEQV 0x02 +#define TTSS_TASK_GM35_FLOW_ST 0x03 +#define TTSS_TASK_GM35_FLOW_ST_WIFI 0x04 +#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0 0x05 +#define TTSS_TASK_GM35_FLOW_ST_TCP 0x06 +#define TTSS_TASK_GM35_FLOW_ST_CIPMODE1 0x07 +#define TTSS_TASK_GM35_FLOW_ST_CIPSEND 0x08 +#define TTSS_TASK_GM35_FLOW_ST_DATA 0x09 +#define TTSS_TASK_GM35_FLOW_ST_CIPMODE0 0x10 +#define TTSS_TASK_GM35_FLOW_ST_SERVE 0x11 + +#define TTSS_TASK_GM35_FLOW_AP 0x20 +#define TTSS_TASK_GM35_FLOW_AP_WIFI 0x21 +#define TTSS_TASK_GM35_FLOW_AP_CIPMUX1 0x22 +#define TTSS_TASK_GM35_FLOW_AP_SERVER 0x23 +#define TTSS_TASK_GM35_FLOW_AP_CIPMUX0 0x24 + +#define TTSS_TASK_GM35_FLOW_TCP_TIME 0x25 +#define TTSS_TASK_GM35_FLOW_AP_DATA 0x26 +#define TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT 0x27 +#define TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT 0x28 +#define TTSS_TASK_MODE_TRAN 0x29 +#define TTSS_TASK_MODE_CONFIG_WAIT 0x2A +#define TTSS_TASK_MODE_SERVER_CLOSE 0x2B + +#define INS_TIMEOUT 5 +#define GM35_SEND_DATA_INTERVAL 300 +#define GM35_SEND_HEART_INTERVAL 60 +#define GM35_SEND_CIPSTATUS_INTERVAL 5 + +void L2_task_W600_flow_handle(struct _s_task_W600_Para *s) +{ + TTSS_Task_init() + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_5s);//上电等待1s + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ATE0); //"ATE0\r\n" //模块查询+关闭回显 + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ap_serve_ok) //等待 + { + s->send = 0; + s->ap_serve_ok = 0; + L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); + } + else if(s->serve_ok == 1 || s->ins_ok == 1) //等待 + { + s->send = 0; + s->serve_ok = 0; + L2_task_go_Tdelay(s->mode == W600_ST ? TTSS_TASK_GM35_FLOW_ST + :TTSS_TASK_GM35_FLOW_ST_SERVE,D_Tdelay_1s); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(s->ins_ok == 1) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,D_Tdelay_1s); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI) + if(s->send == 0) + {//发送 + L3_gm35_send_str(GET_WIFI_INS()); + s->ins_ok = 0; + s->st_wifi_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->st_wifi_ok) + { + s->send = 0; + R.app_status = WIFI_CONNECTED; //wifi连接成功 + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,D_Tdelay_1s); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_CIPMUX0); + s->ins_ok = 0; + s->st_wifi_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,D_Tdelay_1s); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_TCP); + s->ins_ok = 0; + s->st_cip_ok = 0; + s->serve_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + // else if(1 == s->ins_ok || 1 == s->st_cip_ok) //等待 + else if(1 == s->serve_ok) //等待 + { + s->send = 0; + R.app_status = TCP_CONNECTED; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,D_Tdelay_1s); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_CIPMODE1); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_1s); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPSEND) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_CIPSEND); + s->ins_ok = 0; + s->st_error = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + // L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_300ms);//发完之后要等,不然st_error == 0没用 ,没收到error之前也是=0 + } + else if((s->ins_ok == 1) && (s->st_error == 1)) + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); + } + else if((s->ins_ok == 1) && (s->st_error == 0)) + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,0); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA) + //L0_uart2_sendstr("abcdefg"); + _s_task_w600_para.conn_ok = 1; + L2_task_go(TTSS_TASK_GM35_FLOW_ST_DATA); + + + + + + + + + + + +/********************s->mode = W600_AP(按键进入)****************************** */ + + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_SERVE) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); //关闭服务器 + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(s->st_error) + { + s->send = 0; + s->st_error = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_300ms); + } + else if((s->serve_ok == 1)|| (s->ins_ok == 1)) //等待 + { + s->send = 0; + s->serve_ok = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_300ms); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE0) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_CIPMODE0); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待(等待过程中,进入AP模式) + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,D_Tdelay_300ms); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发(超时,设置单连接模式) + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX0,D_Tdelay_300ms); + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_CIPMUX0) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_CIPMUX0); + s->ins_ok = 0; + s->st_wifi_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_300ms); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_WIFI,D_Tdelay_300ms); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_WIFI) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_WIFI); + s->ins_ok = 0; + s->st_error = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if((1 == s->ins_ok)||(1 == s->st_error)) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX1,D_Tdelay_300ms); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_CIPMUX1) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_CIPMUX1); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_SERVER,D_Tdelay_300ms); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_SERVER) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_SERVER); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_TCP_TIME,D_Tdelay_300ms); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_TCP_TIME) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_TCP_TIME); +// LED2 = 0; + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + s->ap_tcp_ok = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT,D_Tdelay_300ms); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT) //等待TCP连接 + if(1 == s->ap_tcp_ok) + { + s->ap_conn_ok = 0; + s->ap_tcp_ok = 0; + s->ap_rec_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT,0); + } + + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT) + if(1 == s->ap_rec_ok)//收到正确的数据才会ok=1 + {//ok回复#ok$\r\n + s->ap_rec_ok = 0; + s->rev = 1; + s->ins_stmp = s_nos_tick.t_1s; + //L0_uart0_sendstr("ap config ok"); + //L3_gm35_send_str(AT_INS_AP_SEND);//进入发送模式 + //L2_task_go(TTSS_TASK_MODE_TRAN); + } + else if(1 == s->ap_conn_ok) + { + s->ap_conn_ok = 0; + s->ap_tcp_ok = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX1,D_Tdelay_300ms); + } + else if((s_nos_tick.t_1s - s->ins_stmp > 3) && (s->rev == 1)) + {//超时重发 + s->ap_data_ok = 0; + s->rev= 0; + L3_gm35_send_str(AT_INS_AP_SEND); + L2_task_go_Tdelay(TTSS_TASK_MODE_TRAN,D_Tdelay_100ms); + } + TTSS_Task_step(TTSS_TASK_MODE_TRAN) + if(s->send == 0) + {//发送 + L3_gm35_send_str("#OK$\r\n"); +// LED2 = 1; + s->ap_rec_ok = 0; + s->ins_ok = 0; + s->send = 1; + s->ins_stmp = s_nos_tick.t_1s; + } + else if(1 == s->ap_data_ok) //等待//此处进入ins_ok,不进入send_ok,因为之前有一个no change OK,在进入AP关闭服务器那里 + { + s->send = 0; + s->ap_tcp_ok = 0; + L2_task_go_Tdelay(TTSS_TASK_MODE_SERVER_CLOSE,D_Tdelay_100ms); + } + TTSS_Task_step(TTSS_TASK_MODE_SERVER_CLOSE) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; +// LED1 = 1; +// LED2 = 1; + L3_task_W600_flow_init(W600_ST); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_end(); +} + + diff --git a/source/app/task_w600.c b/source/app/task_w600.c index 6aeaa17..4189ebb 100644 --- a/source/app/task_w600.c +++ b/source/app/task_w600.c @@ -13,60 +13,22 @@ #include "task_w600.h" #include "app_config.h" -//#include "../msp/msp_uart2.h" -//#include "../msp/msp_uart0.h" +#include "../msp/uart0.h" +#include "../msp/uart2.h" #include "../asp/asp_oid.h" +#include "../bsp/bsp_config.h" -struct _s_task_gm35_gprs_ s_task_gm35_flow; -//TS_tcp_control ts_tcp_control; -//TS_tcp ts_tcp; - - - -#define LEN_GPRS_TCP_PKG 18 - -U8 ins_cipsend[30] = "AT+CIPSEND=000\r\n"; - -U8 * _cipsend_hex(U8 len) -{ - U8 pos = Lc_strlen("AT+CIPSEND="); - ins_cipsend[pos++] = len % 1000 / 100 + '0'; - ins_cipsend[pos++] = len % 100 / 10 + '0'; - ins_cipsend[pos++] = len % 10 / 1 + '0'; - - return ins_cipsend; -} +struct _s_task_W600_Para _s_task_w600_para; void L3_gm35_send_str(U8 *str) { - // L0_uart2_sendstr(str); + L0_uart2_sendstr(str); if(G.debug) { L0_uart0_sendstr(str); } } -//将数据放入gm35待发送缓冲区 -void L3_gm35_send_data(U8 *buf , U16 len) -{ - //L3_gm35_send_str(_cipsend_hex(len)); -// L0_uart2_sendArray(buf,len); - if(G.debug) - { - L0_uart0_sendArray(buf,len); - } -} - -void L3_gm35_rcv_data(U8* buf,U8 num) -{ - if(G.debug) - { - L0_uart0_sendstr("ATRCV="); - L0_uart0_uchex(num); - L0_uart0_sendArray(buf,num+3); - } -} - U8 wifi_ins[64]; char *GET_WIFI_INS() { @@ -79,143 +41,69 @@ char *GET_WIFI_INS() return wifi_ins; } - - -void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p) +U8 wifi_rev_buf[64], wifi_tmp[64]; +U8 tmp_num = 0; +void L3_uart2_wifi_parse(void) { - if (1 == p->ok ) + if (ts_uart[uNum2].r.ok == 1) { - U8 *pPara = p->buf + 1; - s_task_gm35_flow.gprs_last_recv_stmp = s_nos_tick.t_1s; - //通用判定 - if(Lc_strStartsWith(pPara,"OK")) - { - s_task_gm35_flow.ins_ok = 1; - } - else if(Lc_strStartsWith(pPara,"ERROR")) - { - s_task_gm35_flow.st_error= 1; - } - else if(Lc_strStartsWith(pPara,"no change")) - { - s_task_gm35_flow.serve_ok= 1; - } - else if(Lc_strStartsWith(pPara,"CIPMUX and")) - { - s_task_gm35_flow.ap_serve_ok = 1; - } - - //Station模式判定 - if(s_task_gm35_flow.mode == W600_ST) + U8 *ptr = wifi_rev_buf; + ts_uart[uNum2].r.ok = 0; + Lc_buf_copy_uc(wifi_rev_buf, ts_uart[uNum2].r.buf, ts_uart[uNum2].r.num); + wifi_rev_buf[ts_uart[uNum2].r.num] = 0; + tmp_num = 0; + while(*ptr != 0) { - if(Lc_strStartsWith(pPara,"WIFI GOT IP")) - { - s_task_gm35_flow.st_wifi_ok = 1; - } - else if(Lc_strStartsWith(pPara,"ALREADY CONNECTED")) + U8 curr = *ptr++; + U8 next = *ptr; + + if(curr != '\r' && curr != '\n' && curr != '\0') { - s_task_gm35_flow.st_cip_ok = 1; + wifi_tmp[tmp_num++] = curr; } - } - //AP模式判定 - else if(s_task_gm35_flow.mode == W600_AP) - { - if(Lc_strStartsWith(pPara,"+IPD,")) + if((tmp_num > 0) && (next == '\r' || next == '\n' || next == '\0')) { - //解析协议,success - //1将id,pwd放入寄存器2.ok=1 - //失败不处理不设置标志位 - //buf: [20]+IPD,0,5:#ccsens:ccsens123$ 后面没\0 - //pPara: +IPD,0,5:#ccsens:ccsens123$ - - int j = 0 , len = p->buf[0]; - p->buf[len+1] = 0;//在+IPD,0,5:#ccsens:ccsens123$后加0 - for(j=0;j") == 0) + { + _s_task_w600_para.st_cip_ok = 1; + } + + tmp_num = 0; } - } - p->ok = 0; } } //------------------------------------------------------ gm35 tasks -------------------------------- - -void L3_task_gm35_flow_init(U8 mode) +void L3_task_W600_flow_init(U8 mode) { - L1_task_init(&s_task_gm35_flow.task); - L3_task_s_go(s_task_gm35_flow,D_task_init); - s_task_gm35_flow.mode = mode; - s_task_gm35_flow.send = 0; - s_task_gm35_flow.conn_ok = 0; -#if 0 - g_at_send_status.send_lock = 0; - g_at_send_status.module_ok = 0; - g_at_send_status.sim_ok = 0; - g_at_send_status.net_ok = 0; - g_at_send_status.gprs_ok = 0; - g_at_send_status.conn_ok = 0; - - g_at_send_status.ins_stmp = 0; //每次发送指令时设置 - - g_at_send_status.heart_stmp = 0; //连接成功时设置 - g_at_send_status.data_stmp = 0; - g_at_send_status.sign_flag = 0; - g_at_send_status.ack_flag = 0; - - g_at_send_status.gprs_last_recv_stmp = 0; //接收到指令时设置 - g_at_send_status.tcp_last_recv_stmp = 0; //连接成功和接收到数据时设置 - g_at_send_status.tcp_close_stmp = 0; //重新上电和检测到断开时设置 - g_at_send_status.gm35_reboot_times = 0; //连接成功时清0 -#endif + L1_task_init(&_s_task_w600_para.task); + L3_task_s_go(_s_task_w600_para,D_task_init); + _s_task_w600_para.mode = mode; + _s_task_w600_para.send = 0; + _s_task_w600_para.conn_ok = 0; } - //------------------------ GM35 Flow Handle ----------------------------------- #define TTSS_TASK_GM35_MODE 0x01 @@ -249,32 +137,25 @@ void L3_task_gm35_flow_init(U8 mode) #define GM35_SEND_HEART_INTERVAL 60 #define GM35_SEND_CIPSTATUS_INTERVAL 5 -void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) +void L2_task_W600_flow_handle(struct _s_task_W600_Para *s) { TTSS_Task_init() - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_1s);//上电等待10s + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_5s);//上电等待1s TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV) if(s->send == 0) {//发送 - L3_gm35_send_str(AT_INS_ATE0); //"ATE0\r\n" //模块查询+关闭回显 + L3_gm35_send_str(AT_INS_ATE0); //"ATE0\r\n" //模块查询+关闭回显 s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; } - else if(1 == s->ap_serve_ok) //等待 - { - s->send = 0; - s->ap_serve_ok = 0; - L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); - } - else if(s->serve_ok == 1 || s->ins_ok == 1) //等待 + else if(s->ins_ok == 1) //等待 { s->send = 0; s->serve_ok = 0; L2_task_go_Tdelay(s->mode == W600_ST ? TTSS_TASK_GM35_FLOW_ST - :TTSS_TASK_GM35_FLOW_ST_SERVE,D_Tdelay_300ms); + :TTSS_TASK_GM35_FLOW_ST_SERVE,D_Tdelay_1s); } - else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 s->send = 0; @@ -290,7 +171,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(s->ins_ok == 1) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,D_Tdelay_300ms); + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,D_Tdelay_1s); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) @@ -300,22 +181,18 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI) if(s->send == 0) {//发送 - L3_gm35_send_str(GET_WIFI_INS()); + L3_gm35_send_str(GET_WIFI_INS()); s->ins_ok = 0; s->st_wifi_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; } - else if(1 == s->ins_ok && 1 == s->st_wifi_ok) //等待 + else if(1 == s->st_wifi_ok) { s->send = 0; - LED2 = 0; - LED2 = ~LED2; - LED2 = ~LED2; - LED2 = ~LED2; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,D_Tdelay_300ms); + R.app_status = WIFI_CONNECTED; //wifi连接成功 + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,D_Tdelay_1s); } - else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 s->send = 0; @@ -332,12 +209,11 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,D_Tdelay_300ms); + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,D_Tdelay_1s); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 - s->send = 0; } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP) @@ -345,15 +221,15 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) {//发送 L3_gm35_send_str(AT_INS_ST_TCP); s->ins_ok = 0; - s->st_cip_ok = 0; + s->serve_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; } - else if(1 == s->ins_ok || 1 == s->st_cip_ok) //等待 + else if(1 == s->serve_ok) //等待 { s->send = 0; - LED3 = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,D_Tdelay_300ms); + R.app_status = TCP_CONNECTED; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,D_Tdelay_1s); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 @@ -370,7 +246,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_300ms); + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_1s); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 @@ -381,38 +257,39 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) {//发送 L3_gm35_send_str(AT_INS_ST_CIPSEND); s->ins_ok = 0; + s->st_cip_ok = 0; s->st_error = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_300ms);//发完之后要等,不然st_error == 0没用 ,没收到error之前也是=0 } - else if(1 == s->st_error) + else if(s->st_cip_ok == 1) { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); - } - else if(0 == s->st_error) - { - s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,0); + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_1s); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 s->send = 0; } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA) - //L0_uart2_sendstr("abcdefg"); - s_task_gm35_flow.conn_ok = 1; L2_task_go(TTSS_TASK_GM35_FLOW_ST_DATA); + + + + + + +/********************s->mode = W600_AP(按键进入)****************************** */ + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_SERVE) if(s->send == 0) {//发送 - L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); + L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); //关闭服务器 s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; @@ -423,7 +300,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) s->st_error = 0; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_300ms); } - else if((s->serve_ok == 1 )|| (s->ins_ok == 1)) //等待 + else if((s->serve_ok == 1)|| (s->ins_ok == 1)) //等待 { s->send = 0; s->serve_ok = 0; @@ -441,14 +318,14 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) s->ins_stmp = s_nos_tick.t_1s; s->send = 1; } - else if(1 == s->ins_ok) //等待 + else if(1 == s->ins_ok) //等待(等待过程中,进入AP模式) { s->send = 0; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,D_Tdelay_300ms); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) - {//超时重发 + {//超时重发(超时,设置单连接模式) s->send = 0; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX0,D_Tdelay_300ms); } @@ -548,7 +425,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) if(s->send == 0) {//发送 L3_gm35_send_str(AT_INS_AP_TCP_TIME); - LED2 = 0; +// LED2 = 0; s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; @@ -564,7 +441,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) {//超时重发 s->send = 0; } - TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT) + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT) //等待TCP连接 if(1 == s->ap_tcp_ok) { s->ap_conn_ok = 0; @@ -573,6 +450,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) s->ins_stmp = s_nos_tick.t_1s; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT,0); } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT) if(1 == s->ap_rec_ok)//收到正确的数据才会ok=1 {//ok回复#ok$\r\n @@ -600,7 +478,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) if(s->send == 0) {//发送 L3_gm35_send_str("#OK$\r\n"); - LED2 = 1; +// LED2 = 1; s->ap_rec_ok = 0; s->ins_ok = 0; s->send = 1; @@ -623,9 +501,9 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - LED1 = 1; - LED2 = 1; - L3_task_gm35_flow_init(W600_ST); +// LED1 = 1; +// LED2 = 1; + L3_task_W600_flow_init(W600_ST); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 diff --git a/source/app/task_w600.h b/source/app/task_w600.h index 3f4f634..801db16 100644 --- a/source/app/task_w600.h +++ b/source/app/task_w600.h @@ -21,33 +21,35 @@ #include "../tpc/ccmodbus.h" ////<<<<<<<<<<<<<<<<<<< GM35模块 AT操作指令 <<<<<<<<<<<<<<<<<<<<<<<< -#define AT_INS_ATE0 "ATE0\r\n" //模块查询+关闭回显 -#define AT_INS_ST "AT+CWMODE=1\r\n" //进入station模式 -//#define AT_INS_ST_WIFI "AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" // -#define AT_INS_ST_CIPMUX0 "AT+CIPMUX=0\r\n" // -#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"www.tall.wiki\",8195\r\n" //连接服务器 +#define AT_INS_ATE1 "ATE1\r\n" //模块查询+打开回显 +#define AT_INS_ATE0 "ATE0\r\n" //模块查询+关闭回显 1-1 +#define AT_INS_ST "AT+CWMODE=1\r\n" //进入station模式 1-2 +// #define AT_INS_ST_WIFI "AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" // 1-3 +#define AT_INS_ST_CIPMUX0 "AT+CIPMUX=0\r\n" // 单连接模式 1-4 +#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.1.2\",777\r\n" //连接服务器 1-5 //#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.0.81\",4001\r\n" //连接服务器 -#define AT_INS_ST_CIPMODE1 "AT+CIPMODE=1\r\n" // -#define AT_INS_ST_CIPSEND "AT+CIPSEND\r\n" // -#define AT_INS_ST_CIPMODE0 "AT+CIPMODE=0\r\n" // +#define AT_INS_ST_CIPMODE1 "AT+CIPMODE=1\r\n" //设置传输模式 0普通传输模式 1透传模式 1-6 +#define AT_INS_ST_CIPSEND "AT+CIPSEND\r\n" //发送数据 1-7 +#define AT_INS_ST_CIPMODE0 "AT+CIPMODE=0\r\n" //设置传输模式 0普通传输模式 1透传模式 2-2 +#define AT_INS_ST_STARTSMART "AT+CWSTARTSMART=2\r\n" //开启SmartConfig,类型为airkiss +#define AT_INS_ST_STOPSMART "AT+CWSTOPSMART\r\n" //关闭SmartConfig - -#define AT_INS_AP "AT+CWMODE=2\r\n" //进入AP模式 -#define AT_INS_AP_WIFI "AT+CWSAP=\"ccsens_pen\",\"ccsens\",10,4,4,0\r\n" //设置AP参数 -#define AT_INS_AP_CIPMUX1 "AT+CIPMUX=1\r\n" //开启多连接 -#define AT_INS_AP_SERVER "AT+CIPSERVER=1,1001\r\n" //建立服务器 -#define AT_INS_AP_TCP_TIME "AT+CIPSTO=300\r\n" +#define AT_INS_AP "AT+CWMODE=2\r\n" //进入AP模式 2-3 +#define AT_INS_AP_WIFI "AT+CWSAP=\"ccsens_pen\",\"ccsens\",10,4,4,0\r\n"//设置AP参数 2-4 +#define AT_INS_AP_CIPMUX1 "AT+CIPMUX=1\r\n" //开启多连接 2-5 +#define AT_INS_AP_SERVER "AT+CIPSERVER=1,1001\r\n" //建立服务器 2-6 +#define AT_INS_AP_TCP_TIME "AT+CIPSTO=300\r\n" //设置 TCP 服务器超时时间 2-7 #define AT_INS_AP_SEND "AT+CIPSENDEX=0,6\r\n" // -#define AT_INS_AP_SERVER_CLOSE "AT+CIPSERVER=0\r\n" //关闭服务器 +#define AT_INS_AP_SERVER_CLOSE "AT+CIPSERVER=0\r\n" //关闭服务器 2-1 #define AT_INS_AP_CLOSE "AT+CWQAP\r\n" //断开AP连接 ////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<< enum _s_w600_mode { W600_ST,W600_AP }; -struct _s_task_gm35_gprs_ +struct _s_task_W600_Para { TS_task task; vU8 send; @@ -83,7 +85,7 @@ struct _s_task_gm35_gprs_ vU8 ack_flag;//下行数据ack vU8 gm35_reboot_times; //gm35重启次数 }; -extern struct _s_task_gm35_gprs_ s_task_gm35_flow; +extern struct _s_task_W600_Para _s_task_w600_para; #define STATUS_GM35_INIT 0 #define STATUS_GM35_MODULE_OK 1 @@ -94,23 +96,13 @@ extern struct _s_task_gm35_gprs_ s_task_gm35_flow; #define BUF_SIZE 5 #define BUF_MAX 32 //注意缓冲区的长度 - -extern struct _s_task_gm35_gprs_ s_task_gm35_flow; - - - - - -extern struct _s_task_gm35_gprs_ s_task_gm35_flow; extern void L3_gm35_send_str(U8 *str); -extern void L3_gm35_send_data(U8 *buf , U16 len); -extern void L3_gm35_rcv_data(U8* buf,U8 num); - -extern void L3_task_gm35_flow_init(U8 mode); -extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s); -extern void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p); +extern void L3_task_W600_flow_init(U8 mode); +extern void L2_task_W600_flow_handle(struct _s_task_W600_Para *s); +// extern void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p); + extern void L3_uart2_wifi_parse(void); #endif diff --git a/source/bsp/bsp_config.c b/source/bsp/bsp_config.c index 75a9ca8..f52057d 100644 --- a/source/bsp/bsp_config.c +++ b/source/bsp/bsp_config.c @@ -59,7 +59,7 @@ void L0_board_config(void) //LED //D_stdIO_P1(BITN7); - //D_stdIO_P5(BITN5); + D_stdIO_P5(BITN5); //IO diff --git a/source/bsp/bsp_config.h b/source/bsp/bsp_config.h index b753abe..dee9f0e 100644 --- a/source/bsp/bsp_config.h +++ b/source/bsp/bsp_config.h @@ -160,7 +160,7 @@ //外设定义 #define LED1 P27 //D4 - //#define LED2 P55 //D4 + #define LED2 P55 //D4 #define LED3 P02 //D4 //#define LED4 P26 //D4 diff --git a/source/clib/clib.c b/source/clib/clib.c index 3ce59dc..1c0fd66 100644 --- a/source/clib/clib.c +++ b/source/clib/clib.c @@ -15,7 +15,11 @@ #include "../msp/uart0.h" //#include "../msp/time.h" - +U8 Lc_strcmp(U8 *s1,U8 *s2) +{ + while(*s1 != 0 && *s2 != 0 && *s1++ == *s2++); + return *s1 - *s2; +} U8 Lc_strStartsWith(U8 *s1,U8 *s2) { while(*s1 && *s2) diff --git a/source/clib/clib.h b/source/clib/clib.h index b1c0f3d..8c76035 100644 --- a/source/clib/clib.h +++ b/source/clib/clib.h @@ -122,6 +122,7 @@ extern U32 Lc_vS32_media(U32 *d, U8 n); extern int Lc_memset(U8 *buf,U8 c,U16 len); extern void Lc_buf_copy_uc(U8 *dst,U8 *src,U16 len); extern U8 Lc_strStartsWith(U8 *s1,U8 *s2); +extern U8 Lc_strcmp(U8 *s1,U8 *s2); void Lc_memset8bits (void *s,unsigned char c,unsigned char n); diff --git a/source/msp/UART0.C b/source/msp/UART0.C index 60911da..f104a6b 100644 --- a/source/msp/UART0.C +++ b/source/msp/UART0.C @@ -33,7 +33,7 @@ void L0_uart0_buf_init(void) ts_uart[uNum0].r.overtime_t = 0; //定义接收处理协议 - ts_uart[uNum0].tp_handler = L0_uartN_overtime_callback; + ts_uart[uNum0].tp_handler = NULL; ts_uart[uNum0].uartx = uNum0; //串口初始化 diff --git a/source/msp/UART2.c b/source/msp/UART2.c index df89efc..e306983 100644 --- a/source/msp/UART2.c +++ b/source/msp/UART2.c @@ -51,6 +51,10 @@ void L0_uart2_buf_init(void) // D_UART2_485_RX() } + + + + /************************************************* UART 中断 *************************************************/ diff --git a/source/msp/UART3.c b/source/msp/UART3.c index d6bea23..1f392be 100644 --- a/source/msp/UART3.c +++ b/source/msp/UART3.c @@ -40,7 +40,8 @@ void L0_uart3_buf_init(void) ts_uart[uNum3].r.overtime_t = 0; //串口协议解析专用字段 - ts_uart[uNum3].tp_handler = L0_uartN_overtime_callback; + // ts_uart[uNum3].tp_handler = L0_uartN_overtime_callback; + ts_uart[uNum3].tp_handler = NULL; ts_uart[uNum3].uartx = uNum3; //串口初始化 diff --git a/source/msp/UART4.C b/source/msp/UART4.C index b6549f4..4116189 100644 --- a/source/msp/UART4.C +++ b/source/msp/UART4.C @@ -49,7 +49,7 @@ void L0_uart4_buf_init(void) ts_uart[uNum4].r.overtime_t = 0; //串口协议解析专用字段 - ts_uart[uNum4].tp_handler = L0_uartN_overtime_callback; + ts_uart[uNum4].tp_handler = NULL; ts_uart[uNum4].uartx = uNum4; //串口初始化 diff --git a/source/msp/UARTX.h b/source/msp/UARTX.h index c2bcf67..87896ef 100644 --- a/source/msp/UARTX.h +++ b/source/msp/UARTX.h @@ -13,16 +13,17 @@ #define D_BRT_COUNT(t,clk,uartBRT) (U16)(65536- (clk / (4 * uartBRT * t))) /////可以依据实际使用独立定制 -#define D_send1_max 64 -#define D_send2_max 64 -#define D_send3_max 128 -#define D_send4_max 64 +// #define D_send1_max 64 +#define D_send1_max 32 +#define D_send2_max 32 +#define D_send3_max 32 +#define D_send4_max 32 /////可以依据实际使用独立定制 -#define D_recv1_max 64 -#define D_recv2_max 64 -#define D_recv3_max 128 -#define D_recv4_max 64 +#define D_recv1_max 32 +#define D_recv2_max 32 +#define D_recv3_max 32 +#define D_recv4_max 32 typedef struct {