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

Commit b85e7f37 authored by Bao Do's avatar Bao Do Committed by Automerger Merge Worker
Browse files

Merge "Add wrapper for LE Multi-codec's HAL functions" into main am: 7f2e59e5

parents c25e7af1 7f2e59e5
Loading
Loading
Loading
Loading
+126 −0
Original line number Diff line number Diff line
@@ -560,6 +560,132 @@ size_t BluetoothAudioSourceClientInterface::WriteAudioData(const uint8_t* p_buf,
  return total_written;
}

std::optional<IBluetoothAudioProviderFactory::ProviderInfo>
BluetoothAudioClientInterface::GetProviderInfo(SessionType session_type) {
  if (provider_factory_ == nullptr) {
    LOG(WARNING) << __func__ << ": No provider factory";
    return std::nullopt;
  }
  std::optional<IBluetoothAudioProviderFactory::ProviderInfo> provider_info;
  auto aidl_retval =
      provider_factory_->getProviderInfo(session_type, &provider_info);
  if (!aidl_retval.isOk()) {
    LOG(FATAL) << __func__ << ": BluetoothAudioHal::getProviderInfo failure: "
               << aidl_retval.getDescription();
  }
  return provider_info;
}

void BluetoothAudioClientInterface::SetCodecPriority(CodecId codec_id,
                                                     int32_t priority) {
  CHECK(provider_ != nullptr);
  auto aidl_retval = provider_->setCodecPriority(codec_id, priority);
  if (!aidl_retval.isOk()) {
    LOG(FATAL) << __func__ << ": BluetoothAudioHal::setCodecPriority failure: "
               << aidl_retval.getDescription();
  }
}

std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
BluetoothAudioClientInterface::GetLeAudioAseConfiguration(
    std::optional<std::vector<
        std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
        remoteSinkAudioCapabilities,
    std::optional<std::vector<
        std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
        remoteSourceAudioCapabilities,
    std::vector<IBluetoothAudioProvider::LeAudioConfigurationRequirement>&
        requirements) {
  CHECK(provider_ != nullptr);

  std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
      configurations;
  auto aidl_retval = provider_->getLeAudioAseConfiguration(
      remoteSinkAudioCapabilities, remoteSourceAudioCapabilities, requirements,
      &configurations);

  if (!aidl_retval.isOk()) {
    LOG(FATAL) << __func__
               << ": BluetoothAudioHal::getLeAudioAseConfiguration failure: "
               << aidl_retval.getDescription();
  }

  LOG(INFO) << __func__
            << ": BluetoothAudioHal::getLeAudioAseConfiguration returned "
            << configurations.size() << " configurations.";
  return configurations;
}

IBluetoothAudioProvider::LeAudioAseQosConfigurationPair
BluetoothAudioClientInterface::getLeAudioAseQosConfiguration(
    IBluetoothAudioProvider::LeAudioAseQosConfigurationRequirement&
        qosRequirement) {
  CHECK(provider_ != nullptr);

  IBluetoothAudioProvider::LeAudioAseQosConfigurationPair qos_configuration;
  auto aidl_retval = provider_->getLeAudioAseQosConfiguration(
      qosRequirement, &qos_configuration);

  if (!aidl_retval.isOk()) {
    LOG(FATAL) << __func__
               << ": BluetoothAudioHal::getLeAudioAseQosConfiguration failure: "
               << aidl_retval.getDescription();
  }
  return qos_configuration;
}

void BluetoothAudioClientInterface::onSinkAseMetadataChanged(
    IBluetoothAudioProvider::AseState state, int32_t cigId, int32_t cisId,
    std::optional<std::vector<std::optional<MetadataLtv>>>& metadata) {
  CHECK(provider_ != nullptr);

  auto aidl_retval =
      provider_->onSinkAseMetadataChanged(state, cigId, cisId, metadata);

  if (!aidl_retval.isOk()) {
    LOG(FATAL) << __func__
               << ": BluetoothAudioHal::onSinkAseMetadataChanged failure: "
               << aidl_retval.getDescription();
  }
}

