From c87d33e05bc9bd52f35c25b54281cbcd506674f7 Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Tue, 30 Sep 2025 17:18:56 +0800 Subject: [PATCH] =?utf8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BE=E7=BD=AE=E4=B8=B2?= =?utf8?q?=E5=8F=A3=E8=BE=93=E5=85=A5AT=E5=91=BD=E4=BB=A4=EF=BC=8C?= =?utf8?q?=E4=BC=98=E5=8C=96gnss=20http=E6=9C=8D=E5=8A=A1=E4=B8=8B?= =?utf8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../services/gnss/inc/gnss_http_server.h | 2 +- .../services/gnss/src/gnss_http_server.c | 48 +++++++++++++++++++ code/sdk/zhihui/utils/custom_utils_at_cmd.c | 30 ++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/code/sdk/zhihui/services/gnss/inc/gnss_http_server.h b/code/sdk/zhihui/services/gnss/inc/gnss_http_server.h index fc6bced0c..0ae657504 100644 --- a/code/sdk/zhihui/services/gnss/inc/gnss_http_server.h +++ b/code/sdk/zhihui/services/gnss/inc/gnss_http_server.h @@ -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 */ diff --git a/code/sdk/zhihui/services/gnss/src/gnss_http_server.c b/code/sdk/zhihui/services/gnss/src/gnss_http_server.c index 78bbcff21..f0043c272 100644 --- a/code/sdk/zhihui/services/gnss/src/gnss_http_server.c +++ b/code/sdk/zhihui/services/gnss/src/gnss_http_server.c @@ -35,6 +35,10 @@ #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) { diff --git a/code/sdk/zhihui/utils/custom_utils_at_cmd.c b/code/sdk/zhihui/utils/custom_utils_at_cmd.c index 439f2b576..23cadd9b2 100644 --- a/code/sdk/zhihui/utils/custom_utils_at_cmd.c +++ b/code/sdk/zhihui/utils/custom_utils_at_cmd.c @@ -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 *)" " }, }; -- 2.17.1