blob: 1d58389a9bd29838543395af4001f32100c52a21 [file] [log] [blame]
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -07001/*
2**
3** Copyright 2007, The Android Open Source Project
4**
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -08005** 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
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -07008**
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -08009** http://www.apache.org/licenses/LICENSE-2.0
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070010**
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080011** 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
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070015** 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
The Android Open Source Project8a7a6752009-01-15 16:12:10 -080026#include <hardware_legacy/AudioHardwareBase.h>
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070027
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; }
The Android Open Source Project43aa2b12009-03-03 14:04:24 -080050 virtual uint32_t latency() const { return 0; }
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070051 virtual status_t setVolume(float volume) { return INVALID_OPERATION; }
52 virtual ssize_t write(const void* buffer, size_t bytes);
The Android Open Source Project27629322009-01-09 17:51:23 -080053 virtual status_t standby();
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070054 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,
The Android Open Source Projectd2bd26d2009-02-19 10:57:31 -080072 uint32_t sampleRate,
73 AudioSystem::audio_in_acoustics acoustics);
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070074
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);
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080082 virtual status_t standby() { return NO_ERROR; }
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070083
84private:
85 AudioHardwareGeneric *mAudioHardware;
86 Mutex mLock;
87 int mFd;
88};
89
90
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080091class AudioHardwareGeneric : public AudioHardwareBase
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070092{
93public:
94 AudioHardwareGeneric();
95 virtual ~AudioHardwareGeneric();
96 virtual status_t initCheck();
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070097 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,
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -0800111 uint32_t sampleRate=0,
112 status_t *status=0);
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700113
114 virtual AudioStreamIn* openInputStream(
115 int format,
116 int channelCount,
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -0800117 uint32_t sampleRate,
The Android Open Source Projectd2bd26d2009-02-19 10:57:31 -0800118 status_t *status,
119 AudioSystem::audio_in_acoustics acoustics);
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700120
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);
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -0800129
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700130 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