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

Commit 97cf6260 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes Ib54b08f1,I5f745669,I89ebbc7a am: 5ceb4f4a am: 1c86f631 am:...

Merge changes Ib54b08f1,I5f745669,I89ebbc7a am: 5ceb4f4a am: 1c86f631 am: 92cf879a am: ab746fd1 am: ed3b58b1

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/2117775



Change-Id: I3ca37b619fea4b0fd5ff89385de268acde8f884b
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 9f6f882d ed3b58b1
Loading
Loading
Loading
Loading
+1 −6
Original line number Original line Diff line number Diff line
@@ -117,12 +117,7 @@ config("target_defaults") {
    "TARGET_FLOSS",
    "TARGET_FLOSS",
    "EXPORT_SYMBOL=__attribute__((visibility(\"default\")))",
    "EXPORT_SYMBOL=__attribute__((visibility(\"default\")))",
    "FALLTHROUGH_INTENDED=[[clang::fallthrough]]",
    "FALLTHROUGH_INTENDED=[[clang::fallthrough]]",
    # TODO(b/214148074): Start with NB, should enable WB.
    "BTIF_HF_FEATURES=0x00000640"
    "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"
  ]
  ]


  if (!(defined(use.bt_nonstandard_codecs) && use.bt_nonstandard_codecs)) {
  if (!(defined(use.bt_nonstandard_codecs) && use.bt_nonstandard_codecs)) {
+18 −12
Original line number Original line Diff line number Diff line
@@ -24,17 +24,18 @@


#include <base/bind.h>
#include <base/bind.h>
#include <base/logging.h>
#include <base/logging.h>

#include <cstdint>
#include <cstdint>


#include "bt_target.h"  // Must be first to define build configuration
#include "bt_target.h"  // Must be first to define build configuration
#include "bt_trace.h"   // Legacy trace logging
#include "bt_trace.h"   // Legacy trace logging

#include "bta/ag/bta_ag_int.h"
#include "bta/ag/bta_ag_int.h"
#include "device/include/controller.h"
#include "device/include/controller.h"
#include "main/shim/dumpsys.h"
#include "main/shim/dumpsys.h"
#include "osi/include/log.h"
#include "osi/include/log.h"
#include "osi/include/osi.h"  // UNUSED_ATTR
#include "osi/include/osi.h"  // UNUSED_ATTR
#include "stack/btm/btm_sco.h"
#include "stack/btm/btm_sco.h"
#include "stack/btm/btm_sco_hfp_hal.h"
#include "stack/include/btm_api.h"
#include "stack/include/btm_api.h"
#include "stack/include/btu.h"  // do_in_main_thread
#include "stack/include/btu.h"  // do_in_main_thread
#include "types/raw_address.h"
#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 (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;
    esco_codec = BTM_SCO_CODEC_MSBC;
#endif
#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;
    p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2;
  }
  }


  bool offload = hfp_hal_interface::get_offload_enabled();
  /* Initialize eSCO parameters */
  /* Initialize eSCO parameters */
  enh_esco_params_t params = {};
  enh_esco_params_t params = {};
  /* If WBS included, use CVSD by default, index is 0 for CVSD by
  /* If WBS included, use CVSD by default, index is 0 for CVSD by
   * initialization. If eSCO codec is mSBC, index is T2 or T1 */
   * initialization. If eSCO codec is mSBC, index is T2 or T1 */
  if (esco_codec == BTM_SCO_CODEC_MSBC) {
  if (esco_codec == BTM_SCO_CODEC_MSBC) {
    if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) {
    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 {
    } else {
      params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1);
      params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1, offload);
    }
    }
  } else {
  } else {
    if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 &&
    if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 &&
        (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) {
        (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) {
      // HFP >=1.7 eSCO
      // HFP >=1.7 eSCO
      params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4);
      params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload);
    } else {
    } else {
      // HFP <=1.6 eSCO
      // 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) {
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;
  tBTA_AG_PEER_CODEC esco_codec = p_scb->inuse_codec;
  enh_esco_params_t params = {};
  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.p_curr_scb = p_scb;
  bta_ag_cb.sco.cur_idx = p_scb->sco_idx;
  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 (is_local) {
    if (esco_codec == BTM_SCO_CODEC_MSBC) {
    if (esco_codec == BTM_SCO_CODEC_MSBC) {
      if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) {
      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 {
      } else {
        params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1);
        params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1, offload);
      }
      }
    } else {
    } else {
      if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 &&
      if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 &&
          (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) {
          (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) {
        // HFP >=1.7 eSCO
        // HFP >=1.7 eSCO
        params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4);
        params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload);
      } else {
      } else {
        // HFP <=1.6 eSCO
        // 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) {
                      bta_ag_sco_disc_cback) == BTM_CMD_STARTED) {
      /* Initiating the connection, set the current sco handle */
      /* Initiating the connection, set the current sco handle */
      bta_ag_cb.sco.cur_idx = p_scb->sco_idx;
      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__);
    APPL_TRACE_DEBUG("%s: initiated SCO connection", __func__);
  } else {
  } 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 &&
    if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 &&
        (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) {
        (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) {
      // HFP >=1.7 eSCO
      // HFP >=1.7 eSCO
      params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4);
      params = esco_parameters_for_codec(ESCO_CODEC_CVSD_S4, offload);
    } else {
    } else {
      // HFP <=1.6 eSCO
      // 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);
    BTM_EScoConnRsp(p_scb->sco_idx, HCI_SUCCESS, &params);
+6 −6
Original line number Original line 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 (client_cb->sco_state == BTA_HF_CLIENT_SCO_LISTEN_ST) {
    if (p_data->link_type == BTM_LINK_TYPE_SCO) {
    if (p_data->link_type == BTM_LINK_TYPE_SCO) {
      // 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) {
    } else if (client_cb->negotiated_codec == BTM_SCO_CODEC_MSBC) {
      // eSCO 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) {
    } else if (bta_hf_client_cb_arr.features & BTA_HF_CLIENT_FEAT_ESCO_S4) {
      // eSCO CVSD, HFP 1.7 requires 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 {
    } else {
      // eSCO CVSD, S3 is preferred by default(before HFP 1.7)
      // 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 */
    /* 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) &&
  if ((bta_hf_client_cb_arr.features & BTA_HF_CLIENT_FEAT_ESCO_S4) &&
      (client_cb->peer_features & BTA_HF_CLIENT_PEER_ESCO_S4)) {
      (client_cb->peer_features & BTA_HF_CLIENT_PEER_ESCO_S4)) {
    // eSCO CVSD, HFP 1.7 requires 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 {
  } else {
    // eSCO CVSD, S3 is preferred by default(before HFP 1.7)
    // 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 */
  /* if initiating set current scb and peer bd addr */
+2 −2
Original line number Original line 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;
  if (!sco_sockets) return BT_STATUS_FAIL;


  thread = thread_;
  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);
  BTM_SetEScoMode(&params);


  return BT_STATUS_SUCCESS;
  return BT_STATUS_SUCCESS;
@@ -144,7 +144,7 @@ static sco_socket_t* sco_socket_establish_locked(bool is_listening,
    goto error;
    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,
  status = BTM_CreateSco(bd_addr, !is_listening, params.packet_types,
                         &sco_socket->sco_handle, connect_completed_cb,
                         &sco_socket->sco_handle, connect_completed_cb,
                         disconnect_completed_cb);
                         disconnect_completed_cb);
+1 −1
Original line number Original line Diff line number Diff line
@@ -71,6 +71,6 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
      interopFeature,
      interopFeature,
      mFuzzedDataProvider.ConsumeRandomLengthString(kMaxStringLength).c_str());
      mFuzzedDataProvider.ConsumeRandomLengthString(kMaxStringLength).c_str());
  esco_codec_t escoCodec = mFuzzedDataProvider.PickValueInArray(kEscoCodec);
  esco_codec_t escoCodec = mFuzzedDataProvider.PickValueInArray(kEscoCodec);
  esco_parameters_for_codec(escoCodec);
  esco_parameters_for_codec(escoCodec, true);
  return 0;
  return 0;
}
}
Loading