//////////////////////////////////////////////////////////////////////////// ///@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 "../app/task_w600.h" #include "../app/task_w600_ptc.h" #include "app_config.h" #include "../msp/uart0.h" #include "../msp/uart2.h" #include "../asp/asp_oid.h" #include "../bsp/bsp_config.h" #include "../bsp/bsp_WT2605B.h" struct _s_task_W600_Para _s_task_w600_para; void L3_gm35_send_str(U8 *str) { L0_uart2_sendstr(str); if(G.debug) { L0_uart0_sendstr(str); } } 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[128], wifi_tmp[64]; U8 *wifi_rev_buf, 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.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; if (_s_task_w600_para.st_cip_ok == 1) { // L0_uart0_uc('$'); // L0_uart0_sendArrayHex(wifi_rev_buf,ts_uart[uNum2].r.num); // L0_uart0_0d0a(); // 获取今日训练内容 if (wifi_rev_buf[3] == 0xA2) { if (1 == parse_QueryAckPkg(wifi_rev_buf,ts_uart[uNum2].r.num)) { _s_task_w600_para.Recieve_QueryAck_Flag = 1; } } else if (wifi_rev_buf[3] == 0xA0) { // 心跳包暂时不处理 } return; } tmp_num = 0; while(*ptr != 0) { U8 curr = *ptr++; U8 next = *ptr; if(curr != '\r' && curr != '\n' && curr != '\0') { wifi_tmp[tmp_num++] = curr; } if((tmp_num > 0) && (next == '\r' || next == '\n' || next == '\0')) { //当前行结束 wifi_tmp[tmp_num] = 0; L0_uart0_uc('#'); L0_uart0_sendstr(wifi_tmp); L0_uart0_0d0a(); if(Lc_strcmp(wifi_tmp,"busy p...") == 0) { _s_task_w600_para.busy = 1; } else if(Lc_strcmp(wifi_tmp,"OK") == 0) { _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 || Lc_strcmp(wifi_tmp,"ALREADY CONNECTED") == 0) { _s_task_w600_para.serve_ok = 1; } else if(Lc_strcmp(wifi_tmp,"smartconfig connected wifi") == 0 ) { _s_task_w600_para.smartc_ok = 1; } else if(Lc_strcmp(wifi_tmp,">") == 0) { _s_task_w600_para.st_cip_ok = 1; } else if(Lc_strStartsWith(wifi_tmp,"ssid:")) { Lc_strcpy(G.st_sid,wifi_tmp + 5); } else if(Lc_strStartsWith(wifi_tmp,"password:")) { Lc_strcpy(G.st_pwd,wifi_tmp + 9); L0_Iap_Program_array(EEPROM_DATA_ADDR,(U8*)&G,sizeof(G)); } tmp_num = 0; } } } } //------------------------------------------------------ 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; _s_task_w600_para.last_send_seconds = 0; _s_task_w600_para.st_cip_ok = 0; // 放到TCP连接成功是初始化 // _s_task_w600_para.Send_Query_Flag = 1; // _s_task_w600_para.Recieve_QueryAck_Flag = 0; // _s_task_w600_para.Send_Submit_Flag = 0; // _s_task_w600_para.queryackpkg.Plan_ID[0] = 0; // _s_task_w600_para.queryackpkg.Plan_ID[1] = 0; } //------------------------ 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 TTSS_TASK_GM35_FLOW_ST_CIPOFF 0x30 #define TTSS_TASK_GM35_FLOW_ST_SMARTCONFIG 0x32 #define TTSS_TASK_GM35_FLOW_ST_SMARTCWATING 0x33 #define TTSS_TASK_GM35_FLOW_ST_SAMRTCSTOP 0x34 #define TTSS_TASK_GM35_FLOW_ST_SAMRTCSTOPPED 0x35 #define TTSS_TASK_GM35_SEND_TPC 0x36 #define TTSS_TASK_GM35_SEND_HEARTBEAT 0x37 #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_ST_CIPOFF,D_Tdelay_5s);//上电等待5s TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPOFF) if(s->send == 0) {//发送 L3_gm35_send_str("+++"); //关闭CIP s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 0; s->busy = 0; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_1s); } // else if(1 == s->ins_ok) // { // s->send = 0; // s->st_error = 0; // L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_SMARTCONFIG,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_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; s->busy = 0; } else if(s->busy == 0 && 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_SMARTCONFIG,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; s->busy = 0; } else if(s->busy == 0 && 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; s->busy = 0; } else if(s->busy == 0 && 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; s->busy = 0; } else if(s->busy == 0 && 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->serve_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; s->busy = 0; } else if(s->busy == 0 && 1 == s->serve_ok) //等待 { s->send = 0; R.app_status = TCP_CONNECTED; // 记录时间 _s_task_w600_para.Send_Query_Flag = 1; _s_task_w600_para.Recieve_QueryAck_Flag = 0; _s_task_w600_para.Send_Submit_Flag = 0; _s_task_w600_para.queryackpkg.Plan_ID[0] = 0; _s_task_w600_para.queryackpkg.Plan_ID[1] = 0; 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; s->busy = 0; } else if(s->busy == 0 && 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_cip_ok = 0; s->st_error = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; s->busy = 0; } else if(s->busy == 0 && s->st_cip_ok == 1) { s->send = 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) if (s->Send_Query_Flag == 1) { U8 num = constructor_QueryTaskPkg(); s->Send_Query_Flag = 0; _s_task_w600_para.last_send_seconds = s_nos_tick.t_1s; L0_uart2_sendArray(&_s_task_w600_para.querytaskpkg,num); // L0_uart0_uc('Q'); // L0_uart0_sendArray(&_s_task_w600_para.querytaskpkg,num); } else if (s->Send_Submit_Flag == 1) { U8 num = constructor_SubmitTaskPkg(); s->Send_Submit_Flag = 0; _s_task_w600_para.last_send_seconds = s_nos_tick.t_1s; L0_uart2_sendArray(&_s_task_w600_para.submittaskpkg,num); // L0_uart0_uc('S'); // L0_uart0_sendArray(&_s_task_w600_para.submittaskpkg,num); } else if (s->Recieve_QueryAck_Flag == 1) { s->Recieve_QueryAck_Flag = 0; // 正常训练 if (_s_task_w600_para.queryackpkg.Tranning_Status == 0) { L2_WT2605B_Broadcast_TPC(&s->queryackpkg.Game_ID); L0_uart0_uchex('A'); L0_uart0_sendArray(&_s_task_w600_para.queryackpkg,15); } // 训练完成 else if (_s_task_w600_para.queryackpkg.Tranning_Status == 1) { L2_WT2605B_Broadcast(&audio_tcp_complete); L0_uart0_uchex('A'); L0_uart0_sendArray(&_s_task_w600_para.queryackpkg,15); } // 无训练任务 else if (_s_task_w600_para.queryackpkg.Tranning_Status == 2) { L2_WT2605B_Broadcast(&audio_tcp_noplan); L0_uart0_uchex('A'); L0_uart0_sendArray(&_s_task_w600_para.queryackpkg,15); } } L2_task_go_Tdelay(TTSS_TASK_GM35_SEND_HEARTBEAT,D_Tdelay_100ms); TTSS_Task_step(TTSS_TASK_GM35_SEND_HEARTBEAT) if (s_nos_tick.t_1s - _s_task_w600_para.last_send_seconds > 60) { U8 num = constructor_HeartBeatPkg(); L0_uart2_sendArray(&_s_task_w600_para.heartbeatpkg,num); // L0_uart0_sendArray(&_s_task_w600_para.heartbeatpkg,num); _s_task_w600_para.last_send_seconds = s_nos_tick.t_1s; } L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_100ms); /*******************************************s->mode = W600_SC(按键进入)********************************************** */ TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_SMARTCONFIG) if(s->send == 0) {//发送 L3_gm35_send_str(AT_INS_ST_STARTSMART); //发送SmartConfig模式控制指令,开启SmartConfig模式 s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; s->busy = 0; } else if(s->busy == 0 && 1 == s->ins_ok) { s->send = 0; s->smartc_ok = 0; R.app_status = WIFI_CONFIG_Phone; L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_SMARTCWATING,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_SMARTCWATING) if(s->smartc_ok == 1) { L0_uart0_sendstr("SmartConfig Success!"); L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_SAMRTCSTOP,D_Tdelay_1s); } TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_SAMRTCSTOP) if(s->send == 0) {//发送 L3_gm35_send_str(AT_INS_ST_STOPSMART); //发送SmartConfig模式控制指令,退出SmartConfig模式 s->ins_ok = 0; s->ins_stmp = s_nos_tick.t_1s; s->send = 1; s->busy = 0; } else if(s->busy == 0 && 1 == s->ins_ok) { s->send = 1; R.app_status = WIFI_CONFIG_COMPLETE; } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 s->send = 0; } TTSS_Task_end(); }