From aea9fefdfa35ce25c436d924ff8bc54fcd1baca7 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期三, 21 二月 2024 16:02:25 +0800
Subject: [PATCH] 网关读写配置成功

---
 Src/application/dw_mbx_anc.c |  106 ++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 72 insertions(+), 34 deletions(-)

diff --git a/Src/application/dw_mbx_anc.c b/Src/application/dw_mbx_anc.c
index a12d1ab..4db58b8 100644
--- a/Src/application/dw_mbx_anc.c
+++ b/Src/application/dw_mbx_anc.c
@@ -1,19 +1,22 @@
 #include "dw_mbx_anc.h"
 ///////////////////////////////////免布线时间同步代码
 
-
+#define CONFIG_REMAIN_TIME      120
 
 sync_state_enum sync_state = Sync_Lost;
 
-static uint8_t sync_interval_s,range_state = 0;
+static uint8_t sync_interval_s,range_state = 0,config_state_count = CONFIG_REMAIN_TIME;
 static uint16_t sync_listen_ms;
-
+void MbxInit(void)
+{
+   // config_state_count = CONFIG_REMAIN_TIME;
+}
 void SyncStateSwitch(void) //同步切换逻辑,开机LOST状态,收到信号后进入同步状态,在同步状态中,根据收到的网关信息判断测距还是休眠 测距 配置状态
 {
     switch(sync_state)
     {
         case Sync_Lost:
-            sync_interval_s = 10; //100
+            sync_interval_s = 100; //100
             sync_listen_ms =1500;
             range_state = 1;
             break;
@@ -21,16 +24,20 @@
             sync_interval_s = 10; //10
             sync_listen_ms =10;
             range_state = 1;
-            break;
-        case Sync_Config:
-            sync_interval_s = 1;
-            sync_listen_ms =10;
-            range_state = 0;
+            if(config_state_count>0)
+            {   config_state_count--;
+                sync_interval_s = 1;
+            }
             break;
         case Sync_Sleep:
             sync_interval_s = 10;//10
             sync_listen_ms =10;
             range_state = 0;
+            if(config_state_count>0)
+            {   config_state_count--;
+                sync_interval_s = 1;
+            }
+
             break;   
     }
 }
@@ -68,7 +75,7 @@
 
 }
 #define HEATBEAT_UPDATE_TIME_S 3600  //心跳包一个小时上传一次
-static uint16_t current_count,target_count,heartbeat_count;
+static uint16_t current_count,target_count,heartbeat_count,wg_report_id;
 static uint8_t heatbeat_buffer[100];
 void HeartbeatPoll(void)
     {//心跳包上传 ID 版本号 小组 UWB功率 LORA功率 UWB发送时间 
@@ -87,25 +94,48 @@
         delay_us(1700);
     }
 }
