From da80b96a9d0f2f9dc6e23d1a1830cc2384f2bd0b Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期五, 01 八月 2025 13:45:57 +0800
Subject: [PATCH] 加入升级代码,但是空间不够  先提交一下  改为分成两个app  由boot来进行跳转

---
 keil/include/src/Radio/lora_1268.c |  168 +++++++++++++++++++++++++------------------------------
 1 files changed, 76 insertions(+), 92 deletions(-)

diff --git a/keil/include/src/Radio/lora_1268.c b/keil/include/src/Radio/lora_1268.c
index bd22c2e..076c704 100644
--- a/keil/include/src/Radio/lora_1268.c
+++ b/keil/include/src/Radio/lora_1268.c
@@ -245,7 +245,7 @@
     memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2);
     lora_sendbuffer[SEQNUM_IDX] = seq_num++;
     lora_sendbuffer[BAT_IDX] = bat_percent;
-    lora_sendbuffer[STATE_IDX] = !GET_USERKEY|stationary_flag<<1;
+    lora_sendbuffer[STATE_IDX] =0/* !GET_USERKEY|stationary_flag<<1*/;
 #ifdef USE_GPS
     memcpy(&lora_sendbuffer[GPS_JINGDU_IDX],&gps_jingdu,8);
     memcpy(&lora_sendbuffer[GPS_WEIDU_IDX],&gps_jingdu,8);
@@ -484,12 +484,12 @@
 extern uint16_t set_mk_time;
 extern mk_send_message_to_BLE(void);
 uint8_t tt4=1;
-uint32_t Zhongjian_data[60];
+uint32_t Zhongjian_data[1024];
 uint8_t send_lora_data[250];
 uint16_t rec_wenjian_daxiao;
 uint8_t huifushengjibaoerror_num;
-uint8_t muqiandeshengjibao;
-uint8_t final_bag_num;
+uint16_t muqiandeshengjibao;
+uint16_t final_bag_num;
 uint16_t wangguan_up_id;
 uint16_t testflag;
 uint16_t current_count1,target_count1,start_count1;
@@ -545,14 +545,15 @@
 
   return (crc&0xffffu);
 }
