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

Commit 2fa1ab4b authored by Bao Do's avatar Bao Do
Browse files

Template and schema of HFP provider info

Bug: 322280104
Test: make
Change-Id: Iac4f96db08b3b7fb2c5f0b080ba3e972e6020982
parent 4fbb997e
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -39,6 +39,9 @@ namespace audio {
static const std::string kLeAudioOffloadProviderName =
    "LE_AUDIO_OFFLOAD_HARDWARE_OFFLOAD_PROVIDER";

static const std::string kHfpOffloadProviderName =
    "HFP_OFFLOAD_HARDWARE_OFFLOAD_PROVIDER";

BluetoothAudioProviderFactory::BluetoothAudioProviderFactory() {}

ndk::ScopedAStatus BluetoothAudioProviderFactory::openProvider(
@@ -170,6 +173,7 @@ ndk::ScopedAStatus BluetoothAudioProviderFactory::getProviderInfo(
    provider_info.name = a2dp_offload_codec_factory_.name;
    for (auto codec : a2dp_offload_codec_factory_.codecs)
      provider_info.codecInfos.push_back(codec->info);
    return ndk::ScopedAStatus::ok();
  }

  if (session_type ==
@@ -184,13 +188,24 @@ ndk::ScopedAStatus BluetoothAudioProviderFactory::getProviderInfo(
      auto& provider_info = _aidl_return->emplace();
      provider_info.name = kLeAudioOffloadProviderName;
      provider_info.codecInfos = db_codec_info;
      *_aidl_return = provider_info;
      return ndk::ScopedAStatus::ok();
    }
  }

  if (session_type == SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH) {
    std::vector<CodecInfo> db_codec_info =
        BluetoothAudioCodecs::GetHfpOffloadCodecInfo();
    if (!db_codec_info.empty()) {
      auto& provider_info = _aidl_return->emplace();
      provider_info.name = kHfpOffloadProviderName;
      provider_info.codecInfos = db_codec_info;
      return ndk::ScopedAStatus::ok();
    }
  }

  // Unsupported for other sessions
  return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
}

}  // namespace audio
}  // namespace bluetooth
+1 −0
Original line number Diff line number Diff line
@@ -1944,6 +1944,7 @@ class BluetoothAudioProviderHfpHardwareAidl
        BluetoothAudioHalVersion::VERSION_AIDL_V4) {
      GTEST_SKIP();
    }
    GetProviderInfoHelper(SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH);
    OpenProviderHelper(SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH);
    // Can open or empty capability
    ASSERT_TRUE(temp_provider_capabilities_.empty() ||
+25 −1
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ cc_library_shared {
        "aidl_session/BluetoothAudioSession.cpp",
        "aidl_session/HidlToAidlMiddleware.cpp",
        "aidl_session/BluetoothLeAudioCodecsProvider.cpp",
        "aidl_session/BluetoothHfpCodecsProvider.cpp",
        "aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.cpp",
    ],
    export_include_dirs: ["aidl_session/"],
@@ -68,9 +69,13 @@ cc_library_shared {
    static_libs: [
        "btaudiohal_flags_c_lib",
    ],
    generated_sources: ["le_audio_codec_capabilities"],
    generated_sources: [
        "le_audio_codec_capabilities",
        "hfp_codec_capabilities",
    ],
    generated_headers: [
        "le_audio_codec_capabilities",
        "hfp_codec_capabilities",
        "AIDLLeAudioSetConfigSchemas_h",
    ],
    required: [
@@ -78,9 +83,12 @@ cc_library_shared {
        "aidl_audio_set_configurations_json",
        "aidl_audio_set_scenarios_bfbs",
        "aidl_audio_set_scenarios_json",
        "hfp_codec_capabilities_xml",
    ],
}

// TODO: Write test for BluetoothHfpCodecsProvider.cpp

cc_test {
    name: "BluetoothLeAudioCodecsProviderTest",
    srcs: [
@@ -114,6 +122,14 @@ xsd_config {
    root_elements: ["leAudioOffloadSetting"],
}

xsd_config {
    name: "hfp_codec_capabilities",
    srcs: ["hfp_codec_capabilities/hfp_codec_capabilities.xsd"],
    package_name: "aidl.android.hardware.bluetooth.audio.hfp.setting",
    api_dir: "hfp_codec_capabilities/schema",
    root_elements: ["hfpOffloadSetting"],
}

genrule {
    name: "AIDLLeAudioSetConfigSchemas_h",
    tools: [
@@ -176,6 +192,14 @@ prebuilt_etc {
    vendor: true,
}

prebuilt_etc {
    name: "hfp_codec_capabilities_xml",
    src: "hfp_codec_capabilities/hfp_codec_capabilities.xml",
    filename: "hfp_codec_capabilities.xml",
    sub_dir: "aidl/hfp",
    vendor: true,
}

prebuilt_etc {
    name: "aidl_audio_set_configurations_bfbs",
    src: ":AIDLLeAudioSetConfigsSchema_bfbs",
+13 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
#include <aidl/android/hardware/bluetooth/audio/SbcChannelMode.h>
#include <android-base/logging.h>

#include "BluetoothHfpCodecsProvider.h"
#include "BluetoothLeAudioAseConfigurationSettingProvider.h"
#include "BluetoothLeAudioCodecsProvider.h"

@@ -100,6 +101,7 @@ const std::vector<CodecCapabilities> kDefaultOffloadA2dpCodecCapabilities = {
std::vector<LeAudioCodecCapabilitiesSetting> kDefaultOffloadLeAudioCapabilities;
std::unordered_map<SessionType, std::vector<CodecInfo>>
    kDefaultOffloadLeAudioCodecInfoMap;
std::vector<CodecInfo> kDefaultOffloadHfpCodecInfo;

template <class T>
bool BluetoothAudioCodecs::ContainedInVector(
@@ -439,6 +441,17 @@ std::vector<CodecInfo> BluetoothAudioCodecs::GetLeAudioOffloadCodecInfo(
  return codec_info_map_iter->second;
}

std::vector<CodecInfo> BluetoothAudioCodecs::GetHfpOffloadCodecInfo() {
  if (kDefaultOffloadHfpCodecInfo.empty()) {
    auto hfp_offload_setting =
        BluetoothHfpCodecsProvider::ParseFromHfpOffloadSettingFile();
    // Load file into list
    kDefaultOffloadHfpCodecInfo =
        BluetoothHfpCodecsProvider::GetHfpAudioCodecInfo(hfp_offload_setting);
  }
  return kDefaultOffloadHfpCodecInfo;
}

std::vector<LeAudioAseConfigurationSetting>
BluetoothAudioCodecs::GetLeAudioAseConfigurationSettings() {
  return AudioSetConfigurationProviderJson::
+2 −0
Original line number Diff line number Diff line
@@ -57,6 +57,8 @@ class BluetoothAudioCodecs {
  static std::vector<LeAudioAseConfigurationSetting>
  GetLeAudioAseConfigurationSettings();

  static std::vector<CodecInfo> GetHfpOffloadCodecInfo();

 private:
  template <typename T>
  struct identity {
Loading