From e54166d028ed6c32324d24fc28c54c8194906c60 Mon Sep 17 00:00:00 2001
From: zhangbo <zhangbo@qq.com>
Date: 星期一, 24 二月 2025 16:38:27 +0800
Subject: [PATCH] 测试阶段:可以跟多个UWB基站测距,以及蓝牙协议转发,现在上传协议是强制写进去的,然后还有那个基站,标签时间同步没有调试正常,

---
 keil/uwb_app.c |  142 ++++++++++++++++++++++++++---------------------
 1 files changed, 79 insertions(+), 63 deletions(-)

diff --git a/keil/uwb_app.c b/keil/uwb_app.c
index 9fc1032..bc7e8de 100644
--- a/keil/uwb_app.c
+++ b/keil/uwb_app.c
@@ -8,7 +8,13 @@
 #include "dw_app_anchor.h"
 #include "global_param.h"
 #include "board.h"
+#include "lora_3029.h"
 
+#define TAG_KEEPTIMES           30
+#define REPORT_TAG_KEEPTIMES     1
+
+#define GROUP_NUM   3
+uint16_t group_min_dist[GROUP_NUM+1];
 
 extern int simple_main(void);
 extern int temp_main(void);
@@ -25,7 +31,7 @@
 
 //resp变量
 static uint8_t frame_seq_nb2,battary,button,rec_nearbase_num,ancidlist_num;
-static uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS];
+uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS];
 static int16_t rec_ancdistlist[TAG_NUM_IN_SYS];
 extern uint8_t group_id;
 static uint16_t anc_id_recv,tag_id_recv;
@@ -245,6 +251,7 @@
         temp_count= phy_timer_count_get();
         temp_internal=temp_count;
         resp_tx_num++;
+			  //gpio_pin_clr(IO_PIN_5);
         //LOG_INFO(TRACE_MODULE_APP, "poll_rx_num is %d,resp_tx_num is %d\r\n",poll_rx_num,resp_tx_num);
     }
 }
@@ -301,20 +308,51 @@
         ts2 >>= 8;
     }
 }
-
+uint8_t report_ancnum;
+uint16_t report_ancdist[ANC_MAX_NUM],report_ancid[ANC_MAX_NUM];
 void TagListUpdate(void)
 {
-    uint8_t i,j=0;
-    for(i=0; i<anchordata_num; i++)
+    uint16_t i,j=0,k=0,temp[TAG_NUM_IN_SYS];
+    for(i=0; i<taglist_num; i++)
     {
-        if(tagofflinetime[i]++<QUIT_SLOT_TIME)
+        if(tagofflinetime[i]++<REPORT_TAG_KEEPTIMES)
         {
-            anchordata_id[j]=anchordata_id[i];
+            report_ancid[k]=tagid_list[i];
+            report_ancdist[k++]=tagdist_list[i];
+        }
+        if(tagofflinetime[i]++<TAG_KEEPTIMES)
+        {
+            tagid_list[j]=tagid_list[i];
+            tagdist_list[j] = tagdist_list[i];
             tagofflinetime[j++]=tagofflinetime[i];
         }
     }
-    anchordata_num=j;
+    report_ancnum = k;
+    taglist_num=j;
 }
+
+//void TagListUpdate(void)
+//{
+//    uint8_t i,j=0,k=0;
+//    for(i=0; i<anchordata_num; i++)
+//    {
+//        if(tagofflinetime[i]++<QUIT_SLOT_TIME)
+//        {
+//            anchordata_id[j]=anchordata_id[i];
+//            tagofflinetime[j++]=tagofflinetime[i];
+//        }
+//				//标签存活时间
+//				if(tagofflinetime[i]++<TAG_KEEPTIMES)
+//        {
+//            tagid_list[k]=tagid_list[i];
+//            tagdist_list[k] = tagdist_list[i];
+//            tagofflinetime[k++]=tagofflinetime[i];
+//        }
+//    }
+//    anchordata_num=j;
+//		taglist_num=k;
+//}
+//static uint8_t tagofflinetime[ANC_MAX_NUM];
 int flag1=0;
 uint32_t temp_count7;
 uint32_t timeceshi1;
