435 lines
12 KiB
C
435 lines
12 KiB
C
#include "key_event_deal.h"
|
|
#include "btstack/avctp_user.h"
|
|
#include "event.h"
|
|
#include "app_power_manage.h"
|
|
#include "app_main.h"
|
|
#include "app_task.h"
|
|
#include "tone_player.h"
|
|
#include "audio_config.h"
|
|
#include "user_cfg.h"
|
|
#include "system/timer.h"
|
|
#include "vol_sync.h"
|
|
#include "media/includes.h"
|
|
#include "pbg_user.h"
|
|
#include "key_driver.h"
|
|
#if TCFG_EQ_ENABLE
|
|
#include "application/eq_config.h"
|
|
#endif/*TCFG_EQ_ENABLE*/
|
|
|
|
#if TCFG_USER_TWS_ENABLE
|
|
#include "bt_tws.h"
|
|
#endif
|
|
#if TCFG_AUDIO_ANC_ENABLE
|
|
#include "audio_anc.h"
|
|
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
|
#if TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN
|
|
#include "icsd_adt_app.h"
|
|
#endif /*TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN*/
|
|
|
|
#define LOG_TAG_CONST KEY_EVENT_DEAL
|
|
#define LOG_TAG "[KEY_EVENT_DEAL]"
|
|
#define LOG_ERROR_ENABLE
|
|
#define LOG_DEBUG_ENABLE
|
|
#define LOG_INFO_ENABLE
|
|
/* #define LOG_DUMP_ENABLE */
|
|
#define LOG_CLI_ENABLE
|
|
#include "debug.h"
|
|
#include "bleproto.h"
|
|
#include "bleproto_api.h"
|
|
|
|
#define POWER_OFF_CNT 10
|
|
|
|
extern u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX];
|
|
extern u8 get_max_sys_vol(void);
|
|
extern void sys_enter_soft_poweroff(void *priv);
|
|
extern bool get_tws_sibling_connect_state(void);
|
|
extern int bt_get_low_latency_mode();
|
|
extern void bt_set_low_latency_mode(int enable);
|
|
|
|
extern void usr_ble_adv_init();
|
|
void audio_aec_pitch_change_ctrl();
|
|
void audio_surround_voice_ctrl();
|
|
extern void start_streamer_test(void);
|
|
extern void usr_intterupt_close();
|
|
|
|
|
|
u8 poweroff_sametime_flag = 0;
|
|
|
|
#if CONFIG_TWS_POWEROFF_SAME_TIME
|
|
enum {
|
|
FROM_HOST_POWEROFF_CNT_ENOUGH = 1,
|
|
FROM_TWS_POWEROFF_CNT_ENOUGH,
|
|
POWEROFF_CNT_ENOUGH,
|
|
};
|
|
|
|
static u16 poweroff_sametime_timer_id = 0;
|
|
static void poweroff_sametime_timer(void *priv)
|
|
{
|
|
log_info("poweroff_sametime_timer\n");
|
|
int state = tws_api_get_tws_state();
|
|
if (!(state & TWS_STA_SIBLING_CONNECTED)) {
|
|
sys_enter_soft_poweroff(NULL);
|
|
return;
|
|
}
|
|
if (priv == NULL || poweroff_sametime_flag == POWEROFF_CNT_ENOUGH) {
|
|
poweroff_sametime_timer_id = sys_timeout_add((void *)1, poweroff_sametime_timer, 500);
|
|
} else {
|
|
poweroff_sametime_timer_id = 0;
|
|
}
|
|
}
|
|
|
|
static void poweroff_sametime_timer_init(void)
|
|
{
|
|
if (poweroff_sametime_timer_id) {
|
|
return;
|
|
}
|
|
|
|
poweroff_sametime_timer_id = sys_timeout_add(NULL, poweroff_sametime_timer, 500);
|
|
}
|
|
#endif
|
|
|
|
void volume_up_down_direct(s8 value);
|
|
|
|
#if TCFG_USER_TWS_ENABLE
|
|
u8 replay_tone_flag = 1;
|
|
int max_tone_timer_hdl = 0;
|
|
static void max_tone_timer(void *priv)
|
|
{
|
|
if (!tone_get_status()) {
|
|
max_tone_timer_hdl = 0;
|
|
replay_tone_flag = 1;
|
|
} else {
|
|
max_tone_timer_hdl = sys_timeout_add(NULL, max_tone_timer, TWS_SYNC_TIME_DO + 100);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
static u8 volume_flag = 1;
|
|
void volume_up(u8 inc)
|
|
{
|
|
u8 test_box_vol_up = 0x41;
|
|
s8 cur_vol = 0;
|
|
u8 call_status = get_call_status();
|
|
|
|
if (tone_get_status() && volume_flag) {
|
|
if (get_call_status() == BT_CALL_INCOMING) {
|
|
volume_up_down_direct(1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
/*打电话出去彩铃要可以调音量大小*/
|
|
if ((call_status == BT_CALL_ACTIVE) || (call_status == BT_CALL_OUTGOING)) {
|
|
cur_vol = app_audio_get_volume(APP_AUDIO_STATE_CALL);
|
|
} else {
|
|
cur_vol = app_audio_get_volume(APP_AUDIO_STATE_MUSIC);
|
|
}
|
|
if (get_remote_test_flag()) {
|
|
user_send_cmd_prepare(USER_CTRL_TEST_KEY, 1, &test_box_vol_up); //音量加
|
|
}
|
|
|
|
if (cur_vol >= app_audio_get_max_volume()) {
|
|
#if TCFG_USER_TWS_ENABLE
|
|
if (get_tws_sibling_connect_state()) {
|
|
if (tws_api_get_role() == TWS_ROLE_MASTER && replay_tone_flag) {
|
|
replay_tone_flag = 0; //防止提示音被打断标志
|
|
bt_tws_play_tone_at_same_time(SYNC_TONE_MAX_VOL, 400);
|
|
max_tone_timer_hdl = sys_timeout_add(NULL, max_tone_timer, TWS_SYNC_TIME_DO + 100); //同步在TWS_SYNC_TIME_DO之后才会播放提示音,所以timer需要在这个时间之后才去检测提示音状态
|
|
}
|
|
} else
|
|
#endif
|
|
{
|
|
#if TCFG_MAX_VOL_PROMPT
|
|
STATUS *p_tone = get_tone_config();
|
|
tone_play_index(p_tone->max_vol, 0);
|
|
#endif
|
|
}
|
|
|
|
if (get_call_status() != BT_CALL_HANGUP) {
|
|
/*本地音量最大,如果手机音量还没最大,继续加,以防显示不同步*/
|
|
if (bt_user_priv_var.phone_vol < 15) {
|
|
if (get_curr_channel_state() & HID_CH) {
|
|
user_send_cmd_prepare(USER_CTRL_HID_VOL_UP, 0, NULL);
|
|
} else {
|
|
user_send_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_UP, 0, NULL);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
|
opid_play_vol_sync_fun(&app_var.music_volume, 1);
|
|
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_INC, 0, NULL);
|
|
#endif/*BT_SUPPORT_MUSIC_VOL_SYNC*/
|
|
return;
|
|
}
|
|
|
|
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
|
opid_play_vol_sync_fun(&app_var.music_volume, 1);
|
|
app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.music_volume, 1);
|
|
#else
|
|
app_audio_volume_up(inc);
|
|
#endif/*BT_SUPPORT_MUSIC_VOL_SYNC*/
|
|
log_info("vol+: %d", app_audio_get_volume(APP_AUDIO_CURRENT_STATE));
|
|
if (get_call_status() != BT_CALL_HANGUP) {
|
|
if (get_curr_channel_state() & HID_CH) {
|
|
user_send_cmd_prepare(USER_CTRL_HID_VOL_UP, 0, NULL);
|
|
} else {
|
|
user_send_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_UP, 0, NULL);
|
|
}
|
|
} else {
|
|
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
|
/* opid_play_vol_sync_fun(&app_var.music_volume, 1); */
|
|
|
|
#if TCFG_USER_TWS_ENABLE
|
|
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_INC, 0, NULL); //使用HID调音量
|
|
//user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_SEND_VOL, 0, NULL);
|
|
#else
|
|
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_INC, 0, NULL);
|
|
#endif/*TCFG_USER_TWS_ENABLE*/
|
|
#endif/*BT_SUPPORT_MUSIC_VOL_SYNC*/
|
|
}
|
|
}
|
|
void volume_down(u8 dec)
|
|
{
|
|
u8 test_box_vol_down = 0x42;
|
|
if (tone_get_status() && volume_flag) {
|
|
if (get_call_status() == BT_CALL_INCOMING) {
|
|
volume_up_down_direct(-1);
|
|
}
|
|
return;
|
|
}
|
|
if (get_remote_test_flag()) {
|
|
user_send_cmd_prepare(USER_CTRL_TEST_KEY, 1, &test_box_vol_down); //音量减
|
|
}
|
|
|
|
if (app_audio_get_volume(APP_AUDIO_CURRENT_STATE) <= 0) {
|
|
if (get_call_status() != BT_CALL_HANGUP) {
|
|
/*
|
|
*本地音量最小,如果手机音量还没最小,继续减
|
|
*注意:有些手机通话最小音量是1(GREE G0245D)
|
|
*/
|
|
if (bt_user_priv_var.phone_vol > 1) {
|
|
if (get_curr_channel_state() & HID_CH) {
|
|
user_send_cmd_prepare(USER_CTRL_HID_VOL_DOWN, 0, NULL);
|
|
} else {
|
|
user_send_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_DOWN, 0, NULL);
|
|
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
|
opid_play_vol_sync_fun(&app_var.music_volume, 0);
|
|
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_DEC, 0, NULL);
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
|
opid_play_vol_sync_fun(&app_var.music_volume, 0);
|
|
app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.music_volume, 1);
|
|
#else
|
|
app_audio_volume_down(dec);
|
|
#endif/*BT_SUPPORT_MUSIC_VOL_SYNC*/
|
|
log_info("vol-: %d", app_audio_get_volume(APP_AUDIO_CURRENT_STATE));
|
|
if (get_call_status() != BT_CALL_HANGUP) {
|
|
if (get_curr_channel_state() & HID_CH) {
|
|
user_send_cmd_prepare(USER_CTRL_HID_VOL_DOWN, 0, NULL);
|
|
} else {
|
|
user_send_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_DOWN, 0, NULL);
|
|
}
|
|
} else {
|
|
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
|
/* opid_play_vol_sync_fun(&app_var.music_volume, 0); */
|
|
if (app_audio_get_volume(APP_AUDIO_CURRENT_STATE) == 0) {
|
|
app_audio_volume_down(0);
|
|
}
|
|
|
|
#if TCFG_USER_TWS_ENABLE
|
|
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_DEC, 0, NULL);
|
|
//user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_SEND_VOL, 0, NULL);
|
|
#else
|
|
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_DEC, 0, NULL);
|
|
#endif
|
|
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#if ONE_KEY_CTL_DIFF_FUNC
|
|
static void lr_diff_otp_deal(u8 opt, char channel)
|
|
{
|
|
log_info("lr_diff_otp_deal:%d", opt);
|
|
switch (opt) {
|
|
case ONE_KEY_CTL_NEXT_PREV:
|
|
if (channel == 'L') {
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_NEXT, 0, NULL);
|
|
} else if (channel == 'R') {
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PREV, 0, NULL);
|
|
} else {
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_NEXT, 0, NULL);
|
|
}
|
|
break;
|
|
case ONE_KEY_CTL_VOL_UP_DOWN:
|
|
if (channel == 'L') {
|
|
volume_up(1);
|
|
} else if (channel == 'R') {
|
|
volume_down(1);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void key_tws_lr_diff_deal(struct sys_event *event, u8 opt)
|
|
{
|
|
u8 channel = 'U';
|
|
if (get_bt_tws_connect_status()) {
|
|
channel = tws_api_get_local_channel();
|
|
if ('L' == channel) {
|
|
channel = (u32)event->arg == KEY_EVENT_FROM_TWS ? 'R' : 'L';
|
|
} else {
|
|
channel = (u32)event->arg == KEY_EVENT_FROM_TWS ? 'L' : 'R';
|
|
}
|
|
}
|
|
lr_diff_otp_deal(opt, channel);
|
|
}
|
|
#else
|
|
void key_tws_lr_diff_deal(struct sys_event *event, u8 opt)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
int app_earphone_key_event_handler(struct sys_event *event)
|
|
{
|
|
int ret = false;
|
|
struct key_event *key = &event->u.key;
|
|
|
|
u8 key_event;
|
|
|
|
#if TCFG_APP_MUSIC_EN
|
|
if (event->arg == DEVICE_EVENT_FROM_CUSTOM) {
|
|
log_e("is music mode msg\n");
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
|
|
key_event = key_table[key->value][key->event];
|
|
|
|
void bt_sniff_ready_clean(void);
|
|
bt_sniff_ready_clean();
|
|
|
|
#if RCSP_ADV_EN
|
|
extern void set_key_event_by_rcsp_info(struct sys_event * event, u8 * key_event);
|
|
set_key_event_by_rcsp_info(event, &key_event);
|
|
#endif
|
|
|
|
log_info("key_event:%d %d %d\n", key_event, key->value, key->event);
|
|
|
|
switch (key_event) {
|
|
case KEY_MUSIC_PP:
|
|
break;
|
|
case KEY_IR_NUM_0:
|
|
// tone_play_by_path(TONE_POWER_ON, 0);
|
|
break;
|
|
case KEY_IR_NUM_1:
|
|
// tone_play_by_path(TONE_RING, 0);
|
|
break;
|
|
case KEY_IR_NUM_2:
|
|
// tone_play_by_path(TONE_RING, 0);
|
|
break;
|
|
case KEY_POWEROFF:
|
|
if(usr_var.usr_power_charge_flag==1)break;
|
|
poweroff_sametime_flag = 0;
|
|
user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL);
|
|
break;
|
|
case KEY_POWEROFF_HOLD:
|
|
break;
|
|
case KEY_POWEROFF_HOLD_UP:
|
|
break;
|
|
case KEY_MUSIC_PREV:
|
|
break;
|
|
case KEY_MUSIC_NEXT:
|
|
break;
|
|
case KEY_VOL_UP:
|
|
volume_up(1);
|
|
break;
|
|
case KEY_VOL_DOWN:
|
|
volume_down(1);
|
|
break;
|
|
case KEY_CALL_LAST_NO:
|
|
if (bt_user_priv_var.last_call_type == BT_STATUS_PHONE_INCOME) {
|
|
user_send_cmd_prepare(USER_CTRL_DIAL_NUMBER, bt_user_priv_var.income_phone_len,
|
|
bt_user_priv_var.income_phone_num);
|
|
} else {
|
|
user_send_cmd_prepare(USER_CTRL_HFP_CALL_LAST_NO, 0, NULL);
|
|
}
|
|
break;
|
|
case KEY_CALL_HANG_UP:
|
|
|
|
break;
|
|
case KEY_CALL_ANSWER:
|
|
/* sys_enter_soft_poweroff(NULL); */
|
|
break;
|
|
case KEY_OPEN_SIRI:
|
|
user_send_cmd_prepare(USER_CTRL_HFP_GET_SIRI_OPEN, 0, NULL);
|
|
break;
|
|
case KEY_EQ_MODE:
|
|
#if(TCFG_EQ_ENABLE == 1)
|
|
eq_mode_sw();
|
|
#endif
|
|
break;
|
|
case KEY_HID_CONTROL:
|
|
log_info("get_curr_channel_state:%x\n", get_curr_channel_state());
|
|
if (get_curr_channel_state() & HID_CH) {
|
|
log_info("KEY_HID_CONTROL\n");
|
|
user_send_cmd_prepare(USER_CTRL_HID_IOS, 0, NULL);
|
|
}
|
|
break;
|
|
case KEY_THIRD_CLICK:
|
|
log_info("KEY_THIRD_CLICK");
|
|
key_tws_lr_diff_deal(event, ONE_KEY_CTL_NEXT_PREV);
|
|
break;
|
|
case KEY_LOW_LANTECY:
|
|
bt_set_low_latency_mode(!bt_get_low_latency_mode());
|
|
break;
|
|
|
|
case KEY_NULL:
|
|
break;
|
|
case KEY_MUSIC_EFF:
|
|
|
|
break;
|
|
|
|
case KEY_PHONE_PITCH:
|
|
|
|
break;
|
|
|
|
#if TCFG_APP_AUX_EN
|
|
case KEY_MODE_SWITCH:
|
|
log_info("KEY_MODE_SWITCH");
|
|
app_task_switch_next();
|
|
break;
|
|
#endif /*TCFG_AUDIO_SPATIAL_EFFECT_ENABLE*/
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
void adsp_volume_up(void)
|
|
{
|
|
volume_flag = 0;
|
|
volume_up(1);
|
|
volume_flag = 1;
|
|
}
|
|
|
|
void adsp_volume_down(void)
|
|
{
|
|
volume_flag = 0;
|
|
volume_down(1);
|
|
volume_flag = 1;
|
|
}
|
|
|