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