127ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent/* 227ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * Copyright (C) 2016 The Android Open Source Project 327ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * 427ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 527ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * you may not use this file except in compliance with the License. 627ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * You may obtain a copy of the License at 727ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * 827ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 927ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * 1027ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * Unless required by applicable law or agreed to in writing, software 1127ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 1227ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * See the License for the specific language governing permissions and 1427ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent * limitations under the License. 1527ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent */ 1627ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent 1710548295023bee99108e418499aff09fe578211eMikhail Naganov#define LOG_TAG "audiohalservice" 1827ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent 19028223775be7539c5b569a454524584a7ad8e152Martijn Coenen#include <hidl/HidlTransportSupport.h> 2010548295023bee99108e418499aff09fe578211eMikhail Naganov#include <hidl/LegacySupport.h> 2110548295023bee99108e418499aff09fe578211eMikhail Naganov#include <android/hardware/audio/2.0/IDevicesFactory.h> 2210548295023bee99108e418499aff09fe578211eMikhail Naganov#include <android/hardware/audio/effect/2.0/IEffectsFactory.h> 2327ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent#include <android/hardware/soundtrigger/2.0/ISoundTriggerHw.h> 24a174588f8d2bb17cd0eb90ff3ed2700c000c8d65Eric Laurent#include <android/hardware/broadcastradio/1.0/IBroadcastRadioFactory.h> 25213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk#include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h> 2627ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent 27028223775be7539c5b569a454524584a7ad8e152Martijn Coenenusing android::hardware::configureRpcThreadpool; 28028223775be7539c5b569a454524584a7ad8e152Martijn Coenenusing android::hardware::joinRpcThreadpool; 29028223775be7539c5b569a454524584a7ad8e152Martijn Coenenusing android::hardware::registerPassthroughServiceImplementation; 30028223775be7539c5b569a454524584a7ad8e152Martijn Coenen 3110548295023bee99108e418499aff09fe578211eMikhail Naganovusing android::hardware::audio::effect::V2_0::IEffectsFactory; 3210548295023bee99108e418499aff09fe578211eMikhail Naganovusing android::hardware::audio::V2_0::IDevicesFactory; 3327ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurentusing android::hardware::soundtrigger::V2_0::ISoundTriggerHw; 3410548295023bee99108e418499aff09fe578211eMikhail Naganovusing android::hardware::registerPassthroughServiceImplementation; 35213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyknamespace broadcastradio = android::hardware::broadcastradio; 36213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk 37213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk#ifdef TARGET_USES_BCRADIO_FUTURE_FEATURES 38213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczykstatic const bool useBroadcastRadioFutureFeatures = true; 39213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk#else 40213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczykstatic const bool useBroadcastRadioFutureFeatures = false; 41213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk#endif 4227ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent 433c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganovusing android::OK; 443c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganov 4527ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurentint main(int /* argc */, char* /* argv */ []) { 46028223775be7539c5b569a454524584a7ad8e152Martijn Coenen configureRpcThreadpool(16, true /*callerWillJoin*/); 473c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganov android::status_t status; 4855f7247d63863330737ab9d97e7cbce2ed5c26d7Yifan Hong status = registerPassthroughServiceImplementation<IDevicesFactory>(); 493c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganov LOG_ALWAYS_FATAL_IF(status != OK, "Error while registering audio service: %d", status); 50549ca2bbe8bf333a3dcadcae9605bc8b0d237910Chris Phoenix status = registerPassthroughServiceImplementation<IEffectsFactory>(); 513c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganov LOG_ALWAYS_FATAL_IF(status != OK, "Error while registering audio effects service: %d", status); 523c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganov // Soundtrigger and FM radio might be not present. 533acaa668c102cf096a9e3bc540d7a74ca3ac5c36Mikhail Naganov status = registerPassthroughServiceImplementation<ISoundTriggerHw>(); 543c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganov ALOGE_IF(status != OK, "Error while registering soundtrigger service: %d", status); 55213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk if (useBroadcastRadioFutureFeatures) { 56213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk status = registerPassthroughServiceImplementation< 57213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk broadcastradio::V1_1::IBroadcastRadioFactory>(); 58213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk } else { 59213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk status = registerPassthroughServiceImplementation< 60213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk broadcastradio::V1_0::IBroadcastRadioFactory>(); 61213170b663a91706420ade17239089cfa38f4a68Tomasz Wasilczyk } 623c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganov ALOGE_IF(status != OK, "Error while registering fm radio service: %d", status); 63028223775be7539c5b569a454524584a7ad8e152Martijn Coenen joinRpcThreadpool(); 643c25646562abf65505eb32a03d1dd1cfca502644Mikhail Naganov return status; 6527ef4d872d9f6bbbc62d03b807cae694a3c6e2e8Eric Laurent} 66