blob: b2d9763a90dc575b698957d722eb92e8d2ea0b9a [file] [log] [blame]
Jean-Michel Trivi56ec4ff2015-01-23 16:45:18 -08001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17namespace android {
18
19// ----------------------------------------------------------------------------
20// Definitions for audio_policy.conf file parsing
21// ----------------------------------------------------------------------------
22
23struct StringToEnum {
24 const char *name;
25 uint32_t value;
26};
27
28#define STRING_TO_ENUM(string) { #string, string }
Glenn Kastenec8930f2015-03-09 15:56:22 -070029#ifndef ARRAY_SIZE
Jean-Michel Trivi56ec4ff2015-01-23 16:45:18 -080030#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
Glenn Kastenec8930f2015-03-09 15:56:22 -070031#endif
Jean-Michel Trivi56ec4ff2015-01-23 16:45:18 -080032
33const StringToEnum sDeviceNameToEnumTable[] = {
34 STRING_TO_ENUM(AUDIO_DEVICE_OUT_EARPIECE),
35 STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPEAKER),
36 STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPEAKER_SAFE),
37 STRING_TO_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADSET),
38 STRING_TO_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADPHONE),
39 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO),
40 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET),
41 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT),
42 STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_SCO),
43 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP),
44 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES),
45 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
46 STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_A2DP),
47 STRING_TO_ENUM(AUDIO_DEVICE_OUT_AUX_DIGITAL),
48 STRING_TO_ENUM(AUDIO_DEVICE_OUT_HDMI),
49 STRING_TO_ENUM(AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET),
50 STRING_TO_ENUM(AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET),
51 STRING_TO_ENUM(AUDIO_DEVICE_OUT_USB_ACCESSORY),
52 STRING_TO_ENUM(AUDIO_DEVICE_OUT_USB_DEVICE),
53 STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_USB),
54 STRING_TO_ENUM(AUDIO_DEVICE_OUT_REMOTE_SUBMIX),
55 STRING_TO_ENUM(AUDIO_DEVICE_OUT_TELEPHONY_TX),
56 STRING_TO_ENUM(AUDIO_DEVICE_OUT_LINE),
57 STRING_TO_ENUM(AUDIO_DEVICE_OUT_HDMI_ARC),
58 STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPDIF),
59 STRING_TO_ENUM(AUDIO_DEVICE_OUT_FM),
60 STRING_TO_ENUM(AUDIO_DEVICE_OUT_AUX_LINE),
61 STRING_TO_ENUM(AUDIO_DEVICE_IN_AMBIENT),
62 STRING_TO_ENUM(AUDIO_DEVICE_IN_BUILTIN_MIC),
63 STRING_TO_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET),
64 STRING_TO_ENUM(AUDIO_DEVICE_IN_ALL_SCO),
65 STRING_TO_ENUM(AUDIO_DEVICE_IN_WIRED_HEADSET),
66 STRING_TO_ENUM(AUDIO_DEVICE_IN_AUX_DIGITAL),
67 STRING_TO_ENUM(AUDIO_DEVICE_IN_HDMI),
68 STRING_TO_ENUM(AUDIO_DEVICE_IN_TELEPHONY_RX),
69 STRING_TO_ENUM(AUDIO_DEVICE_IN_VOICE_CALL),
70 STRING_TO_ENUM(AUDIO_DEVICE_IN_BACK_MIC),
71 STRING_TO_ENUM(AUDIO_DEVICE_IN_REMOTE_SUBMIX),
72 STRING_TO_ENUM(AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET),
73 STRING_TO_ENUM(AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET),
74 STRING_TO_ENUM(AUDIO_DEVICE_IN_USB_ACCESSORY),
75 STRING_TO_ENUM(AUDIO_DEVICE_IN_USB_DEVICE),
76 STRING_TO_ENUM(AUDIO_DEVICE_IN_FM_TUNER),
77 STRING_TO_ENUM(AUDIO_DEVICE_IN_TV_TUNER),
78 STRING_TO_ENUM(AUDIO_DEVICE_IN_LINE),
79 STRING_TO_ENUM(AUDIO_DEVICE_IN_SPDIF),
80 STRING_TO_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_A2DP),
81 STRING_TO_ENUM(AUDIO_DEVICE_IN_LOOPBACK),
82};
83
84const StringToEnum sOutputFlagNameToEnumTable[] = {
85 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DIRECT),
86 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_PRIMARY),
87 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_FAST),
88 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER),
89 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD),
90 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_NON_BLOCKING),
91 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_HW_AV_SYNC),
92};
93
94const StringToEnum sInputFlagNameToEnumTable[] = {
95 STRING_TO_ENUM(AUDIO_INPUT_FLAG_FAST),
96 STRING_TO_ENUM(AUDIO_INPUT_FLAG_HW_HOTWORD),
97};
98
99const StringToEnum sFormatNameToEnumTable[] = {
100 STRING_TO_ENUM(AUDIO_FORMAT_PCM_16_BIT),
101 STRING_TO_ENUM(AUDIO_FORMAT_PCM_8_BIT),
102 STRING_TO_ENUM(AUDIO_FORMAT_PCM_32_BIT),
103 STRING_TO_ENUM(AUDIO_FORMAT_PCM_8_24_BIT),
104 STRING_TO_ENUM(AUDIO_FORMAT_PCM_FLOAT),
105 STRING_TO_ENUM(AUDIO_FORMAT_PCM_24_BIT_PACKED),
106 STRING_TO_ENUM(AUDIO_FORMAT_MP3),
107 STRING_TO_ENUM(AUDIO_FORMAT_AAC),
108 STRING_TO_ENUM(AUDIO_FORMAT_AAC_MAIN),
109 STRING_TO_ENUM(AUDIO_FORMAT_AAC_LC),
110 STRING_TO_ENUM(AUDIO_FORMAT_AAC_SSR),
111 STRING_TO_ENUM(AUDIO_FORMAT_AAC_LTP),
112 STRING_TO_ENUM(AUDIO_FORMAT_AAC_HE_V1),
113 STRING_TO_ENUM(AUDIO_FORMAT_AAC_SCALABLE),
114 STRING_TO_ENUM(AUDIO_FORMAT_AAC_ERLC),
115 STRING_TO_ENUM(AUDIO_FORMAT_AAC_LD),
116 STRING_TO_ENUM(AUDIO_FORMAT_AAC_HE_V2),
117 STRING_TO_ENUM(AUDIO_FORMAT_AAC_ELD),
118 STRING_TO_ENUM(AUDIO_FORMAT_VORBIS),
119 STRING_TO_ENUM(AUDIO_FORMAT_HE_AAC_V1),
120 STRING_TO_ENUM(AUDIO_FORMAT_HE_AAC_V2),
121 STRING_TO_ENUM(AUDIO_FORMAT_OPUS),
122 STRING_TO_ENUM(AUDIO_FORMAT_AC3),
123 STRING_TO_ENUM(AUDIO_FORMAT_E_AC3),
124};
125
126const StringToEnum sOutChannelsNameToEnumTable[] = {
127 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_MONO),
128 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_STEREO),
129 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_QUAD),
130 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_5POINT1),
131 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_7POINT1),
132};
133
134const StringToEnum sInChannelsNameToEnumTable[] = {
135 STRING_TO_ENUM(AUDIO_CHANNEL_IN_MONO),
136 STRING_TO_ENUM(AUDIO_CHANNEL_IN_STEREO),
137 STRING_TO_ENUM(AUDIO_CHANNEL_IN_FRONT_BACK),
138};
139
140const StringToEnum sGainModeNameToEnumTable[] = {
141 STRING_TO_ENUM(AUDIO_GAIN_MODE_JOINT),
142 STRING_TO_ENUM(AUDIO_GAIN_MODE_CHANNELS),
143 STRING_TO_ENUM(AUDIO_GAIN_MODE_RAMP),
144};
145
146class ConfigParsingUtils
147{
148public:
149 static uint32_t stringToEnum(const struct StringToEnum *table,
150 size_t size,
151 const char *name);
152 static const char *enumToString(const struct StringToEnum *table,
153 size_t size,
154 uint32_t value);
155 static bool stringToBool(const char *value);
156 static uint32_t parseOutputFlagNames(char *name);
157 static uint32_t parseInputFlagNames(char *name);
158 static audio_devices_t parseDeviceNames(char *name);
159};
160
161}; // namespace android