keil/include/src/Radio/lora_1268.c
@@ -187,6 +187,7 @@
extern uint8_t SOS_KEY_STATE;
uint32_t LORA_POLL_COUNT=0;
uint8_t test1,test2;
extern int poll_rx_num;
#define GET_USERKEY gpio_pin_get_val(SOS_PIN)
void LoraReportPoll(void)
{
@@ -206,14 +207,14 @@
   //LOG_INFO(TRACE_MODULE_APP," 切换2\r\n");
   //test1++;
//   LOG_INFO(TRACE_MODULE_APP," 切换9\r\n");
    //SwitchLoraSettings(wg_report_freq,REPORT_CHANNEL_SF,22);
   SwitchLoraSettings(478,7,22);
//    if(heatbeat_count++>HEATBEAT_UPDATE_TIME && WG_Connected == wg_state) //如果心跳包到达上传时间,并且网关处于链接状态,就上传心跳包
//    {
//        heatbeat_count = 0;
//        LoraHeartBeartPoll();
//        return;
//    }
    SwitchLoraSettings(wg_report_freq,REPORT_CHANNEL_SF,22);
   //SwitchLoraSettings(478,7,22);
    if(heatbeat_count++>HEATBEAT_UPDATE_TIME && WG_Connected == wg_state) //如果心跳包到达上传时间,并且网关处于链接状态,就上传心跳包
    {
        heatbeat_count = 0;
        LoraHeartBeartPoll();
        return;
    }
    for(uint16_t i=0; i<report_ancnum-1; i++)
    {
        for(uint16_t j=0; j<report_ancnum-1-i; j++)
@@ -244,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);
@@ -264,8 +265,16 @@
   //   test2++;   num
//   LOG_INFO(TRACE_MODULE_APP," 切换8\r\n");
   //SwitchLoraSettings(wg_report_freq,REPORT_CHANNEL_SF,22);
   // Radio.Send(lora_sendbuffer,ANCID_IDX+report_ancnum*4+2);
   Radio.Send(num,3);
    Radio.Send(lora_sendbuffer,ANCID_IDX+report_ancnum*4+2);
      LOG_INFO(TRACE_MODULE_APP," 数量%d\r\n",poll_rx_num);
      if(poll_rx_num==0)
      {
      CloseUWB();
      Uwb_init();//默认为我们测距配置
      OpenUWB();
      }
      poll_rx_num=0;
   //Radio.Send(num,3);
}
@@ -475,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;
@@ -536,13 +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;
@@ -551,9 +562,10 @@
    huifushengjibao_flag=0;
    LoraUp_flag=1;
    Radio.Send(send_lora_data,8);//基站发送升级确认回复
    delay_ms(1000); 
LOG_INFO(TRACE_MODULE_APP," 切换7\r\n");
   // SwitchLoraSettings(LORA_UPCHANNEL_FRQ,LORA_UPCHANNEL_SF,22); //切换lora升级频点
//LOG_INFO(TRACE_MODULE_APP," 切换7\r\n");
    SwitchLoraSettings(LORA_UPCHANNEL_FRQ,LORA_UPCHANNEL_SF,22); //切换lora升级频点
    delay_ms(200);   
    __disable_irq();
//    FLASH_Read(APP_1OR2_ADRESS,(uint8_t*)&app1_or_app2,2);        
@@ -561,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)
@@ -577,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);     //等待接收完成直到超时
@@ -611,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)
@@ -622,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();
@@ -654,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);
                }
@@ -715,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;   
@@ -813,8 +808,9 @@
    if(!no_rx_flag)
    {
        if(lora_jianting_flag&&LoraUp_flag==0)
        {   LOG_INFO(TRACE_MODULE_APP," 切换2\r\n");
//            SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
        {
               //LOG_INFO(TRACE_MODULE_APP," 切换2\r\n");
            SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
            Radio.Rx(0);
        }
    }
@@ -826,8 +822,8 @@
    Radio.Standby();
    if(lora_jianting_flag)
    {
         LOG_INFO(TRACE_MODULE_APP," 切换3\r\n");
       // SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
//         LOG_INFO(TRACE_MODULE_APP," 切换3\r\n");
        SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
        Radio.Rx(0);
    }
}
@@ -838,8 +834,8 @@
   
    if(lora_jianting_flag)
    {
         LOG_INFO(TRACE_MODULE_APP," 切换4\r\n");
//        SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
         //LOG_INFO(TRACE_MODULE_APP," 切换4\r\n");
        SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
        Radio.Rx(0);
    }
}
@@ -851,8 +847,8 @@
    Radio.Standby();
    if(lora_jianting_flag)
    {
         LOG_INFO(TRACE_MODULE_APP," 切换5\r\n");
    //    SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
         //LOG_INFO(TRACE_MODULE_APP," 切换5\r\n");
        SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
        Radio.Rx(0);
    }
}