From 9510cf0760cf50ddeef4b304a2322ceb9560066c Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期三, 24 一月 2024 10:31:52 +0800
Subject: [PATCH] Merge branch '免布线基站-lora' of http://47.108.70.204:60062/r/XRange_Tag into 免布线基站-lora

---
 Src/radio/Lora.c |  117 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 80 insertions(+), 37 deletions(-)

diff --git a/Src/radio/Lora.c b/Src/radio/Lora.c
index 6d7ef17..b0de57b 100644
--- a/Src/radio/Lora.c
+++ b/Src/radio/Lora.c
@@ -10,7 +10,6 @@
 #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
@@ -71,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 )
 
@@ -117,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";
@@ -147,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;
@@ -194,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)
@@ -309,3 +328,27 @@
     
 }
 
+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