| | |
| | | { |
| | | tagid_list[j]=tagid_list[i]; |
| | | tagdist_list[j] = tagdist_list[i]; |
| | | anchordata_bat[j]=anchordata_bat[i];//电量随之更新 |
| | | tagofflinetime[j++]=tagofflinetime[i]; |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | uint8_t position; |
| | | extern uint8_t change_buffer_flag; |
| | | uint8_t Anchor_RecNearPoll(uint8_t ancrec_nearbasepos)//根据自己是否为新基站定制消息去发送,根据是否抢占判断 |
| | | { |
| | | temp_count2=poll_rx_en_start_u32; |
| | |
| | | memcpy(&send_buffer[ANCHOR_ID_IDX],&dev_id,2);//自身id |
| | | memcpy(&send_buffer[TAG_ID_IDX],&tag_id_recv,2);//接受者id |
| | | send_buffer[MESSAGE_TYPE_IDX]=MBX_RESPONSE; |
| | | |
| | | if(change_buffer_flag) |
| | | { |
| | | send_buffer[MESSAGE_CONTROL_TYPE_FLAG]=1; |
| | | change_buffer_flag=0; |
| | | } |
| | | // if(rec_nearbase_num == ancrec_nearbasepos)//抢占模式自己为新基站 |
| | | // { |
| | | // random_time = (phy_timer_count_get()%100);//多基站抢占一个位置时避免一个也收不到的情况就每一个随机错开几十uS |
| | |
| | | temp_count3= phy_timer_count_get(); |
| | | flag_temp2=uwb_tx(send_buffer, 40,1 ,resp_tx_en_start_u32);//立即发送测试size大小 |
| | | tagofflinetime[taglist_pos] = 0;//更新标签通信 |
| | | memset( send_buffer,0,40);//多加清除数组逻辑 |
| | | // temp_count1=phy_timer_count_get(); |
| | | //while(mac_is_busy()); |
| | | //gpio_pin_clr(SCL_PIN); |
| | |
| | | &&!((end_receive_count-current_count_calibration<=MS_TO_PHY_TIMER_COUNT(200))||(end_receive_count+(UINT32_MAX-current_count_calibration)<=MS_TO_PHY_TIMER_COUNT(200)))) |
| | | { |
| | | start_receive_count_calibration=current_count_calibration;//更新开始时间 |
| | | // MotorPoll(); |
| | | |
| | | |
| | | if(secondtask_search_count++%2==0) |
| | | { |
| | |
| | | } |
| | | } |
| | | uint16_t g_com_receive_id; |
| | | typedef enum |
| | | {UWB_UNLINE=0, |
| | | VOLTAGE_NORMAL, |
| | | VOLTAGE_ABNORMAL, |
| | | } UWB_State; |
| | | UWB_State Voltage_State=UWB_UNLINE; |
| | | void CloseUWB(void) |
| | | { |
| | | uwb_rx_force_off(1); |
| | | uwb_rx_flag=0; |
| | | LOG_INFO(TRACE_MODULE_APP,"关闭uwb_rx\r\n"); |
| | | //LOG_INFO(TRACE_MODULE_APP,"关闭uwb_rx\r\n"); |
| | | } |
| | | void OpenUWB(void) |
| | | { |
| | | flag_temp1=uwb_rx(0, 0,range_timeout_us);//提交接收请求 |
| | | uwb_rx_flag=1; |
| | | LOG_INFO(TRACE_MODULE_APP,"打开uwb_rx\r\n"); |
| | | //LOG_INFO(TRACE_MODULE_APP,"打开uwb_rx\r\n"); |
| | | } |
| | | void UWBOneSecondTask(void) |
| | | { |
| | |
| | | // switch(wltag_state) |
| | | // { |
| | | // case RANGE: |
| | | // if(HIDO_TimerGetTick()-wltag_uwbtimer>0&&uwb_rx_flag==0) |
| | | // if(HIDO_TimerGetTick()-wltag_uwbtimer>2&&uwb_rx_flag==0) |
| | | // { |
| | | // wltag_uwbtimer = HIDO_TimerGetTick(); |
| | | // OpenUWB(); |
| | | // } |
| | | // else if(HIDO_TimerGetTick()-wltag_uwbtimer>2&&uwb_rx_flag==1) |
| | | // else if(HIDO_TimerGetTick()-wltag_uwbtimer>1&&uwb_rx_flag==1) |
| | | // { |
| | | // wltag_uwbtimer = HIDO_TimerGetTick(); |
| | | // CloseUWB(); |
| | |
| | | { flag_recsuccess = 1; |
| | | wltag_state=RANGE;//成功后从search切换为range |
| | | memcpy(&g_com_receive_id,&rx_buf[TAG_ID_IDX],2); |
| | | if(rx_buf[BATTARY_IDX]) |
| | | { |
| | | Voltage_State=VOLTAGE_NORMAL; |
| | | }else{ |
| | | Voltage_State=VOLTAGE_ABNORMAL; |
| | | } |
| | | //temp_count2=phy_timer_count_get(); |
| | | uwb_losttimer=0;//成功测距清0 lost时间 |
| | | frame_seq_nb2 = rx_buf[SEQUENCE_IDX];//获取包序 |
| | |
| | | { |
| | | Anchor_RecNearPoll(i); |
| | | tagdist_list[taglist_pos]=rec_ancdistlist[i]; |
| | | anchordata_bat[taglist_pos] = battary;//保存该基站电量 |
| | | if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中 |
| | | { //tempid==dev_id 说明基站下发测距报文有这个标签的信息 |
| | | taglist_num++; //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况 |
| | | tagid_list[taglist_pos] = tag_id_recv; |
| | | |
| | | } |
| | | break; |
| | | } |