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