T5_3.13.6版本在进入低功耗之前播放本地提示音,进入低功耗时间翻倍

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
Ann
Posts: 5

T5_3.13.6版本,我在进入深度休眠状态之前播放了一段提示音,播放结束后再执行进入休眠。进入休眠时间设置为1分钟,但是目前的状况是第1分钟会播报提示音但无法进入休眠,且按键唤醒后无法正常对话,等到第2分钟才会进入休眠,奇怪的是第2分钟居然不会播报提示音,直接就休眠了。求解答!

Attachments
实现代码.txt
(2.02 KiB) Downloaded 108 times

Tags:
愚者千虑必有一得
Posts: 950

Re: T5_3.13.6版本在进入低功耗之前播放本地提示音,进入低功耗时间翻倍

你好!

问题概述

进入深度休眠前播放提示音,设置1分钟超时变成2分钟才进入休眠。

根因分析

经代码排查,定位到tuya_ai_toy.c中__on_ai_toy_lowpower_timer回调的逻辑问题:

时序分析:

  1. idle状态启动lowpower_timer(60s)
  2. 用户播放本地提示音
  3. 第1分钟timer到期,但wukong_audio_player_is_playing()==TRUE
  4. 回调将timer重置为完整的TOY_LOWPOWER_TIMEOUT(60s),而非短间隔重试
  5. 按键唤醒后AI agent处于idle不可交互状态
  6. 第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),不再翻倍。

Post Reply