From 72339db484cf16b7261c351e0b600742a453c2f7 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期四, 17 十二月 2020 10:15:59 +0800
Subject: [PATCH] V2.16 就近模式 临近基站切换

---
 Src/application/dw_app.c |  129 +++++++++++++++++++++---------------------
 1 files changed, 65 insertions(+), 64 deletions(-)

diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c
index 459877e..5a3d9c4 100644
--- a/Src/application/dw_app.c
+++ b/Src/application/dw_app.c
@@ -69,7 +69,7 @@
 #define FINAL_MSG_FINAL_TX_TS_IDX 18
 #define FINAL_MSG_TS_LEN 4
 
-#define STARTPOLL  DISCPOLL
+#define STARTPOLL  REGPOLL
 enum enumtagstate
 {
 	REGPOLL,
@@ -552,7 +552,7 @@
 			{
 				memcpy(&minid, &rx_buffer[ANCHOR_ID_IDX], 4);
 				tag_state=GETNEARMSG;
-				trygetnearmsg_times=5;
+				trygetnearmsg_times=10*tag_frequency;
 				mindist=temp_dist;
 			}
 			if(result==0)
@@ -777,11 +777,11 @@
 									memcpy(&nearbase_switchdistlist[rec_nearbasepos],&rx_buffer[NR_NEARSWITCH_DISTANCE],2);
 									nearbase_distlist[rec_nearbasepos]=temp_dist;								
 									final_msg_set_ts(&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos)*4], resp_rx_ts);
-									if(temp_dist<nearbase_switchdistlist[rec_nearbasepos]&&nearbase_switchdistlist[rec_nearbasepos]!=0&&temp_dist!=0)
-									{
-										mainbase_id = rec_nearbaseid;
-										tag_state = GETNEARMSG;
-									}
+//									if(temp_dist<nearbase_switchdistlist[rec_nearbasepos]&&nearbase_switchdistlist[rec_nearbasepos]!=0&&temp_dist>0)
+//									{
+//										mainbase_id = rec_nearbaseid;
+//										tag_state = GETNEARMSG;
+//									}
 								
 						}								
 							}
@@ -799,62 +799,62 @@
 			dwt_forcetrxoff();
 dwt_write32bitreg(SYS_STATUS_ID,SYS_STATUS_RXFCG| SYS_STATUS_ALL_RX_ERR);
 		j=0;
