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