A2dpAudioInterface.h revision e81531e91ecae92aff471dbff9cbeb0f95ff4a80
1f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin/* 2f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * Copyright (C) 2008 The Android Open Source Project 3f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * 4f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 5f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * you may not use this file except in compliance with the License. 6f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * You may obtain a copy of the License at 7f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * 8f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * http://www.apache.org/licenses/LICENSE-2.0 9f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * 10f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * Unless required by applicable law or agreed to in writing, software 11f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS, 12f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * See the License for the specific language governing permissions and 14f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin * limitations under the License. 15f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin */ 16f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 17f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#ifndef A2DP_AUDIO_HARDWARE_H 18f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#define A2DP_AUDIO_HARDWARE_H 19f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 20f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <stdint.h> 21f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <sys/types.h> 22f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 23f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <utils/threads.h> 24f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 25f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <hardware_legacy/AudioHardwareBase.h> 26f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 27f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 28e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinnamespace android_audio_legacy { 29e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin using android::Mutex; 30f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 31f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass A2dpAudioInterface : public AudioHardwareBase 32f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 33f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin class A2dpAudioStreamOut; 34f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 35f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic: 36f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin A2dpAudioInterface(AudioHardwareInterface* hw); 37f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ~A2dpAudioInterface(); 38f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t initCheck(); 39f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 40f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setVoiceVolume(float volume); 41f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setMasterVolume(float volume); 42f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 43f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setMode(int mode); 44f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 45f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin // mic mute 46f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setMicMute(bool state); 47f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t getMicMute(bool* state); 48f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 49f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setParameters(const String8& keyValuePairs); 50f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual String8 getParameters(const String8& keys); 51f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 52f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount); 53f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 54f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin // create I/O streams 55f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual AudioStreamOut* openOutputStream( 56f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 57f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int *format=0, 58f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *channels=0, 59f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *sampleRate=0, 60f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t *status=0); 61f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual void closeOutputStream(AudioStreamOut* out); 62f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 63f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual AudioStreamIn* openInputStream( 64f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 65f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int *format, 66f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *channels, 67f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *sampleRate, 68f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t *status, 69f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioSystem::audio_in_acoustics acoustics); 70f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual void closeInputStream(AudioStreamIn* in); 71f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// static AudioHardwareInterface* createA2dpInterface(); 72f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 73f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprotected: 74f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t dump(int fd, const Vector<String16>& args); 75f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 76f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprivate: 77f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin class A2dpAudioStreamOut : public AudioStreamOut { 78f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin public: 79f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin A2dpAudioStreamOut(); 80f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ~A2dpAudioStreamOut(); 81f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t set(uint32_t device, 82f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int *pFormat, 83f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *pChannels, 84f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *pRate); 85f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t sampleRate() const { return 44100; } 86f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin // SBC codec wants a multiple of 512 87f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual size_t bufferSize() const { return 512 * 20; } 88f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t channels() const { return AudioSystem::CHANNEL_OUT_STEREO; } 89f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual int format() const { return AudioSystem::PCM_16_BIT; } 90f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t latency() const { return ((1000*bufferSize())/frameSize())/sampleRate() + 200; } 91f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setVolume(float left, float right) { return INVALID_OPERATION; } 92f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ssize_t write(const void* buffer, size_t bytes); 93f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t standby(); 94f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t dump(int fd, const Vector<String16>& args); 95f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setParameters(const String8& keyValuePairs); 96f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual String8 getParameters(const String8& keys); 97f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t getRenderPosition(uint32_t *dspFrames); 98f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 99f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin private: 100f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin friend class A2dpAudioInterface; 101f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t init(); 102f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t close(); 103f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t close_l(); 104f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t setAddress(const char* address); 105f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t setBluetoothEnabled(bool enabled); 106f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t setSuspended(bool onOff); 107f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t standby_l(); 108f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 109f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin private: 110f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mFd; 111f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin bool mStandby; 112f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mStartCount; 113f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mRetryCount; 114f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin char mA2dpAddress[20]; 115f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin void* mData; 116f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin Mutex mLock; 117f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin bool mBluetoothEnabled; 118f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mDevice; 119f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin bool mClosing; 120f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin bool mSuspended; 121f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin nsecs_t mLastWriteTime; 122f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mBufferDurationUs; 123f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin }; 124f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 125f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin friend class A2dpAudioStreamOut; 126f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 127f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin A2dpAudioStreamOut* mOutput; 128f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioHardwareInterface *mHardwareInterface; 129f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin char mA2dpAddress[20]; 130f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin bool mBluetoothEnabled; 131f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin bool mSuspended; 132f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; 133f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 134f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 135f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// ---------------------------------------------------------------------------- 136f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 137f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; // namespace android 138f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 139f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#endif // A2DP_AUDIO_HARDWARE_H 140