From 5bfa1bc693623159c5059067f8db7589fabd04a1 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期一, 27 四月 2020 09:03:22 +0800
Subject: [PATCH] V1.22

---
 源码/核心板/Src/application/dw_app.c |  147 +++++++++++++++++++++++++------------------------
 1 files changed, 75 insertions(+), 72 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 2f077f3..b6ba39f 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"
@@ -22,7 +22,9 @@
 static uint8_t tx_sync_msg[14] = {0};
 static uint8_t tx_final_msg[60] = {0};
 static uint8_t tx_resp_msg[22] = {0};
-static uint8_t tx_near_msg[80] = {0};
+static uint8_t tx_nearpoll_msg[80] = {0};
+static uint8_t tx_nearresp_msg[80] = {0};
+static uint8_t tx_nearfinal_msg[80] = {0};
 
 static uint32_t frame_seq_nb = 0;	
 static uint32_t status_reg = 0;
@@ -144,8 +146,9 @@
 	memcpy(&tx_final_msg[TAG_ID_IDX], &dev_id, 2);
 	memcpy(&tx_resp_msg[ANCHOR_ID_IDX], &dev_id, 2);
 	memcpy(&tx_sync_msg[ANCHOR_ID_IDX], &dev_id, 2);
-	memcpy(&tx_near_msg[ANCHOR_ID_IDX], &dev_id, 2);
-	memcpy(&tx_near_msg[TAG_ID_IDX], &dev_id, 2);
+	memcpy(&tx_nearresp_msg[ANCHOR_ID_IDX], &dev_id, 2);
+	memcpy(&tx_nearpoll_msg[TAG_ID_IDX], &dev_id, 2);
+	memcpy(&tx_nearfinal_msg[TAG_ID_IDX], &dev_id, 2);
 }	
 uint16_t Checksum_u16(uint8_t* pdata, uint32_t len) 
 {
@@ -158,7 +161,7 @@
 }
 
 u16 tag_time_recv[TAG_NUM_IN_SYS];
-u8 usart_send[100];
+u8 usart_send[100],usart_send_anc[100];
 u8 battary,button;
 extern uint8_t g_pairstart;
 void tag_sleep_configuraion(void)
@@ -259,14 +262,14 @@
 	//nearbase_num=0;
 	recbase_num=0;
 	
