19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2007, The Android Open Source Project
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License.
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**     http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS,
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_AUDIO_HARDWARE_GENERIC_H
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_AUDIO_HARDWARE_GENERIC_H
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h>
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <hardware_legacy/AudioHardwareBase.h>
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AudioHardwareGeneric;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AudioStreamOutGeneric : public AudioStreamOut {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        AudioStreamOutGeneric() : mAudioHardware(0), mFd(-1) {}
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual             ~AudioStreamOutGeneric();
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    set(
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AudioHardwareGeneric *hw,
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mFd,
42a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t devices,
43a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            int *pFormat,
44a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t *pChannels,
45a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t *pRate);
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual uint32_t    sampleRate() const { return 44100; }
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual size_t      bufferSize() const { return 4096; }
49a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual uint32_t    channels() const { return AudioSystem::CHANNEL_OUT_STEREO; }
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual int         format() const { return AudioSystem::PCM_16_BIT; }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual uint32_t    latency() const { return 20; }
52a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual status_t    setVolume(float left, float right) { return INVALID_OPERATION; }
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual ssize_t     write(const void* buffer, size_t bytes);
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    standby();
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    dump(int fd, const Vector<String16>& args);
56a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual status_t    setParameters(const String8& keyValuePairs);
57a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual String8     getParameters(const String8& keys);
580986e7907ffc8387b04fb201e285784bcd11b9b7Eric Laurent    virtual status_t    getRenderPosition(uint32_t *dspFrames);
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    AudioHardwareGeneric *mAudioHardware;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Mutex   mLock;
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int     mFd;
64a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    uint32_t mDevice;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AudioStreamInGeneric : public AudioStreamIn {
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        AudioStreamInGeneric() : mAudioHardware(0), mFd(-1) {}
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual             ~AudioStreamInGeneric();
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    set(
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AudioHardwareGeneric *hw,
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mFd,
75a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t devices,
76a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            int *pFormat,
77a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t *pChannels,
78a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t *pRate,
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AudioSystem::audio_in_acoustics acoustics);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
81a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual uint32_t    sampleRate() const { return 8000; }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual size_t      bufferSize() const { return 320; }
83a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual uint32_t    channels() const { return AudioSystem::CHANNEL_IN_MONO; }
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual int         format() const { return AudioSystem::PCM_16_BIT; }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    setGain(float gain) { return INVALID_OPERATION; }
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual ssize_t     read(void* buffer, ssize_t bytes);
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    dump(int fd, const Vector<String16>& args);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    standby() { return NO_ERROR; }
89a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual status_t    setParameters(const String8& keyValuePairs);
90a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual String8     getParameters(const String8& keys);
9147d0a9264fa5297db6333697ad750e6bc06822aaEric Laurent    virtual unsigned int  getInputFramesLost() const { return 0; }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    AudioHardwareGeneric *mAudioHardware;
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Mutex   mLock;
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int     mFd;
97a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    uint32_t mDevice;
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AudioHardwareGeneric : public AudioHardwareBase
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        AudioHardwareGeneric();
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual             ~AudioHardwareGeneric();
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    initCheck();
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    setVoiceVolume(float volume);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    setMasterVolume(float volume);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // mic mute
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    setMicMute(bool state);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t    getMicMute(bool* state);
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // create I/O streams
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual AudioStreamOut* openOutputStream(
116a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t devices,
117a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            int *format=0,
118a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t *channels=0,
119a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t *sampleRate=0,
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t *status=0);
121a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual    void        closeOutputStream(AudioStreamOut* out);
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual AudioStreamIn* openInputStream(
124a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t devices,
125a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            int *format,
126a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t *channels,
127a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            uint32_t *sampleRate,
128ad216e51b33c55634ec89d15e81e97cdffd08e1cDave Sparks            status_t *status,
129ad216e51b33c55634ec89d15e81e97cdffd08e1cDave Sparks            AudioSystem::audio_in_acoustics acoustics);
130a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent    virtual    void        closeInputStream(AudioStreamIn* in);
131ad216e51b33c55634ec89d15e81e97cdffd08e1cDave Sparks
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void            closeOutputStream(AudioStreamOutGeneric* out);
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void            closeInputStream(AudioStreamInGeneric* in);
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected:
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t        dump(int fd, const Vector<String16>& args);
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t                dumpInternals(int fd, const Vector<String16>& args);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Mutex                   mLock;
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    AudioStreamOutGeneric   *mOutput;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    AudioStreamInGeneric    *mInput;
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int                     mFd;
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool                    mMicMute;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // ANDROID_AUDIO_HARDWARE_GENERIC_H
152