From f224d649c2d62d0289f47ba704c7da3509647ff4 Mon Sep 17 00:00:00 2001
From: zhangbo <zhangbo@qq.com>
Date: 星期四, 17 四月 2025 14:26:19 +0800
Subject: [PATCH] 现在的UWB常开1s测距一次(和老免布线基站测距)功耗是95ma一秒上传一次数据

---
 keil/include/src/GPS.c |  154 ++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 140 insertions(+), 14 deletions(-)

diff --git a/keil/include/src/GPS.c b/keil/include/src/GPS.c
index 48cfa58..ba7e412 100644
--- a/keil/include/src/GPS.c
+++ b/keil/include/src/GPS.c
@@ -12,11 +12,17 @@
 //#include "GPIO.h"
 #include "Uart.h"
 #include "WS2812.h"
+#include "PCA9555.h"
 #define GPS_DBG(level, fmt, ...) HIDO_Debug(fmt, __VA_ARGS__)
 #include <global_param.h>
 #define GPS_UART_RX_BUF_SIZE                    1024
 #define GPS_UART_TX_BUF_SIZE                    (4)
 
+/**************************************************************************************************************************************/
+#define ARRAY_SIZE 60  
+uint8_t  Gsv_count = 0;               // 已存储的数据个数
+uint8_t lounei_flag=0;
+/**************************************************************************************************************************************/
 typedef enum
 {
     GPS_RECV_STATE_IDLE = 0,
@@ -471,7 +477,7 @@
  * Author            : hido.ltd
  * Modified Date:    : 2021年5月07日
  *******************************************************************************/
-uint8_t GPS_data[100];
+//uint8_t GPS_data[100];
 uint8_t GPS_successful_flag;
 extern uint32_t uwbled,rtkled,led4g,powerled;
 uint8_t jinru_parsegga_flag;
@@ -484,9 +490,15 @@
 extern uint8_t bat_percent;
 uint8_t gpsbaoxu;
 extern uint8_t gps_ntripsend;
-//static HIDO_UINT8 l_u8GPSBuff[512];
-//static HIDO_UINT32 l_u8GPSLen = 0;
-//static HIDO_UINT32 l_u8GPSRecvTick = 0;
+uint8_t ave_sp_GSV;
+
+extern uint16_t g_spsum_GSV,g_snum_GSV;
+extern uint16_t g_spsum_GSV_sum;
+extern uint16_t g_snum_GSV_sum;
+extern uint8_t heart_upload_time;
+uint8_t fixed_solution_count_minute;
+extern uint8_t ceju_leave_flag;
+extern uint8_t open_gps_time;
 static HIDO_INT32 GPS_ParseGGA(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
 {
     uint16_t state_flag;
@@ -494,6 +506,7 @@
     HIDO_DataStruct stPosState;
     jinru_parsegga_flag=1;
     memset(&stGPS, 0, sizeof(ST_GPS));
+//	  ave_sp_GSV=g_spsum_GSV;
     if (GPS_DataCheck(_pcData, _u32Len) != HIDO_OK)
     {
         return HIDO_ERR;
@@ -505,6 +518,7 @@
     }
     memcpy(YUANGPS_ParseGGA_data,_pcData,_u32Len);
     YUANGPS_ParseGGA_changdu=_u32Len;
+
     if(*(HIDO_CHAR *)stPosState.m_pData != '0')
     {
 //        HIDO_DebugString(_pcData, _u32Len);
@@ -517,13 +531,17 @@
         _pcData[_u32Len-1]=0;
         _pcData[_u32Len-2]=0;
 //        memcpy(GPS_data,_pcData, _u32Len-2);//去掉回车换行
-    state_flag = 0;
-    state_flag = fangchai_flag;
+				state_flag = 0;
+				state_flag = fangchai_flag;
         
-        HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%x,%d,%d,%d,%d\r\n",
-                _pcData, g_com_map[2], bat_percent,0,0,0,state_flag,gpsbaoxu);
+        HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%d,%d,%d,%d,%d\r\n",
+                _pcData, g_com_map[2], bat_percent,g_spsum_GSV_sum,g_snum_GSV_sum,lounei_flag,state_flag,gpsbaoxu);
         gpsbaoxu++;
         GPS_ParseGGA_changdu=u32Len;
+				if(ceju_leave_flag==1)
+				{
+				 fixed_solution_count_minute++;
+				}
 
     }
     else
@@ -533,17 +551,30 @@
         _pcData[_u32Len-1]=0;
         _pcData[_u32Len-2]=0;
 //        memcpy(GPS_data,_pcData, _u32Len-2);
-            state_flag = 0;
-    state_flag = fangchai_flag;
+        state_flag = 0;
+				state_flag = fangchai_flag;
         
-        HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%x,%d,%d,%d,%d\r\n",
-                _pcData, g_com_map[2], bat_percent,0,0,0,state_flag,gpsbaoxu);
+//        HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%x,%d,%d,%d,%d\r\n",
+//                _pcData, g_com_map[2], bat_percent,0,ave_sp_GSV,0,state_flag,gpsbaoxu);
+			  HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%d,%d,%d,%d,%d\r\n",
+                _pcData, g_com_map[2], bat_percent,g_spsum_GSV_sum,g_snum_GSV_sum,lounei_flag,state_flag,gpsbaoxu);
         gpsbaoxu++;
         GPS_ParseGGA_changdu=u32Len;
     }
