From e0a196fc7dcb47d200ab81a933dde2b18d169ed5 Mon Sep 17 00:00:00 2001
From: zhangbo <zhangbo@qq.com>
Date: 星期二, 13 五月 2025 16:23:21 +0800
Subject: [PATCH] 移植开关GPS代码

---
 keil/include/src/GPS.c |  217 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 153 insertions(+), 64 deletions(-)

diff --git a/keil/include/src/GPS.c b/keil/include/src/GPS.c
index 14e6944..2e42dfa 100644
--- a/keil/include/src/GPS.c
+++ b/keil/include/src/GPS.c
@@ -17,6 +17,11 @@
 #define GPS_UART_RX_BUF_SIZE                    1000
 #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,
@@ -40,7 +45,7 @@
 static ST_GPSRecv l_stGPSRecv;
 static FN_GPSEventCallback l_fnGPSEventCallback;
 ST_GPS l_stGPS;
-
+static HIDO_UINT8 l_u8PosState = 0;
 /*******************************************************************************
  * Function Name     : GPS_AddHours
  * Description       :
@@ -487,83 +492,69 @@
 //static HIDO_UINT8 l_u8GPSBuff[512];
 //static HIDO_UINT32 l_u8GPSLen = 0;
 //static HIDO_UINT32 l_u8GPSRecvTick = 0;
+uint8_t gps_error1,gps_error2;
+extern uint16_t g_spsum_GSV,g_snum_GSV;
 static HIDO_INT32 GPS_ParseGGA(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
 {
-    uint16_t state_flag;
     ST_GPS stGPS;
     HIDO_DataStruct stPosState;
-    jinru_parsegga_flag=1;
+
     memset(&stGPS, 0, sizeof(ST_GPS));
     if (GPS_DataCheck(_pcData, _u32Len) != HIDO_OK)
     {
+        gps_error1++;
         return HIDO_ERR;
     }
 
     if (HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%*,%*,%*,%*,%**", &stPosState) != 15)
     {
+        gps_error2++;
         return HIDO_ERR;
     }
-    memcpy(YUANGPS_ParseGGA_data,_pcData,_u32Len);
-    YUANGPS_ParseGGA_changdu=_u32Len;
-    if(*(HIDO_CHAR *)stPosState.m_pData != '0')
-    {
-//        HIDO_DebugString(_pcData, _u32Len);
-        if(l_fnGPSEventCallback != NULL)
-        {
-            l_fnGPSEventCallback(GPS_TYPE_GGA, _pcData, _u32Len);
-        }
-        rtkled=BLUE;
-        GPS_successful_flag=1;
-        _pcData[_u32Len-1]=0;
-        _pcData[_u32Len-2]=0;
-//        memcpy(GPS_data,_pcData, _u32Len-2);//去掉回车换行
-    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);
-        gpsbaoxu++;
-        GPS_ParseGGA_changdu=u32Len;
 
-    }
-    else
-    {
-        rtkled=RED;
-        GPS_successful_flag=0;
-        _pcData[_u32Len-1]=0;
-        _pcData[_u32Len-2]=0;
-//        memcpy(GPS_data,_pcData, _u32Len-2);
-            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);
-        gpsbaoxu++;
-        GPS_ParseGGA_changdu=u32Len;
-    }
-    UDPClient_UploadGPS();
-    gps_ntripsend=1;
-    NTRIPApp_ReportGGA(GPS_ParseGGA_data, _u32Len);
-//    if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP&&gps_ntripsend)
-//    {
-//        gps_ntripsend=0;
-//        NTRIPApp_ReportGGA(GPS_ParseGGA_data, _u32Len);
-////        l_u8GPSLen = 0;
-//    }    
-//    if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP)
-//        {
-//            if(GPS_ParseGGA_changdu > 0)
-//            {
-//                if((HIDO_TimerGetTick() - l_u8GPSRecvTick) > 50)
-//                {
-//                    NTRIPApp_ReportGGA(GPS_ParseGGA_data, GPS_ParseGGA_changdu);
-//                    GPS_ParseGGA_changdu = 0;
-//                }
-//            }
-//        }
+    l_u8PosState = atoi((HIDO_CHAR *)stPosState.m_pData);
+		g_spsum_GSV=0;
+		g_snum_GSV=0;
     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       :
@@ -666,6 +657,11 @@
  * Author            : hido.ltd
  * Modified Date:    : 2021年5月07日
  *******************************************************************************/
