From ccb11202f4f913efbe9dc6a381468e626da47289 Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Tue, 2 Dec 2025 19:42:05 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E7=BD=91=E7=BB=9C=E8=8E=B7?= =?utf8?q?=E5=8F=96=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeapp/nativeui/ota/src/OtaModel.cpp | 6 ++++ .../thunderbird/src/ThunderBirdModel.cpp | 34 ++++++++++++++----- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp index 9ccc15e45..42e5ecb69 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp @@ -274,6 +274,12 @@ namespace OHOS } else if(status == 4) { OtaModel::GetInstance()->ClearNightUpdateStatus();//重置夜间升级 OtaView::GetInstance()->ChangeView(OtaView::OTA_VIEW_UPDATING, OtaView::OTA_VIEW_UPDATE_SUCCESS); + + // OTA升级成功,确保触发重启 + // 注意:uaip_cmd_update_request() 已经在 ln_api_ota.c 中调用, + // 但为了确保重启能够执行,这里也触发一次重启流程 + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OtaModel::CheckOtaResult: OTA升级成功,触发重启流程"); + // shutdown_reboot_prejobs(UPDATE_TYPE); } } void OtaModel::UpdateOtaProgress(int progress) 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 86af911ae..9b225d2bd 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 @@ -1627,6 +1627,9 @@ extern "C" { struct NetworkStatusUpdateTask { ThunderBirdModel* model; }; + + // 网络状态更新线程句柄 + static uint32_t g_net_status_update_thread_handle = 0; // 网络状态更新后台线程函数 static void NetworkStatusUpdateThreadFunc(void* arg) @@ -1875,14 +1878,29 @@ extern "C" { task->model = this; // 创建后台线程执行网络状态更新 - osThreadAttr_t attr = {}; - attr.name = "NetStatusUpdate"; - attr.stack_size = 0x2000; // 8KB栈 - attr.priority = osPriorityNormal; - - osThreadId_t threadId = osThreadNew((osThreadFunc_t)NetworkStatusUpdateThreadFunc, task, &attr); - if (threadId == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: Failed to create background thread, falling back to sync"); + app_task_definition_ext_t task_cfg; + memset(&task_cfg, 0, sizeof(task_cfg)); + + task_cfg.attr.name = "NetStatusUpdate"; + task_cfg.attr.priority = osPriorityNormal; + task_cfg.attr.stack_size = 0x1000; // 4KB栈(UpdateNetworkStatus需要调用底层API,需要足够栈空间) + task_cfg.func = (osThreadFunc_t)NetworkStatusUpdateThreadFunc; + task_cfg.task_handle = &g_net_status_update_thread_handle; + task_cfg.create_queue_handle = NULL; + task_cfg.use_mem = USE_EXTEND_MEM; /* 将线程栈放到扩展内存,降低TCB/heap压力 */ + task_cfg.inst_args = task; /* 传递任务参数 */ + + errcode_t tret = uapi_create_osThread_custom_with_args(&task_cfg); + // 注意:uapi_create_osThread_custom_with_args 会将 osThreadId_t (void*) 直接赋值给 task_handle 指针 + // 需要手动转换并设置到我们的句柄变量中 + if (tret == ERRCODE_SUCC && task_cfg.task_handle != NULL) { + // 将线程ID转换为uint32_t并设置到句柄变量 + // task_handle 字段存储的是 osThreadId_t (void*) 值,需要转换为 uint32_t + void* threadId = (void*)task_cfg.task_handle; + g_net_status_update_thread_handle = (uint32_t)(unsigned long)threadId; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: thread created successfully, handle=0x%x", g_net_status_update_thread_handle); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: thread create failed: 0x%x", tret); // 如果线程创建失败,回退到同步方式(不推荐,但至少能工作) UpdateNetworkStatus(); StatusCallbackUI(); -- 2.17.1