From da02cf36b7265693bef7d982c6d46b372ed53693 Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期三, 21 五月 2025 18:16:14 +0800
Subject: [PATCH] 将网关读取标签配置和修改标签配置调通,但下发修改配置只能改组id其他能改但不能保存,掉电后会初始化问题未解决

---
 keil/include/src/Radio/lora_1268.c |  742 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 742 insertions(+), 0 deletions(-)

diff --git a/keil/include/src/Radio/lora_1268.c b/keil/include/src/Radio/lora_1268.c
new file mode 100644
index 0000000..0ab8651
--- /dev/null
+++ b/keil/include/src/Radio/lora_1268.c
@@ -0,0 +1,742 @@
+#include <math.h>
+#include <string.h>
+#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 <stdlib.h>
+#include "mk_spi.h"
+#include "global_param.h"
+#include "dw_app_anchor.h"
+#include "HIDO_TypeDef.h"
+#include "PCA9555.h"
+#include "mk_misc.h"
+/********************************************结构体**************************************************************/
+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;
+wg_state_enum wg_state = WG_Lost;
+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];//将距离校准改为了TX发射功率设置
+    checksum = Checksum_u16(lora_sendbuffer,14);
+    memcpy(&lora_sendbuffer[14],&checksum,2);	
+    Radio.Send(lora_sendbuffer,16);
+		
+/*****************************心跳包上传内容*************************************/	
+		
+}
+#define HEATBEAT_UPDATE_TIME   20
+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_lenth=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;
+#define GET_USERKEY gpio_pin_get_val(SOS_PIN)
+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(478,REPORT_CHANNEL_SF,22);
+
+////    if(heatbeat_count++>HEATBEAT_UPDATE_TIME && WG_Connected == wg_state) //如果心跳包到达上传时间,并且网关处于链接状态,就上传心跳包
+////    {
+////        heatbeat_count = 0;
+////        LoraHeartBeartPoll();
+////        return;
+////    }
+////    for(uint16_t i=0; i<report_ancnum-1; i++)
+////    {
+////        for(uint16_t j=0; j<report_ancnum-1-i; j++)
+////        {
+////            if(report_ancdist[j]>report_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(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);
+//////		}
+
+
+#ifdef _USE_BAR
+    GetPressAndHeight();
+    intheight = Height*100;
+#endif
+#ifdef _SMT_TEST
+    printf("气压值:%d",intheight);
+#endif
+
+//    TagListUpdate();
+
+    LoraReportFreqPoll();
+    flag_getwgresp = 0;
+    //  wg_report_freq = REPORT_MANGE_CHANNEL_FRQ;
+    SwitchLoraSettings(wg_report_freq,REPORT_CHANNEL_SF,g_com_map[LORA_POWER]);
+    if(heatbeat_count++>HEATBEAT_UPDATE_TIME && WG_Connected == wg_state) //如果心跳包到达上传时间,并且网关处于链接状态,就上传心跳包
+    {
+        heatbeat_count = 0;
+        LoraHeartBeartPoll();
+        return;
+    }
+    for(uint16_t i=0; i<report_ancnum-1; i++)
+    {
+        for(uint16_t j=0; j<report_ancnum-1-i; j++)
+        {
+            if(report_ancdist[j]>report_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
+    lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGMSGTOWG;
+    lora_sendbuffer[MSG_LENGTH] = 4*report_ancnum+ANCID_IDX;
+#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;
+#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[ANCNUM_IDX] = report_ancnum;
+    memcpy(&lora_sendbuffer[ANCID_IDX],report_ancid,report_ancnum*2);
+    memcpy(&lora_sendbuffer[ANCID_IDX+report_ancnum*2],report_ancdist,report_ancnum*2);
+    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+2);
+
+
+}
+
+//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   uint8_t 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;
+
+uint8_t sum_count;
+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)
+        {
+					sum_count++;
+            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 );
+    //LORA_LED_OFF;
+    }
+}
+#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(!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);
+                                   
+}

--
Gitblit v1.9.3