183 lines
5.3 KiB
C
183 lines
5.3 KiB
C
#include "includes.h"
|
|
#include "event.h"
|
|
#include "app_config.h"
|
|
#include "btstack/avctp_user.h"
|
|
#include "media/kws_event.h"
|
|
|
|
#if TCFG_USER_TWS_ENABLE
|
|
#include "bt_tws.h"
|
|
#endif
|
|
#if TCFG_AUDIO_ANC_ENABLE
|
|
#include "audio_anc.h"
|
|
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
|
|
|
#define LOG_TAG_CONST KWS_VOICE_EVENT
|
|
#define LOG_TAG "[KWS_VOICE_EVENT]"
|
|
#define LOG_ERROR_ENABLE
|
|
#define LOG_DEBUG_ENABLE
|
|
#define LOG_INFO_ENABLE
|
|
/* #define LOG_DUMP_ENABLE */
|
|
#define LOG_CLI_ENABLE
|
|
#include "debug.h"
|
|
|
|
#if ((defined TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE) && (TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE))
|
|
|
|
struct jl_kws_event_hdl {
|
|
u32 last_event;
|
|
u32 last_event_jiffies;
|
|
};
|
|
|
|
static struct jl_kws_event_hdl kws_hdl = {
|
|
.last_event = 0,
|
|
.last_event_jiffies = 0,
|
|
};
|
|
|
|
#define __this (&kws_hdl)
|
|
|
|
|
|
extern void volume_up(u8 inc);
|
|
extern void volume_down(u8 inc);
|
|
|
|
/* ---------------------------------------------------------------------------- */
|
|
/**
|
|
* @brief: 关键词唤醒语音事件处理流程
|
|
*
|
|
* @param event: 系统事件
|
|
*
|
|
* @return : true: 处理该事件; false: 不处理该事件, 由
|
|
*/
|
|
/* ---------------------------------------------------------------------------- */
|
|
int jl_kws_voice_event_handle(struct sys_event *event)
|
|
{
|
|
struct key_event *key = &(event->u.key);
|
|
|
|
if (key->type != KEY_DRIVER_TYPE_VOICE) {
|
|
return false;
|
|
}
|
|
|
|
u32 cur_jiffies = jiffies;
|
|
u8 a2dp_state;
|
|
u8 call_state;
|
|
u32 voice_event = key->event;
|
|
|
|
log_info("%s: event: %d", __func__, voice_event);
|
|
|
|
if (voice_event == __this->last_event) {
|
|
if (jiffies_to_msecs(cur_jiffies - __this->last_event_jiffies) < 1000) {
|
|
log_info("voice event %d same, ignore", voice_event);
|
|
__this->last_event_jiffies = cur_jiffies;
|
|
return true;
|
|
}
|
|
}
|
|
__this->last_event_jiffies = cur_jiffies;
|
|
__this->last_event = voice_event;
|
|
|
|
switch (voice_event) {
|
|
case KWS_EVENT_HEY_KEYWORD:
|
|
case KWS_EVENT_XIAOJIE:
|
|
//主唤醒词:
|
|
log_info("send SIRI cmd");
|
|
user_send_cmd_prepare(USER_CTRL_HFP_GET_SIRI_OPEN, 0, NULL);
|
|
break;
|
|
|
|
case KWS_EVENT_XIAODU:
|
|
//主唤醒词:
|
|
log_info("send SIRI cmd");
|
|
user_send_cmd_prepare(USER_CTRL_HFP_GET_SIRI_OPEN, 0, NULL);
|
|
break;
|
|
|
|
case KWS_EVENT_PLAY_MUSIC:
|
|
case KWS_EVENT_STOP_MUSIC:
|
|
case KWS_EVENT_PAUSE_MUSIC:
|
|
call_state = get_call_status();
|
|
if ((call_state == BT_CALL_OUTGOING) ||
|
|
(call_state == BT_CALL_ALERT)) {
|
|
//user_send_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL);
|
|
} else if (call_state == BT_CALL_INCOMING) {
|
|
//user_send_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL);
|
|
} else if (call_state == BT_CALL_ACTIVE) {
|
|
//user_send_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL);
|
|
} else {
|
|
a2dp_state = a2dp_get_status();
|
|
if (a2dp_state == BT_MUSIC_STATUS_STARTING) {
|
|
if (voice_event == KWS_EVENT_PAUSE_MUSIC) {
|
|
log_info("send PAUSE cmd");
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PAUSE, 0, NULL);
|
|
} else if (voice_event == KWS_EVENT_STOP_MUSIC) {
|
|
log_info("send STOP cmd");
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_STOP, 0, NULL);
|
|
}
|
|
} else {
|
|
if (voice_event == KWS_EVENT_PLAY_MUSIC) {
|
|
log_info("send PLAY cmd");
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PLAY, 0, NULL);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case KWS_EVENT_VOLUME_UP:
|
|
log_info("volume up");
|
|
volume_up(4); //music: 0 ~ 16, call: 0 ~ 15, step: 25%
|
|
break;
|
|
|
|
case KWS_EVENT_VOLUME_DOWN:
|
|
log_info("volume down");
|
|
volume_down(4); //music: 0 ~ 16, call: 0 ~ 15, step: 25%
|
|
break;
|
|
|
|
case KWS_EVENT_PREV_SONG:
|
|
log_info("Send PREV cmd");
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PREV, 0, NULL);
|
|
break;
|
|
|
|
case KWS_EVENT_NEXT_SONG:
|
|
log_info("Send NEXT cmd");
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_NEXT, 0, NULL);
|
|
break;
|
|
|
|
case KWS_EVENT_CALL_ACTIVE:
|
|
if (get_call_status() == BT_CALL_INCOMING) {
|
|
log_info("Send ANSWER cmd");
|
|
user_send_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL);
|
|
}
|
|
break;
|
|
|
|
case KWS_EVENT_CALL_HANGUP:
|
|
log_info("Send HANG UP cmd");
|
|
if ((get_call_status() >= BT_CALL_INCOMING) && (get_call_status() <= BT_CALL_ALERT)) {
|
|
user_send_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL);
|
|
}
|
|
break;
|
|
#if TCFG_AUDIO_ANC_ENABLE
|
|
case KWS_EVENT_ANC_ON:
|
|
anc_mode_switch(ANC_ON, 1);
|
|
break;
|
|
case KWS_EVENT_TRANSARENT_ON:
|
|
anc_mode_switch(ANC_TRANSPARENCY, 1);
|
|
break;
|
|
case KWS_EVENT_ANC_OFF:
|
|
anc_mode_switch(ANC_OFF, 1);
|
|
break;
|
|
#endif
|
|
|
|
case KWS_EVENT_NULL:
|
|
log_info("KWS_EVENT_NULL");
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
#else /* #if ((defined TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE) && (TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE)) */
|
|
|
|
int jl_kws_voice_event_handle(struct key_event *key)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
#endif /* #if ((defined TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE) && (TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE)) */
|