-	tx_near_msg[BATTARY_IDX] = Get_Battary();
-	tx_near_msg[BUTTON_IDX] = !READ_KEY0;
-	tx_near_msg[SEQUENCE_IDX] = frame_seq_nb++;
-	tx_near_msg[NEARBASENUM_INDEX] = nearbase_num;
-	memcpy(&tx_near_msg[NEARBASEID_INDEX],&nearbaseid_list,nearbase_num*2);
-	tx_near_msg[MESSAGE_TYPE_IDX] = NEAR_POLL;	
-	memcpy(&tx_near_msg[ANCHOR_ID_IDX],&mainbase_id,2);	
-	dwt_writetxdata(13+2*nearbase_num, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
+	tx_nearpoll_msg[BATTARY_IDX] = Get_Battary();
+	tx_nearpoll_msg[BUTTON_IDX] = !READ_KEY0;
+	tx_nearpoll_msg[SEQUENCE_IDX] = frame_seq_nb++;
+	tx_nearpoll_msg[NEARBASENUM_INDEX] = nearbase_num;
+	memcpy(&tx_nearpoll_msg[NEARBASEID_INDEX],&nearbaseid_list,nearbase_num*2);
+	tx_nearpoll_msg[MESSAGE_TYPE_IDX] = NEAR_POLL;	
+	memcpy(&tx_nearpoll_msg[ANCHOR_ID_IDX],&mainbase_id,2);	
+	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中设置
 
@@ -320,7 +323,7 @@
 								{
 								nearbaseid_list[0]=rec_nearbaseid;
 								nearbase_num=1;
-								memcpy(&tx_near_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
+								memcpy(&tx_nearfinal_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
 								}
 								if(rec_nearbaseid==nearbaseid_list[0])
 								{
@@ -356,11 +359,11 @@
 									temp2=final_tx_time+((100*UUS_TO_DWT_TIME)>>8);
 								//	dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5
 									final_tx_ts = (((uint64_t)(final_tx_time & 0xFFFFFFFE)) << 8) + TX_ANT_DLY;//final包实际发送时间是计算时间加上发送天线delay
-									final_msg_set_ts(&tx_near_msg[FINAL_MSG_POLL_TX_TS_IDX], poll_tx_ts);//将T1,T4,T5写入发送数据
-									final_msg_set_ts(&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX], resp_rx_ts);
-									final_msg_set_ts(&tx_near_msg[FINAL_MSG_FINAL_TX_TS_IDX], final_tx_ts);
-									tx_near_msg[MESSAGE_TYPE_IDX]=NEAR_FINAL;
-									dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//将发送数据写入DW1000
+									final_msg_set_ts(&tx_nearfinal_msg[FINAL_MSG_POLL_TX_TS_IDX], poll_tx_ts);//将T1,T4,T5写入发送数据
+									final_msg_set_ts(&tx_nearfinal_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX], resp_rx_ts);
+									final_msg_set_ts(&tx_nearfinal_msg[FINAL_MSG_FINAL_TX_TS_IDX], final_tx_ts);
+									tx_nearfinal_msg[MESSAGE_TYPE_IDX]=NEAR_FINAL;
+									dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//将发送数据写入DW1000
 									dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
 									if(temp_dist!=0x1ffff)
 									{
@@ -385,15 +388,15 @@
 									{
 										nearbase_num++;
 										nearbaseid_list[nearbase_num] = rec_nearbaseid;
-										memcpy(&tx_near_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
+										memcpy(&tx_nearfinal_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
 									}
 									
 									exsistbase_list[rec_nearbasepos]=1;
 									memcpy(&temp_dist,&rx_buffer[DIST_IDX],4);
 									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);								
-									dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//将发送数据写入DW1000
+									final_msg_set_ts(&tx_nearfinal_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos)*4], resp_rx_ts);								
+									dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//将发送数据写入DW1000
 									dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
 									LED0_BLINK;
 									if(temp_dist!=0x1ffff)
@@ -500,44 +503,44 @@
 
 }
 
-void GetNearMsg(void)
-{
-	u32 start_poll,frame_len;
-	memcpy(&tx_near_msg[ANCHOR_ID_IDX],&mainbase_id,2);
-	memcpy(&tx_near_msg[TAG_ID_IDX],&dev_id,2);
-	tx_near_msg[MESSAGE_TYPE_IDX] = NEAR_MSG;
-	
-	dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);			//设置发送后开启接收,并设定延迟时间
-  dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);	
-	dwt_writetxdata(12, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
-	dwt_writetxfctrl(12, 0);//设置超宽带发送数据长度
-	dwt_starttx(DWT_START_TX_IMMEDIATE| DWT_RESPONSE_EXPECTED);
-	start_poll = time32_incr;
-	/* We assume that the transmission is achieved correctly, poll for reception of a frame or error/timeout. See NOTE 8 below. */
-	while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//不断查询芯片状态直到成功接收或者发生错误
-	{ if(time32_incr - start_poll>20)
-		NVIC_SystemReset();
-	};
-	if(status_reg==0xffffffff)
-	{
-		NVIC_SystemReset();
-	}
-	if (status_reg & SYS_STATUS_RXFCG)//如果成功接收
-	{
-		dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚寄存器标志位
-		frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;	//获得接收到的数据长度
-		dwt_readrxdata(rx_buffer, frame_len, 0);   //读取接收数据
-		if (rx_buffer[MESSAGE_TYPE_IDX] == NEAR_MSG&&!memcmp(&rx_buffer[TAG_ID_IDX],&dev_id,2)) //判断接收到的数据是否是response数据
-		{
-			nearbase_num=rx_buffer[NEARBASENUM_INDEX];
-			tagslotpos=rx_buffer[TAGSLOTPOS];
-			memcpy(nearbaseid_list,&rx_buffer[NEARBASEID_INDEX],nearbase_num*2);
-			slottime=ceil((nearbase_num+2)*0.3)+1;
-			tyncpoll_time=tagslotpos*slottime;
-			tag_state=NEARPOLL;
-		}
-	}
-}
+//void GetNearMsg(void)
+//{
+//	u32 start_poll,frame_len;
+//	memcpy(&tx_near_msg[ANCHOR_ID_IDX],&mainbase_id,2);
+//	memcpy(&tx_near_msg[TAG_ID_IDX],&dev_id,2);
+//	tx_near_msg[MESSAGE_TYPE_IDX] = NEAR_MSG;
+//	
+//	dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);			//设置发送后开启接收,并设定延迟时间
+//  dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);	
+//	dwt_writetxdata(12, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
+//	dwt_writetxfctrl(12, 0);//设置超宽带发送数据长度
+//	dwt_starttx(DWT_START_TX_IMMEDIATE| DWT_RESPONSE_EXPECTED);
+//	start_poll = time32_incr;
+//	/* We assume that the transmission is achieved correctly, poll for reception of a frame or error/timeout. See NOTE 8 below. */
+//	while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//不断查询芯片状态直到成功接收或者发生错误
+//	{ if(time32_incr - start_poll>20)
+//		NVIC_SystemReset();
+//	};
+//	if(status_reg==0xffffffff)
+//	{
+//		NVIC_SystemReset();
+//	}
+//	if (status_reg & SYS_STATUS_RXFCG)//如果成功接收
+//	{
+//		dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚寄存器标志位
+//		frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;	//获得接收到的数据长度
+//		dwt_readrxdata(rx_buffer, frame_len, 0);   //读取接收数据
+//		if (rx_buffer[MESSAGE_TYPE_IDX] == NEAR_MSG&&!memcmp(&rx_buffer[TAG_ID_IDX],&dev_id,2)) //判断接收到的数据是否是response数据
+//		{
+//			nearbase_num=rx_buffer[NEARBASENUM_INDEX];
+//			tagslotpos=rx_buffer[TAGSLOTPOS];
+//			memcpy(nearbaseid_list,&rx_buffer[NEARBASEID_INDEX],nearbase_num*2);
+//			slottime=ceil((nearbase_num+2)*0.3)+1;
+//			tyncpoll_time=tagslotpos*slottime;
+//			tag_state=NEARPOLL;
+//		}
+//	}
+//}
 
 void Tag_App(void)//发送模式(TAG标签)
 {
@@ -654,10 +657,10 @@
 u8 Anchor_RecNearPoll(u8 ancrec_nearbasepos) //0 mainbase  1 first near_base
 {
 			tmp_time=TIM3->CNT;
-			memcpy(&tx_near_msg[ANCTIMEMS],&sync_timer,2);
-			memcpy(&tx_near_msg[ANCTIMEUS],&tmp_time,2);
-			memcpy(&tx_near_msg[TAGSLOTPOS],&taglist_pos,2);
-			memcpy(&tx_near_msg[TAG_ID_IDX],&tag_id_recv,2);
+			memcpy(&tx_nearresp_msg[ANCTIMEMS],&sync_timer,2);
+			memcpy(&tx_nearresp_msg[ANCTIMEUS],&tmp_time,2);
+			memcpy(&tx_nearresp_msg[TAGSLOTPOS],&taglist_pos,2);
+			memcpy(&tx_nearresp_msg[TAG_ID_IDX],&tag_id_recv,2);
 			poll_rx_ts = get_rx_timestamp_u64();//获得Poll包接收时间T2
 
 			resp_tx_time = (poll_rx_ts + ((POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。
@@ -668,13 +671,13 @@
 			if(new_tagid)
 			{
 				tagdist_list[taglist_pos]=0x1ffff;
-				memcpy(&tx_near_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
+				memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
 			}else{
-				memcpy(&tx_near_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
+				memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
 			}
 	
-			tx_near_msg[MESSAGE_TYPE_IDX]=NEAR_RESPONSE;
-			dwt_writetxdata(20, tx_near_msg, 0);//写入发送数据
+			tx_nearresp_msg[MESSAGE_TYPE_IDX]=NEAR_RESPONSE;
+			dwt_writetxdata(20, tx_nearresp_msg, 0);//写入发送数据
 			dwt_writetxfctrl(20, 0);//设定发送长度
 			result = dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED);//延迟发送,等待接收
 
@@ -695,7 +698,7 @@
 				dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚标志位
 				frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;//数据长度
 				dwt_readrxdata(rx_buffer, frame_len, 0);//读取接收数据
-			if(seize_anchor&&memcmp(&rx_buffer[ANCHOR_ID_IDX],&dev_id,2))
+			if(seize_anchor&&memcmp(&rx_buffer[ANCHOR_ID_IDX],&dev_id,2)) //抢占anchor 失败
 			{
 				return 1;
 			}
@@ -749,8 +752,8 @@
 					memcpy(&usart_send[19],&checksum,2);
 					UART_PushFrame(usart_send,21);
 				#else		
-					memcpy(&usart_send[4+6*anc_report_num],&tag_id_recv,2);
-					memcpy(&usart_send[6+6*anc_report_num],&tagdist_list[taglist_pos],4);
+					memcpy(&usart_send_anc[4+6*anc_report_num],&tag_id_recv,2);
+					memcpy(&usart_send_anc[6+6*anc_report_num],&tagdist_list[taglist_pos],4);
 					anc_report_num++;
 				#endif
 					}else{
@@ -838,14 +841,14 @@
 					 memcpy(&tempid,&rx_buffer[NEARBASEID_INDEX+i*2],2);
 					if(tempid==dev_id)
 					{
-						seize_anchor=0;
+						seize_anchor=0;  //非抢占。已存在列表中
 						Anchor_RecNearPoll(i);	
 						break;
 					}						
 				}
 					if(i==rec_nearbase_num)
 					{
-						seize_anchor=1;
+						seize_anchor=1;   //抢占anchor
 						Anchor_RecNearPoll(i);	
 					}
 				

--
Gitblit v1.9.3