ln:优化模组升级优化 2934/1
authorxue <2144439972@qq.com>
Wed, 17 Dec 2025 05:53:31 +0000 (13:53 +0800)
committerxue <2144439972@qq.com>
Wed, 17 Dec 2025 05:53:31 +0000 (13:53 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h
code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c

index 437678c..21e6546 100644 (file)
@@ -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;
                 }
                
index 37cfe7c..e1c87d7 100644 (file)
@@ -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");
index a9f8460..7d18a0b 100644 (file)
@@ -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);
 /* 解析删除表情 */
index cc6a4e3..6a41acf 100644 (file)
@@ -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