AudioPolicyService.h revision fce7a473248381cc83a01855f92581077d3c9ee2
165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian/*
265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Copyright (C) 2009 The Android Open Source Project
365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian *
465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * you may not use this file except in compliance with the License.
665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * You may obtain a copy of the License at
765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian *
865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian *
1065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Unless required by applicable law or agreed to in writing, software
1165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
1265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * See the License for the specific language governing permissions and
1465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * limitations under the License.
1565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */
1665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
1765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#ifndef ANDROID_AUDIOPOLICYSERVICE_H
1865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#define ANDROID_AUDIOPOLICYSERVICE_H
1965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
2065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/IAudioPolicyService.h>
2165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/ToneGenerator.h>
2265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <utils/Vector.h>
23d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten#include <binder/BinderService.h>
2465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
25fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin#include <hardware/audio.h>
26fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin#include <hardware/audio_policy.h>
27fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin#include <hardware/audio_policy_hal.h>
28fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin
2965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopiannamespace android {
3065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
3165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianclass String8;
3265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
3365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian// ----------------------------------------------------------------------------
3465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
35d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kastenclass AudioPolicyService :
36d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten    public BinderService<AudioPolicyService>,
37d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten    public BnAudioPolicyService,
38fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin//    public AudioPolicyClientInterface,
39de070137f11d346fba77605bd76a44c040a618fcEric Laurent    public IBinder::DeathRecipient
4065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian{
41d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten    friend class BinderService<AudioPolicyService>;
4265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
4365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianpublic:
44d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten    // for BinderService
45d2dcb08808aed82218b258726fa66f8e095a3f9cGlenn Kasten    static const char *getServiceName() { return "media.audio_policy"; }
4665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
4765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t    dump(int fd, const Vector<String16>& args);
4865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
4965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    //
5065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // BnAudioPolicyService (see AudioPolicyInterface for method descriptions)
5165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    //
5265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
53fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual status_t setDeviceConnectionState(audio_devices_t device,
54fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                              audio_policy_dev_state_t state,
5565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                              const char *device_address);
56fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual audio_policy_dev_state_t getDeviceConnectionState(
57fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                                                audio_devices_t device,
58de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                                                const char *device_address);
5965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setPhoneState(int state);
6065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setRingerMode(uint32_t mode, uint32_t mask);
61fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config);
62fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage);
63fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual audio_io_handle_t getOutput(audio_stream_type_t stream,
6465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                        uint32_t samplingRate = 0,
65fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                        uint32_t format = AUDIO_FORMAT_DEFAULT,
6665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                        uint32_t channels = 0,
67fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                        audio_policy_output_flags_t flags =
68fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                            AUDIO_POLICY_OUTPUT_FLAG_INDIRECT);
69de070137f11d346fba77605bd76a44c040a618fcEric Laurent    virtual status_t startOutput(audio_io_handle_t output,
70fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                 audio_stream_type_t stream,
71de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                 int session = 0);
72de070137f11d346fba77605bd76a44c040a618fcEric Laurent    virtual status_t stopOutput(audio_io_handle_t output,
73fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                audio_stream_type_t stream,
74de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                int session = 0);
7565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual void releaseOutput(audio_io_handle_t output);
7665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual audio_io_handle_t getInput(int inputSource,
7765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t samplingRate = 0,
78fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                    uint32_t format = AUDIO_FORMAT_DEFAULT,
7965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t channels = 0,
80fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                    audio_in_acoustics_t acoustics =
81fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                                            (audio_in_acoustics_t)0);
8265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t startInput(audio_io_handle_t input);
8365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t stopInput(audio_io_handle_t input);
8465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual void releaseInput(audio_io_handle_t input);
85fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual status_t initStreamVolume(audio_stream_type_t stream,
8665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                      int indexMin,
8765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                      int indexMax);
88fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, int index);
89fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index);
9065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
91fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual uint32_t getStrategyForStream(audio_stream_type_t stream);
92fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual uint32_t getDevicesForStream(audio_stream_type_t stream);
93de070137f11d346fba77605bd76a44c040a618fcEric Laurent
94de070137f11d346fba77605bd76a44c040a618fcEric Laurent    virtual audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc);
95de070137f11d346fba77605bd76a44c040a618fcEric Laurent    virtual status_t registerEffect(effect_descriptor_t *desc,
96de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                    audio_io_handle_t output,
97de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                    uint32_t strategy,
98de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                    int session,
99de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                    int id);
100de070137f11d346fba77605bd76a44c040a618fcEric Laurent    virtual status_t unregisterEffect(int id);
101eda6c364c253ba97ee45a3adeb8c2b45db1f81dbEric Laurent    virtual bool isStreamActive(int stream, uint32_t inPastMs = 0) const;
102de070137f11d346fba77605bd76a44c040a618fcEric Laurent
10365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual     status_t    onTransact(
10465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                uint32_t code,
10565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                const Parcel& data,
10665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                Parcel* reply,
10765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                uint32_t flags);
10865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
10965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // IBinder::DeathRecipient
11065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual     void        binderDied(const wp<IBinder>& who);
11165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
11265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    //
113fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    // Helpers for the struct audio_policy_service_ops implementation.
114fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    // This is used by the audio policy manager for certain operations that
115fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    // are implemented by the policy service.
11665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    //
117fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual void setParameters(audio_io_handle_t ioHandle,
118fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                               const char *keyValuePairs,
119fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                               int delayMs);
120fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin
121fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual status_t setStreamVolume(audio_stream_type_t stream,
122de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                     float volume,
123de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                     audio_io_handle_t output,
124de070137f11d346fba77605bd76a44c040a618fcEric Laurent                                     int delayMs = 0);
125fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual status_t startTone(audio_policy_tone_t tone, audio_stream_type_t stream);
12665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t stopTone();
12765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setVoiceVolume(float volume, int delayMs = 0);
12865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
12965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianprivate:
13065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                        AudioPolicyService();
13165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual             ~AudioPolicyService();
13265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
13365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            status_t dumpInternals(int fd);
13465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
13565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // Thread used for tone playback and to send audio config commands to audio flinger
13665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // For tone playback, using a separate thread is necessary to avoid deadlock with mLock because startTone()
13765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // and stopTone() are normally called with mLock locked and requesting a tone start or stop will cause
13865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // calls to AudioPolicyService and an attempt to lock mLock.
13965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // For audio config commands, it is necessary because audio flinger requires that the calling process (user)
14065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // has permission to modify audio settings.
14165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    class AudioCommandThread : public Thread {
14265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class AudioCommand;
14365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    public:
14465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
14565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        // commands for tone AudioCommand
14665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        enum {
14765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            START_TONE,
14865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            STOP_TONE,
14965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            SET_VOLUME,
15065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            SET_PARAMETERS,
15165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            SET_VOICE_VOLUME
15265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
15365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
15465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        AudioCommandThread (String8 name);
15565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        virtual             ~AudioCommandThread();
15665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
15765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    status_t    dump(int fd);
15865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
15965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        // Thread virtuals
16065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        virtual     void        onFirstRef();
16165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        virtual     bool        threadLoop();
16265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
16365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    void        exit();
16465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    void        startToneCommand(int type = 0, int stream = 0);
16565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    void        stopToneCommand();
16665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    status_t    volumeCommand(int stream, float volume, int output, int delayMs = 0);
167fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin                    status_t    parametersCommand(int ioHandle, const char *keyValuePairs, int delayMs = 0);
16865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    status_t    voiceVolumeCommand(float volume, int delayMs = 0);
16965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    void        insertCommand_l(AudioCommand *command, int delayMs = 0);
17065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
17165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    private:
17265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        // descriptor for requested tone playback event
17365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class AudioCommand {
17465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
17565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
17665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            AudioCommand()
17765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            : mCommand(-1) {}
17865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
17965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            void dump(char* buffer, size_t size);
18065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
18165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mCommand;   // START_TONE, STOP_TONE ...
18265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            nsecs_t mTime;  // time stamp
18365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            Condition mCond; // condition for status return
18465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            status_t mStatus; // command status
18565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            bool mWaitStatus; // true if caller is waiting for status
18665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            void *mParam;     // command parameter (ToneData, VolumeData, ParametersData)
18765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
18865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
18965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class ToneData {
19065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
19165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mType;      // tone type (START_TONE only)
19265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mStream;    // stream type (START_TONE only)
19365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
19465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
19565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class VolumeData {
19665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
19765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mStream;
19865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            float mVolume;
19965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mIO;
20065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
20165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
20265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class ParametersData {
20365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
20465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mIO;
20565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            String8 mKeyValuePairs;
20665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
20765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
20865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class VoiceVolumeData {
20965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
21065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            float mVolume;
21165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
21265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
21365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        Mutex   mLock;
21465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        Condition mWaitWorkCV;
21565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        Vector <AudioCommand *> mAudioCommands; // list of pending commands
21665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        ToneGenerator *mpToneGenerator;     // the tone generator
21765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        AudioCommand mLastCommand;          // last processed command (used by dump)
21865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        String8 mName;                      // string used by wake lock fo delayed commands
21965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    };
22065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
22165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // Internal dump utilities.
22265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    status_t dumpPermissionDenial(int fd);
22365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
22465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
225eda6c364c253ba97ee45a3adeb8c2b45db1f81dbEric Laurent    mutable Mutex mLock;    // prevents concurrent access to AudioPolicy manager functions changing
226eda6c364c253ba97ee45a3adeb8c2b45db1f81dbEric Laurent                            // device connection state  or routing
22765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    sp <AudioCommandThread> mAudioCommandThread;    // audio commands thread
22865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    sp <AudioCommandThread> mTonePlaybackThread;     // tone playback thread
229fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin
230fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    struct audio_policy_device *mpAudioPolicyDev;
231fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    struct audio_policy *mpAudioPolicy;
23265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian};
23365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
23465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian}; // namespace android
23565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
23665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#endif // ANDROID_AUDIOPOLICYSERVICE_H
237