From c5193cf1c2e36894cbb2d7e9cd171b64f81ae8ea Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期一, 25 十月 2021 11:53:26 +0800
Subject: [PATCH] 1

---
 Src/application/dw_app.c |   56 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c
index 9e42f29..ddd974b 100644
--- a/Src/application/dw_app.c
+++ b/Src/application/dw_app.c
@@ -562,7 +562,7 @@
 									{flag_getresponse=1;}
 									lastsync_timer=sync_timer;
 									//offsettimeus=ancsync_time-current_count*LPTIMER_LSB+offset;
-									SetNextPollTime(tagslotpos);
+//									SetNextPollTime(tagslotpos);
 		}
 			
 			memcpy(&temp_dist, &rx_buffer[DIST_IDX], 4);
@@ -675,7 +675,46 @@
 //			tyncpoll_time = (tagslotpos--%max_slotpos)*slottime;
 	}
 }
-
+extern u32 synctimer;
+u8 pd_i;
+u32 temptime,delaytime;
+u16 delaycount;
+int16_t poll_offsettime=-6900;
+extern u16 slotpos_intoatl, slotpos;
+void NextPollDelay(u32 anchor_time)
+{
+		tagslotpos = 0 ;
+    for(pd_i=0;pd_i<tag_frequency;pd_i++)
+    {
+        slotpos_intoatl = pd_i*bigslot_num+tagslotpos;
+        temptime = (slotpos_intoatl*SLOTTIME_MS+100)*100;
+        if(anchor_time<temptime-5000)
+        { 
+            delaytime = temptime-anchor_time+poll_offsettime;     
+            return ;
+        }
+    }
+    temptime = (tagslotpos*SLOTTIME_MS+100+10000)*100;
+    delaytime = temptime-anchor_time+poll_offsettime;
+   return ;
+}
+u16 lpcount,poll_startcount;
+u16 waketopolltimeus = 4000;
+#define BASENUM_COMTIME 244
+u32 last_anchor_time;
+void SetLPTimer(u32 anchor_time)
+{
+    NextPollDelay(anchor_time);
+    current_count=HAL_LPTIM_ReadCounter(&hlptim1);
+    lpcount = current_count+delaytime/LPTIMER_LSB+(10-nearbase_num)*8;
+		poll_startcount = lpcount+(waketopolltimeus)/LPTIMER_LSB;
+		if(poll_startcount>=32768)
+		{
+		poll_startcount -=32768;
+		}
+    __HAL_LPTIM_COMPARE_SET(&hlptim1, lpcount);
+		last_anchor_time = anchor_time;
+}
 void NearPoll(void)
 {
 	
@@ -817,13 +856,7 @@
 											{sync_timer=0;}
 									}
 									ancsync_time=((sync_timer)*1000+tmp_time);	
-									last_slotnum=current_slotnum;
-									current_slotnum=((float)(sync_timer*10 - tagslotpos*SLOTTIME_MS)/(SLOTTIME_MS*bigslot_num))+1;
-									if(current_slotnum==last_slotnum-1)
-									{flag_getresponse=1;}
-									lastsync_timer=sync_timer;
-									offsettimeus=ancsync_time-current_count*LPTIMER_LSB+offset;
-									SetNextPollTime(tagslotpos);
+									SetLPTimer(ancsync_time);
 									if(result==0)
 											{while (!(dwt_read32bitreg(SYS_STATUS_ID) & SYS_STATUS_TXFRS))//不断查询芯片状态直到发送完成
 											{ };}								
@@ -886,7 +919,8 @@
 			{
 				tag_state = STARTPOLL;
 			}			
-
+	if(mainbase_lost_count!=0)
+			{SetLPTimer(last_anchor_time);}
 			if(para_update)
 			{
 			uint8_t pack_length = 0,pack_index = 0,pack_msgtype = 0;
@@ -936,7 +970,7 @@
 			if(tagslotpos--<2)
 				tagslotpos=TOTAL_SLOTNUM;
 		}
-		SetNextPollTime(tagslotpos);
+//		SetNextPollTime(tagslotpos);
 		dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);			//设置发送后开启接收,并设定延迟时间
     dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);		
 

--
Gitblit v1.9.3