void BluetoothAudioClientInterface::onSourceAseMetadataChanged(
    IBluetoothAudioProvider::AseState state, int32_t cigId, int32_t cisId,
    std::optional<std::vector<std::optional<MetadataLtv>>>& metadata) {
  CHECK(provider_ != nullptr);

  auto aidl_retval =
      provider_->onSourceAseMetadataChanged(state, cigId, cisId, metadata);

  if (!aidl_retval.isOk()) {
    LOG(FATAL) << __func__
               << ": BluetoothAudioHal::onSinkAseMetadataChanged failure: "
               << aidl_retval.getDescription();
  }
}

IBluetoothAudioProvider::LeAudioBroadcastConfigurationSetting
BluetoothAudioClientInterface::getLeAudioBroadcastConfiguration(
    const std::optional<std::vector<
        std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
        remoteSinkAudioCapabilities,
    const IBluetoothAudioProvider::LeAudioBroadcastConfigurationRequirement&
        requirement) {
  CHECK(provider_ != nullptr);

  IBluetoothAudioProvider::LeAudioBroadcastConfigurationSetting setting;
  auto aidl_retval = provider_->getLeAudioBroadcastConfiguration(
      remoteSinkAudioCapabilities, requirement, &setting);

  if (!aidl_retval.isOk()) {
    LOG(FATAL) << __func__
               << ": BluetoothAudioHal::onSinkAseMetadataChanged failure: "
               << aidl_retval.getDescription();
  }

  return setting;
}

}  // namespace aidl
}  // namespace audio
}  // namespace bluetooth
+43 −0
Original line number Diff line number Diff line
@@ -39,11 +39,17 @@ namespace aidl {
using ::aidl::android::hardware::bluetooth::audio::AudioCapabilities;
using ::aidl::android::hardware::bluetooth::audio::AudioConfiguration;
using ::aidl::android::hardware::bluetooth::audio::BluetoothAudioStatus;
using ::aidl::android::hardware::bluetooth::audio::CodecId;
using ::aidl::android::hardware::bluetooth::audio::CodecInfo;
using ::aidl::android::hardware::bluetooth::audio::CodecSpecificCapabilitiesLtv;
using ::aidl::android::hardware::bluetooth::audio::
    CodecSpecificConfigurationLtv;
using ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioPort;
using ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider;
using ::aidl::android::hardware::bluetooth::audio::
    IBluetoothAudioProviderFactory;
using ::aidl::android::hardware::bluetooth::audio::LatencyMode;
using ::aidl::android::hardware::bluetooth::audio::MetadataLtv;
using ::aidl::android::hardware::bluetooth::audio::PcmConfiguration;

using ::aidl::android::hardware::common::fmq::MQDescriptor;
@@ -89,6 +95,43 @@ class BluetoothAudioClientInterface {

  void FlushAudioData();

  std::optional<IBluetoothAudioProviderFactory::ProviderInfo> GetProviderInfo(
      SessionType session_type);

  void SetCodecPriority(CodecId codec_id, int32_t priority);

  std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
  GetLeAudioAseConfiguration(
      std::optional<std::vector<
          std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
          remoteSinkAudioCapabilities,
      std::optional<std::vector<
          std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
          remoteSourceAudioCapabilities,
      std::vector<IBluetoothAudioProvider::LeAudioConfigurationRequirement>&
          requirements);

  IBluetoothAudioProvider::LeAudioAseQosConfigurationPair
  getLeAudioAseQosConfiguration(
      IBluetoothAudioProvider::LeAudioAseQosConfigurationRequirement&
          qosRequirement);

  void onSinkAseMetadataChanged(
      IBluetoothAudioProvider::AseState state, int32_t cigId, int32_t cisId,
      std::optional<std::vector<std::optional<MetadataLtv>>>& metadata);

  void onSourceAseMetadataChanged(
      IBluetoothAudioProvider::AseState state, int32_t cigId, int32_t cisId,
      std::optional<std::vector<std::optional<MetadataLtv>>>& metadata);

  IBluetoothAudioProvider::LeAudioBroadcastConfigurationSetting
  getLeAudioBroadcastConfiguration(
      const std::optional<std::vector<
          std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
          remoteSinkAudioCapabilities,
      const IBluetoothAudioProvider::LeAudioBroadcastConfigurationRequirement&
          requirement);

  static constexpr PcmConfiguration kInvalidPcmConfiguration = {};

  static bool is_aidl_available();