优化pgnss星历数据注入,运动不开启心率,由上层开启 2172/1 2172/head 2173/target/1 2174/target/1
authorpenglei <1624952103@qq.com>
Fri, 29 Aug 2025 04:02:40 +0000 (12:02 +0800)
committerpenglei <1624952103@qq.com>
Fri, 29 Aug 2025 04:02:40 +0000 (12:02 +0800)
code/sdk/zhihui/drivers/cywee/dml/cywee_dml.c
code/sdk/zhihui/services/gnss/sample/gnss_sample/gnss_sample.c
code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c
code/sdk/zhihui/services/gnss/src/gnss_http_server.c

index ddbd68a..a77313c 100644 (file)
@@ -1085,20 +1085,20 @@ void cywee_set_activity_mode_setstatus(int cmd)
     scl.iData[1] = cmd; 
     CWM_SettingControl(SCL_ACTIVITY_PAUSE, &scl);
 
-    if(cmd == 0)
-    {
-#ifdef SUPPORT_PPG_SERVICE
-        ppg_hr_start();
-#endif
-        uapi_save_runtime_log(RUNTIME_LOG_HEART_SPORT_MEASURE);
-    }
-    else
-    {
-#ifdef SUPPORT_PPG_SERVICE
-        ppg_hr_stop();
-#endif
-        uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_SPORT_MEASURE_END);
-    }
+//     if(cmd == 0)
+//     {
+// #ifdef SUPPORT_PPG_SERVICE
+//         ppg_hr_start();
+// #endif
+//         uapi_save_runtime_log(RUNTIME_LOG_HEART_SPORT_MEASURE);
+//     }
+//     else
+//     {
+// #ifdef SUPPORT_PPG_SERVICE
+//         ppg_hr_stop();
+// #endif
+//         uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_SPORT_MEASURE_END);
+//     }
 }
 
 void cywee_inactivity_mode_change(int mode)
