156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi/* 256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Copyright (C) 2015 The Android Open Source Project 356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * 456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * you may not use this file except in compliance with the License. 656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * You may obtain a copy of the License at 756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * 856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * 1056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 1156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 1256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * See the License for the specific language governing permissions and 1456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * limitations under the License. 1556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi */ 1656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 17ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie#pragma once 18ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie 1953615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include "DeviceDescriptor.h" 2053615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include "HwModule.h" 2153615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include "audio_policy_conf.h" 22ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie#include <system/audio.h> 2353615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <utils/Log.h> 2453615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <utils/Vector.h> 2553615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <utils/SortedVector.h> 2653615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <cutils/config_utils.h> 2753615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <utils/RefBase.h> 2853615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <system/audio_policy.h> 29ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie 3056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivinamespace android { 3156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 3256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi// ---------------------------------------------------------------------------- 3356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi// Definitions for audio_policy.conf file parsing 3456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi// ---------------------------------------------------------------------------- 3556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 3656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivistruct StringToEnum { 3756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi const char *name; 3856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi uint32_t value; 3956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 4056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 41f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung// TODO: move to a separate file. Should be in sync with audio.h. 42f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung#define STRING_TO_ENUM(string) { #string, (uint32_t)string } // uint32_t cast removes warning 43322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent#define NAME_TO_ENUM(name, value) { name, value } 44ec8930f218fa0c1acde631543b40b5a0b28bfe1fGlenn Kasten#ifndef ARRAY_SIZE 4556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 46ec8930f218fa0c1acde631543b40b5a0b28bfe1fGlenn Kasten#endif 4756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 48322b4d25387a04c9afebe998326d005bbdf17edeEric Laurentconst StringToEnum sDeviceTypeToEnumTable[] = { 4956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_EARPIECE), 5056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPEAKER), 5156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPEAKER_SAFE), 5256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADSET), 5356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADPHONE), 5456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO), 5556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET), 5656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT), 5756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_SCO), 5856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP), 5956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES), 6056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER), 6156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_A2DP), 6256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_AUX_DIGITAL), 6356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_HDMI), 6456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET), 6556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET), 6656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_USB_ACCESSORY), 6756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_USB_DEVICE), 6856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_USB), 6956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_REMOTE_SUBMIX), 7056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_TELEPHONY_TX), 7156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_LINE), 7256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_HDMI_ARC), 7356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPDIF), 7456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_FM), 7556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_OUT_AUX_LINE), 76b9d73333cce3f9da3a7a0b33589f6bbe0f992a92Eric Laurent STRING_TO_ENUM(AUDIO_DEVICE_OUT_IP), 7756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_AMBIENT), 7856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_BUILTIN_MIC), 7956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET), 8056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_ALL_SCO), 8156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_WIRED_HEADSET), 8256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_AUX_DIGITAL), 8356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_HDMI), 8456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_TELEPHONY_RX), 8556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_VOICE_CALL), 8656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_BACK_MIC), 8756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_REMOTE_SUBMIX), 8856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET), 8956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET), 9056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_USB_ACCESSORY), 9156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_USB_DEVICE), 9256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_FM_TUNER), 9356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_TV_TUNER), 9456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_LINE), 9556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_SPDIF), 9656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_A2DP), 9756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_DEVICE_IN_LOOPBACK), 98b9d73333cce3f9da3a7a0b33589f6bbe0f992a92Eric Laurent STRING_TO_ENUM(AUDIO_DEVICE_IN_IP), 9956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 10056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 101322b4d25387a04c9afebe998326d005bbdf17edeEric Laurentconst StringToEnum sDeviceNameToEnumTable[] = { 102322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Earpiece", AUDIO_DEVICE_OUT_EARPIECE), 103322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Speaker", AUDIO_DEVICE_OUT_SPEAKER), 104322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Speaker Protected", AUDIO_DEVICE_OUT_SPEAKER_SAFE), 105322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Wired Headset", AUDIO_DEVICE_OUT_WIRED_HEADSET), 106322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Wired Headphones", AUDIO_DEVICE_OUT_WIRED_HEADPHONE), 107322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("BT SCO", AUDIO_DEVICE_OUT_BLUETOOTH_SCO), 108322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("BT SCO Headset", AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET), 109322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("BT SCO Car Kit", AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT), 110322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("", AUDIO_DEVICE_OUT_ALL_SCO), 111322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("BT A2DP Out", AUDIO_DEVICE_OUT_BLUETOOTH_A2DP), 112322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("BT A2DP Headphones", AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES), 113322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("BT A2DP Speaker", AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER), 114322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("", AUDIO_DEVICE_OUT_ALL_A2DP), 115322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("HDMI Out", AUDIO_DEVICE_OUT_AUX_DIGITAL), 116322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("HDMI Out", AUDIO_DEVICE_OUT_HDMI), 117322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Analog Dock Out", AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET), 118322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Digital Dock Out", AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET), 119322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("USB Host Out", AUDIO_DEVICE_OUT_USB_ACCESSORY), 120322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("USB Device Out", AUDIO_DEVICE_OUT_USB_DEVICE), 121322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("", AUDIO_DEVICE_OUT_ALL_USB), 122322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Reroute Submix Out", AUDIO_DEVICE_OUT_REMOTE_SUBMIX), 123322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Telephony Tx", AUDIO_DEVICE_OUT_TELEPHONY_TX), 124322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Line Out", AUDIO_DEVICE_OUT_LINE), 125322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("HDMI ARC Out", AUDIO_DEVICE_OUT_HDMI_ARC), 126322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("S/PDIF Out", AUDIO_DEVICE_OUT_SPDIF), 127322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("FM transceiver Out", AUDIO_DEVICE_OUT_FM), 128322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Aux Line Out", AUDIO_DEVICE_OUT_AUX_LINE), 129b9d73333cce3f9da3a7a0b33589f6bbe0f992a92Eric Laurent NAME_TO_ENUM("IP Out", AUDIO_DEVICE_OUT_IP), 130322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Ambient Mic", AUDIO_DEVICE_IN_AMBIENT), 131322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Built-In Mic", AUDIO_DEVICE_IN_BUILTIN_MIC), 132322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("BT SCO Headset Mic", AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET), 133322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("", AUDIO_DEVICE_IN_ALL_SCO), 134322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Wired Headset Mic", AUDIO_DEVICE_IN_WIRED_HEADSET), 135322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("HDMI In", AUDIO_DEVICE_IN_AUX_DIGITAL), 136322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("HDMI In", AUDIO_DEVICE_IN_HDMI), 137322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Telephony Rx", AUDIO_DEVICE_IN_TELEPHONY_RX), 138322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Telephony Rx", AUDIO_DEVICE_IN_VOICE_CALL), 139322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Built-In Back Mic", AUDIO_DEVICE_IN_BACK_MIC), 140322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Reroute Submix In", AUDIO_DEVICE_IN_REMOTE_SUBMIX), 141322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Analog Dock In", AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET), 142322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Digital Dock In", AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET), 143322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("USB Host In", AUDIO_DEVICE_IN_USB_ACCESSORY), 144322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("USB Device In", AUDIO_DEVICE_IN_USB_DEVICE), 145322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("FM Tuner In", AUDIO_DEVICE_IN_FM_TUNER), 146322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("TV Tuner In", AUDIO_DEVICE_IN_TV_TUNER), 147322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Line In", AUDIO_DEVICE_IN_LINE), 148322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("S/PDIF In", AUDIO_DEVICE_IN_SPDIF), 149322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("BT A2DP In", AUDIO_DEVICE_IN_BLUETOOTH_A2DP), 150322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent NAME_TO_ENUM("Loopback In", AUDIO_DEVICE_IN_LOOPBACK), 151b9d73333cce3f9da3a7a0b33589f6bbe0f992a92Eric Laurent NAME_TO_ENUM("IP In", AUDIO_DEVICE_IN_IP), 152322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent}; 153322b4d25387a04c9afebe998326d005bbdf17edeEric Laurent 15456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviconst StringToEnum sOutputFlagNameToEnumTable[] = { 15556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DIRECT), 15656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_PRIMARY), 15756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_FAST), 15856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER), 15956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD), 16056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_NON_BLOCKING), 16156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_HW_AV_SYNC), 162e8d55a5d1f6b08cfdabea7628e956063a47fa160Ravi Kumar Alamanda STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_TTS), 1636631424f66253c4bad94618fa078c97715a65fbcRavi Kumar Alamanda STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_RAW), 1646631424f66253c4bad94618fa078c97715a65fbcRavi Kumar Alamanda STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_SYNC), 16556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 16656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 16756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviconst StringToEnum sInputFlagNameToEnumTable[] = { 16856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_INPUT_FLAG_FAST), 16956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_INPUT_FLAG_HW_HOTWORD), 1706631424f66253c4bad94618fa078c97715a65fbcRavi Kumar Alamanda STRING_TO_ENUM(AUDIO_INPUT_FLAG_RAW), 1716631424f66253c4bad94618fa078c97715a65fbcRavi Kumar Alamanda STRING_TO_ENUM(AUDIO_INPUT_FLAG_SYNC), 17256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 17356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 17456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviconst StringToEnum sFormatNameToEnumTable[] = { 17556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_PCM_16_BIT), 17656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_PCM_8_BIT), 17756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_PCM_32_BIT), 17856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_PCM_8_24_BIT), 17956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_PCM_FLOAT), 18056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_PCM_24_BIT_PACKED), 18156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_MP3), 18256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC), 18356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_MAIN), 18456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_LC), 18556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_SSR), 18656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_LTP), 18756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_HE_V1), 18856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_SCALABLE), 18956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_ERLC), 19056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_LD), 19156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_HE_V2), 19256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AAC_ELD), 19356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_VORBIS), 19456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_HE_AAC_V1), 19556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_HE_AAC_V2), 19656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_OPUS), 19756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_AC3), 19856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_FORMAT_E_AC3), 1997d669b3551c20109f5544455ca1555499693e1e1Phil Burk STRING_TO_ENUM(AUDIO_FORMAT_DTS), 2007d669b3551c20109f5544455ca1555499693e1e1Phil Burk STRING_TO_ENUM(AUDIO_FORMAT_DTS_HD), 20156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 20256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 20356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviconst StringToEnum sOutChannelsNameToEnumTable[] = { 20456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_CHANNEL_OUT_MONO), 20556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_CHANNEL_OUT_STEREO), 20656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_CHANNEL_OUT_QUAD), 20756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_CHANNEL_OUT_5POINT1), 20856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_CHANNEL_OUT_7POINT1), 20956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 21056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 21156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviconst StringToEnum sInChannelsNameToEnumTable[] = { 21256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_CHANNEL_IN_MONO), 21356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_CHANNEL_IN_STEREO), 21456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_CHANNEL_IN_FRONT_BACK), 21556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 21656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 217f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hungconst StringToEnum sIndexChannelsNameToEnumTable[] = { 218f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung STRING_TO_ENUM(AUDIO_CHANNEL_INDEX_MASK_1), 219f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung STRING_TO_ENUM(AUDIO_CHANNEL_INDEX_MASK_2), 220f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung STRING_TO_ENUM(AUDIO_CHANNEL_INDEX_MASK_3), 221f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung STRING_TO_ENUM(AUDIO_CHANNEL_INDEX_MASK_4), 222f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung STRING_TO_ENUM(AUDIO_CHANNEL_INDEX_MASK_5), 223f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung STRING_TO_ENUM(AUDIO_CHANNEL_INDEX_MASK_6), 224f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung STRING_TO_ENUM(AUDIO_CHANNEL_INDEX_MASK_7), 225f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung STRING_TO_ENUM(AUDIO_CHANNEL_INDEX_MASK_8), 226f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung}; 227f27e2fbfc3284c00a60fa68edc51d436f75b1e32Andy Hung 22856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviconst StringToEnum sGainModeNameToEnumTable[] = { 22956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_GAIN_MODE_JOINT), 23056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_GAIN_MODE_CHANNELS), 23156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi STRING_TO_ENUM(AUDIO_GAIN_MODE_RAMP), 23256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 23356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 23456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviclass ConfigParsingUtils 23556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi{ 23656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivipublic: 23756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi static uint32_t stringToEnum(const struct StringToEnum *table, 23856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi size_t size, 23956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi const char *name); 24056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi static const char *enumToString(const struct StringToEnum *table, 24156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi size_t size, 24256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi uint32_t value); 24356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi static bool stringToBool(const char *value); 24456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi static uint32_t parseOutputFlagNames(char *name); 24556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi static uint32_t parseInputFlagNames(char *name); 24656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi static audio_devices_t parseDeviceNames(char *name); 24753615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie 24853615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie static void loadHwModules(cnode *root, HwModuleCollection &hwModules, 24953615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie DeviceVector &availableInputDevices, 25053615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie DeviceVector &availableOutputDevices, 25153615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie sp<DeviceDescriptor> &defaultOutputDevices, 25253615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie bool &isSpeakerDrcEnabled); 25353615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie 25453615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie static void loadGlobalConfig(cnode *root, const sp<HwModule>& module, 25553615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie DeviceVector &availableInputDevices, 25653615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie DeviceVector &availableOutputDevices, 25753615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie sp<DeviceDescriptor> &defaultOutputDevices, 25853615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie bool &isSpeakerDrcEnabled); 25953615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie 26053615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie static status_t loadAudioPolicyConfig(const char *path, 26153615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie HwModuleCollection &hwModules, 26253615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie DeviceVector &availableInputDevices, 26353615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie DeviceVector &availableOutputDevices, 26453615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie sp<DeviceDescriptor> &defaultOutputDevices, 26553615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie bool &isSpeakerDrcEnabled); 26653615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie 26753615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffieprivate: 26853615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie static void loadHwModule(cnode *root, HwModuleCollection &hwModules, 26953615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie DeviceVector &availableInputDevices, 27053615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie DeviceVector &availableOutputDevices, 27153615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie sp<DeviceDescriptor> &defaultOutputDevices, 27253615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie bool &isSpeakerDrcEnabled); 27356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; 27456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi 27556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; // namespace android 276