This commit is contained in:
huxi
2025-12-03 11:12:34 +08:00
parent c23ae4f24c
commit bc195654bf
8163 changed files with 3799544 additions and 92 deletions
+144
View File
@@ -0,0 +1,144 @@
#include "app_config.h"
#include "asm/power_interface.h"
#include "smart_voice/smart_voice.h"
#include "app_task.h"
#if TCFG_SMART_VOICE_ENABLE && TCFG_VAD_LP_CLOSE
static char kws_model = -1;
#if TCFG_KWS_HOLD_TIME
static u16 hold_tm = 0;
#endif /* #if TCFG_KWS_HOLD_TIME */
#if TCFG_KWS_HOLD_TIME
static void kws_time_callback(void *priv)
{
hold_tm = 0;
printf("kws tmr cb \n");
}
void kws_hold_time_enable(void)
{
local_irq_disable();
if (hold_tm) {
sys_hi_timeout_del(hold_tm);
hold_tm = 0;
}
hold_tm = sys_hi_timeout_add(NULL, kws_time_callback, TCFG_KWS_HOLD_TIME * 1000);
local_irq_enable();
}
#else /* #if TCFG_KWS_HOLD_TIME */
void kws_hold_time_enable(void)
{
}
#endif /* #if TCFG_KWS_HOLD_TIME */
static void kws_poweroff(int priv)
{
#if TCFG_AUDIO_ASR_DEVELOP == DISABLE_THIS_MOUDLE
int model = audio_smart_voice_kws_get_model();
if (model >= 0) {
audio_smart_voice_detect_close();
kws_model = model;
}
#elif TCFG_AUDIO_ASR_DEVELOP == ASR_CFG_USER_DEFINED
int status = audio_smart_voice_check_status();
if (status) {
audio_smart_voice_detect_close();
}
#endif
}
static u8 extern_kws_handler(u32 timeout)
{
int msg[3];
#if TCFG_AUDIO_ASR_DEVELOP == DISABLE_THIS_MOUDLE
int model = audio_smart_voice_kws_get_model();
if (model < 0) {
return 0;
}
#elif TCFG_AUDIO_ASR_DEVELOP == ASR_CFG_USER_DEFINED
int status = audio_smart_voice_check_status();
if (!status) {
return 0;
}
#else
return 0;
#endif
if (hold_tm) {
return 1;
}
msg[0] = (int)kws_poweroff;
msg[1] = 1;
msg[2] = (int)NULL;
os_taskq_post_type("app_core", Q_CALLBACK, 3, msg);
return 1;
}
static u8 exit_kws_handler(u32 timeout)
{
return 0;
}
//低功耗线程请求所有模块关闭,由对应线程处理
REGISTER_LP_REQUEST(kws_target) = {
.name = "extern_kws",
.request_enter = extern_kws_handler,
.request_exit = exit_kws_handler,
};
int smart_voice_reset(void)
{
#if TCFG_AUDIO_ASR_DEVELOP == DISABLE_THIS_MOUDLE
int model = audio_smart_voice_kws_get_model();
if (model >= 0) {
printf("smart_voice is open \n");
} else {
if (kws_model >= 0) {
printf("smart_voice open \n");
audio_smart_voice_detect_open(kws_model);
kws_model = -1;
return true;
}
}
#elif TCFG_AUDIO_ASR_DEVELOP == ASR_CFG_USER_DEFINED
int status = audio_smart_voice_check_status();
if (status) {
printf("smart_voice is open \n");
} else {
printf("smart_voice open \n");
audio_smart_voice_detect_open(NULL);
}
#endif
return false;
}
#if TCFG_UI_ENABLE && CONFIG_JL_UI_ENABLE
#include "ui/ui_api.h"
static void val_lcd_sleep_enter(void)
{
kws_hold_time_enable();
}
static void val_lcd_sleep_exit(void)
{
u8 curr_mode = app_get_current_mode_name();
if ((curr_mode != APP_MODE_UPDATE) && (curr_mode != APP_MODE_SMARTBOX)) {
smart_voice_reset();
}
}
REGISTER_LCD_SLEEP_HEADLER(vad_lcd_sleep) = {
.name = "vad",
.enter = val_lcd_sleep_enter,
.exit = val_lcd_sleep_exit,
};
#endif /* #if TCFG_UI_ENABLEi && CONFIG_JL_UI_ENABLE */
#endif /* #if TCFG_VAD_LP_CLOSE */