12110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie/* 22110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * Copyright (C) 2015 The Android Open Source Project 32110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * 42110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * Licensed under the Apache License, Version 2.0 (the "License"); 52110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * you may not use this file except in compliance with the License. 62110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * You may obtain a copy of the License at 72110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * 82110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * http://www.apache.org/licenses/LICENSE-2.0 92110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * 102110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * Unless required by applicable law or agreed to in writing, software 112110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * distributed under the License is distributed on an "AS IS" BASIS, 122110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * See the License for the specific language governing permissions and 142110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * limitations under the License. 152110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie */ 162110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 172110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#pragma once 182110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 192110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 202110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#include "AudioPolicyManagerInterface.h" 212110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#include <AudioGain.h> 222110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#include <policy.h> 232110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 242110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffienamespace android 252110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie{ 262110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 272110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffieclass AudioPolicyManagerObserver; 282110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 292110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffienamespace audio_policy 302110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie{ 312110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 322110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffieclass Engine 332110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie{ 342110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffiepublic: 352110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie Engine(); 362110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual ~Engine(); 372110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 382110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie template <class RequestedInterface> 392110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie RequestedInterface *queryInterface(); 402110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 412110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffieprivate: 422110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie /// Interface members 432110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie class ManagerInterfaceImpl : public AudioPolicyManagerInterface 442110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 452110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie public: 46e964d4e421e2d1ca937227a580c0c837091a11e3Chih-Hung Hsieh explicit ManagerInterfaceImpl(Engine *policyEngine) 472110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie : mPolicyEngine(policyEngine) {} 482110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 492110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual void setObserver(AudioPolicyManagerObserver *observer) 502110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 512110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie mPolicyEngine->setObserver(observer); 522110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 532110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t initCheck() 542110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 552110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->initCheck(); 562110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 572110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual audio_devices_t getDeviceForInputSource(audio_source_t inputSource) const 582110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 592110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getDeviceForInputSource(inputSource); 602110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 612110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual audio_devices_t getDeviceForStrategy(routing_strategy strategy) const 622110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 632110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getDeviceForStrategy(strategy); 642110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 652110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual routing_strategy getStrategyForStream(audio_stream_type_t stream) 662110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 672110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getStrategyForStream(stream); 682110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 692110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual routing_strategy getStrategyForUsage(audio_usage_t usage) 702110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 712110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getStrategyForUsage(usage); 722110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 732110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t setPhoneState(audio_mode_t mode) 742110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 752110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->setPhoneState(mode); 762110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 772110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual audio_mode_t getPhoneState() const 782110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 792110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getPhoneState(); 802110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 812110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t setForceUse(audio_policy_force_use_t usage, 822110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_policy_forced_cfg_t config) 832110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 842110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->setForceUse(usage, config); 852110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 862110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) const 872110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 882110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getForceUse(usage); 892110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 902110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t setDeviceConnectionState(const sp<DeviceDescriptor> /*devDesc*/, 912110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_policy_dev_state_t /*state*/) 922110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 932110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return NO_ERROR; 942110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 952110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie private: 962110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie Engine *mPolicyEngine; 972110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } mManagerInterface; 982110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 992110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffieprivate: 1002110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie /* Copy facilities are put private to disable copy. */ 1012110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie Engine(const Engine &object); 1022110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie Engine &operator=(const Engine &object); 1032110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1042110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie void setObserver(AudioPolicyManagerObserver *observer); 1052110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1062110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t initCheck(); 1072110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1082110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie inline bool isInCall() const 1092110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 1102110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return is_state_in_call(mPhoneState); 1112110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1122110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1132110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t setPhoneState(audio_mode_t mode); 1142110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_mode_t getPhoneState() const 1152110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 1162110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPhoneState; 1172110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1182110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config); 1192110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) const 1202110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 1212110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mForceUse[usage]; 1222110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1232110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t setDefaultDevice(audio_devices_t device); 1242110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1252110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie routing_strategy getStrategyForStream(audio_stream_type_t stream); 1262110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie routing_strategy getStrategyForUsage(audio_usage_t usage); 1272110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_devices_t getDeviceForStrategy(routing_strategy strategy) const; 12828d09f06422841b4274d7fed6ad3441dc97382b2Eric Laurent audio_devices_t getDeviceForStrategyInt(routing_strategy strategy, 1290f928fab9963f15c524f4416b3d52d2df4a93eecEric Laurent DeviceVector availableOutputDevices, 1300f928fab9963f15c524f4416b3d52d2df4a93eecEric Laurent DeviceVector availableInputDevices, 13128d09f06422841b4274d7fed6ad3441dc97382b2Eric Laurent const SwAudioOutputCollection &outputs) const; 1322110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_devices_t getDeviceForInputSource(audio_source_t inputSource) const; 1332110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_mode_t mPhoneState; /**< current phone state. */ 1342110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1352110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie /** current forced use configuration. */ 1362110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_policy_forced_cfg_t mForceUse[AUDIO_POLICY_FORCE_USE_CNT]; 1372110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1382110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie AudioPolicyManagerObserver *mApmObserver; 1392110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie}; 1402110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie} // namespace audio_policy 1412110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie} // namespace android 1422110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 143