From ae42ba04bfca83ddca9df9d41061a365d4f57618 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期五, 26 一月 2024 17:08:05 +0800
Subject: [PATCH] 加入GPS模块。加入低功耗串口

---
 Src/application/dw_ancapp.c |  461 +++++++++++++--------------------------------------------
 1 files changed, 104 insertions(+), 357 deletions(-)

diff --git a/Src/application/dw_ancapp.c b/Src/application/dw_ancapp.c
index f48f1d7..3b0a160 100644
--- a/Src/application/dw_ancapp.c
+++ b/Src/application/dw_ancapp.c
@@ -42,6 +42,7 @@
 #define RESP_MSG_ANC_DISTOFFSET  34
 #define MBX_ANC_NUM_IN_SYS       50
 #define QUIT_SLOT_TIME    5
+uint8_t lora_yingda_flag;
 static uint64_t resp_tx_ts;
 static uint64_t final_rx_ts;
 static uint32_t status_reg,resp_tx_time,tagpos_binary;
@@ -51,7 +52,8 @@
 static uint8_t flag_syncbase,sync_seq,synclost_timer,temp_nearbaspos;
 static uint16_t sync_timer;
 static uint8_t send_buffer[150];
-static uint8_t frame_seq_nb2,battary,button,ancidlist_num;
+static uint8_t battary,button,ancidlist_num;
+uint8_t frame_seq_nb2;
 uint8_t rec_nearbase_num;
 static uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS],rec_ancdistlist[TAG_NUM_IN_SYS];
 static int16_t rec_antdelay;
@@ -178,6 +180,7 @@
 u16 basesystimer,uwb_losttimer;
 uint8_t remotesend_state,remotesend_index;
 uint16_t random_time;
