m_bootTime(0),
m_lastCat1RestartTime(0),
m_storyModeTimeoutTimer(nullptr),
+ m_storyAudioPlaybackTimeoutTimer(nullptr),
m_networkConnectingReason(NetworkConnectingReason::NONE),
m_networkConnectingTimeoutCount(0)
{
StopOtaCountdown();
StopCountUpTimer();
StopStoryModeTimeoutTimer();
+ StopStoryAudioPlaybackTimeoutTimer();
//StopReminderHideTimer();
// 停止录音
// 故事模式超时定时器回调函数前向声明
static void StoryModeTimeoutTimerCallback(uint8_t data);
+ // 故事模式音频播放超时定时器回调函数前向声明
+ static void StoryAudioPlaybackTimeoutTimerCallback(uint8_t data);
// ---------------------- 故事模式超时定时器 ----------------------
void ThunderBirdModel::StartStoryModeTimeoutTimer(void)
}
}
}
+
+ // ---------------------- 故事模式音频播放超时定时器 ----------------------
+ void ThunderBirdModel::StartStoryAudioPlaybackTimeoutTimer(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartStoryAudioPlaybackTimeoutTimer: 启动5秒音频播放超时定时器");
+
+ // 如果定时器已存在,先停止
+ if (m_storyAudioPlaybackTimeoutTimer != nullptr) {
+ StopStoryAudioPlaybackTimeoutTimer();
+ }
+
+ // 创建一次性定时器(5秒 = 5000毫秒)
+ m_storyAudioPlaybackTimeoutTimer = osTimerNew((osTimerFunc_t)StoryAudioPlaybackTimeoutTimerCallback, osTimerOnce, nullptr, nullptr);
+ if (m_storyAudioPlaybackTimeoutTimer == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create story audio playback timeout timer");
+ return;
+ }
+
+ // 启动定时器(5秒 = 5000毫秒)
+ osStatus_t ret = osTimerStart(m_storyAudioPlaybackTimeoutTimer, 5000);
+ if (ret != osOK) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to start story audio playback timeout timer, ret=%d", ret);
+ osTimerDelete(m_storyAudioPlaybackTimeoutTimer);
+ m_storyAudioPlaybackTimeoutTimer = nullptr;
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Story audio playback timeout timer started: 5 seconds");
+ }
+ }
+
+ void ThunderBirdModel::StopStoryAudioPlaybackTimeoutTimer(void)
+ {
+ if (m_storyAudioPlaybackTimeoutTimer != nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StopStoryAudioPlaybackTimeoutTimer: 停止故事模式音频播放超时定时器");
+ osTimerStop(m_storyAudioPlaybackTimeoutTimer);
+ osTimerDelete(m_storyAudioPlaybackTimeoutTimer);
+ m_storyAudioPlaybackTimeoutTimer = nullptr;
+ }
+ }
+
+ // 故事模式音频播放超时处理函数
+ void ThunderBirdModel::HandleStoryAudioPlaybackTimeout(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleStoryAudioPlaybackTimeout: 5秒内未播放音频,退出故事模式");
+
+ // 检查当前是否还在故事模式
+ ThunderBirdMainView *view = ThunderBirdMainView::GetInstance();
+ if (view) {
+ int16_t currentView = view->GetCurrentView();
+ int16_t currentSubView = view->GetCurrentSubView();
+
+ if (currentView == THUNDERBIRD_LULLABYVIEW &&
+ currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleStoryAudioPlaybackTimeout: 5秒内未播放音频,退出故事模式");
+ // 停止定时器
+ StopStoryAudioPlaybackTimeoutTimer();
+ // 退出故事模式
+ HandleSleepModeEnd();
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleStoryAudioPlaybackTimeout: 当前不在故事模式,停止定时器");
+ StopStoryAudioPlaybackTimeoutTimer();
+ }
+ }
+ }
+
+ // 故事模式音频播放超时定时器回调函数
+ static void StoryAudioPlaybackTimeoutTimerCallback(uint8_t data)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StoryAudioPlaybackTimeoutTimerCallback: 5秒音频播放超时定时器触发");
+ GraphicService::GetInstance()->PostGraphicEvent(
+ std::bind([]() {
+ ThunderBirdModel::GetInstance()->HandleStoryAudioPlaybackTimeout();
+ }));
+ }
//传入OTA的界面状态,以返回原任务
int16_t ThunderBirdModel::GetCurrentView() const
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeEnd");
// 停止故事模式超时定时器
StopStoryModeTimeoutTimer();
+ // 停止故事模式音频播放超时定时器
+ StopStoryAudioPlaybackTimeoutTimer();
// 重置故事模式finished标志
m_storyModeFinished = false;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 故事模式finished且音频播放结束,结束故事模式");
// 重置标志
m_storyModeFinished = false;
+ // 停止5秒音频播放超时定时器(正常结束故事)
+ StopStoryAudioPlaybackTimeoutTimer();
// g_sleep_mode_active = false;
// 结束故事模式
HandleSleepModeEnd();
return;
}
+ // 检查是否在故事模式(THUNDERBIRD_LULLABYVIEW_4),如果是,刷新5秒音频播放超时定时器
+ // 每次音频结束都刷新定时器,确保如果5秒内没有新的音频播放则退出
+ if (currentView == THUNDERBIRD_LULLABYVIEW &&
+ currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 故事模式音频播放结束,刷新5秒超时定时器");
+ // 停止旧的定时器并重新启动,实现刷新
+ StopStoryAudioPlaybackTimeoutTimer();
+ StartStoryAudioPlaybackTimeoutTimer();
+ }
+
}
// 录音开始处理函数