From b930edd3675dbc937717ae680b2aee4593a3e414 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期二, 11 十月 2022 15:49:16 +0800
Subject: [PATCH] V2.52 改正dicpoll FINAL 标志位bug

---
 源码/核心板/Src/application/dw_app.c |   65 ++++++++++++++++++--------------
 1 files changed, 36 insertions(+), 29 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 a47d904..2df9cea 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"
@@ -7,9 +7,9 @@
 	NEARPOLL,
 }tag_state=GETNEARMSG;
 static dwt_config_t config = {
-	2,               /* Channel number. */
+	3,               /* Channel number. */
 	DWT_PRF_64M,     /* Pulse repetition frequency. */
-	DWT_PLEN_64,    /* Preamble length. */
+	DWT_PLEN_128,    /* Preamble length. */
 	DWT_PAC8,        /* Preamble acquisition chunk size. Used in RX only. */
 	9,               /* TX preamble code. Used in TX only. */
 	9,               /* RX preamble code. Used in RX only. */
@@ -23,7 +23,7 @@
 static uint8_t tx_final_msg[60] = {0};
 static uint8_t tx_resp_msg[22] = {0};
 static uint8_t tx_nearpoll_msg[80] = {0};
-static uint8_t tx_nearresp_msg[80] = {0};
+static uint8_t tx_nearresp_msg[90] = {0};
 static uint8_t tx_nearfinal_msg[80] = {0};
 
 static uint8_t tx_near_msg[80] = {0};
@@ -398,7 +398,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 (rx_buffer[MESSAGE_TYPE_IDX] == FINAL&&!memcmp(&rx_buffer[TAG_ID_IDX],&tag_id_recv,2)) //判断是否为Final包
+			if (rx_buffer[MESSAGE_TYPE_IDX] == DISCOVERFINAL&&!memcmp(&rx_buffer[TAG_ID_IDX],&tag_id_recv,2)) //判断是否为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;
@@ -472,7 +472,7 @@
 }
 uint32_t time_monitor[10];
 extern uint16_t configremotetagID;
-extern u8 remotetag_paralen;
+extern u8 remotetag_paralen,userdatasend_flag[TAG_NUM_IN_SYS];
 u8 finalsend=0;
 u16 signalpower_list[TAG_NUM_IN_SYS];
 uint32_t poll_tx_ts, resp_rx_ts, final_tx_ts;
@@ -480,6 +480,7 @@
 double Ra, Rb, Da, Db;
 int64_t tof_dtu;
 u32 errortimes,goodtimes;
