m_otaCountdownActive(false), m_otaCountdownValue(0),
m_countUpActive(false), m_countUpValue(0), m_countUpTarget(0),
m_alwaysOnRefreshActive(false), m_alwaysOnRefreshTime(0),
+ m_pending_factory_reset(false), m_factoryResetTimer(nullptr),
m_currentFps(60),
m_simStatus(0), m_cat1PowerStatus(0), m_signalStrength(0),
m_networkStatus(0), m_networkType(0),
}
}
- void ThunderBirdModel::StopStoryModeTimeoutTimer(void)
- {
- if (m_storyModeTimeoutTimer != nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StopStoryModeTimeoutTimer: 停止故事模式超时定时器");
- osTimerStop(m_storyModeTimeoutTimer);
- osTimerDelete(m_storyModeTimeoutTimer);
- m_storyModeTimeoutTimer = nullptr;
- }
- }
+ void ThunderBirdModel::StopStoryModeTimeoutTimer(void)
+ {
+ if (m_storyModeTimeoutTimer != nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StopStoryModeTimeoutTimer: 停止故事模式超时定时器");
+ osTimerStop(m_storyModeTimeoutTimer);
+ osTimerDelete(m_storyModeTimeoutTimer);
+ m_storyModeTimeoutTimer = nullptr;
+ }
+ }
+
+ /**
+ * @brief 启动恢复出厂设置定时器
+ * @param delaySeconds 延迟秒数
+ */
+ void ThunderBirdModel::StartFactoryResetTimer(uint32_t delaySeconds)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartFactoryResetTimer: delaySeconds=%u", delaySeconds);
+
+ // 如果定时器已存在,先停止
+ if (m_factoryResetTimer != nullptr) {
+ StopFactoryResetTimer();
+ }
+
+ // 创建一次性定时器
+ m_factoryResetTimer = osTimerNew((osTimerFunc_t)FactoryResetTimerCallback, osTimerOnce, nullptr, nullptr);
+ if (m_factoryResetTimer == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create factory reset timer");
+ return;
+ }
+
+ // 启动定时器
+ osStatus_t ret = osTimerStart(m_factoryResetTimer, delaySeconds * 1000);
+ if (ret != osOK) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to start factory reset timer, ret=%d", ret);
+ osTimerDelete(m_factoryResetTimer);
+ m_factoryResetTimer = nullptr;
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Factory reset timer started: %u seconds", delaySeconds);
+ }
+ }
+
+ /**
+ * @brief 停止恢复出厂设置定时器
+ */
+ void ThunderBirdModel::StopFactoryResetTimer(void)
+ {
+ if (m_factoryResetTimer != nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StopFactoryResetTimer: 停止恢复出厂设置定时器");
+ osTimerStop(m_factoryResetTimer);
+ osTimerDelete(m_factoryResetTimer);
+ m_factoryResetTimer = nullptr;
+ m_pending_factory_reset = false;
+ }
+ }
// 故事模式超时处理函数
void ThunderBirdModel::HandleStoryModeTimeout(void)
}
}
}
+
+ /**
+ * @brief 处理恢复出厂设置
+ */
+ void ThunderBirdModel::HandleFactoryReset(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFactoryReset: 执行恢复出厂设置");
+
+ if (m_pending_factory_reset) {
+ m_pending_factory_reset = false;
+ restore_factory_settings();
+ }
+
+ // 停止定时器
+ StopFactoryResetTimer();
+ }
// 故事模式音频播放超时定时器回调函数
static void StoryAudioPlaybackTimeoutTimerCallback(uint8_t data)
ThunderBirdModel::GetInstance()->HandleStoryModeTimeout();
}));
}
+
+ static void FactoryResetTimerCallback(uint8_t data)
+ {
+ GraphicService::GetInstance()->PostGraphicEvent(
+ std::bind([]() {
+ ThunderBirdModel::GetInstance()->HandleFactoryReset();
+ }));
+ }
/**
* @brief 启动时间显示定时器
}
}
// 检查是否是绑定成功界面,需要跳转到对话界面
- else if (currentView == THUNDERBIRD_ADJUSTVIEW &&
+ else if (currentView == THUNDERBIRD_ADJUSTVIEW &&
currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS) {
if (bind_status == false) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "解绑警告界面超时,恢复出厂设置");
- // AI_ForceInterrupt();
- ln_ws_send_voice_chat_interrupt("恢复出厂设置");
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
- restore_factory_settings();
- }
+ // 解绑状态,检查是否有待处理的工厂重置
+ if (m_pending_factory_reset) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "解绑警告界面超时,恢复出厂设置");
+ // AI_ForceInterrupt();
+ ln_ws_send_voice_chat_interrupt("恢复出厂设置");
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+ HandleFactoryReset();
+ }
+ }
else {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "绑定成功界面超时,跳转到对话界面");
ThunderBirdModel::GetInstance()->ota_update_boot(); // 绑定成功后获取ota升级任务
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleBindAndUnbind: 设备已解绑,显示解绑警告");
uapi_set_screen_on_api();
bind_status = false;//解绑标志值位,用于界面跳转真正解绑放到出厂设置里面
+
+ // 直接启动恢复出厂设置的定时器,不依赖界面状态
+ m_pending_factory_reset = true;
+ ThunderBirdModel::GetInstance()->StartFactoryResetTimer(1); // 2秒后恢复出厂设置
+
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS);
if(ThunderBirdAdjustView::GetInstance())
{
ThunderBirdAdjustView::GetInstance()->ShowUnbindWarning();
}
- ThunderBirdModel::GetInstance()->StartCountUpTimer(1); // 2秒后恢复出厂设置
return;
}
}