AudioHardwareInterface.cpp revision 617c80a82e5620b2f16348e4bd3d7fc3b76e9021
1/*
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 <cutils/properties.h>
19#include <string.h>
20#include <unistd.h>
21//#define LOG_NDEBUG 0
22
23#define LOG_TAG "AudioHardwareInterface"
24#include <utils/Log.h>
25#include <utils/String8.h>
26
27#include "AudioHardwareStub.h"
28#include "AudioHardwareGeneric.h"
29#ifdef WITH_A2DP
30#include "A2dpAudioInterface.h"
31#endif
32
33#ifdef ENABLE_AUDIO_DUMP
34#include "AudioDumpInterface.h"
35#endif
36
37
38// change to 1 to log routing calls
39#define LOG_ROUTING_CALLS 1
40
41namespace android_audio_legacy {
42
43#if LOG_ROUTING_CALLS
44static const char* routingModeStrings[] =
45{
46    "OUT OF RANGE",
47    "INVALID",
48    "CURRENT",
49    "NORMAL",
50    "RINGTONE",
51    "IN_CALL",
52    "IN_COMMUNICATION"
53};
54
55static const char* routeNone = "NONE";
56
57static const char* displayMode(int mode)
58{
59    if ((mode < AudioSystem::MODE_INVALID) || (mode >= AudioSystem::NUM_MODES))
60        return routingModeStrings[0];
61    return routingModeStrings[mode+3];
62}
63#endif
64
65// ----------------------------------------------------------------------------
66
67AudioHardwareInterface* AudioHardwareInterface::create()
68{
69    return NULL;
70}
71
72AudioStreamOut::~AudioStreamOut()
73{
74}
75
76AudioStreamIn::~AudioStreamIn() {}
77
78AudioHardwareBase::AudioHardwareBase()
79{
80    mMode = 0;
81}
82
83status_t AudioHardwareBase::setMode(int mode)
84{
85#if LOG_ROUTING_CALLS
86    LOGD("setMode(%s)", displayMode(mode));
87#endif
88    if ((mode < 0) || (mode >= AudioSystem::NUM_MODES))
89        return BAD_VALUE;
90    if (mMode == mode)
91        return ALREADY_EXISTS;
92    mMode = mode;
93    return NO_ERROR;
94}
95
96// default implementation
97status_t AudioHardwareBase::setParameters(const String8& keyValuePairs)
98{
99    return NO_ERROR;
100}
101
102// default implementation
103String8 AudioHardwareBase::getParameters(const String8& keys)
104{
105    AudioParameter param = AudioParameter(keys);
106    return param.toString();
107}
108
109// default implementation
110size_t AudioHardwareBase::getInputBufferSize(uint32_t sampleRate, int format, int channelCount)
111{
112    if (sampleRate != 8000) {
113        LOGW("getInputBufferSize bad sampling rate: %d", sampleRate);
114        return 0;
115    }
116    if (format != AudioSystem::PCM_16_BIT) {
117        LOGW("getInputBufferSize bad format: %d", format);
118        return 0;
119    }
120    if (channelCount != 1) {
121        LOGW("getInputBufferSize bad channel count: %d", channelCount);
122        return 0;
123    }
124
125    return 320;
126}
127
128status_t AudioHardwareBase::getMasterVolume(float *volume)
129{
130    return INVALID_OPERATION;
131}
132
133status_t AudioHardwareBase::dumpState(int fd, const Vector<String16>& args)
134{
135    const size_t SIZE = 256;
136    char buffer[SIZE];
137    String8 result;
138    snprintf(buffer, SIZE, "AudioHardwareBase::dumpState\n");
139    result.append(buffer);
140    snprintf(buffer, SIZE, "\tmMode: %d\n", mMode);
141    result.append(buffer);
142    ::write(fd, result.string(), result.size());
143    dump(fd, args);  // Dump the state of the concrete child.
144    return NO_ERROR;
145}
146
147// ----------------------------------------------------------------------------
148
149}; // namespace android
150