You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

515 lines
13 KiB

////////////////////////////////////////////////////////////////////////////
///@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;
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[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;
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,"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,">") == 0)
{
_s_task_w600_para.st_cip_ok = 1;
}
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;
}
//------------------------ 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(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->serve_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
s->send = 1;
}
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_cip_ok = 0;
s->st_error = 0;
s->ins_stmp = s_nos_tick.t_1s;
s->send = 1;
}
else if(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)
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();
}