19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef A2DP_AUDIO_HARDWARE_H 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define A2DP_AUDIO_HARDWARE_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <hardware_legacy/AudioHardwareBase.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass A2dpAudioInterface : public AudioHardwareBase 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class A2dpAudioStreamOut; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 35a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent A2dpAudioInterface(AudioHardwareInterface* hw); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~A2dpAudioInterface(); 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t initCheck(); 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setVoiceVolume(float volume); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setMasterVolume(float volume); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 42a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual status_t setMode(int mode); 43a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // mic mute 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setMicMute(bool state); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t getMicMute(bool* state); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 48a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual status_t setParameters(const String8& keyValuePairs); 49a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual String8 getParameters(const String8& keys); 50a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 51a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // create I/O streams 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual AudioStreamOut* openOutputStream( 55a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t devices, 56a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int *format=0, 57a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *channels=0, 58a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *sampleRate=0, 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t *status=0); 60a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual void closeOutputStream(AudioStreamOut* out); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual AudioStreamIn* openInputStream( 63a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t devices, 64a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int *format, 65a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *channels, 66a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *sampleRate, 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t *status, 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioSystem::audio_in_acoustics acoustics); 69a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual void closeInputStream(AudioStreamIn* in); 70a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent// static AudioHardwareInterface* createA2dpInterface(); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected: 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class A2dpAudioStreamOut : public AudioStreamOut { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project A2dpAudioStreamOut(); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~A2dpAudioStreamOut(); 80a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent status_t set(uint32_t device, 81a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int *pFormat, 82a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *pChannels, 83a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *pRate); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t sampleRate() const { return 44100; } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SBC codec wants a multiple of 512 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual size_t bufferSize() const { return 512 * 20; } 87a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual uint32_t channels() const { return AudioSystem::CHANNEL_OUT_STEREO; } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual int format() const { return AudioSystem::PCM_16_BIT; } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t latency() const { return ((1000*bufferSize())/frameSize())/sampleRate() + 200; } 90a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual status_t setVolume(float left, float right) { return INVALID_OPERATION; } 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t write(const void* buffer, size_t bytes); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t standby(); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args); 94a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual status_t setParameters(const String8& keyValuePairs); 95a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual String8 getParameters(const String8& keys); 960986e7907ffc8387b04fb201e285784bcd11b9b7Eric Laurent virtual status_t getRenderPosition(uint32_t *dspFrames); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class A2dpAudioInterface; 100b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project status_t init(); 101b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project status_t close(); 1020827c81466dffc2f0f3470574733cc0956df0494Nick Pelly status_t close_l(); 1030827c81466dffc2f0f3470574733cc0956df0494Nick Pelly status_t setAddress(const char* address); 1040827c81466dffc2f0f3470574733cc0956df0494Nick Pelly status_t setBluetoothEnabled(bool enabled); 10580a6a229b33b0868944fe011af2d778e23c83322Eric Laurent status_t setSuspended(bool onOff); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mFd; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mStandby; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mStartCount; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mRetryCount; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char mA2dpAddress[20]; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* mData; 114b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Mutex mLock; 1150827c81466dffc2f0f3470574733cc0956df0494Nick Pelly bool mBluetoothEnabled; 116a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t mDevice; 117fe4fc91260af3c640e434c2c98516a703588ca60Eric Laurent bool mClosing; 11880a6a229b33b0868944fe011af2d778e23c83322Eric Laurent bool mSuspended; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 121a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent friend class A2dpAudioStreamOut; 122a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project A2dpAudioStreamOut* mOutput; 124a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent AudioHardwareInterface *mHardwareInterface; 125a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent char mA2dpAddress[20]; 126a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent bool mBluetoothEnabled; 12780a6a229b33b0868944fe011af2d778e23c83322Eric Laurent bool mSuspended; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 130a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // A2DP_AUDIO_HARDWARE_H 136