From 36dd8d352a36af39b7d16649e068625d9b4a7152 Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期四, 28 十一月 2024 17:34:31 +0800
Subject: [PATCH] 基站一对多稳定版本,不丢包

---
 keil/include/main/main.c |  358 +++++++++++++++++++++-------------------------------------
 1 files changed, 131 insertions(+), 227 deletions(-)

diff --git a/keil/include/main/main.c b/keil/include/main/main.c
index 10c2612..53719c6 100644
--- a/keil/include/main/main.c
+++ b/keil/include/main/main.c
@@ -49,68 +49,24 @@
 #include "board.h"
 #include "wsf_nvm.h"
 #include "mk_power.h"
+#include "mk_sleep_timer.h"
 #include "Usart.h"
 #include "mk_adc.h"
-#include "mk_sleep_timer.h"
-#include "lis3dh_driver.h"
-#include "sn74hc595.h"
-#include "mk_4G.h"
-#include "UART.h"
-#include "AIR780EDriver.h"
-#include "Internet.h"
-#include "HIDO_ATLite.h"
-#include "HIDO_Timer.h"
-
-extern int simple_main(void);
-extern int temp_main(void);
+extern int TagRange(void);
+extern void parameter_init(void);
+uint8_t trx_buf[10] = {0};
 #define TEST_UART_POLL_MODE 0
 #define TEST_UART_INTERUPT_MODE 1
 #define TEST_UART_DMA_MODE 2
 #define TEST_UART_MODE TEST_UART_DMA_MODE
 
 #define NUM_SAMPLES 1
-#define BIND_TRIGGER_TIME 60000 
-extern uint8_t mUsartReceivePack[100];
-extern uint8_t mUsart2ReceivePack[150];
-extern uint8_t state5V_prase_flag,gps_prase_flag;
-uint32_t dev_id;
-uint8_t group_id;
-uint16_t tag_frequency;
-uint16_t disoffset;
-uint16_t warning_distance,prewarning_distance;
-int16_t fVoltage_mv,first_search_flag;
-uint8_t bat_percent,g_start_send_flag=1;
-int link_success_flag;
-uint8_t state5v,link_error_count;
-uint8_t gps_power_state,motor_power_state=1,uwb_state,air780_power_state,gps_success_state,chaging_state,changed_state,air780_success_state;
-float nomove_count=0;
-static uint32_t sample[NUM_SAMPLES] = {0};
-uint8_t recev_error_num,send_messgae_count,send_flag,control_state;
+#define SLEEP_START_TIME 120
+uint8_t enable_sleep_count,sleep_flag;
+#define DEBUG_MODE
 
