145 lines
3.2 KiB
C
145 lines
3.2 KiB
C
#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 */
|
|
|
|
|