From fadf2a684268a36b7d3069f0e4e932147416c481 Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期一, 21 四月 2025 18:23:57 +0800
Subject: [PATCH] 手环V1.16版本,修改gps闪灯状态e后为1时不用状态机控制,修改5s后关闭4g和gps逻辑,初步测试成功,但OTA中途会重连导致升级不了

---
 keil/include/src/gps.c |  210 ++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 169 insertions(+), 41 deletions(-)

diff --git a/keil/include/src/gps.c b/keil/include/src/gps.c
index cd7bfa0..0b74400 100644
--- a/keil/include/src/gps.c
+++ b/keil/include/src/gps.c
@@ -1,15 +1,31 @@
 #include "board.h"
-#include "TCPClient.h"
+#include "HIDO_Util.h"
 #include "global_param.h"
-#define GPS_OPEN_TIME_OUT  240
-#define GPS_RESTART_TIME1  1200
-#define GPS_RESTART_TIME2  120
-#define GPS_RESTART_TIME3  3600
-#define GPS_OPEN_TIME_OUT1 60
-extern uint16_t gps_wait_count;
-uint8_t gps_power_state,gps_uwb_flag,gps_4g_flag,gps_timeout_flag,gps_need_data_flag = 1,gps_1h_open_flag=1;
-extern HIDO_INT32 l_i32TCPClientID;
-extern double jd,wd;
+#define GPS_OPEN_TIME_OUT  120		//1分钟开启
+#define GPS_RESTART_TIME1  480  //10分钟
+#define GPS_RESTART_TIME2  48		//1分钟
+#define GPS_RESTART_TIME3  30		//30s
+
+#define GPS_VALID_LED_WAIT_COUNT 1
+#define GPS_INVALID_LED_WAIT_COUNT 5
+#define AIR_CONNECT_LED_WAIT_COUNT 5
+extern uint16_t gps_wait_count,g_com_map[COM_MAP_SIZE];
+extern uint8_t flag_first_TCPconnect;
+extern uint16_t gps_wait_count2;
+uint16_t g_spsum,g_snum,ave_sp;
+uint8_t gps_power_state,gps_uwb_flag,gps_4g_flag,gps_timeout_flag,gps_need_data_flag = 1,gps_open_flag,gps_first_flag=1;
+extern uint8_t gps_success_state,air780_success_state,power_low_flag,state5V_prase_flag,green_charge_state,enbale_blink_flag,active_flag;
+typedef enum {
+    STATE_IDLE,
+    STATE_VALID,
+    STATE_INVALID
+} GPSState;
+typedef enum {
+    CONNECT,
+    DISCONNECT,
+} LED4GState;
+GPSState GPS_state=STATE_IDLE;
+LED4GState LED_4g_state=DISCONNECT;
 void GPS_Poll(void)
 {
 
@@ -58,37 +74,6 @@
         gps_need_data_flag=1;
     }
 }
-
-
-void GPS_Poll_1h(void)
-{
-
-    if(gps_1h_open_flag) {
-        gps_power_state = 1;  //打开GPS电源
-            if(gps_need_data_flag) {
-                gps_wait_count++;
-                if(gps_wait_count>=GPS_OPEN_TIME_OUT1) { //超时切换工作状态
-                    gps_timeout_flag=1;//串口添加改变timeout逻辑
-                    gps_wait_count=0;
-                    gps_need_data_flag=0;//切换为关闭模式
-											TCPHeartBeatUpload();//上传GPS超时无效数据
-                }
-            } else {
-                gps_wait_count++;
-                gps_power_state=0;//关闭GPS
-                if(gps_wait_count>GPS_RESTART_TIME3) {
-                    gps_power_state=1;//开启GPS
-                    gps_need_data_flag=1;
-                    gps_wait_count=0;
-                }
-            }
-    } else {
-        gps_power_state=0;//关闭gps
-        gps_wait_count=0;
-        gps_timeout_flag=0;
-        gps_need_data_flag=1;
-    }
-}
 void GpsConrol(uint8_t flag_4g_uwb,uint8_t open_close)
 {
     if(gps_4g_flag==0&&gps_uwb_flag==0)
@@ -105,4 +90,147 @@
         gps_uwb_flag = open_close;
     }
 
