1e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin/* 2e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Copyright (C) 2011 The Android Open Source Project 3e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * 4e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 5e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * you may not use this file except in compliance with the License. 6e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * You may obtain a copy of the License at 7e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * 8e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * http://www.apache.org/licenses/LICENSE-2.0 9e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * 10e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Unless required by applicable law or agreed to in writing, software 11e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS, 12e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * See the License for the specific language governing permissions and 14e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * limitations under the License. 15e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin */ 16e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 17e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#define LOG_TAG "AudioPolicyCompatClient" 18e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin//#define LOG_NDEBUG 0 19e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 20e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <stdint.h> 21e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 22e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <hardware/hardware.h> 234a0748be283a8c9efa02243c3e1716c49443a87cDima Zavin#include <system/audio.h> 24d17f66f33276e64e8e288f6ff2b1cb8169650c81Dima Zavin#include <system/audio_policy.h> 25e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <hardware/audio_policy.h> 26e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 27e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <hardware_legacy/AudioSystemLegacy.h> 28e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 29e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include "AudioPolicyCompatClient.h" 30e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 31e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinnamespace android_audio_legacy { 32e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 3370c236c9290732782d5267935af1475b8d5ae602Eric Laurentaudio_module_handle_t AudioPolicyCompatClient::loadHwModule(const char *moduleName) 34e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 3570c236c9290732782d5267935af1475b8d5ae602Eric Laurent return mServiceOps->load_hw_module(mService, moduleName); 3670c236c9290732782d5267935af1475b8d5ae602Eric Laurent} 3770c236c9290732782d5267935af1475b8d5ae602Eric Laurent 3870c236c9290732782d5267935af1475b8d5ae602Eric Laurentaudio_io_handle_t AudioPolicyCompatClient::openOutput(audio_module_handle_t module, 3970c236c9290732782d5267935af1475b8d5ae602Eric Laurent audio_devices_t *pDevices, 4070c236c9290732782d5267935af1475b8d5ae602Eric Laurent uint32_t *pSamplingRate, 4170c236c9290732782d5267935af1475b8d5ae602Eric Laurent audio_format_t *pFormat, 4270c236c9290732782d5267935af1475b8d5ae602Eric Laurent audio_channel_mask_t *pChannelMask, 4370c236c9290732782d5267935af1475b8d5ae602Eric Laurent uint32_t *pLatencyMs, 440977cf534ffb71c2abac622716510ae8ea25f3e9Eric Laurent audio_output_flags_t flags) 4570c236c9290732782d5267935af1475b8d5ae602Eric Laurent{ 4670c236c9290732782d5267935af1475b8d5ae602Eric Laurent return mServiceOps->open_output_on_module(mService, module, pDevices, pSamplingRate, 4770c236c9290732782d5267935af1475b8d5ae602Eric Laurent pFormat, pChannelMask, pLatencyMs, 4870c236c9290732782d5267935af1475b8d5ae602Eric Laurent flags); 49e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 50e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 51e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinaudio_io_handle_t AudioPolicyCompatClient::openDuplicateOutput(audio_io_handle_t output1, 52e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin audio_io_handle_t output2) 53e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 54e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->open_duplicate_output(mService, output1, output2); 55e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 56e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 57e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::closeOutput(audio_io_handle_t output) 58e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 59e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->close_output(mService, output); 60e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 61e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 62e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::suspendOutput(audio_io_handle_t output) 63e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 64e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->suspend_output(mService, output); 65e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 66e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 67e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::restoreOutput(audio_io_handle_t output) 68e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 69e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->restore_output(mService, output); 70e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 71e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 7270c236c9290732782d5267935af1475b8d5ae602Eric Laurentaudio_io_handle_t AudioPolicyCompatClient::openInput(audio_module_handle_t module, 7370c236c9290732782d5267935af1475b8d5ae602Eric Laurent audio_devices_t *pDevices, 7470c236c9290732782d5267935af1475b8d5ae602Eric Laurent uint32_t *pSamplingRate, 7570c236c9290732782d5267935af1475b8d5ae602Eric Laurent audio_format_t *pFormat, 7670c236c9290732782d5267935af1475b8d5ae602Eric Laurent audio_channel_mask_t *pChannelMask) 77e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 7870c236c9290732782d5267935af1475b8d5ae602Eric Laurent return mServiceOps->open_input_on_module(mService, module, pDevices, 7970c236c9290732782d5267935af1475b8d5ae602Eric Laurent pSamplingRate, pFormat, pChannelMask); 80e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 81e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 82e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::closeInput(audio_io_handle_t input) 83e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 84e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->close_input(mService, input); 85e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 86e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 87e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::setStreamOutput(AudioSystem::stream_type stream, 88e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin audio_io_handle_t output) 89e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 90e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->set_stream_output(mService, (audio_stream_type_t)stream, 91e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin output); 92e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 93e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 94e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::moveEffects(int session, audio_io_handle_t srcOutput, 95e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin audio_io_handle_t dstOutput) 96e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 97e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->move_effects(mService, session, srcOutput, dstOutput); 98e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 99e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 100e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima ZavinString8 AudioPolicyCompatClient::getParameters(audio_io_handle_t ioHandle, const String8& keys) 101e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 102e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin char *str; 103e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin String8 out_str8; 104e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 105e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin str = mServiceOps->get_parameters(mService, ioHandle, keys.string()); 106e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin out_str8 = String8(str); 107e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin free(str); 108e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 109e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return out_str8; 110e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 111e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 112e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinvoid AudioPolicyCompatClient::setParameters(audio_io_handle_t ioHandle, 113e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin const String8& keyValuePairs, 114e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin int delayMs) 115e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 116e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin mServiceOps->set_parameters(mService, ioHandle, keyValuePairs.string(), 117e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin delayMs); 118e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 119e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 120e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::setStreamVolume( 121e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin AudioSystem::stream_type stream, 122e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin float volume, 123e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin audio_io_handle_t output, 124e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin int delayMs) 125e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 126e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->set_stream_volume(mService, (audio_stream_type_t)stream, 127e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin volume, output, delayMs); 128e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 129e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 130e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::startTone(ToneGenerator::tone_type tone, 131e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin AudioSystem::stream_type stream) 132e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 133e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->start_tone(mService, 134e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin AUDIO_POLICY_TONE_IN_CALL_NOTIFICATION, 135e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin (audio_stream_type_t)stream); 136e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 137e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 138e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::stopTone() 139e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 140e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->stop_tone(mService); 141e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 142e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 143e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinstatus_t AudioPolicyCompatClient::setVoiceVolume(float volume, int delayMs) 144e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin{ 145e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin return mServiceOps->set_voice_volume(mService, volume, delayMs); 146e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin} 147e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin 148e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin}; // namespace android_audio_legacy 149