AudioPolicyService.h revision 65ab47156e1c7dfcd8cc4266253a5ff30219e7f0
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 <hardware_legacy/AudioPolicyInterface.h> 2265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/ToneGenerator.h> 2365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <utils/Vector.h> 2465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 2565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopiannamespace android { 2665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 2765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianclass String8; 2865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 2965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian// ---------------------------------------------------------------------------- 3065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 3165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianclass AudioPolicyService: public BnAudioPolicyService, public AudioPolicyClientInterface, public IBinder::DeathRecipient 3265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian{ 3365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 3465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianpublic: 3565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian static void instantiate(); 3665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 3765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t dump(int fd, const Vector<String16>& args); 3865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 3965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // 4065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // BnAudioPolicyService (see AudioPolicyInterface for method descriptions) 4165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // 4265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 4365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setDeviceConnectionState(AudioSystem::audio_devices device, 4465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioSystem::device_connection_state state, 4565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian const char *device_address); 4665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual AudioSystem::device_connection_state getDeviceConnectionState(AudioSystem::audio_devices device, 4765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian const char *device_address); 4865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setPhoneState(int state); 4965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setRingerMode(uint32_t mode, uint32_t mask); 5065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setForceUse(AudioSystem::force_use usage, AudioSystem::forced_config config); 5165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual AudioSystem::forced_config getForceUse(AudioSystem::force_use usage); 5265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual audio_io_handle_t getOutput(AudioSystem::stream_type stream, 5365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t samplingRate = 0, 5465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t format = AudioSystem::FORMAT_DEFAULT, 5565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t channels = 0, 5665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioSystem::output_flags flags = AudioSystem::OUTPUT_FLAG_INDIRECT); 5765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t startOutput(audio_io_handle_t output, AudioSystem::stream_type stream); 5865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t stopOutput(audio_io_handle_t output, AudioSystem::stream_type stream); 5965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void releaseOutput(audio_io_handle_t output); 6065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual audio_io_handle_t getInput(int inputSource, 6165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t samplingRate = 0, 6265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t format = AudioSystem::FORMAT_DEFAULT, 6365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t channels = 0, 6465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioSystem::audio_in_acoustics acoustics = (AudioSystem::audio_in_acoustics)0); 6565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t startInput(audio_io_handle_t input); 6665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t stopInput(audio_io_handle_t input); 6765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void releaseInput(audio_io_handle_t input); 6865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t initStreamVolume(AudioSystem::stream_type stream, 6965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int indexMin, 7065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int indexMax); 7165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setStreamVolumeIndex(AudioSystem::stream_type stream, int index); 7265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t getStreamVolumeIndex(AudioSystem::stream_type stream, int *index); 7365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 7465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t onTransact( 7565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t code, 7665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian const Parcel& data, 7765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Parcel* reply, 7865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t flags); 7965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 8065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // IBinder::DeathRecipient 8165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void binderDied(const wp<IBinder>& who); 8265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 8365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // 8465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // AudioPolicyClientInterface 8565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // 8665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual audio_io_handle_t openOutput(uint32_t *pDevices, 8765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t *pSamplingRate, 8865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t *pFormat, 8965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t *pChannels, 9065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t *pLatencyMs, 9165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioSystem::output_flags flags); 9265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual audio_io_handle_t openDuplicateOutput(audio_io_handle_t output1, audio_io_handle_t output2); 9365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t closeOutput(audio_io_handle_t output); 9465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t suspendOutput(audio_io_handle_t output); 9565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t restoreOutput(audio_io_handle_t output); 9665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual audio_io_handle_t openInput(uint32_t *pDevices, 9765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t *pSamplingRate, 9865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t *pFormat, 9965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t *pChannels, 10065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian uint32_t acoustics); 10165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t closeInput(audio_io_handle_t input); 10265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setStreamVolume(AudioSystem::stream_type stream, float volume, audio_io_handle_t output, int delayMs = 0); 10365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setStreamOutput(AudioSystem::stream_type stream, audio_io_handle_t output); 10465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs, int delayMs = 0); 10565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual String8 getParameters(audio_io_handle_t ioHandle, const String8& keys); 10665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t startTone(ToneGenerator::tone_type tone, AudioSystem::stream_type stream); 10765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t stopTone(); 10865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual status_t setVoiceVolume(float volume, int delayMs = 0); 10965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 11065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianprivate: 11165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioPolicyService(); 11265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual ~AudioPolicyService(); 11365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 11465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t dumpInternals(int fd); 11565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 11665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // Thread used for tone playback and to send audio config commands to audio flinger 11765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // For tone playback, using a separate thread is necessary to avoid deadlock with mLock because startTone() 11865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // and stopTone() are normally called with mLock locked and requesting a tone start or stop will cause 11965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // calls to AudioPolicyService and an attempt to lock mLock. 12065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // For audio config commands, it is necessary because audio flinger requires that the calling process (user) 12165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // has permission to modify audio settings. 12265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class AudioCommandThread : public Thread { 12365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class AudioCommand; 12465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 12565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 12665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // commands for tone AudioCommand 12765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian enum { 12865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian START_TONE, 12965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian STOP_TONE, 13065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian SET_VOLUME, 13165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian SET_PARAMETERS, 13265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian SET_VOICE_VOLUME 13365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 13465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 13565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioCommandThread (String8 name); 13665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual ~AudioCommandThread(); 13765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 13865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t dump(int fd); 13965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 14065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // Thread virtuals 14165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual void onFirstRef(); 14265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian virtual bool threadLoop(); 14365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 14465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void exit(); 14565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void startToneCommand(int type = 0, int stream = 0); 14665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void stopToneCommand(); 14765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t volumeCommand(int stream, float volume, int output, int delayMs = 0); 14865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t parametersCommand(int ioHandle, const String8& keyValuePairs, int delayMs = 0); 14965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t voiceVolumeCommand(float volume, int delayMs = 0); 15065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void insertCommand_l(AudioCommand *command, int delayMs = 0); 15165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 15265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian private: 15365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // descriptor for requested tone playback event 15465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class AudioCommand { 15565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 15665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 15765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioCommand() 15865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian : mCommand(-1) {} 15965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 16065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void dump(char* buffer, size_t size); 16165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 16265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mCommand; // START_TONE, STOP_TONE ... 16365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian nsecs_t mTime; // time stamp 16465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Condition mCond; // condition for status return 16565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t mStatus; // command status 16665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian bool mWaitStatus; // true if caller is waiting for status 16765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian void *mParam; // command parameter (ToneData, VolumeData, ParametersData) 16865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 16965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 17065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class ToneData { 17165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 17265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mType; // tone type (START_TONE only) 17365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mStream; // stream type (START_TONE only) 17465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 17565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 17665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class VolumeData { 17765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 17865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mStream; 17965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian float mVolume; 18065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mIO; 18165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 18265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 18365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class ParametersData { 18465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 18565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian int mIO; 18665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian String8 mKeyValuePairs; 18765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 18865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 18965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian class VoiceVolumeData { 19065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian public: 19165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian float mVolume; 19265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 19365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 19465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Mutex mLock; 19565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Condition mWaitWorkCV; 19665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Vector <AudioCommand *> mAudioCommands; // list of pending commands 19765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian ToneGenerator *mpToneGenerator; // the tone generator 19865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioCommand mLastCommand; // last processed command (used by dump) 19965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian String8 mName; // string used by wake lock fo delayed commands 20065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian }; 20165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 20265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // Internal dump utilities. 20365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian status_t dumpPermissionDenial(int fd); 20465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 20565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 20665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian Mutex mLock; // prevents concurrent access to AudioPolicy manager functions changing device 20765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian // connection stated our routing 20865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian AudioPolicyInterface* mpPolicyManager; // the platform specific policy manager 20965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian sp <AudioCommandThread> mAudioCommandThread; // audio commands thread 21065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian sp <AudioCommandThread> mTonePlaybackThread; // tone playback thread 21165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian}; 21265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 21365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian}; // namespace android 21465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 21565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#endif // ANDROID_AUDIOPOLICYSERVICE_H 21665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 21765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 21865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 21965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 22065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 22165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 22265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 22365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian 224