-    UDPClient_UploadGPS();
+  
     gps_ntripsend=1;
-    NTRIPApp_ReportGGA(GPS_ParseGGA_data, _u32Len);
+		if((open_gps_time%UPLOAD_4G_TIME==0))
+		{
+			
+		UDPClient_UploadGPS();
+    NTRIPApp_ReportGGA(GPS_ParseGGA_data, _u32Len);		
+		}
+
+		ave_sp_GSV=0;
+		g_spsum_GSV=0;
+//		g_spsum_GSV_sum=0;
+		g_snum_GSV=0;
+//		lounei_flag=0;
 //    if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP&&gps_ntripsend)
 //    {
 //        gps_ntripsend=0;
@@ -564,6 +595,43 @@
     return HIDO_OK;
 }
 
+
+uint16_t g_spsum_GSV,g_snum_GSV;
+static HIDO_INT32 GPS_ParseGSV(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
+{
+    ST_GPS stGPS;
+    HIDO_DataStruct spower[4];
+
+    memset(&stGPS, 0, sizeof(ST_GPS));
+//    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_GSV+=4;
+        g_spsum_GSV+=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_GSV+=3;
+        g_spsum_GSV+=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_GSV+=2;
+        g_spsum_GSV+=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_GSV+=1;
+        g_spsum_GSV+=atoi((HIDO_CHAR *)spower[0].m_pData);
+
+    }
+   // l_u8PosState = atoi((HIDO_CHAR *)stPosState.m_pData);
+		
+    return HIDO_OK;
+}
 /*******************************************************************************
  * Function Name     : GPS_ParseRMC
  * Description       :
@@ -713,6 +781,10 @@
             	{
             		GPS_ParseRMC(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen);
             	}
+                else if(strstr(l_stGPSRecv.m_acRecvBuf, "GSV,") != HIDO_NULL)
+            	{
+            		GPS_ParseGSV(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen);
+            	}								
             }
 
             l_stGPSRecv.m_eState = GPS_RECV_STATE_IDLE;
@@ -871,3 +943,57 @@
 
 //    HIDO_UtilBzero(&l_stGPSRecv, sizeof(ST_GPSRecv));
 //}
+/*******************************************************************************
+ * Function Name     : Receive_g_spsum_Data
+ * Description       : 计算平均值
+ * Input             : newData
+ * Output            : sum
+ * Return            : g_spsum_GSV_sum
+ *******************************************************************************/
+uint16_t GSV_sum;
+uint16_t GSV_g_snum_sum;
+uint16_t g_spsum_GSV_sum=300;
+uint16_t g_snum_GSV_sum=10;
+void Receive_g_spsum_Data(int newData)
+{
+    GSV_sum +=newData; 						
+    if (Gsv_count < ARRAY_SIZE) {
+        Gsv_count++;											 
+    }
+		if(Gsv_count==60)
+		{
+		g_spsum_GSV_sum=GSV_sum/Gsv_count;
+		GSV_sum=0;
+		
+		}
+}
+
+void Receive_g_snum_Data(int newData)
+{
+    GSV_g_snum_sum +=newData; 						
+		if(Gsv_count==60)
+		{
+		g_snum_GSV_sum=GSV_g_snum_sum/Gsv_count;
+		GSV_g_snum_sum=0;
+		Gsv_count=0;
+//		in_the_room_flag=0;
+		}
+}
+
+/*******************************************************************************
+ * Function Name     : Switch_low_power_mode
+ * Description       : 低功耗处理
+ * Input             : 
+ * Output            : 
+ * Return            : 
+ *******************************************************************************/
+
+void Switch_low_power_mode()
+{
+	if(lounei_flag==1)
+	{
+	 PCA9555_Set_One_Value_Output(GPS_POWER,0);
+//	 PCA9555_Set_One_Value_Output(LED_POWER,0);
+	}
+
+}
\ No newline at end of file

--
Gitblit v1.9.3