初版
This commit is contained in:
@@ -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 */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user