From 950676ea7305bb90e08ec88bcac40e4c47fcefca Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期四, 15 五月 2025 11:06:38 +0800 Subject: [PATCH] 添加计步以及测距 --- keil/uwb_app.c | 228 +++----------------------------------------------------- 1 files changed, 13 insertions(+), 215 deletions(-) diff --git a/keil/uwb_app.c b/keil/uwb_app.c index fc6b031..847179d 100644 --- a/keil/uwb_app.c +++ b/keil/uwb_app.c @@ -324,6 +324,7 @@ uint16_t REPLY_POLL_NUM; uint16_t ERR_RX_NUM; uint8_t send_qiangzhan_NUM; +uint8_t resp_tx_flag; static void rx_int_callback(struct MAC_HW_REPORT_T *rx_report) { uint8_t valid_sts=0; // Power off radio @@ -333,7 +334,7 @@ if (rx_report->err_code == UWB_RX_OK) { - + resp_tx_flag=0; /* Received data does not contain FCS */ rx_length = rx_report->pkt_len; memcpy(rx_buf, rx_report->pkt_data, rx_length); @@ -347,6 +348,10 @@ rssi = rx_report->rssi; receive_flag=1; Anchor_App(); + if(resp_tx_flag==0) + { + OpenUWB(); + } #ifdef STS_MODE valid_sts= sts_valid_check(); if (valid_sts) @@ -378,16 +383,10 @@ ERR_RX_NUM++; UWB_STATE=UWB_STATE_IDLE; - // OpenUWB();//再次开启UWB接收 + OpenUWB();//再次开启UWB接收 } - OpenUWB();//再次开启UWB接收 -#ifdef USE_TX_UWBON - if(UWB_STATE==UWB_STATE_IDLE) - { - UWB_STATE=UWB_RX_STATE_BUSY; - OpenUWB();//再次开启UWB接收 - } -#endif +// OpenUWB();//再次开启UWB接收 + } uint16_t TX_CALL_POLL_NUM; /* TX done process handler. */ @@ -395,11 +394,6 @@ { // Power off radio power_off_radio(); -#ifdef USE_TX_UWBON - UWB_STATE=UWB_STATE_IDLE; - UWB_STATE=UWB_RX_STATE_BUSY; - OpenUWB();//再次开启UWB接收 -#endif /** UWB TX success */ if (tx_report->err_code == UWB_TX_OK) { @@ -409,6 +403,7 @@ temp_internal=temp_count; TX_CALL_POLL_NUM++; + OpenUWB(); // if(send_qiangzhan_NUM) // { // send_qiangzhan_NUM=0; @@ -561,7 +556,7 @@ temp_count3= phy_timer_count_get(); UWB_STATE==UWB_TX_STATE_BUSY; flag_temp2=uwb_tx(send_buffer, 40,1 ,resp_tx_en_start_u32);//立即发送测试size大小 - + resp_tx_flag=1; tagofflinetime[taglist_pos] = 0;//更新标签通信 // temp_count1=phy_timer_count_get(); @@ -584,146 +579,7 @@ uint32_t UWB_fachu_count=0; uint32_t UWB_qiangzhanfachu_count=0; uint32_t UWB_1003_count,UWB_6666_count=0; -//int UwbRange(void) -//{ -// uint8_t i; -// uint16_t tempid; - -// mac_register_process_handler(tx_int_callback, rx_int_callback); -// receive_flag = 0; -// flag_recsuccess = 0; - -// uwb_rxflag=uwb_rx(0, 0, range_timeout_us);//开启接收 - -// uwb_rxflag_num1++; -// // while(mac_is_busy()); -// // temp_count2=phy_timer_count_get(); -// start_receive_count=phy_timer_count_get(); -// poll_timeout=US_TO_PHY_TIMER_COUNT(range_timeout_us);//多一个多0.4ms默认0.4ms计算为0.125*4*100000,默认开启1mss -// end_receive_count=start_receive_count+poll_timeout; -// if(end_receive_count>=UINT32_MAX) -// {end_receive_count-=UINT32_MAX;} -// current_count=phy_timer_count_get(); -// while(mac_is_busy()) -// { -//// IdleTask(); -// current_count=phy_timer_count_get(); -// if(current_count>end_receive_count&¤t_count<end_receive_count+HALF_SECOND_TIME)//超时时间为4.992秒 -// { -// break; -// } -// } -// -// if(receive_flag==1)//成功接收 -// { -// time_count_sdsj=phy_timer_count_get(); -//// gpio_pin_set(IO_PIN_5); -// -//// gpio_pin_clr(IO_PIN_5); -// #ifdef DEBUG_BOXING -//// gpio_pin_set(IO_PIN_5);//测试 -//// gpio_pin_clr(IO_PIN_5);//测试 -// #endif -//// timeceshi1=phy_timer_count_get(); -//// temp_count7=poll_rx_en_start_u32; -// receive_flag=0; -// if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)/*&&!memcmp(&rx_buf[TAG_ID_IDX],&g_com_map[BIND_DEV_ID],2)*///判断是否是和自己是同一组通讯的且为poll包 -// { -//// UWB_shoudao_count++; -// flag_recsuccess = 1; -//// temp_count2=phy_timer_count_get(); -// frame_seq_nb2 = rx_buf[SEQUENCE_IDX];//获取包序 -// battary = rx_buf[BATTARY_IDX]; -// rec_nearbase_num=rx_buf[FZ_NEARBASENUM_INDEX]; //标签传过来的他与基站交互的基站id数目 -// -// //rec_nearbase_num=25; -// -// memcpy(&tag_id_recv,&rx_buf[TAG_ID_IDX],2); -// memcpy(rec_ancidlist,&rx_buf[FZ_NEARBASEID_INDEX],2*rec_nearbase_num); -// memcpy(rec_ancdistlist,&rx_buf[FZ_NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num); -// // memcpy(&rec_antdelay,&rx_buf[FZ_NEARBASEID_INDEX+rec_nearbase_num*4],2); -//// timeceshi1=phy_timer_count_get(); -//// temp_count7=poll_rx_en_start_u32; -// taglist_pos=CmpTagInList(tag_id_recv); -// for(i=0; i<rec_nearbase_num; i++) -// { -// -// if(rec_ancidlist[i] == dev_id) -// { -// rec_ancdistlist[i]+=(int16_t)g_com_map[DIST_OFFSET]; -// PushAnchorDataArray(tag_id_recv,rec_ancdistlist[i],battary); -// UWB_fachu_count++; -//// #ifdef DEBUG_BOXING -////// gpio_pin_clr(IO_PIN_5);//测试 -//// gpio_pin_set(IO_PIN_5);//测试 -//// #endif -// } -// } -// for(i=0; i<rec_nearbase_num; i++) -// { -// memcpy(&tempid,&rx_buf[FZ_NEARBASEID_INDEX+i*2],2); -// if(tempid==dev_id) -// { -// Anchor_RecNearPoll(i); -// tagdist_list[taglist_pos]=rec_ancdistlist[i]; -// if(group_min_dist[group_id]>rec_ancdistlist[i]) -// { -// group_min_dist[group_id] = rec_ancdistlist[i]; -// } -// if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中 -// { //tempid==dev_id 说明基站下发测距报文有这个标签的信息 -// taglist_num++; //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况 -// tagid_list[taglist_pos] = tag_id_recv; -// } -// break; -// } -// } - -// if(i==rec_nearbase_num) -// { -// -// seize_anchor=1; //抢占anchor -// Anchor_RecNearPoll(i); -// UWB_qiangzhanfachu_count++; - -// } -// recev_error_num=0; - -//// sleep_timer_start(__MS_TO_32K_CNT(UWB_DELAY_TIME_US));//测试 -//// LOG_INFO(TRACE_MODULE_APP,"标签ID:%X,距离: %d 信号强度:%d.\r\n",g_com_map[BIND_DEV_ID],distance,rssi); -// -// } -// // uwb_rxflag=uwb_rx(0, 0, range_timeout_us); -// } -// #ifdef DEBUG_BOXING -//// gpio_pin_clr(IO_PIN_5);//测试 -//// gpio_pin_set(IO_PIN_5);//测试 -// #endif -// -// delay_us(1); -// uwb_rx_force_off(1); -//// gpio_pin_clr(IO_PIN_5); -//// #ifdef DEBUG_BOXING -//// gpio_pin_clr(IO_PIN_5);//测试. -//// #endif -//// if(!flag_recsuccess) -//// { -//// sleep_timer_start(__MS_TO_32K_CNT(UWB_DELAY_TIME_US-3));//测试 -//// LOG_INFO(TRACE_MODULE_APP,"测距失败,计数:%d\r\n",recev_error_num); -//// if(recev_error_num++>5) -//// { -//// recev_error_num=0; -//// UWB_work_state=SEARCH_DEV; -//// uwb_searchcount = 0; -//// search_open_flag = 1; -//// } -//// } -//// #ifdef DEBUG_BOXING -//// gpio_pin_clr(IO_PIN_5);//测试 -////// gpio_pin_set(IO_PIN_5);//测试 -//// #endif -//} int Uwbinit(void) { uwb_open(); @@ -837,66 +693,6 @@ //uint32_t wltag_statetimer,wltag_uwbtimer; int uwb_app_poll(void) { - - -// switch(wltag_state) -// { -// case RANGE: -// if(HIDO_TimerGetTick()-wltag_uwbtimer>2&&uwb_rx_flag==0) -// { -// -// wltag_uwbtimer = HIDO_TimerGetTick(); -// if(UWB_STATE==UWB_STATE_IDLE) -// { -// UWB_STATE=UWB_RX_STATE_BUSY; -// OpenUWB(); -// } -// } -// else if(HIDO_TimerGetTick()-wltag_uwbtimer>1&&uwb_rx_flag==1) -// { -//// time_flag=HIDO_TimerGetTick()-wltag_uwbtimer; -// UWB_LED_OFF; -// wltag_uwbtimer = HIDO_TimerGetTick(); -// CloseUWB(); -// UWB_STATE=UWB_STATE_IDLE; -// } -// if(uwb_losttimer>g_com_map[UWB_RNAGE_TIME]) -// { -// wltag_statetimer = HIDO_TimerGetTick(); -// if(uwb_rx_flag==0)//若要切换到搜索模式时没有开启则开启UWB -// { -// if(UWB_STATE==UWB_STATE_IDLE) -// { -// UWB_STATE=UWB_RX_STATE_BUSY; -// OpenUWB(); -// } -// } -// wltag_state = SEARCH; -// } -// break; -// case SEARCH: -// if(HIDO_TimerGetTick()-wltag_statetimer>1) -// { -// wltag_statetimer = HIDO_TimerGetTick(); -// wltag_state = CLOSE; -// CloseUWB(); -// UWB_STATE=UWB_STATE_IDLE; -// } -// break; -// case CLOSE: -// if(HIDO_TimerGetTick()-wltag_statetimer>g_com_map[UWB_WAIT_TIME]) -// { -// wltag_statetimer = HIDO_TimerGetTick(); -// wltag_state = SEARCH; -// if(UWB_STATE==UWB_STATE_IDLE) -// { -// UWB_STATE=UWB_RX_STATE_BUSY; -// OpenUWB(); -// } -// } -// break; -// } - UWBIdleTask(); } @@ -909,6 +705,7 @@ if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)//判断是否是和自己是同一组通讯的且为poll包 { flag_recsuccess = 1; // wltag_state=RANGE;//成功后从search切换为range + REV_POLL_NUM++; memcpy(&g_com_receive_id,&rx_buf[TAG_ID_IDX],2); //temp_count2=phy_timer_count_get(); @@ -921,6 +718,7 @@ memcpy(rec_ancdistlist,&rx_buf[FZ_NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num); memcpy(&rec_antdelay,&rx_buf[FZ_NEARBASEID_INDEX+rec_nearbase_num*4],2); taglist_pos=CmpTagInList(tag_id_recv); + UWB_LED_ON; if(taglist_num>=ANC_MAX_NUM) return 0; for(i=0; i<rec_nearbase_num; i++) -- Gitblit v1.9.3