From 3dc93e0626cf3dcf3c265f902da8a7de5070f083 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期一, 13 五月 2024 17:31:42 +0800
Subject: [PATCH] Merge branch '免布线基站' of http://47.108.70.204:60062/r/XRange_Tag into 免布线基站

---
 Src/application/dw_app.c |  119 +++++++++++++++++++++++++++++++----------------------------
 1 files changed, 62 insertions(+), 57 deletions(-)

diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c
index 18de589..c8086cd 100644
--- a/Src/application/dw_app.c
+++ b/Src/application/dw_app.c
@@ -70,8 +70,15 @@
 #define FINAL_MSG_RESP_RX_TS_IDX 14
 #define FINAL_MSG_FINAL_TX_TS_IDX 18
 #define FINAL_MSG_TS_LEN 4
+
+//#define _UWB_4G
+
 static dwt_config_t config = {
-	5,               /* Channel number. */
+#ifdef _UWB_4G
+	2,               /* Channel number. */
+#else
+    5,
+#endif
 	DWT_PRF_64M,     /* Pulse repetition frequency. */
 	DWT_PLEN_64,    /* Preamble length. */
 	DWT_PAC8,        /* Preamble acquisition chunk size. Used in RX only. */
@@ -321,7 +328,7 @@
 int32_t test2;
 uint16_t u16_nearbase_distlist[MAX_NEARBASE_NUM];
 uint8_t get_newdist,notenoughdist_count;
-void SetANCTimestap(uint8_t i,uint8_t* pollrx,uint8_t* resptx,uint32_t resprx,uint8_t* distoffset)
+void SetANCTimestap(uint8_t i,uint8_t* pollrx,uint8_t* resptx,uint32_t resprx,uint8_t* distoffset)  //写入时间戳信息
 {
     memcpy(&anc_pollrx[i],pollrx,4);
     memcpy(&anc_resptx[i],resptx,4);
@@ -329,7 +336,7 @@
     memcpy(&anc_distoffset[i],distoffset,2);
     anc_clockoffset[i] = test2;
 }
-void CalculateDists(void)
+void CalculateDists(void)   //计算距离
 {
     for(int i=0;i<MAX_NEARBASE_NUM;i++)
     {
@@ -338,7 +345,11 @@
       {
 
          // exsistbase_list[i]--;
-          clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_5 / 1.0e6) ;
+#ifdef _UWB_4G
+            clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_2 / 1.0e6) ;
+#else
+            clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_5 / 1.0e6) ;
+#endif
           rtd_init = tag_resprx[i] - poll_tx_ts;
           rtd_resp = anc_resptx[i] - anc_pollrx[i];
           tof = ((rtd_init - rtd_resp * (1 - clockOffsetRatio)) / 2.0) * DWT_TIME_UNITS;
@@ -346,10 +357,39 @@
           if(distance>-10&&distance<1000)
             nearbase_distlist[i] = distance*100+anc_distoffset[i];
       }else{
-         // nearbase_distlist[i] = 0x1ffff;
+          nearbase_distlist[i] = 0x1ffff;
       }
     
     }
+}
+extern uint8_t module_power,imu_enable,motor_enable;
+void Registor_Poll(void)
+{
+	static u8 regpoll_count=0;
+    u8 timeout;
+		
+		tx_near_msg[MESSAGE_TYPE_IDX] = MBX_REG;
+        tx_near_msg[REGP_TAGSTATE_INDEX] = !GET_USERKEY<<2|imu_enable<<1|motor_enable;
+		tx_near_msg[REGP_FREQUENCY_INDEX] = bat_percent;
+		tx_near_msg[REGP_POWER_INDEX] = module_power;
+		memcpy(&tx_near_msg[REGP_VERSION_INDEX],&g_com_map[VERSION],2);	
+		memcpy(&tx_near_msg[REGP_IMUTHRES_INDEX],&g_com_map[GROUP_ID],2);
+		memcpy(&tx_near_msg[REGP_NOMOVESLEEPTIME_INDEX],&g_com_map[DIST_OFFSET],2);
+        memcpy(&tx_near_msg[REGP_HEIGHTOFFSET_INDEX],&g_com_map[MAX_REPORT_ANC_NUM],2);
+		dwt_writetxdata(23, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
+		dwt_writetxfctrl(23, 0);//设置超宽带发送数据长度
+		dwt_starttx(DWT_START_TX_IMMEDIATE);//开启发送,发送完成后等待一段时间开启接收,等待时间在dwt_setrxaftertxdelay中设置
+        start_count=HAL_LPTIM_ReadCounter(&hlptim1);
+        timeout=50;
+        end_count=start_count+(timeout<<2);
+        while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_TXFRS)))//不断查询芯片状态直到成功接收或者发生错误
+        { 
+            current_count=HAL_LPTIM_ReadCounter(&hlptim1);
+           if(current_count>=end_count&&current_count<end_count+15000)
+								break;
+            
+        };	
+               
 }
 float range_lost_time = 0;
 u16 rec_nearbaseid,rec_nearbasepos;
@@ -369,12 +409,8 @@
 	{
 		nearbase_num = MAX_NEARBASE_NUM-1;
 	}
-//	HAL_GPIO_WritePin(LED0_GPIO, GPIO_PIN_9, GPIO_PIN_SET);
-//	last_nearbase_num=next_nearbase_num;
-//	nearbase_num=next_nearbase_num;
 	recbase_num=0;