-typedef enum
-{		UN_BIND=0,
-		LINK_SUCCESS,
-		SEARCH_DEV,
-}Operation_step;
-Operation_step Operation_state;
-
-
-Commend_SendDate send_struct;
-static struct ADC_CFG_T usr_adc_cfg = {
-    .mode = ADC_MODE_CONTINUE,    /* Selected single conversion mode  */
-    .clk_sel = ADC_CLK_HIGH,      /* Selected 62.4M high speed clock */
-    .vref_sel = ADC_SEL_VREF_INT, /* Using internal reference voltage (1.2V)*/
-    .rate = 500000,               /* ADC works at high frequency system clock, the maximum sampling rate is 2M */
-    .channel_p = ADC_IN_EXTPIN0,  /* ADC positive channel --> GPIO0 */
-    .channel_n = ADC_IN_VREF,     /* ADC negative channel --> Vref */
-    .int_en = false,
-    .dma_en = false, /* DMA support only in continue mode */
-    .acc_num = 0,
-    .high_pulse_time = 4,
-    .settle_time = 1,
-};
- struct UART_CFG_T test_uart_cfg =
-    {
+struct UART_CFG_T test_uart_cfg =
+{
         .parity = UART_PARITY_NONE,
         .stop = UART_STOP_BITS_1,
         .data = UART_DATA_BITS_8,
@@ -132,9 +88,61 @@
         .int_tx = false,
 #endif
 		};
+
+static uint32_t sample[NUM_SAMPLES] = {0};
+static struct ADC_CFG_T usr_adc_cfg = {
+    .mode = ADC_MODE_CONTINUE,    /* Selected single conversion mode  */
+    .clk_sel = ADC_CLK_HIGH,      /* Selected 62.4M high speed clock */
+    .vref_sel = ADC_SEL_VREF_INT, /* Using internal reference voltage (1.2V)*/
+    .rate = 500000,               /* ADC works at high frequency system clock, the maximum sampling rate is 2M */
+    .channel_p = ADC_IN_EXTPIN0,  /* ADC positive channel --> GPIO0 */
+    .channel_n = ADC_IN_VREF,     /* ADC negative channel --> Vref */
+    .int_en = false,
+    .dma_en = false, /* DMA support only in continue mode */
+    .acc_num = 0,
+    .high_pulse_time = 4,
+    .settle_time = 1,
+};
+
+uint8_t state5v = 1;
+uint8_t bat_percent=0,g_start_send_flag=1;
+int16_t fVoltage_mv;
+uint8_t bat_percent;
+extern uint32_t dev_id;
+extern uint8_t group_id;
+uint8_t tag_frequence;
+void UartDeinit(void);
+void UartInit(void);
+void Program_Init(void);
+void IdleTask(void);
+void boot_deinit(void);
 static void uart_receive_callback(void *dev, uint32_t err_code)
 {		
 uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
+}
+void UartInit(void)
+{
+board_pins_config();
+uart_open(UART_ID1, &test_uart_cfg);
+board_debug_console_open(TRACE_PORT_UART0);
+uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
+}
+void UartDeinit(void)
+{
+uart_close(UART_ID0);
+uart_close(UART_ID1);
+}
+static void sleep_timer_callback(void *dev, uint32_t time)
+{
+    //sleep_timer_start(__MS_TO_32K_CNT(1000));
+		enable_sleep_count++;
+	if(enable_sleep_count==SLEEP_START_TIME){
+
+		enable_sleep_count=0;
+		sleep_flag=1;
+	}
+		g_start_send_flag=1;
+    //LOG_INFO(TRACE_MODULE_APP, "Sleep timer interrupt callback\r\n");
 }
 static void adc_callback(void *data, uint32_t number)
 {
@@ -160,129 +168,64 @@
     }
 		 LOG_INFO(TRACE_MODULE_APP, "The voltage is %%%d \r\n",bat_percent);
 }
-//void UartInit(void)
-//{
-//board_pins_config();
-//uart_open(UART_ID1, &test_uart_cfg);
-//board_debug_console_open(TRACE_PORT_UART0);
-//uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
-//}
-static void sleep_timer_callback(void *dev, uint32_t time)
-{
-		
-		nomove_count++;
-		send_messgae_count+=g_com_map[COM_INTERVAL];
-		//if(send_messgae_count>=g_com_map[4G_INTERNAL]){
-		//send_message_count=0;
-		//send_flag=1;
-	//}
-	
-		if(Operation_state==LINK_SUCCESS){//成功时清0错误计数
-		link_error_count=0;
-		g_start_send_flag=1;
-		}
-		if(Operation_state==SEARCH_DEV){
-//		if(first_search_flag){//当第一次连接断开产生时才开始计数
-			//link_error_count=0;
-//		}
-		link_error_count++;
-		if(link_error_count==60)
-		link_error_count=0;
-		//link_error_count+=g_com_map[COM_INTERVAL];
-			//if(link_error_count>=g_com_map[4G_INTERNAL])
-			//link_error_count=0;
-		updata_led_power_state();//更新灯状态
-	}
-    HIDO_TimerTick();
-}
 static void voltage_input_handler(enum IO_PIN_T pin)
 {
-	
-}
-static void move_handler(enum IO_PIN_T pin)
-{
-nomove_count=0;
+//LOG_INFO(TRACE_MODULE_APP, "中断唤醒\r\n");
 }
 void Program_Init(void)
 {	
-Usart1ParseDataCallback = UsartParseDataHandler;//需改为默认为gps处理,UsartParseDataHandler为升级处理当调试时候改为
-parameter_init_anchor();//g_com_map表初始化角色默认为基站
-dev_id=g_com_map[DEV_ID];//这里不太对
-group_id=g_com_map[GROUP_ID];//组ID
-tag_frequency = 1000/g_com_map[COM_INTERVAL];//测距频率这个存的是测距时间
-memcpy(&disoffset,&g_com_map[DIST_OFFSET],2);
-warning_distance=g_com_map[STATIONARY_TIME];
-prewarning_distance=g_com_map[ALARM_DISTANCE2];
-send_struct.warnDistence=warning_distance;
-send_struct.alarmDistence=prewarning_distance;//更新报警距离
-memcpy(&send_struct.gunLableId,&g_com_map[BIND_DEV_ID],2);//更新绑定ID
-send_struct.tagId=dev_id;//更新设备ID
+Usart1ParseDataCallback = UsartParseDataHandler;
+parameter_init();//g_com_map表初始化
+group_id=g_com_map[GROUP_ID];
+memcpy(&dev_id ,&g_com_map[DEV_ID],2);
+tag_frequence=1000/g_com_map[COM_INTERVAL];	
+g_com_map[VERSION] = (1<<8)|5;
+LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id);
+LOG_INFO(TRACE_MODULE_APP,"固件版本:UWB-标签 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
 }
