yincheng.zhong
2024-02-21 aea9fefdfa35ce25c436d924ff8bc54fcd1baca7
Src/radio/Lora.c
@@ -193,16 +193,20 @@
{
//   HAL_GPIO_TogglePin(GPIOB, LED1_Pin);
}
uint8_t tttt;
uint8_t huifushengjibao_flag;
uint8_t LoraUp_flag;
extern uint8_t flag_writepara_needreset;
void OnTxDone( void )
{   
//   T_R_Init(0);   
//    Radio.Standby();
    Radio.Standby();
//    Radio.Rx( RX_TIMEOUT_VALUE ); //进入接收
  tttt++;
    if(flag_writepara_needreset) //配置写入完成设备需要重启
    {
        printf("网关下发配置写入完成,重启");
        SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
    }
    if(LoraUp_flag)
    {
    huifushengjibao_flag=1;
@@ -220,13 +224,17 @@
    memcpy(lp_count,&rec_lp_count,2);
    return rxbuff_len;
}
uint16_t GetLoraSyncCount(void)
{
    return rec_lp_count;
}
uint8_t lora_up_rec_flag;
extern uint16_t tx_num;
void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
{
    rec_lp_count = HAL_LPTIM_ReadCounter(&hlptim1);
    rxbuff_len = size;
    memcpy( rxbuffer, payload, BufferSize );
    memcpy( rxbuffer, payload, size );
    RssiValue = rssi;
    SnrValue = snr;
    
@@ -267,22 +275,15 @@
    RadioEvents.RxTimeout = OnRxTimeout;
    RadioEvents.RxError = OnRxError;
    
        Radio.Init( &RadioEvents );
       Radio.SetChannel( RF_FREQUENCY );
      Radio.SetTxConfig( MODEM_LORA, 22, 0, LORA_BANDWIDTH,
                                   LORA_SPREADING_FACTOR, LORA_CODINGRATE,
                                   LORA_PREAMBLE_LENGTH_T, LORA_FIX_LENGTH_PAYLOAD_ON,
                                   false, 0, 0, LORA_IQ_INVERSION_ON_T, 3000 );
          TX_Buffer[0] = 'P';
          TX_Buffer[1] = 'I';
          TX_Buffer[2] = 'N';
          TX_Buffer[3] = tx_num;
          crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值
          TX_Buffer[4]=crc_value>>8;
          TX_Buffer[5]=crc_value;
    Radio.Init( &RadioEvents );
    Radio.Standby();
    Radio.Sleep();
//       Radio.SetChannel( UWB_CHANNEL_FRQ );
//      Radio.SetTxConfig( MODEM_LORA, 22, 0, LORA_BANDWIDTH,
//                                   LORA_SPREADING_FACTOR, LORA_CODINGRATE,
//                                   LORA_PREAMBLE_LENGTH_T, LORA_FIX_LENGTH_PAYLOAD_ON,
//                                   false, 0, 0, LORA_IQ_INVERSION_ON_T, 3000 );
}
@@ -319,17 +320,21 @@
{
    return flag_lora_wait_sync;
}
void SwitchLoraSettings(uint32_t freq,uint8_t sf)
void SwitchLoraSettings(uint32_t freq,uint8_t sf,uint8_t power)
{
    RadioEvents.TxDone = OnTxDone;
    RadioEvents.RxDone = OnRxDone;
    RadioEvents.TxTimeout = OnTxTimeout;
    RadioEvents.RxTimeout = OnRxTimeout;
    RadioEvents.RxError = OnRxError;
    Radio.Init( &RadioEvents );
    Radio.SetChannel( freq );
    
    Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, 2,
//    RadioEvents.TxDone = OnTxDone;
//    RadioEvents.RxDone = OnRxDone;
//    RadioEvents.TxTimeout = OnTxTimeout;
//    RadioEvents.RxTimeout = OnRxTimeout;
//    RadioEvents.RxError = OnRxError;
    //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
//    Radio.Init( &RadioEvents );
    Radio.Standby();
  //  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
    Radio.SetChannel( freq*1000000 );
    Radio.SetTxConfig( MODEM_LORA, power, 0, 2,
    sf, LORA_CODINGRATE,LORA_PREAMBLE_LENGTH_T, LORA_FIX_LENGTH_PAYLOAD_ON,
    false, 0, 0, LORA_IQ_INVERSION_ON_T, 3000 );
@@ -337,29 +342,10 @@
    sf,LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH_R,
    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
    0, false, 0, 0, LORA_IQ_INVERSION_ON_R, 0 );
}
void SwitchLoraSettingstest(uint32_t freq,uint8_t sf)
{
    RadioEvents.TxDone = OnTxDone;
    RadioEvents.RxDone = OnRxDone;
    RadioEvents.TxTimeout = OnTxTimeout;
    RadioEvents.RxTimeout = OnRxTimeout;
    RadioEvents.RxError = OnRxError;
    Radio.Init( &RadioEvents );
    Radio.SetChannel( freq );
    Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, 2,
    sf, LORA_CODINGRATE,LORA_PREAMBLE_LENGTH_T, LORA_FIX_LENGTH_PAYLOAD_ON,
    false, 0, 0, LORA_IQ_INVERSION_ON_T, 3000 );
    Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH,
    sf,LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH_R,
    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
    0, false, 0, 0, LORA_IQ_INVERSION_ON_R, 1 );
    
    Radio.Rx( RX_TIMEOUT_VALUE );
}
uint16_t rec_wenjian_daxiao;
uint16_t wangguan_up_id;
uint8_t send_lora_data[250];
@@ -371,14 +357,14 @@
void LoraUp_Poll()
{    uint16_t  result ;
    uint16_t crc16;
    memcpy(&rec_wenjian_daxiao,&rxbuffer[WRITEPATE_VALUE_IDX],2);//网关ID 占用2个字节
    memcpy(&rec_wenjian_daxiao,&rxbuffer[WRITEPARA_VALUE_IDX],2);//网关ID 占用2个字节
//    rec_wenjian_daxiao=rxbuffer[WRITEPATE_VALUE_IDX];
    if(rec_wenjian_daxiao>0XAC00)
    {}//文件过大,超出范围
    else
    {
    final_bag_num=(rec_wenjian_daxiao/220)+1;//计算一共要请求多少包    
    wangguan_up_id=rxbuffer[WG_ID_IDX];
    wangguan_up_id=rxbuffer[SOURCE_ID_IDX];
    send_lora_data[MSG_TYPE_IDX]=LORA_MSGTYPE_UPDATE_CONFIRM;
    memcpy(&send_lora_data[WANGGUAN_ID],&wangguan_up_id,2);//网关ID 占用2个字节
    memcpy(&send_lora_data[JIZHAN_ID],&dev_id,2);//标签或者基站的设备ID 2个字节
@@ -488,8 +474,8 @@
   }
}
void test1()
{
    if(!memcmp(&dev_id,&rxbuffer[ANCTAG_DEVICEID_IDX],2))
    {LoraUp_Poll();}
}
//void test1()
//{
//    if(!memcmp(&dev_id,&rxbuffer[ANCTAG_DEVICEID_IDX],2))
//    {LoraUp_Poll();}
//}