| | |
| | | u16 numceshi; |
| | | u16 rec_nearbaseid,rec_nearbasepos; |
| | | extern u16 poll_startcount; |
| | | u16 Poll_30s_id[200],Poll_30s_dist[200]; |
| | | u8 Poll_30s_num; |
| | | void NearPoll(void) |
| | | { |
| | | |
| | |
| | | current_count=HAL_LPTIM_ReadCounter(&hlptim1); |
| | | while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//不断查询芯片状态直到成功接收或者发生错误 |
| | | { |
| | | // if(flag_finalsend&&flag_ancreadpara) |
| | | // { |
| | | // dw_systime=dwt_readsystimestamphi32(); |
| | | // if(dw_systime>temp1&&dw_systime<temp2) |
| | | // { |
| | | // |
| | | // dwt_forcetrxoff(); |
| | | // flag_rxon=0; |
| | | // if(flag_ancreadpara) //只有在读取参数的时候需要回复 |
| | | // { |
| | | // u16 calCRC; |
| | | // tx_near_msg[MESSAGE_TYPE_IDX] = MBX_PRAAREPLY; |
| | | // memcpy(&tx_near_msg[MESSAGE_PARAREPLY_IDX],g_com_map,SENDANCPARA_LEN); |
| | | // calCRC = CRC_Compute((uint8_t*)g_com_map,SENDANCPARA_LEN); |
| | | // memcpy(&tx_near_msg[MESSAGE_PARAREPLY_IDX+SENDANCPARA_LEN],&calCRC,2); |
| | | // dwt_writetxdata(14+SENDANCPARA_LEN, tx_near_msg, 0);//将发送数据写入DW1000 |
| | | // dwt_writetxfctrl(14+SENDANCPARA_LEN, 0);//设定发送数据长度 |
| | | // |
| | | // dwt_setdelayedtrxtime(final_tx_time); |
| | | // result=dwt_starttx(DWT_START_TX_DELAYED);//设定为延迟发送 |
| | | // } |
| | | // flag_finalsend=0; |
| | | // break; |
| | | // } |
| | | // } |
| | | current_count=HAL_LPTIM_ReadCounter(&hlptim1); |
| | | if(current_count>=end_count&¤t_count<end_count+15000) |
| | | break; |
| | |
| | | recbase_num++; |
| | | memcpy(&rec_nearbaseid,&rx_buffer[ANCHOR_ID_IDX],2); |
| | | rec_remotepara_state = rx_buffer[MOTORSTATE_INDEX]>>4; |
| | | freqlost_count = 0; |
| | | // TagFreqProcess(rx_buffer[TAGFREQ_IDX]); |
| | | // if(rec_nearbaseid==0x9002) |
| | | // {rec_remotepara_state = rx_buffer[MOTORSTATE_INDEX]>>4;} |
| | |
| | | if((rx_buffer[MOTORSTATE_INDEX]&0xf)!=3) |
| | | motor_state=rx_buffer[MOTORSTATE_INDEX]&0xf; |
| | | |
| | | |
| | | mainbase_lost_count=0; |
| | | flag_finalsend=1; |
| | | memcpy(&mainbase_dist,&rx_buffer[DIST_IDX],4); |
| | | final_tx_time = (resp_rx_ts + ((RESP_RX_TO_FINAL_TX_DLY_UUS+DELAY_BETWEEN_TWO_FRAME_UUS*nearbase_num+500) * UUS_TO_DWT_TIME)) >> 8; |
| | | 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]=MBX_FINAL; |
| | | 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);//设定发送数据长度 |
| | | flag_getresponse=1; |
| | | memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4); |
| | | |
| | | }else{ |
| | | rec_nearbasepos=FindNearBasePos(rec_nearbaseid); |
| | | SetANCTimestap(rec_nearbasepos,&rx_buffer[RESP_MSG_POLL_RX_TS_IDX],&rx_buffer[RESP_MSG_RESP_TX_TS_IDX],resp_rx_ts,&rx_buffer[RESP_MSG_ANC_DISTOFFSET]); |