-
-
-
 void IdleTask(void)
-{
+{ UART0_CheckReceive();
 	if(gpio_pin_get_val(INPUT_5V_Pin))
-	{    	
-  
+	{
+        	
+   
+		//UART_CheckSend();
+// bat_percent=Get_Battary();
 		if(state5v==0)
 		{
 			state5v=1;
-			state5V_prase_flag=state5v;
-			gps_prase_flag=0;//解除gps解析
-			uart1_change_from_gps_to_debug();
-			uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma
-			//UartInit();
-		}
-		  
-		//UART_CheckSend();
+		}	
 	}else{
         if(state5v==1)
         {
-          state5v=0;
-					state5V_prase_flag=state5v;
-					gps_prase_flag=1;//恢复gps解析
-					uart1_change_from_debug_to_gps();
-					uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma
+            state5v=0;
 					//UartDeinit();
         }
-				UART_CheckReceive();
+				
 }
+	
 }
-int bind_check(void)
+void boot_deinit(void)
 {
-if(g_com_map[BIND_DEV_ID]!=0x00)
-{
-	return 1;
-//绑定信息为1说明设备已经被下发绑定
-}else{
-	return 0;
-//绑定信息为0说明设备未被绑定
+	//将boot中串口返回普通gpio
+// UART0 TX/RX
+    io_pin_mux_set(IO_PIN_5, IO_FUNC0);
+    io_pin_mux_set(IO_PIN_6, IO_FUNC0);
+    // UART1 RX/TX
+    io_pin_mux_set(IO_PIN_10, IO_FUNC0);
+    io_pin_mux_set(IO_PIN_9, IO_FUNC0);
+	 uart_close(UART_ID1);//解绑原来串口1
+	 uart_close(UART_ID0);//解绑原来串口0
 }
-}
-void check_if_in_search(void)
-{
-if(link_success_flag==1){//如果第一次测距收包成功那么则进入连接测距模式
-		Operation_state=LINK_SUCCESS;
-			}else{//否则进入搜索模式
-		Operation_state=SEARCH_DEV;
-		if(first_search_flag==0)
-		first_search_flag=1;
-	}
-}
-
-
 int main(void)
 {
     board_clock_run();
-    board_pins_config();
-		IIC2_Init();
+		boot_deinit();
+    board_pins_config(); 
     board_debug_console_open(TRACE_PORT_UART0);
 	    // Reset reason
     reset_cause_get();
     reset_cause_clear();
-		
     // Load calibration parameters from NVM
     uint32_t internal_flash = (REG_READ(0x40000018) >> 17) & 0x1;
     uint32_t external_flash = (REG_READ(0x40010030) >> 28) & 0x3;
@@ -296,107 +239,68 @@
     {
         board_calibration_params_default();
     }
-
+		
     // Chip calibration
     calib_chip();
 
     // Disable watchdog timer
     wdt_close(WDT_ID0);
-  //  LOG_INFO(TRACE_MODULE_APP, "UWB simple example\r\n");
-
+    //LOG_INFO(TRACE_MODULE_APP, "UWB qiang  test example\r\n");
+		
     // open system timer
     //sys_timer_open();
-    
-    // TODO 4G
-    Uart_Register(UART_ID_4G, UART_ID1);
-    AIR780EDriver_PinRegister(AIR780E_PIN_3V8_EN, IO_PIN_5);
-    AIR780EDriver_PinRegister(AIR780E_PIN_PWRKEY, IO_PIN_6);
-    Internet_Init();
 		
     gpio_open();
-    //board_led_init();
+    board_led_init();
 		
-//		adc_open(&usr_adc_cfg);
-        IIC2_Init();
-		Accelerometer_Init(); //加速度计初始化必须在IO_control_init之前因为复用SDA引脚 
-		IO_control_init();
-		//adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
-		uart_open(UART_ID1, &test_uart_cfg);
-		gps_air780_power_change(1,1);//开启gps,4G
-		Program_Init();
-		 uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
-// Initialize low power mode
+		 //uart_open(UART_ID0, &test_uart_cfg);
+		
+			Program_Init();
+		 //power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)POWER_WAKEUP_BY_GPIO_0, POWER_WAKEUP_LEVEL_LOW);
+		 uart_receive(UART_ID0,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
+		// Initialize low power mode
     power_init();
-//			g_com_map[BIND_DEV_ID]=0x1122;//测试
-		if(bind_check())//绑定后才提前开启测距
-		{link_success_flag=temp_main();//上机开启接收2s绑定成功则进行下面轮询测距流程,不成功则1分后再次开启2s接收
-			check_if_in_search();
-		}else{
-		send_struct.bindState=false;
-		Operation_state=UN_BIND;
-		}
-		sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback);
+		//adc_open(&usr_adc_cfg);
+		//adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
+    // Enable sleep timer
+    sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback);
 		//sleep_timer_start(__MS_TO_32K_CNT(g_com_map[COM_INTERVAL]));//测试
-		sleep_timer_start(__MS_TO_32K_CNT(1000));//测试
-		board_5V_input_init(voltage_input_handler);
-		board_acceleration_detection_init(move_handler);
+		sleep_timer_start(__MS_TO_32K_CNT(sleep_time_count));//测试
+		//board_5V_input_init(voltage_input_handler);//有修改3.3V会一直高电平导致无法进入休眠
+		#ifdef BOXING 
+				io_pin_mux_set(IO_PIN_5, IO_FUNC0);//波形测试
+			gpio_pin_set_dir( IO_PIN_5, GPIO_DIR_OUT, 0);
+			io_pull_set(IO_PIN_5 , IO_PULL_DOWN, IO_PULL_UP_LEVEL4);
+	#endif
+		//Serial0_PutString("进入app测试\r\n");
     while (1)
-    {
-        // TODO
-        Internet_Poll();
-        HIDO_ATLitePoll();
-        HIDO_TimerPoll();
-        
-	switch(Operation_state){
-		case LINK_SUCCESS:
-		{//连接成功进行轮询测距
-			if(g_start_send_flag){
+    { 
+			if(g_start_send_flag)
+			{
+			//LOG_INFO(TRACE_MODULE_APP, "测距ing");
+			
 			g_start_send_flag = 0;
-			uwb_led_on();
-			simple_main();
-			uwb_led_off();
+			gpio_pin_set(LED_PIN);//亮
+			TagRange();
+			gpio_pin_clr(LED_PIN);//灭
 			IdleTask();	
 			}else{
 			IdleTask();	
-			} 
-		}
-		break;
-		case SEARCH_DEV:
-		{//接包不成功或者通讯失败进入搜索模式
-			if(link_error_count==0||first_search_flag){
-			first_search_flag=0;
-			uwb_led_on();
-			link_success_flag=temp_main();//第一次开启接收2s绑定失败后则进行下面1分钟后重新开启2s绑定流程
-			uwb_led_off();
-			if(link_success_flag)
-			Operation_state=LINK_SUCCESS;
-		}
-			IdleTask();
-		}
-		break;
-		case UN_BIND:
-		{uwb_led_off();//关闭uwb指示灯
-			IdleTask();
-		}
-	break;
-	}
-		
-		//3种情况后都要发包和休眠
-		//if(send_flag){
-		//message_construct();
-		//send_udp;
-	//air780_success_state=0;//关闭4G成功发送灯
-		//blink_led(&air780_success_state);//成功测距闪烁4G状态灯
-	//air780_success_state=0;
-		//}
-#ifdef DEBUG_MODE
-			if(!gpio_pin_get_val(INPUT_5V_Pin)){
+			}
+#ifndef DEBUG_MODE
+			if(sleep_flag){//开始一段时间无休眠
 						trace_flush();
             uint32_t lock = int_lock();
 						//LOG_INFO(TRACE_MODULE_APP, "进入低功耗");
+						//唤醒源设置MK8000修改
+						//board_5V_input_init(voltage_input_handler);
+						//sleep_timer_start(g_com_map[COM_INTERVAL]);
             power_enter_power_down_mode(0);
+						uart_receive(UART_ID0,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
+					//LOG_INFO(TRACE_MODULE_APP, "进入低功耗");
             int_unlock(lock);
 			}
 #endif
     }
+
 }

--
Gitblit v1.9.3