@@ -356,9 +394,10 @@
 //    temp_count1=phy_timer_count_get();
                 
     while(mac_is_busy());
+		tagofflinetime[taglist_pos] = 0;
     gpio_pin_clr(SCL_PIN);
 }
-uint16_t uwb_searchcount,range_timeout_us = 1700;
+uint16_t uwb_searchcount,range_timeout_us = 2000000;
 uint8_t flag_recsuccess;
 
 extern uint8_t g_start_send_flag,search_open_flag = 1,link_success_flag;
@@ -370,54 +409,19 @@
 uint32_t UWB_shoudao_count=0;
 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;
-    // The following peripherals will be initialized in the uwb_open function
-    // phy/mac/aes/lsp/phy timers initialized
-//    uwb_open();
 
-////    // Set calibration parameters
-//    uwb_calibration_params_set(config.phy_cfg.ch_num);
-
-//    // 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,
-//    };
-//    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);
-
-//    ranging_frame_type_set(config.phy_cfg.sts_pkt_cfg);
-
-    // Register rx interrupt callback function
-//    mac_register_process_handler(tx_int_callback, rx_int_callback);
-
+    mac_register_process_handler(tx_int_callback, rx_int_callback);
     receive_flag = 0;
 		flag_recsuccess = 0;
-//    temp_count3=phy_timer_count_get();
-    //gpio_pin_set(SCL_PIN);
-		time_count_dkjs=phy_timer_count_get();
-		gpio_pin_set(IO_PIN_5);//测试
-//		gpio_pin_clr(IO_PIN_5);
+
     uwb_rxflag=uwb_rx(0, 0, range_timeout_us);//开启接收
-//		gpio_pin_clr(IO_PIN_5);//测试
-		#ifdef DEBUG_BOXING
-//		gpio_pin_clr(IO_PIN_5);//测试
-//		gpio_pin_set(IO_PIN_5);//测试
-		#endif
-//		#ifdef DEBUG_BOXING
-//		gpio_pin_set(IO_PIN_5);//测试
-//	  #endif
-//	  #ifdef DEBUG_BOXING
-//		gpio_pin_set(IO_PIN_5);//测试
-//		#endif
+
     uwb_rxflag_num1++;
   //  while(mac_is_busy());
   //  temp_count2=phy_timer_count_get();
@@ -440,9 +444,9 @@
     if(receive_flag==1)//成功接收
     {
 		time_count_sdsj=phy_timer_count_get();
-			UWB_shoudao_count++;
-//					gpio_pin_set(IO_PIN_5);//测试
-		gpio_pin_clr(IO_PIN_5);
+//			 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);//测试
@@ -450,9 +454,9 @@
 //            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包
+        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];//获取包序
@@ -464,11 +468,13 @@
             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);
+            // 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];
@@ -482,14 +488,22 @@
             }
             for(i=0; i<rec_nearbase_num; i++)
             {
-                memcpy(&tempid,&rx_buf[FZ_NEARBASEID_INDEX+i*2],2);
-                if(tempid==dev_id)//也是比id如果有就更新没有就抢占
-                {
-                    seize_anchor=0;  //非抢占。已存在列表中
-                    Anchor_RecNearPoll(i);
-								  	UWB_qiangzhanfachu_count++;
-                    break;
-                }
+							    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)
@@ -501,6 +515,7 @@
 
             }
 						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);
        
@@ -508,12 +523,13 @@
       //  uwb_rxflag=uwb_rx(0, 0, range_timeout_us);
     }    
 		#ifdef DEBUG_BOXING
-		gpio_pin_clr(IO_PIN_5);//测试
+//		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

--
Gitblit v1.9.3