#include #include #include "sx126x.h" #include "sx126x-board.h" #include "lora_1268.h" //#include "lora_3029.h"" #include "user.h" #include "sx126x-board.h" #include "string.h" #include "stdio.h" #include #include "mk_spi.h" #include "global_param.h" #include "dw_app_anchor.h" #include "HIDO_TypeDef.h" #include "PCA9555.h" #include "mk_misc.h" //#include "lis3dh_driver.c" /********************************************½á¹¹Ìå**************************************************************/ typedef enum { LOWPOWER, RX, RX_TIMEOUT, RX_ERROR, TX, TX_TIMEOUT, }States_t; /********************************************½á¹¹Ìå**************************************************************/ /********************************************±äÁ¿**************************************************************/ extern wg_state_enum wg_state; /********************************************±äÁ¿**************************************************************/ #define USE_MODEM_LORA #if defined( USE_MODEM_LORA ) #define LORA_BANDWIDTH 2 // [0: 125 kHz, // 1: 250 kHz, // 2: 500 kHz, // 3: Reserved] #define LORA_SPREADING_FACTOR 5 // [SF7..SF12] #define LORA_CODINGRATE 1 // [1: 4/5, // 2: 4/6, // 3: 4/7, // 4: 4/8] #define LORA_PREAMBLE_LENGTH_T 8 // Same for Tx #define LORA_PREAMBLE_LENGTH_R 8 // Same for Rx //#define LORA_PREAMBLE_LENGTH 990 // Same for Tx and Rx #define LORA_SYMBOL_TIMEOUT 0 // Symbols #define LORA_FIX_LENGTH_PAYLOAD_ON false #define LORA_IQ_INVERSION_ON_T false #define LORA_IQ_INVERSION_ON_R false #elif defined( USE_MODEM_FSK ) #define FSK_FDEV 5e3 // Hz #define FSK_DATARATE 2.4e3 // bps #define FSK_BANDWIDTH 20e3 // Hz >> DSB in sx126x #define FSK_AFC_BANDWIDTH 100e3 // Hz #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx #define FSK_FIX_LENGTH_PAYLOAD_ON false #else #error "Please define a modem in the compiler options." #endif /***lora½ÓÊÕ£¬·¢ËͱäÁ¿¶¨Òå******/ extern uint32_t current_count; extern uint32_t dev_id; uint8_t yuyin_no_sleep_flag,no_rx_flag; uint8_t lora_up_rec_flag; static uint16_t source_id; /***lora½ÓÊÕ£¬·¢ËͱäÁ¿¶¨Òå******/ uint32_t wg_lost_count = 10; //static uint8_t tx_buf[10] = {0x55, 0x44, 0x33, 0x22, 0x11}; //static uint8_t rx_buf[10] = {0x00}; //extern uint32_t uwbled,gpsled,loraled,powerled; extern uint8_t bat_percent,taglist_num; //uint8_t report_ancnum; //uint16_t report_ancdist[ANC_MAX_NUM],report_ancid[ANC_MAX_NUM]; extern void spi_transfer_callback(void *dev, uint32_t err_code); extern uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS]; extern uint8_t report_ancnum; extern uint16_t report_ancdist[ANC_MAX_NUM],report_ancid[ANC_MAX_NUM]; //extern wg_state_enum wg_state; extern uint32_t wg_lost_count; uint8_t lora_sendbuffer[200]; uint8_t seq_num; extern uint16_t lora_up_uwb_flag; //extern uint8_t wg_lost_count; uint16_t wg_report_freq,wg_report_id; uint8_t wg_report_sf; #define WG_LOST_SWITCH_THRES 3 #define WG_LOST_NOUWB_COUNT 60 #define DEFAULT_WG_ID 0xFFFF #define DEFAULT_LR_WG_ID 0xFFFE uint8_t lora_jianting_flag = 1; void LoraReportFreqPoll(void) { // wg_state = WG_Lost; if(wg_lost_count++>WG_LOST_NOUWB_COUNT) { lora_jianting_flag = 0; } else { lora_jianting_flag = 1; } if(wg_state==WG_Lost) { static uint8_t channel_switch_count = 0; // channel_switch_count = 10; if(channel_switch_count++>1) { // channel_switch_count = 0; // wg_report_id = DEFAULT_LR_WG_ID; // wg_report_freq = LR_DATA_CHANNEL_FRQ; //Èç¹û¶ªÊ§Á´½Ó¾Í½øÈëWG¹ÜÀíÐŵÀ¡£ // wg_report_sf = LR_DATA_CHANNEL_SF; } else { wg_report_id = DEFAULT_WG_ID; wg_report_freq = REPORT_MANGE_CHANNEL_FRQ; //Èç¹û¶ªÊ§Á´½Ó¾Í½øÈëWG¹ÜÀíÐŵÀ¡£ wg_report_sf = REPORT_CHANNEL_SF; // wg_report_freq = TEST_MANAGE_CHANNEL_FRQ; // wg_report_sf = TEST_MANAGE_CHANNEL_SF; } } else { if(wg_lost_count>WG_LOST_SWITCH_THRES) { wg_state = WG_Lost; } } } static uint16_t checksum; //uint16_t wg_report_freq,wg_report_id; uint8_t lora_sendbuffer[200]; void LoraHeartBeartPoll(void) { // lora_up_uwb_flag=2; // rf_set_default_para(); /*****************************ÐÄÌø°üÉÏ´«ÄÚÈÝ************************************/ lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGHEARTBEAT; lora_sendbuffer[MSG_LENGTH] = 14; memcpy(&lora_sendbuffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2); memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2); memcpy(&lora_sendbuffer[HB_VERSION_IDX],&g_com_map[VERSION],2); lora_sendbuffer[HB_UWBPOWER_IDX] = g_com_map[POWER]; lora_sendbuffer[HB_LORAPOWER_IDX] = g_com_map[LORA_POWER]; checksum = Checksum_u16(lora_sendbuffer,14); memcpy(&lora_sendbuffer[14],&checksum,2); // Radio.Send(lora_sendbuffer,16); /*****************************ÐÄÌø°üÉÏ´«ÄÚÈÝ*************************************/ } #define HEATBEAT_UPDATE_TIME 100 uint16_t heatbeat_count = HEATBEAT_UPDATE_TIME-1 ; uint16_t flag_getwgresp = 0; int16_t intheight; //ÆøÑ¹ extern uint32_t dangqian_frqe; uint16_t recnum[3]; extern uint32_t freq_list[4]; extern uint8_t DMA_RXBuf_BT[200]; extern uint8_t report_ancnum; extern uint8_t report_ancnum_bt; uint32_t BT_SEND_flag=0; uint8_t BT_NUM=0; extern uint16_t report_ancdist[ANC_MAX_NUM],report_ancid[ANC_MAX_NUM]; extern uint8_t bat_percent; extern uint16_t REV_RX_NUM; extern uint16_t REV_POLL_NUM; extern uint16_t REPLY_POLL_NUM; uint16_t num[3]={0,0,0}; extern uint8_t stationary_flag; extern uint8_t SOS_KEY_STATE; uint32_t LORA_POLL_COUNT=0; extern uint32_t step_count; uint8_t step_count_rep; //extern u16_m f_step; extern uint8_t uwbled,gpsled,loraled,powerled; void LoraReportPoll(void) { // delay_ms(100); #ifdef _USE_BAR GetPressAndHeight(); intheight = Height*100; #endif #ifdef _SMT_TEST printf("ÆøÑ¹Öµ£º%d",intheight); #endif // TagListUpdate(); LoraReportFreqPoll(); flag_getwgresp = 0; SwitchLoraSettings(wg_report_freq,REPORT_CHANNEL_SF,22); mir3da_get_step(); if(heatbeat_count++>HEATBEAT_UPDATE_TIME && WG_Connected == wg_state) //Èç¹ûÐÄÌø°üµ½´ïÉÏ´«Ê±¼ä£¬²¢ÇÒÍø¹Ø´¦ÓÚÁ´½Ó״̬£¬¾ÍÉÏ´«ÐÄÌø°ü { heatbeat_count = 0; LoraHeartBeartPoll(); return; } for(uint16_t i=0; ireport_ancdist[j+1]) { uint16_t id,dist; uint8_t bat; id = report_ancid[j]; dist = report_ancdist[j]; report_ancid[j] = report_ancid[j+1]; report_ancdist[j] = report_ancdist[j+1]; report_ancid[j+1] = id; report_ancdist[j+1] = dist; } } } if(report_ancnum>LORA_REPORT_MAXANC_NUM) //¿¼ÂÇlora´«Êäʱ¼ä£¬×î¶à·¢ËÍ10¸ö»ùÕ¾Êý¾Ý¡£ { report_ancnum = LORA_REPORT_MAXANC_NUM; } #ifdef USE_GPS lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGMSGTOWG_GPS; lora_sendbuffer[MSG_LENGTH] = 4*report_ancnum+30; #else BT_NUM=DMA_RXBuf_BT[0]; if(SOS_KEY_STATE) { BT_NUM=0; } // lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGMSGTOWG; lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGMSGTOWG_BT; lora_sendbuffer[MSG_LENGTH] = 4*report_ancnum+4*BT_NUM+ANCID_IDX+3; #endif memcpy(&lora_sendbuffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2); 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; //GET_USERKEYÕâ¸öÊÇÄǸölora¡ª¡ªbusyÄǸöÒý½Å // lora_sendbuffer[STATE_IDX]=0x01; // lora_sendbuffer[GATEWAY_CHANL]=0x02; // lora_sendbuffer[CHANL_NUM]=0x03; #ifdef USE_GPS memcpy(&lora_sendbuffer[GPS_JINGDU_IDX],&gps_jingdu,8); memcpy(&lora_sendbuffer[GPS_WEIDU_IDX],&gps_jingdu,8); memcpy(&lora_sendbuffer[GPS_HEIGHT_IDX],&gps_height,8); lora_sendbuffer[GPS_STATE_IDX] = gps_state; lora_sendbuffer[GPS_SATEL_NUM_IDX] = gps_satel_num; lora_sendbuffer[GPS_SPOWER_IDX] = gps_signalpower; lora_sendbuffer[GPS_CHAFENLINGQI] = gps_chafenlingqi; #endif memcpy(&lora_sendbuffer[BAR_HEIGHT_IDX],&intheight,2); lora_sendbuffer[BT_ANCID_IDX] = report_ancnum; memcpy(&lora_sendbuffer[BT_ANCID_IDX+1],report_ancid,report_ancnum*2); memcpy(&lora_sendbuffer[BT_ANCID_IDX+report_ancnum*2+1],report_ancdist,report_ancnum*2); uint8_t LORA_RETRANSNUSSION_BT=0; // // num[0]=REV_RX_NUM; // num[1]=REV_POLL_NUM; // num[2]=REPLY_POLL_NUM; LORA_RETRANSNUSSION_BT=BT_ANCID_IDX+report_ancnum*4+1; lora_sendbuffer[LORA_RETRANSNUSSION_BT] = 0x2D; //À¶ÑÀÉÏ´«±êʶ·û memcpy(&lora_sendbuffer[LORA_RETRANSNUSSION_BT+1],&DMA_RXBuf_BT[0],BT_NUM*2+1); //»ùÕ¾ID memcpy(&lora_sendbuffer[LORA_RETRANSNUSSION_BT+BT_NUM*2+2],&DMA_RXBuf_BT[1+BT_NUM*2],BT_NUM*2);//»ùÕ¾¾àÀë lora_sendbuffer[MSG_LENGTH] = LORA_RETRANSNUSSION_BT+4*BT_NUM+2; if(step_count < 0) step_count=0; // lora_sendbuffer[STEP_COUNT] = (uint8_t)(step_count % 256); // } // if(lora_sendbuffer[LORA_RETRANSNUSSION_BT]==0x2D) // { checksum = Checksum_u16(lora_sendbuffer,4*BT_NUM+4*report_ancnum+BT_ANCID_IDX+3); memcpy(&lora_sendbuffer[LORA_RETRANSNUSSION_BT+BT_NUM*4+2],&checksum,2); BT_SEND_flag=BT_ANCID_IDX+report_ancnum*4+BT_NUM*4+5; Radio.Send(lora_sendbuffer,BT_SEND_flag); LORA_POLL_COUNT++; // LORA_3029_SINGLE_SEND(lora_sendbuffer,ANCID_IDX+report_ancnum*4+BT_NUM*4+4,0); // } // else // { // checksum = Checksum_u16(lora_sendbuffer,4*report_ancnum+ANCID_IDX); // memcpy(&lora_sendbuffer[ANCID_IDX+report_ancnum*4],&checksum,2); // Radio.Send(lora_sendbuffer,ANCID_IDX+report_ancnum*4+BT_NUM*4+2); // } // LORA_3029_SINGLE_SEND(lora_sendbuffer,ANCID_IDX+report_ancnum*4+BT_NUM*4+4,0); memset(DMA_RXBuf_BT, 0,200); memset(&lora_sendbuffer[ANCID_IDX],0,200); //LED_TB_ON; loraled=1; for(uint8_t i=0;i<3;i++) recnum[i] = 0; } //static uint16_t delaytime = 1200; static uint16_t source_id; uint8_t rec_index,rec_secdelay; //uint16_t rec_value,rec_delaytime,rx_count; //uint16_t rec_value,rec_delaytime,rx_count,datalen_offset; uint8_t shengji_flag,time=5; //extern uint32_t uwbled,gpsled,loraled,powerled; extern struct RxDoneMsg RxDoneParams; //extern uint8_t Lora_tx_ancnum; //extern u8 lora_seq_nb2; extern uint16_t lora_yingda_num; uint8_t lora_tx_flag=0; uint8_t lora_txanchor_power_flag; extern uint16_t Lora_tx_ancid[50]; extern uint16_t Lora_tx_ancdist[50]; extern uint8_t Lora_tx_anc_electricity[50]; uint8_t lora_seq_nb1; extern uint8_t lora_sendbuffer[200]; void LoraSendComMap(uint8_t cmd) { uint8_t data_length = 0x50; uint16_t checksum = 0; lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_READPARARESP; lora_sendbuffer[MSG_LENGTH] = data_length+11; memcpy(&lora_sendbuffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2); memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2); lora_sendbuffer[RP_CMD_IDX] = cmd; lora_sendbuffer[RP_INDEX_IDX] = 2; lora_sendbuffer[RP_LEN_IDX] = data_length; memcpy(&lora_sendbuffer[9], &g_com_map[1], data_length); checksum = Checksum_u16(lora_sendbuffer,11+data_length); memcpy(&lora_sendbuffer[11+data_length],&checksum,2); // LORA_3029_SINGLE_SEND(lora_sendbuffer,data_length+13,0); // Radio.Send(lora_sendbuffer,data_length+13); //++; // Delay_Ms(100); } void LoraRspWriteCommap(uint8_t index) { uint8_t data_length = 2; uint16_t checksum = 0; lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_READPARARESP; lora_sendbuffer[MSG_LENGTH] = data_length+9; memcpy(&lora_sendbuffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2); memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2); lora_sendbuffer[RP_CMD_IDX] = WGRSP_RWTAG_WRITE; lora_sendbuffer[RP_INDEX_IDX] = index; lora_sendbuffer[RP_LEN_IDX] = data_length; memcpy(&lora_sendbuffer[7], &g_com_map[index/2], data_length); checksum = Checksum_u16(lora_sendbuffer,9+data_length); memcpy(&lora_sendbuffer[9+data_length],&checksum,2); // Radio.Send(lora_sendbuffer,data_length+11); // LORA_3029_SINGLE_SEND(lora_sendbuffer,data_length+11,0); // Delay_Ms(100); } uint8_t t22[20],ti; uint8_t no_yingdaflag; uint8_t aRxBuffer[1]; extern uint8_t group_id; uint16_t lora_send_count; uint8_t mode_flag=0; uint32_t frqe,dangqian_frqe; void Lora_Tx_Poll() { // if(lora_tx_flag) // { // OnMaster(); //// // //rf_enter_continous_rx(); // } if(lora_tx_flag) { // gpio_pin_set(IO_PIN_5); if(lora_send_count++%10==0||lora_jianting_flag) { lora_tx_flag=0; #ifdef GROUPID_SWITCH if(rec_secdelay>0) { rec_secdelay--; return; } #endif LoraReportPoll(); } } } ////States_t State = LOWPOWER; //////int8_t RssiValue = 0; //////int8_t SnrValue = 0; ////uint8_t lora_chongfuyingda_flag; ////uint8_t Lora_rx_open_flag; ////extern u32 Loratx_frequency; uint8_t huifushengjibao_flag; uint8_t LoraUp_flag; //uint8_t lora_up_rec_flag; uint8_t flag_writepara_needreset = 0; //uint32_t wg_lost_count = 10; //uint32_t lora_zhuangtai; //uint16_t current_count; //extern wg_state_enum wg_state; uint8_t txdone=0; void OnTxDone( void ) { txdone++; if(flag_writepara_needreset) //ÅäÖÃдÈëÍê³ÉÉ豸ÐèÒªÖØÆô { printf("Íø¹ØÏ·¢ÅäÖÃдÈëÍê³É£¬ÖØÆô"); SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //Èí¸´Î»»Øµ½bootloader } Radio.Standby(); if(LoraUp_flag) { huifushengjibao_flag=1; Radio.Rx( 500 ); } else { Radio.Rx( 50 ); } } #define BUFFER_SIZE 255 // Define the payload size here extern uint8_t imu_enable,motor_enable; extern uint8_t lora_jianting_flag,report_ancnum; extern uint16_t motor_keeptime; extern uint32_t dev_id; //extern wg_state_enum wg_state; uint16_t rec_value,rec_delaytime,rx_count,datalen_offset; uint16_t BufferSize = BUFFER_SIZE; uint16_t CRC16=0; uint16_t DEST_ID=0; uint8_t shengji_flag; int8_t RssiValue = 0; int8_t SnrValue = 0; uint8_t TX_Buffer[BUFFER_SIZE]; uint8_t RX_Buffer[BUFFER_SIZE]; static RadioEvents_t RadioEvents; static uint16_t delaytime = 771; static uint16_t source_id; uint8_t rec_index,rec_secdelay; uint16_t rec_value,rx_count,datalen_offset; int32_t target_count; uint32_t sleep_time_count=0; uint32_t sleep_time_count_LAST=0; uint16_t time_count; uint8_t LoraUp_flag; uint16_t REV_WG_pack=0; uint8_t rxdone=0; void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ) { uint16_t checksum1; BufferSize = size; memcpy( RX_Buffer, payload, BufferSize ); RssiValue = rssi; SnrValue = snr; Radio.Standby(); rxdone++; no_rx_flag = 0; lora_up_rec_flag=1; if(RX_Buffer[MSG_TYPE_IDX]==LORA_MSGTYPE_WGRESPTAG) { checksum1=Checksum_u16(RX_Buffer,BufferSize-2); memcpy(&DEST_ID,&RX_Buffer[DEST_ID_IDX],2); memcpy(&CRC16,&RX_Buffer[BufferSize-2],2); if(!memcmp(&checksum1,&RX_Buffer[BufferSize-2],2)) if(!memcmp(&dev_id,&RX_Buffer[DEST_ID_IDX],2)) { memcpy(&source_id,&RX_Buffer[SOURCE_ID_IDX],2); if(wg_state==WG_Lost) { wg_state = WG_Connected; wg_report_id = source_id; } if(!memcmp(&wg_report_id,&RX_Buffer[SOURCE_ID_IDX],2)) { wg_lost_count = 0; 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; case WGRSP_RWTAG_READ: 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; 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) // {}//Îļþ¹ý´ó£¬³¬³ö·¶Î§ // else // { // memcpy(&wangguan_up_id,&RX_Buffer[SOURCE_ID_IDX],2);//Íø¹ØID Õ¼ÓÃ2¸ö×Ö½Ú // shengji_flag=1; // LoraUp_flag=1; // imu_enable=0; // } //// LoraUp_Poll(); // break; // } break; } } if(RX_Buffer[MSG_TYPE_IDX]==LORA_MSGTYPE_RANGEPOLL) { // uwb_open(); //// UwbRange(); // uwb_ceju_count++; } } } if(!no_rx_flag) { if(lora_jianting_flag&&LoraUp_flag==0) { SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0); Radio.Rx(0); } } } void OnTxTimeout( void ) { Radio.Standby(); if(lora_jianting_flag) { SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0); Radio.Rx(0); } } void OnRxTimeout( void ) { Radio.Standby(); if(lora_jianting_flag) { SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0); Radio.Rx(0); } } void OnRxError( void ) { Radio.Standby(); if(lora_jianting_flag) { SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0); Radio.Rx(0); } } uint16_t freq_test; void SwitchLoraSettings(uint32_t freq,uint8_t sf,uint8_t power) { Radio.Standby(); Radio.SetChannel( freq*1000000 ); freq_test = freq; 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 ); 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, 0 ); } uint8_t active_flag; void Lora_1268_Init(void) { RadioEvents.TxDone = OnTxDone; RadioEvents.RxDone = OnRxDone; RadioEvents.TxTimeout = OnTxTimeout; RadioEvents.RxTimeout = OnRxTimeout; RadioEvents.RxError = OnRxError; Radio.Init( &RadioEvents ); // SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0); //Çл»lora½ÓÊÕÆµµã if(active_flag) { Radio.Rx( 0 ); } // else{ // Radio.Sleep(); // } // Radio.SetRxDutyCycle(RxDutyCycle_RX_time,RxDutyCycle_SLEEP_time); }