From 59a4e01d92da432e9736b24c085089cd31963833 Mon Sep 17 00:00:00 2001
From: zhangbo <zhangbo@qq.com>
Date: 星期三, 21 五月 2025 15:19:22 +0800
Subject: [PATCH] 修改了串口读取的bug,现在是通过飞线控制的 PCA蓝牙IRQ拉低,修改灯的闪灯逻辑,

---
 keil/uwb_app.c |   47 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/keil/uwb_app.c b/keil/uwb_app.c
index 0e87f06..13b32ec 100644
--- a/keil/uwb_app.c
+++ b/keil/uwb_app.c
@@ -12,7 +12,7 @@
 #include "PCA9555.h"
 
 #define TAG_KEEPTIMES           20
-#define REPORT_TAG_KEEPTIMES     1
+#define REPORT_TAG_KEEPTIMES     20
 
 #define GROUP_NUM   3
 uint16_t group_min_dist[GROUP_NUM+1];
@@ -326,6 +326,7 @@
 uint16_t ERR_RX_NUM;
 uint8_t send_qiangzhan_NUM;
 uint8_t resp_tx_flag;
+uint32_t temp_c[10];
 static void rx_int_callback(struct MAC_HW_REPORT_T *rx_report)
 {		uint8_t valid_sts=0;
     // Power off radio
@@ -341,18 +342,19 @@
         memcpy(rx_buf, rx_report->pkt_data, rx_length);
         memcpy(&rx_rpt, rx_report, sizeof(struct MAC_HW_REPORT_T));
         /* Calculate rx timestamp */
-        temp_count= phy_timer_count_get();
+        
         poll_rx_en_start_u32 = rx_rpt.timestamp - phy_shr_duration();
         poll_rx_ts_i64 = ranging_rx_time_correct(&rx_rpt);
         poll_rx_num++;
 				REV_RX_NUM++;
         rssi = rx_report->rssi;
         receive_flag=1;
+				temp_count= phy_timer_count_get();
 				Anchor_App();
-        if(resp_tx_flag==0)
-        {
-				OpenUWB();
-        }			
+			 if(resp_tx_flag==0)
+			{
+			  OpenUWB();
+			}
 			#ifdef STS_MODE
 				valid_sts= sts_valid_check();
       if (valid_sts)
@@ -386,8 +388,14 @@
 
 				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
 }
 uint16_t TX_CALL_POLL_NUM;
 /* TX done process handler. */
@@ -395,6 +403,11 @@
 {
     // 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)
     {
@@ -402,10 +415,8 @@
 			
         temp_count= phy_timer_count_get();
         temp_internal=temp_count;
-        
+        OpenUWB();
 			  TX_CALL_POLL_NUM++;
-			
-			  OpenUWB();
 //			  if(send_qiangzhan_NUM)
 //				{
 //				send_qiangzhan_NUM=0;
@@ -527,7 +538,7 @@
 uint16_t response_num;
 uint8_t Anchor_RecNearPoll(uint8_t ancrec_nearbasepos)//根据自己是否为新基站定制消息去发送,根据是否抢占判断
 {
-    temp_count2=poll_rx_en_start_u32;
+//    temp_count2=phy_timer_count_get();
     memcpy(&send_buffer[GROUP_ID_IDX],&group_id,1);//组id
     memcpy(&send_buffer[ANCHOR_ID_IDX],&dev_id,2);//自身id
     memcpy(&send_buffer[TAG_ID_IDX],&tag_id_recv,2);//接受者id
@@ -546,7 +557,7 @@
 //				//这里应该有问题问一下钟工
 //		}//此处设置绝对时间将poll u32改为phy_timer_count_get()
 		position=ancrec_nearbasepos;
-	  temp_count1=phy_timer_count_get();
+	 
 		resp_tx_en_start_u32 = poll_rx_en_start_u32+US_TO_PHY_TIMER_COUNT(POLL_RX_TO_RESP_TX_DLY_US)+ancrec_nearbasepos*US_TO_PHY_TIMER_COUNT(DELAY_BETWEEN_TWO_FRAME_UUS);//加入帧间隔
 //    resp_tx_en_start_u32 = temp_count1+US_TO_PHY_TIMER_COUNT(POLL_RX_TO_RESP_TX_DLY_US)+ancrec_nearbasepos*US_TO_PHY_TIMER_COUNT(DELAY_BETWEEN_TWO_FRAME_UUS);//加入帧间隔
     resp_tx_ts_i64 = ranging_tx_time_correct(resp_tx_en_start_u32 + phy_shr_duration());//修正时间戳
@@ -555,7 +566,7 @@
     resp_msg_set_ts(&send_buffer[RESP_MSG_RESP_TX_TS_IDX], resp_tx_ts_i64);//此处时间戳int64直接转换为uint64不知道会不会有错误
     memcpy(&send_buffer[RESP_MSG_ANC_DISTOFFSET],&disoffset,2);//差个修正offset,修正有符号但是这个com表为无符号的,传过去直接赋给Int16_t相当于还原了
     temp_resp_i64=resp_tx_ts_i64;
-    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;
@@ -700,10 +711,12 @@
 
 //uint16_t REV_POLL_NUM;
 //uint16_t REPLY_POLL_NUM;
+extern uint8_t uwbled,gpsled,loraled,powerled;
 int Anchor_App(void)
 {
 				uint8_t i;
 				uint16_t tempid;
+	temp_count1=phy_timer_count_get();
 			if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)//判断是否是和自己是同一组通讯的且为poll包
         {    flag_recsuccess = 1;
 //						wltag_state=RANGE;//成功后从search切换为range
@@ -716,11 +729,14 @@
             battary = rx_buf[BATTARY_IDX];
             rec_nearbase_num=rx_buf[FZ_NEARBASENUM_INDEX];  //标签传过来的他与基站交互的基站id数目
             memcpy(&tag_id_recv,&rx_buf[TAG_ID_IDX],2);
+					temp_count2=phy_timer_count_get();
             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);
 						taglist_pos=CmpTagInList(tag_id_recv);
-						UWB_LED_ON;
+					//	UWB_LED_ON;
+					  uwbled=1;
+					 temp_count3=phy_timer_count_get();
                 if(taglist_num>=ANC_MAX_NUM)
 										return 0;
 								 for(i=0; i<rec_nearbase_num; i++)
@@ -739,6 +755,7 @@
 												break;
 										}
 								}
+								 
 								 if((i==rec_nearbase_num&&taglist_pos==taglist_num)||(rec_nearbase_num==0&&!ExistInTagList(tag_id_recv)))//当基站不在标签列表中,标签也不在基站列表中时,随机找个时间片回复基站。
                 {
                        Anchor_RecNearPoll(rec_nearbase_num);

--
Gitblit v1.9.3