From c1c6133eab1f26cc3290babf44f557df884459d2 Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Wed, 17 Dec 2025 13:53:31 +0800 Subject: [PATCH] =?utf8?q?ln:=E4=BC=98=E5=8C=96=E6=A8=A1=E7=BB=84=E5=8D=87?= =?utf8?q?=E7=BA=A7=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../thunderbird/src/ThunderBirdModel.cpp | 61 +++--------- code/sdk/zhihui/leiniao/imsl_ln/ln_api.c | 5 + code/sdk/zhihui/leiniao/imsl_ln/ln_api.h | 7 ++ code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c | 96 +++++++++++++++++++ 4 files changed, 121 insertions(+), 48 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp index 437678cbc..21e65460c 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp @@ -1643,43 +1643,12 @@ extern "C" { extern uint8_t g_py_ver; bool ThunderBirdModel::is_Cat1_OtaUpgrade() { - uint32_t ret = 0; - char * text = cat1_api_runtime_get_cat1_modemver(); - char version[16] = {0}; - if (get_modem_fw_version(text, version) == 0) - { - printf("输入1:%s\n", text); - printf("Modem固件版本1:%s\n", version); // 预期输出:EG8AK1022 - } - string version1_str = std::string(version) + "V"+ std::to_string(g_py_ver) + "_1"; - ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str.c_str(), g_ln_last_package_url_new1); - if(ERRCODE_SUCC != ret) - { - ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str.c_str(), g_ln_last_package_url_new1); - } - - string version2_str = std::string(version) + "V"+ std::to_string(g_py_ver) + "_2"; - ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str.c_str(), g_ln_last_package_url_new2); - if(ERRCODE_SUCC != ret) - { - ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str.c_str(), g_ln_last_package_url_new2); - } - - // 检查cat1模组升级url是否为空 - if(strlen(g_ln_last_package_url_new1) == 0) - { - ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str.c_str(), g_ln_last_package_url_new1); - } - if(strlen(g_ln_last_package_url_new2) == 0) - { - ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str.c_str(), g_ln_last_package_url_new2); - } - // 检查cat1模组升级url是否为空 - if(strlen(g_ln_last_package_url_new1) == 0 || strlen(g_ln_last_package_url_new2) == 0) - { - return false; - } - return true; + // 发送命令到后台线程执行,避免阻塞UI线程 + // 注意:此函数现在只发送命令,不返回实际结果 + // 结果通过 push_ota_status 回调通知 + do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE, NULL, 0); + // 返回false表示异步处理中,实际结果通过回调通知 + return false; } /** @@ -1750,15 +1719,10 @@ extern "C" { // 需要是绑定状态才更新 // if(bind_status == true) // { - if(is_Cat1_OtaUpgrade()) - { - // Cat1OtaUpgrade(); - push_ota_status(OTA_UI_STATUS_CAT1_START); - } - else - { - ota_update_boot(); - } + // OTA检查异步执行,避免阻塞状态回调(特别是在连网状态下,HTTP请求会阻塞) + // 直接发送命令到后台线程执行,结果通过 push_ota_status 回调通知 + do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE, NULL, 0); + // } // } //未绑定状态,联网隐藏网络断开提醒 // if(bind_status == false) @@ -1791,8 +1755,7 @@ extern "C" { uapi_init_all_websocket_servers(); uapi_start_all_websocket_servers(0); // 连接服务器 #endif - //VAD认证 - do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_VAD_AUTH, NULL, 0); + //上报一次耳机状态 @@ -1803,6 +1766,8 @@ extern "C" { ln_bt_report_earphone_connection_status();//上报耳机状态 } + //VAD认证 + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_VAD_AUTH, NULL, 0); init_falg = true; } diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c index 37cfe7cc0..e1c87d7bf 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c @@ -1262,6 +1262,11 @@ static void ln_http_server_send_task(void const *arg) WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN_HTTP_SERVICE_CMD_HTTP_DOWNLOAD] invalid mail data"); } } + else if (mail.cmd == LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE) + { + printf("LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE:检查是否需要CAT1 OTA升级\n"); + ln_is_cat1_ota_upgrade_check(); + } else if (mail.cmd == LN_HTTP_SERVICE_CMD_DOWNLOAD_EMOJI) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LN_HTTP_SERVICE_CMD_DOWNLOAD_EMOJI:下载表情任务请求\n"); diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h index a9f8460a9..7d18a0bea 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h @@ -146,6 +146,9 @@ typedef struct #define LN_HTTP_SERVICE_CMD_CHAT_SESSION_END 0x1017 /* 语音对话流结束 */ #define LN_HTTP_SERVICE_CMD_HTTP_DOWNLOAD 0x101A /* HTTP文件下载(队列异步调度) */ +/* 是否需要cat1模组升级*/ +#define LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE 0x101B /* 是否需要cat1模组升级 */ + /* -------------------------------------------------------------------------- */ @@ -156,6 +159,8 @@ extern char g_ln_last_package_url_new2[256]; uint32_t ln_ota_get_task_http_CAT1(const char *device_id, const char *device_token, const char *source_version, char *url); +/* 检查是否需要CAT1 OTA升级(在后台线程执行,避免阻塞UI线程) */ +void ln_is_cat1_ota_upgrade_check(void); /* -------------------------------------------------------------------------- */ /* 下载文件相关结构体 */ @@ -349,6 +354,8 @@ void ln_parse_sleep_mode_end(const char *json_str, int json_len); void ln_parse_schedule_reminder(const char *json_str, int json_len); /* 解析日程提醒配置 */ void ln_parse_schedule_reminder_config(const char *json_str, int json_len); +/* 设置提醒音量为0(静音提醒音频,避免阻塞) */ +void ln_schedule_reminder_set_volume_zero(void); /* 解析下载表情 */ void ln_parse_download_emoji(const char *json_str, int json_len); /* 解析删除表情 */ diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c index cc6a4e3b1..6a41acf74 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c @@ -8,6 +8,10 @@ #include "custom_utils.h" #include "cJSON.h" #include "http_file_download_client.h" +#ifdef SUPPORT_CAT1_SERVICE +#include "cat1_pub_api.h" +#endif +extern uint8_t g_py_ver; /* Python服务版本号 */ /* OTA下载状态枚举(对应时序图中的下载阶段)*/ typedef enum @@ -1436,4 +1440,96 @@ end: cat1_api_remove_cat1_app_vote(); #endif return ERRCODE_SUCC; +} + +/* 提取modem固件版本号(前缀+最后4位) */ +static int get_modem_fw_version_c(const char* input_str, char* output_str) +{ + if (input_str == NULL || strlen(input_str) == 0 || output_str == NULL) { + return -1; + } + + memset(output_str, 0, 16); + + // 提取字符串最后4位 + char suffix_4[5] = {0}; + int input_len = strlen(input_str); + int suffix_start = (input_len >= 4) ? (input_len - 4) : 0; + strncpy(suffix_4, input_str + suffix_start, 4); + suffix_4[4] = '\0'; + + // 判断前缀并拼接版本号 + if (strstr(input_str, "EG800AK") != NULL) { + strcpy(output_str, "EG8AK"); + strcat(output_str, suffix_4); + } else if (strstr(input_str, "EG810") != NULL) { + strcpy(output_str, "EG810"); + strcat(output_str, suffix_4); + } else { + return -1; + } + return 0; +} + +/* 检查是否需要CAT1 OTA升级(在后台线程执行,避免阻塞UI线程) */ +void ln_is_cat1_ota_upgrade_check(void) +{ + printf("[OTA] ln_is_cat1_ota_upgrade_check: 开始检查CAT1 OTA升级\n"); + +#ifdef SUPPORT_CAT1_SERVICE + uint32_t ret = 0; + // 直接获取CAT1 modem版本(如果版本还未获取,会在后续处理中处理) + char *text = cat1_api_runtime_get_cat1_modemver(); + if (!text || strlen(text) == 0) { + printf("[OTA] cat1 modem版本为空,执行普通OTA升级\n"); + do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, NULL, 0); + return; + } + + char version[16] = {0}; + if (get_modem_fw_version_c(text, version) != 0) { + printf("[OTA] 无法解析modem版本,执行普通OTA升级\n"); + do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, NULL, 0); + return; + } + + printf("[OTA] Modem固件版本: %s\n", version); + + // 构建版本字符串 + char version1_str[64] = {0}; + char version2_str[64] = {0}; + snprintf(version1_str, sizeof(version1_str), "%sV%d_1", version, g_py_ver); + snprintf(version2_str, sizeof(version2_str), "%sV%d_2", version, g_py_ver); + + // 获取CAT1 OTA升级URL + ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str, g_ln_last_package_url_new1); + if(ERRCODE_SUCC != ret) { + ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str, g_ln_last_package_url_new1); + } + + ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str, g_ln_last_package_url_new2); + if(ERRCODE_SUCC != ret) { + ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str, g_ln_last_package_url_new2); + } + + // 检查cat1模组升级url是否为空 + if(strlen(g_ln_last_package_url_new1) == 0) { + ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str, g_ln_last_package_url_new1); + } + if(strlen(g_ln_last_package_url_new2) == 0) { + ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str, g_ln_last_package_url_new2); + } + + // 检查cat1模组升级url是否为空 + if(strlen(g_ln_last_package_url_new1) == 0 || strlen(g_ln_last_package_url_new2) == 0) { + printf("[OTA] cat1模组升级url为空,执行普通OTA升级\n"); + do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, NULL, 0); + } else { + printf("[OTA] cat1模组升级url不为空,触发CAT1升级\n"); + push_ota_status(OTA_UI_STATUS_CAT1_START); + } +#else + // 不支持CAT1服务,直接执行普通OTA升级 + do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, NULL, 0); +#endif } \ No newline at end of file -- 2.17.1