+}
+void Gps_change(void)
+{
+	if(gps_open_flag){
+		if(gps_need_data_flag) {
+							gps_power_state = 1;  //打开GPS电源
+						 
+							gps_wait_count++;
+							if(gps_wait_count>34)
+								gps_first_flag=0;//新加入第一次开启
+							if(gps_wait_count>=GPS_OPEN_TIME_OUT) { //超时切换工作状态
+								
+									gps_timeout_flag=1;//串口添加改变timeout逻辑
+									gps_wait_count=0;
+									gps_need_data_flag=0;//切换为关闭模式
+									UDPClient_UploadGPS();//上传GPS超时无效数据
+							}
+					} else {
+							gps_wait_count++;
+							gps_power_state=0;//关闭GPS
+						 
+							if(gps_wait_count>g_com_map[SEND_4G_SECOND]) {
+									gps_power_state=1;//开启GPS
+									gps_need_data_flag=1;
+									gps_wait_count=0;
+							}
+					}
+					gps_wait_count2=0;
+		}else{
+					gps_wait_count2++;
+					if(gps_wait_count2>=g_com_map[SEND_4G_SECOND]) { //超时切换工作状态
+									gps_wait_count=0;
+									gps_timeout_flag=1;
+									UDPClient_UploadGPS();//上传GPS 30s固定数据
+									gps_wait_count2=0;
+							}
+				gps_power_state=1;//开启gps
+        gps_need_data_flag=1;
+			}
+		update_led_power_state();
+}
+void POWER_LED_Task(void)
+{
+if(enbale_blink_flag)
+	{
+	green_charge_state=0;
+	charge_red_on();
+	}
+	charge_state_change();//充电状态判断
+	if(enbale_blink_flag)
+	{
+	delay_us(5000);
+	green_charge_state=0;
+	charge_red_off();
+	}		
+}
+ uint8_t wltag_gps_timer,wltag_4g_timer;;
+void GPS_LED_Task(void)
+{
+
+	if(state5V_prase_flag||power_low_flag||!gps_power_state)
+	{
+	GPS_state=STATE_IDLE;
+	}
+switch(GPS_state){
+	case STATE_INVALID:
+			if(wltag_gps_timer++>=GPS_INVALID_LED_WAIT_COUNT)
+			{	wltag_gps_timer=0;
+				blink_led(&gps_success_state);
+			}
+			break;
+	case STATE_VALID:
+			if(wltag_gps_timer++>=GPS_VALID_LED_WAIT_COUNT)
+			{	wltag_gps_timer=0;
+				blink_led(&gps_success_state);
+			}
+			break;
+	case STATE_IDLE:
+		gps_led_off();
+		wltag_gps_timer=0;
+		  break;
+		}	
+}
+void LED_4G_task(void)
+{
+
+if(Internet_IsIPReady() == HIDO_TRUE&&!power_low_flag&&active_flag)
+{
+LED_4g_state=CONNECT;
+}else{
+LED_4g_state=DISCONNECT;
+}
+switch(LED_4g_state){
+	case CONNECT:
+			if(wltag_4g_timer++>=AIR_CONNECT_LED_WAIT_COUNT)
+			{	wltag_4g_timer=0;
+				blink_led(&air780_success_state);
+			}
+			break;
+	case DISCONNECT:
+			air780_led_off();
+			wltag_4g_timer=0;
+			break;
+		}
+}
+void LED_Task(void)
+{
+POWER_LED_Task();
+LED_4G_task();
+GPS_LED_Task();
+}
+HIDO_INT32 GPS_ParseGSV(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
+{
+    HIDO_DataStruct spower[4];
+
+//    if (GPS_DataCheck(_pcData, _u32Len) != HIDO_OK)
+//    {
+//        return HIDO_ERR;
+//    }
+
+    if (HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1], &spower[2], &spower[3]) == 21)
+    {
+        g_snum+=4;
+        g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData)+atoi((HIDO_CHAR *)spower[2].m_pData)+atoi((HIDO_CHAR *)spower[3].m_pData);
+    }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1], &spower[2]) == 17)
+    {
+         g_snum+=3;
+        g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData)+atoi((HIDO_CHAR *)spower[2].m_pData);
+
+    }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1]) == 13)
+    {
+         g_snum+=2;
+        g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData);
+
+    }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%**", &spower[0]) == 9)
+    {
+         g_snum+=1;
+        g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData);
+
+    }
+   // l_u8PosState = atoi((HIDO_CHAR *)stPosState.m_pData);
+
+    return HIDO_OK;
 }
\ No newline at end of file

--
Gitblit v1.9.3