-//			if(exsistbase_list[0]==0)
-//			{
-//				SetNextPollTime(tagslotpos);
-//			}
-		//	tyncpoll_time=0;
-//			next_nearbase_num=0;
-//			for(i=0;i<nearbase_num;i++)
-//			{
-//				if(exsistbase_list[i]>0)
-//				{		
-//					next_nearbase_num++;
-//					true_exsistbase_list[j]=exsistbase_list[i];
-//					true_nearbase_idlist[j]=nearbaseid_list[i];			
-//					true_nearbase_distlist[j++]=nearbase_distlist[i];
-//					exsistbase_list[i]--;
-//				}
-//			}
-
-//			if(recbase_num<3)
-//			{next_nearbase_num=next_nearbase_num;}
-//					last_nearbase_num = next_nearbase_num;
-//			for(i=0;i<last_nearbase_num-1;i++)
-//			{
-//				for(j=0;j<last_nearbase_num-1;j++)
-//				{
-//					if(true_nearbase_distlist[j]>true_nearbase_distlist[j+1])
-//					{
-//						u32 temp_dist,temp_id,temp_exsis;
-//						temp_dist=true_nearbase_distlist[j];
-//						temp_id = true_nearbase_idlist[j];
-//						temp_exsis=true_exsistbase_list[i];
-//						true_nearbase_distlist[j]=true_nearbase_distlist[j+1];
-//						true_nearbase_idlist[j]=true_nearbase_idlist[j+1];
-//						true_exsistbase_list[j]=true_exsistbase_list[j+1];
-//						
-//						true_nearbase_distlist[j+1]=temp_dist;
-//						true_nearbase_idlist[j+1]=temp_id;
-//						true_exsistbase_list[j+1]=temp_exsis;
-//					}			
-//				}
-//			}
-
-//			if(true_nearbase_distlist[0]<mainbase_dist-THRESHOLD_CHANGE_MAINBASE_DIST&&true_exsistbase_list[0])
-//			{
-//				changemainbase_count++;		
-//			}else{
-//				changemainbase_count = 0;
-//			}
-//			if(changemainbase_count>3)
-//			{
-//				mainbase_id = true_nearbase_idlist[0];
-//				tag_state = GETNEARMSG;
-//			}
-			if(mainbase_lost_count>10)
+			if(exsistbase_list[0]==0)
 			{
-				tag_state = DISCPOLL;
+				SetNextPollTime(tagslotpos);
+			}
+		//	tyncpoll_time=0;
+			next_nearbase_num=0;
+			for(i=0;i<nearbase_num;i++)
+			{
+				if(exsistbase_list[i]>0)
+				{		
+					next_nearbase_num++;
+					true_exsistbase_list[j]=exsistbase_list[i];
+					true_nearbase_idlist[j]=nearbaseid_list[i];			
+					true_nearbase_distlist[j++]=nearbase_distlist[i];
+					exsistbase_list[i]--;
+				}
+			}
+
+			if(recbase_num<3)
+			{next_nearbase_num=next_nearbase_num;}
+					last_nearbase_num = next_nearbase_num;
+			for(i=0;i<last_nearbase_num-1;i++)
+			{
+				for(j=0;j<last_nearbase_num-1;j++)
+				{
+					if(true_nearbase_distlist[j]>true_nearbase_distlist[j+1])
+					{
+						u32 temp_dist,temp_id,temp_exsis;
+						temp_dist=true_nearbase_distlist[j];
+						temp_id = true_nearbase_idlist[j];
+						temp_exsis=true_exsistbase_list[i];
+						true_nearbase_distlist[j]=true_nearbase_distlist[j+1];
+						true_nearbase_idlist[j]=true_nearbase_idlist[j+1];
+						true_exsistbase_list[j]=true_exsistbase_list[j+1];
+						
+						true_nearbase_distlist[j+1]=temp_dist;
+						true_nearbase_idlist[j+1]=temp_id;
+						true_exsistbase_list[j+1]=temp_exsis;
+					}			
+				}
+			}
+
+			if(true_nearbase_distlist[0]<mainbase_dist-THRESHOLD_CHANGE_MAINBASE_DIST&&true_exsistbase_list[0])
+			{
+				changemainbase_count++;		
+			}else{
+				changemainbase_count = 0;
+			}
+			if(changemainbase_count>2*tag_frequency)
+			{
+				mainbase_id = true_nearbase_idlist[0];
+				tag_state = GETNEARMSG;
+			}
+			if(mainbase_lost_count>10*tag_frequency)
+			{
+				tag_state = STARTPOLL;
 			}
 //				for (i=0;i<nearbase_num;i++)
 //	{
@@ -976,6 +976,7 @@
 									mainbase_id=rec_nearbaseid;
 									nearbase_num=rx_buffer[NEARBASENUM_INDEX];
 									memcpy(nearbaseid_list,&rx_buffer[NEARBASEID_INDEX],nearbase_num*2);
+									if(tagslotpos!=255)
 									tag_state = NEARPOLL;
 								}
 							}
@@ -988,7 +989,7 @@
 	id =  dwt_readdevid() ;
 	    while (DWT_DEVICE_ID != id) 
     {
-			Dw1000_Init();
+		//	Dw1000_Init();
 			id =  dwt_readdevid() ;
     }
 	switch(tag_state)
@@ -1010,7 +1011,7 @@
 		LED_LG_OFF;
 		if(trygetnearmsg_times==0)
 		{
-			tag_state = DISCPOLL;
+			tag_state = STARTPOLL;
 		}
 			break;
 		case NEARPOLL:

--
Gitblit v1.9.3