From 6a54fd6dd7b40c274b68b0f27bedb7b71b7a21c5 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期一, 26 八月 2024 09:39:41 +0800
Subject: [PATCH] 调试4G唤醒,和服务器下发解析

---
 keil/include/main/main.c |  222 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 140 insertions(+), 82 deletions(-)

diff --git a/keil/include/main/main.c b/keil/include/main/main.c
index 59de734..33830ab 100644
--- a/keil/include/main/main.c
+++ b/keil/include/main/main.c
@@ -62,6 +62,7 @@
 #include "HIDO_Timer.h"
 #include "TCPClient.h"
 
+//#define DEBUG_MODE
 extern int simple_main(void);
 extern int temp_main(void);
 #define TEST_UART_POLL_MODE 0
@@ -87,7 +88,7 @@
 float nomove_count=0;
 static uint32_t sample[NUM_SAMPLES] = {0};
 uint8_t recev_error_num,send_messgae_count,send_flag,control_state;
-
+uint8_t flag_4g_usart_rx_state = 1;  //4G 串口RX当前是 RX状态,不是GPIO状态
 typedef enum
 {		UN_BIND=0,
         LINK_SUCCESS,
@@ -168,33 +169,62 @@
 //board_debug_console_open(TRACE_PORT_UART0);
 //uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
 //}
+uint8_t TCP_reconnect_timer,flag_TCP_reconnectting = 1;
+void SecondTask(void)
+{
+    if(IfTCPConnected())
+    {
+        TCP_reconnect_timer =0;
+        flag_TCP_reconnectting = 0;
+    }else{
+        if(TCP_reconnect_timer<30)//如果TCP没有连接,每隔10分钟尝试连接30秒
+        {
+            flag_TCP_reconnectting = 1;
+        }else{
+            flag_TCP_reconnectting = 0;
+        }
+        if(TCP_reconnect_timer++>600) 
+        {
+            TCP_reconnect_timer = 0;
+        }
+
+    }
+    HIDO_TimerTick();
+    nomove_count++;
+}
+uint8_t flag_sleeptimer;
 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;
-    //}
+    SecondTask();
+   // IO_control_init();
+    uwb_led_on();
+    delay_us(1000);
+    uwb_led_off();
+    flag_sleeptimer = 1;
+//    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;
-        update_led_power_state();//更新灯状态
-    }
-    HIDO_TimerTick();
+//    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;
+//        update_led_power_state();//更新灯状态
+//    }
+    
 }
 static void voltage_input_handler(enum IO_PIN_T pin)
 {
@@ -204,6 +234,13 @@
 {
     nomove_count=0;
 }
+uint8_t flag_4G_recdata;
+static void _4gUsart_handler(enum IO_PIN_T pin)
+{
+    LOG_INFO(TRACE_MODULE_APP, "4G RX 唤醒\r\n"); 
+   // flag_4G_recdata = 1;
+   // AIR780EUartInit();
+}
 void Program_Init(void)
 {
     Usart1ParseDataCallback = UsartParseDataHandler;//需改为默认为gps处理,UsartParseDataHandler为升级处理当调试时候改为
@@ -212,7 +249,7 @@
     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];
+    warning_distance=g_com_map[ALARM_DISTANCE1];
     prewarning_distance=g_com_map[ALARM_DISTANCE2];
     send_struct.warnDistence=warning_distance;
     send_struct.alarmDistence=prewarning_distance;//更新报警距离
@@ -273,7 +310,7 @@
     }
 }
 
-
+uint8_t flag_4guart_needinit=0;
 int main(void)
 {
     board_clock_run();
@@ -319,69 +356,78 @@
     IIC2_Init();
     Accelerometer_Init();
     IO_control_init();
+  //  gps_air780_power_change(0,1);//开启gps,4G
 //加速度计初始化必须在IO_control_init之前因为复用SDA引脚
-    //adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
+    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);
+  //  uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
 // Initialize low power mode
     power_init();
-    LOG_INFO(TRACE_MODULE_APP, "测试数据");
+  //  LOG_INFO(TRACE_MODULE_APP, "测试数据");
 //			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;
-    }
+//    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);
     //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_5V_input_init(voltage_input_handler);
     board_acceleration_detection_init(move_handler);
+  //  board_4GUsart_detection_init(_4gUsart_handler); 
+    AIR780E_Reset(); //4G模块重启,耗时1.5秒
     while (1)
     {
-        // TODO
-        Internet_Poll();
-        HIDO_ATLitePoll();
-        HIDO_TimerPoll();
-        TCPClient_Poll();
-
-        switch(Operation_state) {
-        case LINK_SUCCESS:
-        {   //连接成功进行轮询测距
-            if(g_start_send_flag) {
-                g_start_send_flag = 0;
-                uwb_led_on();
-                simple_main();
-                uwb_led_off();
-                IdleTask();
-            } else {
-                IdleTask();
+        if(flag_TCP_reconnectting||IfTCPConnected())
+        {
+         //   LOG_INFO(TRACE_MODULE_APP, "处理4G任务\r\n");  
+            if(flag_4guart_needinit)
+            {
+                flag_4guart_needinit = 0;
+                AIR780EUartInit();
             }
+            Internet_Poll();
+            HIDO_ATLitePoll();
+            HIDO_TimerPoll();
+            TCPClient_Poll();
         }
-        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;
-        }
+//        switch(Operation_state) {
+//        case LINK_SUCCESS:
+//        {   //连接成功进行轮询测距
+//            if(g_start_send_flag) {
+//                g_start_send_flag = 0;
+//                uwb_led_on();
+//                simple_main();
+//                uwb_led_off();
+//                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){
@@ -391,13 +437,25 @@
         //blink_led(&air780_success_state);//成功测距闪烁4G状态灯
         //air780_success_state=0;
         //}
-#ifdef DEBUG_MODE
-        if(!gpio_pin_get_val(INPUT_5V_Pin)) {
-            trace_flush();
-            uint32_t lock = int_lock();
-            //LOG_INFO(TRACE_MODULE_APP, "进入低功耗");
-            power_enter_power_down_mode(0);
-            int_unlock(lock);
+#ifndef DEBUG_MODE
+//if(flag_sleeptimer)
+if(!gpio_pin_get_val(INPUT_5V_Pin)&&((IfTCPConnected()&&Socket_IsSendQueueEmpty(0))||!flag_TCP_reconnectting&&!IfTCPConnected())&&!flag_4G_recdata) //进入休眠条件(与关系,全满足才进):1.没有5V输入 2 TCP已连接时发送队列为空||TCP无连接时不在重连状态。
+            { 
+           //     if(!flag_4guart_needinit)
+            {
+     //           LOG_INFO(TRACE_MODULE_APP, "4G RX 中断打开\r\n");
+   //             board_4GUsart_detection_init(_4gUsart_handler); 
+//            
+            }
+//               flag_sleeptimer =0;        
+//            LOG_INFO(TRACE_MODULE_APP, "进入休眠\r\n");  
+        //    flag_4guart_needinit = 1;
+//            
+//        trace_flush();
+//        uint32_t lock = int_lock();
+//        //LOG_INFO(TRACE_MODULE_APP, "进入低功耗");
+//        power_enter_power_down_mode(0);
+//        int_unlock(lock);
         }
 #endif
     }

--
Gitblit v1.9.3