diff --git a/audio/common/all-versions/default/service/Android.bp b/audio/common/all-versions/default/service/Android.bp index 45657305d5..3e8b715706 100644 --- a/audio/common/all-versions/default/service/Android.bp +++ b/audio/common/all-versions/default/service/Android.bp @@ -24,23 +24,6 @@ cc_binary { "liblog", "libutils", "libhardware", - "android.hardware.audio@2.0", - "android.hardware.audio@4.0", - "android.hardware.audio@5.0", - "android.hardware.audio@6.0", - "android.hardware.audio.common@2.0", - "android.hardware.audio.common@4.0", - "android.hardware.audio.common@5.0", - "android.hardware.audio.common@6.0", - "android.hardware.audio.effect@2.0", - "android.hardware.audio.effect@4.0", - "android.hardware.audio.effect@5.0", - "android.hardware.audio.effect@6.0", - "android.hardware.bluetooth.a2dp@1.0", - "android.hardware.bluetooth.audio@2.0", - "android.hardware.soundtrigger@2.0", - "android.hardware.soundtrigger@2.1", - "android.hardware.soundtrigger@2.2", ], } diff --git a/audio/common/all-versions/default/service/service.cpp b/audio/common/all-versions/default/service/service.cpp index 2730f3b1bb..7331b0ac4c 100644 --- a/audio/common/all-versions/default/service/service.cpp +++ b/audio/common/all-versions/default/service/service.cpp @@ -16,19 +16,9 @@ #define LOG_TAG "audiohalservice" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include + #include #include #include @@ -38,13 +28,20 @@ using namespace android::hardware; using android::OK; +using InterfacesList = std::vector; + /** Try to register the provided factories in the provided order. * If any registers successfully, do not register any other and return true. * If all fail, return false. */ -template -bool registerPassthroughServiceImplementations() { - return ((registerPassthroughServiceImplementation() != OK) && ...); +template +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 */ []) { @@ -61,36 +58,57 @@ 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 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 optionalInterfaces = { + { + "Soundtrigger API", + "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()), - "Could not register soundtrigger 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()); + } - ALOGW_IF(registerPassthroughServiceImplementations< - bluetooth::audio::V2_0::IBluetoothAudioProvidersFactory>(), - "Could not register Bluetooth audio API"); - - // 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(); }