#endif
//如果有配对设备则上报状态否则不上报
- unsigned int connedDevicesNum = 0;
- bool ret = gap_get_paired_devices_num(&connedDevicesNum);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connedDevicesNum=%d", connedDevicesNum);
- if(ret == true && connedDevicesNum > 0)
- {
- //异步上报耳机状态
- GraphicService::GetInstance()->PostGraphicEvent([]() {
- ln_bt_report_earphone_connection_status();
- });
- }
+ //开机未连接不上报
+ // unsigned int connedDevicesNum = 0;
+ // bool ret = gap_get_paired_devices_num(&connedDevicesNum);
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connedDevicesNum=%d", connedDevicesNum);
+ // if(ret == true && connedDevicesNum > 0)
+ // {
+ // //异步上报耳机状态
+ // GraphicService::GetInstance()->PostGraphicEvent([]() {
+ // ln_bt_report_earphone_connection_status();
+ // });
+ // }
#ifdef DO_VAD_AUTH
StopStoryAudioPlaybackTimeoutTimer();
// 重置故事模式finished标志
m_storyModeFinished = false;
+ // 重置第一句音频播放标志
+ m_firstStoryAudioPlayed = false;
// 退出故事模式时重新启用VAD
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "退出故事模式,重新启用VAD");
ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(false);
}
//直接退出到状态显示界面
+ // 先停止音频聊天,确保WebSocket线程停止接收音频数据
+ ln_ws_end_audio_chat();
+ // 强制中断音频播放
AI_ForceInterrupt();
+ // 发送中断消息(通知服务器停止发送音频数据)
ln_ws_send_voice_chat_interrupt("退出哄睡");
+ // 等待一小段时间,确保WebSocket线程处理完中断消息
+ LOS_Msleep(100);
//推送结束故事消息
do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_FINISH, NULL, 0);
+ // 音频deinit(清理音频资源)
do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+ // 等待音频deinit完成,避免在音频清理过程中切换视图
+ LOS_Msleep(50);
+ // 切换视图
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
} else {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView instance is null, cannot end sleep mode");
StopStoryModeTimeoutTimer();
// 重置故事模式finished标志
m_storyModeFinished = false;
+ // 重置第一句音频播放标志
+ m_firstStoryAudioPlayed = false;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "退出故事模式,重新启用VAD");
int vad_ret = ln_ws_enable_vad_server();
if (vad_ret == 0) {
m_storyModeFinished = false;
}
+ void ThunderBirdModel::ResetFirstStoryAudioPlayed(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::ResetFirstStoryAudioPlayed: 重置第一句音频播放标志");
+ m_firstStoryAudioPlayed = false;
+ }
+
void ThunderBirdModel::HandleDialogueResponseFinished(bool finished)
{
if (finished) {
return;
}
- // 检查是否在故事模式(THUNDERBIRD_LULLABYVIEW_4),如果是,刷新5秒音频播放超时定时器
- // 每次音频结束都刷新定时器,确保如果5秒内没有新的音频播放则退出
+ // 检查是否在故事模式(THUNDERBIRD_LULLABYVIEW_4)
if (currentView == THUNDERBIRD_LULLABYVIEW &&
currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 故事模式音频播放结束,刷新5秒超时定时器");
- // 停止旧的定时器并重新启动,实现刷新
- StopStoryAudioPlaybackTimeoutTimer();
- StartStoryAudioPlaybackTimeoutTimer();
+ // 如果是第一句音频播放完成,启动5秒超时定时器
+ if (!m_firstStoryAudioPlayed) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 第一句音频播放完成,启动5秒超时定时器");
+ m_firstStoryAudioPlayed = true;
+ StartStoryAudioPlaybackTimeoutTimer();
+ } else {
+ // 后续音频播放结束,刷新5秒超时定时器
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 故事模式音频播放结束,刷新5秒超时定时器");
+ // 停止旧的定时器并重新启动,实现刷新
+ StopStoryAudioPlaybackTimeoutTimer();
+ StartStoryAudioPlaybackTimeoutTimer();
+ }
}
}