diff options
Diffstat (limited to 'audio/common/all-versions/default/service/service.cpp')
-rw-r--r-- | audio/common/all-versions/default/service/service.cpp | 102 |
1 files changed, 60 insertions, 42 deletions
diff --git a/audio/common/all-versions/default/service/service.cpp b/audio/common/all-versions/default/service/service.cpp index d53443356a..2801769863 100644 --- a/audio/common/all-versions/default/service/service.cpp +++ b/audio/common/all-versions/default/service/service.cpp @@ -16,20 +16,9 @@ #define LOG_TAG "audiohalservice" -#include <android/hardware/audio/2.0/IDevicesFactory.h> -#include <android/hardware/audio/4.0/IDevicesFactory.h> -#include <android/hardware/audio/5.0/IDevicesFactory.h> -#include <android/hardware/audio/6.0/IDevicesFactory.h> -#include <android/hardware/audio/effect/2.0/IEffectsFactory.h> -#include <android/hardware/audio/effect/4.0/IEffectsFactory.h> -#include <android/hardware/audio/effect/5.0/IEffectsFactory.h> -#include <android/hardware/audio/effect/6.0/IEffectsFactory.h> -#include <android/hardware/bluetooth/a2dp/1.0/IBluetoothAudioOffload.h> -#include <android/hardware/bluetooth/audio/2.0/IBluetoothAudioProvidersFactory.h> -#include <android/hardware/soundtrigger/2.0/ISoundTriggerHw.h> -#include <android/hardware/soundtrigger/2.1/ISoundTriggerHw.h> -#include <android/hardware/soundtrigger/2.2/ISoundTriggerHw.h> -#include <android/hardware/soundtrigger/2.3/ISoundTriggerHw.h> +#include <string> +#include <vector> + #include <binder/ProcessState.h> #include <cutils/properties.h> #include <hidl/HidlTransportSupport.h> @@ -39,6 +28,8 @@ using namespace android::hardware; using android::OK; +using InterfacesList = std::vector<std::string>; + #ifdef ARCH_ARM_32 //default h/w binder memsize is 1 MB #define DEFAULT_HW_BINDER_MEM_SIZE_KB 1024 @@ -55,9 +46,14 @@ size_t getHWBinderMmapSize(){ * If any registers successfully, do not register any other and return true. * If all fail, return false. */ -template <class... Factories> -bool registerPassthroughServiceImplementations() { - return ((registerPassthroughServiceImplementation<Factories>() != OK) && ...); +template <class Iter> +static bool registerPassthroughServiceImplementations(Iter first, Iter last) { + for (; first != last; ++first) { + if (registerPassthroughServiceImplementation(*first) == OK) { + return true; + } + } + return false; } int main(int /* argc */, char* /* argv */ []) { @@ -77,36 +73,58 @@ int main(int /* argc */, char* /* argv */ []) { } configureRpcThreadpool(16, true /*callerWillJoin*/); - // Keep versions on a separate line for easier parsing + // Automatic formatting tries to compact the lines, making them less readable // clang-format off - LOG_ALWAYS_FATAL_IF((registerPassthroughServiceImplementations< - audio::V6_0::IDevicesFactory, - audio::V5_0::IDevicesFactory, - audio::V4_0::IDevicesFactory, - audio::V2_0::IDevicesFactory>()), - "Could not register audio core API"); + const std::vector<InterfacesList> mandatoryInterfaces = { + { + "Audio Core API", + "android.hardware.audio@6.0::IDevicesFactory", + "android.hardware.audio@5.0::IDevicesFactory", + "android.hardware.audio@4.0::IDevicesFactory", + "android.hardware.audio@2.0::IDevicesFactory" + }, + { + "Audio Effect API", + "android.hardware.audio.effect@6.0::IEffectsFactory", + "android.hardware.audio.effect@5.0::IEffectsFactory", + "android.hardware.audio.effect@4.0::IEffectsFactory", + "android.hardware.audio.effect@2.0::IEffectsFactory", + } + }; - LOG_ALWAYS_FATAL_IF((registerPassthroughServiceImplementations< - audio::effect::V6_0::IEffectsFactory, - audio::effect::V5_0::IEffectsFactory, - audio::effect::V4_0::IEffectsFactory, - audio::effect::V2_0::IEffectsFactory>()), - "Could not register audio effect API"); + const std::vector<InterfacesList> optionalInterfaces = { + { + "Soundtrigger API", + "android.hardware.soundtrigger@2.3::ISoundTriggerHw", + "android.hardware.soundtrigger@2.2::ISoundTriggerHw", + "android.hardware.soundtrigger@2.1::ISoundTriggerHw", + "android.hardware.soundtrigger@2.0::ISoundTriggerHw", + }, + { + "Bluetooth Audio API", + "android.hardware.bluetooth.audio@2.0::IBluetoothAudioProvidersFactory" + }, + // remove the old HIDL when Bluetooth Audio Hal V2 has offloading supported + { + "Bluetooth Audio Offload API", + "android.hardware.bluetooth.a2dp@1.0::IBluetoothAudioOffload" + } + }; // clang-format on - ALOGW_IF((registerPassthroughServiceImplementations< - soundtrigger::V2_3::ISoundTriggerHw, soundtrigger::V2_2::ISoundTriggerHw, - soundtrigger::V2_1::ISoundTriggerHw, soundtrigger::V2_0::ISoundTriggerHw>()), - "Could not register soundtrigger API"); - - ALOGW_IF(registerPassthroughServiceImplementations< - bluetooth::audio::V2_0::IBluetoothAudioProvidersFactory>(), - "Could not register Bluetooth audio API"); + for (const auto& listIter : mandatoryInterfaces) { + auto iter = listIter.begin(); + const std::string& interfaceFamilyName = *iter++; + LOG_ALWAYS_FATAL_IF(!registerPassthroughServiceImplementations(iter, listIter.end()), + "Could not register %s", interfaceFamilyName.c_str()); + } - // remove the old HIDL when Bluetooth Audio Hal V2 has offloading supported - ALOGW_IF(registerPassthroughServiceImplementations< - bluetooth::a2dp::V1_0::IBluetoothAudioOffload>(), - "Could not register Bluetooth audio offload API"); + for (const auto& listIter : optionalInterfaces) { + auto iter = listIter.begin(); + const std::string& interfaceFamilyName = *iter++; + ALOGW_IF(!registerPassthroughServiceImplementations(iter, listIter.end()), + "Could not register %s", interfaceFamilyName.c_str()); + } joinRpcThreadpool(); } |