增加pgnss缓存日志 2119/1 2119/head
authorpenglei <1624952103@qq.com>
Thu, 21 Aug 2025 07:22:20 +0000 (15:22 +0800)
committerpenglei <1624952103@qq.com>
Thu, 21 Aug 2025 07:22:20 +0000 (15:22 +0800)
code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c

index d7130ad..a101cde 100644 (file)
@@ -6,6 +6,8 @@
  */\r
 #include "pgnss_sample.h"\r
 #include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
 #include "securec.h"\r
 #include "tiot_service_interface.h"\r
 #include "pm_definition.h"\r
@@ -45,6 +47,8 @@ static int g_is_pgnss_poweron=0;
 static int g_is_pgnss_logon=0;\r
 static int g_pgnss_stopflag=0;\r
 \r
+static char *pgnss_log = NULL;\r
+\r
 static int32_t QryVersion(tiot_handle handle)\r
 {\r
     const uint8_t qryVersion[] = {0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00};\r
@@ -239,6 +243,19 @@ static void ListenGnssData(tiot_handle handle)
                     if (decode_nmea(pbuf[index])==1)\r
                     {\r
                         // dump_location_data(&g_global_gpsData);\r
+                        char temp_buf[512];\r
+                        dump_location_data_to_buf(&g_global_gpsData, temp_buf, sizeof(temp_buf));\r
+                        \r
+                        // 追加到pgnss_log中\r
+                        if (pgnss_log != NULL) {\r
+                            int current_len = strlen(pgnss_log);\r
+                            int data_len = strlen(temp_buf);\r
+                            if (current_len + data_len < 2047) {  // 留1字节给字符串结束符\r
+                                // strcat(pgnss_log, temp_buf);\r
+                                snprintf(pgnss_log + current_len, 2048 - current_len, "%s", temp_buf);\r
+                            }\r
+                        }\r
+                        \r
                         printf("decode_nmea done\r\n");\r
                     }\r
                 }\r
@@ -278,9 +295,24 @@ int PGnssLogEnable(bool enable)
 void PGnssServerStart(void)\r
 {\r
     printf("\nenter gnss samples\r\n");\r
+    \r
+    if (pgnss_log == NULL) \r
+    {\r
+        pgnss_log = (char *)malloc(2048);\r
+        if (pgnss_log == NULL) {\r
+            printf("error: malloc pgnss_log failed!\n");\r
+            return;\r
+        }\r
+        memset(pgnss_log, 0, 2048);\r
+    }\r
+\r
     if(g_is_pgnss_poweron == 1)\r
     {\r
         printf("gnss already on\r\n");\r
+        if (pgnss_log != NULL) {\r
+            free(pgnss_log);\r
+            pgnss_log = NULL;\r
+        }\r
         return ;\r
     }\r
     uapi_pm_add_sleep_veto(PM_ID_SYS);\r
@@ -297,6 +329,11 @@ void PGnssServerStart(void)
         printf("tiot service init fail\r\n");\r
         g_is_pgnss_poweron = 0;\r
         g_pgnss_stopflag = 1;\r
+        if (pgnss_log != NULL) {\r
+            free(pgnss_log);\r
+            pgnss_log = NULL;\r
+        }\r
+        return;\r
     }\r
 \r
     // 打开日志文件\r
@@ -305,6 +342,10 @@ void PGnssServerStart(void)
         g_gnssLogFp = fopen("/user/log/gnss.log", "w");\r
         if (g_gnssLogFp == NULL) {\r
             printf("error: open log file error\n");\r
+            if (pgnss_log != NULL) {\r
+                free(pgnss_log);\r
+                pgnss_log = NULL;\r
+            }\r
             return;\r
         }\r
     }\r
@@ -316,6 +357,10 @@ void PGnssServerStart(void)
         printf("open tiot service fail\r\n");\r
         g_is_pgnss_poweron = 0;\r
         g_pgnss_stopflag = 1;\r
+        if (pgnss_log != NULL) {\r
+            free(pgnss_log);\r
+            pgnss_log = NULL;\r
+        }\r
         return;\r
     }\r
     printf("open tiot service success\r\n");\r
@@ -367,4 +412,11 @@ void PGnssServerStart(void)
     sw_debug_uart_deinit();\r
     uart_config_init();\r
     printf("finish gnss samples\r\n");\r
+    \r
+    printf("pgnss_log: %s\r\n", pgnss_log);\r
+    // 释放pgnss_log内存\r
+    if (pgnss_log != NULL) {\r
+        free(pgnss_log);\r
+        pgnss_log = NULL;\r
+    }\r
 }\r