-//	motor_state=0;
-    for(uint8_t i=0;i<nearbase_num;i++)
+    for(uint8_t i=0;i<nearbase_num;i++)   //标签距离32位转成16位
     {
         u16_nearbase_distlist[i] = nearbase_distlist[i];
     }
@@ -419,7 +455,7 @@
 								
 								dwt_forcetrxoff();
 								flag_rxon=0;
-                                if(flag_ancreadpara)
+                                if(flag_ancreadpara)   //只有在读取参数的时候需要回复
                                 {
                                     u16 calCRC;
                                   tx_near_msg[MESSAGE_TYPE_IDX] = MBX_PRAAREPLY;  
@@ -494,11 +530,6 @@
 										if(sync_timer>=1010)
 											{sync_timer=0;}
 									}
-								//	TIM3->CNT=tmp_time;
-//									if(tagslotpos>max_slotpos)
-//										tagslotpos=tagslotpos%(max_slotpos+1);
-//										tyncpoll_time=(tagslotpos-1)*slottime;
-									////////////////////////////
 									rec_nearbasepos=0;
 									exsistbase_list[rec_nearbasepos]=KEEP_TIMES;
 
@@ -524,28 +555,6 @@
 									dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
 									flag_getresponse=1;
 									memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
-									
-								
-									//时间同步
-//									ancsync_time=((sync_timer)*1000+tmp_time);	
-//									last_slotnum=current_slotnum;
-//									current_slotnum=((float)sync_timer/g_com_map[COM_INTERVAL])+1;
-//									if(current_slotnum==last_slotnum-1)
-//									{flag_getresponse=1;}
-//									lastsync_timer=sync_timer;
-//									offsettimeus=ancsync_time-current_count*LPTIMER_LSB+offset;
-//									SetNextPollTime(tyncpoll_time);
-//									if(rec_remotepara_state==1)
-//									{
-//                             			memcpy(rec_remotepara,&rx_buffer[REMOTEPARA_INDEX],REMOTEPARA_LEN);
-//										memcpy(&g_com_map[COM_INTERVAL],&rec_remotepara[0],8);
-//										memcpy(&g_com_map[POWER],&rec_remotepara[8],10);
-//                                        if(g_com_map[COM_INTERVAL]>0&&g_com_map[COM_INTERVAL]<1000&&g_com_map[POWER]<67&&g_com_map[POWER]>0)
-//										{save_com_map_to_flash();
-//										delay_ms(100);										
-//                                        }
-//                                        NVIC_SystemReset();
-//									} 
 								}else{
 									rec_nearbasepos=FindNearBasePos(rec_nearbaseid);
 									SetANCTimestap(rec_nearbasepos,&rx_buffer[RESP_MSG_POLL_RX_TS_IDX],&rx_buffer[RESP_MSG_RESP_TX_TS_IDX],resp_rx_ts,&rx_buffer[RESP_MSG_ANC_DISTOFFSET]);
@@ -569,11 +578,6 @@
                
 									dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//将发送数据写入DW1000
 									dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
-								
-
-									//dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5
-								//	result=dwt_starttx(DWT_START_TX_DELAYED);//设定为延迟发送			
-									//dwt_writetxdata(4,&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos+1)*4], FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos+1)*4);//将发送数据写入DW1000
 								}								
 							}
 						}else{
@@ -629,25 +633,12 @@
 			}
 			
 			report_num=0;
-//            if(last_nearbase_num>4)
-//            {
-//                last_nearbase_num = 5;
-//            }
 	for (i=0;i<last_nearbase_num;i++)
 			{
 				nearbaseid_list[i]=true_nearbase_idlist[i];
 				nearbase_distlist[i]=true_nearbase_distlist[i];
                 exsistbase_list[i] = true_exsistbase_list[i];
 			}
-//            #ifdef USART_INTEGRATE_OUTPUT	
-//                usart_send[0] = 0x55;     
-//                usart_send[1] = 0xAA;              
-//				usart_send[2] = 4;//正常模式
-//				usart_send[3] = report_num*6+2;//正常模式
-//				checksum = Checksum_u16(&usart_send[2],report_num*6+2);
-//				memcpy(&usart_send[4+report_num*6],&checksum,2);
-//				USART_puts(usart_send,6+report_num*6);
-//			#endif
             
 	dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
 //HAL_GPIO_WritePin(LED0_GPIO, GPIO_PIN_9, GPIO_PIN_RESET);
@@ -689,7 +680,7 @@
         }
     }
 }
-
+u8 regpoll_count;
 u32 id;
 void Tag_App(void)//发送模式(TAG标签)
 {
@@ -708,6 +699,20 @@
     }
     delay_us(100);
 	g_Resttimer=0;
+    if(freqlost_count>FREQ_LOST_TIME)
+    {
+        if(regpoll_count++>11) //待机状态1分钟上传一次基站状态
+        {
+            regpoll_count = 0;
+            Registor_Poll();
+        }
+    }else{
+        if(regpoll_count++>59)//测距状态1分钟上传一次基站状态
+        {
+            regpoll_count = 0;
+            Registor_Poll();
+        }
+    }
 	NearPoll();
 	dwt_entersleep();
     bat_percent=Get_VDDVlotage();

--
Gitblit v1.9.3