patches/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch

125 lines
6.3 KiB
Diff

From 5949d86e40befe38ef57fc0fbbf18d2fe464332b Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Wed, 24 Aug 2022 15:45:18 -0400
Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL
Required to support sysbta, our system-side bt audio implementation.
Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860
---
.../audio_hal_interface/aidl/client_interface_aidl.cc | 8 ++++----
.../audio_hal_interface/aidl/client_interface_aidl.h | 7 +++++++
system/audio_hal_interface/hal_version_manager.cc | 11 +++++++++--
3 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.cc b/system/audio_hal_interface/aidl/client_interface_aidl.cc
index 15a20be5b9..412a1ab888 100644
--- a/system/audio_hal_interface/aidl/client_interface_aidl.cc
+++ b/system/audio_hal_interface/aidl/client_interface_aidl.cc
@@ -69,7 +69,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface(IBluetoothTransport
bool BluetoothAudioClientInterface::IsValid() const { return provider_ != nullptr; }
bool BluetoothAudioClientInterface::is_aidl_available() {
- return AServiceManager_isDeclared(kDefaultAudioProviderFactoryInterface.c_str());
+ return AServiceManager_isDeclared(audioProviderFactoryInterface().c_str());
}
std::vector<AudioCapabilities> BluetoothAudioClientInterface::GetAudioCapabilities() const {
@@ -83,7 +83,7 @@ std::vector<AudioCapabilities> BluetoothAudioClientInterface::GetAudioCapabiliti
return capabilities;
}
auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder(
- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str())));
+ AServiceManager_waitForService(audioProviderFactoryInterface().c_str())));
if (provider_factory == nullptr) {
log::error("can't get capability from unknown factory");
@@ -108,7 +108,7 @@ BluetoothAudioClientInterface::GetProviderInfo(
if (provider_factory == nullptr) {
provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder(
- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str())));
+ AServiceManager_waitForService(audioProviderFactoryInterface().c_str())));
}
if (provider_factory == nullptr) {
@@ -184,7 +184,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() {
// re-registered, so we need to re-fetch the service.
for (int retry_no = 0; retry_no < kFetchAudioProviderRetryNumber; ++retry_no) {
auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder(
- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str())));
+ AServiceManager_waitForService(audioProviderFactoryInterface().c_str())));
if (provider_factory == nullptr) {
log::error("can't get capability from unknown factory");
diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.h b/system/audio_hal_interface/aidl/client_interface_aidl.h
index b5bb309ab2..e73009ba69 100644
--- a/system/audio_hal_interface/aidl/client_interface_aidl.h
+++ b/system/audio_hal_interface/aidl/client_interface_aidl.h
@@ -29,6 +29,7 @@
#include "bta/le_audio/broadcaster/broadcaster_types.h"
#include "bta/le_audio/le_audio_types.h"
#include "transport_instance.h"
+#include "osi/include/properties.h"
namespace bluetooth {
namespace audio {
@@ -163,6 +164,12 @@ protected:
// "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default";
static inline const std::string kDefaultAudioProviderFactoryInterface =
std::string() + IBluetoothAudioProviderFactory::descriptor + "/default";
+ static inline const std::string kSystemAudioProviderFactoryInterface =
+ std::string() + IBluetoothAudioProviderFactory::descriptor + "/sysbta";
+ static inline const std::string audioProviderFactoryInterface() {
+ return osi_property_get_bool("persist.bluetooth.system_audio_hal.enabled", false)
+ ? kSystemAudioProviderFactoryInterface : kDefaultAudioProviderFactoryInterface;
+ }
private:
IBluetoothTransportInstance* transport_;
diff --git a/system/audio_hal_interface/hal_version_manager.cc b/system/audio_hal_interface/hal_version_manager.cc
index 19c48c58da..b19da332c0 100644
--- a/system/audio_hal_interface/hal_version_manager.cc
+++ b/system/audio_hal_interface/hal_version_manager.cc
@@ -20,6 +20,7 @@
#include <android/hidl/manager/1.2/IServiceManager.h>
#include <bluetooth/log.h>
#include <hidl/ServiceManagement.h>
+#include "osi/include/properties.h"
#include <memory>
@@ -33,6 +34,12 @@ using ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProviderFactor
static const std::string kDefaultAudioProviderFactoryInterface =
std::string() + IBluetoothAudioProviderFactory::descriptor + "/default";
+static const std::string kSystemAudioProviderFactoryInterface =
+ std::string() + IBluetoothAudioProviderFactory::descriptor + "/sysbta";
+static inline const std::string audioProviderFactoryInterface() {
+ return osi_property_get_bool("persist.bluetooth.system_audio_hal.enabled", false)
+ ? kSystemAudioProviderFactoryInterface : kDefaultAudioProviderFactoryInterface;
+}
std::string toString(BluetoothAudioHalTransport transport) {
switch (transport) {
@@ -73,7 +80,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() {
static auto aidl_version = []() -> BluetoothAudioHalVersion {
int version = 0;
auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder(
- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str())));
+ AServiceManager_waitForService(audioProviderFactoryInterface().c_str())));
if (provider_factory == nullptr) {
log::error("getInterfaceVersion: Can't get aidl version from unknown factory");
@@ -138,7 +145,7 @@ android::sp<IBluetoothAudioProvidersFactory_2_0> HalVersionManager::GetProviders
HalVersionManager::HalVersionManager() {
hal_transport_ = BluetoothAudioHalTransport::UNKNOWN;
- if (AServiceManager_checkService(kDefaultAudioProviderFactoryInterface.c_str()) != nullptr) {
+ if (AServiceManager_checkService(audioProviderFactoryInterface().c_str()) != nullptr) {
hal_version_ = GetAidlInterfaceVersion();
hal_transport_ = BluetoothAudioHalTransport::AIDL;
return;
--
2.44.0