@@ -1394,21 +1394,21 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
             if((int)sensorEVT->fData[1] == CUSTOM_HEARTRATE)
             {
                 CWM_OS_dbgPrintf("CUSTOM_HEARTRATE !!! \r\n");
-                if((int)sensorEVT->fData[2] == 1)
-                {
-#ifdef SUPPORT_PPG_SERVICE
-                    ppg_hr_start();
-#endif
-                    uapi_save_runtime_log(RUNTIME_LOG_HEART_SPORT_MEASURE);
-                    // hrs = 0;//运动开始,清零心率
-                }
-                else
-                {
-#ifdef SUPPORT_PPG_SERVICE
-                    ppg_hr_stop();
-#endif
-                    uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_SPORT_MEASURE_END);
-                }
+//                 if((int)sensorEVT->fData[2] == 1)
+//                 {
+// #ifdef SUPPORT_PPG_SERVICE
+//                     ppg_hr_start();
+// #endif
+//                     uapi_save_runtime_log(RUNTIME_LOG_HEART_SPORT_MEASURE);
+//                     // hrs = 0;//运动开始,清零心率
+//                 }
+//                 else
+//                 {
+// #ifdef SUPPORT_PPG_SERVICE
+//                     ppg_hr_stop();
+// #endif
+//                     uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_SPORT_MEASURE_END);
+//                 }
             }
             if((int)sensorEVT->fData[1] == CUSTOM_GNSS)
             {
index bdc3070..d9213e6 100644 (file)
@@ -242,10 +242,11 @@ static void ListenGnssData(tiot_handle handle)
     // 写日志\r
     for (;;) {  // 写日志条件\r
 \r
-        if (i >= LISTEN_DATA_MAX_LINES) {\r
-            printf("\ncnt enough\n");\r
-            break;\r
-        }\r
+        // 注释掉行数限制,让GPS一直运行\r
+        // if (i >= LISTEN_DATA_MAX_LINES) {\r
+        //     printf("\ncnt enough\n");\r
+        //     break;\r
+        // }\r
         if (g_gnss_stopflag == 1)\r
         {\r
             break;\r
index 9843b91..160d3b2 100644 (file)
@@ -289,10 +289,11 @@ static void ListenGnssData(tiot_handle handle)
     // 写日志
     for (;;) {  // 写日志条件
 
-        if (i >= LISTEN_DATA_MAX_LINES) {
-            printf("\r\ncnt enough\r\n");
-            break;
-        }
+        // 注释掉行数限制,让GPS一直运行
+        // if (i >= LISTEN_DATA_MAX_LINES) {
+        //     printf("\r\ncnt enough\r\n");
+        //     break;
+        // }
         if (g_pgnss_stopflag == 1)
         {
             break;
@@ -312,8 +313,12 @@ static void ListenGnssData(tiot_handle handle)
                     if (decode_nmea(pbuf[index])==1)
                     {
                         // dump_location_data(&g_global_gpsData);
-                        char temp_buf[512];
-                        dump_location_data_to_buf(&g_global_gpsData, temp_buf, sizeof(temp_buf));
+                        char *temp_buf = (char *)malloc(512);
+                        if (temp_buf == NULL) {
+                            printf("error: malloc temp_buf failed!\n");
+                            continue;
+                        }
+                        dump_location_data_to_buf(&g_global_gpsData, temp_buf, 512);
                         
                         // 追加到pgnss_log中
                         if (pgnss_log != NULL) {
@@ -321,10 +326,16 @@ static void ListenGnssData(tiot_handle handle)
                             int data_len = strlen(temp_buf);
                             if (current_len + data_len < 2047) {  // 留1字节给字符串结束符
                                 snprintf(pgnss_log + current_len, 2048 - current_len, "%s", temp_buf);
+                            } else {
+                                // 内存满了,清空从头开始存储
+                                printf("pgnss_log memory full, clearing and restarting\n");
+                                memset(pgnss_log, 0, 2048);
+                                snprintf(pgnss_log, 2048, "%s", temp_buf);
                             }
                         }
                         
                         printf("decode_nmea done\r\n");
+                        free(temp_buf);
                     }
                 }
             }
@@ -615,7 +626,7 @@ static int pgnss_startup_check(void)
         check_count++;
         
         // 检查是否有文件
-        if (check_agnss_folder_expired()) {
+        if (!check_agnss_folder_expired()) {
             printf("✓ AGNSS files downloaded successfully after %d seconds\n", check_count * 10);
             printf("=== PGNSS Startup Check Passed ===\n");
             
index ef9616a..7cb4f63 100644 (file)
@@ -39,6 +39,9 @@ static size_t g_agnss_response_capacity = 0;
 // 全局静态变量用于防止重复处理
 static int g_processing_count = 0;
 
+// 全局标志位:标记是否已经获取到有效的JSON数据
+static int g_has_valid_json_data = 0;
+
 static unsigned long g_app_recv_queue= 0xFFFFFFFF;
 static unsigned long g_app_send_queue= 0xFFFFFFFF;
 
@@ -139,6 +142,9 @@ static void agnss_download_result_handler(const char *filename, HTTPC_RESULT res
             
             // 发送完成信号到接收任务
             do_gnss_http_server_recv_data(GNSS_HTTP_SERVICE_CMD_AGNSS_RECV, NULL, 0);
+        } else {
+            // HTTP请求失败,标志位由download_agnss_files函数管理
+            printf("HTTP request failed (result: %d, code: %d)\n", result, response_code);
         }
     }
 }
@@ -532,7 +538,7 @@ static void agnss_accumulate_data(const char *data, size_t len)
             // 尝试查找JSON开始位置
             for (size_t i = 0; i < len; i++) {
                 if (data[i] == '{') {
-                    printf("Found JSON start at position %zu, adjusting data\n", i);
+                    // printf("Found JSON start at position %zu, adjusting data\n", i);
                     data += i;
                     len -= i;
                     break;
@@ -640,6 +646,8 @@ static void verify_downloaded_files(uint32_t selected_timestamp)
     verify_files_recursive(PGNSS_DATA_PATH, &total_count);
     
     printf("Total: %d files in timestamp folder: %s/%u\n", total_count, PGNSS_DATA_PATH, selected_timestamp);
+    
+    // 下载完成,标志位由download_agnss_files函数管理
 }
 
 
@@ -680,15 +688,15 @@ static void agnss_process_complete_response(void)
         // 验证JSON格式并修复截断问题 - 更智能的版本
         if (g_agnss_response_buffer[0] != '{' || g_agnss_response_buffer[g_agnss_response_size - 1] != '}') 
         {
-            printf("Warning: Response doesn't appear to be valid JSON\n");
-            printf("First char: '%c', Last char: '%c'\n", 
-                   g_agnss_response_buffer[0], 
-                   g_agnss_response_buffer[g_agnss_response_size - 1]);
+                    // printf("Warning: Response doesn't appear to be valid JSON\n");
+        // printf("First char: '%c', Last char: '%c'\n", 
+        //        g_agnss_response_buffer[0], 
+        //        g_agnss_response_buffer[g_agnss_response_size - 1]);
             
             // 检查是否有明显的截断标记
             if (strstr(g_agnss_response_buffer, "1ff8") || strstr(g_agnss_response_buffer, "0x0D")) 
             {
-                printf("Warning: JSON data appears to be truncated with corruption markers\n");
+                // printf("Warning: JSON data appears to be truncated with corruption markers\n");
                 // 尝试找到最后一个完整的JSON对象
                 char *last_complete = NULL;
                 char *search_pos = g_agnss_response_buffer;
@@ -702,7 +710,7 @@ static void agnss_process_complete_response(void)
                     size_t new_size = last_complete - g_agnss_response_buffer;
                     g_agnss_response_size = new_size;
                     g_agnss_response_buffer[g_agnss_response_size] = '\0';
-                    printf("Truncated JSON to last complete object, new size: %zu bytes\n", g_agnss_response_size);
+                    // printf("Truncated JSON to last complete object, new size: %zu bytes\n", g_agnss_response_size);
                 }
             }
             
@@ -713,7 +721,7 @@ static void agnss_process_complete_response(void)
             // 检查是否有截断的JSON数据
             if (strstr(g_agnss_response_buffer, "1ff8") || strstr(g_agnss_response_buffer, "0x0D"))
             {
-                printf("Warning: Detected corrupted JSON data with truncation markers\n");
+                // printf("Warning: Detected corrupted JSON data with truncation markers\n");
                 // 尝试找到最后一个完整的JSON对象
                 char *last_complete = NULL;
                 char *search_pos = g_agnss_response_buffer;
@@ -725,16 +733,16 @@ static void agnss_process_complete_response(void)
                 if (last_complete) 
                 {
                     json_end = last_complete - 1; // 指向 '}' 字符
-                    printf("Truncated to last complete JSON object at position %ld\n", 
-                           json_end - g_agnss_response_buffer);
+                    // printf("Truncated to last complete JSON object at position %ld\n", 
+                    //        json_end - g_agnss_response_buffer);
                 }
             }
             
             if (json_start && json_end && json_end > json_start) 
             {
-                printf("Found JSON content between positions %ld and %ld\n", 
-                       json_start - g_agnss_response_buffer, 
-                       json_end - g_agnss_response_buffer);
+                            // printf("Found JSON content between positions %ld and %ld\n", 
+            //        json_start - g_agnss_response_buffer, 
+            //        json_end - g_agnss_response_buffer);
                 
                 // 验证这个JSON片段是否完整
                 int brace_count = 0;
@@ -754,11 +762,11 @@ static void agnss_process_complete_response(void)
                     memmove(g_agnss_response_buffer, json_start, new_size);
                     g_agnss_response_size = new_size;
                     g_agnss_response_buffer[g_agnss_response_size] = '\0';
-                    printf("Adjusted buffer size to %zu bytes (complete JSON)\n", g_agnss_response_size);
+                    // printf("Adjusted buffer size to %zu bytes (complete JSON)\n", g_agnss_response_size);
                 } 
                 else 
                 {
-                    printf("Found JSON fragment but structure incomplete - braces: %d, brackets: %d\n", brace_count, bracket_count);
+                    // printf("Found JSON fragment but structure incomplete - braces: %d, brackets: %d\n", brace_count, bracket_count);
                     // 尝试查找最后一个完整的JSON对象
                     char *last_complete = NULL;
                     char *search_pos = g_agnss_response_buffer;
@@ -786,19 +794,19 @@ static void agnss_process_complete_response(void)
                         size_t new_size = last_complete - g_agnss_response_buffer;
                         g_agnss_response_size = new_size;
                         g_agnss_response_buffer[g_agnss_response_size] = '\0';
-                        printf("Truncated to last complete JSON object, size: %zu bytes\n", g_agnss_response_size);
+                        // printf("Truncated to last complete JSON object, size: %zu bytes\n", g_agnss_response_size);
                     } 
                     else 
                     {
-                        printf("Could not find any complete JSON structure, using original data\n");
+                        // printf("Could not find any complete JSON structure, using original data\n");
                     }
                 }
             } 
             else
             {
-                printf("Error: Could not find valid JSON boundaries\n");
-                printf("JSON start found: %s\n", json_start ? "yes" : "no");
-                printf("JSON end found: %s\n", json_end ? "yes" : "no");
+                            // printf("Error: Could not find valid JSON boundaries\n");
+            // printf("JSON start found: %s\n", json_start ? "yes" : "no");
+            // printf("JSON end found: %s\n", json_end ? "yes" : "no");
                 
                 // 尝试查找最后一个完整的JSON对象
                 char *last_complete = NULL;
@@ -827,16 +835,16 @@ static void agnss_process_complete_response(void)
                     size_t new_size = last_complete - g_agnss_response_buffer;
                     g_agnss_response_size = new_size;
                     g_agnss_response_buffer[g_agnss_response_size] = '\0';
-                    printf("Truncated to last complete JSON object, size: %zu bytes\n", g_agnss_response_size);
+                    // printf("Truncated to last complete JSON object, size: %zu bytes\n", g_agnss_response_size);
                 } 
                 else 
                 {
-                    printf("Could not find any complete JSON structure, using original data\n");
+                    // printf("Could not find any complete JSON structure, using original data\n");
                 }
             }
         }
         
