From 0942f592f3c033983c4ccaba6d632bbf80611abb Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期三, 21 五月 2025 14:29:55 +0800
Subject: [PATCH] 上传格式正确,但电量未采集版本,未加入蓝牙与mk和mk和lora和网关同步修改配置逻辑,测距稳定能用基础版本

---
 keil/include/src/gps.c |  150 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 150 insertions(+), 0 deletions(-)

diff --git a/keil/include/src/gps.c b/keil/include/src/gps.c
new file mode 100644
index 0000000..33cb59b
--- /dev/null
+++ b/keil/include/src/gps.c
@@ -0,0 +1,150 @@
+#include "board.h"
+#include "HIDO_Util.h"
+#include "global_param.h"
+#include "sn74hc595.h"
+#define GPS_OPEN_TIME_OUT  48		//1分钟开启
+#define GPS_RESTART_TIME1  480  //10分钟
+#define GPS_RESTART_TIME2  48		//1分钟
+#define GPS_RESTART_TIME3  30		//30s
+ uint16_t gps_wait_count;
+ extern uint16_t g_com_map[COM_MAP_SIZE];
+extern uint8_t flag_first_TCPconnect;
+ 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;
+void GPS_Poll(void)
+{
+
+    if(gps_4g_flag||gps_uwb_flag) {
+        gps_power_state = 1;  //打开GPS电源
+        if(!gps_timeout_flag) {
+            if(gps_need_data_flag) {
+                gps_wait_count++;
+                if(gps_wait_count>=GPS_OPEN_TIME_OUT) { //超时切换工作状态
+                    gps_timeout_flag=1;//串口添加改变timeout逻辑
+                    gps_wait_count=0;
+                    gps_need_data_flag=0;//切换为关闭模式
+                }
+            } else {
+                gps_wait_count++;
+                gps_power_state=0;//关闭GPS
+                if(gps_wait_count>GPS_RESTART_TIME2) {
+                    gps_power_state=1;//开启GPS
+                    gps_need_data_flag=1;
+                    gps_wait_count=0;
+                }
+            }
+        } else { //超时工作状态
+            if(gps_need_data_flag) {
+                gps_wait_count++;
+                if(gps_wait_count>=GPS_OPEN_TIME_OUT) { //超时切换工作状态
+                    gps_timeout_flag=1;
+                    gps_need_data_flag=0;
+                    gps_wait_count=0;
+                }
+            } else {
+                gps_wait_count++;
+                gps_power_state=0;//关闭GPS
+                if(gps_wait_count>GPS_RESTART_TIME1) {
+                    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)
+        if(open_close)
+        {
+            gps_wait_count = 0;
+            gps_need_data_flag = 1;
+            gps_timeout_flag = 0;
+        }
+    if(flag_4g_uwb)
+    {
+        gps_4g_flag = open_close;
+    } else {
+        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>=g_com_map[SEND_4G_SECOND]) { //超时切换工作状态
+									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();
+}
+
+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