} 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)
struct NetworkStatusUpdateTask {
ThunderBirdModel* model;
};
+
+ // 网络状态更新线程句柄
+ static uint32_t g_net_status_update_thread_handle = 0;
// 网络状态更新后台线程函数
static void NetworkStatusUpdateThreadFunc(void* arg)
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();