24 changed files with 588 additions and 361 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,273 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@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 "../tpc/at0d0a.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; |
||||
|
} |
||||
|
|
||||
|
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 2 |
||||
|
#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->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) |
||||
|
{ |
||||
|
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_300ms); |
||||
|
|
||||
|
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'); |
||||
|
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'); |
||||
|
L0_uart2_sendstr("abcdefg"); |
||||
|
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_10s); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
@ -0,0 +1,99 @@ |
|||||
|
////////////////////////////////////////////////////////////////////////////
|
||||
|
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @file bsp_gc6133.c.h
|
||||
|
/// @brief bsp @ driver config
|
||||
|
///-------------------------------------------------------------------------
|
||||
|
/// @version 1.0
|
||||
|
/// @author CC
|
||||
|
/// @date 20180331
|
||||
|
/// @note cc_AS_stc02
|
||||
|
|
||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
|
#ifndef _app_task_w600_H |
||||
|
#define _app_task_w600_H |
||||
|
|
||||
|
#include "../bsp/bsp_config.h" |
||||
|
#include "../bsp/w600.h" |
||||
|
#include "../ctask/task.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" //GPRS操作指令
|
||||
|
#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.0.79\",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" //查询连接状态
|
||||
|
|
||||
|
////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
|
enum _s_w600_mode |
||||
|
{ |
||||
|
W600_ST,W600_AP |
||||
|
}; |
||||
|
struct _s_task_gm35_gprs_ |
||||
|
{ |
||||
|
TS_task task; |
||||
|
|
||||
|
vU8 ins_ok; |
||||
|
vU8 mode; |
||||
|
|
||||
|
vU8 send_lock; |
||||
|
vU8 module_ok; |
||||
|
vU8 sim_ok; |
||||
|
vU8 net_ok; |
||||
|
vU8 gprs_ok; |
||||
|
vU8 conn_ok; |
||||
|
vU8 status_query_ok; |
||||
|
vU32 ins_stmp; //指令时间戳
|
||||
|
vU32 gprs_last_recv_stmp; //上次接收指令时间戳
|
||||
|
vU32 tcp_last_recv_stmp; //上次接收数据时间戳
|
||||
|
vU32 tcp_conn_stmp; //断开连接时间戳
|
||||
|
vU32 tcp_close_stmp; //断开连接时间戳
|
||||
|
|
||||
|
vU32 heart_stmp; //连接成功后,等待发送时间
|
||||
|
vU32 data_stmp;//数据发送时间记录
|
||||
|
|
||||
|
vU8 sign_flag; //发送登录数据标志
|
||||
|
vU8 ack_flag;//下行数据ack
|
||||
|
vU8 gm35_reboot_times; //gm35重启次数
|
||||
|
}; |
||||
|
|
||||
|
#define STATUS_GM35_INIT 0 |
||||
|
#define STATUS_GM35_MODULE_OK 1 |
||||
|
#define STATUS_GM35_SIM_OK 2 |
||||
|
#define STATUS_GM35_NET_OK 3 |
||||
|
#define STATUS_GM35_GPRS_OK 4 |
||||
|
#define STATUS_GM35_TCP_OK 5 |
||||
|
#define BUF_SIZE 5 |
||||
|
#define BUF_MAX 32 //注意缓冲区的长度
|
||||
|
|
||||
|
extern struct _s_task_gm35_gprs_ s_task_gm35_flow; |
||||
|
|
||||
|
extern void L3_task_gm35_flow_init(U8 mode); |
||||
|
extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s); |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -1,5 +1,16 @@ |
|||||
#include "w600.h" |
#include "w600.h" |
||||
void L1_w600_init(U8 mode) |
|
||||
|
void L2_w600_init() |
||||
{ |
{ |
||||
s->mode = mode; |
L2_w600_enable(); |
||||
|
} |
||||
|
|
||||
|
void L2_w600_enable() |
||||
|
{ |
||||
|
//W600_ENABLE();
|
||||
|
} |
||||
|
|
||||
|
void L2_w600_disable() |
||||
|
{ |
||||
|
//W600_DISABLE();
|
||||
} |
} |
@ -1,2 +1,15 @@ |
|||||
#ifndef __W600_H__ |
#ifndef BSP_GM35_H |
||||
#define __W600_H__ |
#define BSP_GM35_H |
||||
|
|
||||
|
#include "bsp_config.h" |
||||
|
|
||||
|
#define W600_VBAT_EN P67 |
||||
|
#define W600_DISABLE() W600_VBAT_EN = 0 |
||||
|
#define W600_ENABLE() W600_VBAT_EN = 1 |
||||
|
|
||||
|
|
||||
|
extern void L2_w600_init(); |
||||
|
extern void L2_w600_enable(); |
||||
|
extern void L2_w600_disable(); |
||||
|
|
||||
|
#endif |
@ -1,47 +0,0 @@ |
|||||
#include "0d0a.h" |
|
||||
#include "../clib/clib.h" |
|
||||
|
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
||||
//L1_uart_2strbuf(&s_uart0_rec);s_uart0_rec.ok = 2
|
|
||||
/// 接收以od oa为结束的标准的assci码的协议 类似 send xx (回车换行)测试时注意以回车换行
|
|
||||
/// 为结束标志,也就是发送的数据后面 必须有回车换行 :0x0d 0x0a
|
|
||||
|
|
||||
|
|
||||
//对于连续的多条协议,比如:abcdefg\r\n12345\r\n,如果前一条处理不及时,可能会被后一条覆盖
|
|
||||
void L1_s2b_0d0a(struct _tp_handler_x *p) //reentrant
|
|
||||
{ |
|
||||
if(p->head == 0) |
|
||||
{ |
|
||||
p->head = 1; |
|
||||
p->num = 0; |
|
||||
} |
|
||||
|
|
||||
if(p->num >= D_tp_handle_x_len) |
|
||||
{ |
|
||||
p->num = 0; |
|
||||
} |
|
||||
p->cashe[1] = p->cashe[0]; |
|
||||
p->cashe[0] = p->reg;//
|
|
||||
|
|
||||
p->buf[++p->num] = p->cashe[0]; |
|
||||
//p->buf[++p->num] = p->cashe[0];
|
|
||||
|
|
||||
if ((p->num > 2) && (p->cashe[0] == 0x0a) && (p->cashe[1] == 0x0d))// 0d0a
|
|
||||
{ |
|
||||
if(1 != p->ok) |
|
||||
{ |
|
||||
p->buf[0] = p->num - 2; //去掉0d0a
|
|
||||
if(p->sp2 != NULL) //备份缓冲区不为null
|
|
||||
{ |
|
||||
//byte_copy_uc(p->buf + 1,p->__buf,p->num-2); //经过调试,此处不要调用外部函数,入栈出栈会增加出错风险
|
|
||||
for(p->i=0;p->i<p->buf[0]+1;p->i++) |
|
||||
{ |
|
||||
p->sp2[p->i] = p->buf[p->i]; |
|
||||
} |
|
||||
} |
|
||||
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
|
|
||||
} |
|
||||
p->head = 0; |
|
||||
} |
|
||||
} |
|
||||
|
|
@ -1,33 +0,0 @@ |
|||||
#ifndef TPC_0D0A_H |
|
||||
#define TPC_0D0A_H |
|
||||
|
|
||||
#include "tpc_x.h" |
|
||||
|
|
||||
///-----------------------------------------------------------------------------------------
|
|
||||
//#define D_s_SSTR_0D0A_len 64 //str类的协议需要长度大一些,容易bug的地方,限制为接收64bytes的数据
|
|
||||
#if 0 |
|
||||
#define FLAG_NONE 0 |
|
||||
#define FLAG_DISCARD 1 |
|
||||
#define FLAG_CCID 2 |
|
||||
#define FLAG_CIP 3 |
|
||||
typedef struct _s_PC1_0D0A_ |
|
||||
{//8byte
|
|
||||
vU8 reg; |
|
||||
// vU8 sub_num; //接收到的数目注意数据长度的范围
|
|
||||
vU8 head; //接收标志头标志
|
|
||||
|
|
||||
vU8 cashe[4]; |
|
||||
//vU8 filter1;
|
|
||||
//vU8 filter2;
|
|
||||
vU8 num; //接收到的数据的计数, 随着数据接收而变化注意数据长度的范围
|
|
||||
|
|
||||
vU8 ok; //接收协议ok标志
|
|
||||
vU8 max; //接收到的数目的最大值
|
|
||||
vU8 __buf[D_s_SSTR_0D0A_len+1];//buffer
|
|
||||
vU8 buf[D_s_SSTR_0D0A_len+1];//array的第一位是 长度 //协议缓冲
|
|
||||
// U8 pro[16]; ///解析协议用
|
|
||||
}TS_Handle_0d0a; |
|
||||
#endif |
|
||||
extern void L1_s2b_0d0a(struct _tp_handler_x *p); //reentrant;
|
|
||||
|
|
||||
#endif |
|
@ -0,0 +1,37 @@ |
|||||
|
#include "at0d0a.h" |
||||
|
#include "../clib/clib.h" |
||||
|
|
||||
|
void L1_s2b_0d0a(struct _s_PC1_0D0A_ *p)// reentrant
|
||||
|
{ |
||||
|
if(p->head == 0) |
||||
|
{ |
||||
|
p->head = 1; |
||||
|
p->num = 0; |
||||
|
} |
||||
|
|
||||
|
if(p->num >= D_s_SSTR_0D0A_len)//128
|
||||
|
{ |
||||
|
p->num = 0; |
||||
|
} |
||||
|
p->cashe[1] = p->cashe[0]; |
||||
|
p->cashe[0] = p->reg;//
|
||||
|
|
||||
|
p->__buf[p->num++] = p->reg; |
||||
|
|
||||
|
if ((p->cashe[0] == 0x0a) && (p->cashe[1] == 0x0d))// 0d0a
|
||||
|
{ |
||||
|
if((p->num > 2) && (p->__buf[p->num-3] != ':')) //排除掉 +CIPSTATUS(a9):
|
||||
|
{ |
||||
|
if(1 != p->ok) |
||||
|
{ |
||||
|
p->buf[0] = p->num - 2; //去掉0d0a
|
||||
|
Lc_buf_copy_uc(p->buf + 1,p->__buf,p->num-2); |
||||
|
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
|
||||
|
} |
||||
|
} |
||||
|
p->head = 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,23 @@ |
|||||
|
#ifndef TPC_AT0D0A_H |
||||
|
#define TPC_AT0D0A_H |
||||
|
|
||||
|
#include "tpc_x.h" |
||||
|
|
||||
|
///-----------------------------------------------------------------------------------------
|
||||
|
#define D_s_SSTR_0D0A_len 128 //str类的协议需要长度大一些,容易bug的地方,限制为接收64bytes的数据
|
||||
|
typedef struct _s_PC1_0D0A_ |
||||
|
{//8byte
|
||||
|
vU8 reg; |
||||
|
vU8 head; //接收标志头标志
|
||||
|
vU8 cashe[4]; |
||||
|
vU8 num; //接收到的数据的计数, 随着数据接收而变化注意数据长度的范围
|
||||
|
vU8 ok; //接收协议ok标志
|
||||
|
vU8 max; //接收到的数目的最大值
|
||||
|
vU8 __buf[D_s_SSTR_0D0A_len+1];//buffer
|
||||
|
vU8 buf[D_s_SSTR_0D0A_len+1];//array的第一位是 长度 //协议缓冲
|
||||
|
vU8 setflag; //读取串口过程中设置标志
|
||||
|
}TS_Handle_0d0a; |
||||
|
extern void L1_s2b_0d0a(struct _s_PC1_0D0A_ *p);// reentrant;
|
||||
|
|
||||
|
|
||||
|
#endif |
Loading…
Reference in new issue