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

Commit 79dc7d43 authored by Bao Do's avatar Bao Do Committed by Gerrit Code Review
Browse files

Merge "Template and schema of HFP provider info" into main

parents 51c2631a 2fa1ab4b
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