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.

553 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/msp_uart2.h"
#include "../msp/msp_uart0.h"
#include "../asp/asp_oid.h"
struct _s_task_gm35_gprs_ s_task_gm35_flow;
4 years ago
//TS_tcp_control ts_tcp_control;
//TS_tcp ts_tcp;
4 years ago
#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)
{
4 years ago
//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);
4 years ago
L0_uart0_sendArray(buf,num+3);
}
}
4 years ago
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;
}
4 years ago
void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p)
{
if (1 == p->ok )
{
U8 *pPara = p->buf + 1;
s_task_gm35_flow.gprs_last_recv_stmp = s_nos_tick.t_1s;
4 years ago
//通用判定
if(Lc_strStartsWith(pPara,"OK"))
{
s_task_gm35_flow.ins_ok = 1;
}
4 years ago
else if(Lc_strStartsWith(pPara,"ERROR"))
{
4 years ago
s_task_gm35_flow.st_error= 1;
}
//Station模式判定
if(s_task_gm35_flow.mode == W600_ST)
{
if(Lc_strStartsWith(pPara,"WIFI GOT IP"))
{
s_task_gm35_flow.st_wifi_ok = 1;
}
else if(Lc_strStartsWith(pPara,"ALREADY CONNECTED"))
{
s_task_gm35_flow.st_cip_ok = 1;
}
}
//AP模式判定
else if(s_task_gm35_flow.mode == W600_AP)
{
4 years ago
if(Lc_strStartsWith(pPara,"+IPD,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<len;j++)
{
if(pPara[j] == ':')
{
break;
}
}
pPara += (j+1);//pPara ===== #ccsens:ccsens123$
L0_uart0_sendstr(pPara);
len = Lc_strlen(pPara);
if(pPara[0] == '#' && pPara[len-1] == '$')
{
pPara[len-1] = 0;
pPara++;//pPara ===== ccsens:ccsens123
for(j=0;j<len;j++)
{
if(pPara[j] == ':')
{
break;
}
}
pPara[j] = 0;//ccsens\0ccsens123
Lc_strcpy(G.st_sid, pPara);
pPara += j+1;//ccsens123
Lc_strcpy(G.st_pwd, pPara);
//标志位
s_task_gm35_flow.ap_rec_ok = 1;
}
}
else if(Lc_strStartsWith(pPara,"0,CONNECT"))
{
s_task_gm35_flow.ap_tcp_ok = 1;
}
else if(Lc_strStartsWith(pPara,"SEND OK"))
{
s_task_gm35_flow.ap_data_ok= 1;
}
else if(Lc_strStartsWith(pPara,"+DIST_STA_IP"))
{
s_task_gm35_flow.ap_conn_ok = 1;
}
}
p->ok = 0;
}
}
//------------------------------------------------------ gm35 tasks --------------------------------
4 years ago
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;
4 years ago
s_task_gm35_flow.send = 0;
4 years ago
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
}
//------------------------ GM35 Flow Handle -----------------------------------
4 years ago
#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_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_TCP_TIME 0x24
#define TTSS_TASK_GM35_FLOW_AP_DATA 0x25
#define TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT 0x26
4 years ago
#define TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT 0x27
4 years ago
#define TTSS_TASK_MODE_TRAN 0x28
#define TTSS_TASK_MODE_SERVER_CLOSE 0x29
#define INS_TIMEOUT 5
#define GM35_SEND_DATA_INTERVAL 300
#define GM35_SEND_HEART_INTERVAL 60
#define GM35_SEND_CIPSTATUS_INTERVAL 5
4 years ago
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_3s);//上电等待10s
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV)
4 years ago
if(s->send == 0)
{//发送
L3_gm35_send_str(AT_INS_ATE0);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
4 years ago
s->send = 1;
4 years ago
}
else if(s->ins_ok == 1) //等待
{
s->send = 0;
L2_task_go_Tdelay(s->mode == W600_ST ? TTSS_TASK_GM35_FLOW_ST
: TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_3s);
}
4 years ago
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{//超时重发
s->send = 0;
}
4 years ago
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_3s);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
4 years ago
{//超时重发
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->ins_ok && 1 == s->st_wifi_ok) //等待
{
s->send = 0;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,D_Tdelay_3s);
}
4 years ago
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_3s);
}
4 years ago
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
4 years ago
{//超时重发
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->ins_stmp = s_nos_tick.t_1s;
s->send = 1;
}
else if(1 == s->ins_ok || 1 == s->st_cip_ok) //等待
{
s->send = 0;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,D_Tdelay_3s);
}
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_3s);
}
4 years ago
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_500ms);//发完之后要等,不然st_error == 0没用 ,没收到error之前也是=0
}
4 years ago
else if(1 == s->st_error)
{
4 years ago
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);
}
4 years ago
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{//超时重发
s->send = 0;
4 years ago
}
4 years ago
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA)
//L0_uart2_sendstr("abcdefg");
4 years ago
s_task_gm35_flow.conn_ok = 1;
L2_task_go(TTSS_TASK_GM35_FLOW_ST_DATA);
4 years ago
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;
}
4 years ago
else if(1 == s->ins_ok) //等待
{
s->send = 0;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,D_Tdelay_3s);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
4 years ago
{//超时重发
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_3s);
}
4 years ago
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->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_CIPMUX1,D_Tdelay_3s);
}
4 years ago
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
4 years ago
{//超时重发
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_3s);
}
4 years ago
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_3s);
}
4 years ago
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);
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_3s);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
4 years ago
{//超时重发
s->send = 0;
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT)
if(1 == s->ap_tcp_ok)
{
4 years ago
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
L0_uart0_sendstr("ap config ok");
L3_gm35_send_str(AT_INS_AP_SEND);//进入发送模式
L2_task_go_Tdelay(TTSS_TASK_MODE_TRAN,D_Tdelay_1s);
}
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);
}
TTSS_Task_step(TTSS_TASK_MODE_TRAN)
if(s->send == 0)
{//发送
L3_gm35_send_str("#OK$\r\n");
s->ins_ok = 0;
s->ap_data_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
s->send = 1;
}
else if(1 == s->ap_data_ok) //等待
{
s->send = 0;
s->ap_tcp_ok = 0;
L2_task_go_Tdelay(TTSS_TASK_MODE_SERVER_CLOSE,D_Tdelay_3s);
}
4 years ago
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;
L3_task_gm35_flow_init(W600_ST);
}
4 years ago
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{//超时重发
s->send = 0;
}
TTSS_Task_end();
}