+u32 value;
 uint8_t Anchor_RecNearPoll(uint8_t ancrec_nearbasepos) //0 mainbase  1 first near_base
 {
     uint8_t motorstate;
@@ -193,47 +196,22 @@
     if(rec_nearbase_num == ancrec_nearbasepos)//抢占模式
     {
         random_time = (GetLPTime()%100);
-        	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_time = (poll_rx_ts+((/*value+*/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。
   
     }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_time = (poll_rx_ts + ((/*value+ */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。
     }
             dwt_setdelayedtrxtime(resp_tx_time);//设置Response发送时间T3
-			dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(rec_nearbase_num+1-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置发送完成后开启接收延迟时间
-			dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//接收超时时间
+			//dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(rec_nearbase_num+1-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置发送完成后开启接收延迟时间
+			//dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//接收超时时间
             resp_tx_ts = (((uint64_t)(resp_tx_time & 0xFFFFFFFEUL)) << 8) ;
 
             /* 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);
             resp_msg_set_ts(&send_buffer[RESP_MSG_RESP_TX_TS_IDX], resp_tx_ts);
             memcpy(&send_buffer[RESP_MSG_ANC_DISTOFFSET],&g_com_map[DIST_OFFSET],2);
-			if(new_tagid)
-			{
-				tagdist_list[taglist_pos]=0x1ffff;
-				memcpy(&send_buffer[DIST_IDX], &tagdist_list[taglist_pos], 4);
-			}else{
-				memcpy(&send_buffer[DIST_IDX], &tagdist_list[taglist_pos], 4);
-			}
-			motorstate =0;
-            if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE1]||tagdist_list[taglist_pos]<0)
-            {
-               motorstate =0; 
-            }
-            else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE2])
-			{
-				if(flag_tag_distsmooth[taglist_pos])
-				{motorstate =2;
-				}else{
-					motorstate =0;
-				}
-			}else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE3])
-			{
-				if(flag_tag_distsmooth[taglist_pos])
-				{motorstate =1;
-					}else{
-					motorstate =0;
-				}
-			}
+
+
             send_buffer[GROUP_ID_IDX] = group_id;
 //			send_buffer[MAINBASE_INDEX]=flag_syncbase;
 			send_buffer[MESSAGE_TYPE_IDX]=MBX_RESPONSE;
@@ -241,36 +219,7 @@
 			send_buffer[MOTORSTATE_INDEX]&=0x0f;
             remotesend_state = 0;
           
-//            for(uint8_t i=0;i<PWTAG_MAXGROUPNUM;i++)
-//            {
-//                if(pwtag[i].remain_time!=0)
-//                {
-//                if(pwtag[i].id==tag_id_recv)
-//                {   
-//                    uint16_t calCRC;
-//                    uint8_t remotetag_para[10],remotetag_paralen;
-//                    remotesend_state=1;
-//                    remotesend_index = i;
-//                    if(pwtag[i].index==200)
-//                    {remotesend_state = 2;}
-//                    send_buffer[MOTORSTATE_INDEX]=(remotesend_state<<4)|motorstate;
-//                    remotetag_paralen = 2+3+2;
-//                    remotetag_para[0] = 2;
-//                    remotetag_para[1] = pwtag[i].index;
-//                    remotetag_para[2] = 2;
-//                    memcpy(&remotetag_para[3],&pwtag[i].value,2);
-//                    calCRC = CRC_Compute(remotetag_para,5);
-//                    memcpy(&remotetag_para[5],&calCRC,2);
-//                    memcpy(&send_buffer[REMOTEPARA_INDEX],remotetag_para,remotetag_paralen);
-//                    dwt_writetxdata(24+remotetag_paralen, send_buffer, 0);//写入发送数据
-//                    dwt_writetxfctrl(24+remotetag_paralen, 0);//设定发送长度		
-//                    
-//                    //finalsend = 1;
-//                    break;
-//                }				
-//            }
-//        }
-            
+            dwt_forcetrxoff();
             dwt_writetxdata(38, send_buffer, 0);//写入发送数据
             dwt_writetxfctrl(38, 0);//设定发送长度
             result = dwt_starttx(DWT_START_TX_DELAYED);
@@ -281,245 +230,31 @@
 //               result = dwt_starttx(DWT_START_TX_DELAYED);
 ////               uwb_timeout = 0;
 //               if(result == 0)
+//               {
              uwb_timeout=lp_time;
-               while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_TXFRS )))///不断查询芯片状态直到接收成功或者出现错误
+               while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & SYS_STATUS_TXFRS ))///不断查询芯片状态直到接收成功或者出现错误
 			{
-//        current_time=HAL_LPTIM_ReadCounter(&hlptim1);
-//        if(current_time>end_time||current_time<end_time+15000)
-//            break;
+
+//                        current_time=HAL_LPTIM_ReadCounter(&hlptim1);
+//        if(current_time>end_time+((32768/1000)*3)||current_time<end_time+15000)
+//        { 
+////        printf("debug2 timec:%d timee:%d\r\n",current_time,end_time);
+//        break;}
                     if(lp_time-uwb_timeout>2)
                         break;
             };
-//           }else{
-//			result = dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED);//延迟发送,等待接收
-
-			
-//			if(result==0)
-//			{
-//				while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_sync_flag)///不断查询芯片状态直到接收成功或者出现错误
-//			{ };
-//		}else{
-//             if(g_com_map[MODBUS_ID1]==1)
-//                {
-//                 #ifdef DBGMSG_OUTPUT
-//                    printf("发送超时");
-//                #endif
-//                }
-//			result++;
-//		}
-//                if(!(status_reg& SYS_STATUS_RXFCG))
-//        {
-//            dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR);
+//        }
 //            dwt_rxenable(0);
-//        while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_sync_flag)///不断查询芯片状态直到接收成功或者出现错误
-//			{ };
-//        }
-	
-//			if (status_reg & SYS_STATUS_RXFCG)//接收成功
-//			{
-//				
-//				dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚标志位
-//				frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;//数据长度
-//				dwt_readrxdata(rx_buffer, frame_len, 0);//读取接收数据
-//                if(rx_buffer[MESSAGE_TYPE_IDX] == MBX_PRAAREPLY)
-//                {                 
-//                    u16 calCRC,recCRC,rec_commap[SENDANCPARA_LEN];
-//                    calCRC = CRC_Compute(&rx_buffer[MESSAGE_PARAREPLY_IDX],SENDANCPARA_LEN);
-//                    memcpy(&recCRC,&rx_buffer[MESSAGE_PARAREPLY_IDX+SENDANCPARA_LEN],2);
-//                    if(memcmp(&recCRC,&calCRC,2)==0)
-//                    {
-//                        uint8_t buffer_len,datalen,tempindex;
-//                        char send_buffer[200];
-//                        memcpy(rec_commap,&rx_buffer[MESSAGE_PARAREPLY_IDX],SENDANCPARA_LEN);
-//                        pwtag[remotesend_index].remain_time = 0;
-//                        buffer_len = sprintf(send_buffer,"$replypara_anchor,");
-//                        datalen = sprintf(&send_buffer[buffer_len],"%x,",pwtag[remotesend_index].id);
-//                        buffer_len += datalen;
-//                        for(uint16_t i=0;i<SENDANCPARA_LEN/2;i++)
-//                        {
-//                            datalen = sprintf(&send_buffer[buffer_len],"%d,",rec_commap[i]);
-//                            buffer_len += datalen;
-//                        }
-//                        send_buffer[buffer_len++] = 'e';
-//                        send_buffer[buffer_len++] = 'n';
-//                        send_buffer[buffer_len++] = 'd';
-//                        send_buffer[buffer_len++] = 0x0d;
-//                        send_buffer[buffer_len++] = 0x0a;
-//                        UDPClient_Uploadhex((uint8_t*)send_buffer,buffer_len);
-//                    
-//                    }                  
-//                }
-//			if(seize_anchor&&memcmp(&rx_buffer[ANCHOR_ID_IDX],&dev_id,2)) //抢占anchor 失败
-//			{
-//                  if(g_com_map[MODBUS_ID1]==1)
-//                {
-//                #ifdef DBGMSG_OUTPUT
-//                printf("抢占失败");       
-//                #endif
-//                }
-//				return 1;
-//			}
-//			if (rx_buffer[MESSAGE_TYPE_IDX] == MBX_FINAL&&!memcmp(&rx_buffer[TAG_ID_IDX],&tag_id_recv,2)&&group_id==rx_buffer[GROUP_ID_IDX]) //判断是否为Final包
-//				{
 
-//                    
-//					resp_tx_ts = get_tx_timestamp_u64();//获得response发送时间T3
-//					final_rx_ts = get_rx_timestamp_u64();//获得final接收时间T6
-//					final_msg_get_ts(&rx_buffer[FINAL_MSG_POLL_TX_TS_IDX], &poll_tx_ts);//从接收数据中读取T1,T4,T5
-//					final_msg_get_ts(&rx_buffer[FINAL_MSG_RESP_RX_NEARBASE_IDX+ancrec_nearbasepos*4], &resp_rx_ts);
-//					final_msg_get_ts(&rx_buffer[FINAL_MSG_FINAL_TX_TS_IDX], &final_tx_ts);
-
-//                   // testtime[0] = time32_incr*1000+TIM3->CNT;
-//					poll_rx_ts_32 = (uint32_t)poll_rx_ts;//使用32位数据计算
-//					resp_tx_ts_32 = (uint32_t)resp_tx_ts;
-//					final_rx_ts_32 = (uint32_t)final_rx_ts;
-//					Ra = (double)(resp_rx_ts - poll_tx_ts);//Tround1 = T4 - T1
-//					Rb = (double)(final_rx_ts_32 - resp_tx_ts_32);//Tround2 = T6 - T3
-//					Da = (double)(final_tx_ts - resp_rx_ts);//Treply2 = T5 - T4
-//					Db = (double)(resp_tx_ts_32 - poll_rx_ts_32);//Treply1 = T3 - T2
-//					tof_dtu = (int64_t)((Ra * Rb - Da * Db) / (Ra + Rb + Da + Db));//计算公式
-//					tof = tof_dtu * DWT_TIME_UNITS;
-//					distance = tof * SPEED_OF_LIGHT;//距离=光速*飞行时间
-//#ifdef DW3000 
-//                    dist_no_bias = distance;     
-//#else                    
-//					dist_no_bias = distance - dwt_getrangebias(config.chan, (float)distance, config.prf); //距离减去矫正系数
-//#endif
-//					dist_cm = dist_no_bias * 1000; //dis 为单位为cm的距离	
-////					dwt_readdiagnostics(&d1);
-////					LOS(&d1);					
-//					/*--------------------------以下为非测距逻辑------------------------*/
-//					//dist_cm=33000;
-//				//	LED0_BLINK; //每成功一次通讯则闪烁一次
-////                UWBLED_BLINK;
-//                    uwb_losttimer = 0;
-//					dis_after_filter=dist_cm;
-//					hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET]*10;
-
-//                        if(recpoll_len==rec_nearbase_num*4+15)
-//                        {
-//                            hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET]*10-rec_antdelay*10;
-//                        }
-//                    
-//					g_flag_Taggetdist[taglist_pos]=0;
-//                    
-//					if(hex_dist>-100000&&hex_dist<2000000)
-//					{
-//						if(abs(hex_dist-his_dist[taglist_pos])<10000)
-//						{
-//							flag_tag_distsmooth[taglist_pos] =1;
-//						}else{
-//							flag_tag_distsmooth[taglist_pos] =0;
-//						}
-//					if(abs(hex_dist-his_dist[taglist_pos])<10000||misdist_num[taglist_pos]>3)
-//					{
-//						uint16_t checksum;
-//                        g_Resttimer=0;
-//                      //  IWDG_Feed();
-//						#ifdef TDFILTER
-//						NewTrackingDiffUpdate(taglist_pos, (float)hex_dist);
-//						filter_dist = pos_predict[taglist_pos]/10;
-//                        filter_speed = vel_predict[taglist_pos]/10;
-//                        newmeasure = 1;
-//						#else
-//						filter_dist=hex_dist/10;
-//						#endif
-//						misdist_num[taglist_pos]=0;
-//                        tagdist_list[taglist_pos] = filter_dist;	
-//                        his_dist[taglist_pos]=hex_dist;	
-//                        if(hex_dist>0)
-//						{
-//                            g_Tagdist[taglist_pos]=hex_dist/10;	
-//                        }else{
-//                            g_Tagdist[taglist_pos]= 0x2ffff;
-//                        }
-//				#ifdef USART_SINGLE_OUTPUT
-//                    usart_send[0]=0x55;
-//                    usart_send[1]=0xAA;    
-//					usart_send[2] = 1;//正常模式 
-//					usart_send[3] = 17;//数据段长度
-//					usart_send[4] = frame_seq_nb2;//数据段长度
-//					memcpy(&usart_send[5],&tag_id_recv,2);
-//					memcpy(&usart_send[7],&dev_id,2);			
-//                    if(tagdist_list[taglist_pos]<=0)
-//                        tagdist_list[taglist_pos]=0x2ffff;
-//					memcpy(&usart_send[9],&tagdist_list[taglist_pos],4);
-//					usart_send[13] = battary;
-//					usart_send[14] = button;
-//					usart_send[15] = firstpath_power;
-//					usart_send[16] = rx_power;
-//					checksum = Checksum_u16(&usart_send[2],17);
-//					memcpy(&usart_send[19],&checksum,2);                   
-//					//HexToAsciiSendUDP(usart_send,21);
-//                #ifdef DBGMSG_OUTPUT
-//                    if(g_com_map[MODBUS_ID1]==1)
-//                    {
-//                    printf("测距成功%d",g_Tagdist[taglist_pos]);   
-//                    }                    
-//                #endif
-//                 //    PushAnchorDataArray(tag_id_recv,tagdist_list[taglist_pos],battary);  
-//                    if(uwbled == LEDOFF )
-//                    {uwbled = BLUE;
-//                    }else{
-//                        uwbled = LEDOFF;
-//                    }                        
-//                      if(DBG_GetMode() == DBG_MODE_CFG||DBG_GetMode() == DBG_MODE_CHARGE)      
-//                     {
-//                         UART_HandleTypeDef *pstUartHandle = HIDO_NULL;
-//                         Uart_GetHandle(UART_ID_DBG, (HIDO_VOID **)&pstUartHandle);
-//                      //   HAL_UART_Transmit(pstUartHandle, usart_send, 21, 1000);
-//                     }
-//				#else		
-//					memcpy(&usart_send_anc[4+6*anc_report_num],&tag_id_recv,2);
-//					memcpy(&usart_send_anc[6+6*anc_report_num],&tagdist_list[taglist_pos],4);
-//					anc_report_num++;
-//				#endif
-//					}else{
-//                         if(g_com_map[MODBUS_ID1]==1)
-//                         {
-//                            #ifdef DBGMSG_OUTPUT
-//                                printf("测距错误");
-//                            #endif
-//                         }  
-//                                        
-//					//	printf("%d",hex_dist);
-//						misdist_num[taglist_pos]++;
-//					}
-//				}
-//              if(remotesend_state == 1)
-//              {
-//                    uint8_t buffer_len,datalen,tempindex;
-//                    char send_buffer[100];
-//                    pwtag[remotesend_index].remain_time = 0;
-//												if(pwtag[remotesend_index].index==ANCHOR_UPDATE)
-//											{
-//												if(pwtag[remotesend_index].value == 2)
-//												{
-//													StartAnchorUpdateProcess(pwtag[remotesend_index].id);
-//												}
-//											}
-//                    buffer_len = sprintf(send_buffer,"$confirmwrite_anchor,");
-//                    datalen = sprintf(&send_buffer[buffer_len],"%x,1",pwtag[remotesend_index].id);
-//                    buffer_len += datalen;
-//                    send_buffer[buffer_len++] = 0x0d;
-//                    send_buffer[buffer_len++] = 0x0a;
-//                    UDPClient_Uploadhex((uint8_t*)send_buffer,buffer_len);
-//              }
-//			}
-//			}else{
-//                if(g_com_map[MODBUS_ID1]==1)
-//                {
-//                 #ifdef DBGMSG_OUTPUT
-//                    printf("final状态错误:%x",status_reg);
-//                #endif
-//                }
-//          
-//					//printf("%x/n",status_reg);
-//				dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR);
-//			}
-//        }
 }
+
 uint16_t target_tagid[12] = {0x1316,0x1394,0x1265,0x1318,0x1306,0x1304,0x1376,0x1312,0x1277,0x1388,0x1140,0x1392};
+uint16_t Lora_tx_ancid[50];
+uint16_t Lora_tx_ancdist[50];
+uint8_t Lora_tx_anc_electricity[50];
+uint8_t Lora_tx_ancnum=0;
+uint8_t break_flag ;
+uint16_t RX_TIMEOUTs_UWB;
 void Anchor_App(void)
 {
 	
@@ -527,48 +262,45 @@
 	u16 tempid;
 	uint32_t rec_syncid;
 	uint16_t checksum;
+   uint8_t kk;
+    
+    dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
+	dwt_rxenable(0);//打开接收
+    
+    
     
     start_time=HAL_LPTIM_ReadCounter(&hlptim1);
-        end_time=start_time+((32768/1000)*20);
-        if(end_time>=30000)
-	    {end_time-=30000;}
+        end_time=start_time+((32768/1000)*2);
+        if(end_time>=32768)
+	    {end_time-=32768;}
         current_time=HAL_LPTIM_ReadCounter(&hlptim1);
     while(current_time<end_time||current_time>end_time+15000)
         {
             current_time=HAL_LPTIM_ReadCounter(&hlptim1);
-	dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
-//	g_start_sync_flag=0;
-
-	dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
-	dwt_rxenable(0);//打开接收
-
-//	GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);	
-             uwb_timeout=lp_time;
-	while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//不断查询芯片状态直到接收成功或者出现错误
-	{ 
-//        current_time=HAL_LPTIM_ReadCounter(&hlptim1);
-//        if(current_time>end_time||current_time<end_time+15000)
-//            break;
-//		IdleTask();
-            if(lp_time-uwb_timeout>2)
-            break;
-	};
-//GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_RESET);	
- //   delay_us(g_com_map[NEARBASE_ID2]);
+            while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//不断查询芯片状态直到接收成功或者出现错误
+            { 
+                        current_time=HAL_LPTIM_ReadCounter(&hlptim1);
+                                 if(current_time>=end_time&&current_time<end_time+15000)
+                                        break;
+            };
 	
-//	status_reg  = dwt_read32bitreg(SYS_STATUS_ID);
-//    dwt_setinterrupt(  DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 0);
-	if (status_reg & SYS_STATUS_RXFCG)//成功接收
-		{ uint16_t tag_recv_interval;
-		float temp_tagpos;
-		dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);//清除标志位
-                        
+	if (status_reg & SYS_STATUS_RXFCG && status_reg!=0xffffffff)//成功接收
+		{
+            uint16_t tag_recv_interval;
+            float temp_tagpos;
+             
+        dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);                        
 		frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;//获得接收数据长度
         recpoll_len = frame_len;
 		dwt_readrxdata(rx_buffer, frame_len, 0);//读取接收数据
+        dwt_setrxtimeout(0);//DELAY_BETWEEN_TWO_FRAME_UUS*(nearbase_num+1-recbase_num)+10);//设定接收超时时间,0位没有超时时间
+		dwt_rxenable(0);
 		memcpy(&anc_id_recv,&rx_buffer[ANCHOR_ID_IDX],2);
 		//将收到的tag_id分别写入各次通讯的包中,为多标签通讯服务,防止一次通讯中接收到不同ID标签的数据
-		memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2);      
+		memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2);
+
+//        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
+//        printf("ID %x\r\n",tag_id_recv);            
 		switch(rx_buffer[MESSAGE_TYPE_IDX])
 		{uint8_t target_tagi;
             case MBX_REG:
@@ -587,7 +319,8 @@
                 break;
 			case MBX_POLL:
               if(group_id==rx_buffer[GROUP_ID_IDX])
-              {      
+              {   
+//                printf("timec:%d timee:%d\r\n",current_time,end_time);                  
                 dwt_readdiagnostics(&d1);
                 LOS(&d1);
                 if(firstpath_power<-100)
@@ -607,26 +340,48 @@
                 for(u8 i=0;i<rec_nearbase_num;i++)
                 {
                     if(rec_ancidlist[i] == dev_id)
-                    {
-//                        PushAnchorDataArray(tag_id_recv,rec_ancdistlist[i],-(int8_t)firstpath_power);  
-                        
-                       // PushAnchorDataArray(tag_id_recv,rec_ancdistlist[i],battary);  
-                    }
+                    {   
+                        for(kk=0;kk<Lora_tx_ancnum;kk++)
+                        {
+                          if(Lora_tx_ancid[kk]==tag_id_recv)
+                          {
+//                          Lora_tx_ancnum--;
+                          Lora_tx_ancdist[kk]=rec_ancdistlist[i];
+                              Lora_tx_anc_electricity[kk]=battary;
+                              break_flag=1;
+                              break;
+                          }
+                        }
+                        if(break_flag)
+                        {
+                            break_flag=0;
+                            break;
+                        }
+                        Lora_tx_ancid[Lora_tx_ancnum]=tag_id_recv;
+                        Lora_tx_ancdist[Lora_tx_ancnum]=rec_ancdistlist[i];
+                        Lora_tx_anc_electricity[Lora_tx_ancnum]=battary;
+//                        printf("接收到uwb测距:%d",Lora_tx_ancdist[0]);
+                        Lora_tx_ancnum++;
+                        RX_TIMEOUTs_UWB++;
+                     }
                 }
-//            #ifdef USART_ALL_OUTPUT
-                    usart_send[2] = 0x0c;//正常模式 
-					usart_send[3] = 8+rec_nearbase_num*4;//数据段长度
-					usart_send[4] = frame_seq_nb2;//数据段长度
-            		usart_send[5] = battary;
-					usart_send[6] = button;
-                    usart_send[7] = rec_nearbase_num;
-					memcpy(&usart_send[8],&tag_id_recv,2);
-					memcpy(&usart_send[10],&rec_ancidlist,2*rec_nearbase_num);				
-					memcpy(&usart_send[10+rec_nearbase_num*2],&rec_ancdistlist,2*rec_nearbase_num);
-					checksum = Checksum_u16(&usart_send[2],8+4*rec_nearbase_num);
-					memcpy(&usart_send[10+4*rec_nearbase_num],&checksum,2);
-//					UART_PushFrame(usart_send,12+rec_nearbase_num*4);
-//            #endif
+////            #ifdef USART_ALL_OUTPUT
+//                    usart_send[2] = 0x12;//正常模式 
+//					usart_send[3] = 8+rec_nearbase_num*4;//数据段长度
+//                    memcpy(&usart_send[4],&tag_id_recv,2);
+//					usart_send[6] = frame_seq_nb2;//包序
+//                    power_and_key=battary<<1;//把按键跟电量2合1,发出去
+//                    power_and_key=power_and_key+button;
+//                    memcpy(usart_send+7,&power_and_key,1);
+//                    usart_send[8] = lora_yingda_flag;//lora等待应答位
+//                    usart_send[9] = rec_nearbase_num;//lora等待应答位
+////                    usart_send[9] = lora_yingda_flag;
+//					memcpy(&usart_send[10],&rec_ancidlist,2*rec_nearbase_num);				
+//					memcpy(&usart_send[10+rec_nearbase_num*2],&rec_ancdistlist,2*rec_nearbase_num);
+//					checksum = Checksum_u16(&usart_send[2],8+4*rec_nearbase_num);
+//					memcpy(&usart_send[10+4*rec_nearbase_num],&checksum,2);
+////					UART_PushFrame(usart_send,12+rec_nearbase_num*4);
+////            #endif
 
 				taglist_pos=CmpTagInList(tag_id_recv);
                 if(taglist_num>=TAG_NUM_IN_SYS)
@@ -660,6 +415,7 @@
 						break;
 					}						
 				}
+                
 					if(i==rec_nearbase_num)
 					{
 						seize_anchor=1;   //抢占anchor
@@ -671,22 +427,13 @@
 		}	
     
 	}else{
-//                if(g_com_map[MODBUS_ID1]==1)
-//                {
-//                if(g_com_map[MODBUS_ID1]==1)
-//                {
-//                 #ifdef DBGMSG_OUTPUT
-//                    if(g_com_map[MODBUS_ID1]==1)
-//                         {
-//                            printf("POLL状态错误:%x",status_reg);
-//                         }
-//                #endif
-//                }
-//                }
+//        printf("debug4 timec:%d timee:%d\r\n",current_time,end_time);
 		dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR);
-	}
-    
+        dwt_rxenable(0);
+        }
     }
         dwt_forcetrxoff();
+        dwt_entersleep();
 
-        }
\ No newline at end of file
+}
+

--
Gitblit v1.9.3