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

Commit 3f5d2987 authored by Myles Watson's avatar Myles Watson Committed by Gerrit Code Review
Browse files

Merge changes I1626bc03,I52119b90 into main

* changes:
  Use GD controller to fill cmn_ble_vsc_cb
  Use GD controller to set DAB time
parents 1c513bc7 df8eb54a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -153,12 +153,14 @@ cc_library_static {
        "lib-bt-packets-base",
        "libaudio-a2dp-hw-utils",
        "libbluetooth-types",
        "libbluetooth_hci_pdl",
        "libbt-audio-hal-interface",
        "libbt-platform-protos-lite",
        "libbt-stack",
        "libbt-stack-core",
        "libbt_shim_bridge",
        "libbtif-core",
        "libflatbuffers-cpp",
    ],
    shared_libs: [
        "android.hardware.bluetooth.audio@2.1",
@@ -236,11 +238,13 @@ cc_library_static {
        "lib-bt-packets-base",
        "libaudio-a2dp-hw-utils",
        "libbluetooth_crypto_toolbox",
        "libbluetooth_hci_pdl",
        "libbt-audio-hal-interface",
        "libbt-jni-thread",
        "libbt-platform-protos-lite",
        "libbt-stack-core",
        "libbt_shim_bridge",
        "libflatbuffers-cpp",
        "libstatslog_bt",
    ],
    whole_static_libs: [
+4 −50
Original line number Diff line number Diff line
@@ -49,8 +49,10 @@
#include "common/message_loop_thread.h"
#include "device/include/controller.h"
#include "device/include/device_iot_config.h"
#include "hci/controller.h"
#include "internal_include/bt_target.h"
#include "internal_include/bt_trace.h"
#include "main/shim/entry.h"
#include "os/log.h"
#include "osi/include/allocator.h"
#include "osi/include/future.h"
@@ -729,48 +731,6 @@ void btif_disable_service(tBTA_SERVICE_ID service_id) {
  }
}

void DynamicAudiobufferSizeCompleteCallback(tBTM_VSC_CMPL* p_vsc_cmpl_params) {
  LOG(INFO) << __func__;

  if (p_vsc_cmpl_params->param_len < 1) {
    LOG(ERROR) << __func__
               << ": The length of returned parameters is less than 1";
    return;
  }
  uint8_t* p_event_param_buf = p_vsc_cmpl_params->p_param_buf;
  uint8_t status = 0xff;
  uint8_t opcode = 0xff;
  uint16_t respond_buffer_time = 0xffff;

  // [Return Parameter]         | [Size]   | [Purpose]
  // Status                     | 1 octet  | Command complete status
  // Dynamic_Audio_Buffer_opcode| 1 octet  | 0x02 - Set buffer time
  // Audio_Codec_Buffer_Time    | 2 octet  | Current buffer time
  STREAM_TO_UINT8(status, p_event_param_buf);
  if (status != HCI_SUCCESS) {
    LOG(ERROR) << __func__
               << ": Fail to configure DFTB. status: " << loghex(status);
    return;
  }

  if (p_vsc_cmpl_params->param_len != 4) {
    LOG(FATAL) << __func__
               << ": The length of returned parameters is not equal to 4: "
               << std::to_string(p_vsc_cmpl_params->param_len);
    return;
  }

  STREAM_TO_UINT8(opcode, p_event_param_buf);
  LOG(INFO) << __func__ << ": opcode = " << loghex(opcode);

  if (opcode == 0x02) {
    STREAM_TO_UINT16(respond_buffer_time, p_event_param_buf);
    LOG(INFO) << __func__
              << ": Succeed to configure Media Tx Buffer, used_buffer_time = "
              << loghex(respond_buffer_time);
  }
}

bt_status_t btif_set_dynamic_audio_buffer_size(int codec, int size) {
  LOG_VERBOSE("%s", __func__);

@@ -787,17 +747,11 @@ bt_status_t btif_set_dynamic_audio_buffer_size(int codec, int size) {
    if (cmn_vsc_cb.dynamic_audio_buffer_support != 0) {
      LOG_VERBOSE("%s Set buffer size (%d) for A2DP offload", __func__, size);
      uint16_t firmware_tx_buffer_length_byte;
      uint8_t param[3] = {0};
      uint8_t* p_param = param;

      firmware_tx_buffer_length_byte = static_cast<uint16_t>(size);
      LOG(INFO) << __func__ << "firmware_tx_buffer_length_byte: "
                << firmware_tx_buffer_length_byte;

      UINT8_TO_STREAM(p_param, HCI_CONTROLLER_DAB_SET_BUFFER_TIME);
      UINT16_TO_STREAM(p_param, firmware_tx_buffer_length_byte);
      BTM_VendorSpecificCommand(HCI_CONTROLLER_DAB, p_param - param, param,
                                DynamicAudiobufferSizeCompleteCallback);
      bluetooth::shim::GetController()->SetDabAudioBufferTime(
          firmware_tx_buffer_length_byte);
    }
  }

+90 −3
Original line number Diff line number Diff line
@@ -40,8 +40,10 @@
#include "bta/include/bta_api.h"
#include "common/time_util.h"
#include "device/include/controller.h"
#include "hci/controller.h"
#include "include/check.h"
#include "main/shim/acl_api.h"
#include "main/shim/entry.h"
#include "osi/include/allocator.h"
#include "osi/include/osi.h"  // UNUSED_ATTR
#include "osi/include/properties.h"
@@ -93,6 +95,8 @@ static void btm_ble_stop_scan();
static tBTM_STATUS btm_ble_stop_adv(void);
static tBTM_STATUS btm_ble_start_adv(void);

using bluetooth::shim::GetController;

namespace {

constexpr char kBtmLogTag[] = "SCAN";
@@ -821,10 +825,93 @@ void BTM_BleReadControllerFeatures(tBTM_BLE_CTRL_FEATURES_CBACK* p_vsc_cback) {

  LOG_VERBOSE("BTM_BleReadControllerFeatures");

  if (IS_FLAG_ENABLED(report_vsc_data_from_the_gd_controller)) {
    btm_cb.cmn_ble_vsc_cb.values_read = true;
    bluetooth::hci::Controller::VendorCapabilities vendor_capabilities =
        GetController()->GetVendorCapabilities();

    btm_cb.cmn_ble_vsc_cb.adv_inst_max =
        vendor_capabilities.max_advt_instances_;
    btm_cb.cmn_ble_vsc_cb.rpa_offloading =
        vendor_capabilities.offloaded_resolution_of_private_address_;
    btm_cb.cmn_ble_vsc_cb.tot_scan_results_strg =
        vendor_capabilities.total_scan_results_storage_;
    btm_cb.cmn_ble_vsc_cb.max_irk_list_sz =
        vendor_capabilities.max_irk_list_sz_;
    btm_cb.cmn_ble_vsc_cb.filter_support =
        vendor_capabilities.filtering_support_;
    btm_cb.cmn_ble_vsc_cb.max_filter = vendor_capabilities.max_filter_;
    btm_cb.cmn_ble_vsc_cb.energy_support =
        vendor_capabilities.activity_energy_info_support_;

    btm_cb.cmn_ble_vsc_cb.version_supported =
        vendor_capabilities.version_supported_;
    btm_cb.cmn_ble_vsc_cb.total_trackable_advertisers =
        vendor_capabilities.total_num_of_advt_tracked_;
    btm_cb.cmn_ble_vsc_cb.extended_scan_support =
        vendor_capabilities.extended_scan_support_;
    btm_cb.cmn_ble_vsc_cb.debug_logging_supported =
        vendor_capabilities.debug_logging_supported_;

    btm_cb.cmn_ble_vsc_cb.le_address_generation_offloading_support =
        vendor_capabilities.le_address_generation_offloading_support_;
    btm_cb.cmn_ble_vsc_cb.a2dp_source_offload_capability_mask =
        vendor_capabilities.a2dp_source_offload_capability_mask_;
    btm_cb.cmn_ble_vsc_cb.quality_report_support =
        vendor_capabilities.bluetooth_quality_report_support_;
    btm_cb.cmn_ble_vsc_cb.dynamic_audio_buffer_support =
        vendor_capabilities.dynamic_audio_buffer_support_;

    if (vendor_capabilities.dynamic_audio_buffer_support_) {
      std::array<bluetooth::hci::DynamicAudioBufferCodecCapability,
                 BTM_CODEC_TYPE_MAX_RECORDS>
          capabilities = GetController()->GetDabCodecCapabilities();

      for (size_t i = 0; i < capabilities.size(); i++) {
        btm_cb.dynamic_audio_buffer_cb[i].default_buffer_time =
            capabilities[i].default_time_ms_;
        btm_cb.dynamic_audio_buffer_cb[i].maximum_buffer_time =
            capabilities[i].maximum_time_ms_;
        btm_cb.dynamic_audio_buffer_cb[i].minimum_buffer_time =
            capabilities[i].minimum_time_ms_;
      }
    }

    if (btm_cb.cmn_ble_vsc_cb.filter_support == 1 &&
        GetController()->GetLocalVersionInformation().manufacturer_name_ ==
            LMP_COMPID_QTI) {
      // QTI controller, TDS data filter are supported by default.
      btm_cb.cmn_ble_vsc_cb.adv_filter_extended_features_mask = 0x01;
    } else {
      btm_cb.cmn_ble_vsc_cb.adv_filter_extended_features_mask = 0x00;
    }

    LOG_VERBOSE("irk=%d, ADV ins:%d, rpa=%d, ener=%d, ext_scan=%d",
                btm_cb.cmn_ble_vsc_cb.max_irk_list_sz,
                btm_cb.cmn_ble_vsc_cb.adv_inst_max,
                btm_cb.cmn_ble_vsc_cb.rpa_offloading,
                btm_cb.cmn_ble_vsc_cb.energy_support,
                btm_cb.cmn_ble_vsc_cb.extended_scan_support);

    if (btm_cb.cmn_ble_vsc_cb.max_filter > 0) btm_ble_adv_filter_init();

    /* VS capability included and non-4.2 device */
    if (GetController()->SupportsBle() &&
        GetController()->SupportsBlePrivacy() &&
        btm_cb.cmn_ble_vsc_cb.max_irk_list_sz > 0 &&
        GetController()->GetLeResolvingListSize() == 0) {
      btm_ble_resolving_list_init(btm_cb.cmn_ble_vsc_cb.max_irk_list_sz);
    }

    if (p_vsc_cback != NULL) {
      p_vsc_cback(tHCI_STATUS::HCI_SUCCESS);
    }
  } else {
    p_ctrl_le_feature_rd_cmpl_cback = p_vsc_cback;
    BTM_VendorSpecificCommand(HCI_BLE_VENDOR_CAP, 0, NULL,
                              btm_ble_vendor_capability_vsc_cmpl_cback);
  }
}

/*******************************************************************************
 *
+0 −3
Original line number Diff line number Diff line
@@ -79,9 +79,6 @@ tBTA_SERVICE_MASK btif_get_enabled_services_mask(void) {
  inc_func_call_count(__func__);
  return 0;
}
void DynamicAudiobufferSizeCompleteCallback(tBTM_VSC_CMPL* p_vsc_cmpl_params) {
  inc_func_call_count(__func__);
}
void btif_adapter_properties_evt(bt_status_t status, uint32_t num_props,
                                 bt_property_t* p_props) {
  inc_func_call_count(__func__);
+4 −0
Original line number Diff line number Diff line
@@ -118,6 +118,7 @@ cc_test {
    static_libs: [
        "libbluetooth_crypto_toolbox",
        "libbluetooth_gd",
        "libbluetooth_hci_pdl",
        "libbt-btu-main-thread",
        "libbt-jni-thread",
        "libbt-platform-protos-lite",
@@ -129,6 +130,9 @@ cc_test {
    shared_libs: [
        "server_configurable_flags",
    ],
    generated_headers: [
        "BluetoothGeneratedDumpsysDataSchema_h",
    ],
    target: {
        android: {
            static_libs: [