Loading system/bta/ag/bta_ag_act.cc +6 −11 Original line number Diff line number Diff line Loading @@ -22,12 +22,9 @@ * ******************************************************************************/ #include <android_bluetooth_flags.h> #include <base/logging.h> #ifdef __ANDROID__ #include <com_android_bluetooth_flags.h> #endif #include <cstdint> #include <cstring> Loading Loading @@ -848,13 +845,11 @@ void bta_ag_svc_conn_open(tBTA_AG_SCB* p_scb, void bta_ag_setcodec(tBTA_AG_SCB* p_scb, const tBTA_AG_DATA& data) { tBTA_AG_PEER_CODEC codec_type = data.api_setcodec.codec; tBTA_AG_VAL val = {}; bool aptx_voice = false; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { aptx_voice = codec_type == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; LOG_INFO("aptx_voice=%d", aptx_voice); } #endif const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && (codec_type == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0); LOG_VERBOSE("aptx_voice=%s, codec_type=%#x", logbool(aptx_voice).c_str(), codec_type); val.hdr.handle = bta_ag_scb_to_idx(p_scb); /* Check if the requested codec type is valid */ Loading system/bta/ag/bta_ag_cmd.cc +21 −28 Original line number Diff line number Diff line Loading @@ -18,12 +18,9 @@ #define LOG_TAG "bta_ag_cmd" #include <android_bluetooth_flags.h> #include <base/logging.h> #ifdef __ANDROID__ #include <com_android_bluetooth_flags.h> #endif #include <cstdint> #include <cstring> Loading Loading @@ -1259,14 +1256,10 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type, bool wbs_supported = hfp_hal_interface::get_wbs_supported(); bool swb_supported = hfp_hal_interface::get_swb_supported(); bool aptx_voice = false; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { aptx_voice = p_scb->is_aptx_swb_codec; LOG_VERBOSE("BTA_AG_AT_BAC_EVT aptx_voice=%d", aptx_voice); } #endif const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && p_scb->is_aptx_swb_codec; LOG_VERBOSE("BTA_AG_AT_BAC_EVT aptx_voice=%s", logbool(aptx_voice).c_str()); if (swb_supported && (p_scb->peer_codecs & BTM_SCO_CODEC_LC3) && !(p_scb->disabled_codecs & BTM_SCO_CODEC_LC3)) { Loading Loading @@ -1351,28 +1344,28 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type, bta_ag_sco_open(p_scb, tBTA_AG_DATA::kEmpty); break; } #ifdef __ANDROID__ case BTA_AG_AT_QAC_EVT: if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { if (!IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); break; } p_scb->peer_codecs |= bta_ag_parse_qac(p_arg); // AT+%QAC needs to be responded with +%QAC bta_ag_swb_handle_vs_at_events(p_scb, cmd, int_arg, &val); // followed by OK bta_ag_send_ok(p_scb); break; } FALLTHROUGH_INTENDED; case BTA_AG_AT_QCS_EVT: if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { if (!IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); break; } // AT+%QCS is a response to +%QCS sent from AG. // Send OK to BT headset bta_ag_send_ok(p_scb); // Handle AT+%QCS bta_ag_swb_handle_vs_at_events(p_scb, cmd, int_arg, &val); break; } FALLTHROUGH_INTENDED; #endif default: bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); break; Loading system/bta/ag/bta_ag_sco.cc +32 −51 Original line number Diff line number Diff line Loading @@ -22,13 +22,10 @@ * ******************************************************************************/ #include <android_bluetooth_flags.h> #include <base/functional/bind.h> #include <base/logging.h> #ifdef __ANDROID__ #include <com_android_bluetooth_flags.h> #endif #include <cstdint> #include "bt_target.h" // Must be first to define build configuration Loading Loading @@ -200,16 +197,14 @@ static void bta_ag_sco_disc_cback(uint16_t sco_idx) { } if (handle != 0) { bool aptx_voice = false; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice() && bta_ag_cb.sco.p_curr_scb->is_aptx_swb_codec == true) { aptx_voice = bta_ag_cb.sco.p_curr_scb->inuse_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; LOG_VERBOSE("aptx_voice=%d, inuse_codec=%d", aptx_voice, const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && (bta_ag_cb.sco.p_curr_scb->is_aptx_swb_codec == true) && (bta_ag_cb.sco.p_curr_scb->inuse_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0); LOG_VERBOSE("aptx_voice=%s, inuse_codec=%#x", logbool(aptx_voice).c_str(), bta_ag_cb.sco.p_curr_scb->inuse_codec); } #endif /* Restore settings */ if (bta_ag_cb.sco.p_curr_scb->inuse_codec == UUID_CODEC_MSBC || bta_ag_cb.sco.p_curr_scb->inuse_codec == UUID_CODEC_LC3 || aptx_voice) { Loading Loading @@ -425,14 +420,12 @@ void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { } #endif #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { if (IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { if ((p_scb->sco_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0) && !p_scb->codec_fallback) { esco_codec = BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; } } #endif if ((p_scb->sco_codec == BTM_SCO_CODEC_LC3) && !p_scb->codec_fallback && hfp_hal_interface::get_swb_supported()) { Loading Loading @@ -471,8 +464,7 @@ void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { } else { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1, offload); } #ifdef __ANDROID__ } else if (com::android::bluetooth::flags::hfp_codec_aptx_voice() && } else if (IS_FLAG_ENABLED(hfp_codec_aptx_voice) && (p_scb->is_aptx_swb_codec == true && !p_scb->codec_updated)) { if (p_scb->codec_aptx_settings == BTA_AG_SCO_APTX_SWB_SETTINGS_Q3) { params = esco_parameters_for_codec(ESCO_CODEC_SWB_Q3, true); Loading @@ -483,7 +475,6 @@ void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { } else if (p_scb->codec_aptx_settings == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0) { params = esco_parameters_for_codec(ESCO_CODEC_SWB_Q0, true); } #endif } else { if ((p_scb->features & BTA_AG_FEAT_ESCO_S4) && (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { Loading Loading @@ -557,8 +548,7 @@ void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { } else { params = esco_parameters_for_codec(ESCO_CODEC_LC3_T1, offload); } #ifdef __ANDROID__ } else if (com::android::bluetooth::flags::hfp_codec_aptx_voice() && } else if (IS_FLAG_ENABLED(hfp_codec_aptx_voice) && (p_scb->is_aptx_swb_codec == true && !p_scb->codec_updated)) { if (p_scb->codec_aptx_settings == BTA_AG_SCO_APTX_SWB_SETTINGS_Q3) { params = esco_parameters_for_codec(ESCO_CODEC_SWB_Q3, true); Loading @@ -572,7 +562,6 @@ void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { BTA_AG_SCO_APTX_SWB_SETTINGS_Q0) { params = esco_parameters_for_codec(ESCO_CODEC_SWB_Q0, true); } #endif } else if (esco_codec == UUID_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, offload); Loading Loading @@ -694,20 +683,19 @@ void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) { LOG_INFO("Assume CVSD by default due to mask mismatch"); p_scb->sco_codec = UUID_CODEC_CVSD; } bool aptx_voice = false; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { aptx_voice = p_scb->is_aptx_swb_codec; LOG_VERBOSE("aptx_voice=%d, is_aptx_swb_codec=%d", aptx_voice, p_scb->is_aptx_swb_codec); } #endif const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && p_scb->is_aptx_swb_codec && (p_scb->peer_codecs & BTA_AG_SCO_APTX_SWB_SETTINGS_Q0_MASK); LOG_VERBOSE("aptx_voice=%s, is_aptx_swb_codec=%s, Q0 codec supported=%s", logbool(aptx_voice).c_str(), logbool(p_scb->is_aptx_swb_codec).c_str(), logbool(p_scb->peer_codecs & BTA_AG_SCO_APTX_SWB_SETTINGS_Q0_MASK) .c_str()); if (((p_scb->codec_updated || p_scb->codec_fallback) && (p_scb->features & BTA_AG_FEAT_CODEC) && (p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC)) || (aptx_voice && (p_scb->peer_codecs & BTA_AG_SCO_APTX_SWB_SETTINGS_Q0_MASK))) { (aptx_voice)) { LOG_INFO("Starting codec negotiation"); /* Change the power mode to Active until SCO open is completed. */ bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); Loading @@ -717,21 +705,17 @@ void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) { p_scb->sco_codec = BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; p_scb->is_aptx_swb_codec = true; } LOG_VERBOSE("Sending +QCS, sco_codec=%d, is_aptx_swb_codec=%d", p_scb->sco_codec, p_scb->is_aptx_swb_codec); LOG_VERBOSE("Sending +QCS, sco_codec=%d, is_aptx_swb_codec=%s", p_scb->sco_codec, logbool(p_scb->is_aptx_swb_codec).c_str()); /* Send +QCS to the peer */ bta_ag_send_qcs(p_scb, NULL); } else { #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice() && ((p_scb->is_aptx_swb_codec == true) && (p_scb->peer_codecs & BTA_AG_SCO_APTX_SWB_SETTINGS_Q0_MASK))) { if (aptx_voice) { p_scb->sco_codec = BTM_SCO_CODEC_MSBC; p_scb->is_aptx_swb_codec = false; } #endif LOG_VERBOSE("Sending +BCS, sco_codec=%d, is_aptx_swb_codec=%d", p_scb->sco_codec, p_scb->is_aptx_swb_codec); LOG_VERBOSE("Sending +BCS, sco_codec=%d, is_aptx_swb_codec=%s", p_scb->sco_codec, logbool(p_scb->is_aptx_swb_codec).c_str()); /* Send +BCS to the peer */ bta_ag_send_bcs(p_scb); } Loading Loading @@ -1462,18 +1446,15 @@ void bta_ag_sco_conn_open(tBTA_AG_SCB* p_scb, ******************************************************************************/ void bta_ag_sco_conn_close(tBTA_AG_SCB* p_scb, UNUSED_ATTR const tBTA_AG_DATA& data) { bool aptx_voice = false; /* clear current scb */ bta_ag_cb.sco.p_curr_scb = nullptr; p_scb->sco_idx = BTM_INVALID_SCO_INDEX; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { aptx_voice = p_scb->codec_fallback && p_scb->sco_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; LOG_VERBOSE("aptx_voice=%d, codec_fallback=%d, sco_codec=%d", aptx_voice, p_scb->codec_fallback, p_scb->sco_codec); } #endif const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && p_scb->codec_fallback && (p_scb->sco_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0); LOG_VERBOSE("aptx_voice=%s, codec_fallback=%#x, sco_codec=%#x", logbool(aptx_voice).c_str(), p_scb->codec_fallback, p_scb->sco_codec); /* codec_fallback is set when AG is initiator and connection failed for mSBC. * OR if codec is msbc and T2 settings failed, then retry Safe T1 settings Loading system/btif/src/btif_hf.cc +22 −26 Original line number Diff line number Diff line Loading @@ -27,14 +27,10 @@ #define LOG_TAG "bt_btif_hf" #include <android_bluetooth_flags.h> #include <android_bluetooth_sysprop.h> #include <base/functional/callback.h> #include <base/logging.h> #ifdef __ANDROID__ #include <com_android_bluetooth_flags.h> #endif #include <frameworks/proto_logging/stats/enums/bluetooth/enums.pb.h> #include <cstdint> Loading Loading @@ -594,12 +590,16 @@ static void btif_hf_upstreams_evt(uint16_t event, char* p_param) { } else { bt_hf_callbacks->WbsCallback(BTHF_WBS_NONE, &btif_hf_cb[idx].connected_bda); #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { bthf_swb_codec_t codec = BTHF_SWB_CODEC_LC3; bthf_swb_config_t config = BTHF_SWB_NONE; if (IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { codec = BTHF_SWB_CODEC_VENDOR_APTX; LOG_VERBOSE( "AG final selected SWB codec is 0x%02x 0=Q0 4=Q1 6=Q2 7=Q3", p_data->val.num); bthf_swb_config_t config; if (p_data->val.num == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0 || p_data->val.num == BTA_AG_SCO_APTX_SWB_SETTINGS_Q1 || p_data->val.num == BTA_AG_SCO_APTX_SWB_SETTINGS_Q2 || Loading @@ -608,14 +608,9 @@ static void btif_hf_upstreams_evt(uint16_t event, char* p_param) { } else { config = BTHF_SWB_NO; } bt_hf_callbacks->SwbCallback(BTHF_SWB_CODEC_VENDOR_APTX, config, &btif_hf_cb[idx].connected_bda); } else #endif // call SwbCallback with LC3 on non android target { bt_hf_callbacks->SwbCallback(BTHF_SWB_CODEC_LC3, BTHF_SWB_NONE, &btif_hf_cb[idx].connected_bda); } bt_hf_callbacks->SwbCallback(codec, config, &btif_hf_cb[idx].connected_bda); } break; Loading Loading @@ -707,10 +702,14 @@ static void btif_hf_upstreams_evt(uint16_t event, char* p_param) { } break; #ifdef __ANDROID__ case BTA_AG_AT_QCS_EVT: if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { LOG_INFO("AG final selected SWB codec is 0x%02x 0=Q0 4=Q1 6=Q2 7=Q3", if (!IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { LOG(WARNING) << __func__ << ": unhandled event " << event << ". Aptx codec is not enabled"; break; } LOG_INFO("AG final selected SWB codec is %#02x 0=Q0 4=Q1 6=Q2 7=Q3", p_data->val.num); bt_hf_callbacks->SwbCallback( BTHF_SWB_CODEC_VENDOR_APTX, Loading @@ -718,9 +717,6 @@ static void btif_hf_upstreams_evt(uint16_t event, char* p_param) { : BTHF_SWB_NO, &btif_hf_cb[idx].connected_bda); break; } FALLTHROUGH_INTENDED; #endif default: LOG(WARNING) << __func__ << ": unhandled event " << event; Loading Loading
system/bta/ag/bta_ag_act.cc +6 −11 Original line number Diff line number Diff line Loading @@ -22,12 +22,9 @@ * ******************************************************************************/ #include <android_bluetooth_flags.h> #include <base/logging.h> #ifdef __ANDROID__ #include <com_android_bluetooth_flags.h> #endif #include <cstdint> #include <cstring> Loading Loading @@ -848,13 +845,11 @@ void bta_ag_svc_conn_open(tBTA_AG_SCB* p_scb, void bta_ag_setcodec(tBTA_AG_SCB* p_scb, const tBTA_AG_DATA& data) { tBTA_AG_PEER_CODEC codec_type = data.api_setcodec.codec; tBTA_AG_VAL val = {}; bool aptx_voice = false; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { aptx_voice = codec_type == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; LOG_INFO("aptx_voice=%d", aptx_voice); } #endif const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && (codec_type == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0); LOG_VERBOSE("aptx_voice=%s, codec_type=%#x", logbool(aptx_voice).c_str(), codec_type); val.hdr.handle = bta_ag_scb_to_idx(p_scb); /* Check if the requested codec type is valid */ Loading
system/bta/ag/bta_ag_cmd.cc +21 −28 Original line number Diff line number Diff line Loading @@ -18,12 +18,9 @@ #define LOG_TAG "bta_ag_cmd" #include <android_bluetooth_flags.h> #include <base/logging.h> #ifdef __ANDROID__ #include <com_android_bluetooth_flags.h> #endif #include <cstdint> #include <cstring> Loading Loading @@ -1259,14 +1256,10 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type, bool wbs_supported = hfp_hal_interface::get_wbs_supported(); bool swb_supported = hfp_hal_interface::get_swb_supported(); bool aptx_voice = false; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { aptx_voice = p_scb->is_aptx_swb_codec; LOG_VERBOSE("BTA_AG_AT_BAC_EVT aptx_voice=%d", aptx_voice); } #endif const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && p_scb->is_aptx_swb_codec; LOG_VERBOSE("BTA_AG_AT_BAC_EVT aptx_voice=%s", logbool(aptx_voice).c_str()); if (swb_supported && (p_scb->peer_codecs & BTM_SCO_CODEC_LC3) && !(p_scb->disabled_codecs & BTM_SCO_CODEC_LC3)) { Loading Loading @@ -1351,28 +1344,28 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type, bta_ag_sco_open(p_scb, tBTA_AG_DATA::kEmpty); break; } #ifdef __ANDROID__ case BTA_AG_AT_QAC_EVT: if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { if (!IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); break; } p_scb->peer_codecs |= bta_ag_parse_qac(p_arg); // AT+%QAC needs to be responded with +%QAC bta_ag_swb_handle_vs_at_events(p_scb, cmd, int_arg, &val); // followed by OK bta_ag_send_ok(p_scb); break; } FALLTHROUGH_INTENDED; case BTA_AG_AT_QCS_EVT: if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { if (!IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); break; } // AT+%QCS is a response to +%QCS sent from AG. // Send OK to BT headset bta_ag_send_ok(p_scb); // Handle AT+%QCS bta_ag_swb_handle_vs_at_events(p_scb, cmd, int_arg, &val); break; } FALLTHROUGH_INTENDED; #endif default: bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); break; Loading
system/bta/ag/bta_ag_sco.cc +32 −51 Original line number Diff line number Diff line Loading @@ -22,13 +22,10 @@ * ******************************************************************************/ #include <android_bluetooth_flags.h> #include <base/functional/bind.h> #include <base/logging.h> #ifdef __ANDROID__ #include <com_android_bluetooth_flags.h> #endif #include <cstdint> #include "bt_target.h" // Must be first to define build configuration Loading Loading @@ -200,16 +197,14 @@ static void bta_ag_sco_disc_cback(uint16_t sco_idx) { } if (handle != 0) { bool aptx_voice = false; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice() && bta_ag_cb.sco.p_curr_scb->is_aptx_swb_codec == true) { aptx_voice = bta_ag_cb.sco.p_curr_scb->inuse_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; LOG_VERBOSE("aptx_voice=%d, inuse_codec=%d", aptx_voice, const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && (bta_ag_cb.sco.p_curr_scb->is_aptx_swb_codec == true) && (bta_ag_cb.sco.p_curr_scb->inuse_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0); LOG_VERBOSE("aptx_voice=%s, inuse_codec=%#x", logbool(aptx_voice).c_str(), bta_ag_cb.sco.p_curr_scb->inuse_codec); } #endif /* Restore settings */ if (bta_ag_cb.sco.p_curr_scb->inuse_codec == UUID_CODEC_MSBC || bta_ag_cb.sco.p_curr_scb->inuse_codec == UUID_CODEC_LC3 || aptx_voice) { Loading Loading @@ -425,14 +420,12 @@ void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { } #endif #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { if (IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { if ((p_scb->sco_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0) && !p_scb->codec_fallback) { esco_codec = BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; } } #endif if ((p_scb->sco_codec == BTM_SCO_CODEC_LC3) && !p_scb->codec_fallback && hfp_hal_interface::get_swb_supported()) { Loading Loading @@ -471,8 +464,7 @@ void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { } else { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1, offload); } #ifdef __ANDROID__ } else if (com::android::bluetooth::flags::hfp_codec_aptx_voice() && } else if (IS_FLAG_ENABLED(hfp_codec_aptx_voice) && (p_scb->is_aptx_swb_codec == true && !p_scb->codec_updated)) { if (p_scb->codec_aptx_settings == BTA_AG_SCO_APTX_SWB_SETTINGS_Q3) { params = esco_parameters_for_codec(ESCO_CODEC_SWB_Q3, true); Loading @@ -483,7 +475,6 @@ void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { } else if (p_scb->codec_aptx_settings == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0) { params = esco_parameters_for_codec(ESCO_CODEC_SWB_Q0, true); } #endif } else { if ((p_scb->features & BTA_AG_FEAT_ESCO_S4) && (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { Loading Loading @@ -557,8 +548,7 @@ void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { } else { params = esco_parameters_for_codec(ESCO_CODEC_LC3_T1, offload); } #ifdef __ANDROID__ } else if (com::android::bluetooth::flags::hfp_codec_aptx_voice() && } else if (IS_FLAG_ENABLED(hfp_codec_aptx_voice) && (p_scb->is_aptx_swb_codec == true && !p_scb->codec_updated)) { if (p_scb->codec_aptx_settings == BTA_AG_SCO_APTX_SWB_SETTINGS_Q3) { params = esco_parameters_for_codec(ESCO_CODEC_SWB_Q3, true); Loading @@ -572,7 +562,6 @@ void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { BTA_AG_SCO_APTX_SWB_SETTINGS_Q0) { params = esco_parameters_for_codec(ESCO_CODEC_SWB_Q0, true); } #endif } else if (esco_codec == UUID_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, offload); Loading Loading @@ -694,20 +683,19 @@ void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) { LOG_INFO("Assume CVSD by default due to mask mismatch"); p_scb->sco_codec = UUID_CODEC_CVSD; } bool aptx_voice = false; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { aptx_voice = p_scb->is_aptx_swb_codec; LOG_VERBOSE("aptx_voice=%d, is_aptx_swb_codec=%d", aptx_voice, p_scb->is_aptx_swb_codec); } #endif const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && p_scb->is_aptx_swb_codec && (p_scb->peer_codecs & BTA_AG_SCO_APTX_SWB_SETTINGS_Q0_MASK); LOG_VERBOSE("aptx_voice=%s, is_aptx_swb_codec=%s, Q0 codec supported=%s", logbool(aptx_voice).c_str(), logbool(p_scb->is_aptx_swb_codec).c_str(), logbool(p_scb->peer_codecs & BTA_AG_SCO_APTX_SWB_SETTINGS_Q0_MASK) .c_str()); if (((p_scb->codec_updated || p_scb->codec_fallback) && (p_scb->features & BTA_AG_FEAT_CODEC) && (p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC)) || (aptx_voice && (p_scb->peer_codecs & BTA_AG_SCO_APTX_SWB_SETTINGS_Q0_MASK))) { (aptx_voice)) { LOG_INFO("Starting codec negotiation"); /* Change the power mode to Active until SCO open is completed. */ bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); Loading @@ -717,21 +705,17 @@ void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) { p_scb->sco_codec = BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; p_scb->is_aptx_swb_codec = true; } LOG_VERBOSE("Sending +QCS, sco_codec=%d, is_aptx_swb_codec=%d", p_scb->sco_codec, p_scb->is_aptx_swb_codec); LOG_VERBOSE("Sending +QCS, sco_codec=%d, is_aptx_swb_codec=%s", p_scb->sco_codec, logbool(p_scb->is_aptx_swb_codec).c_str()); /* Send +QCS to the peer */ bta_ag_send_qcs(p_scb, NULL); } else { #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice() && ((p_scb->is_aptx_swb_codec == true) && (p_scb->peer_codecs & BTA_AG_SCO_APTX_SWB_SETTINGS_Q0_MASK))) { if (aptx_voice) { p_scb->sco_codec = BTM_SCO_CODEC_MSBC; p_scb->is_aptx_swb_codec = false; } #endif LOG_VERBOSE("Sending +BCS, sco_codec=%d, is_aptx_swb_codec=%d", p_scb->sco_codec, p_scb->is_aptx_swb_codec); LOG_VERBOSE("Sending +BCS, sco_codec=%d, is_aptx_swb_codec=%s", p_scb->sco_codec, logbool(p_scb->is_aptx_swb_codec).c_str()); /* Send +BCS to the peer */ bta_ag_send_bcs(p_scb); } Loading Loading @@ -1462,18 +1446,15 @@ void bta_ag_sco_conn_open(tBTA_AG_SCB* p_scb, ******************************************************************************/ void bta_ag_sco_conn_close(tBTA_AG_SCB* p_scb, UNUSED_ATTR const tBTA_AG_DATA& data) { bool aptx_voice = false; /* clear current scb */ bta_ag_cb.sco.p_curr_scb = nullptr; p_scb->sco_idx = BTM_INVALID_SCO_INDEX; #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { aptx_voice = p_scb->codec_fallback && p_scb->sco_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0; LOG_VERBOSE("aptx_voice=%d, codec_fallback=%d, sco_codec=%d", aptx_voice, p_scb->codec_fallback, p_scb->sco_codec); } #endif const bool aptx_voice = IS_FLAG_ENABLED(hfp_codec_aptx_voice) && p_scb->codec_fallback && (p_scb->sco_codec == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0); LOG_VERBOSE("aptx_voice=%s, codec_fallback=%#x, sco_codec=%#x", logbool(aptx_voice).c_str(), p_scb->codec_fallback, p_scb->sco_codec); /* codec_fallback is set when AG is initiator and connection failed for mSBC. * OR if codec is msbc and T2 settings failed, then retry Safe T1 settings Loading
system/btif/src/btif_hf.cc +22 −26 Original line number Diff line number Diff line Loading @@ -27,14 +27,10 @@ #define LOG_TAG "bt_btif_hf" #include <android_bluetooth_flags.h> #include <android_bluetooth_sysprop.h> #include <base/functional/callback.h> #include <base/logging.h> #ifdef __ANDROID__ #include <com_android_bluetooth_flags.h> #endif #include <frameworks/proto_logging/stats/enums/bluetooth/enums.pb.h> #include <cstdint> Loading Loading @@ -594,12 +590,16 @@ static void btif_hf_upstreams_evt(uint16_t event, char* p_param) { } else { bt_hf_callbacks->WbsCallback(BTHF_WBS_NONE, &btif_hf_cb[idx].connected_bda); #ifdef __ANDROID__ if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { bthf_swb_codec_t codec = BTHF_SWB_CODEC_LC3; bthf_swb_config_t config = BTHF_SWB_NONE; if (IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { codec = BTHF_SWB_CODEC_VENDOR_APTX; LOG_VERBOSE( "AG final selected SWB codec is 0x%02x 0=Q0 4=Q1 6=Q2 7=Q3", p_data->val.num); bthf_swb_config_t config; if (p_data->val.num == BTA_AG_SCO_APTX_SWB_SETTINGS_Q0 || p_data->val.num == BTA_AG_SCO_APTX_SWB_SETTINGS_Q1 || p_data->val.num == BTA_AG_SCO_APTX_SWB_SETTINGS_Q2 || Loading @@ -608,14 +608,9 @@ static void btif_hf_upstreams_evt(uint16_t event, char* p_param) { } else { config = BTHF_SWB_NO; } bt_hf_callbacks->SwbCallback(BTHF_SWB_CODEC_VENDOR_APTX, config, &btif_hf_cb[idx].connected_bda); } else #endif // call SwbCallback with LC3 on non android target { bt_hf_callbacks->SwbCallback(BTHF_SWB_CODEC_LC3, BTHF_SWB_NONE, &btif_hf_cb[idx].connected_bda); } bt_hf_callbacks->SwbCallback(codec, config, &btif_hf_cb[idx].connected_bda); } break; Loading Loading @@ -707,10 +702,14 @@ static void btif_hf_upstreams_evt(uint16_t event, char* p_param) { } break; #ifdef __ANDROID__ case BTA_AG_AT_QCS_EVT: if (com::android::bluetooth::flags::hfp_codec_aptx_voice()) { LOG_INFO("AG final selected SWB codec is 0x%02x 0=Q0 4=Q1 6=Q2 7=Q3", if (!IS_FLAG_ENABLED(hfp_codec_aptx_voice)) { LOG(WARNING) << __func__ << ": unhandled event " << event << ". Aptx codec is not enabled"; break; } LOG_INFO("AG final selected SWB codec is %#02x 0=Q0 4=Q1 6=Q2 7=Q3", p_data->val.num); bt_hf_callbacks->SwbCallback( BTHF_SWB_CODEC_VENDOR_APTX, Loading @@ -718,9 +717,6 @@ static void btif_hf_upstreams_evt(uint16_t event, char* p_param) { : BTHF_SWB_NO, &btif_hf_cb[idx].connected_bda); break; } FALLTHROUGH_INTENDED; #endif default: LOG(WARNING) << __func__ << ": unhandled event " << event; Loading