blob: c949aa12a49f07a4088df6922b585fef3aac1bb3 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
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
28namespace android {
29
30// ----------------------------------------------------------------------------
31
32class AudioHardwareGeneric;
33
34class AudioStreamOutGeneric : public AudioStreamOut {
35public:
36 AudioStreamOutGeneric() : mAudioHardware(0), mFd(-1) {}
37 virtual ~AudioStreamOutGeneric();
38
39 virtual status_t set(
40 AudioHardwareGeneric *hw,
41 int mFd,
42 int format,
43 int channelCount,
44 uint32_t sampleRate);
45
46 virtual uint32_t sampleRate() const { return 44100; }
47 virtual size_t bufferSize() const { return 4096; }
48 virtual int channelCount() const { return 2; }
49 virtual int format() const { return AudioSystem::PCM_16_BIT; }
50 virtual uint32_t latency() const { return 20; }
51 virtual status_t setVolume(float volume) { return INVALID_OPERATION; }
52 virtual ssize_t write(const void* buffer, size_t bytes);
53 virtual status_t standby();
54 virtual status_t dump(int fd, const Vector<String16>& args);
55
56private:
57 AudioHardwareGeneric *mAudioHardware;
58 Mutex mLock;
59 int mFd;
60};
61
62class AudioStreamInGeneric : public AudioStreamIn {
63public:
64 AudioStreamInGeneric() : mAudioHardware(0), mFd(-1) {}
65 virtual ~AudioStreamInGeneric();
66
67 virtual status_t set(
68 AudioHardwareGeneric *hw,
69 int mFd,
70 int format,
71 int channelCount,
72 uint32_t sampleRate,
73 AudioSystem::audio_in_acoustics acoustics);
74
75 uint32_t sampleRate() const { return 8000; }
76 virtual size_t bufferSize() const { return 320; }
77 virtual int channelCount() const { return 1; }
78 virtual int format() const { return AudioSystem::PCM_16_BIT; }
79 virtual status_t setGain(float gain) { return INVALID_OPERATION; }
80 virtual ssize_t read(void* buffer, ssize_t bytes);
81 virtual status_t dump(int fd, const Vector<String16>& args);
82 virtual status_t standby() { return NO_ERROR; }
83
84private:
85 AudioHardwareGeneric *mAudioHardware;
86 Mutex mLock;
87 int mFd;
88};
89
90
91class AudioHardwareGeneric : public AudioHardwareBase
92{
93public:
94 AudioHardwareGeneric();
95 virtual ~AudioHardwareGeneric();
96 virtual status_t initCheck();
97 virtual status_t setVoiceVolume(float volume);
98 virtual status_t setMasterVolume(float volume);
99
100 // mic mute
101 virtual status_t setMicMute(bool state);
102 virtual status_t getMicMute(bool* state);
103
104 virtual status_t setParameter(const char* key, const char* value)
105 { return NO_ERROR; }
106
107 // create I/O streams
108 virtual AudioStreamOut* openOutputStream(
109 int format=0,
110 int channelCount=0,
111 uint32_t sampleRate=0,
112 status_t *status=0);
113
114 virtual AudioStreamIn* openInputStream(
115 int format,
116 int channelCount,
117 uint32_t sampleRate,
118 status_t *status,
119 AudioSystem::audio_in_acoustics acoustics);
120
121 void closeOutputStream(AudioStreamOutGeneric* out);
122 void closeInputStream(AudioStreamInGeneric* in);
123protected:
124 virtual status_t doRouting() { return NO_ERROR; }
125 virtual status_t dump(int fd, const Vector<String16>& args);
126
127private:
128 status_t dumpInternals(int fd, const Vector<String16>& args);
129
130 Mutex mLock;
131 AudioStreamOutGeneric *mOutput;
132 AudioStreamInGeneric *mInput;
133 int mFd;
134 bool mMicMute;
135};
136
137// ----------------------------------------------------------------------------
138
139}; // namespace android
140
141#endif // ANDROID_AUDIO_HARDWARE_GENERIC_H