//////////////////////////////////////////////////////////////////////////// ///@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/uart2.h" #include "../msp/uart0.h" struct _s_task_gm35_gprs_ s_task_gm35_flow; #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 , U8 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); } } void L3_uart2_exp_protocol(TS_Handle_0d0a *p) { if (1 == p->ok ) { 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; } if(Lc_strStartsWith(pPara,"WIFI GOT IP")) { s_task_gm35_flow.wifi_ok = 1; } if(Lc_strStartsWith(pPara,"CONNECT")) { s_task_gm35_flow.wifi_ok = 1; } p->ok = 0; } } //------------------------------------------------------ gm35 tasks -------------------------------- void L3_task_gm35_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; #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_FLOW_ATEQV 0x01 #define TTSS_TASK_GM35_FLOW_ATEQV_WAIT 0x02 #define TTSS_TASK_GM35_FLOW_ST 0x03 #define TTSS_TASK_GM35_FLOW_ST_WAIT 0x04 #define TTSS_TASK_GM35_FLOW_ST_WIFI 0x05 #define TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT 0x06 #define TTSS_TASK_GM35_FLOW_ST_CIPMUX0 0x07 #define TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT 0x08 #define TTSS_TASK_GM35_FLOW_ST_TCP 0x09 #define TTSS_TASK_GM35_FLOW_ST_TCP_WAIT 0x0A #define TTSS_TASK_GM35_FLOW_ST_CIPMODE1 0x0B #define TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT 0x0C #define TTSS_TASK_GM35_FLOW_ST_CIPSEND 0x0D #define TTSS_TASK_GM35_FLOW_ST_CIPSEND_WAIT 0x0E #define TTSS_TASK_GM35_FLOW_ST_DATA 0x0F #define TTSS_TASK_GM35_FLOW_AP 0x20 #define TTSS_TASK_GM35_FLOW_AP_WAIT 0x21 #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_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) { TTSS_Task_init() L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_10s);//上电等待10s TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV) L3_gm35_send_str(AT_INS_ATE0); s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV_WAIT,D_Tdelay_300ms); TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV_WAIT) if(1 == s->ins_ok) { if(s->mode == W600_ST) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0); } else if(s->mode == W600_AP) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,0); } } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,0); } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST) L3_gm35_send_str(AT_INS_ST); s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_300ms); TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WAIT) if(1 == s->ins_ok) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,0); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0); } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI) L3_gm35_send_str(AT_INS_ST_WIFI); s->ins_ok = 0; s->wifi_ok = 0; s->ins_stmp = s_nos_tick.t_1s; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT,D_Tdelay_300ms); TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT) if(1 == s->ins_ok && 1 == s->wifi_ok) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,0); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,0); } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0) L3_gm35_send_str(AT_INS_ST_CIPMUX0); s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT,D_Tdelay_300ms); TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT) if(1 == s->ins_ok) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,0); } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP) L3_gm35_send_str(AT_INS_ST_TCP); s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP_WAIT,D_Tdelay_5s); TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP_WAIT) if(1 == s->ins_ok) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,0); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1) L3_gm35_send_str(AT_INS_ST_CIPMODE1); s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT,D_Tdelay_300ms); TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT) if(1 == s->ins_ok) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,0); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,0); } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPSEND) L3_gm35_send_str(AT_INS_ST_CIPSEND); s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_300ms); TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA) L0_uart0_uc('A'); L0_uart2_sendstr("abcdefg"); L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_5s); TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP) L0_uart0_uc('C'); L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_10s); TTSS_Task_end(); }