From 63bf8ea65ca11349d5fae93580f91a87d3633dba Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期五, 14 三月 2025 18:45:47 +0800
Subject: [PATCH] 工卡改为通道9,加入ntrip跟tcp。ntrip不能用  shell不能用

---
 keil/uwb_app.c |  114 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 75 insertions(+), 39 deletions(-)

diff --git a/keil/uwb_app.c b/keil/uwb_app.c
index d58da14..b4570dd 100644
--- a/keil/uwb_app.c
+++ b/keil/uwb_app.c
@@ -37,7 +37,7 @@
 extern uint8_t group_id;
 static uint16_t anc_id_recv,tag_id_recv;
 static int16_t rec_antdelay;
-extern uint32_t dev_id;
+extern uint16_t dev_id;
 static uint16_t taglist_pos,tmp_time;
 extern uint16_t tag_frequency;
 extern uint16_t disoffset;
@@ -54,6 +54,7 @@
 static uint8_t tagofflinetime[TAG_NUM_IN_SYS];
 uint32_t temp_count=0;
 uint32_t temp_count1=0;
+uint32_t temp_endcount1=0;
 uint32_t temp_count2=0;
 uint32_t temp_count3=0;
 uint32_t temp_count7=0;
@@ -110,7 +111,7 @@
 #define MSG_COMMON_LEN 10
 
 #define UWB_DELAY_TIME_US 496
-static uint8_t receive_flag=0;
+uint8_t receive_flag=0;
 struct mk_uwb_configure
 {
     uint8_t phy_work_mode; /* PHY_TX / PHY_RX / PHT_TX|PHY_RX */
@@ -136,7 +137,7 @@
 #ifdef DW1000
 static struct mk_uwb_configure config = {
     .phy_work_mode = (uint8_t)(PHY_TX | PHY_RX),
-    .phy_cfg.ch_num = 5,                      /* Channel number.                           */
+    .phy_cfg.ch_num = 9,                      /* Channel number.                           */
     .phy_cfg.code_index = 9,                  /* TRX preamble code                         */
     .phy_cfg.mean_prf = MEAN_PRF_64M,         /* Mean prf 64/128/256M                      */
     .phy_cfg.data_bit_rate = DATA_BR_6M8,     /* Data rate 6.8M                            */
@@ -282,15 +283,21 @@
 uint32_t range_timeout_us = 1000000;//yuan5000
 uint8_t flag_temp2,flag_temp1;
 uint16_t uwb_losttimer;
-uint32_t rxnum;
+uint8_t rxnum;
+uint8_t receive_error_flag;
+uint8_t rxnumoknum,rxnumerrornum;
+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
     power_off_radio();
     rxnum++;
+    
     /** UWB RX success */
     if (rx_report->err_code == UWB_RX_OK)
-    {
+    {   
+        resp_tx_flag=0;
+        rxnumoknum++;
         /* Received data does not contain FCS */
         rx_length = rx_report->pkt_len;
         memcpy(rx_buf, rx_report->pkt_data, rx_length);
@@ -303,21 +310,25 @@
         rssi = rx_report->rssi;
         receive_flag=1;
 				Anchor_App();
-			#ifdef STS_MODE
-				valid_sts= sts_valid_check();
-      if (valid_sts)
-      {
-				aoa_calculate(&elevation, &azimuth);
-				aoa_fom_get(NULL, &fom);
-//				float pdoa[3];
-//				pdoa[0] = pdoa_select_get(0, 3);
-//				pdoa[1] = pdoa_select_get(1, 3);
-//				pdoa[2] = pdoa_select_get(2, 3);
-//				LOG_INFO(TRACE_MODULE_APP, "PDOA: %f %f %f\r\n", pdoa[0], pdoa[1], pdoa[2]);
+        if(resp_tx_flag==0)
+        {
+        OpenUWB();
+        }
+//			#ifdef STS_MODE
+//				valid_sts= sts_valid_check();
+//      if (valid_sts)
+//      {
+//				aoa_calculate(&elevation, &azimuth);
+//				aoa_fom_get(NULL, &fom);
+////				float pdoa[3];
+////				pdoa[0] = pdoa_select_get(0, 3);
+////				pdoa[1] = pdoa_select_get(1, 3);
+////				pdoa[2] = pdoa_select_get(2, 3);
+////				LOG_INFO(TRACE_MODULE_APP, "PDOA: %f %f %f\r\n", pdoa[0], pdoa[1], pdoa[2]);
 
-					sts_rssi = sts_rssi_output_get();
-			}
-			#endif
+//					sts_rssi = sts_rssi_output_get();
+//			}
+//			#endif
     }
     else
     {
@@ -327,13 +338,15 @@
         /* UWB_BD_ERR      Preamble detection error  */
         /* UWB_TO_ERR      Receive timeout           */
         /* UWB_STS_ERR     STS error                 */
+        rxnumerrornum++;
 			        temp_count= phy_timer_count_get();
         memcpy(&rx_rpt, rx_report, sizeof(struct MAC_HW_REPORT_T));
         rx_length = 0;
-			//	OpenUWB();//再次开启UWB接收
+        receive_error_flag=1;
+		OpenUWB();//再次开启UWB接收
     }
 //    CloseUWB();
-	OpenUWB();//再次开启UWB接收
+//	OpenUWB();//再次开启UWB接收
 //    Uwb_init();
 //    OpenUWB();
 }
@@ -350,13 +363,15 @@
         temp_count= phy_timer_count_get();
         temp_internal=temp_count;
         resp_tx_num++;
-		//		OpenUWB();//再次开启UWB接收
+//		OpenUWB();//再次开启UWB接收
         //LOG_INFO(TRACE_MODULE_APP, "poll_rx_num is %d,resp_tx_num is %d\r\n",poll_rx_num,resp_tx_num);
     }
+    OpenUWB();//再次开启UWB接收
 }
 uint32_t start_receive_count,end_receive_count,poll_timeout,current_count,temp_resp;
  uint16_t anchordata_id[TAG_NUM_IN_SYS],anchordata_dist[TAG_NUM_IN_SYS];
 static uint8_t anchordata_bat[TAG_NUM_IN_SYS];
