1f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin/* 2f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 3f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Copyright 2007, The Android Open Source Project 4f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 5f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Licensed under the Apache License, Version 2.0 (the "License"); 6f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** you may not use this file except in compliance with the License. 7f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** You may obtain a copy of the License at 8f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 9f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** http://www.apache.org/licenses/LICENSE-2.0 10f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 11f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Unless required by applicable law or agreed to in writing, software 12f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** distributed under the License is distributed on an "AS IS" BASIS, 13f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** See the License for the specific language governing permissions and 15f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** limitations under the License. 16f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin*/ 17f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 18f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#ifndef ANDROID_AUDIO_HARDWARE_GENERIC_H 19f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#define ANDROID_AUDIO_HARDWARE_GENERIC_H 20f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 21f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <stdint.h> 22f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <sys/types.h> 23f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 24f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <utils/threads.h> 25f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 26e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <hardware_legacy/AudioSystemLegacy.h> 27f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <hardware_legacy/AudioHardwareBase.h> 28f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 29e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinnamespace android_audio_legacy { 30e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin using android::Mutex; 31e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin using android::AutoMutex; 32f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 33f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// ---------------------------------------------------------------------------- 34f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 35f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioHardwareGeneric; 36f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 37f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioStreamOutGeneric : public AudioStreamOut { 38f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic: 39f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamOutGeneric() : mAudioHardware(0), mFd(-1) {} 40f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ~AudioStreamOutGeneric(); 41f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 42f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t set( 43f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioHardwareGeneric *hw, 44f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mFd, 45f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 46f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int *pFormat, 47f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *pChannels, 48f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *pRate); 49f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 50f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t sampleRate() const { return 44100; } 51f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual size_t bufferSize() const { return 4096; } 52f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t channels() const { return AudioSystem::CHANNEL_OUT_STEREO; } 53f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual int format() const { return AudioSystem::PCM_16_BIT; } 54f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t latency() const { return 20; } 55f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setVolume(float left, float right) { return INVALID_OPERATION; } 56f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ssize_t write(const void* buffer, size_t bytes); 57f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t standby(); 58f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t dump(int fd, const Vector<String16>& args); 59f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setParameters(const String8& keyValuePairs); 60f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual String8 getParameters(const String8& keys); 61f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t getRenderPosition(uint32_t *dspFrames); 62f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 63f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprivate: 64f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioHardwareGeneric *mAudioHardware; 65f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin Mutex mLock; 66f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mFd; 67f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mDevice; 68f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; 69f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 70f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioStreamInGeneric : public AudioStreamIn { 71f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic: 72f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamInGeneric() : mAudioHardware(0), mFd(-1) {} 73f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ~AudioStreamInGeneric(); 74f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 75f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t set( 76f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioHardwareGeneric *hw, 77f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mFd, 78f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 79f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int *pFormat, 80f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *pChannels, 81f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *pRate, 82f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioSystem::audio_in_acoustics acoustics); 83f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 84f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t sampleRate() const { return 8000; } 85f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual size_t bufferSize() const { return 320; } 86f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual uint32_t channels() const { return AudioSystem::CHANNEL_IN_MONO; } 87f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual int format() const { return AudioSystem::PCM_16_BIT; } 88f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setGain(float gain) { return INVALID_OPERATION; } 89f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ssize_t read(void* buffer, ssize_t bytes); 90f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t dump(int fd, const Vector<String16>& args); 91f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t standby() { return NO_ERROR; } 92f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setParameters(const String8& keyValuePairs); 93f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual String8 getParameters(const String8& keys); 94f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual unsigned int getInputFramesLost() const { return 0; } 95a527ffd3c2ce72048a8fae51cd399024af4439b9Richard Fitzgerald virtual status_t addAudioEffect(effect_handle_t effect) { return NO_ERROR; } 96a527ffd3c2ce72048a8fae51cd399024af4439b9Richard Fitzgerald virtual status_t removeAudioEffect(effect_handle_t effect) { return NO_ERROR; } 97f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 98f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprivate: 99f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioHardwareGeneric *mAudioHardware; 100f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin Mutex mLock; 101f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mFd; 102f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t mDevice; 103f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; 104f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 105f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 106f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioHardwareGeneric : public AudioHardwareBase 107f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 108f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic: 109f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioHardwareGeneric(); 110f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual ~AudioHardwareGeneric(); 111f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t initCheck(); 112f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setVoiceVolume(float volume); 113f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setMasterVolume(float volume); 114f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 115f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin // mic mute 116f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t setMicMute(bool state); 117f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t getMicMute(bool* state); 118f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 119f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin // create I/O streams 120f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual AudioStreamOut* openOutputStream( 121f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 122f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int *format=0, 123f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *channels=0, 124f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *sampleRate=0, 125f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t *status=0); 126f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual void closeOutputStream(AudioStreamOut* out); 127f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 128f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual AudioStreamIn* openInputStream( 129f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t devices, 130f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int *format, 131f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *channels, 132f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin uint32_t *sampleRate, 133f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t *status, 134f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioSystem::audio_in_acoustics acoustics); 135f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual void closeInputStream(AudioStreamIn* in); 136f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 137f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin void closeOutputStream(AudioStreamOutGeneric* out); 138f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin void closeInputStream(AudioStreamInGeneric* in); 139f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprotected: 140f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin virtual status_t dump(int fd, const Vector<String16>& args); 141f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 142f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprivate: 143f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin status_t dumpInternals(int fd, const Vector<String16>& args); 144f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 145f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin Mutex mLock; 146f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamOutGeneric *mOutput; 147f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioStreamInGeneric *mInput; 148f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin int mFd; 149f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin bool mMicMute; 150f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; 151f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 152f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// ---------------------------------------------------------------------------- 153f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 154f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; // namespace android 155f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 156f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#endif // ANDROID_AUDIO_HARDWARE_GENERIC_H 157