-        printf("AGNSS JSON data:\n%s\n", g_agnss_response_buffer);
+        // printf("AGNSS JSON data:\n%s\n", g_agnss_response_buffer);
         
         // 检查JSON数据完整性
         int brace_count = 0;
@@ -849,12 +857,12 @@ static void agnss_process_complete_response(void)
         }
         
         if (brace_count != 0 || bracket_count != 0) {
-            printf("Warning: JSON structure incomplete - braces: %d, brackets: %d\n", brace_count, bracket_count);
+            // printf("Warning: JSON structure incomplete - braces: %d, brackets: %d\n", brace_count, bracket_count);
             
             // 如果JSON结构不完整,尝试修复
             if (brace_count > 0 || bracket_count > 0) {
                 // 缺少右大括号或右方括号,尝试添加
-                printf("Attempting to fix incomplete JSON by adding missing braces/brackets\n");
+                // printf("Attempting to fix incomplete JSON by adding missing braces/brackets\n");
                 size_t needed_braces = (brace_count > 0) ? brace_count : 0;
                 size_t needed_brackets = (bracket_count > 0) ? bracket_count : 0;
                 
@@ -878,14 +886,14 @@ static void agnss_process_complete_response(void)
                         }
                         g_agnss_response_buffer[g_agnss_response_size] = '\0';
                         
-                        printf("Fixed JSON structure, new size: %zu bytes\n", g_agnss_response_size);
+                        // printf("Fixed JSON structure, new size: %zu bytes\n", g_agnss_response_size);
                     } else {
-                        printf("Failed to allocate memory for JSON fix\n");
+                        // printf("Failed to allocate memory for JSON fix\n");
                     }
                 }
             }
         } else {
-            printf("JSON structure appears complete\n");
+            // printf("JSON structure appears complete\n");
         }
         
         // 使用已在函数开始处声明的文件列表变量
@@ -1083,6 +1091,7 @@ static void agnss_process_complete_response(void)
             }
         } else {
             printf("AGNSS API call failed or returned error\n");
+            // API调用失败,标志位由download_agnss_files函数管理
         }
         
         // 清理缓冲区
@@ -1222,6 +1231,10 @@ static void free_url(BK_URL *url) {
 
 int download_agnss_files(void)
 {
+    // 进入函数时设置标志位,表示正在下载
+    g_has_valid_json_data = 1;
+    printf("Starting AGNSS download, set download flag\n");
+    
     //通讯开始,唤醒cat1
     cat1_api_add_cat1_vote();
     cat1_api_wakeup_cat1(1);
@@ -1311,6 +1324,13 @@ int download_agnss_files(void)
     
     if (result != HTTP_SUCCESS) {
         agnss_download_result_handler(NULL, result, 0, NULL, 0);
+        // 下载失败,清除标志位
+        g_has_valid_json_data = 0;
+        printf("Download failed, cleared download flag\n");
+    } else {
+        // 下载成功,清除标志位
+        g_has_valid_json_data = 0;
+        printf("Download completed successfully, cleared download flag\n");
     }
     
     return 0;
@@ -1455,7 +1475,7 @@ static void smart_json_cleanup(void)
             if (new_size < g_agnss_response_size) {
                 g_agnss_response_size = new_size;
                 g_agnss_response_buffer[g_agnss_response_size] = '\0';
-                printf("Smart JSON cleanup: truncated to %zu bytes\n", g_agnss_response_size);
+                // printf("Smart JSON cleanup: truncated to %zu bytes\n", g_agnss_response_size);
             }
         }
     }