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::dumpState(int fd, const Vector<String16>& args) 129{ 130 const size_t SIZE = 256; 131 char buffer[SIZE]; 132 String8 result; 133 snprintf(buffer, SIZE, "AudioHardwareBase::dumpState\n"); 134 result.append(buffer); 135 snprintf(buffer, SIZE, "\tmMode: %d\n", mMode); 136 result.append(buffer); 137 ::write(fd, result.string(), result.size()); 138 dump(fd, args); // Dump the state of the concrete child. 139 return NO_ERROR; 140} 141 142// ---------------------------------------------------------------------------- 143 144}; // namespace android 145