Compare commits

..

No commits in common. "5a38b5b33332575d8b31280491101f3821b3c1a8" and "c71693def3ed84e5929e68afd05aa2f201e54bd4" have entirely different histories.

22 changed files with 121 additions and 210 deletions

View file

@ -1,139 +0,0 @@
cc_defaults {
name: "android.hardware.audio-impl-system_default",
relative_install_path: "hw",
srcs: [
"Device.cpp",
"DevicesFactory.cpp",
"ParametersUtil.cpp",
"PrimaryDevice.cpp",
"Stream.cpp",
"StreamIn.cpp",
"StreamOut.cpp",
"service.cpp",
],
shared_libs: [
"libbase",
"libcutils",
"libfmq",
"libhardware",
"libhidlbase",
"liblog",
"libmedia_helper",
"libmediautils_vendor",
"libmemunreachable",
"libutils",
"android.hardware.audio.common-util",
],
static_libs: [
"libaudiofoundation",
],
header_libs: [
"android.hardware.audio.common.util@all-versions",
"libaudioutils_headers",
"libaudio_system_headers",
"libmedia_headers",
"libmediautils_headers",
"libhardware_headers",
]
}
cc_library_shared {
name: "android.hardware.audio@2.0-impl-system",
defaults: ["android.hardware.audio-impl-system_default"],
shared_libs: [
"android.hardware.audio@2.0",
"android.hardware.audio@2.0-util",
"android.hardware.audio.common@2.0",
"android.hardware.audio.common@2.0-util",
],
cflags: [
"-DMAJOR_VERSION=2",
"-DMINOR_VERSION=0",
"-include common/all-versions/VersionMacro.h",
],
}
cc_library_shared {
name: "android.hardware.audio@4.0-impl-system",
defaults: ["android.hardware.audio-impl-system_default"],
shared_libs: [
"android.hardware.audio@4.0",
"android.hardware.audio@4.0-util",
"android.hardware.audio.common@4.0",
"android.hardware.audio.common@4.0-util",
],
cflags: [
"-DMAJOR_VERSION=4",
"-DMINOR_VERSION=0",
"-include common/all-versions/VersionMacro.h",
],
}
cc_library_shared {
name: "android.hardware.audio@5.0-impl-system",
defaults: ["android.hardware.audio-impl-system_default"],
shared_libs: [
"android.hardware.audio@5.0",
"android.hardware.audio@5.0-util",
"android.hardware.audio.common@5.0",
"android.hardware.audio.common@5.0-util",
],
cflags: [
"-DMAJOR_VERSION=5",
"-DMINOR_VERSION=0",
"-include common/all-versions/VersionMacro.h",
],
}
cc_library_shared {
name: "android.hardware.audio@6.0-impl-system",
defaults: ["android.hardware.audio-impl-system_default"],
shared_libs: [
"android.hardware.audio@6.0",
"android.hardware.audio@6.0-util",
"android.hardware.audio.common@6.0",
"android.hardware.audio.common@6.0-util",
],
cflags: [
"-DMAJOR_VERSION=6",
"-DMINOR_VERSION=0",
"-include common/all-versions/VersionMacro.h",
],
}
cc_library_shared {
name: "android.hardware.audio@7.0-impl-system",
defaults: ["android.hardware.audio-impl-system_default"],
shared_libs: [
"android.hardware.audio@7.0",
"android.hardware.audio@7.0-util",
"android.hardware.audio.common@7.0",
"android.hardware.audio.common@7.0-enums",
"android.hardware.audio.common@7.0-util",
"libbase",
],
cflags: [
"-DMAJOR_VERSION=7",
"-DMINOR_VERSION=0",
"-include common/all-versions/VersionMacro.h",
],
}
cc_library_shared {
name: "android.hardware.audio@7.1-impl-system",
defaults: ["android.hardware.audio-impl-system_default"],
shared_libs: [
"android.hardware.audio@7.0",
"android.hardware.audio@7.1",
"android.hardware.audio@7.1-util",
"android.hardware.audio.common@7.0",
"android.hardware.audio.common@7.1-enums",
"android.hardware.audio.common@7.1-util",
"libbase",
],
cflags: [
"-DMAJOR_VERSION=7",
"-DMINOR_VERSION=1",
"-DCOMMON_TYPES_MINOR_VERSION=0",
"-DCORE_TYPES_MINOR_VERSION=0",
"-include common/all-versions/VersionMacro.h",
],
}

