From 21885e54d3c21ba76586b70ef0b2d81e4e995d2b Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期五, 06 六月 2025 11:55:13 +0800
Subject: [PATCH] 修改final包包体内容版本,刚可以与显示基站测试版本,包序和丢包问题未解决

---
 Src/application/dw_app.c |   41 ++++++++++++++++++++++++++++++++---------
 1 files changed, 32 insertions(+), 9 deletions(-)

diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c
index eec8b80..0ceba39 100644
--- a/Src/application/dw_app.c
+++ b/Src/application/dw_app.c
@@ -94,7 +94,7 @@
 static uint8_t tx_final_msg[60] = {0};
 static uint8_t tx_resp_msg[22] = {0};
 uint8_t tx_near_msg[80] = {0};
-
+extern uint8_t tx_near_test_msg[80];
 static uint32_t frame_seq_nb = 0;
 static uint32_t status_reg = 0;
 static uint8_t rx_buffer[100];
@@ -287,6 +287,7 @@
 }
 
 int32_t mainbase_dist,nearbase_distlist[MAX_NEARBASE_NUM],true_nearbase_distlist[MAX_NEARBASE_NUM],true_exsistbase_list[MAX_NEARBASE_NUM],ancsync_time,nextpoll_delaytime,offsettimeus;
+uint16_t u16_nearbase_distlist[MAX_NEARBASE_NUM];//转换距离数组
 u8 anclost_times=0 , mainbase_lost_count=0;
 u8 exsistbase_list[MAX_NEARBASE_NUM],report_num,get_newbase=0;
 u8 flag_finalsend,flag_getresponse,flag_rxon;
@@ -383,6 +384,8 @@
 		sync_anc_id = ancid;	
 	}
 }
+uint32_t frame_seq_nb_final;
+uint8_t resp_num,final_num;
 void NearPoll(void)
 {
 
@@ -412,12 +415,18 @@
     tx_near_msg[BATTARY_IDX] = bat_percent;
     tx_near_msg[BUTTON_IDX] = !GET_USERKEY|stationary_flag<<1;
     tx_near_msg[SEQUENCE_IDX] = frame_seq_nb++;
+		frame_seq_nb_final=frame_seq_nb;//复制该包包序到final包中
     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;
+//	for(uint8_t i=0;i<nearbase_num;i++)   //标签距离32位转成16位
+//{
+//    u16_nearbase_distlist[i] = nearbase_distlist[i];
+//}
 //		memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*2],&nearbase_distlist,nearbase_num*2);
     memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*4],&g_commap_antdelay,2);
     memcpy(&tx_near_msg[ANCHOR_ID_IDX],&mainbase_id,2);
+//		tx_near_msg[ANCHOR_ID_IDX]=tag_frequency
     dwt_writetxdata(15+4*nearbase_num, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
     dwt_writetxfctrl(15+4*nearbase_num, 0);//设置超宽带发送数据长度
 		
@@ -478,6 +487,7 @@
         }
         if (status_reg & SYS_STATUS_RXFCG)//如果成功接收
         {
+					resp_num++;
             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);   //读取接收数据
@@ -522,10 +532,11 @@
                     exsistbase_list[rec_nearbasepos]=KEEP_TIMES;
                     memcpy(&temp_dist,&rx_buffer[DIST_IDX],4);
                     nearbase_distlist[rec_nearbasepos]=temp_dist;
+										u16_nearbase_distlist[rec_nearbasepos]=temp_dist;
                     if((rx_buffer[MOTORSTATE_INDEX]&0xf)!=3)
                         motor_state=rx_buffer[MOTORSTATE_INDEX]&0xf;
                     rec_remotepara_state=rx_buffer[MOTORSTATE_INDEX]>>4;
-
+										
                     mainbase_lost_count=0;
                     flag_finalsend=1;
                     memcpy(&mainbase_dist,&rx_buffer[DIST_IDX],4);
@@ -533,15 +544,27 @@
                     temp1=final_tx_time-((850*UUS_TO_DWT_TIME)>>8);
                     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;
+										//u16_nearbase_distlist[0]=0;//测试
                     tx_near_msg[GROUP_ID_IDX] = group_id;
-
-                    dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//将发送数据写入DW1000
-                    dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
+										tx_near_msg[ANCHOR_SEQ]=frame_seq_nb_final;//新增将已测距基站列表放入以及包序
+										tx_near_msg[ANCHOR_NUM]=nearbase_num;
+										memcpy(&tx_near_msg[28+nearbase_num*4],nearbaseid_list,2*nearbase_num);
+										memcpy(&tx_near_msg[28+nearbase_num*4+2*nearbase_num],u16_nearbase_distlist,2*nearbase_num);
+										tx_near_msg[28+nearbase_num*4+4*nearbase_num]=tag_frequency;//hz放入
+										//memcpy(&tx_near_msg[36],tx_near_test_msg,40);//测试
+	//									tx_near_msg[MESSAGE_TYPE_IDX]=NEAR_FINAL;//测试
+//										 tx_near_msg[GROUP_ID_IDX] = group_id;//测试
+                    dwt_writetxdata(28+nearbase_num*4+4*nearbase_num+4, tx_near_msg, 0);//将发送数据写入DW1000
+                    dwt_writetxfctrl(28+nearbase_num*4+4*nearbase_num+4, 0);//设定发送数据长度
+//                    dwt_writetxdata(45, tx_near_msg, 0);//将发送数据写入DW1000
+//                    dwt_writetxfctrl(45, 0);//设定发送数据长度
+										final_num++;
                     flag_getresponse=1;
                     memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
 
@@ -596,15 +619,14 @@
                     exsistbase_list[rec_nearbasepos]=KEEP_TIMES;
                     memcpy(&temp_dist,&rx_buffer[DIST_IDX],4);
                     nearbase_distlist[rec_nearbasepos]=temp_dist;
-
+										u16_nearbase_distlist[rec_nearbasepos]=temp_dist;
                     if(motor_state<(rx_buffer[MOTORSTATE_INDEX]&0xf)&&(rx_buffer[MOTORSTATE_INDEX]&0xf)!=3)
                     {
                         motor_state=rx_buffer[MOTORSTATE_INDEX];
                     }
                     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
-                    dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
-
+                        dwt_writetxdata(28+nearbase_num*4+4*nearbase_num+4, tx_near_msg, 0);//将发送数据写入DW1000
+                    dwt_writetxfctrl(28+nearbase_num*4+4*nearbase_num+4, 0);//设定发送数据长度
 
                     //dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5
                     //	result=dwt_starttx(DWT_START_TX_DELAYED);//设定为延迟发送
@@ -675,6 +697,7 @@
     {
         nearbaseid_list[i]=true_nearbase_idlist[i];
         nearbase_distlist[i]=true_nearbase_distlist[i];
+				u16_nearbase_distlist[i]=true_nearbase_distlist[i];
         if(nearbase_distlist[i]!=0x1ffff&&true_exsistbase_list[i]==KEEP_TIMES)
         {
             memcpy(&usart_send[4+6*report_num],&nearbaseid_list[i],2);

--
Gitblit v1.9.3