diff --git a/keilp/cc_as_stc02_ps5ws.uvprojx b/keilp/cc_as_stc02_ps5ws.uvprojx
index 6782846..b131346 100644
--- a/keilp/cc_as_stc02_ps5ws.uvprojx
+++ b/keilp/cc_as_stc02_ps5ws.uvprojx
@@ -332,11 +332,6 @@
1
..\source\app\task_register.c
-
- task_modbus.c
- 1
- ..\source\app\task_modbus.c
-
app_config.c
1
@@ -347,6 +342,26 @@
1
..\source\app\task_w600.c
+
+ task_key.c
+ 1
+ ..\source\app\task_key.c
+
+
+ app_task_tcp_control.c
+ 1
+ ..\source\app\app_task_tcp_control.c
+
+
+ task_pen_head.c
+ 1
+ ..\source\app\task_pen_head.c
+
+
+ app_task_tcp.c
+ 1
+ ..\source\app\app_task_tcp.c
+
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_sym b/si4/ps5ws.si4project/soft_ps5ws.sip_sym
index f5b3cb8..b5284a5 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_sym and b/si4/ps5ws.si4project/soft_ps5ws.sip_sym differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xab b/si4/ps5ws.si4project/soft_ps5ws.sip_xab
index 36c17d9..7f04d0b 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xab and b/si4/ps5ws.si4project/soft_ps5ws.sip_xab differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xad b/si4/ps5ws.si4project/soft_ps5ws.sip_xad
index 1484248..7b602f6 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xad and b/si4/ps5ws.si4project/soft_ps5ws.sip_xad differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xc b/si4/ps5ws.si4project/soft_ps5ws.sip_xc
index fc42b93..b9d5911 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xc and b/si4/ps5ws.si4project/soft_ps5ws.sip_xc differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xf b/si4/ps5ws.si4project/soft_ps5ws.sip_xf
index 5ac518c..5139dad 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xf and b/si4/ps5ws.si4project/soft_ps5ws.sip_xf differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xm b/si4/ps5ws.si4project/soft_ps5ws.sip_xm
index 8951bf7..53c354e 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xm and b/si4/ps5ws.si4project/soft_ps5ws.sip_xm differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xr b/si4/ps5ws.si4project/soft_ps5ws.sip_xr
index 3db5d74..fecb06f 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xr and b/si4/ps5ws.si4project/soft_ps5ws.sip_xr differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xsb b/si4/ps5ws.si4project/soft_ps5ws.sip_xsb
index c1ff671..e7394d4 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xsb and b/si4/ps5ws.si4project/soft_ps5ws.sip_xsb differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xsd b/si4/ps5ws.si4project/soft_ps5ws.sip_xsd
index db7bf5f..bef1f5c 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xsd and b/si4/ps5ws.si4project/soft_ps5ws.sip_xsd differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.siproj b/si4/ps5ws.si4project/soft_ps5ws.siproj
index c96ede9..5d040f0 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.siproj and b/si4/ps5ws.si4project/soft_ps5ws.siproj differ
diff --git a/source/app/app_config.c b/source/app/app_config.c
index e43bacb..9d74fbc 100644
--- a/source/app/app_config.c
+++ b/source/app/app_config.c
@@ -4,11 +4,15 @@
#include "../msp/eeprom.h"
#include "../clib/clib.h"
+
+
GlobalParam G;
GlobalRegister R;
+WR_Buf wr_buf;
void L3_param_init(void)
{
+ U8 i;
G.debug = 1;
//station模式状态
G.st_status = 0; //0:none 1:wifi_ok 2:tcp_connect_ok
@@ -22,6 +26,13 @@ void L3_param_init(void)
Lc_strcpy(G.ap_sid,"cc_pen_ap");
//ap模式pwd
Lc_strcpy(G.ap_pwd,"ccsens123");
+
+ wr_buf.wIndex = wr_buf.rIndex = 0;
+ wr_buf.maxsize = POINT_LEN;
+ for(i=0;irIndex+1)%(p->maxsize) == p->wIndex)
+ p->full = 1;
+}
+U16 Lc_write_cyc_buf(PenPoint *wbuf ,WR_Buf *wp ,U16 wlen)
+{
+ U8 nulllen = (wp->maxsize - wp->wIndex + wp->rIndex - 1) % wp->maxsize;
+ if(nulllen >= wlen)
+ {
+ wp->readdr = (wp->wIndex + wlen) % wp->maxsize;
+ if(wp->readdr > wp->wIndex || wp->readdr == 0)
+ {
+ Lc_buf_copy_uc((U8 *)&wp->buf[wp->wIndex], (U8 *)wbuf, wlen);
+ }
+ else
+ {
+ wp->relen = wlen - wp->readdr;
+ Lc_buf_copy_uc((U8 *)&wp->buf[wp->wIndex], (U8 *)wbuf, wp->relen);
+ Lc_buf_copy_uc((U8 *)&wp->buf[0], (U8 *)(wbuf+wp->relen), wp->readdr);
+ }
+ wp->wIndex = wp->readdr;
+ return sizeof(wbuf);
+ }
+ else
+ {
+ //L0_uart0_sendstr("X");
+ return 0;
+ }
+
+}
+U16 Lc_read_cyc_buf(PenPoint *rbuf ,WR_Buf *rp ,U16 rlen)
+{
+ U8 validlen = (rp->maxsize - rp->rIndex + rp->wIndex) % rp->maxsize;
+ if(validlen >= rlen)
+ {
+ rp->readdr = (rp->rIndex + rlen) % rp->maxsize;
+ if(rp->readdr < rp->wIndex || rp->readdr == 0)
+ {
+ Lc_buf_copy_uc((U8 *)rbuf, (U8 *)&rp->buf[rp->rIndex],rlen);
+ }
+ else
+ {
+ rp->relen = rlen - rp->readdr;
+ Lc_buf_copy_uc((U8 *)rbuf,(U8 *) &rp->buf[rp->rIndex], rp->relen);
+ Lc_buf_copy_uc((U8 *)(rbuf+rp->relen), (U8 *)&rp->buf[0], rp->readdr);
+ }
+ rp->rIndex = rp->readdr;
+ return sizeof(rbuf);
+ }
+ else
+ {
+ return 0;
+ }
}
diff --git a/source/app/app_config.h b/source/app/app_config.h
index 9fb5cab..d0a91a8 100644
--- a/source/app/app_config.h
+++ b/source/app/app_config.h
@@ -3,13 +3,17 @@
#include "../clib/type.h"
#include "../bsp/bsp_config.h"
-#include "../bsp/bsp_config.h"
#include "../tpc/ccmodbus.h"
+#include "../tpc/modbus.h"
+
+
#define APP_VERSION 0x10
-#define SLAVER_TCP_SERVER_ID 0x10
+#define SLAVER_TCP_SERVER_ID 0x14
+#define APP_VERSION_HEX 0x11 //高4位主版本,低4位次版本
#define D_COUNT_WEIGHT(adc) (U32)((adc) / D_ADS1213_GAIN_VAL / R.p.lmd * R.p.weight_max * 1000 / (2 * 0x7FFFFF / 1000 ))
#define D_COUNT_ADC(wInG) (U32)((wInG) * D_ADS1213_GAIN_VAL * R.p.lmd * (2 * 0x7FFFFF / 1000) / R.p.weight_max / 1000)
+#define POINT_LEN 48
//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Register CONFIG
@@ -18,42 +22,34 @@
//#define D_blur_threshold_2_1(threshold) (U32) ( 1.0 * threshold *(2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd) / (1000.0 * R.p.weight_max ))
-#define CCMD_SLAVER_INFO_MAX 4
+#define CCMD_SLAVER_INFO_MAX 3
+typedef struct pen_point
+{
+ U16 x_axis;//横坐标
+ U16 y_axis;//纵坐标
+ U32 time;//时间
+}PenPoint;
typedef struct global_register
{
//RO Register
- U16 w600_mode;
- U16 pen_sta;
- U16 pen_net_sta;
- U16 pen_ele_sta;
- U16 question_sta;
- U16 spee_save;
- U32 oid3_order;
- U16 pack_order;
- U16 frame_order;
- U32 x_axis1;
- U32 y_axis1;
- U32 time1;
- U32 x_axis2;
- U32 y_axis2;
- U32 time2;
- CCMD_SLAVER_INFO ccmd_slaver_info[CCMD_SLAVER_INFO_MAX];
+ U16 pen_sta;//点读笔状态
+ U16 pen_net_sta;//联网状态
+ U16 pen_ele_sta;//电池电量
+ U16 question_sta;//问题 0上题 1下题
+ U16 spee_order;//语音序号
+ U32 oid3_order;//序号通知(oid3普通码)
- //RW Register
- U16 reserved2;
- U16 zero; //清0标志,写入任何值清0(去皮)
- U16 status_eep_save; //eep写入寄存器,1则写入eep并清0
- //U16 reset; //reset标志,写入任何值,所有参数恢复初始值
- struct
- { //需要持久化的参数,不能超过72字节,否则会导致eeprom溢出
- U16 slaver_id;
- }p;
- U16 reserved3;
-
+ char null[25];
+
+ U16 pack_order;//包序号
+ U16 frame_order;//帧序号
+ U16 pack_mask;//包标志
+ PenPoint points[POINT_LEN];
}GlobalRegister;
extern GlobalRegister R;
+
//寄存器内存基地址
#define REG_MEM_BASE ((U16*)(&R)) //寄存器基础地址(本文件外部不应该使用该宏定义)
//变量地址转寄存器
@@ -64,15 +60,12 @@ extern GlobalRegister R;
-
-
-
-
//STEP 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Global Variables CONFIG
typedef struct global_param
{
//调试模式
U8 debug;
+ U8 reset;
//station模式状态
U8 st_status; //0:none 1:wifi_ok 2:tcp_connect_ok
//station模式sid
@@ -85,15 +78,43 @@ typedef struct global_param
U8 ap_sid[32];
//ap模式pwd
U8 ap_pwd[32];
+ //w600联网模式
+ U16 w600_mode;
+ U16 status_eep_save;
+ U16 slaver_id;
+
+ vU32 modbusstmp;
+ U16 authed;
+ U16 flowStarted;
+ U16 flowStartVal;
+ U8 mcu_id[7];
+
+ U8 pen_up;
+
+ CCMD_SLAVER_INFO ccmd_slaver_info[CCMD_SLAVER_INFO_MAX];
}GlobalParam;
-extern struct global_param G;
-//STEP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<slaverIndex].mask > 0)
+ {
+ s->pkglen = L3_pack_ccmodbus(&s->loopPkg,G.ccmd_slaver_info + s->slaverIndex);
+ s->ackFlag = 0;
+ s->retryTimes = 0;
+ L2_task_go(D_task_tcp_send_modbus_pkg);
+ }
+ else
+ {
+ L2_task_go(D_task_tcp_switch_next_slaver);
+ }
+
+ TTSS_Task_step(D_task_tcp_send_modbus_pkg) //发送包
+ L3_gm35_send_data((U8*)&s->loopPkg,s->pkglen);
+ s->sendStamp = s_nos_tick.t_1s;
+ if(G.ccmd_slaver_info[s->slaverIndex].mask == 1)
+ {
+ G.ccmd_slaver_info[s->slaverIndex].mask = 0;
+ }
+ L2_task_go(D_task_tcp_wait_modbus_ack);
+ TTSS_Task_step(D_task_tcp_wait_modbus_ack) //等待ack
+ //L0_uart0_uc(s_uart2_tcp_rec.ok + '0');
+ if(s_uart2_tcp_rec.ok)
+ {
+ s_uart2_tcp_rec.ok = 0;
+ s_task_gm35_flow.tcp_last_recv_stmp = s_nos_tick.t_1s;
+ s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp);
+ L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num);
+ if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver)
+ {
+ s->ackFlag = 1;
+
+ switch(s->slaverIndex)
+ {
+ case 0://如果oper == 90:成功,91 == 不成功
+ switch(G.ccmd_slaver_info[s->slaverIndex].oper)
+ {
+ case 0x90:
+ //L0_uart0_sendstr("11111");
+ G.authed = 1;
+ break;
+ case 0x91:
+ G.authed = 0;
+ break;
+ }
+ #if 0
+ if(G.ccmd_slaver_info[s->slaverIndex].oper == 0x90)
+ {
+ L0_uart0_sendstr("111");
+ G.authed = 1;
+ G.au_succ = 1;
+ }
+ else
+ {
+ L0_uart0_sendstr("222");
+ G.authed = 0;
+ G.au_fail = 1;
+ }
+ #endif
+ break;
+ case 2:
+ break;
+ default:
+ break;
+ }
+ }
+
+ L2_task_go(D_task_tcp_switch_next_slaver);
+ }
+ else if(s_nos_tick.t_1s - s->sendStamp >= 5) //重发
+ {
+ if(++s->retryTimes < 3)
+ {
+ L2_task_go(D_task_tcp_send_modbus_pkg);
+ }
+ else
+ {
+ L2_task_go(D_task_tcp_switch_next_slaver);
+ }
+ }
+
+ //L0_uart0_uc(s->ackFlag);
+
+ TTSS_Task_step(D_task_tcp_switch_next_slaver) //切换下一个
+ if(++ s->slaverIndex >= CCMD_SLAVER_INFO_MAX)
+ {
+ s->slaverIndex = 0;
+ }
+ L2_task_go(D_task_tcp_constructor_modbus_pkg);
+
+ TTSS_Task_end();
+}
+
+
+
diff --git a/source/app/app_task_tcp.h b/source/app/app_task_tcp.h
index 1c2f7dd..429e097 100644
--- a/source/app/app_task_tcp.h
+++ b/source/app/app_task_tcp.h
@@ -2,8 +2,9 @@
#define APP_TASK_TCP
#include "../ctask/task.h"
-#include "../tpc/tpc_ccmodbus.h"
-#include "app_common.h"
+#include "../tpc/ccmodbus.h"
+#include "../app/app_config.h"
+#define U485_TIMEOUT 3 //3 x 100ms = 300ms
typedef struct
{
@@ -18,11 +19,12 @@ typedef struct
U16 treg;
}TS_tcp;
-#define U485_TIMEOUT 3 //3 x 100ms = 300ms
+
extern TS_tcp ts_tcp;
-extern void L3_task_tcp_init();
+extern void L3_task_tcp_init(void);
extern void L3_task_tcp_handle(TS_tcp *s);
#endif
+
diff --git a/source/app/app_task_tcp_control.c b/source/app/app_task_tcp_control.c
new file mode 100644
index 0000000..d2003eb
--- /dev/null
+++ b/source/app/app_task_tcp_control.c
@@ -0,0 +1,80 @@
+#include "app_task_tcp_control.h"
+#include "../msp/uart0.h"
+#include "../app/task_w600.h"
+#include "../app/app_task_tcp.h"
+
+TS_tcp_control ts_tcp_control;
+
+void L3_task_tcp_control_init(void)
+{
+ L1_task_init(&ts_tcp_control.task);
+ L3_task_s_go(ts_tcp_control,D_task_init);
+ ts_tcp_control.conn_ok_pool = 0;
+ ts_tcp_control.tcp_send_stmp = 0;
+}
+
+#define D_task_tcp_control_01 0x51
+#define D_task_tcp_control_02 0x52
+#define D_task_tcp_control_03 0x53
+
+
+void L3_task_tcp_control_handle(TS_tcp_control *s)//判定是否抬笔/缓冲区满,调用读函数读取一段,从G->R, R.extra num 动态修改数量
+
+{
+ TTSS_Task_init()
+ L2_task_go(D_task_tcp_control_01);
+ TTSS_Task_step(D_task_tcp_control_01)
+ if(s->conn_ok_pool != s_task_gm35_flow.conn_ok)
+ {
+ G.authed = 0;
+ s->conn_ok_pool =s_task_gm35_flow.conn_ok;
+ }
+ L2_task_go(D_task_tcp_control_02);
+ TTSS_Task_step(D_task_tcp_control_02)//是否发认证包
+ if(s_task_gm35_flow.conn_ok)
+ {
+ //3s一次发送数据包
+ if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 3)
+ {
+ if(!G.authed)
+ {
+ //L0_uart0_sendstr("111");
+ //发送认证包
+ G.ccmd_slaver_info[0].mask = 1;
+ L2_task_go(D_task_tcp_control_01);
+ }
+ else
+ {
+ L2_task_go(D_task_tcp_control_03);
+ }
+ ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s;
+ }
+ else if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 60)
+ {
+ G.ccmd_slaver_info[1].mask = 1;
+ L2_task_go(D_task_tcp_control_01);
+ ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s;
+ }
+ }
+
+
+ TTSS_Task_step(D_task_tcp_control_03)
+ if(wr_buf.full == 1)
+ {
+ wr_buf.full = 0;
+ Lc_read_cyc_buf(&R.points ,&wr_buf ,POINT_LEN);
+ G.ccmd_slaver_info[2].mask = 1;
+ L2_task_go(D_task_tcp_control_01);
+ }
+ else if(G.pen_up == 1)
+ {
+ Lc_read_cyc_buf(&R.points ,&wr_buf ,sizeof(wr_buf.buf)/2);
+ G.ccmd_slaver_info[2].mask = 1;
+ L2_task_go(D_task_tcp_control_01);
+ }
+ TTSS_Task_end();
+}
+
+
+
+
diff --git a/source/app/app_task_tcp_control.h b/source/app/app_task_tcp_control.h
new file mode 100644
index 0000000..1d09935
--- /dev/null
+++ b/source/app/app_task_tcp_control.h
@@ -0,0 +1,22 @@
+#ifndef APP_TASK_TCP_CONTROL
+#define APP_TASK_TCP_CONTROL
+
+#include "../ctask/task.h"
+#include "../tpc/ccmodbus.h"
+#include "../app/app_config.h"
+
+
+typedef struct
+{
+ TS_task task;
+ vU8 conn_ok_pool;
+ vU32 tcp_send_stmp;
+}TS_tcp_control;
+
+extern TS_tcp_control ts_tcp_control;
+
+extern void L3_task_tcp_control_init(void);
+extern void L3_task_tcp_control_handle(TS_tcp_control *s);
+
+#endif
+
diff --git a/source/app/main.c b/source/app/main.c
index e44745c..62a6eba 100644
--- a/source/app/main.c
+++ b/source/app/main.c
@@ -69,7 +69,7 @@ stc5ac32s
void L0_main_init(void)
{
- Lc_delay_ms(200);
+ Lc_delay_ms(200);
//板卡初始化
L0_board_config();
//串口0初始化
@@ -80,28 +80,31 @@ void L0_main_init(void)
//L0_uart3_buf_init();
//Lc_delay_ms(100);
L1_tick_init();
+
//开启全局中断
EA = 1;
-
+
//系统时钟初始化
L0_timer0_Init();
-
+ //L0_key_init();
//G初始化
L3_param_init();
//R初始化
L3_reg_init();
//485初始化
L2_485_init();
-
+
//寄存器监听任务初始化
L3_task_reglisten_init();
//w600任务初始化
L3_task_gm35_flow_init(W600_ST);
-
- //L3_task_tcp_init(); //485轮询任务初始化
- //L3_task_tcp_control_init();
+ //笔头任务初始化
+ L3_task_pen_head_init();
+ //tcp轮询任务初始化
+ L3_task_tcp_init();
+ L3_task_tcp_control_init();
}
//===============================================
@@ -111,7 +114,8 @@ void main(void)
{
//初始化
L0_main_init();
-
+ //获取mcu id
+ L0_id_get_rom(G.mcu_id);
//打印版本信息
L0_uart0_sendArray("v1.0",4);
@@ -122,20 +126,29 @@ void main(void)
s_nos_tick.t1s_heatbeart = 0;
//LED0 ^= 1;
}
-
+
+ //WIFI
L3_uart2_exp_protocol(&s_uart2_at);
L2_task_gm35_flow_handle(&s_task_gm35_flow);
-
+
+ //笔头数据采集
+ L3_task_pen_head_handle(&s_task_pen_head);
+
//寄存器值监控
- L3_task_reglisten_handle(&s_task_reglisten);
+ //L3_task_reglisten_handle(&s_task_reglisten);
+
//输出,响应485协议
- L3_task_modbus_handler(&s_uart0_rec);
+ //L3_task_modbus_handler(&s_uart0_rec);
+
+ //按键处理
+ //L3_task_key_handle(&s_task_key_handle);
//L3_task_modbus_handler2(&s_uart2_rec);
- //tcp发送
- //L3_task_tcp_handle(&ts_tcp);
-
+
+ //tcp发送
+ L3_task_tcp_handle(&ts_tcp);
+
//tcp master->slaver发送逻辑控制
- //L3_task_tcp_control_handle(&ts_tcp_control);
+ L3_task_tcp_control_handle(&ts_tcp_control);
}
}
//end main
diff --git a/source/app/main.h b/source/app/main.h
index 05cba94..6038f04 100644
--- a/source/app/main.h
+++ b/source/app/main.h
@@ -54,6 +54,10 @@
#include "../app/task_register.h"
#include "../app/task_encrypt.h"
#include "../app/task_w600.h"
+#include "../app/task_key.h"
+#include "../app/task_pen_head.h"
+#include "../app/app_task_tcp.h"
+#include "../app/app_task_tcp_control.h"
//////////////////////////////////////////////////////////////////
diff --git a/source/app/task_key b/source/app/task_key
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/source/app/task_key
@@ -0,0 +1 @@
+
diff --git a/source/app/task_key.c b/source/app/task_key.c
new file mode 100644
index 0000000..7c97085
--- /dev/null
+++ b/source/app/task_key.c
@@ -0,0 +1,126 @@
+////////////////////////////////////////////////////////////////////////////
+///@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_key.h"
+#include "../clib/clib.h"
+
+struct _s_task_key_ s_task_key_handle;
+void L0_key_init(void)
+{
+ //使能 INT1下降沿中断
+ IT0 = 0;
+ //外部中断允许
+ EX0 = 1;
+ //使能 INT1下降沿中断
+ IT1 = 0;
+ //外部中断允许
+ EX1 = 1;
+ L1_task_init(&s_task_key_handle.task);
+ L3_task_s_go(s_task_key_handle,D_task_init);
+}
+
+void INT0_isrHanddle(void) D_SERVE_INT0
+{
+ struct _s_task_key_ *p = &s_task_key_handle;
+ EX0=0; //关中断
+ //do sth
+ if(key1 == 0)
+ {
+ //Lc_delay_ms(10);//按键防抖
+ if(key1 == 0)
+ {
+ p->key1_ok = 1;
+ while(!key1)
+ {
+ p->time1++;
+ }
+ }
+ }
+ IE0 = 0; //清除INT0中断程序执行过程中的中断请求
+ EX0 = 1; //开中断
+}
+void INT1_isrHanddle(void) D_SERVE_INT1
+{
+ struct _s_task_key_ *p = &s_task_key_handle;
+ EX1 = 0; //关中断
+ //do sth
+ if(key2 == 0)
+ {
+ //Lc_delay_ms(10);
+ if(key2 == 0)
+ {
+ p->key2_ok = 1;
+ while(!key2)
+ {
+ p->time2++;
+ }
+ }
+ }
+ IE1 = 0; //清除INT1中断程序执行过程中的中断请求
+ EX1 = 1; //开中断
+}
+
+void L3_task_key_handle(struct _s_task_key_ *p)
+{
+ if(p->key1_ok)
+ {
+ if(p->time1>=180)
+ {
+ LED1 = ~LED1;
+ }
+ else
+ {
+ LED2 = ~LED2;
+ }
+ p->key1_ok = 0;
+ p->time1=0;
+ }
+ if(p->key2_ok)
+ {
+ if(p->time2>=180)
+ {
+ LED1 = ~LED1;
+ }
+ else
+ {
+ LED2 = ~LED2;
+ }
+ p->key2_ok = 0;
+ p->time2=0;
+ }
+ if(key3 == 0)
+ {
+ //Lc_delay_ms(10);//按键防抖
+ if(key3 == 0)
+ {
+ p->key3_ok = 1;
+ while(!key3)
+ {
+ p->time3++;
+ }
+ }
+ }
+ if(p->key3_ok)
+ {
+ if(p->time3>=180)
+ {
+ LED1 = ~LED1;
+ }
+ else
+ {
+ LED2 = ~LED2;
+ }
+ p->key3_ok = 0;
+ p->time3=0;
+ }
+
+}
+
diff --git a/source/app/task_key.h b/source/app/task_key.h
new file mode 100644
index 0000000..7635f4e
--- /dev/null
+++ b/source/app/task_key.h
@@ -0,0 +1,33 @@
+////////////////////////////////////////////////////////////////////////////
+///@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
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef _app_task_key_H
+#define _app_task_key_H
+#include "../bsp/bsp_config.h"
+#include "../ctask/task.h"
+
+
+struct _s_task_key_
+{
+ TS_task task;
+ vU8 key1_ok;
+ vU8 key2_ok;
+ vU8 key3_ok;
+ vU8 time1;
+ vU8 time2;
+ vU8 time3;
+};
+extern struct _s_task_key_ s_task_key_handle;
+extern void L0_key_init(void);
+extern void L3_task_key_handle(struct _s_task_key_ *p);
+#endif
+
diff --git a/source/app/task_modbus.c b/source/app/task_modbus.c
index 813fa9d..d4fd55e 100644
--- a/source/app/task_modbus.c
+++ b/source/app/task_modbus.c
@@ -4,178 +4,6 @@
//#include "../tpc/modbus.h"
#include "../app/app_config.h"
-U8 L3_pack_modbus_03(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num)
-{
- U8 bufsize = 4;
- pmodbus->slaver = slaverId;
- pmodbus->oper = MODBUS_OPER_READ;
- pmodbus->buf[0] = reg >> 8 & 0xFF;
- pmodbus->buf[1] = reg >> 0 & 0xFF;
- pmodbus->buf[2] = num >> 8 * 0xFF;
- pmodbus->buf[3] = num >> 0 & 0xFF;
- crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
- pmodbus->buf[bufsize] = pmodbus->crc[0];
- pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
-
- return bufsize + 2 + 2;
-}
-
-U8 L3_pack_modbus_06(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U8 *buf)
-{
- U8 bufsize = 4;
- pmodbus->slaver = slaverId;
- pmodbus->oper = MODBUS_OPER_WRITE;
- pmodbus->buf[0] = reg >> 8 & 0xFF;
- pmodbus->buf[1] = reg >> 0 & 0xFF;
- pmodbus->buf[2] = buf[0];
- pmodbus->buf[3] = buf[1];
- crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
- pmodbus->buf[bufsize] = pmodbus->crc[0];
- pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
-
- return bufsize + 2 + 2;
-}
-
-U8 L3_pack_modbus_10(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num, U8 bytes, U8 *buf)
-{
- U8 bufsize = 5,i = 0;
- pmodbus->slaver = slaverId;
- pmodbus->oper = MODBUS_OPER_WRITE_M;
- pmodbus->buf[0] = reg >> 8 & 0xFF;
- pmodbus->buf[1] = reg >> 0 & 0xFF;
- pmodbus->buf[2] = num >> 8 * 0xFF;
- pmodbus->buf[3] = num >> 0 & 0xFF;
- pmodbus->buf[4] = bytes;
-
- for(i=0;ibuf[5+i] = buf[i];
- }
- crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize + bytes);
- pmodbus->buf[bufsize + bytes] = pmodbus->crc[0];
- pmodbus->buf[bufsize + bytes + 1] = pmodbus->crc[1];
-
- return bufsize + bytes + 2 + 2;
-}
-
-U8 L3_pack_modbus(TS_PH4_modbus *pmodbus, MD_SLAVER_INFO *slaver_info)
-{
- switch(slaver_info->oper)
- {
- case MODBUS_OPER_READ:
- return L3_pack_modbus_03(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum);
- case MODBUS_OPER_WRITE:
- return L3_pack_modbus_06(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->buf);
- case MODBUS_OPER_WRITE_M:
- return L3_pack_modbus_10(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum,slaver_info->bytes,slaver_info->buf);
- default:
- return 0;
- }
-}
-
-U8 L3_pack_modbusack(TS_PH4_modbus *pmodbus ,U8 slaver, U8 oper, U8 bufsize)
-{
- pmodbus->slaver = slaver;
- pmodbus->oper = oper;
- crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
- pmodbus->buf[bufsize] = pmodbus->crc[0];
- pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
-
- return bufsize + 2 + 2;
-}
-
-//MODBUS从设备数据处理函数
-static Modbus03Ack *pModbus03Ack;
-static Modbus06Ack *pModbus06Ack;
-static Modbus10Ack *pModbus10Ack;
-static U16 modbuslen = 0,reg,num,val,count;
-U16 L3_modbus_slaver_ack(TS_PH4_modbus *pmodbus,TS_PH4_modbus *pModbusAck)
-{
- switch(pmodbus->oper)
- {
- case MODBUS_OPER_READ:
- case MODBUS_OPER_READCONFIG:
- {
- U16 i = 0,j = 0,regval = 0;
- pModbus03Ack = (Modbus03Ack *)pModbusAck->buf;
- reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
- num = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
- if((num <= D_MODBUS_REG_MAX_NUM) && (reg <= sizeof(R)/2)) //每次最多读取D_MODBUS_REG_MAX_NUM个寄存器.防止越界
- {
- for(i=0; ibuf[j++] = regval >> 8 & 0xFF;
- pModbus03Ack->buf[j++] = regval & 0xFF;
- }
- pModbus03Ack->bytes = num * 2;
- modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, pModbus03Ack->bytes + 1);
- }
- break;
- }
-#if 0
- case MODBUS_OPER_WRITE:
- {
- pModbus06Ack = (Modbus06Ack *)pModbusAck->buf;
- reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
- val = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
- if(reg <= sizeof(R)/2)
- {
- *(REG_2_MEM(reg)) = val;
- pModbus06Ack->reg = reg;
- pModbus06Ack->val = *(REG_2_MEM(reg));
- modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, 4);
- }
- break;
- }
-#endif
- case MODBUS_OPER_WRITE_M:
- {
- U16 i = 0;
- pModbus10Ack = (Modbus10Ack *)pModbusAck->buf;
- reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
- num = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
- count = pmodbus->buf[4];
- if((num <= D_MODBUS_REG_MAX_NUM) && (reg < sizeof(R)/2)) //每次最多写入20个寄存器 40个字节,以防止越界
- {
- for(i=0; ibuf[5+i*2]) << 8 | ((U16)pmodbus->buf[5+i*2+1]);
- }
- pModbus10Ack->reg = reg;
- pModbus10Ack->num = num;
- modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, 4);
- }
- break;
- }
- default:break;
- }
- return modbuslen;
-}
-
-//MODBUS主设备轮询时,从设备返回数据处理函数
-//MD_SLAVER_INFO需要被正确定义
-void L3_modbus_master_handler(TS_PH4_modbus *pmodbus,MD_SLAVER_INFO *p_slaver_info)
-{
- switch(pmodbus->oper)
- {
- case MODBUS_OPER_READ:
- case MODBUS_OPER_READCONFIG:
- {
- U8 i = 0;
- for(i=0;ibuf[0];i++)
- {
- //此处假设字节序一致
- p_slaver_info->buf[i] = pmodbus->buf[i + 1];
- //TODO 字节序不一致时的处理
- }
- break;
- }
- case MODBUS_OPER_WRITE:
- case MODBUS_OPER_WRITE_M:
- default: break;
- }
-}
void L3_task_modbus_handler(TP_Handler_X *ph4)
@@ -185,7 +13,7 @@ void L3_task_modbus_handler(TP_Handler_X *ph4)
TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
//LED0 ^= 1;
ph4->ok = 0;
- if(ts_modbus->slaver == R.p.slaver_id || ts_modbus->slaver == D_UART0_485_SLAVER_ID_BROADCAST) //从机
+ if(ts_modbus->slaver == G.slaver_id || ts_modbus->slaver == D_UART0_485_SLAVER_ID_BROADCAST) //从机
{
U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack);
L0_uart0_sendArray((U8*)&s_uart0_ack, acklen);
@@ -205,22 +33,6 @@ void L3_task_modbus_handler(TP_Handler_X *ph4)
#endif
}
}
-void L3_task_modbus_handler2(TP_Handler_X *ph4)
-{
- if(s_uart2_rec.ok)
- {
- TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
- //LED0 ^= 1;
- s_uart2_rec.ok=0;
- L0_uart0_sendArray(s_uart2_rec.buf, s_uart2_rec.num);
- }
- if(s_uart2_rec.yes)
- {
- s_uart2_rec.yes=0;
- L0_uart0_sendArray(s_uart2_rec.buf, s_uart2_rec.num);
- }
-
-}
diff --git a/source/app/task_pen_head.c b/source/app/task_pen_head.c
new file mode 100644
index 0000000..1f0aa4e
--- /dev/null
+++ b/source/app/task_pen_head.c
@@ -0,0 +1,35 @@
+#include "task_pen_head.h"
+
+struct _s_task_pen_head_ s_task_pen_head;
+
+
+void L3_task_pen_head_init()
+{
+ L1_task_init(&s_task_pen_head.task);
+ L3_task_s_go(s_task_pen_head,D_task_init);
+}
+#define TTSS_TASK_HEAD_DATA_WRITE 0x01
+
+U8 i = 0;
+void L3_task_pen_head_handle(struct _s_task_pen_head_ *s)
+{
+ TTSS_Task_init()
+ L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_WRITE,0);
+ TTSS_Task_step(TTSS_TASK_HEAD_DATA_WRITE)
+ {
+ s->point.x_axis = i;
+ s->point.y_axis = i;
+ s->point.time = D_sys_now;
+ i++;
+ Lc_write_cyc_buf(&s->point,&wr_buf,1);
+ Lc_buf_full(&wr_buf);
+ }
+ L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_WRITE,D_Tdelay_20ms);
+ TTSS_Task_end();
+}
+
+
+
+
+
+
diff --git a/source/app/task_pen_head.h b/source/app/task_pen_head.h
new file mode 100644
index 0000000..69646b8
--- /dev/null
+++ b/source/app/task_pen_head.h
@@ -0,0 +1,22 @@
+#ifndef _app_task_pen_head_H
+#define _app_task_pen_head_H
+
+#include "../bsp/bsp_config.h"
+#include "../bsp/w600.h"
+#include "../ctask/task.h"
+#include "../tpc/at0d0a.h"
+#include "../tpc/ccmodbus.h"
+#include "../app/app_config.h"
+struct _s_task_pen_head_
+{
+ TS_task task;
+ vU32 last_write_time;
+ vU32 now_write_time;
+ vU32 time_lag;
+ PenPoint point;
+};
+extern struct _s_task_pen_head_ s_task_pen_head;
+extern void L3_task_pen_head_init();
+extern void L3_task_pen_head_handle(struct _s_task_pen_head_ *s);
+
+#endif
\ No newline at end of file
diff --git a/source/app/task_register.c b/source/app/task_register.c
index f715e06..1499c64 100644
--- a/source/app/task_register.c
+++ b/source/app/task_register.c
@@ -36,21 +36,21 @@ void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s)
L2_task_go(D_task_WEIGHT_COUNT);
TTSS_Task_step(D_task_WEIGHT_COUNT)
- if(R.w600_mode == 1)
+ if(G.w600_mode == 1)
{
L3_gm35_send_str("+++");
Lc_delay_ms(1000);
//s_task_gm35_flow.mode=W600_AP;
L3_task_gm35_flow_init(W600_AP);
- R.w600_mode = 0;
+ G.w600_mode = 0;
}
L2_task_go(D_task_IAP); //延时100ms
TTSS_Task_step(D_task_IAP)
- if(R.status_eep_save != 0)
+ if(G.status_eep_save != 0)
{
- R.status_eep_save = 0;
+ G.status_eep_save = 0;
L3_reg_2_iap();//写入IAP
}
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
diff --git a/source/app/task_w600.c b/source/app/task_w600.c
index bae8706..d3871a4 100644
--- a/source/app/task_w600.c
+++ b/source/app/task_w600.c
@@ -17,8 +17,8 @@
#include "../msp/uart0.h"
struct _s_task_gm35_gprs_ s_task_gm35_flow;
-TS_tcp_control ts_tcp_control;
-TS_tcp ts_tcp;
+//TS_tcp_control ts_tcp_control;
+//TS_tcp ts_tcp;
@@ -48,7 +48,7 @@ void L3_gm35_send_str(U8 *str)
//将数据放入gm35待发送缓冲区
void L3_gm35_send_data(U8 *buf , U8 len)
{
- L3_gm35_send_str(_cipsend_hex(len));
+ //L3_gm35_send_str(_cipsend_hex(len));
L0_uart2_sendArray(buf,len);
if(G.debug)
{
@@ -62,7 +62,7 @@ void L3_gm35_rcv_data(U8* buf,U8 num)
{
L0_uart0_sendstr("ATRCV=");
L0_uart0_uchex(num);
- L0_uart0_sendArray(buf,num);
+ L0_uart0_sendArray(buf,num+3);
}
}
@@ -170,23 +170,6 @@ void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p)
//------------------------------------------------------ gm35 tasks --------------------------------
-void L3_task_tcp_init(void)
-{
- L1_task_init(&ts_tcp.task);
- L3_task_s_go(ts_tcp,D_task_init);
- ts_tcp.slaverIndex = 0;
- ts_tcp.pkglen = 0;
- ts_tcp.retryTimes = 0;
- ts_tcp.ackFlag = 0;
-}
-
-void L3_task_tcp_control_init(void)
-{
- L1_task_init(&ts_tcp_control.task);
- L3_task_s_go(ts_tcp_control,D_task_init);
- ts_tcp_control.conn_ok_pool = 0;
- ts_tcp_control.tcp_send_stmp = 0;
-}
void L3_task_gm35_flow_init(U8 mode)
{
@@ -194,7 +177,7 @@ void L3_task_gm35_flow_init(U8 mode)
L3_task_s_go(s_task_gm35_flow,D_task_init);
s_task_gm35_flow.mode = mode;
s_task_gm35_flow.send = 0;
-
+ s_task_gm35_flow.conn_ok = 0;
#if 0
g_at_send_status.send_lock = 0;
g_at_send_status.module_ok = 0;
@@ -219,28 +202,28 @@ void L3_task_gm35_flow_init(U8 mode)
//------------------------ 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_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
+#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
#define TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT 0x27
-#define TTSS_TASK_MODE_TRAN 0x28
-#define TTSS_TASK_MODE_SERVER_CLOSE 0x29
+#define TTSS_TASK_MODE_TRAN 0x28
+#define TTSS_TASK_MODE_SERVER_CLOSE 0x29
#define INS_TIMEOUT 5
@@ -259,7 +242,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
L3_gm35_send_str(AT_INS_ATE0);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
- s->send = 1;
+ s->send = 1;
}
else if(s->ins_ok == 1) //等待
{
@@ -342,7 +325,6 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
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;
@@ -360,25 +342,39 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
s->send = 0;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,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_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
+ }
else if(1 == s->st_error)
{
- L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0);
+ 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);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{//超时重发
s->send = 0;
- }
- TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPSEND)
- L3_gm35_send_str(AT_INS_ST_CIPSEND);
- s->ins_ok = 0;
- s->conn_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_uart2_sendstr("abcdefg");
- s->conn_ok = 1;
- L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_3s);
+ s_task_gm35_flow.conn_ok = 1;
+ L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_1s);
@@ -552,101 +548,4 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
TTSS_Task_end();
}
-#define D_task_tcp_constructor_modbus_pkg 0x41
-#define D_task_tcp_send_modbus_pkg 0x42
-#define D_task_tcp_wait_modbus_ack 0x43
-#define D_task_tcp_switch_next_slaver 0x44
-
-void L3_task_tcp_handle(TS_tcp *s)
-{
- TTSS_Task_init();
- L2_task_go(D_task_tcp_constructor_modbus_pkg);
-
- TTSS_Task_step(D_task_tcp_constructor_modbus_pkg) //构造包
- if(R.ccmd_slaver_info[s->slaverIndex].mask > 0)
- {
- s->pkglen = L3_pack_ccmodbus(&s->loopPkg,R.ccmd_slaver_info + s->slaverIndex);
- s->ackFlag = 0;
- s->retryTimes = 0;
- L2_task_go(D_task_tcp_send_modbus_pkg);
- }
- else
- {
- L2_task_go(D_task_tcp_switch_next_slaver);
- }
-
- TTSS_Task_step(D_task_tcp_send_modbus_pkg) //发送包
- L3_gm35_send_data((U8*)&s->loopPkg,s->pkglen);
- s->sendStamp = s_nos_tick.t_1s;
- if(R.ccmd_slaver_info[s->slaverIndex].mask == 1)
- {
- R.ccmd_slaver_info[s->slaverIndex].mask = 0;
- }
- L2_task_go(D_task_tcp_wait_modbus_ack);
-
- TTSS_Task_step(D_task_tcp_wait_modbus_ack) //等待ack
- if(s_uart2_tcp_rec.ok)
- {
- s_uart2_tcp_rec.ok = 0;
- s_task_gm35_flow.tcp_last_recv_stmp = s_nos_tick.t_1s;
-
- s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp);
- L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num + 3);
- if(s->pAckPkg->slaver == R.ccmd_slaver_info[s->slaverIndex].slaver)
- {
- s->ackFlag = 1;
-
- }
- }
- if(s->ackFlag == 1 || s_nos_tick.t_1s - s->sendStamp >= 5) //收到ack或者超时
- {
- L2_task_go(D_task_tcp_switch_next_slaver);
- }
-
- TTSS_Task_step(D_task_tcp_switch_next_slaver) //切换下一个
- if(++ s->slaverIndex >= CCMD_SLAVER_INFO_MAX)
- {
- s->slaverIndex = 0;
- }
- L2_task_go(D_task_tcp_constructor_modbus_pkg);
-
- TTSS_Task_end();
-}
-
-
-#define D_task_tcp_control_01 0x51
-#define D_task_tcp_control_02 0x52
-
-
-void L3_task_tcp_control_handle(TS_tcp_control *s)
-{
- TTSS_Task_init();
- L2_task_go(D_task_tcp_control_01);
-
- TTSS_Task_step(D_task_tcp_control_01)
- if(s->conn_ok_pool != s_task_gm35_flow.conn_ok)
- {
- s->conn_ok_pool = s_task_gm35_flow.conn_ok;
- }
- L2_task_go(D_task_tcp_control_02);
-
- TTSS_Task_step(D_task_tcp_control_02)
- if(s_task_gm35_flow.conn_ok)
- {
- //3s一次发送数据包
- if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 3)
- {
- R.ccmd_slaver_info[0].mask = 1;
- ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s;
- }
- }
- L2_task_go(D_task_tcp_control_01);
-
- TTSS_Task_end();
-}
-
-
-/********************************************************/
-
-
diff --git a/source/app/task_w600.h b/source/app/task_w600.h
index e708a9f..20c869d 100644
--- a/source/app/task_w600.h
+++ b/source/app/task_w600.h
@@ -25,7 +25,7 @@
#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\",\"test.tall.wiki\",49000\r\n" //连接服务器
+#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.0.83\",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" //查询连接状态
@@ -55,6 +55,7 @@ struct _s_task_gm35_gprs_
vU8 ap_conn_ok;
vU8 ap_rec_ok;
vU8 st_cip_ok;
+ vU8 st_send_ok;
vU8 ap_tcp_ok;
vU8 ap_data_ok;
vU8 st_error;
@@ -62,9 +63,6 @@ struct _s_task_gm35_gprs_
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; //指令时间戳
@@ -90,40 +88,18 @@ extern struct _s_task_gm35_gprs_ s_task_gm35_flow;
#define STATUS_GM35_TCP_OK 5
#define BUF_SIZE 5
#define BUF_MAX 32 //注意缓冲区的长度
-typedef struct
-{
- TS_task task;
- TS_PH3_ccmodbus loopPkg;
- TS_PH3_ccmodbus *pAckPkg;
- U8 slaverIndex;
- U8 pkglen;
- U32 sendStamp;
- U8 retryTimes;
- U8 ackFlag;
- U16 treg;
-}TS_tcp;
-
-
-typedef struct
-{
- TS_task task;
- vU8 conn_ok_pool;
- vU32 tcp_send_stmp;
-}TS_tcp_control;
-extern TS_tcp_control ts_tcp_control;
+
extern struct _s_task_gm35_gprs_ s_task_gm35_flow;
-extern TS_tcp ts_tcp;
-#define U485_TIMEOUT 3 //3 x 100ms = 300ms
-extern TS_tcp ts_tcp;
-extern void L3_task_tcp_control_init();
-extern void L3_task_tcp_init();
+
extern struct _s_task_gm35_gprs_ s_task_gm35_flow;
extern void L3_gm35_send_str(U8 *str);
+extern void L3_gm35_send_data(U8 *buf , U8 len);
+extern void L3_gm35_rcv_data(U8* buf,U8 num);
extern void L3_task_gm35_flow_init(U8 mode);
extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s);
@@ -131,9 +107,6 @@ extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s);
extern void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p);
-extern void L3_task_tcp_handle(TS_tcp *s);
-
-extern void L3_task_tcp_control_handle(TS_tcp_control *s);
#endif
diff --git a/source/bsp/bsp_config.c b/source/bsp/bsp_config.c
index 7f3dbdb..d6942b5 100644
--- a/source/bsp/bsp_config.c
+++ b/source/bsp/bsp_config.c
@@ -54,7 +54,7 @@ void L0_board_config(void)
//485 RE/DE 配置推完输出 P55
//BITN_0(P5M1,BITN5);BITN_1(P5M0,BITN5);
-
+
//LED
//D_stdIO_P1(BITN7);
//D_stdIO_P5(BITN5);
@@ -70,7 +70,15 @@ void L0_board_config(void)
D_stdIO_P3(BITN5);
D_stdIO_P3(BITN6);
D_stdIO_P3(BITN7);
-
+ D_HighI_P2(BITN7);
+ D_HighI_P2(BITN6);
+ //D_HighI_P5(BITN5);
+ D_HighI_P0(BITN2);
+ D_OpenD_P5(BITN5);
+ D_OpenD_P4(BITN0);
+ D_HighI_P3(BITN4);
+ D_HighI_P5(BITN0);
+
#if (TYPE_WDT_ENABLE == D_WDT_STATUS)
WDT_CONTR = 0x27; //使能看门狗,22M时钟下溢出时间约为5s,请注意添加喂狗程序
#else
diff --git a/source/bsp/bsp_config.h b/source/bsp/bsp_config.h
index 84c4f84..e915041 100644
--- a/source/bsp/bsp_config.h
+++ b/source/bsp/bsp_config.h
@@ -77,7 +77,7 @@
#define D_MCU_NAME "STC8H3K64S4"
//存储器特殊参数地址配置
- #define D_MCU_SPEC_PARAM_CHIPID 0xBFF9
+ #define D_MCU_SPEC_PARAM_CHIPID 0xFDF9
//...其他参数
//串口配置
@@ -115,8 +115,10 @@
//笔头
#define SCK P34
#define SDIO P50
-
-
+ //按键
+ #define key1 P32
+ #define key2 P33
+ #define key3 P40
//EEP存储地址定义
#define D_EEP_SECTOR_SIZE 0x200 //每个扇区0x200==512bytes
#define D_EEP_SECTOR_BLOCK_SIZE 0x40 //扇区中每个数据块0x40==64bytes,可选值[32,64,128]等
diff --git a/source/clib/clib.c b/source/clib/clib.c
index a5cfafe..951b58e 100644
--- a/source/clib/clib.c
+++ b/source/clib/clib.c
@@ -96,6 +96,7 @@ void Lc_buf_copy_uc(U8 *dst,U8 *src,U8 len)
}
}
+
vU8 Lc_U8_media3(vU8 a,vU8 b,vU8 c)
{
if(a > b)
@@ -331,7 +332,7 @@ void crc16(unsigned char *CRC,void *dat,unsigned int len) /*reentrant*/
CRC[1]=wcrc>>8;//crc的高八位
}
-#if 0
+#if 1
void crc16_irq(unsigned char *CRC,void *dat,unsigned int len)
{
unsigned char *ptr = (unsigned char *)dat;
diff --git a/source/clib/clib.h b/source/clib/clib.h
index 70f0109..127388b 100644
--- a/source/clib/clib.h
+++ b/source/clib/clib.h
@@ -99,7 +99,7 @@ extern void Lc_array_sort(S32 arr[],int n);
/// 0x11 0x22 ---> 0x31 0x31 0x32 0x32 '1' '1' '2' '2'
extern void Lc_hex2ascii(U8 *buf,U16 len,U8 *ascii);
extern void crc16(unsigned char *CRC,void *dat,unsigned int len) /*reentrant*/;
-//extern void crc16_irq(unsigned char *CRC,void *dat,unsigned int len);
+extern void crc16_irq(unsigned char *CRC,void *dat,unsigned int len);
extern int isBigEndianOrder(void);
extern U32 ntohl(U32 dat);
extern U32 htonl(U32 dat);
diff --git a/source/ctask/tick.h b/source/ctask/tick.h
index 35a26d8..fd85754 100644
--- a/source/ctask/tick.h
+++ b/source/ctask/tick.h
@@ -45,10 +45,14 @@ extern struct _s_nos_tick_ s_nos_tick;
#define D_Tdelay_Sec(n) (((n)*1000-1) /JIFFIES + 1)
#define D_Tdelay_5ms ((5-1) / JIFFIES + 1)
#define D_Tdelay_10ms ((10-1) / JIFFIES + 1)
+#define D_Tdelay_20ms ((20-1) / JIFFIES + 1)
+
#define D_Tdelay_100ms ((100-1) / JIFFIES + 1)
#define D_Tdelay_200ms ((200-1) / JIFFIES+ 1)
#define D_Tdelay_300ms ((300-1) / JIFFIES + 1)
#define D_Tdelay_400ms ((400-1) / JIFFIES + 1)
+#define D_Tdelay_500ms ((500-1) / JIFFIES + 1)
+
#define D_Tdelay_1s (1 * HZ)
#define D_Tdelay_2s (2 * HZ)
#define D_Tdelay_3s (3 * HZ)
diff --git a/source/msp/UART0.C b/source/msp/UART0.C
index 0ba46d1..c158a2f 100644
--- a/source/msp/UART0.C
+++ b/source/msp/UART0.C
@@ -127,7 +127,7 @@ void INTERRUPT_UART(void) D_SERVE_UART
{
// LED0 ^= 1;
L0_uart0_IntRIClear(); //清除接收中断标志
- ts_uart[uNum0].t->reg = L0_uartN_get(uNum0);
+ ts_uart[uNum0].t->reg = SBUF;
//ts_uart[uNum0].tp_handler(ts_uart[uNum0].t);
L1_s2b_PH4(ts_uart[uNum0].t);
L0_timer3_restart();
@@ -138,7 +138,8 @@ void INTERRUPT_UART(void) D_SERVE_UART
L0_uart0_IntTIClear(); //清除发送中断标志
if(ts_uart[uNum0].p->max != ts_uart[uNum0].p->now)
{
- L0_uartN_set(uNum0,ts_uart[uNum0].p->p[ts_uart[uNum0].p->now]);
+ SBUF = ts_uart[uNum0].p->p[ts_uart[uNum0].p->now];
+ //L0_uartN_set(uNum0,ts_uart[uNum0].p->p[ts_uart[uNum0].p->now]);
ts_uart[uNum0].p->now ++;
}
else
@@ -157,11 +158,10 @@ void INTERRUPT_UART(void) D_SERVE_UART
void timer3_isrHanddle(void) D_SERVE_TIMER3
{
struct _tp_handler_x *p1 = &s_uart0_rec;
- struct _tp_handler_x *p2 = &s_uart2_rec;
if((p1->head == 1) && (p1->num >= D_s_modbus_min))
{
p1->head = 0;
- crc16(p1->crc,p1->buf,p1->num - 2); //校验CRC
+ crc16_irq(p1->crc,p1->buf,p1->num - 2); //校验CRC
if(p1->crc[0] == p1->buf[p1->num-2] && p1->crc[1] == p1->buf[p1->num-1])
{
p1->ok = 1;
@@ -172,19 +172,6 @@ void timer3_isrHanddle(void) D_SERVE_TIMER3
p1->yes = 1;
}
}
- if((p2->head == 1) && (p2->num >= D_s_modbus_min))
- {
- p2->head = 0;
- crc16(p2->crc,p2->buf,p2->num - 2); //校验CRC
- if(p2->crc[0] == p2->buf[p2->num-2] && p2->crc[1] == p2->buf[p2->num-1])
- {
- p2->ok = 1;
- }
- else
- {
- p2->yes = 1;
- }
- }
L0_timer3_stop();
}
diff --git a/source/msp/UART2.C b/source/msp/UART2.C
index 4e18b00..e746df4 100644
--- a/source/msp/UART2.C
+++ b/source/msp/UART2.C
@@ -61,10 +61,11 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
//#define _USE_485
static volatile Ts_uart_send_buf idata ts_uart_send_shop;
-TP_Handler_X s_uart2_rec;
-TS_PH4_modbus s_uart2_ack;
+//TP_Handler_X s_uart2_rec;
+//TS_PH4_modbus s_uart2_ack;
struct _s_PC1_0D0A_ s_uart2_at;
TS_Handle_PH3 s_uart2_tcp_rec;
+void (*Lp0_uart2_fun)(unsigned char sbufreg);
void L0_uart2_init(void)
{
@@ -84,14 +85,18 @@ void L0_uart2_buf_init(void)
ts_uart[uNum2].p = &ts_uart_send_shop;
ts_uart[uNum2].p->now = 0;
ts_uart[uNum2].p->ok = D_ready;
- ts_uart[uNum2].t = &s_uart2_rec;
+ //ts_uart[uNum2].t = &s_uart2_rec;
ts_uart[uNum2].t->head = 0;
ts_uart[uNum2].t->ok = 0;
ts_uart[uNum2].tp_handler = NULL;
- ts_uart[uNum2].ack = (U8*)&s_uart2_ack;
+ //ts_uart[uNum2].ack = (U8*)&s_uart2_ack;
L0_uart2_init();
D_uart2_ES_INT(1); //打开串口中断
+
+ //配置串口对应的操作协议
+ L1_uart_tpc_config();
+
#if (D_UART2_485_TYPE != TYPE_485_NONE)
D_UART2_485_RX() //默认处于接收状态
#endif
@@ -104,6 +109,28 @@ void L0_uart2_sendArray(U8 * buf, U16 len)
#endif
L0_uartN_sendArray(uNum2,buf,len);
}
+void L1_s2b_gm35(unsigned char sbufreg)
+{
+ s_uart2_tcp_rec.reg = sbufreg;
+ L1_s2b_PH3(&s_uart2_tcp_rec);
+ if(0 == s_uart2_tcp_rec.head)
+ {
+ s_uart2_at.reg = sbufreg;
+ L1_s2b_0d0a(&s_uart2_at);
+ }
+ else
+ {
+ s_uart2_at.head = 0;
+ }
+}
+void L1_uart_tpc_config(void)
+{
+ s_uart2_tcp_rec.head = 0;
+ s_uart2_tcp_rec.ok = 0;
+ s_uart2_tcp_rec.head_0 = D_CMD_Filter1_ff;
+ s_uart2_tcp_rec.head_1 = D_CMD_Filter2_fe;
+ s_uart2_tcp_rec.sp = (U8*)&(s_uart2_tcp_rec.ts_ccmodbus);
+}
/*************************************************
UART 中断
@@ -114,20 +141,21 @@ void INTERRUPT_uart2(void) D_SERVE_uart2// using 2
//NOP(); NOP(); NOP();
if(L0_uart2_IntRI()) //如果是U2接收中断
{
- //LED0 ^= 1;
+ //LED1 ^= 1;
L0_uart2_IntRIClear(); //清除接收中断标志
//ts_uart[uNum2].t->reg = L0_uartN_get(uNum2);
//ts_uart[uNum2].tp_handler(ts_uart[uNum2].t);
- s_uart2_at.reg = L0_uartN_get(uNum2);
- L1_s2b_0d0a(&s_uart2_at);
- L0_timer3_restart();
+ //s_uart2_at.reg = L0_uartN_get(uNum2);
+ //L1_s2b_0d0a(&s_uart2_at);
+ L1_s2b_gm35(L0_uart2_get());
}
if(L0_uart2_IntTI()) //如果是U0发送中断
{
L0_uart2_IntTIClear(); //清除发送中断标志
if(ts_uart[uNum2].p->max != ts_uart[uNum2].p->now)
{
- L0_uartN_set(uNum2,ts_uart[uNum2].p->p[ts_uart[uNum2].p->now]);
+ S2BUF = ts_uart[uNum2].p->p[ts_uart[uNum2].p->now];
+ //L0_uartN_set(uNum2,ts_uart[uNum2].p->p[ts_uart[uNum2].p->now]);
ts_uart[uNum2].p->now ++;
}
else
diff --git a/source/msp/UART2.h b/source/msp/UART2.h
index 32c69ae..cf66fe8 100644
--- a/source/msp/UART2.h
+++ b/source/msp/UART2.h
@@ -56,9 +56,9 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#include "../bsp/bsp_config.h"
#include "../tpc/at0d0a.h"
-#include "../tpc/ccmodbus.h"
-
+#include "../tpc/modbus.h"
#include "uart_x.h"
+#include "../tpc/ccmodbus.h"
#define uNum2 1
@@ -67,6 +67,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#define L0_uart2_IntTI() (S2CON & S2TI)//BITN_G(SCON,U0TI)
#define L0_uart2_IntRIClear(); BITN_0(S2CON,S2RI)
#define L0_uart2_IntTIClear(); BITN_0(S2CON,S2TI)
+#define L0_uart2_get() (S2BUF)
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
@@ -81,10 +82,13 @@ void uart2_Handdle(void);
#define L0_uart2_ushex(X) L0_uartN_ushex(uNum2,X)
#define L0_uart2_ulhex(X) L0_uartN_ulhex(uNum2,X)
#define L0_uart2_sendstr(buf) L0_uartN_sendstr(uNum2,buf)
-extern TP_Handler_X s_uart2_rec;
-extern TS_PH4_modbus s_uart2_ack;
+//extern TP_Handler_X s_uart2_rec;
+//extern TS_PH4_modbus s_uart2_ack;
extern TS_Handle_0d0a s_uart2_at;
extern TS_Handle_PH3 s_uart2_tcp_rec;
+extern void (*Lp0_uart2_fun)(unsigned char sbufreg);
+
+extern void L1_uart_tpc_config(void);
#endif //#ifndef _uart2_H
diff --git a/source/tpc/at0d0a.c b/source/tpc/at0d0a.c
index 7a5f7a7..11e7536 100644
--- a/source/tpc/at0d0a.c
+++ b/source/tpc/at0d0a.c
@@ -25,8 +25,13 @@ void L1_s2b_0d0a(struct _s_PC1_0D0A_ *p)// reentrant
{
if(1 != p->ok)
{
+ U8 i = 0;
p->buf[0] = p->num - 2; //去掉0d0a
- Lc_buf_copy_uc(p->buf + 1,p->__buf,p->num-2);
+ //Lc_buf_copy_uc(p->buf + 1,p->__buf,p->num-2);
+ for(i=0;inum-2;i++)
+ {
+ p->buf[1+i] = p->__buf[i];
+ }
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
}
}
diff --git a/source/tpc/ccmodbus.c b/source/tpc/ccmodbus.c
index 688b01c..6a92d36 100644
--- a/source/tpc/ccmodbus.c
+++ b/source/tpc/ccmodbus.c
@@ -30,10 +30,10 @@ msp/uartx.c 底层代码 和cpu相关
********************************************************************************/
#include "ccmodbus.h"
+#include "modbus.h"
#include "../clib/clib.h"
-vU8 D_CMD_Filter1_ff;
-vU8 D_CMD_Filter2_fe;
-#if 0
+#include "../app/app_config.h"
+
U8 L3_pack_ccmodbus_03(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num)
{
U8 bufsize = 4;
@@ -49,7 +49,6 @@ U8 L3_pack_ccmodbus_03(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num)
return bufsize + 2 + 2;
}
-
U8 L3_pack_ccmodbus_06(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U8 *buf)
{
U8 bufsize = 4;
@@ -66,9 +65,11 @@ U8 L3_pack_ccmodbus_06(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U8 *buf)
return bufsize + 2 + 2;
}
-U8 L3_pack_ccmodbus_10(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num, U8 bytes, U8 *buf)
+U8 L3_pack_ccmodbus_10(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num, U8 bytes, U8 *buf,U16 extra_num)
{
U8 bufsize = 5,i = 0;
+ num += extra_num;
+ bytes = num*2;
pmodbus->slaver = slaverId;
pmodbus->oper = MODBUS_OPER_WRITE_M;
pmodbus->buf[0] = reg >> 8 & 0xFF;
@@ -87,31 +88,33 @@ U8 L3_pack_ccmodbus_10(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num,
return bufsize + bytes + 2 + 2;
}
-#endif
-U8 L3_pack_ccmodbus_03(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num)
+
+U8 L3_pack_ccmodbus_90(TS_PH3_ccmodbus *pmodbus ,U8 slaverId)
{
- U8 bufsize = 4;
+ U8 bufsize = 12,i = 0,j = 0;
pmodbus->slaver = slaverId;
- pmodbus->oper = MODBUS_OPER_READ;
- pmodbus->buf[0] = reg >> 8 & 0xFF;
- pmodbus->buf[1] = reg >> 0 & 0xFF;
- pmodbus->buf[2] = num >> 8 * 0xFF;
- pmodbus->buf[3] = num >> 0 & 0xFF;
+ pmodbus->oper = MODBUS_OPER_AUTH;
+ pmodbus->buf[0] = APP_VERSION_HEX >> 4 & 0xF; //major version
+ pmodbus->buf[1] = APP_VERSION_HEX >> 0 & 0xF; //minor version
+ pmodbus->buf[2] = 0x00; //mq high
+ pmodbus->buf[3] = 0x04; //mq low
+ pmodbus->buf[4] = 0x00; //
+ for(i=5;ibuf[i] = G.mcu_id[j];
+ j++;
+ }
crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
pmodbus->buf[bufsize] = pmodbus->crc[0];
pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
return bufsize + 2 + 2;
}
-U8 L3_pack_ccmodbus_06(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U8 *buf)
+U8 L3_pack_ccmodbus_92(TS_PH3_ccmodbus *pmodbus ,U8 slaverId)
{
- U8 bufsize = 4;
+ U8 bufsize = 7;
pmodbus->slaver = slaverId;
- pmodbus->oper = MODBUS_OPER_WRITE;
- pmodbus->buf[0] = reg >> 8 & 0xFF;
- pmodbus->buf[1] = reg >> 0 & 0xFF;
- pmodbus->buf[2] = buf[0];
- pmodbus->buf[3] = buf[1];
+ pmodbus->oper = MODBUS_OPER_PING;
crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
pmodbus->buf[bufsize] = pmodbus->crc[0];
pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
@@ -119,36 +122,11 @@ U8 L3_pack_ccmodbus_06(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U8 *buf)
return bufsize + 2 + 2;
}
-U8 L3_pack_ccmodbus_10(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num, U8 bytes, U8 *buf)
-{
- U8 bufsize = 5,i = 0;
- pmodbus->slaver = slaverId;
- pmodbus->oper = MODBUS_OPER_WRITE_M;
- pmodbus->buf[0] = reg >> 8 & 0xFF;
- pmodbus->buf[1] = reg >> 0 & 0xFF;
- pmodbus->buf[2] = num >> 8 * 0xFF;
- pmodbus->buf[3] = num >> 0 & 0xFF;
- pmodbus->buf[4] = bytes;
-
- for(i=0;ibuf[5+i] = buf[i];
- }
- crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize + bytes);
- pmodbus->buf[bufsize + bytes] = pmodbus->crc[0];
- pmodbus->buf[bufsize + bytes + 1] = pmodbus->crc[1];
-
- return bufsize + bytes + 2 + 2;
-}
-
-#if 0
-
-U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info)
+U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, CCMD_SLAVER_INFO *slaver_info)
{
+ U8 pkglen = 0;
pccmodbus->filter1 = D_CMD_Filter1_ff;
pccmodbus->filter2 = D_CMD_Filter2_fe;
- pccmodbus->num = L3_pack_modbus((TS_PH4_modbus*)&pccmodbus->slaver, slaver_info);
-
switch(slaver_info->oper)
{
case MODBUS_OPER_READ:
@@ -157,17 +135,21 @@ U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info)
case MODBUS_OPER_WRITE:
pkglen = L3_pack_ccmodbus_06(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->buf);
break;
- case MODBUS_OPER_WRITE_M:
- pkglen = L3_pack_ccmodbus_10(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum,slaver_info->bytes,slaver_info->buf);
+ case MODBUS_OPER_WRITE_M://组包时加extra_num
+ pkglen = L3_pack_ccmodbus_10(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum,slaver_info->bytes,slaver_info->buf,slaver_info->extra_num);
+ break;
+ case MODBUS_OPER_AUTH:
+ pkglen = L3_pack_ccmodbus_90(pccmodbus,slaver_info->slaver);
+ break;
+ case MODBUS_OPER_PING:
+ pkglen = L3_pack_ccmodbus_92(pccmodbus,slaver_info->slaver);
break;
default:
break;
}
pccmodbus->num = pkglen;
-
- return pccmodbus->num + 3;
+ return pkglen + 3;
}
-#endif
U16 L3_ccmodbus_slaver_ack(TS_PH3_ccmodbus *pccmodbus,TS_PH3_ccmodbus *pModbusAck)
{
@@ -186,8 +168,8 @@ void L3_ccmodbus_master_handler(TS_PH3_ccmodbus *pmodbus,MD_SLAVER_INFO *p_slave
///FF FE 08 52 16 11 22 33 44 F5 9F 发送了一个modbus协议包(8个数据52 16 11 22 33 44 F5 9F )
/// 0 1 2 3 4 5 6 7 8 9 10
/// 协议表达的意思为地址为0x52的从机, 功能码16 数据为11 22 33 44,校验码 F5 9F
-void L1_s2b_PH3(struct _tp_handler_x *p)// reentrant
-{
+void L1_s2b_PH3(TS_Handle_PH3 *p)// reentrant
+{
p->cashe[1] = p->cashe[0];
p->cashe[0] = p->reg;//
@@ -195,66 +177,47 @@ void L1_s2b_PH3(struct _tp_handler_x *p)// reentrant
{
if ((p->cashe[1] == p->head_0)&&(p->cashe[0] == p->head_1))
{
+ LED1 ^= 1;
p->head = 1;
- p->max = D_TPC_HANDLER_X_LEN ;
- p->sp = p->buf;
- p->num = 0;
- p->sp[p->num++] = p->head_0;
- p->sp[p->num++] = p->head_1;
+ p->max = D_s_PH3_ccmodbus_max - 1;
+ p->sp = (unsigned char *)&(p->ts_ccmodbus);
+ p->sp[0] = p->head_0;
+ p->sp[1] = p->head_1;
+ p->num = 1;
+ //p->ok = 1;
}
}
+
else
{
- p->sp[p->num++] = p->cashe[0];
- if(p->num == 3)//数量 第3个数据
+ p->num ++;
+ p->sp[p->num] = p->cashe[0];
+ if(p->num == 2)//数量 第3个数据
{
- p->max = p->cashe[0] + 3;
- if((p->max > D_TPC_HANDLER_X_LEN ) || (p->max < D_s_ccmodbus_min))
+ p->max = p->reg + 2;//
+ if(p->max >= D_s_PH3_ccmodbus_max)
{
- p->head = 0;
- return; //error 超过最大长度
+ p->max = D_s_PH3_ccmodbus_max - 1;
+ p->sp[p->num] = p->max - 2;
}
}
if(p->num >= p->max)
{
- crc16(p->crc,p->buf + 3,p->num - 3 - 2);
- if(p->crc[0] == p->buf[p->num-2] && p->crc[1] == p->buf[p->num-1])
+ //crc16(p->crc,&p->ts_ccmodbus.slaver,p->ts_ccmodbus.num - 2);
+ //if(p->crc[0] == p->sp[p->num-1] && p->crc[1] == p->sp[p->num])
+ if(1)
{
if (p->ok != 1)
{
+ //byte_copy_uc((U8*)&p->ts_ccmodbus,(U8*)&p->__ts_ccmodbus,p->max + 1);
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
}
}
+ p->num = 0; //放在if (p->ok != 1) 外
p->head = 0; //放在if (p->ok != 1) 外
}
}
-}
-U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, CCMD_SLAVER_INFO *slaver_info)
-{
- U8 pkglen = 0;
- pccmodbus->filter1 = D_CMD_Filter1_ff;
- pccmodbus->filter2 = D_CMD_Filter2_fe;
- switch(slaver_info->oper)
- {
- case MODBUS_OPER_READ:
- pkglen = L3_pack_ccmodbus_03(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum);
- break;
- case MODBUS_OPER_WRITE:
- pkglen = L3_pack_ccmodbus_06(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->buf);
- break;
- case MODBUS_OPER_WRITE_M:
- pkglen = L3_pack_ccmodbus_10(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum,slaver_info->bytes,slaver_info->buf);
- break;
-
- default:
- break;
- }
- pccmodbus->num = pkglen;
- return pkglen + 3;
}
-
-/******************************************************************************
-** End Of File
-******************************************************************************/
+/******************************************************************************/
diff --git a/source/tpc/ccmodbus.h b/source/tpc/ccmodbus.h
index 1e59882..9130a0a 100644
--- a/source/tpc/ccmodbus.h
+++ b/source/tpc/ccmodbus.h
@@ -50,11 +50,11 @@ msp/uartx.c 底层代码 和cpu相关
-#ifndef __TPC_CCMODBUS_H_
-#define __TPC_CCMODBUS_H_
-
-#include "tpc_x.h"
-#include "modbus.h"
+#ifndef __CCMODBUS_H_
+#define __CCMODBUS_H_
+#include "../clib/type.h"
+#include "../tpc/tpc_x.h"
+//#include "../app/app_config.h"
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
///协议类型: 十六进制协议3->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/// 发送的数据为有ff fe开头的十六进制的长协议,内包含标准的modbus协议
@@ -64,8 +64,9 @@ msp/uartx.c 底层代码 和cpu相关
#define D_s_PH3_ccmodbus_max 128
#define D_s_ccmodbus_min (D_s_modbus_min + 3)
-extern vU8 D_CMD_Filter1_ff;
-extern vU8 D_CMD_Filter2_fe;
+#define D_CMD_Filter1_ff 0xFF
+#define D_CMD_Filter2_fe 0xFE
+
typedef struct
{//8byte
vU8 filter1;
@@ -89,7 +90,7 @@ typedef struct
vU8 head; //接收标志头标志
vU8 ok; //接收协议ok标志
vU8 num;
- vU8 *sp;
+ vU8 *sp;
TS_PH3_ccmodbus ts_ccmodbus;
vU8 crc[2];
}TS_Handle_PH3;
@@ -103,13 +104,13 @@ typedef struct
U16 bytes;
U8 *buf;
U16 mask;
+ U16 extra_num;
}CCMD_SLAVER_INFO;
-
-extern U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info);
-extern U16 L3_ccmodbus_slaver_ack(TS_PH3_ccmodbus *pccmodbus,TS_PH3_ccmodbus *pModbusAck);
-extern void L3_ccmodbus_master_handler(TS_PH3_ccmodbus *pmodbus,MD_SLAVER_INFO *p_slaver_info);
-extern void L1_s2b_PH3(struct _tp_handler_x *p);// reentrant;
+extern U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, CCMD_SLAVER_INFO *slaver_info);
+//extern U16 L3_ccmodbus_slaver_ack(TS_PH3_ccmodbus *pccmodbus,TS_PH3_ccmodbus *pModbusAck);
+//extern void L3_ccmodbus_master_handler(TS_PH3_ccmodbus *pmodbus,MD_SLAVER_INFO *p_slaver_info);
+extern void L1_s2b_PH3(TS_Handle_PH3 *p);// reentrant;
#endif /* end __TPC_CCMODBUS_H_ */
diff --git a/source/tpc/modbus.c b/source/tpc/modbus.c
index f858244..84c5189 100644
--- a/source/tpc/modbus.c
+++ b/source/tpc/modbus.c
@@ -30,10 +30,188 @@ msp/uartx.c 底层代码 和cpu相关
********************************************************************************/
#include "modbus.h"
+#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../ctask/tick.h"
#include "../clib/clib.h"
+
+U8 L3_pack_modbus_03(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num)
+{
+ U8 bufsize = 4;
+ pmodbus->slaver = slaverId;
+ pmodbus->oper = MODBUS_OPER_READ;
+ pmodbus->buf[0] = reg >> 8 & 0xFF;
+ pmodbus->buf[1] = reg >> 0 & 0xFF;
+ pmodbus->buf[2] = num >> 8 * 0xFF;
+ pmodbus->buf[3] = num >> 0 & 0xFF;
+ crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
+ pmodbus->buf[bufsize] = pmodbus->crc[0];
+ pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
+
+ return bufsize + 2 + 2;
+}
+
+U8 L3_pack_modbus_06(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U8 *buf)
+{
+ U8 bufsize = 4;
+ pmodbus->slaver = slaverId;
+ pmodbus->oper = MODBUS_OPER_WRITE;
+ pmodbus->buf[0] = reg >> 8 & 0xFF;
+ pmodbus->buf[1] = reg >> 0 & 0xFF;
+ pmodbus->buf[2] = buf[0];
+ pmodbus->buf[3] = buf[1];
+ crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
+ pmodbus->buf[bufsize] = pmodbus->crc[0];
+ pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
+
+ return bufsize + 2 + 2;
+}
+
+U8 L3_pack_modbus_10(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num, U8 bytes, U8 *buf)
+{
+ U8 bufsize = 5,i = 0;
+ pmodbus->slaver = slaverId;
+ pmodbus->oper = MODBUS_OPER_WRITE_M;
+ pmodbus->buf[0] = reg >> 8 & 0xFF;
+ pmodbus->buf[1] = reg >> 0 & 0xFF;
+ pmodbus->buf[2] = num >> 8 * 0xFF;
+ pmodbus->buf[3] = num >> 0 & 0xFF;
+ pmodbus->buf[4] = bytes;
+
+ for(i=0;ibuf[5+i] = buf[i];
+ }
+ crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize + bytes);
+ pmodbus->buf[bufsize + bytes] = pmodbus->crc[0];
+ pmodbus->buf[bufsize + bytes + 1] = pmodbus->crc[1];
+
+ return bufsize + bytes + 2 + 2;
+}
+
+U8 L3_pack_modbus(TS_PH4_modbus *pmodbus, MD_SLAVER_INFO *slaver_info)
+{
+ switch(slaver_info->oper)
+ {
+ case MODBUS_OPER_READ:
+ return L3_pack_modbus_03(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum);
+ case MODBUS_OPER_WRITE:
+ return L3_pack_modbus_06(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->buf);
+ case MODBUS_OPER_WRITE_M:
+ return L3_pack_modbus_10(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum,slaver_info->bytes,slaver_info->buf);
+ default:
+ return 0;
+ }
+}
+
+U8 L3_pack_modbusack(TS_PH4_modbus *pmodbus ,U8 slaver, U8 oper, U8 bufsize)
+{
+ pmodbus->slaver = slaver;
+ pmodbus->oper = oper;
+ crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
+ pmodbus->buf[bufsize] = pmodbus->crc[0];
+ pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
+
+ return bufsize + 2 + 2;
+}
+
+//MODBUS从设备数据处理函数
+static Modbus03Ack *pModbus03Ack;
+static Modbus06Ack *pModbus06Ack;
+static Modbus10Ack *pModbus10Ack;
+static U16 modbuslen = 0,reg,num,val,count;
+U16 L3_modbus_slaver_ack(TS_PH4_modbus *pmodbus,TS_PH4_modbus *pModbusAck)
+{
+ switch(pmodbus->oper)
+ {
+ case MODBUS_OPER_READ:
+ case MODBUS_OPER_READCONFIG:
+ {
+ U16 i = 0,j = 0,regval = 0;
+ pModbus03Ack = (Modbus03Ack *)pModbusAck->buf;
+ reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
+ num = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
+ if((num <= D_MODBUS_REG_MAX_NUM) && (reg <= sizeof(R)/2)) //每次最多读取D_MODBUS_REG_MAX_NUM个寄存器.防止越界
+ {
+ for(i=0; ibuf[j++] = regval >> 8 & 0xFF;
+ pModbus03Ack->buf[j++] = regval & 0xFF;
+ }
+ pModbus03Ack->bytes = num * 2;
+ modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, pModbus03Ack->bytes + 1);
+ }
+ break;
+ }
+#if 0
+ case MODBUS_OPER_WRITE:
+ {
+ pModbus06Ack = (Modbus06Ack *)pModbusAck->buf;
+ reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
+ val = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
+ if(reg <= sizeof(R)/2)
+ {
+ *(REG_2_MEM(reg)) = val;
+ pModbus06Ack->reg = reg;
+ pModbus06Ack->val = *(REG_2_MEM(reg));
+ modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, 4);
+ }
+ break;
+ }
+#endif
+ case MODBUS_OPER_WRITE_M:
+ {
+ U16 i = 0;
+ pModbus10Ack = (Modbus10Ack *)pModbusAck->buf;
+ reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
+ num = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
+ count = pmodbus->buf[4];
+ if((num <= D_MODBUS_REG_MAX_NUM) && (reg < sizeof(R)/2)) //每次最多写入20个寄存器 40个字节,以防止越界
+ {
+ for(i=0; ibuf[5+i*2]) << 8 | ((U16)pmodbus->buf[5+i*2+1]);
+ }
+ pModbus10Ack->reg = reg;
+ pModbus10Ack->num = num;
+ modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, 4);
+ }
+ break;
+ }
+ default:break;
+ }
+ return modbuslen;
+}
+
+//MODBUS主设备轮询时,从设备返回数据处理函数
+//MD_SLAVER_INFO需要被正确定义
+void L3_modbus_master_handler(TS_PH4_modbus *pmodbus,MD_SLAVER_INFO *p_slaver_info)
+{
+ switch(pmodbus->oper)
+ {
+ case MODBUS_OPER_READ:
+ case MODBUS_OPER_READCONFIG:
+ {
+ U8 i = 0;
+ for(i=0;ibuf[0];i++)
+ {
+ //此处假设字节序一致
+ p_slaver_info->buf[i] = pmodbus->buf[i + 1];
+ //TODO 字节序不一致时的处理
+ }
+ break;
+ }
+ case MODBUS_OPER_WRITE:
+ case MODBUS_OPER_WRITE_M:
+ default: break;
+ }
+}
+
+
+
+
//MODBUS协议解析函数
//超出D_tp_handle_x_len,不继续保存数据
void L1_s2b_PH4(struct _tp_handler_x *p)
diff --git a/source/tpc/modbus.h b/source/tpc/modbus.h
index 47222cf..5389a00 100644
--- a/source/tpc/modbus.h
+++ b/source/tpc/modbus.h
@@ -38,6 +38,8 @@ enum MODBUS_OPER
MODBUS_OPER_WRITE = 0x06,
MODBUS_OPER_WRITE_M = 0x10,
MODBUS_OPER_ERR = 0x8F,
+ MODBUS_OPER_AUTH = 0x90,
+ MODBUS_OPER_PING = 0x92,
};
//协议类型: MODBUS RTU模式