ln:模组升级优化,自动获取升级不在写死
authorluozheng <1732036298@qq.com>
Wed, 17 Dec 2025 03:07:40 +0000 (11:07 +0800)
committerluozheng <1732036298@qq.com>
Wed, 17 Dec 2025 03:07:40 +0000 (11:07 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index 27ab990..437678c 100644 (file)
@@ -97,6 +97,7 @@ extern "C" {
  #endif
         #include <input_app.h>
         #include "broadcast_feature.h"
+        #include <cat1_runtime.h>
 
 
          int32_t AudioCaptureSample(int32_t argc, const char *argv[]);
@@ -1591,53 +1592,129 @@ extern "C" {
     }
     
     /* -------------------------------------------------------------------------- */
-
-    bool ThunderBirdModel::is_Cat1_OtaUpgrade()
-    {
-        cat1_pyver = uapi_dev_runtime_get_cat1_pyver();
-        if(cat1_pyver == "PY_SRV_V27" || cat1_pyver == "PY_SRV_V28")
-        {
-            return true;
-        }
-        else
-        {
-            return false;
+    /**
+     * @brief 提取modem固件版本号(前缀+最后4位)
+     * @param input_str 输入字符串(如"EG800AKCN91LCR07A01M04_OCPU_QPY_BETA1022")
+     * @param output_str 输出固件版本号(需提前分配足够内存,至少16字节)
+     * @return 成功返回0,失败返回-1;output_str格式:前缀+最后4位(如EG8AK1022、EG810xxxx)
+     * @note 1. 包含"EG800AK" → 前缀为"EG8AK",拼接最后4位;
+     *       2. 包含"EG810" → 前缀为"EG810",拼接最后4位;
+     *       3. 无匹配前缀返回失败;字符串长度<4时,最后4位取全部字符
+     */
+    int get_modem_fw_version(const char* input_str, char* output_str) 
+    {
+        // 输入参数校验
+        if (input_str == NULL || strlen(input_str) == 0) {
+            printf("错误:输入字符串为空\n");
+            return -1;
+        }
+        if (output_str == NULL) {
+            printf("错误:输出缓冲区为空\n");
+            return -1;
+        }
+
+        // 清空输出缓冲区
+        memset(output_str, 0, strlen(output_str) > 0 ? strlen(output_str) : 16);
+
+        // 1. 提取字符串最后4位
+        char suffix_4[5] = {0};  // 存储最后4位(+1存结束符)
+        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';  // 确保字符串结束
+
+        // 2. 判断前缀并拼接版本号
+        if (strstr(input_str, "EG800AK") != NULL) {
+            // 包含EG800AK → 前缀EG8AK + 最后4位
+            strcpy(output_str, "EG8AK");
+            strcat(output_str, suffix_4);
+        } else if (strstr(input_str, "EG810") != NULL) {
+            // 包含EG810 → 前缀EG810 + 最后4位
+            strcpy(output_str, "EG810");
+            strcat(output_str, suffix_4);
+        } else {
+            // 无匹配前缀
+            printf("错误:输入字符串无匹配前缀(EG800AK/EG810)\n");
+            return -1;
         }
+        return 0;
     }
 
-    /**
-     * @brief cat1模组升级函数
-    */
-    void ThunderBirdModel::Cat1OtaUpgrade()
+    extern uint8_t g_py_ver;
+    bool ThunderBirdModel::is_Cat1_OtaUpgrade()
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1模组升级");
-        LOS_Msleep(1000);
         uint32_t ret = 0;
-        const char * text1 = "EG8AK1022V27_1";
-        ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), text1, g_ln_last_package_url_new1);
+        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(), text1, g_ln_last_package_url_new1);
+            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);
         }
-        const char * text2 = "EG8AK1022V27_2";
-        ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), text2, g_ln_last_package_url_new2);
+        
+        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(), text2, g_ln_last_package_url_new2);
+            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(), text1, g_ln_last_package_url_new1);
+            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(), text2, g_ln_last_package_url_new2);
+            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;
+    }
+
+    /**
+     * @brief cat1模组升级函数
+    */
+    void ThunderBirdModel::Cat1OtaUpgrade()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1模组升级");
+        // LOS_Msleep(1000);
+        // uint32_t ret = 0;
+        // const char * text1 = "EG8AK1022V27_1";
+        // ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), text1, 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(), text1, g_ln_last_package_url_new1);
+        // }
+        // const char * text2 = "EG8AK1022V27_2";
+        // ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), text2, 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(), text2, 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(), text1, 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(), text2, g_ln_last_package_url_new2);
+        // }
         
         #ifdef SUPPORT_CAT1_SERVICE
-        star_http_ota_updata(g_ln_last_package_url_new1,g_ln_last_package_url_new2,27);
+        star_http_ota_updata(g_ln_last_package_url_new1,g_ln_last_package_url_new2,g_py_ver);
         #endif
         // push_ota_status(OTA_UI_STATUS_FORCE_START);
     }