diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..1d72d42 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.associations": { + "UART0.C": "cpp", + "msp_uart0.C": "cpp", + "msp_uart2.C": "cpp", + "asp_oid.h": "c", + "msp_uart2.h": "c", + "task_w600.h": "c", + "UART2.C": "cpp" + } +} \ No newline at end of file diff --git a/keilp/cc_as_stc02_ps5ws.uvprojx b/keilp/cc_as_stc02_ps5ws.uvprojx index 69341ff..8aceae2 100644 --- a/keilp/cc_as_stc02_ps5ws.uvprojx +++ b/keilp/cc_as_stc02_ps5ws.uvprojx @@ -123,6 +123,47 @@ 0 16 + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + @@ -362,6 +403,11 @@ 1 ..\source\app\app_task_tcp.c + + app_task_speech.c + 1 + ..\source\app\app_task_speech.c + @@ -425,7 +471,7 @@ msp_uart3.c 1 - ..\source\msp\nouse\msp_uart3.c + ..\source\msp\msp_uart3.c @@ -494,6 +540,9 @@ + + New Group + diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_sym b/si4/ps5ws.si4project/soft_ps5ws.sip_sym index 606a81c..6d98ce2 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 cf2857c..b27a913 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 b7cef3c..9f1ad26 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 763fdeb..f652f17 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 c8f5940..3949cdd 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 87a6aa3..8163cdb 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 37940e2..c5e630f 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 8e6dd37..101383e 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 2dd9b56..3a5eac2 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 4878576..71776e9 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 d6264ec..9b00a90 100644 --- a/source/app/app_config.c +++ b/source/app/app_config.c @@ -8,7 +8,7 @@ GlobalParam G; GlobalRegister R; -WR_Buf wr_buf; +//WR_Buf wr_buf; void L3_param_init(void) { @@ -26,7 +26,7 @@ void L3_param_init(void) Lc_strcpy(G.ap_sid,"cc_pen_ap"); //ap模式pwd Lc_strcpy(G.ap_pwd,"ccsens123"); - + #if 0 wr_buf.wIndex = wr_buf.rIndex = 0; wr_buf.maxsize = sizeof(wr_buf.buf)/sizeof(PenPoint); @@ -108,7 +108,7 @@ void L3_reg_reset(void) R.pen_net_sta = 0; R.pen_ele_sta = 0; R.question_sta = 0; - + R.spee_order = 0; //R.oid3_order = 0; //R.pack_order = 0; //R.frame_order = 0; @@ -138,21 +138,13 @@ void L3_reg_reset(void) G.ccmd_slaver_info[1].mask = 0; G.ccmd_slaver_info[1].extra_num = 0; //普通码 - G.ccmd_slaver_info[3].slaver = SLAVER_TCP_SERVER_ID; - G.ccmd_slaver_info[3].oper = MODBUS_OPER_WRITE_M; - G.ccmd_slaver_info[3].reg = 0x05; - G.ccmd_slaver_info[3].regnum = 0x00;//基础数量,程序每次应动态添加点数 - G.ccmd_slaver_info[3].bytes = 0; - G.ccmd_slaver_info[3].buf = (U8*)&R.oid3_order; - G.ccmd_slaver_info[3].mask = 0; - G.ccmd_slaver_info[3].extra_num = 2; - G.modbusstmp = 0; G.authed = 0; G.flowStartVal = 1; G.pen_up = 0; G.datapkg = 0; G.pen_t = 1; + } diff --git a/source/app/app_config.h b/source/app/app_config.h index a667af1..fe221f2 100644 --- a/source/app/app_config.h +++ b/source/app/app_config.h @@ -7,7 +7,7 @@ #include "../tpc/modbus.h" //#include "../asp/asp_oid.h" - +#define SERVER_ID 0x01 #define APP_VERSION 0x10 #define SLAVER_TCP_SERVER_ID 0x14 #define APP_VERSION_HEX 0x11 //高4位主版本,低4位次版本 @@ -103,6 +103,7 @@ typedef struct global_param extern GlobalParam G; //STEP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<pkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp); + if(s->pkg->slaver == SERVER_ID) + { + L3_ccmodbus_slaver_ack(s->pkg,s->ack); + s->ccmd_speech_info[0].start = START_CODE; + s->ccmd_speech_info[0].num = 0x07; + s->ccmd_speech_info[0].oper = SPEECH_NAME_PLAY; + s->ccmd_speech_info[0].title = 0x43; + //ts_speech.ccmd_speech_info[0].buf = (U8*)&R.spee_order; + s->ccmd_speech_info[0].end = END_CODE; + //Lc_buf_copy_uc((U8 *)&s->ccmd_speech_info[0].buf,(U8 *)&R.spee_order,(U16)2); + //L0_uart0_sendArray((U8 *)&R.spee_order,2); //00 04 + s->slaverIndex = 0; + s->pkglen = L3_pack_speech(&s->speech_pkg , &s->ccmd_speech_info + s->slaverIndex); + L2_task_go(D_task_speech_send); + } + } + else + { + L2_task_go(D_task_wait_tcp_order); + } + TTSS_Task_step(D_task_speech_send) + { + L0_uart3_sendArray((U8 *)&s->speech_pkg, s->pkglen); + //L0_uart0_sendArray((U8*)&s->speech_pkg,s->pkglen); + } + L2_task_go(D_task_wait_tcp_order); + TTSS_Task_end(); +} + +U8 ascTable[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; + +U8 *hexBytes2AsciiBytes(U8 asciiBytes[],U8 hexBytes[],U8 hexBytesLen) +{ + U8 i = 0; + for(i=0;i> 4 & 0x0F]; + asciiBytes[i*2 + 1] = ascTable[hexBytes[i] >> 0 & 0x0F]; + + } + return asciiBytes; +} + + U8 Fun_SC_Check(U8 *p1, unsigned short int len) +{ + U8 sum = 0; + for(;len > 0; len--) + { + sum += *p1++; + } + + return sum; +} + + + +U8 L3_pack_speech_A3(TS_SPEECH *pspeech , U8 start ,U8 num ,U8 title ,U8 end)//tcp传来的buf +{ + int name; + U8 tcp_buf[6]; + U8 str_buf[6]; + U8 bufsize = 9; + pspeech->start = start; + pspeech->num = num; + pspeech->oper = SPEECH_NAME_PLAY; + pspeech->title = title; + Lc_buf_copy_uc((U8 *)&tcp_buf,(U8 *)&R.spee_order,(U16)2); + hexBytes2AsciiBytes(str_buf,tcp_buf,2); + name = getIndexOfSigns(str_buf[2])*16+getIndexOfSigns(str_buf[3])*1; + pspeech->buf[0] = (U8)(name/100) ; + pspeech->buf[1] = (U8)((name%100)/10); + pspeech->buf[2] = (U8)(name%10); + //L0_uart0_sendArray((U8*)&tcp_buf,3); + Lc_hex2ascii((U8 *)&pspeech->buf,(U8 *)&pspeech->buf,3); + pspeech->crc = Fun_SC_Check(&pspeech->num,6); //累加和校验 + pspeech->end = end; + return bufsize; +} + +U8 L3_pack_speech(TS_SPEECH *pspeech, CCMD_SPEECH_INFO *speech_info) { - U8 i; - L1_task_init(&ts_speech.task); - L3_task_s_go(ts_speech,D_task_init); - for(i=0;ioper) { - ts_speech.cc_speech_info[i].mask = 0; - } - ts_speech.cc_speech_info[0].oper = SPEECH_NAME_PLAY; - ts_speech.cc_speech_info[0].mask = 0; -} -void L3_task_speech_handle(TS_tcp *s) -{ - -} - -U8 L3_pack_speech_A3(TS_SPEECH *pspeech , U8 *tcp_buf ,U8 *buf)//tcp传来的buf -{ - long name; - U8 bufsize = 9; - pspeech->start = START_CODE; - pspeech->num = 0x07; - pspeech->oper = SPEECH_NAME_PLAY; - pspeech->title = 0x43; - name = hexToDec(&tcp_buf); - tcp_buf[0] = (int)(name/100); - tcp_buf[1] = (int)((name%100)/10); - tcp_buf[2] = (int)(name%10); - Lc_hex2ascii(&tcp_buf,&pspeech->buf,3); - pspeech->crc = (pspeech->num + pspeech->oper + pspeech->buf[0] + pspeech->buf[1] + pspeech->buf[2] + pspeech->buf[3])>> 0 & 0xFF//累加和校验 - pspeech->end = END_CODE; - - return bufsize; -} -U8 L3_pack_ccmodbus(TS_SPEECH *pspeech , CC_SPEECH_INFO *speech_info) -{ - U16 pkglen = 0; - switch(speech_info->oper) - { - case SPEECH_NAME_PLAY: - pkglen = L3_pack_ccmodbus_03(pspeech,tcp_buf,speech_info->buf); - break; - default: - break; - } - pccmodbus->num = pkglen; - return pkglen + 3; -} - + case SPEECH_NAME_PLAY: + pkglen = L3_pack_speech_A3(pspeech,speech_info->start,speech_info->num,speech_info->title,speech_info->end); + break; + default: + break; + } + return pkglen; +} + diff --git a/source/app/app_task_speech.h b/source/app/app_task_speech.h index db8dab6..8853098 100644 --- a/source/app/app_task_speech.h +++ b/source/app/app_task_speech.h @@ -1,11 +1,17 @@ #ifndef _APP_TASK_SPEECH_H #define _APP_TASK_SPEECH_H + +#include "../tpc/ccmodbus.h" +#include "../ctask/task.h" + + + #define CC_SPEECH_INFO_MAX 1 -#define D_s_TS_speech_max 32 +#define D_s_TS_speech_max 16 enum SPEECH_OPER { - SPEECH_NAME_PLAY 0xA3; + SPEECH_NAME_PLAY = 0xA3, }; typedef struct @@ -14,32 +20,42 @@ typedef struct vU8 num; vU8 oper; vU8 title; - vU8 buf[D_s_TS_speech_max - 3]; + vU8 buf[3]; vU8 crc; vU8 end; }TS_SPEECH; + typedef struct { - U16 slaver; + U16 start; + U16 num; U16 oper; - U16 reg; - U16 regnum; - U16 bytes; - U8 *buf; - U16 mask; -}CC_SPEECH_INFO; + U16 title; + //U8 buf[2]; + U16 end; +}CCMD_SPEECH_INFO; typedef struct { TS_task task; U16 slaverIndex; U16 pkglen; - CC_SPEECH_INFO cc_speech_info[CC_SPEECH_INFO_MAX]; + TS_PH3_ccmodbus *pkg; + TS_PH3_ccmodbus *ack; + TS_SPEECH *speech_pkg; + CCMD_SPEECH_INFO ccmd_speech_info[CC_SPEECH_INFO_MAX]; }TS_TASK_SPEECH; + extern TS_TASK_SPEECH ts_speech; +extern void L3_task_speech_init(void); +extern void L3_task_speech_handle(TS_TASK_SPEECH *s); +extern U8 L3_pack_speech_A3(TS_SPEECH *pspeech , U8 start ,U8 num ,U8 title ,U8 end);//tcp传来的buf;//tcp传来的buf +extern U8 L3_pack_speech(TS_SPEECH *pspeech, CCMD_SPEECH_INFO *speech_info); +extern U8 *hexBytes2AsciiBytes(U8 asciiBytes[],U8 hexBytes[],U8 hexBytesLen); +extern U8 Fun_SC_Check(U8 *p1, unsigned short int len); diff --git a/source/app/app_task_tcp.c b/source/app/app_task_tcp.c index 183420c..9244831 100644 --- a/source/app/app_task_tcp.c +++ b/source/app/app_task_tcp.c @@ -39,7 +39,6 @@ void L3_task_tcp_handle(TS_tcp *s) { L2_task_go(D_task_tcp_switch_next_slaver); } - TTSS_Task_step(D_task_tcp_send_modbus_pkg) //发送包 if(G.ccmd_slaver_info[s->slaverIndex].mask == 1) { @@ -50,68 +49,75 @@ void L3_task_tcp_handle(TS_tcp *s) s->sendStamp = s_nos_tick.t_1s; L2_task_go(D_task_tcp_wait_modbus_ack); } - TTSS_Task_step(D_task_tcp_wait_modbus_ack) //等待ack - if((s->slaverIndex) == 0) + //if((s->slaverIndex) == 0x00) + switch(s->slaverIndex) { - 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) + case 0: + if(s_uart2_tcp_rec.ok) { - s->ackFlag = 1; - - switch(s->slaverIndex) + 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) { - case 0://如果oper == 90:成功,91 == 不成功 - switch(G.ccmd_slaver_info[s->slaverIndex].oper) - { + s->ackFlag = 1; + + //switch(s->slaverIndex) + //{ + //case 0://如果oper == 90:成功,91 == 不成功 + switch(s->pAckPkg->oper) + { case 0x90: - //L0_uart0_sendstr("11111"); G.authed = 1; break; case 0x91: G.authed = 0; break; - } - break; - case 1: - break; - default: - 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); } - } + //#if 0 + 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); + } + } + //#endif + //break; + //case 1: + break; + case 1: + L2_task_go(D_task_tcp_switch_next_slaver); + break; + default: + break; + //} } + //} + //} - else - { - L2_task_go(D_task_tcp_switch_next_slaver); - } + //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_control.c b/source/app/app_task_tcp_control.c index 6b66ab9..a80080e 100644 --- a/source/app/app_task_tcp_control.c +++ b/source/app/app_task_tcp_control.c @@ -38,7 +38,7 @@ void L3_task_tcp_control_handle(TS_tcp_control *s)//判定是否抬笔/缓冲区 //发送认证包 G.ccmd_slaver_info[0].mask = 1; } - else if(ts_task_oid.can_send) + else if(ts_task_oid.can_send && G.authed) { ts_task_oid.can_send = 0; G.ccmd_slaver_info[1].buf = (U8*)&points; diff --git a/source/app/main.c b/source/app/main.c index 99a5313..3844e4b 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -69,6 +69,7 @@ stc5ac32s void L0_main_init(void) { + Lc_delay_ms(200); //板卡初始化 L0_board_config(); @@ -77,15 +78,15 @@ void L0_main_init(void) //串口2初始化 L0_uart2_buf_init(); //串口3初始化 - //L0_uart3_buf_init(); + L0_uart3_buf_init(); //Lc_delay_ms(100); L1_tick_init(); + //P53口初始化为 推挽输出 + L0_PW_3V3_INIT(); - //开启全局中断 EA = 1; - L0_uart0_sendstr("\r\nasV1.a"); #if 0 L1_oid_init(); printf(" ok\r\n"); @@ -94,7 +95,7 @@ void L0_main_init(void) #endif //系统时钟初始化 L0_timer0_Init(); - //L0_key_init(); + L0_key_init(); //G初始化 L3_param_init(); //R初始化 @@ -104,14 +105,15 @@ void L0_main_init(void) //寄存器监听任务初始化 //L3_task_reglisten_init(); - + //w600任务初始化 - L3_task_gm35_flow_init(W600_ST); + // L3_task_gm35_flow_init(W600_ST); //按键任务初始化 - //L0_key_init(); + L0_key_init(); //笔头任务初始化 L1_oid_init(); - + //语音模块初始化 + // L3_task_speech_init(); //tcp轮询任务初始化 L3_task_tcp_init(); L3_task_tcp_control_init(); @@ -122,6 +124,10 @@ void L0_main_init(void) //=============================================== void main(void) { + //int i; + U8 code open[9] = {0x7E,0x07,0xA3,0x43,0x30,0x30,0x39,0x86,0xEF}; + U8 buletooth[7] = {0x7E,0x05,0xED,0x00,0x00,0xF2,0xEF}; + //初始化 L0_main_init(); //获取mcu id @@ -129,10 +135,29 @@ void main(void) //打印版本信息 L0_uart0_sendArray("v1.0",4); + L0_uart0_sendstr("KEY1-TEST"); + + Lc_delay_ms(3000); + L0_uart3_sendArray((U8 *)&open , 9); + // L0_uart3_sendArray((U8 *)&buletooth , 7); + // L0_uart0_sendArray((U8 *)&buletooth , 7); + + // 控制wifi_3v3输出 + L0_PW_3V3_ON(); + + #if 0 + for(i =0;i<100;i++) + { + //Lc_delay_ms(100); + L0_uart3_sendArray((U8 *)&open , 9); + Lc_delay_ms(100); + } + #endif while(1) { - + L1_Oid_readoid(); + if(1 == s_nos_tick.t1s_heartbeat)//1s { @@ -141,9 +166,9 @@ void main(void) D_print_heartbeat() {///这个地方可以放置心跳的打印信息 ///如果其他的打印存在,并且关闭了这个打印的话,这个打印会临时被关闭,下一次打开 - - L0_uart0_uc('.'); - + // L0_uart0_uc('.'); + // L0_uart2_sendArray((U8 *)&buletooth , 7); + } } @@ -153,7 +178,7 @@ void main(void) /// L1_as_readA(0);//读取倾角传感器数据 /// Lc_buf_copy_uc(s_uart1_rec.buf,s_as[0].d,8); - // s_uart1_rec.buf= 传感器数据 + // s_uart1_rec.buf= 传感器数据 /// ff 08 xh xl yh yl zh zl /// s_uart1_rec.ok =1; } @@ -171,7 +196,7 @@ void main(void) switch(s_uart0_rec.buf[1]) { case 0x0d: - /// L1_sd_debug(&s_uart0_rec.buf[2]); + // L1_sd_debug(&s_uart0_rec.buf[2]); break; case 0x00: L1_oid_debug(&s_uart0_rec.buf[2]); @@ -180,33 +205,38 @@ void main(void) break; } } - + // 7E 04 AE 1E XX EF #endif - //WIFI - L3_uart2_exp_protocol(&s_uart2_at); - L2_task_gm35_flow_handle(&s_task_gm35_flow); - //笔头数据采集 - L3_task_oid_handle(&ts_task_oid); + //L3_task_oid_handle(&ts_task_oid); + + //WIFI + // L3_uart2_exp_protocol(&s_uart2_at); + // L2_task_gm35_flow_handle(&s_task_gm35_flow); + //寄存器值监控 //L3_task_reglisten_handle(&s_task_reglisten); //输出,响应485协议 //L3_task_modbus_handler(&s_uart0_rec); + //语音模块 + // L3_task_speech_handle(&ts_speech); //按键处理 - //L3_task_key_handle(&s_task_key_handle); - //L3_task_modbus_handler2(&s_uart2_rec); + L3_task_key_handle(&s_task_key_handle); + //L3_task_modbus_handler2(&s_uart2_rec); + #if 1 //tcp发送 - L3_task_tcp_handle(&ts_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); + #endif } } //end main diff --git a/source/app/main.h b/source/app/main.h index a4f449c..5a54ca1 100644 --- a/source/app/main.h +++ b/source/app/main.h @@ -39,7 +39,7 @@ #include "../msp/msp_uart0.h" #include "../msp/msp_uart2.h" -//#include "../msp/msp_uart3.h" +#include "../msp/msp_uart3.h" #include "../msp/eeprom.h" @@ -58,6 +58,7 @@ #include "../app/task_key.h" #include "../app/app_task_tcp.h" #include "../app/app_task_tcp_control.h" +#include "../app/app_task_speech.h" #include "../asp/asp_oid.h" #include "../ctask/tick.h" diff --git a/source/app/task_key.c b/source/app/task_key.c index e6ba1e3..0d10855 100644 --- a/source/app/task_key.c +++ b/source/app/task_key.c @@ -13,20 +13,21 @@ #include "../clib/clib.h" struct _s_task_key_ s_task_key_handle; + void L0_key_init(void) { //使能 INT1下降沿中断 - IT0 = 0; + //IT0 = 0; //外部中断允许 - EX0 = 1; + //EX0 = 1; //使能 INT1下降沿中断 - IT1 = 0; + //IT1 = 0; //外部中断允许 - EX1 = 1; + //EX1 = 1; L1_task_init(&s_task_key_handle.task); L3_task_s_go(s_task_key_handle,D_task_init); } - +#if 0 void INT0_isrHanddle(void) D_SERVE_INT0 { struct _s_task_key_ *p = &s_task_key_handle; @@ -67,32 +68,107 @@ void INT1_isrHanddle(void) D_SERVE_INT1 IE1 = 0; //清除INT1中断程序执行过程中的中断请求 EX1 = 1; //开中断 } - +#endif void L3_task_key_handle(struct _s_task_key_ *p) { - if(p->key1_ok) - { - if(p->time1>=180) - { - LED1 = ~LED1; - } - else + + if(key1 == 0) + { + //Lc_delay_ms(10);//按键防抖 + if(key1 == 0) + { + p->key1_ok = 1; + while(!key1) + { + p->time1++; + // L0_uart0_uchex(p->time1); + } + } + } + if(p->key1_ok) { - //LED2 = ~LED2; - U8 i; - U8 mu[9]; - U16 music[9] = {0x7E,0x07,0xA3,0x43,0x30,0x30,0x39,0x86,0xEF}; - //7E 07 A3 43 30 30 39 86 EF - for(i = 0;i<9;i++) + + if(p->time1 >= 180) + { + // L0_uart0_uc('#'); + // L0_uart0_uchex(p->time1); + // //LED1 = ~LED1; + // LED4 = ~LED4; + } + else + { + U8 front[14] = {0xFF,0xFE,0x0B,0x14,0x10,0x00,0x03,0x00,0x01,0x02,0x00,0x00,0x54,0xF3}; + LED3 = 1; + Lc_delay_ms(100); + LED3 = 0; + LED3 = ~LED3; + L3_gm35_send_data((U8 *)&front,14); + + #if 0 + U8 i; + U8 mu[9]; + U8 music[9] = {0x7E,0x07,0xA3,0x43,0x30,0x30,0x39,0x86,0xEF}; + FF FE 0B 14 10 00 03 00 01 02 00 00 54 F3 + //7E 07 A3 43 30 30 39 86 EF + for(i = 0;i<9;i++) + { + mu[i] = music[i] & 0xFF; + } + L0_uart3_sendArray((U8 *)&mu, 9); + L0_uart0_sendArray((U8 *)&mu, 9); + + #endif + } + p->key1_ok = 0; + p->time1=0; + } + if(key2 == 0) + { + //Lc_delay_ms(10);//按键防抖 + if(key2 == 0) + { + p->key2_ok = 1; + while(!key2) + { + p->time2++; + } + } + } + if(p->key2_ok) + { + if(p->time2>=180) + { + //LED1 = ~LED1; + } + else { - mu[i] = music[i]>> 0 & 0xFF; + + U8 back[14] = {0xFF,0xFE,0x0B,0x14,0x10,0x00,0x03,0x00,0x01,0x02,0x00,0x01,0x95,0x33}; + LED3 = 1; + Lc_delay_ms(100); + LED3 = 0; + LED3 = ~LED3; + L3_gm35_send_data((U8 *)&back,14); + + #if 0 + U8 i; + U8 mu[9]; + U8 music[9] = {0x7E,0x07,0xA3,0x43,0x30,0x30,0x39,0x86,0xEF}; + //FF FE 0B 14 10 00 03 00 01 02 00 00 54 + //7E 07 A3 43 30 30 39 86 EF + for(i = 0;i<9;i++) + { + mu[i] = music[i] & 0xFF; + } + L0_uart3_sendArray((U8 *)&mu, 9); + L0_uart0_sendArray((U8 *)&mu, 9); + + #endif } - L0_uart3_sendArray((U8 *)&mu, 9); - L0_uart0_sendArray((U8 *)&mu, 9); - } - p->key1_ok = 0; - p->time1=0; + p->key2_ok = 0; + p->time2=0; } +#if 0 if(p->key2_ok) { if(p->time2>=180) @@ -106,6 +182,7 @@ void L3_task_key_handle(struct _s_task_key_ *p) p->key2_ok = 0; p->time2=0; } +#endif if(key3 == 0) { //Lc_delay_ms(10);//按键防抖 @@ -122,15 +199,26 @@ void L3_task_key_handle(struct _s_task_key_ *p) { if(p->time3>=180) { + LED3 = ~LED3; + LED2 = ~LED2; LED1 = ~LED1; + LED4 = ~LED4; + Lc_delay_ms(100); + // LED1 = 0; + L3_gm35_send_str("+++"); + Lc_delay_ms(1000); + //s_task_gm35_flow.mode=W600_AP; + L3_task_gm35_flow_init(W600_AP); + //G.w600_mode = 0; } else { - LED2 = ~LED2; + //LED2 = ~LED2; } p->key3_ok = 0; p->time3=0; } + } diff --git a/source/app/task_key.h b/source/app/task_key.h index 4b14944..3782c09 100644 --- a/source/app/task_key.h +++ b/source/app/task_key.h @@ -15,9 +15,9 @@ #include "../bsp/bsp_config.h" #include "../ctask/task.h" #include "../msp/msp_uart0.h" - #include "../msp/msp_uart3.h" - +#include "../app/task_w600.h" +#include "../clib/type.h" struct _s_task_key_ { TS_task task; diff --git a/source/app/task_w600.c b/source/app/task_w600.c index 05c4ea8..4269361 100644 --- a/source/app/task_w600.c +++ b/source/app/task_w600.c @@ -95,7 +95,16 @@ void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p) else if(Lc_strStartsWith(pPara,"ERROR")) { s_task_gm35_flow.st_error= 1; - } + } + else if(Lc_strStartsWith(pPara,"no change")) + { + s_task_gm35_flow.serve_ok= 1; + } + else if(Lc_strStartsWith(pPara,"CIPMUX and")) + { + s_task_gm35_flow.ap_serve_ok = 1; + } + //Station模式判定 if(s_task_gm35_flow.mode == W600_ST) { @@ -111,7 +120,7 @@ void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p) //AP模式判定 else if(s_task_gm35_flow.mode == W600_AP) { - if(Lc_strStartsWith(pPara,"+IPD,0")) + if(Lc_strStartsWith(pPara,"+IPD,")) { //解析协议,success //1将id,pwd放入寄存器2.ok=1 @@ -156,6 +165,10 @@ void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p) { s_task_gm35_flow.ap_tcp_ok = 1; } + else if(Lc_strStartsWith(pPara,"1,CONNECT")) + { + s_task_gm35_flow.ap_tcp_ok = 1; + } else if(Lc_strStartsWith(pPara,"SEND OK")) { s_task_gm35_flow.ap_data_ok= 1; @@ -164,6 +177,7 @@ void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p) { s_task_gm35_flow.ap_conn_ok = 1; } + } p->ok = 0; } @@ -214,17 +228,21 @@ void L3_task_gm35_flow_init(U8 mode) #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_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_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 @@ -236,7 +254,7 @@ void L3_task_gm35_flow_init(U8 mode) 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 + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_1s);//上电等待10s TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV) if(s->send == 0) {//发送 @@ -245,11 +263,18 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) s->ins_stmp = s_nos_tick.t_1s; s->send = 1; } - else if(s->ins_ok == 1) //等待 + else if(1 == s->ap_serve_ok) //等待 + { + s->send = 0; + s->ap_serve_ok = 0; + L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); + } + else if(s->serve_ok == 1 || 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_CIPMODE0,D_Tdelay_3s); + :TTSS_TASK_GM35_FLOW_ST_SERVE,D_Tdelay_300ms); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) @@ -267,7 +292,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(s->ins_ok == 1) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,D_Tdelay_3s); + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,D_Tdelay_300ms); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) @@ -286,7 +311,11 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) 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); + LED2 = 0; + LED2 = ~LED2; + LED2 = ~LED2; + LED2 = ~LED2; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,D_Tdelay_300ms); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) @@ -305,11 +334,12 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,D_Tdelay_3s); + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,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_TCP) @@ -324,7 +354,8 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) 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); + LED3 = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,D_Tdelay_300ms); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 @@ -341,7 +372,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_3s); + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_300ms); } else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 @@ -355,7 +386,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) 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 + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_300ms);//发完之后要等,不然st_error == 0没用 ,没收到error之前也是=0 } else if(1 == s->st_error) { @@ -365,7 +396,6 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) 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) @@ -381,6 +411,30 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) + 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) {//发送 @@ -392,7 +446,27 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,D_Tdelay_3s); + 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) @@ -410,7 +484,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_WIFI,D_Tdelay_3s); + 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) @@ -422,13 +496,14 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) {//发送 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) //等待 + 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_3s); + 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) @@ -446,7 +521,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_SERVER,D_Tdelay_3s); + 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) @@ -464,7 +539,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_TCP_TIME,D_Tdelay_3s); + 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) @@ -475,6 +550,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) 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; @@ -483,7 +559,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) { s->send = 0; s->ap_tcp_ok = 0; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT,D_Tdelay_3s); + 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) @@ -502,9 +578,12 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) 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); + 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) { @@ -512,22 +591,29 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) 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->ap_data_ok = 0; - s->ins_stmp = s_nos_tick.t_1s; s->send = 1; + s->ins_stmp = s_nos_tick.t_1s; } - else if(1 == s->ap_data_ok) //等待 + 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_3s); + L2_task_go_Tdelay(TTSS_TASK_MODE_SERVER_CLOSE,D_Tdelay_100ms); } - TTSS_Task_step(TTSS_TASK_MODE_SERVER_CLOSE) if(s->send == 0) {//发送 @@ -539,9 +625,10 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) else if(1 == s->ins_ok) //等待 { s->send = 0; + LED1 = 1; + LED2 = 1; L3_task_gm35_flow_init(W600_ST); } - else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) {//超时重发 s->send = 0; diff --git a/source/app/task_w600.h b/source/app/task_w600.h index 4636483..b62cc5e 100644 --- a/source/app/task_w600.h +++ b/source/app/task_w600.h @@ -1,132 +1,135 @@ - //////////////////////////////////////////////////////////////////////////// -///@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" -#include "../tpc/at0d0a.h" -#include "../tpc/ccmodbus.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.81\",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" //查询连接状态 - - -#define AT_INS_AP "AT+CWMODE=2\r\n" //进入AP模式 -#define AT_INS_AP_WIFI "AT+CWSAP=\"ccsens_pen\",\"ccsens123\",10,4,4,0\r\n" //设置AP参数 -#define AT_INS_AP_CIPMUX1 "AT+CIPMUX=1\r\n" //开启多连接 -#define AT_INS_AP_SERVER "AT+CIPSERVER=1,1001\r\n" //建立服务器 -#define AT_INS_AP_TCP_TIME "AT+CIPSTO=300\r\n" -#define AT_INS_AP_SEND "AT+CIPSENDEX=0,6\r\n" // -#define AT_INS_AP_SERVER_CLOSE "AT+CIPSERVER=0\r\n" // 关闭服务器 - -////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<< -enum _s_w600_mode -{ - W600_ST,W600_AP -}; -struct _s_task_gm35_gprs_ -{ - TS_task task; - vU8 send; - - vU8 ins_ok; - vU8 st_wifi_ok; - vU8 st_conn_ok; - 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; - vU8 mode; - - vU8 send_lock; - vU8 module_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重启次数 -}; -extern struct _s_task_gm35_gprs_ s_task_gm35_flow; - -#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 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); - -extern void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p); - - - -#endif - - - - - - - - - - - - - - - - - - - - - + //////////////////////////////////////////////////////////////////////////// +///@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" +#include "../tpc/at0d0a.h" +#include "../tpc/ccmodbus.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\",\"www.tall.wiki\",8195\r\n" //连接服务器 +//#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.0.81\",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" //查询连接状态 + + +#define AT_INS_AP "AT+CWMODE=2\r\n" //进入AP模式 +#define AT_INS_AP_WIFI "AT+CWSAP=\"ccsens_pen\",\"ccsens\",10,4,4,0\r\n" //设置AP参数 +#define AT_INS_AP_CIPMUX1 "AT+CIPMUX=1\r\n" //开启多连接 +#define AT_INS_AP_SERVER "AT+CIPSERVER=1,1001\r\n" //建立服务器 +#define AT_INS_AP_TCP_TIME "AT+CIPSTO=300\r\n" +#define AT_INS_AP_SEND "AT+CIPSENDEX=0,6\r\n" // +#define AT_INS_AP_SERVER_CLOSE "AT+CIPSERVER=0\r\n" //关闭服务器 +#define AT_INS_AP_CLOSE "AT+CWQAP\r\n" //断开AP连接 +////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<< +enum _s_w600_mode +{ + W600_ST,W600_AP +}; +struct _s_task_gm35_gprs_ +{ + TS_task task; + vU8 send; + + vU8 ins_ok; + vU8 st_wifi_ok; + vU8 st_conn_ok; + 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; + vU8 serve_ok; + vU8 ap_serve_ok; + vU8 mode; + vU8 rev; + vU8 send_lock; + vU8 module_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重启次数 +}; +extern struct _s_task_gm35_gprs_ s_task_gm35_flow; + +#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 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 , U16 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); + +extern void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p); + + + +#endif + + + + + + + + + + + + + + + + + + + + + diff --git a/source/asp/asp_oid.c b/source/asp/asp_oid.c index cefdf51..82e638a 100644 --- a/source/asp/asp_oid.c +++ b/source/asp/asp_oid.c @@ -18,9 +18,10 @@ Ts_OID_frame_xy_ points[POINT_LEN+10]; void L3_task_oid_handle(TS_task_oid_ *s) { + // L0_uart0_sendstr("oid_p"); TTSS_Task_init(); - TTSS_Alarm_init(s->tts,1000); + TTSS_Alarm_init(s->tts,300); ///(X) = s_nos_tick.t_10ms + delay; L2_task_go(D_TASK_OID_t1); TTSS_Task_step(D_TASK_OID_t1) @@ -99,7 +100,7 @@ void L3_task_oid_handle(TS_task_oid_ *s) L2_task_go(D_TASK_OID_t1); } TTSS_Task_step(TTSS_TASK_OID_WRITE) - //L0_uart2_sendArray((U8 *)&s->ts_frame,(U16)10); + //L0_uart0_sendArray((U8 *)&s->ts_frame,(U16)10); Lc_buf_copy_uc((U8 *)&oid_buf[s->point],(U8 *)&s->ts_frame,(U16)10); s->point ++; L2_task_go(TTSS_TASK_OID_SEND); @@ -116,18 +117,27 @@ void L3_task_oid_handle(TS_task_oid_ *s) for(j = 0;jextra;j++) { Lc_buf_copy_uc((U8 *)&points[j],(U8 *)&oid_buf[j],(U16)10); - //L0_uart2_sendArray((U8 *)&points[j],(U16)10); + //L0_uart0_sendArray((U8 *)&points[j],(U16)10); // 1 + //L0_uart0_0d0a(); } + + //L0_uart0_sendstr("points->cd.xy100.x100 = "); // 2 + //L0_uart0_ushex(points->cd.xy100.x100); + //L0_uart0_0d0a(); + //L0_uart0_sendstr("points->cd.xy100.y100 = "); + //L0_uart0_ushex(points->cd.xy100.y100); + //L0_uart0_0d0a(); + //G.ccmd_slaver_info[1].buf = (U8*)&points; //G.ccmd_slaver_info[1].extra_num = (s->extra)*5; - //L0_uart2_sendArray((U8 *)&points,(s->extra)*10); + //L0_uart0_sendArray((U8 *)&points,(s->extra)*10); //s->extra = 0; s->can_send = 1; - #if 0 + #if 0//3 for(j = 0;j>>>>>>>>>>>>>>>>>>>>>485 Type #define TYPE_485_NONE 0 diff --git a/source/bsp/bsp_oid.c b/source/bsp/bsp_oid.c index 65bf032..eddf4ad 100644 --- a/source/bsp/bsp_oid.c +++ b/source/bsp/bsp_oid.c @@ -410,12 +410,56 @@ void L2_oid_ParseF1(void) uint32_t u32t[2] = 0; /// L1_print_rcv("\r\n F1="); ts_oid.oid_type = ts_oid.rec.d[0]; - if(ts_oid.rec.d[0] == 0x60) + + L0_uart0_sendstr("ts_oid.rec.d[0] = "); + L0_uart0_uchex(ts_oid.rec.d[0]); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.rec.d[1] = "); + L0_uart0_uchex(ts_oid.rec.d[1]); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.rec.d[2] = "); + L0_uart0_uchex(ts_oid.rec.d[2]); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.rec.d[3] = "); + L0_uart0_uchex(ts_oid.rec.d[3]); + L0_uart0_0d0a(); + + ///////// + L0_uart0_sendstr("ts_oid.rec.d16[0] = "); + L0_uart0_ushex(ts_oid.rec.d16[0]); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.rec.d16[1] = "); + L0_uart0_ushex(ts_oid.rec.d16[1]); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.rec.d16[2] = "); + L0_uart0_ushex(ts_oid.rec.d16[2]); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.rec.d16[3] = "); + L0_uart0_ushex(ts_oid.rec.d16[3]); + L0_uart0_0d0a(); + + // ///////// + + L0_uart0_sendstr("ts_oid.rec.d32[0] = "); + L0_uart0_ulhex(ts_oid.rec.d32[0]); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.rec.d32[1] = "); + L0_uart0_ulhex(ts_oid.rec.d32[1]); + L0_uart0_0d0a(); + // ///////// + + L0_uart0_sendstr("ts_oid.oid_type = "); + L0_uart0_uchex(ts_oid.oid_type); + L0_uart0_0d0a(); + + + if(1)// if(ts_oid.rec.d[0] == 0x60) // 4 {/// Bit43~Bit0:x,y 轴的坐标数据,x 坐标和 y 坐标都是由整数和小数部分 ///组成,整数部分 14bit,小数部分 8bit G.pen_t = 0; ts_oid.last_time = s_nos_tick.t_1s; ts_oid.Xint = ts_oid.rec.d16[3]&0x3fff; + if(ts_oid.Xint < 300)///取决于图片 fixme: cc { ts_oid.oid_x = 1; @@ -660,13 +704,26 @@ void L1_Oid_readoid(void) { if(!OID_DET) { - + LED1 = ~LED1; ts_oid.pre_x = ts_oid.X100; ts_oid.pre_y = ts_oid.Y100; L0_oid_Recv64(); L2_oid_ParseF1(); //L2_oid_status(); L1_print_rcv("\r\n "); + L0_uart0_sendstr("ts_oid.Xint = "); + L0_uart0_ushex(ts_oid.Xint); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.Yint = "); + L0_uart0_ushex(ts_oid.Yint); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.Xdec = "); + L0_uart0_ushex(ts_oid.Xdec); + L0_uart0_0d0a(); + L0_uart0_sendstr("ts_oid.Ydec = "); + L0_uart0_ushex(ts_oid.Ydec); + L0_uart0_0d0a(); + L0_uart0_sendstr("oid_p"); } else if((s_nos_tick.t_1s - ts_oid.last_time >= 2)&& (G.pen_t == 0)) { diff --git a/source/clib/clib.c b/source/clib/clib.c index b0b4638..bd2ed3d 100644 --- a/source/clib/clib.c +++ b/source/clib/clib.c @@ -27,6 +27,29 @@ U8 Lc_strStartsWith(U8 *s1,U8 *s2) } return (*s2 == 0); } +int Lc_strMidsWith(char *wenben, char *search_word) +{ + int i = 0, j = 0, flag = -1; + while (i < Lc_strlen(wenben) && j < Lc_strlen(search_word)) + { + if (wenben[i] == search_word[j]) + { //如果字符相同则两个字符都增加 + i++; + j++; + } + else + { + i = i - j + 1; //主串字符回到比较最开始比较的后一个字符 + j = 0; //字串字符重新开始 + } + if (j == Lc_strlen(search_word)) + { //如果匹配成功 + flag = 1; //字串出现 + break; + } + } + return flag; +} int Lc_strlen(const char *str) @@ -250,11 +273,11 @@ U32 Lc_vU32_avg(U32 *d, U8 n) return sum / n; } //十六进制转换为十进制 -long hexToDec(const char *source) +int hexToDec(const char *source) { - long sum = 0; + int sum = 0; long t = 1; - int i, len; + int i,len; len = Lc_strlen(source); for(i=len-1; i>=0; i--) @@ -264,8 +287,26 @@ long hexToDec(const char *source) } return sum; -} +} +long hex2Dec(U8 *source ,U16 len) +{ + int i,t,m; + long sum=0; + for(i=0;i= '0' && ch <= '9') @@ -283,6 +324,41 @@ int getIndexOfSigns(char ch) return -1; } + +unsigned char char_to_hex(unsigned char chr) +{ + if((chr>='0')&&(chr<='9')) + chr = 0x30+(chr-'0'); + else if((chr>='A')&&(chr<='Z'))//capital + chr = 0x41+(chr - 'A'); + else if((chr>='a')&&(chr<='z'))//little + chr = 0x61+(chr-'a'); + else + chr = 0xff; + return chr; +} + +unsigned char hex_to_char(unsigned char hex) +{ + if((hex>=0x30)&&(hex<=0x39)) + hex = hex-0x30; + else if((hex>=0x41)&&(hex<=0x5A)) // capital + hex = 'A' + (hex - 0x41); + else if((hex>=0x61)&&(hex<=0x7A)) // little case + hex = 'a' + (hex - 0x61); + else + hex = 0xff; + return hex; +} +void Lc_hextoasc(U8 *buf,U8 *ascii,U16 len) +{ + vU16 t = 0,m = 0; + for(t = 0;t < len;t ++) + { + ascii[m] = char_to_hex(buf[t]); + } +} + ///// 0 1 (1-0)+1 //// 把buf中的数据从[usStart]到[usEnd] 共 usEnd-usStart+1 的数据转换成ascii /// 0x11 0x22 ---> 0x31 0x31 0x32 0x32 '1' '1' '2' '2' @@ -293,12 +369,12 @@ void Lc_hex2ascii(U8 *buf,U8 *ascii,U16 len) { #if 1 - ascii[m] = cguHex2Char[D_uc_high(buf[t])][1]; - m ++; + //ascii[m] = cguHex2Char[D_uc_high(buf[t])][1]; + //m ++; ascii[m] = cguHex2Char[D_uc_low (buf[t])][1]; m ++; - ascii[m] =0x20; - m ++; + //ascii[m] =0x20; + //m ++; #else ascii[m] = 0x30+m; diff --git a/source/clib/clib.h b/source/clib/clib.h index add9a20..b1c0f3d 100644 --- a/source/clib/clib.h +++ b/source/clib/clib.h @@ -30,7 +30,12 @@ typedef struct extern U8 Lc_Hex2Char(U8 CharStr); extern int Lc_strlen(const char *str); extern U8* Lc_strcpy(U8* dst,const char* str); -extern long hexToDec(const char *source); +extern int hexToDec(U8 *source ); +extern long hex2Dec(U8 *source ,U16 len); +extern void HexToStr(BYTE *pbDest, BYTE *pbSrc, int nLen); +extern int Lc_strMidsWith(char *wenben, char *search_word); + + extern int getIndexOfSigns(char ch); //extern void Lc_int2str(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d); diff --git a/source/msp/msp_uart0.C b/source/msp/msp_uart0.C index 014d7b4..a4d2b14 100644 --- a/source/msp/msp_uart0.C +++ b/source/msp/msp_uart0.C @@ -129,8 +129,9 @@ void INTERRUPT_UART(void) D_SERVE_UART L0_uart0_IntRIClear(); //清除接收中断标志 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(); + + //L1_s2b_PH4(ts_uart[uNum0].t); + //L0_timer3_restart(); } if(L0_uart0_IntTI()) //如果是U0发送中断 { diff --git a/source/msp/msp_uart2.C b/source/msp/msp_uart2.C index 3a6232e..4da63e6 100644 --- a/source/msp/msp_uart2.C +++ b/source/msp/msp_uart2.C @@ -149,7 +149,7 @@ void INTERRUPT_uart2(void) interrupt 8 ///D_SERVE_uart2// using 2 //L1_s2b_0d0a(&s_uart2_at); L1_s2b_gm35(L0_uart2_get()); } - if(L0_uart2_IntTI()) //如果是U0发送中断 + if(L0_uart2_IntTI()) //如果是U2发送中断 { L0_uart2_IntTIClear(); //清除发送中断标志 if(ts_uart[uNum2].p->max != ts_uart[uNum2].p->now) diff --git a/source/msp/msp_uart3.c b/source/msp/msp_uart3.c index 3b63afe..d83fcbc 100644 --- a/source/msp/msp_uart3.c +++ b/source/msp/msp_uart3.c @@ -88,15 +88,32 @@ void L0_uart3_init(void) T2H = 0xFF; //设置定时初始值 AUXR |= 0x10; //定时器2开始计时 #endif + +#if 0 + //115200 + //U16 val = D_BRT_COUNT(1,D_sys_MainFre,D_uart3_BRT); + S3CON = 0x10; //8位数据,可变波特率 S3CON |= 0x40; //串口3选择定时器3为波特率发生器 T4T3M |= 0x02; //定时器时钟1T模式 - T3L = 0xD0; //设置定时初始值 - T3H = 0xFF; //设置定时初始值 + T3L = 0xD0; //设置定时初始值 + T3H = 0xFF; //设置定时初始值 + //T3L = val; //设定定时初值 + //T3H = val >> 8; //设定定时初值 T4T3M |= 0x08; //定时器3开始计时 } +#endif + +// 512000 + S3CON = 0x10; //8位数据,可变波特率 + S3CON &= 0xBF; //串口3选择定时器2为波特率发生器 + AUXR |= 0x04; //定时器时钟1T模式 + T2L = 0xF5; //设置定时初始值 + T2H = 0xFF; //设置定时初始值 + AUXR |= 0x10; //定时器2开始计时 +} void L0_uart3_buf_init(void) { @@ -106,7 +123,7 @@ void L0_uart3_buf_init(void) ts_uart[uNum3].t = &s_uart3_rec; ts_uart[uNum3].t->head = 0; ts_uart[uNum3].t->ok = 0; - ts_uart[uNum3].tp_handler = L1_s2b_PH4; + //ts_uart[uNum3].tp_handler = L1_s2b_PH4; ts_uart[uNum3].ack = (U8*)&s_uart3_ack; L0_uart3_init(); //D_uart3_ES_INT_OPEN(); //打开串口中断 @@ -119,16 +136,18 @@ void L0_uart3_buf_init(void) void L0_uart3_sendArray(U8 * buf, U16 len) { -//#if (D_UART3_485_TYPE != TYPE_485_NONE) -// D_UART3_485_TX() //切换到输出状态 -//#endif - L0_uartN_sendArray(uNum3,buf,len); + +#if (D_UART0_485_TYPE != TYPE_485_NONE) + D_UART0_485_TX() //切换到输出状态 +#endif + L0_uartN_sendArray(uNum3,buf,len); + } /************************************************* UART 中断 *************************************************/ -#define D_SERVE_UART3 interrupt 17 +//#define D_SERVE_UART3 interrupt 17 void INTERRUPT_UART3(void) D_SERVE_UART3// using 3 { NOP(); NOP(); NOP(); @@ -136,33 +155,33 @@ void INTERRUPT_UART3(void) D_SERVE_UART3// using 3 { L0_uart3_IntRIClear(); //清除接收中断标志 ts_uart[uNum3].t->reg = L0_uartN_get(uNum3); - ts_uart[uNum3].tp_handler(ts_uart[uNum3].t); + //ts_uart[uNum3].tp_handler(ts_uart[uNum3].t); + //L1_s2b_PH4(ts_uart[uNum3].t); //L0_timer4_start(); } - if(L0_uart3_IntTI()) + if(L0_uart3_IntTI()) //如果是U0发送中断 { - if(L0_uart3_IntTI()) //如果是U0发送中断 + L0_uart3_IntTIClear(); //清除发送中断标志 + if(ts_uart[uNum3].p->max != ts_uart[uNum3].p->now) { - L0_uart3_IntTIClear(); //清除发送中断标志 - if(ts_uart[uNum3].p->max != ts_uart[uNum3].p->now) - { - L0_uartN_set(uNum3,ts_uart[uNum3].p->p[ts_uart[uNum3].p->now]); - ts_uart[uNum3].p->now ++; - } - else - { - ts_uart[uNum3].p->ok = D_ready; - ts_uart[uNum3].p->max = 0; - ts_uart[uNum3].p->now = 0;//可以发送下一个数据 + S3BUF = ts_uart[uNum3].p->p[ts_uart[uNum3].p->now]; + //L0_uartN_set(uNum3,ts_uart[uNum3].p->p[ts_uart[uNum3].p->now]); + ts_uart[uNum3].p->now ++; + } + else + { + ts_uart[uNum3].p->ok = D_ready; + ts_uart[uNum3].p->max = 0; + ts_uart[uNum3].p->now = 0;//可以发送下一个数据 #if (D_UART3_485_TYPE != TYPE_485_NONE) D_UART3_485_RX() //切换到接收状态 #endif } + } - } - NOP(); NOP(); NOP(); + NOP(); NOP(); NOP(); } - +#if 0 void timer4_isrHanddle(void) D_SERVE_TIMER4 { struct _tp_handler_x *p = &s_uart3_rec; @@ -181,5 +200,5 @@ void timer4_isrHanddle(void) D_SERVE_TIMER4 } L0_timer4_stop(); } - +#endif diff --git a/source/msp/msp_uart_x.h b/source/msp/msp_uart_x.h index 05d7713..2edd11a 100644 --- a/source/msp/msp_uart_x.h +++ b/source/msp/msp_uart_x.h @@ -70,7 +70,7 @@ typedef struct _ts_uart0_send_buf_ vU16 max; /// 当前buf的最大值,也就是需要发送的长度 vU32 over; /// 结束等待标志,over累加到某个值时,结束等待 vU8 ok; /// 发送完成标志 - vU8 buf[D_UART_send_buf_max + 1]; + vU8 buf[D_UART_send_buf_max + 6]; /// U8 bufhex[D_UART_send_buf_max*3]; /// U8 buf2[D_send_buf2_max]; vU8 buf3[D_UART_send_buf2_max]; diff --git a/source/msp/nouse/msp_uart3.c b/source/msp/nouse/msp_uart3.c deleted file mode 100644 index 4a05f9d..0000000 --- a/source/msp/nouse/msp_uart3.c +++ /dev/null @@ -1,184 +0,0 @@ -////////////////////////////////////////////////////////////////////////// -/// COPYRIGHT NOTICE -/// Copyright (c) 2015, 传控科技 -/// All rights reserved. -/// -/// @file main.c -/// @brief main app -/// -///(本文件实现的功能的详述) -/// -/// @version 1.1 CCsens technology -/// @author CC -/// @date 20150102 -/// -/// -/// 修订说明:最初版本 -/// Modified by: -/// Modified date: -/// Version: -/// Descriptions: -// 20160413 CC-ACC-VH02 -// 连接至 J22 RXD0 TXD0 -//P5_DIR &= ~BITN1; //p5.1输出TXD -//P5_DIR |= BITN0; //p5.0输入RXD -//P5_SEL0 &= ~(BITN0 +BITN1); //设置P5.0 P5.1为UART0 RXD TXD -//P5_SEL1 |= BITN0 +BITN1; - -/***************************************************************************** -update by cc @201700110 -针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是 -个需要平衡的事情. - -clib/clib.c: -公用的函数 和硬件无关 -放置串行模式(串口等其他通讯总线类的输出)输出的函数, -一些覆盖模式输出的(lcd等固屏输出的)的也可使用 - void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...) ------------------------------------------------------------------------------------------ -uartcom/Uprotocol2app - 协议到应用 - 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关 - -typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------ - L3_UARTcom0_exp_protocol 解析应用协议 ------------------------------------------------------------------------------------------ -uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式 -公用的串口通讯定义 - struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_ - void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中 --------------------------------------------------------------------------------------------- -msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面 - L0_UART0_Init - UART0_IRQHandler - L0_Usend_uc------UserDef ------------------------------------------------------------------------------------------ -********************************************************************************/ -#include "../msp/msp_uart3.h" -#include "../msp/time.h" -#include - -static volatile Ts_uart_send_buf idata ts_uart3_send_shop; -struct _tp_handler_x s_uart3_rec; -TS_PH4_modbus s_uart3_ack; - -void L0_uart3_init(void) -{ -//#if(MainFre_11M == D_sys_MainFre) //115200bps@11.0592MHz -// S3CON = 0x10; //8位数据,可变波特率 -// S3CON |= 0x40; //串口3选择定时器3为波特率发生器 -// T4T3M |= 0x02; //定时器3时钟为Fosc,即1T -// T3L = 0xE8; //设定定时初值 -// T3H = 0xFF; //设定定时初值 -// T4T3M |= 0x08; //启动定时器3 - -//#elif (MainFre_22M == D_sys_MainFre) //115200bps@22.1184MHz -// S3CON = 0x10; //8位数据,可变波特率 -// S3CON |= 0x40; //串口3选择定时器3为波特率发生器 -// T4T3M |= 0x02; //定时器3时钟为Fosc,即1T -// T3L = 0xD0; //设定定时初值 -// T3H = 0xFF; //设定定时初值 -// T4T3M |= 0x08; //启动定时器3 -//#endif -#if 0 - S3CON = 0x10; //8位数据,可变波特率 - S3CON &= 0xBF; //串口3选择定时器2为波特率发生器 - AUXR |= 0x04; //定时器时钟1T模式 - T2L = 0xD0; //设置定时初始值 - T2H = 0xFF; //设置定时初始值 - AUXR |= 0x10; //定时器2开始计时 -#endif -//512000 - S3CON = 0x10; //8位数据,可变波特率 - S3CON |= 0x40; //串口3选择定时器3为波特率发生器 - T4T3M &= 0xFD; //定时器时钟12T模式 - T3L = 0xFF; //设置定时初始值 - T3H = 0xFF; //设置定时初始值 - T4T3M |= 0x08; //定时器3开始计时 -} - -void L0_uart3_buf_init(void) -{ - ts_uart[uNum3].p = &ts_uart3_send_shop; - ts_uart[uNum3].p->now = 0; - ts_uart[uNum3].p->ok = D_ready; - ts_uart[uNum3].t = &s_uart3_rec; - ts_uart[uNum3].t->head = 0; - ts_uart[uNum3].t->ok = 0; - ts_uart[uNum3].tp_handler = L1_s2b_PH4; - ts_uart[uNum3].ack = (U8*)&s_uart3_ack; - L0_uart3_init(); - //D_uart3_ES_INT_OPEN(); //打开串口中断 - D_uart3_ES_INT(1); //打开串口中断 - -#if (D_UART3_485_TYPE != TYPE_485_NONE) - D_UART3_485_RX() //默认处于接收状态 -#endif -} - -void L0_uart3_sendArray(U8 * buf, U16 len) -{ -//#if (D_UART3_485_TYPE != TYPE_485_NONE) -// D_UART3_485_TX() //切换到输出状态 -//#endif - L0_uartN_sendArray(uNum3,buf,len); -} - -/************************************************* -UART 中断 -*************************************************/ -#define D_SERVE_UART3 interrupt 17 -void INTERRUPT_UART3(void) D_SERVE_UART3// using 3 -{ - NOP(); NOP(); NOP(); - if(L0_uart3_IntRI()) //如果是U0接收中断 - { - L0_uart3_IntRIClear(); //清除接收中断标志 - ts_uart[uNum3].t->reg = L0_uartN_get(uNum3); - ts_uart[uNum3].tp_handler(ts_uart[uNum3].t); - //L0_timer4_start(); - } - if(L0_uart3_IntTI()) - { - if(L0_uart3_IntTI()) //如果是U0发送中断 - { - L0_uart3_IntTIClear(); //清除发送中断标志 - if(ts_uart[uNum3].p->max != ts_uart[uNum3].p->now) - { - L0_uartN_set(uNum3,ts_uart[uNum3].p->p[ts_uart[uNum3].p->now]); - ts_uart[uNum3].p->now ++; - } - else - { - ts_uart[uNum3].p->ok = D_ready; - ts_uart[uNum3].p->max = 0; - ts_uart[uNum3].p->now = 0;//可以发送下一个数据 -#if (D_UART3_485_TYPE != TYPE_485_NONE) - D_UART3_485_RX() //切换到接收状态 -#endif - } - } - } - NOP(); NOP(); NOP(); -} - -void timer4_isrHanddle(void) D_SERVE_TIMER4 -{ - struct _tp_handler_x *p = &s_uart3_rec; - if((p->head == 1) && (p->num >= D_s_modbus_min)) - { - p->head = 0; - crc16(p->crc,p->buf,p->num - 2); //校验CRC - if(p->crc[0] == p->buf[p->num-2] && p->crc[1] == p->buf[p->num-1]) - { - if(p->ok == 0) - { - p->ok = 1; - } - } - //LED0 ^= 1; - } - L0_timer4_stop(); -} - - diff --git a/source/msp/nouse/msp_uart3.h b/source/msp/nouse/msp_uart3.h deleted file mode 100644 index fd535d4..0000000 --- a/source/msp/nouse/msp_uart3.h +++ /dev/null @@ -1,93 +0,0 @@ -////////////////////////////////////////////////////////////////////////// -/// COPYRIGHT NOTICE -/// Copyright (c) 2015, 传控科技 -/// All rights reserved. -/// -/// @file main.c -/// @brief main app -/// -///(本文件实现的功能的详述) -/// -/// @version 1.1 CCsens technology -/// @author CC -/// @date 20150102 -/// -/// -/// 修订说明:最初版本 -/// Modified by: -/// Modified date: -/// Version: -/// Descriptions: -////////////////////////////////////////////////////////////////////////// -/***************************************************************************** -update by cc @201700110 -针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是 -个需要平衡的事情. - -clib/clib.c: -公用的函数 和硬件无关 -放置串行模式(串口等其他通讯总线类的输出)输出的函数, -一些覆盖模式输出的(lcd等固屏输出的)的也可使用 - void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...) ------------------------------------------------------------------------------------------ -uartcom/Uprotocol2app - 协议到应用 - 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关 - -typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------ - L3_UARTcom0_exp_protocol 解析应用协议 ------------------------------------------------------------------------------------------ -uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式 -公用的串口通讯定义 - struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_ - void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中 --------------------------------------------------------------------------------------------- -msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面 - L0_uart3_Init - uart3_IRQHandler - L0_Usend_uc------UserDef ------------------------------------------------------------------------------------------ -********************************************************************************/ - - -#ifndef _uart3_H -#define _uart3_H - -#include "../bsp/bsp_config.h" -#include "../tpc/modbus.h" -#include "msp_uart_x.h" - -#define uNum3 2 - -//#define S4SM0 BITN7 -#define D_uart3_ES_INT(x) (x) ? (BITN_1(IE2,ES3)) : (BITN_0(IE2,ES3)) -//#define D_uart3_ES_INT_CLOSE() BITN_0(IE2,ES3) -//#define D_uart3_ES_INT_OPEN() BITN_1(IE2,ES3) -#define L0_uart3_IntRI() (S3CON & S3RI)//BITN_G(SCON,U0RI) -#define L0_uart3_IntTI() (S3CON & S3TI)//BITN_G(SCON,U0TI) -#define L0_uart3_IntRIClear(); BITN_0(S3CON,S3RI) -#define L0_uart3_IntTIClear(); BITN_0(S3CON,S3TI) -#define L0_uart3_set(x) S3BUF = (x); -#define L0_uart3_get() (S3BUF) - - -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - -extern void L0_uart3_buf_init(void); -extern void L0_uart3_sendArray(U8 * buf, U16 len); - -#define L0_uart3_uc(X) L0_uartN_uc(uNum3,X) -#define L0_uart3_us(X) L0_uartN_us(uNum3,X) -#define L0_uart3_ul(X) L0_uartN_ul(uNum3,X) -#define L0_uart3_0d0a() L0_uartN_0d0a(uNum3) -#define L0_uart3_uchex(X) L0_uartN_uchex(uNum3,X) -#define L0_uart3_ushex(X) L0_uartN_ushex(uNum3,X) -#define L0_uart3_ulhex(X) L0_uartN_ulhex(uNum3,X) -#define L0_uart3_sendstr(buf) L0_uartN_sendstr(uNum3,buf) -#define L1_uart3_uchexArray(buf) L1_uartN_uchexArray(uNum3,buf) - -extern TP_Handler_X s_uart3_rec; -extern TS_PH4_modbus s_uart3_ack; - -#endif //#ifndef _uart3_H - diff --git a/source/tpc/ccmodbus.h b/source/tpc/ccmodbus.h index f10ae56..30e1e1e 100644 --- a/source/tpc/ccmodbus.h +++ b/source/tpc/ccmodbus.h @@ -109,7 +109,7 @@ typedef struct 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 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; diff --git a/source/tpc/modbus.h b/source/tpc/modbus.h index 5389a00..7ea48e6 100644 --- a/source/tpc/modbus.h +++ b/source/tpc/modbus.h @@ -101,7 +101,8 @@ typedef struct }TS_Handle_PH4; #endif extern U8 L3_pack_modbus(TS_PH4_modbus *pmodbus, MD_SLAVER_INFO *slaver_info); -//extern U8 L3_pack_modbusack(TS_PH4_modbus *pmodbus ,U8 slaver, U8 oper, U8 bufsize); + + extern U16 L3_modbus_slaver_ack(TS_PH4_modbus *pmodbus,TS_PH4_modbus *pModbusAck); extern void L3_modbus_master_handler(TS_PH4_modbus *pmodbus,MD_SLAVER_INFO *p_slaver_info); extern void L1_s2b_PH4(struct _tp_handler_x *p); diff --git a/source/tpc/tpc_x.h b/source/tpc/tpc_x.h index 9440fc6..1f8335d 100644 --- a/source/tpc/tpc_x.h +++ b/source/tpc/tpc_x.h @@ -1,4 +1,4 @@ -#ifndef TPC_CONFIG_H + #ifndef TPC_CONFIG_H #define TPC_CONFIG_H #include "../bsp/bsp_config.h"