From 42c0d595c6ab74396416028dffa398a31da1b335 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期三, 24 一月 2024 10:29:10 +0800
Subject: [PATCH] 1

---
 Src/radio/Lora.c |  135 +++++++++++++++++++++++++++++++--------------
 1 files changed, 93 insertions(+), 42 deletions(-)

diff --git a/Src/radio/Lora.c b/Src/radio/Lora.c
index a3c10f7..ca0bc06 100644
--- a/Src/radio/Lora.c
+++ b/Src/radio/Lora.c
@@ -10,11 +10,9 @@
 #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
-
 #if defined( REGION_AS923 )
 
 #define RF_FREQUENCY                                923000000 // Hz
@@ -72,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 )
 
@@ -90,7 +138,7 @@
 #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                      true
+#define LORA_IQ_INVERSION_ON_R                      false
 
 
 #elif defined( USE_MODEM_FSK )
@@ -118,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";
@@ -148,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;
@@ -195,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)
@@ -283,18 +301,51 @@
 //          TX_Buffer[5]=crc_value;
 
 }
-#define SYNC_CHANNEL_FRQ 48000000
 uint8_t GetFlagLoraWaitSync(void)
 {
     return flag_lora_wait_sync;
 }
-void SwitchLoraToSyncRec()
+void SwitchLoraToSyncRec(uint32_t freq,uint8_t sf)
 {
     RadioEvents.RxDone = OnRxDone;
     RadioEvents.RxTimeout = OnRxTimeout;
     RadioEvents.RxError = OnRxError;
     Radio.Init( &RadioEvents );
-    Radio.SetChannel( SYNC_CHANNEL_FRQ );	
+    Radio.SetChannel( freq );	
     flag_lora_wait_sync = 1;  
+    
+    Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_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, 1 );
+    
 }
 
+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;
+   }
+}
\ No newline at end of file

--
Gitblit v1.9.3