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&&current_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