From 650a51bb30a4c8c97898648f72d826fbc1a8a59a Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期六, 16 五月 2020 16:27:13 +0800
Subject: [PATCH] 未测试,修改成多次丢失才切换模式

---
 源码/核心板/Src/application/dw_app.c |   36 ++++++++++++++++++++----------------
 1 files changed, 20 insertions(+), 16 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
index 4c15ddf..3f127fc 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
@@ -202,7 +202,7 @@
 
 u16 anclist_num=0,anclist_pos; //list 总数量和当前位置
 u16 ancid_list[TAG_NUM_IN_SYS];
-u8 nearbase_num=0;
+u8 nearbase_num=0,last_nearbase_num,next_nearbase_num;
 u16 nearbaseid_list[MAX_NEARBASE_NUM],mainbase_id,true_nearbase_idlist[MAX_NEARBASE_NUM];
 int32_t mainbase_dist,nearbase_distlist[MAX_NEARBASE_NUM],true_nearbase_distlist[MAX_NEARBASE_NUM];
 uint8_t trygetnearmsg_times;
@@ -266,11 +266,12 @@
     dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);		
 	tag_succ_times = 0;
 	GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);
-	if(nearbase_num>=MAX_NEARBASE_NUM)
+	if(next_nearbase_num>=MAX_NEARBASE_NUM)
 	{
-		nearbase_num = MAX_NEARBASE_NUM-1;
+		next_nearbase_num = MAX_NEARBASE_NUM-1;
 	}
 	//nearbase_num=0;
+	last_nearbase_num=next_nearbase_num;
 	recbase_num=0;
 	tx_nearpoll_msg[BATTARY_IDX] = Get_Battary();
 	tx_nearpoll_msg[BUTTON_IDX] = !READ_KEY0;
@@ -282,9 +283,6 @@
 	dwt_writetxdata(13+2*nearbase_num, tx_nearpoll_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
 	dwt_writetxfctrl(13+2*nearbase_num, 0);//设置超宽带发送数据长度
 	dwt_starttx(DWT_START_TX_IMMEDIATE | DWT_RESPONSE_EXPECTED);//开启发送,发送完成后等待一段时间开启接收,等待时间在dwt_setrxaftertxdelay中设置
-
-	for(i=0;i<MAX_NEARBASE_NUM;i++)
-	exsistbase_list[i]=0;
 	
 	flag_finalsend=0;
 	flag_rxon=1;
@@ -334,9 +332,9 @@
 								memcpy(&rec_nearbaseid,&rx_buffer[ANCHOR_ID_IDX],2);
 								if(nearbase_num==0)
 								{
-								nearbaseid_list[0]=rec_nearbaseid;
-								nearbase_num=1;
-								memcpy(&tx_nearfinal_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
+									nearbaseid_list[0]=rec_nearbaseid;
+									nearbase_num=1;
+									memcpy(&tx_nearfinal_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
 								}
 								if(rec_nearbaseid==nearbaseid_list[0])
 								{
@@ -345,7 +343,7 @@
 									memcpy(&temp_sync_timer1,&rx_buffer[ANCTIMEMS],2);
 									memcpy(&tmp_time,&rx_buffer[ANCTIMEUS],2);
 									sync_timer=temp_sync_timer1;
-									exsistbase_list[0]=1;
+									exsistbase_list[0]=10;
 ////									memcpy(&tagslotpos,&rx_buffer[TAGSLOTPOS],2);		
 //									
 									tmp_time=tmp_time+450;
@@ -363,7 +361,7 @@
 //										tyncpoll_time=(tagslotpos-1)*slottime;
 									////////////////////////////
 									rec_nearbasepos=0;
-									exsistbase_list[rec_nearbasepos]=1;
+									exsistbase_list[rec_nearbasepos]=10;
 									memcpy(&temp_dist,&rx_buffer[DIST_IDX],4);
 									nearbase_distlist[rec_nearbasepos]=temp_dist;
 									
@@ -406,7 +404,7 @@
 										memcpy(&tx_nearfinal_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
 									}
 									
-									exsistbase_list[rec_nearbasepos]=1;
+									exsistbase_list[rec_nearbasepos]=10;
 									memcpy(&temp_dist,&rx_buffer[DIST_IDX],4);
 									nearbase_distlist[rec_nearbasepos]=temp_dist;
 									
@@ -465,19 +463,21 @@
 				}
 				tyncpoll_time=(random_value%max_slotpos)*slottime;	
 			}
-			for(i=0;i<MAX_NEARBASE_NUM;i++)
+			next_nearbase_num=0;
+			for(i=0;i<last_nearbase_num;i++)
 			{
-				if(exsistbase_list[i]==1)
+				if(exsistbase_list[i]-->0)
 				{
+					next_nearbase_num++;
 					true_nearbase_idlist[j]=nearbaseid_list[i];			
 					true_nearbase_distlist[j++]=nearbase_distlist[i];
 				}
 			
 			}
 		
-			for(i=0;i<nearbase_num-1;i++)
+			for(i=0;i<last_nearbase_num-1;i++)
 			{
-				for(j=0;j<nearbase_num-1;j++)
+				for(j=0;j<last_nearbase_num-1;j++)
 				{
 					if(true_nearbase_distlist[j]>true_nearbase_distlist[j+1])
 					{
@@ -503,6 +503,10 @@
 					report_num++;
 				}
 			}
+			for(i=0;i<MAX_NEARBASE_NUM;i++)
+			{
+				nearbase_distlist[i]=0x1ffff;
+			}
 		//	printf("%d,%d",temp_sync_timer2,temp_sync_timer1);
 			#ifdef USART_INTEGRATE_OUTPUT		
 				usart_send[2] = 4;//正常模式

--
Gitblit v1.9.3