+u8 tagpossend_flag;
 u8 Anchor_RecNearPoll(u8 ancrec_nearbasepos) //0 mainbase  1 first near_base
 {
 	
@@ -496,7 +497,13 @@
 			dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(rec_nearbase_num+1-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置发送完成后开启接收延迟时间
 			dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//接收超时时间
 			//dwt_readdiagnostics(&d1);
-			
+			if(tagpos[taglist_pos].tagid==tag_id_recv&&userdatasend_flag[taglist_pos] == 1)
+            {
+                memcpy(&tx_nearresp_msg[TAGPOS_INDEX],&tagpos[taglist_pos],tagpos[taglist_pos].datalen+3);
+                tagpossend_flag = 1;
+            }else{
+                tagpossend_flag = 0;
+            }
 			if(new_tagid)
 			{
 				tagdist_list[taglist_pos]=0x1ffff;	
@@ -505,7 +512,7 @@
             memcpy(&tx_nearresp_msg[ANC_SIGNALPOWER],&signalpower_list[taglist_pos],2);
 			tx_nearresp_msg[MAINBASE_INDEX]=flag_syncbase;
 			tx_nearresp_msg[MESSAGE_TYPE_IDX]=NEAR_RESPONSE;
-			tx_nearresp_msg[MOTORSTATE_INDEX]=(remotesend_state<<4)|motorstate;
+			//tx_nearresp_msg[MOTORSTATE_INDEX]=(remotesend_state<<4)|motorstate;
 			waittagconfig_reponse=0;
             finalsend = 0;
 			if(pwtag.remain_time>0)
@@ -536,8 +543,8 @@
 				if(finalsend == 0)
                 {
                     memcpy(&tx_nearresp_msg[MAXRANGE_DISTANCE],&g_com_map[MAXRANGDIST_INDEX],2);
-						dwt_writetxdata(28, tx_nearresp_msg, 0);//写入发送数据
-						dwt_writetxfctrl(28, 0);//设定发送长度
+						dwt_writetxdata(28+tagpossend_flag*(tagpos[taglist_pos].datalen+3), tx_nearresp_msg, 0);//д????????
+						dwt_writetxfctrl(28+tagpossend_flag*(tagpos[taglist_pos].datalen+3), 0);//?趨???????
 				}
 					
 //			 if(remotesend_state&&tag_id_recv==configremotetagID)
@@ -604,7 +611,7 @@
 					LED0_BLINK; //每成功一次通讯则闪烁一次
 					dis_after_filter=dist_cm;
 					hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET];
-					
+					userdatasend_flag[taglist_pos] =0;
 					if(hex_dist>-1000&&hex_dist<200000)
 					{
                         g_flag_Taggetdist[taglist_pos]=0;
@@ -617,21 +624,21 @@
                     g_Tagdist[taglist_pos]=hex_dist;	
                     signalpower_list[taglist_pos] = ((uint8_t)firstpath_power<<8)|(uint8_t)((rx_power-firstpath_power)*10);
 //				#ifndef USART_INTEGRATE_OUTPUT
-//					usart_send[2] = 1;//正常模式 
-//					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[9],&tagdist_list[taglist_pos],4);
-//					usart_send[13] = battary;
-//					usart_send[14] = button;
-//					usart_send[15] = firstpath_power;
-//					usart_send[16] = (rx_power-firstpath_power)*10;
-//					usart_send[17] = tag_frequency;
-//					usart_send[18] = tag_slotpos;
-//					checksum = Checksum_u16(&usart_send[2],17);
-//					memcpy(&usart_send[19],&checksum,2);
-//				//	UART_PushFrame(usart_send,21);
+					usart_send[2] = 1;//正常模式 
+					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[9],&tagdist_list[taglist_pos],4);
+					usart_send[13] = battary;
+					usart_send[14] = button;
+					usart_send[15] = firstpath_power;
+					usart_send[16] = (rx_power-firstpath_power)*10;
+					usart_send[17] = tag_frequency;
+					usart_send[18] = tag_slotpos;
+					checksum = Checksum_u16(&usart_send[2],17);
+					memcpy(&usart_send[19],&checksum,2);
+					//UART_PushFrame(usart_send,21);
 //				#else		
 //					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);
@@ -725,7 +732,7 @@
 		{
 			uint16_t checksum;
             case DISCOVERPOLL:
-                if (anchor_type == rx_buffer[ANCHOR_ID_IDX])
+                if (anchor_type == rx_buffer[ANCHOR_ID_IDX]&&g_com_map[NEARSWITCH_DISTANCE_INDEX] != 0)
                 {
                 taglist_pos=CmpTagInList(tag_id_recv);
 				if(taglist_pos==taglist_num)
@@ -864,7 +871,7 @@
 			}
 		
 		}
-		if(i==MAX_REGTAGNUM)
+		if(i==MAX_REGTAGNUM&&g_com_map[NEARSWITCH_DISTANCE_INDEX] != 0)
 		{
 			dwt_readdiagnostics(&d1);
 			LOS(&d1);	
@@ -912,9 +919,9 @@
                 memcpy(&recnearbaselist_id,&rx_buffer[NEARBASEID_INDEX],rec_nearbase_num*2);
                 memcpy(&recnearbaselist_dist,&rx_buffer[NEARBASEID_INDEX+rec_nearbase_num*2],rec_nearbase_num*4+4);
                 memcpy(&rec_taganc_signalpower_list,&rx_buffer[NEARBASEID_INDEX+rec_nearbase_num*6+4],rec_nearbase_num*2+2);
-           //     if(anc_id_recv == dev_id )
+                if(anc_id_recv == dev_id||g_com_map[OUTPUTALLNEARPOLLMSG] == 1 )
                 {
-                usart_send[2] = 0x0c;//正常模式 
+                    usart_send[2] = 0x0c;//正常模式 
 					usart_send[3] = 15+8*(rec_nearbase_num+1);//数据段长度
 					memcpy(&usart_send[4],&tag_id_recv,2);
                     usart_send[6] = rx_buffer[SEQUENCE_IDX];

--
Gitblit v1.9.3