+static int8_t anchor_rssi[TAG_NUM_IN_SYS];
 uint8_t anchordata_num = 0;
 static int16_t tagdist_list[TAG_NUM_IN_SYS];
 uint16_t random_time;
@@ -474,6 +489,7 @@
             tagid_list[j]=tagid_list[i];
             tagdist_list[j] = tagdist_list[i];
 						anchordata_bat[j]=anchordata_bat[i];//电量随之更新
+            anchor_rssi[j]=anchor_rssi[i];
             tagofflinetime[j++]=tagofflinetime[i];
         }
 		}
@@ -481,6 +497,7 @@
 }
 
 uint8_t position;
+uint8_t resp_tx_error;
 uint8_t Anchor_RecNearPoll(uint8_t ancrec_nearbasepos)//根据自己是否为新基站定制消息去发送,根据是否抢占判断
 {
     temp_count2=poll_rx_en_start_u32;
@@ -490,20 +507,8 @@
     memcpy(&send_buffer[TAG_ID_IDX],&tag_id_recv,2);//接受者id
     send_buffer[MESSAGE_TYPE_IDX]=MBX_RESPONSE;
 
-//    if(rec_nearbase_num == ancrec_nearbasepos)//抢占模式自己为新基站
-//    {
-//        random_time = (phy_timer_count_get()%100);//多基站抢占一个位置时避免一个也收不到的情况就每一个随机错开几十uS
-//        //resp_tx_time = (poll_rx_ts+((random_time+rec_nearbase_num*20 + POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。
-//        // (resp_tx_en_start_u32) is the moment when TX enable
-//        resp_tx_en_start_u32 = phy_timer_count_get()+US_TO_PHY_TIMER_COUNT(20*rec_nearbase_num+POLL_RX_TO_RESP_TX_DLY_US+rec_nearbase_num*DELAY_BETWEEN_TWO_FRAME_UUS);//后面的需要根据已有基站数量进行更改,如果是抢占自己最后一个回复,要有底数
-//				
-//		} else {
-//        //resp_tx_time = (poll_rx_ts + ((rec_nearbase_num*20+POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。
-//       resp_tx_en_start_u32 = phy_timer_count_get()+US_TO_PHY_TIMER_COUNT(20*rec_nearbase_num+POLL_RX_TO_RESP_TX_DLY_US+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS);//后面的需要根据已有基站数量进行更改,如果是抢占自己最后一个回复,要有底数
-//				//这里应该有问题问一下钟工
-//		}//此处设置绝对时间将poll u32改为phy_timer_count_get()
-		position=ancrec_nearbasepos;
-		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);//加入帧间隔
+    position=ancrec_nearbasepos;
+    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_ts_i64 = ranging_tx_time_correct(resp_tx_en_start_u32 + phy_shr_duration());//修正时间戳
     /* Write all timestamps in the final message. See NOTE 8 below. */
     resp_msg_set_ts(&send_buffer[RESP_MSG_POLL_RX_TS_IDX], poll_rx_ts_i64);
