Loading system/bta/ag/bta_ag_sco.cc +33 −29 Original line number Diff line number Diff line Loading @@ -392,29 +392,24 @@ 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; } esco_codec_t codec_index = ESCO_CODEC_CVSD; /* 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 == BTA_AG_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { codec_index = ESCO_CODEC_MSBC_T2; params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); } else { codec_index = ESCO_CODEC_MSBC_T1; } params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); } /* Initialize eSCO parameters */ enh_esco_params_t params = esco_parameters_for_codec(codec_index); /* For CVSD */ if (esco_codec == BTM_SCO_CODEC_CVSD) { /* Use the applicable packet types (3-EV3 not allowed due to errata 2363) */ params.packet_types = p_bta_ag_cfg->sco_pkt_types | ESCO_PKT_TYPES_MASK_NO_3_EV3; if ((!(p_scb->features & BTA_AG_FEAT_ESCO)) || (!(p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO))) { params.max_latency_ms = 10; params.retransmission_effort = ESCO_RETRANSMISSION_POWER; } 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); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } } Loading Loading @@ -472,14 +467,17 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { if (esco_codec == BTA_AG_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); } else } else { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); } } 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); } else { params = esco_parameters_for_codec(ESCO_CODEC_CVSD); if ((!(p_scb->features & BTA_AG_FEAT_ESCO)) || (!(p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO))) { params.max_latency_ms = 10; params.retransmission_effort = ESCO_RETRANSMISSION_POWER; // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } } Loading @@ -501,12 +499,18 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { } APPL_TRACE_DEBUG("%s: initiated SCO connection", __func__); } else { /* Local device accepted SCO connection from peer */ params = esco_parameters_for_codec(ESCO_CODEC_CVSD); if ((!(p_scb->features & BTA_AG_FEAT_ESCO)) || (!(p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO))) { params.max_latency_ms = 10; params.retransmission_effort = ESCO_RETRANSMISSION_POWER; // Local device accepted SCO connection from peer(HF) // Because HF devices usually do not send AT+BAC and +BCS command, // and there is no plan to implement corresponding command handlers, // so we only accept CVSD connection from HF no matter what's // requested. 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); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } BTM_EScoConnRsp(p_scb->sco_idx, HCI_SUCCESS, ¶ms); Loading system/bta/hf_client/bta_hf_client_int.h +0 −4 Original line number Diff line number Diff line Loading @@ -25,10 +25,6 @@ /***************************************************************************** * Constants ****************************************************************************/ #define HFP_VERSION_1_1 0x0101 #define HFP_VERSION_1_5 0x0105 #define HFP_VERSION_1_6 0x0106 #define HFP_VERSION_1_7 0x0107 /* RFCOMM MTU SIZE */ #define BTA_HF_CLIENT_MTU 256 Loading system/bta/hf_client/bta_hf_client_sco.cc +24 −8 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include "bt_trace.h" #include "bt_utils.h" #include "bta_ag_api.h" #include "bta_hf_client_api.h" #include "bta_hf_client_int.h" #include "device/include/esco_parameters.h" #include "osi/include/osi.h" Loading Loading @@ -110,14 +111,17 @@ 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) { resp = esco_parameters_for_codec(ESCO_CODEC_CVSD); } else { if (client_cb->negotiated_codec == BTA_AG_CODEC_MSBC) { // SCO resp = esco_parameters_for_codec(SCO_CODEC_CVSD_D1); } else if (client_cb->negotiated_codec == BTA_AG_CODEC_MSBC) { // eSCO mSBC resp = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); } 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); } else { // default codec resp = esco_parameters_for_codec(ESCO_CODEC_CVSD); } // eSCO CVSD, S3 is preferred by default(before HFP 1.7) resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } /* tell sys to stop av if any */ Loading Loading @@ -234,7 +238,19 @@ static void bta_hf_client_sco_create(tBTA_HF_CLIENT_CB* client_cb, return; } enh_esco_params_t params = esco_parameters_for_codec(ESCO_CODEC_CVSD); // codec parameters enh_esco_params_t params; // Since HF device is not expected to receive AT+BAC send +BCS command, // codec support of the connected AG device will be unknown, // so HF device will always establish only CVSD connection. 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); } else { // eSCO CVSD, S3 is preferred by default(before HFP 1.7) params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } /* if initiating set current scb and peer bd addr */ if (is_orig) { Loading system/bta/hf_client/bta_hf_client_sdp.cc +1 −4 Original line number Diff line number Diff line Loading @@ -124,10 +124,7 @@ bool bta_hf_client_add_record(const char* p_service_name, uint8_t scn, /* add profile descriptor list */ profile_uuid = UUID_SERVCLASS_HF_HANDSFREE; version = HFP_VERSION_1_6; if (osi_property_get_bool("persist.bluetooth.hfpclient.sco_s4_supported", false)) version = HFP_VERSION_1_7; version = BTA_HFP_VERSION; result &= SDP_AddProfileDescriptorList(sdp_handle, profile_uuid, version); Loading system/bta/include/bta_ag_api.h +5 −22 Original line number Diff line number Diff line Loading @@ -25,7 +25,9 @@ #ifndef BTA_AG_API_H #define BTA_AG_API_H #include <cstdint> #include "bta_api.h" #include "bta_hfp_api.h" #include <string> #include <vector> Loading @@ -39,25 +41,6 @@ /* Number of SCBs (AG service instances that can be registered) */ #define BTA_AG_MAX_NUM_CLIENTS 6 #define HFP_HSP_VERSION_UNKNOWN 0x0000 #define HFP_VERSION_1_1 0x0101 #define HFP_VERSION_1_5 0x0105 #define HFP_VERSION_1_6 0x0106 #define HFP_VERSION_1_7 0x0107 #define HSP_VERSION_1_0 0x0100 #define HSP_VERSION_1_2 0x0102 #define HFP_VERSION_CONFIG_KEY "HfpVersion" #define HFP_SDP_FEATURES_CONFIG_KEY "HfpSdpFeatures" /* Note, if you change the default version here, please also change the one in * bta_hs_api.h, they are meant to be the same. */ #ifndef BTA_HFP_VERSION #define BTA_HFP_VERSION HFP_VERSION_1_7 #endif /* AG feature masks */ #define BTA_AG_FEAT_3WAY 0x00000001 /* Three-way calling */ #define BTA_AG_FEAT_ECNR 0x00000002 /* Echo cancellation/noise reduction */ Loading @@ -81,7 +64,7 @@ /* HFP 1.7+ */ #define BTA_AG_FEAT_HF_IND 0x00000400 /* HF Indicators */ #define BTA_AG_FEAT_ESCO 0x00000800 /* eSCO S4 (and T2) setting supported */ #define BTA_AG_FEAT_ESCO_S4 0x00000800 /* eSCO S4 setting supported */ /* Proprietary features: using 31 ~ 16 bits */ #define BTA_AG_FEAT_BTRH 0x00010000 /* CCAP incoming call hold */ Loading Loading @@ -202,7 +185,7 @@ inline std::string bta_ag_result_text(const tBTA_AG_RES& result) { #define BTA_AG_PEER_FEAT_ECC 0x0040 /* Enhanced Call Control */ #define BTA_AG_PEER_FEAT_CODEC 0x0080 /* Codec Negotiation */ #define BTA_AG_PEER_FEAT_HF_IND 0x0100 /* HF Indicators */ #define BTA_AG_PEER_FEAT_ESCO 0x0200 /* eSCO S4 (and T2) setting supported */ #define BTA_AG_PEER_FEAT_ESCO_S4 0x0200 /* eSCO S4 setting supported */ /* Proprietary features: using bits after 12 */ Loading Loading
system/bta/ag/bta_ag_sco.cc +33 −29 Original line number Diff line number Diff line Loading @@ -392,29 +392,24 @@ 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; } esco_codec_t codec_index = ESCO_CODEC_CVSD; /* 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 == BTA_AG_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { codec_index = ESCO_CODEC_MSBC_T2; params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); } else { codec_index = ESCO_CODEC_MSBC_T1; } params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); } /* Initialize eSCO parameters */ enh_esco_params_t params = esco_parameters_for_codec(codec_index); /* For CVSD */ if (esco_codec == BTM_SCO_CODEC_CVSD) { /* Use the applicable packet types (3-EV3 not allowed due to errata 2363) */ params.packet_types = p_bta_ag_cfg->sco_pkt_types | ESCO_PKT_TYPES_MASK_NO_3_EV3; if ((!(p_scb->features & BTA_AG_FEAT_ESCO)) || (!(p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO))) { params.max_latency_ms = 10; params.retransmission_effort = ESCO_RETRANSMISSION_POWER; } 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); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } } Loading Loading @@ -472,14 +467,17 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { if (esco_codec == BTA_AG_CODEC_MSBC) { if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); } else } else { params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); } } 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); } else { params = esco_parameters_for_codec(ESCO_CODEC_CVSD); if ((!(p_scb->features & BTA_AG_FEAT_ESCO)) || (!(p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO))) { params.max_latency_ms = 10; params.retransmission_effort = ESCO_RETRANSMISSION_POWER; // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } } Loading @@ -501,12 +499,18 @@ static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { } APPL_TRACE_DEBUG("%s: initiated SCO connection", __func__); } else { /* Local device accepted SCO connection from peer */ params = esco_parameters_for_codec(ESCO_CODEC_CVSD); if ((!(p_scb->features & BTA_AG_FEAT_ESCO)) || (!(p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO))) { params.max_latency_ms = 10; params.retransmission_effort = ESCO_RETRANSMISSION_POWER; // Local device accepted SCO connection from peer(HF) // Because HF devices usually do not send AT+BAC and +BCS command, // and there is no plan to implement corresponding command handlers, // so we only accept CVSD connection from HF no matter what's // requested. 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); } else { // HFP <=1.6 eSCO params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } BTM_EScoConnRsp(p_scb->sco_idx, HCI_SUCCESS, ¶ms); Loading
system/bta/hf_client/bta_hf_client_int.h +0 −4 Original line number Diff line number Diff line Loading @@ -25,10 +25,6 @@ /***************************************************************************** * Constants ****************************************************************************/ #define HFP_VERSION_1_1 0x0101 #define HFP_VERSION_1_5 0x0105 #define HFP_VERSION_1_6 0x0106 #define HFP_VERSION_1_7 0x0107 /* RFCOMM MTU SIZE */ #define BTA_HF_CLIENT_MTU 256 Loading
system/bta/hf_client/bta_hf_client_sco.cc +24 −8 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include "bt_trace.h" #include "bt_utils.h" #include "bta_ag_api.h" #include "bta_hf_client_api.h" #include "bta_hf_client_int.h" #include "device/include/esco_parameters.h" #include "osi/include/osi.h" Loading Loading @@ -110,14 +111,17 @@ 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) { resp = esco_parameters_for_codec(ESCO_CODEC_CVSD); } else { if (client_cb->negotiated_codec == BTA_AG_CODEC_MSBC) { // SCO resp = esco_parameters_for_codec(SCO_CODEC_CVSD_D1); } else if (client_cb->negotiated_codec == BTA_AG_CODEC_MSBC) { // eSCO mSBC resp = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2); } 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); } else { // default codec resp = esco_parameters_for_codec(ESCO_CODEC_CVSD); } // eSCO CVSD, S3 is preferred by default(before HFP 1.7) resp = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } /* tell sys to stop av if any */ Loading Loading @@ -234,7 +238,19 @@ static void bta_hf_client_sco_create(tBTA_HF_CLIENT_CB* client_cb, return; } enh_esco_params_t params = esco_parameters_for_codec(ESCO_CODEC_CVSD); // codec parameters enh_esco_params_t params; // Since HF device is not expected to receive AT+BAC send +BCS command, // codec support of the connected AG device will be unknown, // so HF device will always establish only CVSD connection. 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); } else { // eSCO CVSD, S3 is preferred by default(before HFP 1.7) params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S3); } /* if initiating set current scb and peer bd addr */ if (is_orig) { Loading
system/bta/hf_client/bta_hf_client_sdp.cc +1 −4 Original line number Diff line number Diff line Loading @@ -124,10 +124,7 @@ bool bta_hf_client_add_record(const char* p_service_name, uint8_t scn, /* add profile descriptor list */ profile_uuid = UUID_SERVCLASS_HF_HANDSFREE; version = HFP_VERSION_1_6; if (osi_property_get_bool("persist.bluetooth.hfpclient.sco_s4_supported", false)) version = HFP_VERSION_1_7; version = BTA_HFP_VERSION; result &= SDP_AddProfileDescriptorList(sdp_handle, profile_uuid, version); Loading
system/bta/include/bta_ag_api.h +5 −22 Original line number Diff line number Diff line Loading @@ -25,7 +25,9 @@ #ifndef BTA_AG_API_H #define BTA_AG_API_H #include <cstdint> #include "bta_api.h" #include "bta_hfp_api.h" #include <string> #include <vector> Loading @@ -39,25 +41,6 @@ /* Number of SCBs (AG service instances that can be registered) */ #define BTA_AG_MAX_NUM_CLIENTS 6 #define HFP_HSP_VERSION_UNKNOWN 0x0000 #define HFP_VERSION_1_1 0x0101 #define HFP_VERSION_1_5 0x0105 #define HFP_VERSION_1_6 0x0106 #define HFP_VERSION_1_7 0x0107 #define HSP_VERSION_1_0 0x0100 #define HSP_VERSION_1_2 0x0102 #define HFP_VERSION_CONFIG_KEY "HfpVersion" #define HFP_SDP_FEATURES_CONFIG_KEY "HfpSdpFeatures" /* Note, if you change the default version here, please also change the one in * bta_hs_api.h, they are meant to be the same. */ #ifndef BTA_HFP_VERSION #define BTA_HFP_VERSION HFP_VERSION_1_7 #endif /* AG feature masks */ #define BTA_AG_FEAT_3WAY 0x00000001 /* Three-way calling */ #define BTA_AG_FEAT_ECNR 0x00000002 /* Echo cancellation/noise reduction */ Loading @@ -81,7 +64,7 @@ /* HFP 1.7+ */ #define BTA_AG_FEAT_HF_IND 0x00000400 /* HF Indicators */ #define BTA_AG_FEAT_ESCO 0x00000800 /* eSCO S4 (and T2) setting supported */ #define BTA_AG_FEAT_ESCO_S4 0x00000800 /* eSCO S4 setting supported */ /* Proprietary features: using 31 ~ 16 bits */ #define BTA_AG_FEAT_BTRH 0x00010000 /* CCAP incoming call hold */ Loading Loading @@ -202,7 +185,7 @@ inline std::string bta_ag_result_text(const tBTA_AG_RES& result) { #define BTA_AG_PEER_FEAT_ECC 0x0040 /* Enhanced Call Control */ #define BTA_AG_PEER_FEAT_CODEC 0x0080 /* Codec Negotiation */ #define BTA_AG_PEER_FEAT_HF_IND 0x0100 /* HF Indicators */ #define BTA_AG_PEER_FEAT_ESCO 0x0200 /* eSCO S4 (and T2) setting supported */ #define BTA_AG_PEER_FEAT_ESCO_S4 0x0200 /* eSCO S4 setting supported */ /* Proprietary features: using bits after 12 */ Loading