1
WXK
2024-01-24 42c0d595c6ab74396416028dffa398a31da1b335
Src/radio/Lora.c
@@ -10,7 +10,6 @@
#include "stdio.h"
#include "delay.h"
#include "dw_mbx_anc.h"
static RadioEvents_t RadioEvents;
#define USE_MODEM_LORA
//#define USE_MODEM_FSK
#define REGION_CN779
@@ -71,6 +70,56 @@
 */
static RadioEvents_t RadioEvents;
/**
  * @brief  Update CRC16 for input byte
  * @param  CRC input value
  * @param  input byte
  * @retval Updated CRC value
  */
uint16_t UpdateCRC16(uint16_t crcIn, uint8_t byte)
{
  uint32_t crc = crcIn;
  uint32_t in = byte|0x100;
  do
  {
    crc <<= 1;
    in <<= 1;
    if(in&0x100)
    {
      ++crc;
    }
    if(crc&0x10000)
    {
      crc ^= 0x1021;
    }
 } while(!(in&0x10000));
 return (crc&0xffffu);
}
/**
  * @brief  Cal CRC16 for YModem Packet
  * @param  data
  * @param  length
  * @retval CRC value
  */
uint16_t Cal_CRC16(const uint8_t* data, uint32_t size)
{
  uint32_t crc = 0;
  const uint8_t* dataEnd = data+size;
  while(data<dataEnd)
  {
    crc = UpdateCRC16(crc,*data++);
  }
  crc = UpdateCRC16(crc,0);
  crc = UpdateCRC16(crc,0);
  return (crc&0xffffu);
}
#if defined( USE_MODEM_LORA )
@@ -117,7 +166,7 @@
static uint8_t flag_lora_wait_sync = 0;
#define RX_TIMEOUT_VALUE                            1000
#define RX_TIMEOUT_VALUE                            9999
#define BUFFER_SIZE                                 64 // Define the payload size here
const uint8_t PingMsg[] = "PING";
@@ -147,13 +196,17 @@
uint8_t LoraUp_flag;
void OnTxDone( void )
{   
//   T_R_Init(0);   
//    Radio.Standby();
//    Radio.Rx( RX_TIMEOUT_VALUE ); //进入接收
    Radio.Sleep( );
    if(LoraUp_flag)
    {
    Radio.Rx( RX_TIMEOUT_VALUE );
    }
//printf("TX SUCCESS2\r\n");
}
static uint8_t rxbuffer[255],rxbuff_len;
@@ -194,40 +247,6 @@
{
    flag_lora_wait_sync = 0;
    Radio.Standby();
}
void T_R_Init(uint8_t kind)
{
//    Radio.Init( &RadioEvents );
//   if(kind==1) //1:Txd config
//      {
//         Radio.SetChannel( RF_FREQUENCY );
//         Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 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, 1000 );
//      }
//      else       //0:Rxd config
//    {
//         Radio.SetChannel( RF_FREQUENCY );
//        Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
//                                   LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH_R,
//                                   LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
//                                   0, false, 0, 0, LORA_IQ_INVERSION_ON_R, false );
//      }
//
////      Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 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, 1000 );
////      Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
////                                   LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH_R,
////                                   LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
////                                   0, false, 0, 0, LORA_IQ_INVERSION_ON_R, false );
}
void Lora_Init(void)
@@ -306,3 +325,27 @@
    
}
uint16_t rec_wenjian_daxiao;
uint16_t wangguan_up_id;
uint8_t send_lora_data[250];
extern uint8_t lora_recbuffer[255];
uint8_t mudeshengjibao;
void LoraUp_Poll()
{
    uint16_t crc16;
    rec_wenjian_daxiao=lora_recbuffer[WRITEPATE_VALUE_IDX];
    wangguan_up_id=lora_recbuffer[WG_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个字节
    crc16=Cal_CRC16(send_lora_data,5);
    memcpy(&send_lora_data[5],&crc16,2);
    LoraUp_flag=1;
    Radio.Send(send_lora_data,7);//基站发送升级确认回复
   while(1)
   {
   send_lora_data[MSG_TYPE_IDX]=LORA_MSGTYPE_UPDATEFILE_REQUEST;
   send_lora_data[MUQIAN_BAG]=mudeshengjibao;
   }
}