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