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