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