| | |
| | | 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]; |
| | |
| | | } |
| | | |
| | | 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; |
| | |
| | | sync_anc_id = ancid; |
| | | } |
| | | } |
| | | uint32_t frame_seq_nb_final; |
| | | uint8_t resp_num,final_num; |
| | | void NearPoll(void) |
| | | { |
| | | |
| | |
| | | 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);//设置超宽带发送数据长度 |
| | | |
| | |
| | | } |
| | | 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); //读取接收数据 |
| | |
| | | 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); |
| | |
| | | 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); |
| | | |
| | |
| | | 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);//设定为延迟发送 |
| | |
| | | { |
| | | 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); |