增加设置串口输入AT命令,优化gnss http服务下载 2457/1 2457/head 2458/target/1
authorpenglei <1624952103@qq.com>
Tue, 30 Sep 2025 09:18:56 +0000 (17:18 +0800)
committerpenglei <1624952103@qq.com>
Tue, 30 Sep 2025 09:18:56 +0000 (17:18 +0800)
code/sdk/zhihui/services/gnss/inc/gnss_http_server.h
code/sdk/zhihui/services/gnss/src/gnss_http_server.c
code/sdk/zhihui/utils/custom_utils_at_cmd.c

index fc6bced..0ae6575 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2025-02-14 10:30:32
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-09-30 11:19:47
+ * @LastEditTime: 2025-09-30 15:45:47
  * @FilePath: /sdk615/code/sdk/zhihui/drivers/gnss/service/gnss_ble_service.h
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
index 78bbcff..f0043c2 100644 (file)
 
 #define PGNSS_DATA_PATH          "/user/userdata/gnss"
 
+// JSON处理控制宏 - 设置为0可以屏蔽复杂的JSON处理逻辑
+#define ENABLE_COMPLEX_JSON_PROCESSING   0
+
+
 // 全局变量用于存储接收到的数据
 static char *g_agnss_response_buffer = NULL;
 static size_t g_agnss_response_size = 0;
@@ -756,7 +760,12 @@ static void agnss_process_complete_response(void)
     if (g_processing_count > 5) 
     {
         printf("Warning: Too many processing attempts (%d), skipping to prevent infinite loop\n", g_processing_count);
+#if ENABLE_COMPLEX_JSON_PROCESSING
         emergency_cleanup();
+#else
+        cleanup_agnss_response_buffer();
+        g_processing_count = 0;
+#endif
         return;
     }
     
@@ -773,9 +782,12 @@ static void agnss_process_complete_response(void)
     {
         printf("Processing complete AGNSS response, size: %zu bytes\n", g_agnss_response_size);
         
+#if ENABLE_COMPLEX_JSON_PROCESSING
         // 智能清理JSON数据
         smart_json_cleanup();
+#endif
         
+#if ENABLE_COMPLEX_JSON_PROCESSING
         // 验证JSON格式并修复截断问题 - 更智能的版本
         if (g_agnss_response_buffer[0] != '{' || g_agnss_response_buffer[g_agnss_response_size - 1] != '}') 
         {
@@ -986,6 +998,37 @@ static void agnss_process_complete_response(void)
         } else {
             // printf("JSON structure appears complete\n");
         }
+#else
+        // 简化的JSON处理逻辑
+        printf("Using simplified JSON processing\n");
+        
+        // 基本的JSON格式检查
+        if (g_agnss_response_size > 0) {
+            // 查找JSON开始位置
+            if (g_agnss_response_buffer[0] != '{') {
+                char *json_start = strchr(g_agnss_response_buffer, '{');
+                if (json_start) {
+                    size_t offset = json_start - g_agnss_response_buffer;
+                    memmove(g_agnss_response_buffer, json_start, g_agnss_response_size - offset);
+                    g_agnss_response_size -= offset;
+                    g_agnss_response_buffer[g_agnss_response_size] = '\0';
+                    printf("Adjusted JSON start, new size: %zu bytes\n", g_agnss_response_size);
+                }
+            }
+            
+            // 确保以}结尾
+            if (g_agnss_response_size > 0 && g_agnss_response_buffer[g_agnss_response_size - 1] != '}') {
+                char *json_end = strrchr(g_agnss_response_buffer, '}');
+                if (json_end) {
+                    g_agnss_response_size = json_end - g_agnss_response_buffer + 1;
+                    g_agnss_response_buffer[g_agnss_response_size] = '\0';
+                    printf("Adjusted JSON end, new size: %zu bytes\n", g_agnss_response_size);
+                }
+            }
+        }
+        
+        printf("Simplified JSON processing completed, size: %zu bytes\n", g_agnss_response_size);
+#endif
         
         // 使用已在函数开始处声明的文件列表变量
         
@@ -1460,6 +1503,7 @@ int download_agnss_files(void)
             }
             break;
         } else {
+            printf("gnss http result:%d, retry_count:%d\n",result,retry_count);
             // 简化错误处理,只保留必要的等待
             if (result == HTTP_EDNS) {
                 LOS_Msleep(500);
@@ -1567,6 +1611,7 @@ static void cleanup_agnss_response_buffer(void)
     }
 }
 
+#if ENABLE_COMPLEX_JSON_PROCESSING
 // 紧急清理函数 - 在检测到问题时调用
 static void emergency_cleanup(void)
 {
@@ -1579,6 +1624,7 @@ static void emergency_cleanup(void)
     // 清理可能的内存泄漏
     printf("Emergency cleanup completed\n");
 }
+#endif
 
 // 网络连接检查函数
 static int check_network_connectivity(void)
@@ -1625,6 +1671,7 @@ static void check_memory_status(void)
 }
 
 
+#if ENABLE_COMPLEX_JSON_PROCESSING
 // 智能JSON清理函数
 static void smart_json_cleanup(void)
 {
@@ -1646,6 +1693,7 @@ static void smart_json_cleanup(void)
         }
     }
 }
+#endif
 
 static void gnss_http_server_send_task(void const *arg)
 {
index 439f2b5..23cadd9 100644 (file)
@@ -1816,6 +1816,35 @@ static uint32_t custom_enter_factory_test_mode(uint8_t *para, uint32_t paraLen,
     return ERRCODE_SUCC;
 }
 
+// 录音相关AT指令实现
+static uint32_t custom_set_uart_status(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    UNUSED(strCommonCmd);
+    uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 };
+    uint32_t argc = 0;
+
+    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+    if (ret != CUSTOM_UTILS_SUCCESS) {
+        wstp_print("AUDIO TEST ATCMD Convert Command Failed\n");
+        return ERRCODE_FAIL;
+    }
+
+    if (argc != 1) {
+        wstp_print("AUDIO TEST ATCMD Set Parameter Failed argc %d\n", argc);
+        wstp_print("Usage: AT^AUDIOTEST=cmd\n");
+        wstp_print("  cmd: 1=start record, 2=stop record, 3=start play, 4=stop play\n");
+        return ERRCODE_FAIL;
+    }
+
+    uint8_t cmd = (uint8_t)atoi((char*)argv[0]);
+    
+    uapi_custom_set_uart_rx_enable_flag(cmd);
+
+    printf("uapi_custom_set_uart_rx_enable_flag :%d\n",cmd);
+
+    return ERRCODE_SUCC;
+}
+
 
 static const at_cmd_table_t g_custom_utils_cmd[] = {
     { (char *)"AT^CUSTOM_SN",      custom_utils_setsn, (char *)"123456789ABCDEF2345678" },
@@ -1920,6 +1949,7 @@ static const at_cmd_table_t g_custom_utils_cmd[] = {
     // 录音相关AT指令
     { (char *)"AT^AUDIOTEST",      custom_audio_test, (char *)" " },
     { (char *)"AT^FACTORY",      custom_enter_factory_test_mode, (char *)" " },
+    { (char *)"AT^SETUART",      custom_set_uart_status, (char *)" " },
 };