+static uint8_t lora_sendbuffer[200];
+uint8_t flag_writepara_needreset;
+static uint8_t data_length;
+void LoraSendComMap(uint8_t cmd)
+{
+	uint16_t checksum = 0;
+    data_length = 0x28;
+	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] = cmd;
+	lora_sendbuffer[RP_INDEX_IDX] = 2;
+	lora_sendbuffer[RP_LEN_IDX] = data_length;
+	memcpy(&lora_sendbuffer[7], &g_com_map[1], 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);
+    Delay_Ms(60);
+}
+void LoraRspWriteCommap(uint8_t index)
+{
+	uint16_t checksum = 0;
+    data_length = 2;
+	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);
+    Delay_Ms(60);
+}
+static uint8_t rec_index,rec_value;
 void LoraSyncRecPoll(void) 
 { 
     if(++sync_interval_count>=sync_interval_s)
     {
-//        if(sync_state!=Sync_Lost)
-//        {
-//            current_count=HAL_LPTIM_ReadCounter(&hlptim1); //如果需要触发同步就会等待触发时间,提前2ms打开接收
-//            target_count = GetWGRecSyncCount()-RX_BEFORE_SYNCTIME_US/LPTIMER_LSB; //提前2ms进入接收状态
-//            if(target_count<0)
-//              target_count+=32768;
-//            while(current_count<target_count||current_count>target_count+16384)
-//            {
-//                current_count=HAL_LPTIM_ReadCounter(&hlptim1);
-//                if(current_count<target_count-300)
-//                {
-//                    break;
-//                }
-//            }
-//        }
         sync_interval_count = 0;
         flag_sync_success = 0;
         
@@ -137,9 +167,11 @@
            sync_lost_count = 0;
            lora_recbuffer_len = GetLoraBufferAndLen(lora_recbuffer,&rec_sync_count);//获取LORA收到的数据和长度
            if(lora_recbuffer[MSG_TYPE_IDX]==LORA_MSGTYPE_SYNC)
-           { uint16_t wg_sendtime_100us;
-               memcpy(&g_com_map[SYNCWG_ID_IDX],&lora_recbuffer[WG_ID_IDX],2);
-               memcpy(&g_com_map2[SYNCWG_ID_IDX],&lora_recbuffer[WG_ID_IDX],2);
+           { uint16_t wg_sendtime_100us,pwanc_value;
+               uint8_t pwanc_index;
+               memcpy(&g_com_map[SYNCWG_ID_IDX],&lora_recbuffer[SOURCE_ID_IDX],2);
+               memcpy(&g_com_map2[SYNCWG_ID_IDX],&lora_recbuffer[SOURCE_ID_IDX],2);
+               memcpy(&wg_report_id,&lora_recbuffer[SOURCE_ID_IDX],2);
                memcpy(&wg_sendtime_100us,&lora_recbuffer[SYSTIME_IDX],2);
                synclock_zero_count = rec_sync_count-(wg_sendtime_100us+158)*3.27;//减去17ms 因为lora发送会延迟17ms收到
                if(synclock_zero_count<0)
@@ -152,17 +184,23 @@
                     sync_state = Sync_Sleep;
                 }
                 SyncStateSwitch();
+                if(!memcmp(&dev_id,&lora_recbuffer[DEST_ID_IDX],2))
                 switch(lora_recbuffer[SUBMSGTYPE_IDX]) //子状态函数
                 {
                     case SUBMSG_READ_ANCPARA:
-                        
+                        LoraSendComMap(SUBMSG_READ_ANCPARA);
+                        config_state_count = CONFIG_REMAIN_TIME;
                         break;
                     case SUBMSG_WRITE_ANCPARA:
-                        
+                        rec_index = lora_recbuffer[WRITEPARA_INDEX_IDX];
+                        memcpy(&rec_value,&lora_recbuffer[WRITEPARA_VALUE_IDX],2);
+                        g_com_map[rec_index/2] = rec_value;
+                        LoraRspWriteCommap(rec_index);
+                        save_com_map_to_flash();
+                        flag_writepara_needreset = 1;
                         break;
-                    case SUBMSG_UPDATE_ANC:
-                        if(!memcmp(&dev_id,&lora_recbuffer[ANCTAG_DEVICEID_IDX],2))
-                        {LoraUp_Poll();}
+                    case SUBMSG_UPDATE_ANC:                       
+                        LoraUp_Poll();
                         break;
                 }
            }
@@ -352,7 +390,7 @@
         tag_num_tosend = 25;
     }
     count1++;
-    dwt_setrxaftertxdelay(400);//设置发送完成后开启接收延迟时间
+    dwt_setrxaftertxdelay(300);//设置发送完成后开启接收延迟时间
     dwt_setrxtimeout(0);//接收超时时间
     memcpy(&uwb_sendbuffer[TAG_ID_IDX],&dev_id,2);   
     uwb_sendbuffer[GROUP_ID_IDX] = group_id;

--
Gitblit v1.9.3