Compare commits
2 commits
c71693def3
...
5a38b5b333
Author | SHA1 | Date | |
---|---|---|---|
5a38b5b333 | |||
94f2037c77 |
22 changed files with 209 additions and 120 deletions
139
audio/hal/Android.bp
Normal file
139
audio/hal/Android.bp
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
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",
|
||||||
|
],
|
||||||
|
}
|
|
@ -142,7 +142,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
IDevicesFactory* HIDL_FETCH_IDevicesFactory(const char* name) {
|
IDevicesFactory* HIDL_FETCH_IDevicesFactory(const char* name) {
|
||||||
return strcmp(name, "default") == 0 ? new DevicesFactory() : nullptr;
|
return new DevicesFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace implementation
|
} // namespace implementation
|
15
audio/hal/service.cpp
Normal file
15
audio/hal/service.cpp
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#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;
|
||||||
|
}
|
|
@ -1,29 +1,3 @@
|
||||||
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 {
|
cc_binary {
|
||||||
name: "android.hardware.bluetooth.audio-service-system",
|
name: "android.hardware.bluetooth.audio-service-system",
|
||||||
vintf_fragments: ["bluetooth_audio_system.xml"],
|
vintf_fragments: ["bluetooth_audio_system.xml"],
|
||||||
|
@ -37,22 +11,10 @@ cc_binary {
|
||||||
"HearingAidAudioProvider.cpp",
|
"HearingAidAudioProvider.cpp",
|
||||||
"LeAudioOffloadAudioProvider.cpp",
|
"LeAudioOffloadAudioProvider.cpp",
|
||||||
"LeAudioSoftwareAudioProvider.cpp",
|
"LeAudioSoftwareAudioProvider.cpp",
|
||||||
"Device.cpp",
|
|
||||||
"DevicesFactory.cpp",
|
|
||||||
"ParametersUtil.cpp",
|
|
||||||
"PrimaryDevice.cpp",
|
|
||||||
"Stream.cpp",
|
|
||||||
"StreamIn.cpp",
|
|
||||||
"StreamOut.cpp",
|
|
||||||
"service_system.cpp",
|
"service_system.cpp",
|
||||||
],
|
],
|
||||||
header_libs: [
|
header_libs: [
|
||||||
"libhardware_headers",
|
"libhardware_headers",
|
||||||
"android.hardware.audio.common.util@all-versions",
|
|
||||||
"libaudioutils_headers",
|
|
||||||
"libaudio_system_headers",
|
|
||||||
"libmedia_headers",
|
|
||||||
"libmediautils_headers",
|
|
||||||
],
|
],
|
||||||
shared_libs: [
|
shared_libs: [
|
||||||
"libbase",
|
"libbase",
|
||||||
|
@ -60,33 +22,19 @@ cc_binary {
|
||||||
"libbinder_ndk",
|
"libbinder_ndk",
|
||||||
"libcutils",
|
"libcutils",
|
||||||
"libfmq",
|
"libfmq",
|
||||||
"liblog",
|
|
||||||
"android.hardware.bluetooth.audio-V2-ndk",
|
|
||||||
"libbluetooth_audio_session_aidl_system",
|
|
||||||
"libfmq",
|
|
||||||
"libhardware",
|
|
||||||
"libhidlbase",
|
"libhidlbase",
|
||||||
"liblog",
|
"liblog",
|
||||||
"libmedia_helper",
|
|
||||||
"libmediautils_vendor",
|
|
||||||
"libmemunreachable",
|
|
||||||
"libutils",
|
"libutils",
|
||||||
"android.hardware.audio.common-util",
|
"android.hardware.bluetooth.audio-V2-ndk",
|
||||||
"android.hardware.audio@6.0",
|
"libbluetooth_audio_session_aidl_system",
|
||||||
// "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",
|
|
||||||
],
|
],
|
||||||
static_libs: [
|
required: [
|
||||||
"libaudiofoundation",
|
// Audio HAL impls
|
||||||
],
|
"android.hardware.audio@2.0-impl-system",
|
||||||
cflags: [
|
"android.hardware.audio@4.0-impl-system",
|
||||||
"-DMAJOR_VERSION=6",
|
"android.hardware.audio@5.0-impl-system",
|
||||||
"-DMINOR_VERSION=0",
|
"android.hardware.audio@6.0-impl-system",
|
||||||
"-DCOMMON_TYPES_MINOR_VERSION=0",
|
"android.hardware.audio@7.0-impl-system",
|
||||||
"-DCORE_TYPES_MINOR_VERSION=0",
|
"android.hardware.audio@7.1-impl-system",
|
||||||
"-include common/all-versions/VersionMacro.h",
|
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
<manifest version="1.0" type="device">
|
|
||||||
<hal format="aidl">
|
|
||||||
<name>android.hardware.bluetooth.audio</name>
|
|
||||||
<version>2</version>
|
|
||||||
<fqname>IBluetoothAudioProviderFactory/default</fqname>
|
|
||||||
</hal>
|
|
||||||
</manifest>
|
|
|
@ -7,6 +7,11 @@
|
||||||
<hal>
|
<hal>
|
||||||
<name>android.hardware.audio</name>
|
<name>android.hardware.audio</name>
|
||||||
<transport>hwbinder</transport>
|
<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>@6.0::IDevicesFactory/sysbta</fqname>
|
||||||
|
<fqname>@7.0::IDevicesFactory/sysbta</fqname>
|
||||||
|
<fqname>@7.1::IDevicesFactory/sysbta</fqname>
|
||||||
</hal>
|
</hal>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* 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;
|
|
||||||
}
|
|
|
@ -16,29 +16,56 @@
|
||||||
|
|
||||||
#define LOG_TAG "BtAudioAIDLServiceSystem"
|
#define LOG_TAG "BtAudioAIDLServiceSystem"
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
#include <android/binder_manager.h>
|
#include <android/binder_manager.h>
|
||||||
#include <android/binder_process.h>
|
#include <android/binder_process.h>
|
||||||
#include <utils/Log.h>
|
#include <utils/Log.h>
|
||||||
#include <hidl/HidlTransportSupport.h>
|
#include <hidl/HidlTransportSupport.h>
|
||||||
#include <hidl/LegacySupport.h>
|
|
||||||
#include <hwbinder/ProcessState.h>
|
#include <hwbinder/ProcessState.h>
|
||||||
#include <binder/ProcessState.h>
|
#include <binder/ProcessState.h>
|
||||||
|
|
||||||
#include PATH(android/hardware/audio/FILE_VERSION/IDevicesFactory.h)
|
|
||||||
|
|
||||||
#include <hardware/audio.h>
|
|
||||||
|
|
||||||
#include "BluetoothAudioProviderFactory.h"
|
#include "BluetoothAudioProviderFactory.h"
|
||||||
#include "DevicesFactory.h"
|
|
||||||
|
|
||||||
//using namespace android::hardware;
|
|
||||||
using ::aidl::android::hardware::bluetooth::audio::
|
using ::aidl::android::hardware::bluetooth::audio::
|
||||||
BluetoothAudioProviderFactory;
|
BluetoothAudioProviderFactory;
|
||||||
|
|
||||||
using ::android::hardware::audio::CPP_VERSION::implementation::DevicesFactory;
|
#if defined(__LP64__)
|
||||||
using namespace ::android::hardware::audio::CPP_VERSION;
|
#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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
signal(SIGPIPE, SIG_IGN);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
|
@ -57,9 +84,9 @@ int main() {
|
||||||
ALOGW_IF(aidl_status != STATUS_OK, "Could not register %s, status=%d",
|
ALOGW_IF(aidl_status != STATUS_OK, "Could not register %s, status=%d",
|
||||||
instance_name.c_str(), aidl_status);
|
instance_name.c_str(), aidl_status);
|
||||||
|
|
||||||
::android::sp<IDevicesFactory> audio_factory = new DevicesFactory();
|
// We must also implement audio HAL interfaces in order to serve audio.sysbta.default.so
|
||||||
::android::status_t hidl_status = audio_factory->registerAsService("sysbta");
|
// It must be served in the *same* process to access the same libbluetooth_audio_session
|
||||||
ALOGW_IF(hidl_status != STATUS_OK, "Could not register sysbta, status=%d", hidl_status);
|
registerAudioInterfaces();
|
||||||
|
|
||||||
::android::hardware::joinRpcThreadpool();
|
::android::hardware::joinRpcThreadpool();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue