AudioHardwareInterface.cpp revision e81531e91ecae92aff471dbff9cbeb0f95ff4a80
1f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin/* 2f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 3f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Copyright 2007, The Android Open Source Project 4f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 5f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Licensed under the Apache License, Version 2.0 (the "License"); 6f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** you may not use this file except in compliance with the License. 7f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** You may obtain a copy of the License at 8f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 9f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** http://www.apache.org/licenses/LICENSE-2.0 10f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** 11f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Unless required by applicable law or agreed to in writing, software 12f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** distributed under the License is distributed on an "AS IS" BASIS, 13f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** See the License for the specific language governing permissions and 15f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** limitations under the License. 16f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin*/ 17f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 18f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <cutils/properties.h> 19f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <string.h> 20f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <unistd.h> 21f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin//#define LOG_NDEBUG 0 22f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 23f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#define LOG_TAG "AudioHardwareInterface" 24f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <utils/Log.h> 25f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <utils/String8.h> 26f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 27f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include "AudioHardwareStub.h" 28f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include "AudioHardwareGeneric.h" 29f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#ifdef WITH_A2DP 30f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include "A2dpAudioInterface.h" 31f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#endif 32f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 33f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#ifdef ENABLE_AUDIO_DUMP 34f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include "AudioDumpInterface.h" 35f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#endif 36f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 37f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 38f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// change to 1 to log routing calls 39f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#define LOG_ROUTING_CALLS 1 40f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 41e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinnamespace android_audio_legacy { 42f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 43f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#if LOG_ROUTING_CALLS 44f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinstatic const char* routingModeStrings[] = 45f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 46f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin "OUT OF RANGE", 47f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin "INVALID", 48f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin "CURRENT", 49f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin "NORMAL", 50f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin "RINGTONE", 51f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin "IN_CALL", 52f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin "IN_COMMUNICATION" 53f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; 54f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 55f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinstatic const char* routeNone = "NONE"; 56f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 57f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinstatic const char* displayMode(int mode) 58f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 59f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin if ((mode < AudioSystem::MODE_INVALID) || (mode >= AudioSystem::NUM_MODES)) 60f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return routingModeStrings[0]; 61f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return routingModeStrings[mode+3]; 62f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 63f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#endif 64f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 65f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// ---------------------------------------------------------------------------- 66f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 67f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima ZavinAudioHardwareInterface* AudioHardwareInterface::create() 68f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 69e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return NULL; 70f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 71f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 72f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima ZavinAudioStreamOut::~AudioStreamOut() 73f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 74f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 75f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 76f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima ZavinAudioStreamIn::~AudioStreamIn() {} 77f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 78f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima ZavinAudioHardwareBase::AudioHardwareBase() 79f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 80f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin mMode = 0; 81f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 82f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 83f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinstatus_t AudioHardwareBase::setMode(int mode) 84f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 85f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#if LOG_ROUTING_CALLS 86f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin LOGD("setMode(%s)", displayMode(mode)); 87f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#endif 88f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin if ((mode < 0) || (mode >= AudioSystem::NUM_MODES)) 89f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return BAD_VALUE; 90f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin if (mMode == mode) 91f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return ALREADY_EXISTS; 92f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin mMode = mode; 93f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return NO_ERROR; 94f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 95f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 96f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// default implementation 97f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinstatus_t AudioHardwareBase::setParameters(const String8& keyValuePairs) 98f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 99f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return NO_ERROR; 100f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 101f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 102f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// default implementation 103f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima ZavinString8 AudioHardwareBase::getParameters(const String8& keys) 104f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 105f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin AudioParameter param = AudioParameter(keys); 106f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return param.toString(); 107f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 108f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 109f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// default implementation 110f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinsize_t AudioHardwareBase::getInputBufferSize(uint32_t sampleRate, int format, int channelCount) 111f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 112f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin if (sampleRate != 8000) { 113f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin LOGW("getInputBufferSize bad sampling rate: %d", sampleRate); 114f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return 0; 115f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin } 116f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin if (format != AudioSystem::PCM_16_BIT) { 117f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin LOGW("getInputBufferSize bad format: %d", format); 118f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return 0; 119f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin } 120f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin if (channelCount != 1) { 121f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin LOGW("getInputBufferSize bad channel count: %d", channelCount); 122f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return 0; 123f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin } 124f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 125f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return 320; 126f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 127f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 128f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinstatus_t AudioHardwareBase::dumpState(int fd, const Vector<String16>& args) 129f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{ 130f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin const size_t SIZE = 256; 131f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin char buffer[SIZE]; 132f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin String8 result; 133f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin snprintf(buffer, SIZE, "AudioHardwareBase::dumpState\n"); 134f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin result.append(buffer); 135f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin snprintf(buffer, SIZE, "\tmMode: %d\n", mMode); 136f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin result.append(buffer); 137f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin ::write(fd, result.string(), result.size()); 138f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin dump(fd, args); // Dump the state of the concrete child. 139f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin return NO_ERROR; 140f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin} 141f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 142f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin// ---------------------------------------------------------------------------- 143f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin 144f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; // namespace android 145