blob: a2342cdc66e699bb6af25c29bf65bec2f8271110 [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 Projecte09fd9e2008-12-17 18:05:43 -080026#include <hardware/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 Projecte09fd9e2008-12-17 18:05:43 -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);
53 virtual status_t dump(int fd, const Vector<String16>& args);
54
55private:
56 AudioHardwareGeneric *mAudioHardware;
57 Mutex mLock;
58 int mFd;
59};
60
61class AudioStreamInGeneric : public AudioStreamIn {
62public:
63 AudioStreamInGeneric() : mAudioHardware(0), mFd(-1) {}
64 virtual ~AudioStreamInGeneric();
65
66 virtual status_t set(
67 AudioHardwareGeneric *hw,
68 int mFd,
69 int format,
70 int channelCount,
71 uint32_t sampleRate);
72
73 uint32_t sampleRate() const { return 8000; }
74 virtual size_t bufferSize() const { return 320; }
75 virtual int channelCount() const { return 1; }
76 virtual int format() const { return AudioSystem::PCM_16_BIT; }
77 virtual status_t setGain(float gain) { return INVALID_OPERATION; }
78 virtual ssize_t read(void* buffer, ssize_t bytes);
79 virtual status_t dump(int fd, const Vector<String16>& args);
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080080 virtual status_t standby() { return NO_ERROR; }
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070081
82private:
83 AudioHardwareGeneric *mAudioHardware;
84 Mutex mLock;
85 int mFd;
86};
87
88
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080089class AudioHardwareGeneric : public AudioHardwareBase
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070090{
91public:
92 AudioHardwareGeneric();
93 virtual ~AudioHardwareGeneric();
94 virtual status_t initCheck();
95 virtual status_t standby();
96 virtual status_t setVoiceVolume(float volume);
97 virtual status_t setMasterVolume(float volume);
98
99 // mic mute
100 virtual status_t setMicMute(bool state);
101 virtual status_t getMicMute(bool* state);
102
103 virtual status_t setParameter(const char* key, const char* value)
104 { return NO_ERROR; }
105
106 // create I/O streams
107 virtual AudioStreamOut* openOutputStream(
108 int format=0,
109 int channelCount=0,
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -0800110 uint32_t sampleRate=0,
111 status_t *status=0);
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700112
113 virtual AudioStreamIn* openInputStream(
114 int format,
115 int channelCount,
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -0800116 uint32_t sampleRate,
117 status_t *status);
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700118
119 void closeOutputStream(AudioStreamOutGeneric* out);
120 void closeInputStream(AudioStreamInGeneric* in);
121protected:
122 virtual status_t doRouting() { return NO_ERROR; }
123 virtual status_t dump(int fd, const Vector<String16>& args);
124
125private:
126 status_t dumpInternals(int fd, const Vector<String16>& args);
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -0800127
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700128 Mutex mLock;
129 AudioStreamOutGeneric *mOutput;
130 AudioStreamInGeneric *mInput;
131 int mFd;
132 bool mMicMute;
133};
134
135// ----------------------------------------------------------------------------
136
137}; // namespace android
138
139#endif // ANDROID_AUDIO_HARDWARE_GENERIC_H