From dd7cafaa933d27a9cabcf071147cb8ad09b49c62 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期四, 20 五月 2021 10:23:47 +0800
Subject: [PATCH] V1.50 增加小组功能

---
 源码/核心板/Src/application/dw_app.c |   22 ++++++++++++++++++----
 1 files changed, 18 insertions(+), 4 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 aa1e615..c98ce3b 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"
@@ -137,6 +137,7 @@
      * As this example only handles one incoming frame with always the same delay and timeout, those values can be set here once for all. */
 				//设置接收超时时间
 }
+extern u16 group_id;
 void Dw1000_App_Init(void)
 {
 //g_com_map[DEV_ID] = 0x0b;
@@ -145,6 +146,10 @@
 	tx_final_msg[MESSAGE_TYPE_IDX]=FINAL;
 	tx_sync_msg[MESSAGE_TYPE_IDX]=SYNC;
 	
+    memcpy(&tx_poll_msg[GROUP_ID_IDX], &group_id, 1);
+	memcpy(&tx_final_msg[GROUP_ID_IDX], &group_id, 1);
+	memcpy(&tx_resp_msg[GROUP_ID_IDX], &group_id, 1);
+    
 	memcpy(&tx_poll_msg[TAG_ID_IDX], &dev_id, 2);
 	memcpy(&tx_final_msg[TAG_ID_IDX], &dev_id, 2);
 	memcpy(&tx_resp_msg[ANCHOR_ID_IDX], &dev_id, 2);
@@ -333,6 +338,7 @@
 	last_nearbase_num=next_nearbase_num;
 	nearbase_num=next_nearbase_num;
 	recbase_num=0;
+    tx_nearpoll_msg[GROUP_ID_IDX] = group_id;
 	tx_nearpoll_msg[BATTARY_IDX] = Get_Battary();
 	tx_nearpoll_msg[BUTTON_IDX] = !READ_KEY0;
 	tx_nearpoll_msg[SEQUENCE_IDX] = frame_seq_nb++;
@@ -451,12 +457,14 @@
 									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;
+                                    tx_nearfinal_msg[GROUP_ID_IDX] = group_id;
 									dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//将发送数据写入DW1000
 									dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
 									memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
 								if(temp_dist!=0x1ffff)
 									{
 										g_Resttimer=0;
+                                        IWDG_Feed();
 										#ifdef USART_SINGLE_OUTPUT
 										usart_send[2] = 1;//正常模式
 										usart_send[3] = 17;//数据段长度
@@ -898,7 +906,7 @@
 			{
 				return 1;
 			}
-			if (rx_buffer[MESSAGE_TYPE_IDX] == NEAR_FINAL&&!memcmp(&rx_buffer[TAG_ID_IDX],&tag_id_recv,2)) //判断是否为Final包
+			if (rx_buffer[MESSAGE_TYPE_IDX] == NEAR_FINAL&&!memcmp(&rx_buffer[TAG_ID_IDX],&tag_id_recv,2)&&group_id==rx_buffer[GROUP_ID_IDX]) //判断是否为Final包
 				{
 					uint32_t poll_tx_ts, resp_rx_ts, final_tx_ts;
 					uint32_t poll_rx_ts_32, resp_tx_ts_32, final_rx_ts_32;
@@ -925,16 +933,18 @@
 					/*--------------------------以下为非测距逻辑------------------------*/
 					//dist_cm=33000;
 					getrange_success = 1;
-					g_Resttimer=0;
+					
 					LED0_BLINK; //每成功一次通讯则闪烁一次
 					dis_after_filter=dist_cm;
 					hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET]*10;
 					g_flag_Taggetdist[taglist_pos]=0;
-					if(hex_dist>-10000&&hex_dist<2000000)
+					if(hex_dist>-1000&&hex_dist<2000000)
 					{
 					if(abs(hex_dist-his_dist[taglist_pos])<dist_threshold||misdist_num[taglist_pos]>3)
 					{
 						int32_t filter_dist;
+                        g_Resttimer=0;
+                        IWDG_Feed();
 						#ifdef TDFILTER
 						NewTrackingDiffUpdate(taglist_pos, (float)hex_dist);
 						filter_dist=pos_predict[taglist_pos]/10;
@@ -950,7 +960,9 @@
 					usart_send[3] = 17;//数据段长度
 					usart_send[4] = frame_seq_nb2;//数据段长度
 					memcpy(&usart_send[5],&tag_id_recv,2);
-					memcpy(&usart_send[7],&dev_id,2);				
+					memcpy(&usart_send[7],&dev_id,2);			
+                            if(tagdist_list[taglist_pos]<=0)
+                                tagdist_list[taglist_pos]=10;
 					memcpy(&usart_send[9],&tagdist_list[taglist_pos],4);
 					usart_send[13] = battary;
 					usart_send[14] = button;
@@ -1078,6 +1090,8 @@
             #endif
 			if(tag_id_recv>=g_com_map[WHITELIST1_START]&&tag_id_recv<=g_com_map[WHITELIST1_END])
 			{break;}
+            if(group_id!=rx_buffer[GROUP_ID_IDX])
+            {break;}
 				taglist_pos=CmpTagInList(tag_id_recv);
 				if(taglist_pos==taglist_num)
 				{

--
Gitblit v1.9.3