View file

@ -1,15 +0,0 @@
#include "DevicesFactory.h"
#include PATH(android/hardware/audio/FILE_VERSION/IDevicesFactory.h)
#include <hidl/Status.h>
using ::android::status_t;
using ::android::hardware::audio::CPP_VERSION::implementation::DevicesFactory;
using namespace ::android::hardware::audio::CPP_VERSION;
extern "C" __attribute__((visibility("default")))
status_t createIDevicesFactory(const char *instance_name) {
::android::sp<IDevicesFactory> audio_factory = new DevicesFactory();
::android::status_t hidl_status = audio_factory->registerAsService(instance_name);
return hidl_status;
}

View file

@ -1,3 +1,29 @@
cc_library_shared {
name: "android.hardware.bluetooth.audio-system-impl",
vintf_fragments: ["bluetooth_audio.xml"],
srcs: [
"BluetoothAudioProvider.cpp",
"BluetoothAudioProviderFactory.cpp",
"A2dpOffloadAudioProvider.cpp",
"A2dpSoftwareAudioProvider.cpp",
"HearingAidAudioProvider.cpp",
"LeAudioOffloadAudioProvider.cpp",
"LeAudioSoftwareAudioProvider.cpp",
"service.cpp",
],
export_include_dirs: ["."],
header_libs: ["libhardware_headers"],
shared_libs: [
"libbase",
"libbinder_ndk",
"libcutils",
"libfmq",
"liblog",
"android.hardware.bluetooth.audio-V2-ndk",
"libbluetooth_audio_session_aidl_system",
],
}
cc_binary {
name: "android.hardware.bluetooth.audio-service-system",
vintf_fragments: ["bluetooth_audio_system.xml"],
@ -11,10 +37,22 @@ cc_binary {
"HearingAidAudioProvider.cpp",
"LeAudioOffloadAudioProvider.cpp",
"LeAudioSoftwareAudioProvider.cpp",
"Device.cpp",
"DevicesFactory.cpp",
"ParametersUtil.cpp",
"PrimaryDevice.cpp",
"Stream.cpp",
"StreamIn.cpp",
"StreamOut.cpp",
"service_system.cpp",
],
header_libs: [
"libhardware_headers",
"android.hardware.audio.common.util@all-versions",
"libaudioutils_headers",
"libaudio_system_headers",
"libmedia_headers",
"libmediautils_headers",
],
shared_libs: [
"libbase",
@ -22,19 +60,33 @@ cc_binary {
"libbinder_ndk",
"libcutils",
"libfmq",
"libhidlbase",
"liblog",
"libutils",
"android.hardware.bluetooth.audio-V2-ndk",
"libbluetooth_audio_session_aidl_system",
"libfmq",
"libhardware",
"libhidlbase",
"liblog",
"libmedia_helper",
"libmediautils_vendor",
"libmemunreachable",
"libutils",
"android.hardware.audio.common-util",
"android.hardware.audio@6.0",
// "android.hardware.audio@7.1",
"android.hardware.audio@6.0-util",
"android.hardware.audio.common@6.0",
// "android.hardware.audio.common@6.0-enums",
"android.hardware.audio.common@6.0-util",
],
required: [
// Audio HAL impls
"android.hardware.audio@2.0-impl-system",
"android.hardware.audio@4.0-impl-system",
"android.hardware.audio@5.0-impl-system",
"android.hardware.audio@6.0-impl-system",
"android.hardware.audio@7.0-impl-system",
"android.hardware.audio@7.1-impl-system",
static_libs: [
"libaudiofoundation",
],
cflags: [
"-DMAJOR_VERSION=6",
"-DMINOR_VERSION=0",
"-DCOMMON_TYPES_MINOR_VERSION=0",
"-DCORE_TYPES_MINOR_VERSION=0",
"-include common/all-versions/VersionMacro.h",
],
}

View file

@ -142,7 +142,7 @@ out:
}
IDevicesFactory* HIDL_FETCH_IDevicesFactory(const char* name) {
return new DevicesFactory();
return strcmp(name, "default") == 0 ? new DevicesFactory() : nullptr;
}
} // namespace implementation

View file

@ -0,0 +1,7 @@
<manifest version="1.0" type="device">
<hal format="aidl">
<name>android.hardware.bluetooth.audio</name>
<version>2</version>
<fqname>IBluetoothAudioProviderFactory/default</fqname>
</hal>
</manifest>

View file

@ -7,11 +7,6 @@
<hal>
<name>android.hardware.audio</name>
<transport>hwbinder</transport>
<fqname>@2.0::IDevicesFactory/sysbta</fqname>
<fqname>@4.0::IDevicesFactory/sysbta</fqname>
<fqname>@5.0::IDevicesFactory/sysbta</fqname>
<fqname>@6.0::IDevicesFactory/sysbta</fqname>
<fqname>@7.0::IDevicesFactory/sysbta</fqname>
<fqname>@7.1::IDevicesFactory/sysbta</fqname>
</hal>
</manifest>

View file

@ -0,0 +1,38 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define LOG_TAG "BtAudioAIDLService"
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include <utils/Log.h>
#include "BluetoothAudioProviderFactory.h"
using ::aidl::android::hardware::bluetooth::audio::
BluetoothAudioProviderFactory;
extern "C" __attribute__((visibility("default"))) binder_status_t
createIBluetoothAudioProviderFactory() {
auto factory = ::ndk::SharedRefBase::make<BluetoothAudioProviderFactory>();
const std::string instance_name =
std::string() + BluetoothAudioProviderFactory::descriptor + "/default";
binder_status_t aidl_status = AServiceManager_addService(
factory->asBinder().get(), instance_name.c_str());
ALOGW_IF(aidl_status != STATUS_OK, "Could not register %s, status=%d",
instance_name.c_str(), aidl_status);
return aidl_status;
}

View file

@ -16,56 +16,29 @@
#define LOG_TAG "BtAudioAIDLServiceSystem"
#include <dlfcn.h>
#include <signal.h>
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include <utils/Log.h>
#include <hidl/HidlTransportSupport.h>
#include <hidl/LegacySupport.h>
#include <hwbinder/ProcessState.h>
#include <binder/ProcessState.h>
#include "BluetoothAudioProviderFactory.h"
#include PATH(android/hardware/audio/FILE_VERSION/IDevicesFactory.h)
#include <hardware/audio.h>
#include "BluetoothAudioProviderFactory.h"
#include "DevicesFactory.h"
//using namespace android::hardware;
using ::aidl::android::hardware::bluetooth::audio::
BluetoothAudioProviderFactory;
#if defined(__LP64__)
#define HAL_LIBRARY_PATH "/system/lib64/hw"
#else
#define HAL_LIBRARY_PATH "/system/lib/hw"
#endif
void registerAudioInterfaces() {
const char *interface_libs[] = {
"android.hardware.audio@2.0-impl-system.so",
"android.hardware.audio@4.0-impl-system.so",
"android.hardware.audio@5.0-impl-system.so",
"android.hardware.audio@6.0-impl-system.so",
"android.hardware.audio@7.0-impl-system.so",
"android.hardware.audio@7.1-impl-system.so",
};
for (auto& lib : interface_libs) {
void* handle = dlopen((std::string() + HAL_LIBRARY_PATH + "/" + lib).c_str(), RTLD_NOW);
if (handle == nullptr) {
ALOGW("Failed to load %s, skipping", lib);
continue;
}
::android::status_t (*entry_func)(const char*);
entry_func = reinterpret_cast<::android::status_t (*)(const char*)>(dlsym(handle, "createIDevicesFactory"));
if (entry_func == nullptr) {
ALOGW("Cannot find entry symbol in %s, skipping", lib);
continue;
}
::android::status_t status = entry_func("sysbta");
ALOGW_IF(status != STATUS_OK, "Could not register sysbta for %s, status=%d", lib, status);
}
}
using ::android::hardware::audio::CPP_VERSION::implementation::DevicesFactory;
using namespace ::android::hardware::audio::CPP_VERSION;
int main() {
signal(SIGPIPE, SIG_IGN);
@ -84,9 +57,9 @@ int main() {
ALOGW_IF(aidl_status != STATUS_OK, "Could not register %s, status=%d",
instance_name.c_str(), aidl_status);
// We must also implement audio HAL interfaces in order to serve audio.sysbta.default.so
// It must be served in the *same* process to access the same libbluetooth_audio_session
registerAudioInterfaces();
::android::sp<IDevicesFactory> audio_factory = new DevicesFactory();
::android::status_t hidl_status = audio_factory->registerAsService("sysbta");
ALOGW_IF(hidl_status != STATUS_OK, "Could not register sysbta, status=%d", hidl_status);
::android::hardware::joinRpcThreadpool();
}