@@ -512,9 +517,19 @@
     temp_resp_i64=resp_tx_ts_i64;
     temp_count3= phy_timer_count_get();
     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();
-    //while(mac_is_busy());
+//    temp_endcount1=phy_timer_count_get()+MS_TO_PHY_TIMER_COUNT(10);
+//    while(mac_is_busy())
+//    {
+//       temp_count1=phy_timer_count_get();
+//        if(temp_count1>temp_endcount1)
+//        {
+//        resp_tx_error++;
+//        break;
+//        }
+//    }
     //gpio_pin_clr(SCL_PIN);
 }
 
@@ -613,15 +628,19 @@
             {
                 uint16_t id,dist;
                 uint8_t bat;
+                int8_t rssi1;
                 id = tagid_list[j];
                 dist = tagdist_list[j];
                 bat = anchordata_bat[j];
+                rssi1=anchor_rssi[j];
                 tagid_list[j] = tagid_list[j+1];
                 tagdist_list[j] = tagdist_list[j+1];
                 anchordata_bat[j] = anchordata_bat[j+1];
+                anchor_rssi[j] = anchor_rssi[j+1];
                 tagid_list[j+1] = id;
                 tagdist_list[j+1] = dist;
                 anchordata_bat[j+1] = bat;
+                anchor_rssi[j+1] = rssi1;
             }
         }
     
@@ -647,6 +666,7 @@
 					usart_send[6] = tagseq;
 					usart_send[7] = (tagseq++)>>8;
 					usart_send[8] = bat_percent;
+//                    usart_send[8] = rxnum;
 					usart_send[9] = userkey_state|0<<1|0<<2|0<<5|uwb_state<<6;
 				//	memcpy(&usart_send[10],&rec_tagheight,2);
 					usart_send[12] = 0;
@@ -662,10 +682,21 @@
 					memcpy(&usart_send[17+5*taglist_num],&checksum,2);
 					HexToAsciiSendUDP(usart_send,19+5*taglist_num);
                     taglist_num = 0;                    
+//                    rxnum=0;
 }
 void UWBIdleTask(void)
 {
-
+//    if(receive_flag)
+//    {
+//    receive_flag=0;
+//    Anchor_App();
+//    OpenUWB();
+//    }
+//    if(receive_error_flag)
+//    {
+//    receive_error_flag=0;
+//    OpenUWB();
+//    }
 	if(HIDO_TimerGetTick()-uwbtasktimer >=1)
 	{
 		uwbtasktimer = HIDO_TimerGetTick();
@@ -721,7 +752,7 @@
 //            }
 								taglist_pos=CmpTagInList(tag_id_recv);
                 if(taglist_num>=ANC_MAX_NUM)
-										return 0;
+					return 0;
 								 for(i=0; i<rec_nearbase_num; i++)
 								{
 										memcpy(&tempid,&rx_buf[FZ_NEARBASEID_INDEX+i*2],2);
@@ -730,6 +761,7 @@
 												Anchor_RecNearPoll(i);
 												tagdist_list[taglist_pos]=rec_ancdistlist[i];
 												anchordata_bat[taglist_pos] = battary;//保存该基站电量
+                                                anchor_rssi[taglist_pos]=rssi;
 												if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中
 												{   //tempid==dev_id 说明基站下发测距报文有这个标签的信息
 														taglist_num++;          //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况
@@ -744,6 +776,10 @@
                        Anchor_RecNearPoll(rec_nearbase_num);
                 }
 				}
+//                else
+//                {
+//                OpenUWB();
+//                }
 				
 				
 }

--
Gitblit v1.9.3