#ifdef SUPPORT_MS_EXTENSIONS #pragma bss_seg(".bt_key_func.data.bss") #pragma data_seg(".bt_key_func.data") #pragma const_seg(".bt_key_func.text.const") #pragma code_seg(".bt_key_func.text") #endif #include "btstack/avctp_user.h" #include "key_driver.h" #include "audio_manager.h" #include "vol_sync.h" #include "app_main.h" #include "audio_config.h" #include "bt_key_func.h" #include "ui/ui_api.h" #include "ui_manage.h" #include "bt_event_func.h" #include "app_tone.h" #include "app_common.h" #if TCFG_APP_BT_EN /*************************************************************************************************/ /*! * \brief 音量加 * * \param [in] * * \return * * \note 加音量 */ /*************************************************************************************************/ void volume_up(void) { u8 test_box_vol_up = 0x41; s8 cur_vol = 0; u8 call_status = bt_get_call_status(); if ((tone_player_runing() || ring_player_runing())) { if (bt_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 (bt_get_remote_test_flag()) { bt_cmd_prepare(USER_CTRL_TEST_KEY, 1, &test_box_vol_up); //音量加 } if (cur_vol >= app_audio_get_max_volume()) { audio_event_to_user(AUDIO_EVENT_VOL_MAX); //触发vol max事件 #if TCFG_MAX_VOL_PROMPT play_tone_file(get_tone_files()->max_vol); #endif if (bt_get_call_status() != BT_CALL_HANGUP) { /*本地音量最大,如果手机音量还没最大,继续加,以防显示不同步*/ if (g_bt_hdl.phone_vol < 15) { bt_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_UP, 0, NULL); } return; } #if TCFG_BT_VOL_SYNC_ENABLE if (bt_get_call_status() == BT_CALL_HANGUP) { opid_play_vol_sync_fun(&app_var.music_volume, 1); bt_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_INC, 0, NULL); } #endif/* TCFG_BT_VOL_SYNC_ENABLE */ return; } #if TCFG_BT_VOL_SYNC_ENABLE if (bt_get_call_status() == BT_CALL_HANGUP) { opid_play_vol_sync_fun(&app_var.music_volume, 1); app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.music_volume, 1); } #else if (app_audio_get_state() == APP_AUDIO_STATE_IDLE) { app_audio_state_switch(APP_AUDIO_STATE_MUSIC, app_audio_volume_max_query(AppVol_BT_MUSIC), NULL); } app_audio_volume_up(1); #endif/*TCFG_BT_VOL_SYNC_ENABLE*/ printf("vol+: %d", app_audio_get_volume(APP_AUDIO_CURRENT_STATE)); if (bt_get_call_status() != BT_CALL_HANGUP) { bt_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_UP, 0, NULL); } else { #if TCFG_BT_VOL_SYNC_ENABLE bt_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_INC, 0, NULL); #endif } } /*************************************************************************************************/ /*! * \brief 音量减 * * \param [in] * * \return * * \note 减音量 */ /*************************************************************************************************/ void volume_down(void) { u8 test_box_vol_down = 0x42; if ((tone_player_runing() || ring_player_runing())) { if (bt_get_call_status() == BT_CALL_INCOMING) { volume_up_down_direct(-1); } return; } if (bt_get_remote_test_flag()) { bt_cmd_prepare(USER_CTRL_TEST_KEY, 1, &test_box_vol_down); //音量减 } if (app_audio_get_volume(APP_AUDIO_CURRENT_STATE) <= 0) { audio_event_to_user(AUDIO_EVENT_VOL_MIN); //触发vol mix事件 if (bt_get_call_status() != BT_CALL_HANGUP) { /* *本地音量最小,如果手机音量还没最小,继续减 *注意:有些手机通话最小音量是1(GREE G0245D) */ if (g_bt_hdl.phone_vol > 1) { bt_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_DOWN, 0, NULL); } return; } #if TCFG_BT_VOL_SYNC_ENABLE if (bt_get_call_status() == BT_CALL_HANGUP) { opid_play_vol_sync_fun(&app_var.music_volume, 0); bt_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_DEC, 0, NULL); } #endif return; } #if TCFG_BT_VOL_SYNC_ENABLE if (bt_get_call_status() == BT_CALL_HANGUP) { opid_play_vol_sync_fun(&app_var.music_volume, 0); app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.music_volume, 1); } #else if (app_audio_get_state() == APP_AUDIO_STATE_IDLE) { app_audio_state_switch(APP_AUDIO_STATE_MUSIC, app_audio_volume_max_query(AppVol_BT_MUSIC), NULL); } app_audio_volume_down(1); #endif/*TCFG_BT_VOL_SYNC_ENABLE*/ printf("vol-: %d", app_audio_get_volume(APP_AUDIO_CURRENT_STATE)); if (bt_get_call_status() != BT_CALL_HANGUP) { bt_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_DOWN, 0, NULL); } else { #if TCFG_BT_VOL_SYNC_ENABLE /* 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); } bt_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_DEC, 0, NULL); #endif } } /*************************************************************************************************/ /*! * \brief 蓝牙模式 pp 按键处理 * * \param [in] * * \return * * \note */ /*************************************************************************************************/ void bt_key_music_pp(void) { if ((bt_get_call_status() == BT_CALL_OUTGOING) || (bt_get_call_status() == BT_CALL_ALERT)) { bt_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL); } else if (bt_get_call_status() == BT_CALL_INCOMING) { #if TCFG_BT_CALL_PHONE_BY_WATCH set_bt_esco_by_watch(1); #endif bt_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL); } else if (bt_get_call_status() == BT_CALL_ACTIVE) { bt_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL); } else { bt_cmd_prepare(USER_CTRL_AVCTP_OPID_PLAY, 0, NULL); } } /*************************************************************************************************/ /*! * \brief 蓝牙模式 prev 按键处理 * * \param [in] * * \return * * \note 播放音乐上一曲 */ /*************************************************************************************************/ void bt_key_music_prev(void) { bt_cmd_prepare(USER_CTRL_AVCTP_OPID_PREV, 0, NULL); } /*************************************************************************************************/ /*! * \brief 蓝牙模式 next 按键处理 * * \param [in] * * \return * * \note 播放音乐下一曲 */ /*************************************************************************************************/ void bt_key_music_next(void) { if (bt_get_call_status() == BT_CALL_INCOMING) { bt_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL); return; } bt_cmd_prepare(USER_CTRL_AVCTP_OPID_NEXT, 0, NULL); } /*************************************************************************************************/ /*! * \brief 蓝牙模式 vol up 按键处理 * * \param [in] * * \return * * \note 加音量 */ /*************************************************************************************************/ void bt_key_vol_up(void) { u8 vol; u8 call_status; if (bt_get_call_status() == BT_CALL_ACTIVE && bt_sco_state() == 0) { return; } volume_up(); call_status = bt_get_call_status(); if ((call_status == BT_CALL_ACTIVE) || (call_status == BT_CALL_OUTGOING)) { vol = app_audio_get_volume(APP_AUDIO_STATE_CALL); } else { vol = app_audio_get_volume(APP_AUDIO_STATE_MUSIC); } printf("music_vol:vol=%d, state:%d", vol, app_audio_get_state()); app_send_message(APP_MSG_VOL_CHANGED, vol); } /*************************************************************************************************/ /*! * \brief 蓝牙模式 vol down 按键处理 * * \param [in] * * \return * * \note 减音量 */ /*************************************************************************************************/ void bt_key_vol_down(void) { u8 vol; u8 call_status; if (bt_get_call_status() == BT_CALL_ACTIVE && bt_sco_state() == 0) { return; } volume_down(); call_status = bt_get_call_status(); if ((call_status == BT_CALL_ACTIVE) || (call_status == BT_CALL_OUTGOING)) { vol = app_audio_get_volume(APP_AUDIO_STATE_CALL); } else { vol = app_audio_get_volume(APP_AUDIO_STATE_MUSIC); } printf("music_vol:vol=%d, state:%d", vol, app_audio_get_state()); app_send_message(APP_MSG_VOL_CHANGED, vol); } /*************************************************************************************************/ /*! * \brief 蓝牙模式 回拨最后一个号码 来电拒听 * * \param [in] * * \return * * \note */ /*************************************************************************************************/ void bt_key_call_last_on(void) { if (bt_get_call_status() == BT_CALL_INCOMING) { bt_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL); return; } if ((bt_get_call_status() == BT_CALL_ACTIVE) || (bt_get_call_status() == BT_CALL_OUTGOING) || (bt_get_call_status() == BT_CALL_ALERT) || (bt_get_call_status() == BT_CALL_INCOMING)) { return;//通话过程不允许回拨 } if (g_bt_hdl.last_call_type == BT_STATUS_PHONE_INCOME) { bt_cmd_prepare(USER_CTRL_HFP_DIAL_NUMBER, g_bt_hdl.income_phone_len, g_bt_hdl.income_phone_num); } else { bt_cmd_prepare(USER_CTRL_HFP_CALL_LAST_NO, 0, NULL); } } /*************************************************************************************************/ /*! * \brief 蓝牙模式 通话挂断 * * \param [in] * * \return * * \note */ /*************************************************************************************************/ void bt_key_call_hang_up(void) { bt_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL); } /*************************************************************************************************/ /*! * \brief 蓝牙模式 siri开启 * * \param [in] * * \return * * \note */ /*************************************************************************************************/ void bt_key_call_siri(void) { bt_cmd_prepare(USER_CTRL_HFP_GET_SIRI_OPEN, 0, NULL); } /*************************************************************************************************/ /*! * \brief 蓝牙模式 hid 发起拍照命令 * * \param [in] * * \return * * \note */ /*************************************************************************************************/ void bt_key_hid_control(void) { /* log_info("bt_get_curr_channel_state:%x\n", bt_get_curr_channel_state()); */ if (bt_get_curr_channel_state() & HID_CH) { printf("KEY_HID_CONTROL\n"); bt_cmd_prepare(USER_CTRL_HID_IOS, 0, NULL); } } /*************************************************************************************************/ /*! * \brief 蓝牙模式 三方通话 挂断当前去听另一个(未接听或者在保留状态都可以) * * \param [in] * * \return * * \note */ /*************************************************************************************************/ void bt_key_call_three_way_answer1(void) { bt_cmd_prepare(USER_CTRL_HFP_THREE_WAY_ANSWER1, 0, NULL); } /*************************************************************************************************/ /*! * \brief 蓝牙模式 三方通话 保留当前去接听, 或者用于两个通话的切换 * * \param [in] * * \return * * \note */ /*************************************************************************************************/ void bt_key_call_three_way_answer2(void) { bt_cmd_prepare(USER_CTRL_HFP_THREE_WAY_ANSWER2, 0, NULL); } /*************************************************************************************************/ /*! * \brief 蓝牙模式 通话声卡切换 * * \param [in] * * \return * * \note */ /*************************************************************************************************/ void bt_key_call_switch(void) { if (bt_get_call_status() == BT_CALL_ACTIVE) { bt_cmd_prepare(USER_CTRL_SCO_LINK, 0, NULL); } } #endif /* #if TCFG_APP_BT_EN */