From eede6129470e056b9e87d192f9a2096525b7c686 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期六, 10 十月 2020 08:22:55 +0800
Subject: [PATCH] 增加低压启动重启功能

---
 源码/核心板/Src/application/dw_app.c |   76 +++++++++++++++++++++++++++++---------
 1 files changed, 58 insertions(+), 18 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
index b3dbb91..3428592 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
@@ -5,7 +5,7 @@
 	DISCPOLL,
 	GETNEARMSG,
 	NEARPOLL,
-}tag_state=GETNEARMSG;
+}tag_state=NEARPOLL;
 static dwt_config_t config = {
 	2,               /* Channel number. */
 	DWT_PRF_64M,     /* Pulse repetition frequency. */
@@ -28,7 +28,7 @@
 
 static uint8_t tx_near_msg[80] = {0};
 
-static uint32_t frame_seq_nb = 0;	
+ uint32_t frame_seq_nb = 0, frame_seq_nb2 = 0;	
 static uint32_t status_reg = 0;
 static uint8_t rx_buffer[100];
 static uint64_t poll_tx_ts;
@@ -347,7 +347,7 @@
 	flag_rxon=1;
 	neartimout_timer=0;
 	get_newbase=0;
-	timeout=ceil((float)nearbase_num*0.4)+3;
+	timeout=ceil((float)nearbase_num*SLOT_SCALE)+3;
 	//timeout=5;
 	mainbase_dist=100000;
 	mainbase_lost_count++;
@@ -446,7 +446,32 @@
 									dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//将发送数据写入DW1000
 									dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
 									memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
-									
+								if(temp_dist!=0x1ffff)
+									{
+										#ifndef USART_INTEGRATE_OUTPUT
+										usart_send[2] = 1;//正常模式
+										usart_send[3] = 17;//数据段长度
+										usart_send[4] = frame_seq_nb;//数据段长度
+										if(g_com_map[DEV_ROLE])
+										{
+										memcpy(&usart_send[5],&dev_id,2);
+										memcpy(&usart_send[7],&rec_nearbaseid,2);		
+										}else{
+										memcpy(&usart_send[5],&rec_nearbaseid,2);
+										memcpy(&usart_send[7],&dev_id,2);	
+										}											
+										memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4);
+										usart_send[13] = battary;
+										usart_send[14] = button;
+										checksum = Checksum_u16(&usart_send[2],17);
+										memcpy(&usart_send[19],&checksum,2);
+										UART_PushFrame(usart_send,21);
+										#endif
+
+									//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{
@@ -477,8 +502,14 @@
 										usart_send[2] = 1;//正常模式
 										usart_send[3] = 17;//数据段长度
 										usart_send[4] = frame_seq_nb;//数据段长度
+										if(g_com_map[DEV_ROLE])
+										{
 										memcpy(&usart_send[5],&dev_id,2);
-										memcpy(&usart_send[7],&rec_nearbaseid,2);				
+										memcpy(&usart_send[7],&rec_nearbaseid,2);		
+										}else{
+										memcpy(&usart_send[5],&rec_nearbaseid,2);
+										memcpy(&usart_send[7],&dev_id,2);	
+										}											
 										memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4);
 										usart_send[13] = battary;
 										usart_send[14] = button;
@@ -522,7 +553,7 @@
 //				}
 				tagslotpos=GetRandomSlotPos(rec_tagpos_binary|tagpos_binary);
 				tyncpoll_time = (tagslotpos--%max_slotpos)*slottime;
-		tag_state=GETNEARMSG;		
+		tag_state=NEARPOLL;		
 			}
 		//	tyncpoll_time=0;
 			next_nearbase_num=0;
@@ -580,13 +611,13 @@
 			}
 			
 		//	printf("%d,%d",temp_sync_timer2,temp_sync_timer1);
-//			#ifdef USART_INTEGRATE_OUTPUT		
-//				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);
-//				UART_PushFrame(usart_send,6+report_num*6);
-//			#endif
+			#ifdef USART_INTEGRATE_OUTPUT		
+				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);
+				UART_PushFrame(usart_send,6+report_num*6);
+			#endif
 //			if(mainbase_lost_count>5)
 //			{
 //				//tag_state=DISCPOLL;
@@ -655,6 +686,13 @@
 			tyncpoll_time = (tagslotpos--%max_slotpos)*slottime;
 	}
 	
+				#ifdef USART_INTEGRATE_OUTPUT		
+				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);
+				UART_PushFrame(usart_send,6+report_num*6);
+			#endif
 }
 
 void Tag_App(void)//发送模式(TAG标签)
@@ -735,7 +773,7 @@
 
 			battary = rx_buffer[BATTARY_IDX];
 			button = rx_buffer[BUTTON_IDX];
-			frame_seq_nb = rx_buffer[SEQUENCE_IDX];
+			frame_seq_nb2 = rx_buffer[SEQUENCE_IDX];
 			if(result==0)
 			{
 				while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))///不断查询芯片状态直到接收成功或者出现错误
@@ -837,7 +875,7 @@
 
 			battary = rx_buffer[BATTARY_IDX];
 			button = rx_buffer[BUTTON_IDX];
-			frame_seq_nb = rx_buffer[SEQUENCE_IDX];
+			frame_seq_nb2 = rx_buffer[SEQUENCE_IDX];
 			if(result==0)
 			{
 				while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_sync_flag)///不断查询芯片状态直到接收成功或者出现错误
@@ -887,7 +925,7 @@
 					dis_after_filter=dist_cm;
 					hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET];
 					g_flag_Taggetdist[taglist_pos]=0;
-					if(hex_dist>-1000&&hex_dist<100000)
+					if(hex_dist>-1000&&hex_dist<200000)
 					{
 					if(abs(hex_dist-his_dist[taglist_pos])<1500||misdist_num[taglist_pos]>3)
 					{
@@ -898,7 +936,7 @@
 				#ifndef USART_INTEGRATE_OUTPUT
 					usart_send[2] = 1;//正常模式 
 					usart_send[3] = 17;//数据段长度
-					usart_send[4] = frame_seq_nb;//数据段长度
+					usart_send[4] = frame_seq_nb2;//数据段长度
 					memcpy(&usart_send[5],&tag_id_recv,2);
 					memcpy(&usart_send[7],&dev_id,2);				
 					memcpy(&usart_send[9],&tagdist_list[taglist_pos],4);
@@ -925,7 +963,7 @@
 }
 uint32_t current_syncid=0xffffffff,synclost_timer;
 extern u8 flag_syncbase;
-u8 tagpos_rec[50],tagpos_send[50],ancidlist_num;
+u8 tagpos_rec[50],tagpos_send[50],ancidlist_num,getrange_success=0;
 u16 ancidlist_rec[20],ancidlist_send[20];
 void Anchor_App(void)
 {
@@ -942,6 +980,7 @@
 //	GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);	
 	while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误
 	{ 
+		
 		IdleTask();
 	};
 //GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_RESET);	
@@ -949,6 +988,7 @@
 	{ u16 tag_recv_interval;
 		float temp_tagpos;
 	
+		getrange_success = 1;
 		g_Resttimer=0;
 		dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);//清除标志位
 		frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;//获得接收数据长度

--
Gitblit v1.9.3