-
+uint16_t shoudaodebaoshu;
+uint16_t aaa;
 void LoraUp_Poll()
 {    uint16_t  result ;
     uint16_t crc16;
     if(shengji_flag)
     {
 //    memcpy(&wangguan_up_id,&RX_Buffer[SOURCE_ID_IDX],2);//网关ID 占用2个字节
-    send_lora_data[MSG_TYPE_IDX]=LORA_MSGTYPE_UPDATE_CONFIRM;
+    send_lora_data[MSG_TYPE_IDX]=LORA_MSGTYPE_UPDATE_CONFIRM2;
     memcpy(&send_lora_data[SOURCE_ID_IDX],&dev_id,2);//网关ID 占用2个字节
     memcpy(&send_lora_data[DEST_ID_IDX],&wangguan_up_id,2);//标签或者基站的设备ID 2个字节
 //    send_lora_data[MUQIAN_BAG]=0xFF;
@@ -572,6 +573,7 @@
         while(1)
         {
             //FLASH_Prepare(APP2_ADRESS, APP_SIZE); //删除上一次app为下次做准备
+            testflag=1;
 						testflag=flash_erase(FLASH_ID0,APP2_ADRESS,APP_SIZE);//删除100kAPP2空间为下面做准备
             delay_ms(500);
             if(testflag==0)
@@ -588,11 +590,12 @@
                 send_lora_data[MSG_TYPE_IDX]=LORA_MSGTYPE_UPDATEFILE_REQUEST;
                 memcpy(&send_lora_data[SOURCE_ID_IDX],&dev_id,2);//网关ID 占用2个字节
                 memcpy(&send_lora_data[DEST_ID_IDX],&wangguan_up_id,2);//标签或者基站的设备ID 2个字节
-                send_lora_data[MUQIAN_BAG]=muqiandeshengjibao;
-                crc16=Checksum_u16(send_lora_data,7);
-                memcpy(&send_lora_data[7],&crc16,2);
+//                send_lora_data[MUQIAN_BAG]=muqiandeshengjibao;
+                memcpy(&send_lora_data[MUQIAN_BAG],&muqiandeshengjibao,2);
+                crc16=Checksum_u16(send_lora_data,8);
+                memcpy(&send_lora_data[8],&crc16,2);
                 lora_up_rec_flag=0;    
-                Radio.Send(send_lora_data,9);//基站发送请求第x包
+                Radio.Send(send_lora_data,10);//基站发送请求第x包
 							
                 /*重写超时逻辑
                 start_count1=HAL_LPTIM_ReadCounter(&hlptim1);     //等待接收完成直到超时
@@ -622,10 +625,10 @@
 									{
 									break;
 									}
-									  delay_ms(100);
+									  delay_ms(300);
                     if(lora_up_rec_flag)
                     {break;}
-                    Radio.Send(send_lora_data,9);
+                    Radio.Send(send_lora_data,10);
 								}
 //                while(1);
                 if(lora_up_rec_flag)
@@ -633,17 +636,18 @@
                     //HAL_IWDG_Refresh(&hiwdg);//未修改喂狗
                      crc16=Cal_CRC16(RX_Buffer,DATA_IDX+ONE_BAG_DAXIAO);
                     __disable_irq();
-                     if(muqiandeshengjibao==RX_Buffer[MUQIAN_BAG]&&!memcmp(&crc16,&RX_Buffer[DATA_IDX+ONE_BAG_DAXIAO],2)&&!memcmp(&dev_id,&RX_Buffer[DEST_ID_IDX],2)&& !memcmp(&wangguan_up_id,&RX_Buffer[SOURCE_ID_IDX],2))
+                    memcpy(&shoudaodebaoshu,RX_Buffer+MUQIAN_BAG,2);
+                     if(muqiandeshengjibao==shoudaodebaoshu&&!memcmp(&crc16,&RX_Buffer[DATA_IDX+ONE_BAG_DAXIAO],2)&&!memcmp(&dev_id,&RX_Buffer[DEST_ID_IDX],2)&& !memcmp(&wangguan_up_id,&RX_Buffer[SOURCE_ID_IDX],2))
                      {
                      memcpy(Zhongjian_data,&RX_Buffer[DATA_IDX],ONE_BAG_DAXIAO);
-                     result12=flash_write_nbytes(FLASH_ID0,APP2_ADRESS+ONE_BAG_DAXIAO*RX_Buffer[MUQIAN_BAG],(uint8_t*)Zhongjian_data,ONE_BAG_DAXIAO);
+                     result12=flash_write_nbytes(FLASH_ID0,APP2_ADRESS+ONE_BAG_DAXIAO*shoudaodebaoshu,(uint8_t*)Zhongjian_data,ONE_BAG_DAXIAO);
 											// flash_write_nbytes(FLASH_ID0, FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, sizeof(g_com_map));
-                     while(result12==0)
+                     while(!result12==0)
                      {
-                     result12=flash_write_nbytes(FLASH_ID0,APP2_ADRESS+ONE_BAG_DAXIAO*RX_Buffer[MUQIAN_BAG],(uint8_t*)Zhongjian_data,ONE_BAG_DAXIAO);
+                     result12=flash_write_nbytes(FLASH_ID0,APP2_ADRESS+ONE_BAG_DAXIAO*shoudaodebaoshu,(uint8_t*)Zhongjian_data,ONE_BAG_DAXIAO);
                      delay_ms(10);    
                      }                         
-                     if(result12)
+                     if(result12==0)
                      muqiandeshengjibao++;   
                      }
                      __enable_irq();
@@ -665,12 +669,32 @@
                 if(muqiandeshengjibao==final_bag_num)
                 {
                 uint16_t tmp11 ,result11;
-                    tmp11=0XCC;
-									result11=flash_erase(FLASH_ID0,APP_1OR2_ADRESS,FLASH_SECTOR_SIZE);//删除标志位所在区域
-                if(!result11)
-                result11 = flash_write_nbytes(FLASH_ID0,APP_1OR2_ADRESS, (const uint8_t*)&tmp11, 2);//更新标志位
-                __disable_irq();                
-                delay_ms(1500);
+                tmp11=0XCC;
+                testflag=flash_erase(FLASH_ID0,APP1_ADRESS,APP_SIZE);//删除100kAPP1空间  
+//                final_bag_num=(rec_wenjian_daxiao/1024)+1;
+                if(!testflag)
+                {
+                final_bag_num=(rec_wenjian_daxiao/1024)+1;    
+                for(aaa=0;aaa<final_bag_num;aaa++)
+                {
+                memcpy(&Zhongjian_data,(HIDO_VOID *)(APP2_ADRESS+(aaa*1024)),1024);
+//                flash_write_nbytes((APPLICATION_ADDRESS+(aaa*1024)), (const uint8_t*)&zhongjian_shuju, 1024);
+                flash_write_nbytes(FLASH_ID0,APP1_ADRESS+(aaa*1024),(uint8_t*)Zhongjian_data,1024);
+                }             
+//                memcpy(&Zhongjian_data,(HIDO_VOID *)0x400FB88,248);
+//                flash_write_nbytes((APPLICATION_ADDRESS+(aaa*1024)), (const uint8_t*)&zhongjian_shuju, 1024);
+//                flash_write_nbytes(FLASH_ID0,0x400FF80,(uint8_t*)Zhongjian_data,248);              
+                }
+//                g_com_map[LORA_UPDATE_FLAG]=tmp11;
+                mk_send_offupdata_to_BLE();
+//                result11=flash_erase(FLASH_ID0,APP_1OR2_ADRESS,FLASH_SECTOR_SIZE);//删除标志位所在区域
+//                if(!result11)
+//                result11 = flash_write_nbytes(FLASH_ID0,APP_1OR2_ADRESS, (const uint8_t*)&tmp11, 2);//更新标志位
+//                __disable_irq();                
+//                delay_ms(700);
+//                save_com_map_to_flash();
+//                flash_erase(FLASH_ID0,0X400fb88,0x10000);//删除100kAPP1空间
+                delay_ms(300);
                 //HAL_NVIC_SystemReset();//修改重启
 										sys_reset(0);
                 }
@@ -726,86 +750,46 @@
 										switch(RX_Buffer[PWTAG_RW_FLAG_IDX])
 										{
 												case WGRSP_RWTAG_NONE:
-												REV_WG_pack++;//此处刚放开
-                        wg_report_freq = RX_Buffer[POLL_FREQ_IDX]+400;//此处刚放开未测试
-//                        memcpy(&rec_delaytime,&RX_Buffer[NEXTPOLL_TIME_IDX],2);
-
-//                        if(report_ancnum<2)
-//                        {
-//                            datalen_offset = report_ancnum*85;
-//                        }else{
-//                            datalen_offset = (report_ancnum-1)*46+85;
-//                        }
-//                        rec_secdelay = RX_Buffer[PWTAG_SECDELAY_IDX];
-//                        if(BufferSize!=13||rec_secdelay>20)
-//                        {
-//                         rec_secdelay = 0;
-//                        }
-//											if(rec_delaytime<500)
-//												{
-//												int t;
-//													t++;
-//												}
-////                        sleep_time_count =(__MS_TO_32K_CNT(rec_delaytime)/10)- delaytime-datalen_offset;
-//                        sleep_time_count =(__MS_TO_32K_CNT(rec_delaytime)/10);
-//                        while(sleep_time_count>=32768)
-//												{
-//                         sleep_time_count-=32768;											
-//												}
-//												while(sleep_time_count<2000)
-//												{
-//												 sleep_time_count+=10000;
-//												}
-//												if(REV_WG_pack==1)
-//												{
-//												sleep_time_count_LAST=sleep_time_count;
-//												}
-//												if(abs(sleep_time_count_LAST-sleep_time_count)>2000||REV_WG_pack==1)
-//												{
-//												 sleep_timer_start(sleep_time_count);
-													time_count++;
-//												}
-                        break;
+                                                    REV_WG_pack++;//此处刚放开
+                                                    wg_report_freq = RX_Buffer[POLL_FREQ_IDX]+400;//此处刚放开未测试
+                                                    time_count++;
+                                                    break;
 												case WGRSP_RWTAG_READ:
-															no_rx_flag = 1;
-															LoraSendComMap(WGRSP_RWTAG_READ);
-															break;
+                                                    no_rx_flag = 1;
+                                                    LoraSendComMap(WGRSP_RWTAG_READ);
+                                                    break;
 												case WGRSP_RWTAG_WRITE:
-
-														rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
-													switch(rec_index)
-															{
-																	case 0xdd:  //语音下发
-																			break;
-//                        case 0x20:  //蜂鸣
-//                            memcpy(&rec_value,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
-//                            motor_keeptime = rec_value;
-//                            break;
-                        default :
-                            memcpy(&rec_value,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
-                            g_com_map[rec_index/2] = rec_value;
-														if(rec_index/2==POWER)//新增判断
-														{
-														 memcpy(&set_mk_time,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
-															mk_send_message_to_BLE();	//发送给蓝牙
-															//LOG_INFO(TRACE_MODULE_APP, "修改成功g_com表为%#x,时间为%#x\r\n",g_com_map[POWER],set_mk_time);
-														}
-                            save_com_map_to_flash();
-                            LoraRspWriteCommap(SUBMSG_WRITE_ANCPARA);
-                            flag_writepara_needreset = 1;
-                            no_rx_flag = 1;                           
-															}
-															break; 
+                                                rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
+                                                switch(rec_index)
+                                                {
+                                                case 0xdd:  //语音下发
+                                                    break;
+                                                default :
+                                                    memcpy(&rec_value,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
+                                                    g_com_map[rec_index/2] = rec_value;
+                                                    if(rec_index/2==POWER)//新增判断
+                                                    {
+                                                    memcpy(&set_mk_time,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
+                                                    mk_send_message_to_BLE();	//发送给蓝牙
+                                                    //LOG_INFO(TRACE_MODULE_APP, "修改成功g_com表为%#x,时间为%#x\r\n",g_com_map[POWER],set_mk_time);
+                                                    }
+                                                    save_com_map_to_flash();
+                                                    LoraRspWriteCommap(SUBMSG_WRITE_ANCPARA);
+                                                    flag_writepara_needreset = 1;
+                                                    no_rx_flag = 1;                           
+                                                }
+                                                break; 
 												case WGRSP_RWTAG_UPDATE:
 												rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
 												switch(rec_index)
 												{
 														case 0xaa:  //升级下发
 														memcpy(&rec_wenjian_daxiao,&RX_Buffer[WRITEPARA_VALUE_IDX],2);//文件大小
-														if(rec_wenjian_daxiao>0XAC00||rec_wenjian_daxiao==0)
+														if(/*rec_wenjian_daxiao>0XAC00||*/rec_wenjian_daxiao==0)
 														{}//文件过大,超出范围
 														else
 														{
+                                                                mk_send_updata_to_BLE();
 																memcpy(&wangguan_up_id,&RX_Buffer[SOURCE_ID_IDX],2);//网关ID 占用2个字节
 																shengji_flag=1;
 																LoraUp_flag=1;   

--
Gitblit v1.9.3