+extern uint8_t GPS_UPLOAD_FLAG;
+uint16_t GPS_UPload_sleep_flag=0;
+uint8_t gpserror;
+uint8_t fixed_solution_count_minute;
+extern uint8_t ceju_leave_flag;
 HIDO_VOID GPS_RecvFsm(HIDO_UINT8 _u8RecvChar)
 {
     switch (l_stGPSRecv.m_eState)
@@ -703,16 +699,72 @@
             {
             	l_stGPSRecv.m_acRecvBuf[l_stGPSRecv.m_u32RecvLen++] = _u8RecvChar;
             	l_stGPSRecv.m_acRecvBuf[l_stGPSRecv.m_u32RecvLen] = '\0';
-
+//                l_stGPSRecv.m_acRecvBuf[l_stGPSRecv.m_u32RecvLen - 2] = '\0';
+//                UDPClient_UploadGPS(l_stGPSRecv.m_acRecvBuf);
             	if(strstr(l_stGPSRecv.m_acRecvBuf, "GGA,") != HIDO_NULL)
             	{
             		GPS_ParseGGA(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen);
-                    memset(l_stGPSRecv.m_acRecvBuf,0, l_stGPSRecv.m_u32RecvLen);
+                    l_stGPSRecv.m_acRecvBuf[l_stGPSRecv.m_u32RecvLen - 2] = '\0';
+                    #ifdef UWB_CG
+                    UDPClient_UploadGPS(l_stGPSRecv.m_acRecvBuf); 
+								    #elseif  UWB_CK
+								    UDPClient_UploadGPS(l_stGPSRecv.m_acRecvBuf);
+                    #else  UWB_1_5HZ
+										if (l_u8PosState >= 1) 
+										{
+												if (++GPS_UPLOAD_FLAG >= 5)      
+												{ 
+														UDPClient_UploadGPS(l_stGPSRecv.m_acRecvBuf); 
+														GPS_UPLOAD_FLAG = 0;          // 
+												}
+										} 
+										else if (l_u8PosState == 0)           
+										{
+												if (++GPS_UPload_sleep_flag >= 60) 
+												{
+														UDPClient_UploadGPS(l_stGPSRecv.m_acRecvBuf);
+														GPS_UPload_sleep_flag = 0;    
+												}
+										}										
+                    #endif  
+
+             
+                    switch(l_u8PosState)
+                    {
+                        case 0:
+                        rtkled = RED;
+                        break;
+                        case 1:
+                        rtkled = BLUE; 
+                        break;
+                        case 2:
+                        rtkled = BLUE+GREEN; 
+                        break;
+                        case 4:
+                        rtkled = GREEN; 
+                        break;
+                        case 5:
+                        rtkled = YELLOW; 
+                        break;
+                        default:
+                        rtkled = WHITE; 
+                        break;
+                    } 
+									if(ceju_leave_flag==1)
+										{
+										 fixed_solution_count_minute++;
+										}
             	}
-                else if(strstr(l_stGPSRecv.m_acRecvBuf, "RMC,") != HIDO_NULL)
+							else if(strstr(l_stGPSRecv.m_acRecvBuf, "GSV,") != HIDO_NULL)
             	{
-            		GPS_ParseRMC(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen);
+            		GPS_ParseGSV(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen);
+            	}			
+
+                else //if(strstr(l_stGPSRecv.m_acRecvBuf, "RMC,") != HIDO_NULL)
+            	{
+            		gpserror++;
             	}
+
             }
 
             l_stGPSRecv.m_eState = GPS_RECV_STATE_IDLE;
@@ -871,3 +923,40 @@
 
 //    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;
+		}
+}
\ No newline at end of file

--
Gitblit v1.9.3