blob: e9f3d690f638d49149573e97c79ec379b08b882e [file] [log] [blame]
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -07001/* //device/servers/AudioFlinger/AudioHardwareStub.cpp
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#include <stdint.h>
19#include <sys/types.h>
20
21#include <stdlib.h>
22#include <unistd.h>
23#include <utils/String8.h>
24
25#include "AudioHardwareStub.h"
26
27namespace android {
28
29// ----------------------------------------------------------------------------
30
31AudioHardwareStub::AudioHardwareStub() : mMicMute(false)
32{
33}
34
35AudioHardwareStub::~AudioHardwareStub()
36{
37}
38
39status_t AudioHardwareStub::initCheck()
40{
41 return NO_ERROR;
42}
43
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070044AudioStreamOut* AudioHardwareStub::openOutputStream(
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080045 int format, int channelCount, uint32_t sampleRate, status_t *status)
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070046{
47 AudioStreamOutStub* out = new AudioStreamOutStub();
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080048 status_t lStatus = out->set(format, channelCount, sampleRate);
49 if (status) {
50 *status = lStatus;
51 }
52 if (lStatus == NO_ERROR)
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070053 return out;
54 delete out;
55 return 0;
56}
57
58AudioStreamIn* AudioHardwareStub::openInputStream(
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080059 int format, int channelCount, uint32_t sampleRate, status_t *status)
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070060{
61 AudioStreamInStub* in = new AudioStreamInStub();
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -080062 status_t lStatus = in->set(format, channelCount, sampleRate);
63 if (status) {
64 *status = lStatus;
65 }
66 if (lStatus == NO_ERROR)
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -070067 return in;
68 delete in;
69 return 0;
70}
71
72status_t AudioHardwareStub::setVoiceVolume(float volume)
73{
74 return NO_ERROR;
75}
76
77status_t AudioHardwareStub::setMasterVolume(float volume)
78{
79 return NO_ERROR;
80}
81
82status_t AudioHardwareStub::dumpInternals(int fd, const Vector<String16>& args)
83{
84 const size_t SIZE = 256;
85 char buffer[SIZE];
86 String8 result;
87 result.append("AudioHardwareStub::dumpInternals\n");
88 snprintf(buffer, SIZE, "\tmMicMute: %s\n", mMicMute? "true": "false");
89 result.append(buffer);
90 ::write(fd, result.string(), result.size());
91 return NO_ERROR;
92}
93
94status_t AudioHardwareStub::dump(int fd, const Vector<String16>& args)
95{
96 dumpInternals(fd, args);
97 return NO_ERROR;
98}
99
100// ----------------------------------------------------------------------------
101
102status_t AudioStreamOutStub::set(int format, int channels, uint32_t rate)
103{
104 // fix up defaults
105 if (format == 0) format = AudioSystem::PCM_16_BIT;
106 if (channels == 0) channels = channelCount();
107 if (rate == 0) rate = sampleRate();
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -0800108
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700109 if ((format == AudioSystem::PCM_16_BIT) &&
110 (channels == channelCount()) &&
111 (rate == sampleRate()))
112 return NO_ERROR;
113 return BAD_VALUE;
114}
115
116ssize_t AudioStreamOutStub::write(const void* buffer, size_t bytes)
117{
118 // fake timing for audio output
119 usleep(bytes * 1000000 / sizeof(int16_t) / channelCount() / sampleRate());
120 return bytes;
121}
122
The Android Open Source Project27629322009-01-09 17:51:23 -0800123status_t AudioStreamOutStub::standby()
124{
125 return NO_ERROR;
126}
127
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700128status_t AudioStreamOutStub::dump(int fd, const Vector<String16>& args)
129{
130 const size_t SIZE = 256;
131 char buffer[SIZE];
132 String8 result;
133 snprintf(buffer, SIZE, "AudioStreamOutStub::dump\n");
134 snprintf(buffer, SIZE, "\tsample rate: %d\n", sampleRate());
135 snprintf(buffer, SIZE, "\tbuffer size: %d\n", bufferSize());
136 snprintf(buffer, SIZE, "\tchannel count: %d\n", channelCount());
137 snprintf(buffer, SIZE, "\tformat: %d\n", format());
138 result.append(buffer);
139 ::write(fd, result.string(), result.size());
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -0800140 return NO_ERROR;
The Android Open Source Project7c1b96a2008-10-21 07:00:00 -0700141}
142
143// ----------------------------------------------------------------------------
144
145status_t AudioStreamInStub::set(int format, int channels, uint32_t rate)
146{
147 if ((format == AudioSystem::PCM_16_BIT) &&
148 (channels == channelCount()) &&
149 (rate == sampleRate()))
150 return NO_ERROR;
151 return BAD_VALUE;
152}
153
154ssize_t AudioStreamInStub::read(void* buffer, ssize_t bytes)
155{
156 // fake timing for audio input
157 usleep(bytes * 1000000 / sizeof(int16_t) / channelCount() / sampleRate());
158 memset(buffer, 0, bytes);
159 return bytes;
160}
161
162status_t AudioStreamInStub::dump(int fd, const Vector<String16>& args)
163{
164 const size_t SIZE = 256;
165 char buffer[SIZE];
166 String8 result;
167 snprintf(buffer, SIZE, "AudioStreamInStub::dump\n");
168 result.append(buffer);
169 snprintf(buffer, SIZE, "\tsample rate: %d\n", sampleRate());
170 result.append(buffer);
171 snprintf(buffer, SIZE, "\tbuffer size: %d\n", bufferSize());
172 result.append(buffer);
173 snprintf(buffer, SIZE, "\tchannel count: %d\n", channelCount());
174 result.append(buffer);
175 snprintf(buffer, SIZE, "\tformat: %d\n", format());
176 result.append(buffer);
177 ::write(fd, result.string(), result.size());
178 return NO_ERROR;
179}
180
181// ----------------------------------------------------------------------------
182
183}; // namespace android