Loading system/BUILD.gn +1 −6 Original line number Diff line number Diff line Loading @@ -117,12 +117,7 @@ config("target_defaults") { "TARGET_FLOSS", "EXPORT_SYMBOL=__attribute__((visibility(\"default\")))", "FALLTHROUGH_INTENDED=[[clang::fallthrough]]", # TODO(b/214148074): Start with NB, should enable WB. "DISABLE_WBS=TRUE", # TODO(b/214149380): Start with Enhanced Call Status feature supported. # Should enable required features in the future. # This will be consumed by BTA_AgRegister and passed to HF through AT+BRSF. "BTIF_HF_FEATURES=0x00000040" "BTIF_HF_FEATURES=0x00000640" ] if (!(defined(use.bt_nonstandard_codecs) && use.bt_nonstandard_codecs)) { Loading system/bta/ag/bta_ag_sco.cc +18 −12 Original line number Diff line number Diff line Loading @@ -24,17 +24,18 @@ #include <base/bind.h> #include <base/logging.h> #include <cstdint> #include "bt_target.h" // Must be first to define build configuration #include "bt_trace.h" // Legacy trace logging #include "bta/ag/bta_ag_int.h" #include "device/include/controller.h" #include "main/shim/dumpsys.h" #include "osi/include/log.h" #include "osi/include/osi.h" // UNUSED_ATTR #include "stack/btm/btm_sco.h" #include "stack/btm/btm_sco_hfp_hal.h" #include "stack/include/btm_api.h" #include "stack/include/btu.h" // do_in_main_thread #include "types/raw_address.h" Loading Loading @@ -373,7 +374,8 @@ static void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { } #if (DISABLE_WBS == FALSE) if ((p_scb->sco_codec == BTM_SCO_CODEC_MSBC) && !p_scb->codec_fallback) if ((p_scb->sco_codec == BTM_SCO_CODEC_MSBC) && !p_scb->codec_fallback && hfp_hal_interface::get_wbs_supported()) esco_codec = BTM_SCO_CODEC_MSBC; #endif Loading @@ -385,24 +387,25 @@ static void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; } bool offload = hfp_hal_interface::get_offload_enabled(); /* Initialize eSCO parameters */ enh_esco_params_t params = {}; /* If WBS included, use CVSD by default, index is 0 for CVSD by * initialization. If eSCO codec is mSBC, index is T2 or T1 */ if (esco_codec == BTM_SCO_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, offload); } else { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1, offload); } } else { if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { // HFP >=1.7 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, offload); } } Loading Loading @@ -452,6 +455,7 @@ static void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { tBTA_AG_PEER_CODEC esco_codec = p_scb->inuse_codec; enh_esco_params_t params = {}; bool offload = hfp_hal_interface::get_offload_enabled(); bta_ag_cb.sco.p_curr_scb = p_scb; bta_ag_cb.sco.cur_idx = p_scb->sco_idx; Loading @@ -459,18 +463,18 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { if (is_local) { if (esco_codec == BTM_SCO_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, offload); } else { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1, offload); } } else { if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { // HFP >=1.7 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, offload); } } Loading @@ -489,6 +493,8 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { bta_ag_sco_disc_cback) == BTM_CMD_STARTED) { /* Initiating the connection, set the current sco handle */ bta_ag_cb.sco.cur_idx = p_scb->sco_idx; /* Configure input/output data. */ hfp_hal_interface::set_codec_datapath(esco_codec); } APPL_TRACE_DEBUG("%s: initiated SCO connection", __func__); } else { Loading @@ -500,10 +506,10 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { // HFP >=1.7 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, offload); } BTM_EScoConnRsp(p_scb->sco_idx, HCI_SUCCESS, ¶ms); Loading system/bta/hf_client/bta_hf_client_sco.cc +6 −6 Original line number Diff line number Diff line Loading @@ -110,16 +110,16 @@ static void bta_hf_client_sco_conn_rsp(tBTA_HF_CLIENT_CB* client_cb, if (client_cb->sco_state == BTA_HF_CLIENT_SCO_LISTEN_ST) { if (p_data->link_type == BTM_LINK_TYPE_SCO) { // SCO resp = esco_parameters_for_codec(SCO_CODEC_CVSD_D1); resp = esco_parameters_for_codec(SCO_CODEC_CVSD_D1, true); } else if (client_cb->negotiated_codec == BTM_SCO_CODEC_MSBC) { // eSCO mSBC resp = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); resp = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, true); } else if (bta_hf_client_cb_arr.features & BTA_HF_CLIENT_FEAT_ESCO_S4) { // eSCO CVSD, HFP 1.7 requires S4 resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, true); } else { // eSCO CVSD, S3 is preferred by default(before HFP 1.7) resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, true); } /* tell sys to stop av if any */ Loading Loading @@ -244,10 +244,10 @@ static void bta_hf_client_sco_create(tBTA_HF_CLIENT_CB* client_cb, if ((bta_hf_client_cb_arr.features & BTA_HF_CLIENT_FEAT_ESCO_S4) && (client_cb->peer_features & BTA_HF_CLIENT_PEER_ESCO_S4)) { // eSCO CVSD, HFP 1.7 requires S4 params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, true); } else { // eSCO CVSD, S3 is preferred by default(before HFP 1.7) params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, true); } /* if initiating set current scb and peer bd addr */ Loading system/btif/src/btif_sock_sco.cc +2 −2 Original line number Diff line number Diff line Loading @@ -85,7 +85,7 @@ bt_status_t btsock_sco_init(thread_t* thread_) { if (!sco_sockets) return BT_STATUS_FAIL; thread = thread_; enh_esco_params_t params = esco_parameters_for_codec(SCO_CODEC_CVSD_D1); enh_esco_params_t params = esco_parameters_for_codec(SCO_CODEC_CVSD_D1, true); BTM_SetEScoMode(¶ms); return BT_STATUS_SUCCESS; Loading Loading @@ -144,7 +144,7 @@ static sco_socket_t* sco_socket_establish_locked(bool is_listening, goto error; } params = esco_parameters_for_codec(SCO_CODEC_CVSD_D1); params = esco_parameters_for_codec(SCO_CODEC_CVSD_D1, true); status = BTM_CreateSco(bd_addr, !is_listening, params.packet_types, &sco_socket->sco_handle, connect_completed_cb, disconnect_completed_cb); Loading system/device/fuzzer/btdevice_esco_fuzzer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -71,6 +71,6 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { interopFeature, mFuzzedDataProvider.ConsumeRandomLengthString(kMaxStringLength).c_str()); esco_codec_t escoCodec = mFuzzedDataProvider.PickValueInArray(kEscoCodec); esco_parameters_for_codec(escoCodec); esco_parameters_for_codec(escoCodec, true); return 0; } Loading
system/BUILD.gn +1 −6 Original line number Diff line number Diff line Loading @@ -117,12 +117,7 @@ config("target_defaults") { "TARGET_FLOSS", "EXPORT_SYMBOL=__attribute__((visibility(\"default\")))", "FALLTHROUGH_INTENDED=[[clang::fallthrough]]", # TODO(b/214148074): Start with NB, should enable WB. "DISABLE_WBS=TRUE", # TODO(b/214149380): Start with Enhanced Call Status feature supported. # Should enable required features in the future. # This will be consumed by BTA_AgRegister and passed to HF through AT+BRSF. "BTIF_HF_FEATURES=0x00000040" "BTIF_HF_FEATURES=0x00000640" ] if (!(defined(use.bt_nonstandard_codecs) && use.bt_nonstandard_codecs)) { Loading
system/bta/ag/bta_ag_sco.cc +18 −12 Original line number Diff line number Diff line Loading @@ -24,17 +24,18 @@ #include <base/bind.h> #include <base/logging.h> #include <cstdint> #include "bt_target.h" // Must be first to define build configuration #include "bt_trace.h" // Legacy trace logging #include "bta/ag/bta_ag_int.h" #include "device/include/controller.h" #include "main/shim/dumpsys.h" #include "osi/include/log.h" #include "osi/include/osi.h" // UNUSED_ATTR #include "stack/btm/btm_sco.h" #include "stack/btm/btm_sco_hfp_hal.h" #include "stack/include/btm_api.h" #include "stack/include/btu.h" // do_in_main_thread #include "types/raw_address.h" Loading Loading @@ -373,7 +374,8 @@ static void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { } #if (DISABLE_WBS == FALSE) if ((p_scb->sco_codec == BTM_SCO_CODEC_MSBC) && !p_scb->codec_fallback) if ((p_scb->sco_codec == BTM_SCO_CODEC_MSBC) && !p_scb->codec_fallback && hfp_hal_interface::get_wbs_supported()) esco_codec = BTM_SCO_CODEC_MSBC; #endif Loading @@ -385,24 +387,25 @@ static void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; } bool offload = hfp_hal_interface::get_offload_enabled(); /* Initialize eSCO parameters */ enh_esco_params_t params = {}; /* If WBS included, use CVSD by default, index is 0 for CVSD by * initialization. If eSCO codec is mSBC, index is T2 or T1 */ if (esco_codec == BTM_SCO_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, offload); } else { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1, offload); } } else { if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { // HFP >=1.7 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, offload); } } Loading Loading @@ -452,6 +455,7 @@ static void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { tBTA_AG_PEER_CODEC esco_codec = p_scb->inuse_codec; enh_esco_params_t params = {}; bool offload = hfp_hal_interface::get_offload_enabled(); bta_ag_cb.sco.p_curr_scb = p_scb; bta_ag_cb.sco.cur_idx = p_scb->sco_idx; Loading @@ -459,18 +463,18 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { if (is_local) { if (esco_codec == BTM_SCO_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, offload); } else { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1, offload); } } else { if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { // HFP >=1.7 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, offload); } } Loading @@ -489,6 +493,8 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { bta_ag_sco_disc_cback) == BTM_CMD_STARTED) { /* Initiating the connection, set the current sco handle */ bta_ag_cb.sco.cur_idx = p_scb->sco_idx; /* Configure input/output data. */ hfp_hal_interface::set_codec_datapath(esco_codec); } APPL_TRACE_DEBUG("%s: initiated SCO connection", __func__); } else { Loading @@ -500,10 +506,10 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { // HFP >=1.7 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, offload); } BTM_EScoConnRsp(p_scb->sco_idx, HCI_SUCCESS, ¶ms); Loading
system/bta/hf_client/bta_hf_client_sco.cc +6 −6 Original line number Diff line number Diff line Loading @@ -110,16 +110,16 @@ static void bta_hf_client_sco_conn_rsp(tBTA_HF_CLIENT_CB* client_cb, if (client_cb->sco_state == BTA_HF_CLIENT_SCO_LISTEN_ST) { if (p_data->link_type == BTM_LINK_TYPE_SCO) { // SCO resp = esco_parameters_for_codec(SCO_CODEC_CVSD_D1); resp = esco_parameters_for_codec(SCO_CODEC_CVSD_D1, true); } else if (client_cb->negotiated_codec == BTM_SCO_CODEC_MSBC) { // eSCO mSBC resp = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); resp = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, true); } else if (bta_hf_client_cb_arr.features & BTA_HF_CLIENT_FEAT_ESCO_S4) { // eSCO CVSD, HFP 1.7 requires S4 resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, true); } else { // eSCO CVSD, S3 is preferred by default(before HFP 1.7) resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, true); } /* tell sys to stop av if any */ Loading Loading @@ -244,10 +244,10 @@ static void bta_hf_client_sco_create(tBTA_HF_CLIENT_CB* client_cb, if ((bta_hf_client_cb_arr.features & BTA_HF_CLIENT_FEAT_ESCO_S4) && (client_cb->peer_features & BTA_HF_CLIENT_PEER_ESCO_S4)) { // eSCO CVSD, HFP 1.7 requires S4 params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, true); } else { // eSCO CVSD, S3 is preferred by default(before HFP 1.7) params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3, true); } /* if initiating set current scb and peer bd addr */ Loading
system/btif/src/btif_sock_sco.cc +2 −2 Original line number Diff line number Diff line Loading @@ -85,7 +85,7 @@ bt_status_t btsock_sco_init(thread_t* thread_) { if (!sco_sockets) return BT_STATUS_FAIL; thread = thread_; enh_esco_params_t params = esco_parameters_for_codec(SCO_CODEC_CVSD_D1); enh_esco_params_t params = esco_parameters_for_codec(SCO_CODEC_CVSD_D1, true); BTM_SetEScoMode(¶ms); return BT_STATUS_SUCCESS; Loading Loading @@ -144,7 +144,7 @@ static sco_socket_t* sco_socket_establish_locked(bool is_listening, goto error; } params = esco_parameters_for_codec(SCO_CODEC_CVSD_D1); params = esco_parameters_for_codec(SCO_CODEC_CVSD_D1, true); status = BTM_CreateSco(bd_addr, !is_listening, params.packet_types, &sco_socket->sco_handle, connect_completed_cb, disconnect_completed_cb); Loading
system/device/fuzzer/btdevice_esco_fuzzer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -71,6 +71,6 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { interopFeature, mFuzzedDataProvider.ConsumeRandomLengthString(kMaxStringLength).c_str()); esco_codec_t escoCodec = mFuzzedDataProvider.PickValueInArray(kEscoCodec); esco_parameters_for_codec(escoCodec); esco_parameters_for_codec(escoCodec, true); return 0; }