#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;
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;
}
{
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] != '}')
{
} 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
// 使用已在函数开始处声明的文件列表变量
}
break;
} else {
+ printf("gnss http result:%d, retry_count:%d\n",result,retry_count);
// 简化错误处理,只保留必要的等待
if (result == HTTP_EDNS) {
LOS_Msleep(500);
}
}
+#if ENABLE_COMPLEX_JSON_PROCESSING
// 紧急清理函数 - 在检测到问题时调用
static void emergency_cleanup(void)
{
// 清理可能的内存泄漏
printf("Emergency cleanup completed\n");
}
+#endif
// 网络连接检查函数
static int check_network_connectivity(void)
}
+#if ENABLE_COMPLEX_JSON_PROCESSING
// 智能JSON清理函数
static void smart_json_cleanup(void)
{
}
}
}
+#endif
static void gnss_http_server_send_task(void const *arg)
{
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" },
// 录音相关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 *)" " },
};