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 |  190 +++++++++++++++++++++++++++++++----------------
 1 files changed, 126 insertions(+), 64 deletions(-)

diff --git a/keil/uwb_app.c b/keil/uwb_app.c
index c0ba9b6..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;
@@ -60,7 +66,7 @@
 #define RANGING_PERIOD_MS (1000)
 
 /* This is the delay from Frame RX POLL frame to send RESP Frame */
-#define POLL_RX_TO_RESP_TX_DLY_US 670U //yuan750 7500Haoyong
+#define POLL_RX_TO_RESP_TX_DLY_US 750U //yuan750 7500Haoyong
 
 #define RESP_TX_TO_FINAL_RX_DLY_US 500U
 
@@ -79,7 +85,7 @@
 /* RX window open in advance */
 #define RX_WIN_IN_ADVANCE_US (150)
 
-#define DELAY_BETWEEN_TWO_FRAME_UUS 400
+#define DELAY_BETWEEN_TWO_FRAME_UUS 600
 
 /* Field index in frame */
 #define MSG_SEQ_NUM_IDX 2
@@ -107,9 +113,9 @@
     .phy_cfg.mean_prf = MEAN_PRF_64M,         /* Data rate 6.8M                            */
     .phy_cfg.data_bit_rate = DATA_BR_6M8,     /* data rate 6.8M.                           */
     .phy_cfg.sync_sym = PREAM_LEN_128,        /* Preamble duration, length of preamble 128 */
-    .phy_cfg.sfd_sym = BPRF_NSFD2_8,          /* Identifier for SFD sequence               */
+    .phy_cfg.sfd_sym = NON_STD_NSFD5_8,          /* Identifier for SFD sequence               */
     .phy_cfg.ranging_bit = 1,                 /* ranging bit set.                          */
-    .phy_cfg.trx_mode = TRX_MODE_15_4Z_BPRF,  /* IEEE802.15.4z - BPRF mode                 */
+    .phy_cfg.trx_mode = TRX_MODE_15_4A,  /* IEEE802.15.4z - BPRF mode                 */
     .phy_cfg.sts_pkt_cfg = STS_PKT_CFG_0,     /* SP0 Frame                                 */
     .phy_cfg.sts_segnum = STS_SEGNUM_BPRF_1,  /* Number of STS segments in the frame       */
     .phy_cfg.sts_seglen = STS_SEGLEN_BPRF_64, /* Number of symbols in an STS segment       */
@@ -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;
@@ -349,51 +387,41 @@
     temp_resp_i64=resp_tx_ts_i64;
 //    temp_count3= phy_timer_count_get();
 //                timeceshi2=phy_timer_count_get();
+		//uint32_t time_add=1000;
+		//resp_tx_en_start_u32=resp_tx_en_start_u32+time_add;	
+		temp_count3= phy_timer_count_get();								
     flag1=uwb_tx(send_buffer, 40,1 ,resp_tx_en_start_u32);//立即发送测试size大小
 //    temp_count1=phy_timer_count_get();
-                temp_count3= phy_timer_count_get();
+                
     while(mac_is_busy());
+		tagofflinetime[taglist_pos] = 0;
     gpio_pin_clr(SCL_PIN);
 }
-uint16_t uwb_searchcount,range_timeout_us = 5000;
+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;
 uint16_t uwb_rxflag;
 uint16_t uwb_rxflag_num;
 uint16_t uwb_rxflag_num1;
+uint32_t time_count_dkjs=0;
+uint32_t time_count_sdsj=0;
+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);
+
     uwb_rxflag=uwb_rx(0, 0, range_timeout_us);//开启接收
+
     uwb_rxflag_num1++;
   //  while(mac_is_busy());
   //  temp_count2=phy_timer_count_get();
@@ -403,77 +431,108 @@
 	if(end_receive_count>=UINT32_MAX)
 	{end_receive_count-=UINT32_MAX;}
 	current_count=phy_timer_count_get();
-		while(current_count<end_receive_count||current_count>end_receive_count+HALF_SECOND_TIME)//循环接受包体,若为124.8K则是+62400000
-		{
-			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)
+            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包
-        {   flag_recsuccess = 1;
+        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);
+            // 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)//也是比id如果有就更新没有就抢占
-                {
-                    seize_anchor=0;  //非抢占。已存在列表中
-                    Anchor_RecNearPoll(i);
-                    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)
             {
+							
                 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);
-//        break;
+       
 				}
-        uwb_rxflag=uwb_rx(0, 0, range_timeout_us);
-    } 
-    else {
-            delay_us(1);
-    uwb_rx_force_off(1);
-			uwb_rxflag=uwb_rx(0, 0, range_timeout_us);
-        uwb_rxflag_num++;
-    }
-	}
+      //  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));//测试
@@ -486,7 +545,10 @@
 //            search_open_flag = 1;
 //        }
 //			}
-    gpio_pin_clr(SCL_PIN);
+//		#ifdef DEBUG_BOXING
+//		gpio_pin_clr(IO_PIN_5);//测试
+////		gpio_pin_set(IO_PIN_5);//测试
+//		#endif    
 }
 int Uwbinit(void)
 {

--
Gitblit v1.9.3