Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c86f631 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes Ib54b08f1,I5f745669,I89ebbc7a am: 5ceb4f4a

parents 83702c97 5ceb4f4a
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -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)) {
+18 −12
Original line number Diff line number Diff line
@@ -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"
@@ -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

@@ -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);
    }
  }

@@ -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;

@@ -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);
      }
    }

@@ -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 {
@@ -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, &params);
+6 −6
Original line number Diff line number Diff line
@@ -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 */
@@ -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 */
+2 −2
Original line number Diff line number Diff line
@@ -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(&params);

  return BT_STATUS_SUCCESS;
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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