From c6e0774556405076061f97087c7696672074e60f Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Fri, 29 Aug 2025 12:02:40 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96pgnss=E6=98=9F=E5=8E=86?= =?utf8?q?=E6=95=B0=E6=8D=AE=E6=B3=A8=E5=85=A5=EF=BC=8C=E8=BF=90=E5=8A=A8?= =?utf8?q?=E4=B8=8D=E5=BC=80=E5=90=AF=E5=BF=83=E7=8E=87=EF=BC=8C=E7=94=B1?= =?utf8?q?=E4=B8=8A=E5=B1=82=E5=BC=80=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- code/sdk/zhihui/drivers/cywee/dml/cywee_dml.c | 58 +++++++------- .../gnss/sample/gnss_sample/gnss_sample.c | 9 ++- .../gnss/sample/pgnss_sample/pgnss_sample.c | 25 ++++-- .../services/gnss/src/gnss_http_server.c | 78 ++++++++++++------- 4 files changed, 101 insertions(+), 69 deletions(-) diff --git a/code/sdk/zhihui/drivers/cywee/dml/cywee_dml.c b/code/sdk/zhihui/drivers/cywee/dml/cywee_dml.c index ddbd68ae8..a77313ce1 100644 --- a/code/sdk/zhihui/drivers/cywee/dml/cywee_dml.c +++ b/code/sdk/zhihui/drivers/cywee/dml/cywee_dml.c @@ -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) { diff --git a/code/sdk/zhihui/services/gnss/sample/gnss_sample/gnss_sample.c b/code/sdk/zhihui/services/gnss/sample/gnss_sample/gnss_sample.c index bdc307031..d9213e628 100644 --- a/code/sdk/zhihui/services/gnss/sample/gnss_sample/gnss_sample.c +++ b/code/sdk/zhihui/services/gnss/sample/gnss_sample/gnss_sample.c @@ -242,10 +242,11 @@ static void ListenGnssData(tiot_handle handle) // 写日志 for (;;) { // 写日志条件 - if (i >= LISTEN_DATA_MAX_LINES) { - printf("\ncnt enough\n"); - break; - } + // 注释掉行数限制,让GPS一直运行 + // if (i >= LISTEN_DATA_MAX_LINES) { + // printf("\ncnt enough\n"); + // break; + // } if (g_gnss_stopflag == 1) { break; diff --git a/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c b/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c index 9843b9174..160d3b242 100644 --- a/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c +++ b/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c @@ -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"); 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 ef9616a6e..7cb4f63d4 100644 --- a/code/sdk/zhihui/services/gnss/src/gnss_http_server.c +++ b/code/sdk/zhihui/services/gnss/src/gnss_http_server.c @@ -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); } } } -- 2.17.1