From c34a56ed63ad55ab9c7985c59f8ee28ef74c914b Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期三, 15 一月 2025 18:05:06 +0800 Subject: [PATCH] 修改算法 --- keil/include/drivers/serial_at_cmd_app.c | 294 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 190 insertions(+), 104 deletions(-) diff --git a/keil/include/drivers/serial_at_cmd_app.c b/keil/include/drivers/serial_at_cmd_app.c index 31d7f51..9313095 100644 --- a/keil/include/drivers/serial_at_cmd_app.c +++ b/keil/include/drivers/serial_at_cmd_app.c @@ -12,7 +12,8 @@ //#include "radio.h" - +#define MSG_RW 3 +#define MSG_RW_TAG_ANC 0x30 //#define EUART_RX_BUF_SIZE 100 #define Label_id_local 1 //标签id #define data_buff_MAX 50 //基站数量 @@ -101,7 +102,7 @@ checksum = Checksum_u16(&send_frame[2],5+data_length); memcpy(&send_frame[7+data_length],&checksum,2); - uart_send(UART_ID1, send_frame,data_length+9, NULL); + uart_send(UART_ID0, send_frame,data_length+9, NULL); } void UpdateProcess(uint8_t index) { @@ -138,6 +139,12 @@ } double d_value; +uint16_t pwtag_idrec,pwanc_id,pwanc_value; +uint8_t taguserdata_recflag[TAG_NUM_IN_SYS],pwtag_index = 0; +extern uint16_t mubiao_anchor_ID; +struct pwtag_structure pwtag; +extern uint8_t Get_anchor_appdata_flag; +extern uint8_t Get_anchor_appdata_num; void UsartParseDataHandler(uint8_t data) { if(state5V_prase_flag&&!g_com_map[MODBUS_MODE]) @@ -153,27 +160,43 @@ if(usart_receive_state == UsartReceiveWaitChecksum) { //若收到校验和包 checksum = 0; - for(int i = 0; i<pack_length-5; i++) { + for(int i = 0; i<pack_length-2; i++) { checksum += mUsartReceivePack[i]; } - checksum += pack_cmd; - checksum += pack_length; - checksum += pack_index; - checksum += pack_datalen; - checksum += pack_msgtype; + checksum += pack_msgtype; + checksum += pack_length; if(((data + checksum)&0xff) == 0xFF) //校验通过 { + switch(pack_msgtype) + { + uint16_t serial_tag_id_recv; + case MSG_RW: + pack_cmd = mUsartReceivePack[0]; + pack_index = mUsartReceivePack[1]; + pack_datalen = mUsartReceivePack[2]; switch(pack_cmd) { case CMD_WRITE: - if(pack_index==MODBUS_MODE*2) - { - Uart1GpsRecDebugSend(); - g_com_map[MODBUS_MODE] = 1; - return; - } +// if(pack_index==MODBUS_MODE*2) +// { +// Uart1GpsRecDebugSend(); +// g_com_map[MODBUS_MODE] = 1; +// return; +// } //从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中,赋值保存的参数并且存入flash - memcpy((uint8_t*)&g_com_map + pack_index, mUsartReceivePack, pack_datalen); + memcpy((uint8_t*)&g_com_map + pack_index, &mUsartReceivePack[3], pack_datalen); + + if(g_com_map[YAOGEIANC_UPWENJIAN_FLAG]==1) + { + Get_anchor_appdata_flag=1; + Get_anchor_appdata_num=0; + save_com_map_to_flash(); + delay_ms(300); + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader + break; + } + + if(mUsartReceivePack[0]==1) UpdateProcess(pack_index); //返回一个error状态 @@ -188,103 +211,166 @@ SendComMap(pack_datalen,pack_index>>1); break; default: - break; + break; } + break; + + case MSG_RW_TAG_ANC: //批量修改标签参数 + memcpy(&pwtag_idrec,&mUsartReceivePack[2],2); + if(mUsartReceivePack[0]<0x10) //判断是修改基站还是修改标签。 + { + if(mUsartReceivePack[0]==0x06)//如果是升级 + { + for(uint8_t i=0; i<PWTAG_MAXGROUPNUM; i++) + { + if(pwtag.groupid[i][0]==pwtag_idrec) + { + pwtag.duorxie[i]=mUsartReceivePack[0]; + pwtag.index[i] = mUsartReceivePack[1]; + pwtag.remain_time[i] = 5; + memcpy(pwtag.groupid[i],&mUsartReceivePack[2],4); + pwtag.len[pwtag_index] = pack_length-8; + memcpy(&pwtag.value[i][0],&g_com_map[YAOGEIANC_UPWENJIAN_DAXIAO],2); + memcpy(&mubiao_anchor_ID,&mUsartReceivePack[2],2); + break; + } + if(i==PWTAG_MAXGROUPNUM-1) + { + if(pwtag_index++>=PWTAG_MAXGROUPNUM) + { + pwtag_index = 0; + } + pwtag.index[pwtag_index] = mUsartReceivePack[1]; + pwtag.remain_time[pwtag_index] = 5; + pwtag.duorxie[pwtag_index]=mUsartReceivePack[0]; + memcpy(pwtag.groupid[pwtag_index],&mUsartReceivePack[2],4); + pwtag.len[pwtag_index] = pack_length-8; + memcpy(&pwtag.value[pwtag_index][0],&g_com_map[YAOGEIANC_UPWENJIAN_DAXIAO],2); + memcpy(&mubiao_anchor_ID,&mUsartReceivePack[2],2); + } + } + } + else + { + for(uint8_t i=0; i<PWTAG_MAXGROUPNUM; i++) + { + if(pwtag.groupid[i][0]==pwtag_idrec) + { + pwtag.duorxie[i]=mUsartReceivePack[0]; + pwtag.index[i] = mUsartReceivePack[1]; + pwtag.remain_time[i] = 5; + memcpy(pwtag.groupid[i],&mUsartReceivePack[2],4); + pwtag.len[pwtag_index] = pack_length-8; + memcpy(&pwtag.value[i][0],&mUsartReceivePack[6],pack_length-8); + break; + } + if(i==PWTAG_MAXGROUPNUM-1) + { + if(pwtag_index++>=PWTAG_MAXGROUPNUM) + { + pwtag_index = 0; + } + pwtag.index[pwtag_index] = mUsartReceivePack[1]; + pwtag.remain_time[pwtag_index] = 5; + pwtag.duorxie[pwtag_index]=mUsartReceivePack[0]; + memcpy(pwtag.groupid[pwtag_index],&mUsartReceivePack[2],4); + pwtag.len[pwtag_index] = pack_length-8; + memcpy(&pwtag.value[pwtag_index][0],&mUsartReceivePack[6],pack_length-8); + + } + } + } + + } + break; + } } usart_receive_state = UsartReceiveWaitHead0; pack_index = 0; pack_length = 0; index=0; - } else if((usart_receive_state == UsartReceiveWaitData) ) { //若果收到的是正常通讯包 - mUsartReceivePack[index] = data; - index++; - if(index == pack_length-5) { //如果收到的index与长度相等 - usart_receive_state = UsartReceiveWaitChecksum; - } - } else if(usart_receive_state == UsartReceiveWaitDataLen) { //收到指令类型字节 - pack_datalen = data; - usart_receive_state = UsartReceiveWaitData; - } else if(usart_receive_state == UsartReceiveWaitIndex) { //收到指令类型字节 - pack_index = data; - usart_receive_state = UsartReceiveWaitDataLen; - } else if(usart_receive_state == UsartReceiveWaitCMD) { //收到指令类型字节 - pack_cmd = data; - usart_receive_state = UsartReceiveWaitIndex; - } else if(usart_receive_state == UsartReceiveWaitLength) { //收到长度字节 - - pack_length = data; - pack_index = 0; - usart_receive_state = UsartReceiveWaitCMD; - - } else if((usart_receive_state == UsartReceiveWaitHead0) && (data == 0x55)) { //收到第一个包头 - usart_receive_state = UsartReceiveWaitHead1; - } else if((usart_receive_state == UsartReceiveWaitHead1) && (data == 0xAA)) { //收到第二个包头 - usart_receive_state = UsartReceiveWaitMsgType; - } else if ((usart_receive_state == UsartReceiveWaitMsgType) && (data == 0x3)) { - usart_receive_state = UsartReceiveWaitLength; - pack_msgtype = data; - } - else { - usart_receive_state = UsartReceiveWaitHead0; - pack_index = 0; - pack_length = 0; - } - } else if(gps_prase_flag) - { - static uint8_t index = 0; -//GPS解析数据 -// static ST_BLERecv BLE_recvive; - GGA_DataStruct jdrecv,wdrecv,Posstate; - - //接收数据开始分析 - mUsart2ReceivePack[index] = data; //char数组传进来参数data - mUsart2ReceivePack_before = mUsart2ReceivePack_now; - mUsart2ReceivePack_now=data; + } else if(usart_receive_state == UsartReceiveWaitData) { //若果收到的是正常通讯包 + mUsartReceivePack[index] = data; index++; - if( mUsart2ReceivePack_before == 0x0D && mUsart2ReceivePack_now==0x0A )//接收数据到“0x0D 0x0A”结束 - { - //解析该条GPS报文 - - analysis_num=sscanf((char*)mUsart2ReceivePack,"$%[^,],%*[^,],%[^,],%*[^,],%[^,],%*[^,],%[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*s",gps_header,wdrecv.m_pData,jdrecv.m_pData,Posstate.m_pData); - if(!memcmp(gps_header,"GNGGA",5)) - { - memcpy(GPS_GGAmessage,mUsart2ReceivePack,strlen(mUsart2ReceivePack)-2); - - wd=strtod(wdrecv.m_pData,NULL); - jd=strtod(jdrecv.m_pData,NULL); - if(wd!=0) - blink_led(&gps_success_state); - pos_state=atoi(Posstate.m_pData); - if(pos_state!=0) - { - gps_timeout_flag=0;//不超时接收状态 - - gps_need_data_flag=0;//接收数据完成 - gps_wait_count=0;//清0接收状态 - //gps_power_state=0;//关闭gps - if(gps_open_flag){ - UDPClient_UploadGPS();//上传GPS超时无效数据 - gps_power_state=0;//立即关掉gps,防止串口数据过多导致无法切换休眠 - update_led_power_state(); - } - pos_state=0;//防止多次进入 - } - - } -// if(!memcmp(gps_header,"GBGSV",5)) -// {memcpy(GPS_GSVmessage,mUsart2ReceivePack,strlen(mUsart2ReceivePack)-2); -// GPS_ParseGSV(GPS_GSVmessage,strlen(GPS_GSVmessage)); -// -// } - - memset(mUsart2ReceivePack,0,sizeof(mUsart2ReceivePack)); - memset(wdrecv.m_pData,0,sizeof(wdrecv.m_pData)); - memset(jdrecv.m_pData,0,sizeof(jdrecv.m_pData)); - memset(Posstate.m_pData,0,sizeof(Posstate.m_pData)); - index=0; - mUsart2ReceivePack_before=0; - mUsart2ReceivePack_now=0; + if(index == pack_length-2) { //如果收到的index与长度相等 + usart_receive_state = UsartReceiveWaitChecksum; } + } else if(usart_receive_state == UsartReceiveWaitLength) { //收到长度字节 + + pack_length = data; + pack_index = 0; + usart_receive_state = UsartReceiveWaitData; + + } else if((usart_receive_state == UsartReceiveWaitHead0) && (data == 0x55)) { //收到第一个包头 + usart_receive_state = UsartReceiveWaitHead1; + } else if((usart_receive_state == UsartReceiveWaitHead1) && (data == 0xAA)) { //收到第二个包头 + usart_receive_state = UsartReceiveWaitMsgType; + } else if ((usart_receive_state == UsartReceiveWaitMsgType)) { + usart_receive_state = UsartReceiveWaitLength; + pack_msgtype = data; } + else { + usart_receive_state = UsartReceiveWaitHead0; + pack_index = 0; + pack_length = 0; + } + } +// else if(gps_prase_flag) +// { +// static uint8_t index = 0; +////GPS解析数据 +//// static ST_BLERecv BLE_recvive; +// GGA_DataStruct jdrecv,wdrecv,Posstate; +// +// //接收数据开始分析 +// mUsart2ReceivePack[index] = data; //char数组传进来参数data +// mUsart2ReceivePack_before = mUsart2ReceivePack_now; +// mUsart2ReceivePack_now=data; +// index++; +// if( mUsart2ReceivePack_before == 0x0D && mUsart2ReceivePack_now==0x0A )//接收数据到“0x0D 0x0A”结束 +// { +// //解析该条GPS报文 +// +// analysis_num=sscanf((char*)mUsart2ReceivePack,"$%[^,],%*[^,],%[^,],%*[^,],%[^,],%*[^,],%[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*s",gps_header,wdrecv.m_pData,jdrecv.m_pData,Posstate.m_pData); +// if(!memcmp(gps_header,"GNGGA",5)) +// { +// memcpy(GPS_GGAmessage,mUsart2ReceivePack,strlen(mUsart2ReceivePack)-2); +// +// wd=strtod(wdrecv.m_pData,NULL); +// jd=strtod(jdrecv.m_pData,NULL); +// if(wd!=0) +// blink_led(&gps_success_state); +// pos_state=atoi(Posstate.m_pData); +// if(pos_state!=0) +// { +// gps_timeout_flag=0;//不超时接收状态 +// +// gps_need_data_flag=0;//接收数据完成 +// gps_wait_count=0;//清0接收状态 +// //gps_power_state=0;//关闭gps +// if(gps_open_flag){ +// UDPClient_UploadGPS();//上传GPS超时无效数据 +// gps_power_state=0;//立即关掉gps,防止串口数据过多导致无法切换休眠 +// update_led_power_state(); +// } +// pos_state=0;//防止多次进入 +// } +// +// } +//// if(!memcmp(gps_header,"GBGSV",5)) +//// {memcpy(GPS_GSVmessage,mUsart2ReceivePack,strlen(mUsart2ReceivePack)-2); +//// GPS_ParseGSV(GPS_GSVmessage,strlen(GPS_GSVmessage)); +//// +//// } +// +// memset(mUsart2ReceivePack,0,sizeof(mUsart2ReceivePack)); +// memset(wdrecv.m_pData,0,sizeof(wdrecv.m_pData)); +// memset(jdrecv.m_pData,0,sizeof(jdrecv.m_pData)); +// memset(Posstate.m_pData,0,sizeof(Posstate.m_pData)); +// index=0; +// mUsart2ReceivePack_before=0; +// mUsart2ReceivePack_now=0; +// } +// } } -- Gitblit v1.9.3