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 | 281 ++++++++++++------------------------------------------- 1 files changed, 64 insertions(+), 217 deletions(-) diff --git a/keil/uwb_app.c b/keil/uwb_app.c index 9f34026..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(); @@ -747,6 +603,53 @@ // Register rx interrupt callback function mac_register_process_handler(tx_int_callback, rx_int_callback); } +//void Uwbinit(void) +//{ +// uwb_open(); +// #ifdef STS_MODE +// // Set STS key and IV +// phy_sts_key_configure(&sts_iv_key); +// +// // which RX ports will be used for AoA/PDoA +// phy_rx_ant_mode_set(RX_ANT_PORTS_COMBINATION); +// #endif +// // Set calibration parameters +// uwb_calibration_params_set(config.phy_cfg.ch_num); +// #ifndef STS_MODE +// // set advanced parameters +// struct PHY_ADV_CONFIG_T adv_config = { +// .thres_fap_detect = 40, +// .nth_scale_factor = 4, +// .ranging_performance_mode = 0, +// .skip_weakest_port_en = 0, +// }; +// #else +// // set advanced parameters +// struct PHY_ADV_CONFIG_T adv_config = { +// .thres_fap_detect = 40, +// .nth_scale_factor = 4, +// .ranging_performance_mode = 3, +// .skip_weakest_port_en = 0, +// }; +// #endif +// phy_adv_params_configure(&adv_config); + +// // uwb configure +// uwb_configure(config.phy_work_mode, board_param.tx_power_fcc[CALIB_CH(config.phy_cfg.ch_num)], &config.phy_cfg); +// #if (defined STS_MODE) || (defined MK_MODE) +// ranging_lib_init(); +// #endif +// ranging_frame_type_set(config.phy_cfg.sts_pkt_cfg); +// #ifdef STS_MODE +// aoa_aux_info_set(AOA_AUX_ANT_IQ_RSSI_PDOA_AOA_FOM); +// aoa_steering_vector_set((const float *)((uint32_t)((config.phy_cfg.ch_num == 9) ? svec_ch9_ptr : svec_ch5_ptr) | SRAM_BASE)); + +// aoa_param_config(); +// +// phy_rx_sts_switch_mode_set(config.phy_cfg.sts_pkt_cfg, STS_SWITCH_EVERY_4SYM, 0, 0); +// #endif +// mac_register_process_handler(tx_int_callback, rx_int_callback);//初始化回调 +//} uint16_t g_com_receive_id; void CloseUWB(void) { @@ -785,69 +688,11 @@ } return 0; } -enumwltagstate wltag_state=RANGE; -uint32_t wltag_statetimer,wltag_uwbtimer; + +//enumwltagstate wltag_state=RANGE; +//uint32_t wltag_statetimer,wltag_uwbtimer; int uwb_app_poll(void) { -// switch(wltag_state) -// { -// -// case RANGE: -//// time_flag=HIDO_TimerGetTick()-wltag_uwbtimer; -// if(HIDO_TimerGetTick()-wltag_uwbtimer>2&&uwb_rx_flag==0) -// { -// UWB_LED_ON; -// 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(); } @@ -859,7 +704,8 @@ uint16_t tempid; if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)//判断是否是和自己是同一组通讯的且为poll包 { flag_recsuccess = 1; - wltag_state=RANGE;//成功后从search切换为range +// 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(); @@ -872,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