T5_3.13.6版本,我在进入深度休眠状态之前播放了一段提示音,播放结束后再执行进入休眠。进入休眠时间设置为1分钟,但是目前的状况是第1分钟会播报提示音但无法进入休眠,且按键唤醒后无法正常对话,等到第2分钟才会进入休眠,奇怪的是第2分钟居然不会播报提示音,直接就休眠了。求解答!
T5_3.13.6版本在进入低功耗之前播放本地提示音,进入低功耗时间翻倍
Re: T5_3.13.6版本在进入低功耗之前播放本地提示音,进入低功耗时间翻倍
你好!
问题概述
进入深度休眠前播放提示音,设置1分钟超时变成2分钟才进入休眠。
根因分析
经代码排查,定位到tuya_ai_toy.c中__on_ai_toy_lowpower_timer回调的逻辑问题:
时序分析:
- idle状态启动lowpower_timer(60s)
- 用户播放本地提示音
- 第1分钟timer到期,但wukong_audio_player_is_playing()==TRUE
- 回调将timer重置为完整的TOY_LOWPOWER_TIMEOUT(60s),而非短间隔重试
- 按键唤醒后AI agent处于idle不可交互状态
- 第2分钟timer再次到期,提示音已播完,直接进入深度休眠
总等待时间=60s+60s=120s,翻倍。第2分钟不播提示音是因为音频播放已完成、状态已变迁。
关键代码(tuya_ai_toy.c:618):
if(wukong_audio_player_is_playing()) {
tal_sw_timer_start(s_ai_toy->lowpower_timer, TOY_LOWPOWER_TIMEOUT, TAL_TIMER_ONCE);
}
// 问题:重置为完整60s而非短间隔重试
解决方案
方案1(推荐):修改重置逻辑为短间隔重试
将重置间隔从TOY_LOWPOWER_TIMEOUT(60s)改为1s:
Code: Select all
// 修改前
tal_sw_timer_start(s_ai_toy->lowpower_timer, TOY_LOWPOWER_TIMEOUT, TAL_TIMER_ONCE);
// 修改后
tal_sw_timer_start(s_ai_toy->lowpower_timer, 1000, TAL_TIMER_ONCE);播放提示音场景下总等待时间从120s变为约61s。
方案2:播放提示音前停止lowpower_timer
在播放本地提示音前调用tuya_ai_toy_lowpower_timer_ctrl(FALSE),播放结束回调中调用tuya_ai_toy_lowpower_timer_ctrl(TRUE),休眠从提示音播完后重新计时60s。
验证方法
修改后播放提示音,总等待时间应为原超时+提示音剩余播放时间(约61s),不再翻倍。