From 5309726bb8a8b310304b88c84a8ae5dd76d8188a Mon Sep 17 00:00:00 2001 From: yincheng.zhong <634916154@qq.com> Date: 星期一, 22 一月 2024 15:35:09 +0800 Subject: [PATCH] Merge branch '免布线基站-lora' of http://47.108.70.204:60062/r/XRange_Tag into 免布线基站-lora --- Src/radio/Lora.c | 251 +++++++++++++------------------------------------ 1 files changed, 67 insertions(+), 184 deletions(-) diff --git a/Src/radio/Lora.c b/Src/radio/Lora.c index 5648852..a3c10f7 100644 --- a/Src/radio/Lora.c +++ b/Src/radio/Lora.c @@ -9,6 +9,7 @@ #include "string.h" #include "stdio.h" #include "delay.h" +#include "dw_mbx_anc.h" static RadioEvents_t RadioEvents; #define USE_MODEM_LORA //#define USE_MODEM_FSK @@ -83,7 +84,7 @@ // 2: 4/6, // 3: 4/7, // 4: 4/8] -#define LORA_PREAMBLE_LENGTH_T 96 // Same for Tx +#define LORA_PREAMBLE_LENGTH_T 8 // 96 // Same for Tx #define LORA_PREAMBLE_LENGTH_R 64 // Same for Rx //#define LORA_PREAMBLE_LENGTH 990 // Same for Tx and Rx #define LORA_SYMBOL_TIMEOUT 0 // Symbols @@ -114,6 +115,8 @@ TX, TX_TIMEOUT, }States_t; + +static uint8_t flag_lora_wait_sync = 0; #define RX_TIMEOUT_VALUE 1000 #define BUFFER_SIZE 64 // Define the payload size here @@ -149,86 +152,32 @@ void OnTxDone( void ) { // T_R_Init(0); - Radio.Standby(); +// Radio.Standby(); // Radio.Rx( RX_TIMEOUT_VALUE ); //进入接收 - + Radio.Sleep( ); +//printf("TX SUCCESS2\r\n"); +} +static uint8_t rxbuffer[255],rxbuff_len; +static uint16_t rec_lp_count; +uint8_t GetLoraBufferAndLen(uint8_t* buffer,uint16_t* lp_count) +{ + memcpy(buffer,rxbuffer,rxbuff_len); + memcpy(lp_count,&rec_lp_count,2); + return rxbuff_len; } extern uint16_t tx_num; void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ) { - BufferSize = size; - memcpy( RX_Buffer, payload, BufferSize ); + rec_lp_count = HAL_LPTIM_ReadCounter(&hlptim1); + rxbuff_len = size; + memcpy( rxbuffer, payload, BufferSize ); RssiValue = rssi; SnrValue = snr; Radio.Standby(); - if(EnableMaster) - { - if(memcmp(RX_Buffer,PongMsg,4)==0) - { - LedToggle();//LED闪烁 - printf("Master RXD PONG!\r\n"); - - } - - -// HAL_Delay_nMS(1000); -// -// TX_Buffer[0] = 'P'; -// TX_Buffer[1] = 'I'; -// TX_Buffer[2] = 'N'; -// TX_Buffer[3] = 'G'; -// -//// crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 -//// TX_Buffer[4]=crc_value>>8; -//// TX_Buffer[5]=crc_value; -//// //Radio.Send( TX_Buffer, 6); -// Radio.Send( TX_Buffer, 4); - -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_SET); -// printf("Master TXD PING!\r\n"); -// HAL_Delay_nMS( 1 ); -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_RESET); - - //printf("Master TXD PING!\r\n"); - } - else - { - if(memcmp(RX_Buffer,PingMsg,4)==0) - { - -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_SET); - printf("Slave RXD PING!\r\n"); -// HAL_Delay_nMS( 1 ); -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_RESET); - - LedToggle();//LED闪烁 - //printf("Slave RXD PING!\r\n"); - - T_R_Init(1); - - TX_Buffer[0] = 'P'; - TX_Buffer[1] = 'O'; - TX_Buffer[2] = 'N'; - TX_Buffer[3] = 'G'; - - -// crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 -// TX_Buffer[4]=crc_value>>8; -// TX_Buffer[5]=crc_value; -// //Radio.Send( TX_Buffer, 6); - - - Radio.Send( TX_Buffer, 4); - printf("Slave TXD PONG!\r\n"); - } - else - { - Radio.Rx( RX_TIMEOUT_VALUE ); - printf("Slave TXD XXXX\r\n"); - } - } + flag_lora_wait_sync = 0; + SetFlagSyncSuccess(1); } void OnTxTimeout( void ) @@ -239,56 +188,13 @@ void OnRxTimeout( void ) { Radio.Standby(); - if(EnableMaster) - { - TX_Buffer[0] = 'P'; - TX_Buffer[1] = 'I'; - TX_Buffer[2] = 'N'; - TX_Buffer[3] = 'G'; - -// crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 -// TX_Buffer[4]=crc_value>>8; -// TX_Buffer[5]=crc_value; - //Radio.Send( TX_Buffer, 6); - Radio.Send( TX_Buffer, 4); - -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_SET); -// HAL_Delay_nMS( 1 ); -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_RESET); - printf("Master TXD PING!\r\n"); - } - else - { - Radio.Rx( RX_TIMEOUT_VALUE ); - } + flag_lora_wait_sync = 0; } void OnRxError( void ) { - + flag_lora_wait_sync = 0; Radio.Standby(); - if(EnableMaster) - { - TX_Buffer[0] = 'P'; - TX_Buffer[1] = 'I'; - TX_Buffer[2] = 'N'; - TX_Buffer[3] = 'G'; - -// crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 -// TX_Buffer[4]=crc_value>>8; -// TX_Buffer[5]=crc_value; - //Radio.Send( TX_Buffer, 6); - Radio.Send( TX_Buffer, 4); -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_SET); -// HAL_Delay_nMS( 1 ); -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_RESET); - printf("Master TXD PING!\r\n"); - } - else - { - Radio.Rx( RX_TIMEOUT_VALUE ); - } - } @@ -334,63 +240,12 @@ RadioEvents.RxError = OnRxError; Radio.Init( &RadioEvents ); - if(EnableMaster) - { - Radio.SetChannel( RF_FREQUENCY ); - } - else - { - Radio.SetChannel( RF_FREQUENCY ); - } - - #if defined( USE_MODEM_LORA ) - -// Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, -// LORA_SPREADING_FACTOR, LORA_CODINGRATE, -// LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, -// true, 0, 0, LORA_IQ_INVERSION_ON, 3000 ); - - Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, + 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 ); - -// Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, -// LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, -// LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, -// 0, true, 0, 0, LORA_IQ_INVERSION_ON, false ); - -// 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.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, -// LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, -// LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, -// 0, false, 0, 0, LORA_IQ_INVERSION_ON, true ); - - -#elif defined( USE_MODEM_FSK ) - - Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0, - FSK_DATARATE, 0, - FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON, - true, 0, 0, 0, 3000 ); - - Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE, - 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH, - 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, true, - 0, 0,false, false ); -#else - #error "Please define a frequency band in the compiler options." -#endif - - if(EnableMaster) - { - - printf("I am Master!\r\n"); - TX_Buffer[0] = 'P'; TX_Buffer[1] = 'I'; TX_Buffer[2] = 'N'; @@ -399,19 +254,47 @@ crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 TX_Buffer[4]=crc_value>>8; TX_Buffer[5]=crc_value; - //Radio.Send( TX_Buffer, 6); - Radio.Send( TX_Buffer, 4); - -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_SET); -// HAL_Delay_nMS( 1 ); -// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_RESET); - - printf("Master TXD PING!\r\n"); - } - else - { - printf("I am Slave!\r\n"); - Radio.Rx( RX_TIMEOUT_VALUE ); - } - + } + + +void Lora470_Init(void) +{ + RadioEvents.TxDone = OnTxDone; + RadioEvents.RxDone = OnRxDone; + RadioEvents.TxTimeout = OnTxTimeout; + RadioEvents.RxTimeout = OnRxTimeout; + RadioEvents.RxError = OnRxError; + + Radio.Init( &RadioEvents ); + Radio.SetChannel( 470000000 ); + Radio.SetTxConfig( MODEM_LORA, 22, 0, LORA_BANDWIDTH, + 7, LORA_CODINGRATE, + 10, 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; + +} +#define SYNC_CHANNEL_FRQ 48000000 +uint8_t GetFlagLoraWaitSync(void) +{ + return flag_lora_wait_sync; +} +void SwitchLoraToSyncRec() +{ + RadioEvents.RxDone = OnRxDone; + RadioEvents.RxTimeout = OnRxTimeout; + RadioEvents.RxError = OnRxError; + Radio.Init( &RadioEvents ); + Radio.SetChannel( SYNC_CHANNEL_FRQ ); + flag_lora_wait_sync = 1; +} + -- Gitblit v1.9.3