| | |
| | | #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 |
| | |
| | | */ |
| | | |
| | | 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 ) |
| | | |
| | |
| | | |
| | | 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"; |
| | |
| | | |
| | | |
| | | |
| | | |
| | | 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; |
| | |
| | | { |
| | | 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) |
| | |
| | | |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | } |