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