blob: 0046db8531ea85b568a2585fa9410ba0face755f [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**
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#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
44status_t AudioHardwareStub::standby()
45{
46 return NO_ERROR;
47}
48
49AudioStreamOut* AudioHardwareStub::openOutputStream(
50 int format, int channelCount, uint32_t sampleRate)
51{
52 AudioStreamOutStub* out = new AudioStreamOutStub();
53 if (out->set(format, channelCount, sampleRate) == NO_ERROR)
54 return out;
55 delete out;
56 return 0;
57}
58
59AudioStreamIn* AudioHardwareStub::openInputStream(
60 int format, int channelCount, uint32_t sampleRate)
61{
62 AudioStreamInStub* in = new AudioStreamInStub();
63 if (in->set(format, channelCount, sampleRate) == NO_ERROR)
64 return in;
65 delete in;
66 return 0;
67}
68
69status_t AudioHardwareStub::setVoiceVolume(float volume)
70{
71 return NO_ERROR;
72}
73
74status_t AudioHardwareStub::setMasterVolume(float volume)
75{
76 return NO_ERROR;
77}
78
79status_t AudioHardwareStub::dumpInternals(int fd, const Vector<String16>& args)
80{
81 const size_t SIZE = 256;
82 char buffer[SIZE];
83 String8 result;
84 result.append("AudioHardwareStub::dumpInternals\n");
85 snprintf(buffer, SIZE, "\tmMicMute: %s\n", mMicMute? "true": "false");
86 result.append(buffer);
87 ::write(fd, result.string(), result.size());
88 return NO_ERROR;
89}
90
91status_t AudioHardwareStub::dump(int fd, const Vector<String16>& args)
92{
93 dumpInternals(fd, args);
94 return NO_ERROR;
95}
96
97// ----------------------------------------------------------------------------
98
99status_t AudioStreamOutStub::set(int format, int channels, uint32_t rate)
100{
101 // fix up defaults
102 if (format == 0) format = AudioSystem::PCM_16_BIT;
103 if (channels == 0) channels = channelCount();
104 if (rate == 0) rate = sampleRate();
105
106 if ((format == AudioSystem::PCM_16_BIT) &&
107 (channels == channelCount()) &&
108 (rate == sampleRate()))
109 return NO_ERROR;
110 return BAD_VALUE;
111}
112
113ssize_t AudioStreamOutStub::write(const void* buffer, size_t bytes)
114{
115 // fake timing for audio output
116 usleep(bytes * 1000000 / sizeof(int16_t) / channelCount() / sampleRate());
117 return bytes;
118}
119
120status_t AudioStreamOutStub::dump(int fd, const Vector<String16>& args)
121{
122 const size_t SIZE = 256;
123 char buffer[SIZE];
124 String8 result;
125 snprintf(buffer, SIZE, "AudioStreamOutStub::dump\n");
126 snprintf(buffer, SIZE, "\tsample rate: %d\n", sampleRate());
127 snprintf(buffer, SIZE, "\tbuffer size: %d\n", bufferSize());
128 snprintf(buffer, SIZE, "\tchannel count: %d\n", channelCount());
129 snprintf(buffer, SIZE, "\tformat: %d\n", format());
130 result.append(buffer);
131 ::write(fd, result.string(), result.size());
132 return NO_ERROR;
133}
134
135// ----------------------------------------------------------------------------
136
137status_t AudioStreamInStub::set(int format, int channels, uint32_t rate)
138{
139 if ((format == AudioSystem::PCM_16_BIT) &&
140 (channels == channelCount()) &&
141 (rate == sampleRate()))
142 return NO_ERROR;
143 return BAD_VALUE;
144}
145
146ssize_t AudioStreamInStub::read(void* buffer, ssize_t bytes)
147{
148 // fake timing for audio input
149 usleep(bytes * 1000000 / sizeof(int16_t) / channelCount() / sampleRate());
150 memset(buffer, 0, bytes);
151 return bytes;
152}
153
154status_t AudioStreamInStub::dump(int fd, const Vector<String16>& args)
155{
156 const size_t SIZE = 256;
157 char buffer[SIZE];
158 String8 result;
159 snprintf(buffer, SIZE, "AudioStreamInStub::dump\n");
160 result.append(buffer);
161 snprintf(buffer, SIZE, "\tsample rate: %d\n", sampleRate());
162 result.append(buffer);
163 snprintf(buffer, SIZE, "\tbuffer size: %d\n", bufferSize());
164 result.append(buffer);
165 snprintf(buffer, SIZE, "\tchannel count: %d\n", channelCount());
166 result.append(buffer);
167 snprintf(buffer, SIZE, "\tformat: %d\n", format());
168 result.append(buffer);
169 ::write(fd, result.string(), result.size());
170 return NO_ERROR;
171}
172
173// ----------------------------------------------------------------------------
174
175}; // namespace android