xref: /aosp_15_r20/hardware/libhardware_legacy/include/hardware_legacy/AudioSystemLegacy.h (revision 79330504eb3d14022296e3b041867f86289dd52c)
1*79330504STreehugger Robot /*
2*79330504STreehugger Robot  * Copyright (C) 2008 The Android Open Source Project
3*79330504STreehugger Robot  *
4*79330504STreehugger Robot  * Licensed under the Apache License, Version 2.0 (the "License");
5*79330504STreehugger Robot  * you may not use this file except in compliance with the License.
6*79330504STreehugger Robot  * You may obtain a copy of the License at
7*79330504STreehugger Robot  *
8*79330504STreehugger Robot  *      http://www.apache.org/licenses/LICENSE-2.0
9*79330504STreehugger Robot  *
10*79330504STreehugger Robot  * Unless required by applicable law or agreed to in writing, software
11*79330504STreehugger Robot  * distributed under the License is distributed on an "AS IS" BASIS,
12*79330504STreehugger Robot  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*79330504STreehugger Robot  * See the License for the specific language governing permissions and
14*79330504STreehugger Robot  * limitations under the License.
15*79330504STreehugger Robot  */
16*79330504STreehugger Robot 
17*79330504STreehugger Robot #ifndef ANDROID_AUDIOSYSTEM_LEGACY_H_
18*79330504STreehugger Robot #define ANDROID_AUDIOSYSTEM_LEGACY_H_
19*79330504STreehugger Robot 
20*79330504STreehugger Robot #include <cutils/bitops.h>
21*79330504STreehugger Robot #include <utils/Errors.h>
22*79330504STreehugger Robot #include <media/AudioParameter.h>
23*79330504STreehugger Robot 
24*79330504STreehugger Robot #include <system/audio.h>
25*79330504STreehugger Robot #include <system/audio_policy.h>
26*79330504STreehugger Robot 
27*79330504STreehugger Robot namespace android_audio_legacy {
28*79330504STreehugger Robot 
29*79330504STreehugger Robot using android::status_t;
30*79330504STreehugger Robot using android::AudioParameter;
31*79330504STreehugger Robot 
32*79330504STreehugger Robot enum {
33*79330504STreehugger Robot     OK                  = android::OK,
34*79330504STreehugger Robot     NO_ERROR            = android::NO_ERROR,
35*79330504STreehugger Robot 
36*79330504STreehugger Robot     UNKNOWN_ERROR       = android::UNKNOWN_ERROR,
37*79330504STreehugger Robot 
38*79330504STreehugger Robot     NO_MEMORY           = android::NO_MEMORY,
39*79330504STreehugger Robot     INVALID_OPERATION   = android::INVALID_OPERATION,
40*79330504STreehugger Robot     BAD_VALUE           = android::BAD_VALUE,
41*79330504STreehugger Robot     BAD_TYPE            = android::BAD_TYPE,
42*79330504STreehugger Robot     NAME_NOT_FOUND      = android::NAME_NOT_FOUND,
43*79330504STreehugger Robot     PERMISSION_DENIED   = android::PERMISSION_DENIED,
44*79330504STreehugger Robot     NO_INIT             = android::NO_INIT,
45*79330504STreehugger Robot     ALREADY_EXISTS      = android::ALREADY_EXISTS,
46*79330504STreehugger Robot     DEAD_OBJECT         = android::DEAD_OBJECT,
47*79330504STreehugger Robot     FAILED_TRANSACTION  = android::FAILED_TRANSACTION,
48*79330504STreehugger Robot     BAD_INDEX           = android::BAD_INDEX,
49*79330504STreehugger Robot     NOT_ENOUGH_DATA     = android::NOT_ENOUGH_DATA,
50*79330504STreehugger Robot     WOULD_BLOCK         = android::WOULD_BLOCK,
51*79330504STreehugger Robot     TIMED_OUT           = android::TIMED_OUT,
52*79330504STreehugger Robot     UNKNOWN_TRANSACTION = android::UNKNOWN_TRANSACTION,
53*79330504STreehugger Robot };
54*79330504STreehugger Robot 
55*79330504STreehugger Robot enum audio_source {
56*79330504STreehugger Robot     AUDIO_SOURCE_DEFAULT = 0,
57*79330504STreehugger Robot     AUDIO_SOURCE_MIC = 1,
58*79330504STreehugger Robot     AUDIO_SOURCE_VOICE_UPLINK = 2,
59*79330504STreehugger Robot     AUDIO_SOURCE_VOICE_DOWNLINK = 3,
60*79330504STreehugger Robot     AUDIO_SOURCE_VOICE_CALL = 4,
61*79330504STreehugger Robot     AUDIO_SOURCE_CAMCORDER = 5,
62*79330504STreehugger Robot     AUDIO_SOURCE_VOICE_RECOGNITION = 6,
63*79330504STreehugger Robot     AUDIO_SOURCE_VOICE_COMMUNICATION = 7,
64*79330504STreehugger Robot     AUDIO_SOURCE_MAX = AUDIO_SOURCE_VOICE_COMMUNICATION,
65*79330504STreehugger Robot 
66*79330504STreehugger Robot     AUDIO_SOURCE_LIST_END  // must be last - used to validate audio source type
67*79330504STreehugger Robot };
68*79330504STreehugger Robot 
69*79330504STreehugger Robot class AudioSystem {
70*79330504STreehugger Robot public:
71*79330504STreehugger Robot #if 1
72*79330504STreehugger Robot     enum stream_type {
73*79330504STreehugger Robot         DEFAULT          =-1,
74*79330504STreehugger Robot         VOICE_CALL       = 0,
75*79330504STreehugger Robot         SYSTEM           = 1,
76*79330504STreehugger Robot         RING             = 2,
77*79330504STreehugger Robot         MUSIC            = 3,
78*79330504STreehugger Robot         ALARM            = 4,
79*79330504STreehugger Robot         NOTIFICATION     = 5,
80*79330504STreehugger Robot         BLUETOOTH_SCO    = 6,
81*79330504STreehugger Robot         ENFORCED_AUDIBLE = 7, // Sounds that cannot be muted by user and must be routed to speaker
82*79330504STreehugger Robot         DTMF             = 8,
83*79330504STreehugger Robot         TTS              = 9,
84*79330504STreehugger Robot         NUM_STREAM_TYPES
85*79330504STreehugger Robot     };
86*79330504STreehugger Robot 
87*79330504STreehugger Robot     // Audio sub formats (see AudioSystem::audio_format).
88*79330504STreehugger Robot     enum pcm_sub_format {
89*79330504STreehugger Robot         PCM_SUB_16_BIT          = 0x1, // must be 1 for backward compatibility
90*79330504STreehugger Robot         PCM_SUB_8_BIT           = 0x2, // must be 2 for backward compatibility
91*79330504STreehugger Robot     };
92*79330504STreehugger Robot 
93*79330504STreehugger Robot     enum audio_sessions {
94*79330504STreehugger Robot         SESSION_OUTPUT_STAGE = AUDIO_SESSION_OUTPUT_STAGE,
95*79330504STreehugger Robot         SESSION_OUTPUT_MIX = AUDIO_SESSION_OUTPUT_MIX,
96*79330504STreehugger Robot     };
97*79330504STreehugger Robot 
98*79330504STreehugger Robot     // MP3 sub format field definition : can use 11 LSBs in the same way as MP3 frame header to specify
99*79330504STreehugger Robot     // bit rate, stereo mode, version...
100*79330504STreehugger Robot     enum mp3_sub_format {
101*79330504STreehugger Robot         //TODO
102*79330504STreehugger Robot     };
103*79330504STreehugger Robot 
104*79330504STreehugger Robot     // AMR NB/WB sub format field definition: specify frame block interleaving, bandwidth efficient or octet aligned,
105*79330504STreehugger Robot     // encoding mode for recording...
106*79330504STreehugger Robot     enum amr_sub_format {
107*79330504STreehugger Robot         //TODO
108*79330504STreehugger Robot     };
109*79330504STreehugger Robot 
110*79330504STreehugger Robot     // AAC sub format field definition: specify profile or bitrate for recording...
111*79330504STreehugger Robot     enum aac_sub_format {
112*79330504STreehugger Robot         //TODO
113*79330504STreehugger Robot     };
114*79330504STreehugger Robot 
115*79330504STreehugger Robot     // VORBIS sub format field definition: specify quality for recording...
116*79330504STreehugger Robot     enum vorbis_sub_format {
117*79330504STreehugger Robot         //TODO
118*79330504STreehugger Robot     };
119*79330504STreehugger Robot 
120*79330504STreehugger Robot     // Audio format consists in a main format field (upper 8 bits) and a sub format field (lower 24 bits).
121*79330504STreehugger Robot     // The main format indicates the main codec type. The sub format field indicates options and parameters
122*79330504STreehugger Robot     // for each format. The sub format is mainly used for record to indicate for instance the requested bitrate
123*79330504STreehugger Robot     // or profile. It can also be used for certain formats to give informations not present in the encoded
124*79330504STreehugger Robot     // audio stream (e.g. octet alignement for AMR).
125*79330504STreehugger Robot     enum audio_format {
126*79330504STreehugger Robot         INVALID_FORMAT      = -1,
127*79330504STreehugger Robot         FORMAT_DEFAULT      = 0,
128*79330504STreehugger Robot         PCM                 = 0x00000000, // must be 0 for backward compatibility
129*79330504STreehugger Robot         MP3                 = 0x01000000,
130*79330504STreehugger Robot         AMR_NB              = 0x02000000,
131*79330504STreehugger Robot         AMR_WB              = 0x03000000,
132*79330504STreehugger Robot         AAC                 = 0x04000000,
133*79330504STreehugger Robot         HE_AAC_V1           = 0x05000000,
134*79330504STreehugger Robot         HE_AAC_V2           = 0x06000000,
135*79330504STreehugger Robot         VORBIS              = 0x07000000,
136*79330504STreehugger Robot         MAIN_FORMAT_MASK    = 0xFF000000,
137*79330504STreehugger Robot         SUB_FORMAT_MASK     = 0x00FFFFFF,
138*79330504STreehugger Robot         // Aliases
139*79330504STreehugger Robot         PCM_16_BIT          = (PCM|PCM_SUB_16_BIT),
140*79330504STreehugger Robot         PCM_8_BIT          = (PCM|PCM_SUB_8_BIT)
141*79330504STreehugger Robot     };
142*79330504STreehugger Robot 
143*79330504STreehugger Robot     enum audio_channels {
144*79330504STreehugger Robot         // output channels
145*79330504STreehugger Robot         CHANNEL_OUT_FRONT_LEFT            = 0x1,
146*79330504STreehugger Robot         CHANNEL_OUT_FRONT_RIGHT           = 0x2,
147*79330504STreehugger Robot         CHANNEL_OUT_FRONT_CENTER          = 0x4,
148*79330504STreehugger Robot         CHANNEL_OUT_LOW_FREQUENCY         = 0x8,
149*79330504STreehugger Robot         CHANNEL_OUT_BACK_LEFT             = 0x10,
150*79330504STreehugger Robot         CHANNEL_OUT_BACK_RIGHT            = 0x20,
151*79330504STreehugger Robot         CHANNEL_OUT_FRONT_LEFT_OF_CENTER  = 0x40,
152*79330504STreehugger Robot         CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x80,
153*79330504STreehugger Robot         CHANNEL_OUT_BACK_CENTER           = 0x100,
154*79330504STreehugger Robot         CHANNEL_OUT_SIDE_LEFT             = 0x200,
155*79330504STreehugger Robot         CHANNEL_OUT_SIDE_RIGHT            = 0x400,
156*79330504STreehugger Robot         CHANNEL_OUT_TOP_CENTER            = 0x800,
157*79330504STreehugger Robot         CHANNEL_OUT_TOP_FRONT_LEFT        = 0x1000,
158*79330504STreehugger Robot         CHANNEL_OUT_TOP_FRONT_CENTER      = 0x2000,
159*79330504STreehugger Robot         CHANNEL_OUT_TOP_FRONT_RIGHT       = 0x4000,
160*79330504STreehugger Robot         CHANNEL_OUT_TOP_BACK_LEFT         = 0x8000,
161*79330504STreehugger Robot         CHANNEL_OUT_TOP_BACK_CENTER       = 0x10000,
162*79330504STreehugger Robot         CHANNEL_OUT_TOP_BACK_RIGHT        = 0x20000,
163*79330504STreehugger Robot 
164*79330504STreehugger Robot         CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT,
165*79330504STreehugger Robot         CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT),
166*79330504STreehugger Robot         CHANNEL_OUT_QUAD = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
167*79330504STreehugger Robot                 CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT),
168*79330504STreehugger Robot         CHANNEL_OUT_SURROUND = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
169*79330504STreehugger Robot                 CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_CENTER),
170*79330504STreehugger Robot         CHANNEL_OUT_5POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
171*79330504STreehugger Robot                 CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
172*79330504STreehugger Robot                 CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT),
173*79330504STreehugger Robot         // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1
174*79330504STreehugger Robot         CHANNEL_OUT_7POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
175*79330504STreehugger Robot                 CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
176*79330504STreehugger Robot                 CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
177*79330504STreehugger Robot                 CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT),
178*79330504STreehugger Robot         CHANNEL_OUT_ALL = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
179*79330504STreehugger Robot                 CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT |
180*79330504STreehugger Robot                 CHANNEL_OUT_BACK_RIGHT | CHANNEL_OUT_FRONT_LEFT_OF_CENTER |
181*79330504STreehugger Robot                 CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | CHANNEL_OUT_BACK_CENTER |
182*79330504STreehugger Robot                 CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT | CHANNEL_OUT_TOP_CENTER |
183*79330504STreehugger Robot                 CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_CENTER |
184*79330504STreehugger Robot                 CHANNEL_OUT_TOP_FRONT_RIGHT | CHANNEL_OUT_TOP_BACK_LEFT |
185*79330504STreehugger Robot                 CHANNEL_OUT_TOP_BACK_CENTER | CHANNEL_OUT_TOP_BACK_RIGHT),
186*79330504STreehugger Robot 
187*79330504STreehugger Robot         // input channels
188*79330504STreehugger Robot         CHANNEL_IN_LEFT = 0x4,
189*79330504STreehugger Robot         CHANNEL_IN_RIGHT = 0x8,
190*79330504STreehugger Robot         CHANNEL_IN_FRONT = 0x10,
191*79330504STreehugger Robot         CHANNEL_IN_BACK = 0x20,
192*79330504STreehugger Robot         CHANNEL_IN_LEFT_PROCESSED = 0x40,
193*79330504STreehugger Robot         CHANNEL_IN_RIGHT_PROCESSED = 0x80,
194*79330504STreehugger Robot         CHANNEL_IN_FRONT_PROCESSED = 0x100,
195*79330504STreehugger Robot         CHANNEL_IN_BACK_PROCESSED = 0x200,
196*79330504STreehugger Robot         CHANNEL_IN_PRESSURE = 0x400,
197*79330504STreehugger Robot         CHANNEL_IN_X_AXIS = 0x800,
198*79330504STreehugger Robot         CHANNEL_IN_Y_AXIS = 0x1000,
199*79330504STreehugger Robot         CHANNEL_IN_Z_AXIS = 0x2000,
200*79330504STreehugger Robot         CHANNEL_IN_VOICE_UPLINK = 0x4000,
201*79330504STreehugger Robot         CHANNEL_IN_VOICE_DNLINK = 0x8000,
202*79330504STreehugger Robot         CHANNEL_IN_MONO = CHANNEL_IN_FRONT,
203*79330504STreehugger Robot         CHANNEL_IN_STEREO = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT),
204*79330504STreehugger Robot         CHANNEL_IN_ALL = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT | CHANNEL_IN_FRONT | CHANNEL_IN_BACK|
205*79330504STreehugger Robot                 CHANNEL_IN_LEFT_PROCESSED | CHANNEL_IN_RIGHT_PROCESSED | CHANNEL_IN_FRONT_PROCESSED | CHANNEL_IN_BACK_PROCESSED|
206*79330504STreehugger Robot                 CHANNEL_IN_PRESSURE | CHANNEL_IN_X_AXIS | CHANNEL_IN_Y_AXIS | CHANNEL_IN_Z_AXIS |
207*79330504STreehugger Robot                 CHANNEL_IN_VOICE_UPLINK | CHANNEL_IN_VOICE_DNLINK)
208*79330504STreehugger Robot     };
209*79330504STreehugger Robot 
210*79330504STreehugger Robot     enum audio_mode {
211*79330504STreehugger Robot         MODE_INVALID = -2,
212*79330504STreehugger Robot         MODE_CURRENT = -1,
213*79330504STreehugger Robot         MODE_NORMAL = 0,
214*79330504STreehugger Robot         MODE_RINGTONE,
215*79330504STreehugger Robot         MODE_IN_CALL,
216*79330504STreehugger Robot         MODE_IN_COMMUNICATION,
217*79330504STreehugger Robot         NUM_MODES  // not a valid entry, denotes end-of-list
218*79330504STreehugger Robot     };
219*79330504STreehugger Robot 
220*79330504STreehugger Robot     enum audio_in_acoustics {
221*79330504STreehugger Robot         AGC_ENABLE    = 0x0001,
222*79330504STreehugger Robot         AGC_DISABLE   = 0,
223*79330504STreehugger Robot         NS_ENABLE     = 0x0002,
224*79330504STreehugger Robot         NS_DISABLE    = 0,
225*79330504STreehugger Robot         TX_IIR_ENABLE = 0x0004,
226*79330504STreehugger Robot         TX_DISABLE    = 0
227*79330504STreehugger Robot     };
228*79330504STreehugger Robot 
229*79330504STreehugger Robot     // DO NOT USE: the "audio_devices" enumeration below is obsolete, use type "audio_devices_t" and
230*79330504STreehugger Robot     //   audio device enumeration from system/audio.h instead.
231*79330504STreehugger Robot     enum audio_devices {
232*79330504STreehugger Robot         // output devices
233*79330504STreehugger Robot         DEVICE_OUT_EARPIECE = 0x1,
234*79330504STreehugger Robot         DEVICE_OUT_SPEAKER = 0x2,
235*79330504STreehugger Robot         DEVICE_OUT_WIRED_HEADSET = 0x4,
236*79330504STreehugger Robot         DEVICE_OUT_WIRED_HEADPHONE = 0x8,
237*79330504STreehugger Robot         DEVICE_OUT_BLUETOOTH_SCO = 0x10,
238*79330504STreehugger Robot         DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20,
239*79330504STreehugger Robot         DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40,
240*79330504STreehugger Robot         DEVICE_OUT_BLUETOOTH_A2DP = 0x80,
241*79330504STreehugger Robot         DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100,
242*79330504STreehugger Robot         DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200,
243*79330504STreehugger Robot         DEVICE_OUT_AUX_DIGITAL = 0x400,
244*79330504STreehugger Robot         DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800,
245*79330504STreehugger Robot         DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000,
246*79330504STreehugger Robot         DEVICE_OUT_DEFAULT = 0x8000,
247*79330504STreehugger Robot         DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET |
248*79330504STreehugger Robot                 DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
249*79330504STreehugger Robot                 DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
250*79330504STreehugger Robot                 DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL |
251*79330504STreehugger Robot                 DEVICE_OUT_ANLG_DOCK_HEADSET | DEVICE_OUT_DGTL_DOCK_HEADSET |
252*79330504STreehugger Robot                 DEVICE_OUT_DEFAULT),
253*79330504STreehugger Robot         DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
254*79330504STreehugger Robot                 DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
255*79330504STreehugger Robot 
256*79330504STreehugger Robot         // input devices
257*79330504STreehugger Robot         DEVICE_IN_COMMUNICATION = 0x10000,
258*79330504STreehugger Robot         DEVICE_IN_AMBIENT = 0x20000,
259*79330504STreehugger Robot         DEVICE_IN_BUILTIN_MIC = 0x40000,
260*79330504STreehugger Robot         DEVICE_IN_BLUETOOTH_SCO_HEADSET = 0x80000,
261*79330504STreehugger Robot         DEVICE_IN_WIRED_HEADSET = 0x100000,
262*79330504STreehugger Robot         DEVICE_IN_AUX_DIGITAL = 0x200000,
263*79330504STreehugger Robot         DEVICE_IN_VOICE_CALL = 0x400000,
264*79330504STreehugger Robot         DEVICE_IN_BACK_MIC = 0x800000,
265*79330504STreehugger Robot         DEVICE_IN_DEFAULT = 0x80000000,
266*79330504STreehugger Robot 
267*79330504STreehugger Robot         DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | DEVICE_IN_AMBIENT | DEVICE_IN_BUILTIN_MIC |
268*79330504STreehugger Robot                 DEVICE_IN_BLUETOOTH_SCO_HEADSET | DEVICE_IN_WIRED_HEADSET | DEVICE_IN_AUX_DIGITAL |
269*79330504STreehugger Robot                 DEVICE_IN_VOICE_CALL | DEVICE_IN_BACK_MIC | DEVICE_IN_DEFAULT)
270*79330504STreehugger Robot     };
271*79330504STreehugger Robot 
272*79330504STreehugger Robot     // request to open a direct output with getOutput() (by opposition to sharing an output with other AudioTracks)
273*79330504STreehugger Robot     enum output_flags {
274*79330504STreehugger Robot         OUTPUT_FLAG_INDIRECT = 0x0,
275*79330504STreehugger Robot         OUTPUT_FLAG_DIRECT = 0x1
276*79330504STreehugger Robot     };
277*79330504STreehugger Robot 
278*79330504STreehugger Robot     // device categories used for setForceUse()
279*79330504STreehugger Robot     enum forced_config {
280*79330504STreehugger Robot         FORCE_NONE,
281*79330504STreehugger Robot         FORCE_SPEAKER,
282*79330504STreehugger Robot         FORCE_HEADPHONES,
283*79330504STreehugger Robot         FORCE_BT_SCO,
284*79330504STreehugger Robot         FORCE_BT_A2DP,
285*79330504STreehugger Robot         FORCE_WIRED_ACCESSORY,
286*79330504STreehugger Robot         FORCE_BT_CAR_DOCK,
287*79330504STreehugger Robot         FORCE_BT_DESK_DOCK,
288*79330504STreehugger Robot         FORCE_ANALOG_DOCK,
289*79330504STreehugger Robot         FORCE_DIGITAL_DOCK,
290*79330504STreehugger Robot         FORCE_NO_BT_A2DP,
291*79330504STreehugger Robot         FORCE_SYSTEM_ENFORCED,
292*79330504STreehugger Robot         NUM_FORCE_CONFIG,
293*79330504STreehugger Robot         FORCE_DEFAULT = FORCE_NONE
294*79330504STreehugger Robot     };
295*79330504STreehugger Robot 
296*79330504STreehugger Robot     // usages used for setForceUse()
297*79330504STreehugger Robot     enum force_use {
298*79330504STreehugger Robot         FOR_COMMUNICATION,
299*79330504STreehugger Robot         FOR_MEDIA,
300*79330504STreehugger Robot         FOR_RECORD,
301*79330504STreehugger Robot         FOR_DOCK,
302*79330504STreehugger Robot         FOR_SYSTEM,
303*79330504STreehugger Robot         NUM_FORCE_USE
304*79330504STreehugger Robot     };
305*79330504STreehugger Robot 
306*79330504STreehugger Robot     //
307*79330504STreehugger Robot     // AudioPolicyService interface
308*79330504STreehugger Robot     //
309*79330504STreehugger Robot 
310*79330504STreehugger Robot     // device connection states used for setDeviceConnectionState()
311*79330504STreehugger Robot     enum device_connection_state {
312*79330504STreehugger Robot         DEVICE_STATE_UNAVAILABLE,
313*79330504STreehugger Robot         DEVICE_STATE_AVAILABLE,
314*79330504STreehugger Robot         NUM_DEVICE_STATES
315*79330504STreehugger Robot     };
316*79330504STreehugger Robot 
317*79330504STreehugger Robot #endif
318*79330504STreehugger Robot 
popCount(uint32_t u)319*79330504STreehugger Robot     static uint32_t popCount(uint32_t u) {
320*79330504STreehugger Robot         return popcount(u);
321*79330504STreehugger Robot     }
322*79330504STreehugger Robot 
323*79330504STreehugger Robot #if 1
isOutputDevice(audio_devices device)324*79330504STreehugger Robot     static bool isOutputDevice(audio_devices device) {
325*79330504STreehugger Robot         if ((popcount(device) == 1) && ((device & ~DEVICE_OUT_ALL) == 0))
326*79330504STreehugger Robot              return true;
327*79330504STreehugger Robot          else
328*79330504STreehugger Robot              return false;
329*79330504STreehugger Robot     }
isInputDevice(audio_devices device)330*79330504STreehugger Robot     static bool isInputDevice(audio_devices device) {
331*79330504STreehugger Robot         if ((popcount(device) == 1) && ((device & ~DEVICE_IN_ALL) == 0))
332*79330504STreehugger Robot              return true;
333*79330504STreehugger Robot          else
334*79330504STreehugger Robot              return false;
335*79330504STreehugger Robot     }
isA2dpDevice(audio_devices device)336*79330504STreehugger Robot     static bool isA2dpDevice(audio_devices device) {
337*79330504STreehugger Robot         return audio_is_a2dp_device((audio_devices_t)device);
338*79330504STreehugger Robot     }
isBluetoothScoDevice(audio_devices device)339*79330504STreehugger Robot     static bool isBluetoothScoDevice(audio_devices device) {
340*79330504STreehugger Robot         return audio_is_bluetooth_sco_device((audio_devices_t)device);
341*79330504STreehugger Robot     }
isValidFormat(uint32_t format)342*79330504STreehugger Robot     static bool isValidFormat(uint32_t format) {
343*79330504STreehugger Robot         return audio_is_valid_format((audio_format_t) format);
344*79330504STreehugger Robot     }
isLinearPCM(uint32_t format)345*79330504STreehugger Robot     static bool isLinearPCM(uint32_t format) {
346*79330504STreehugger Robot         return audio_is_linear_pcm((audio_format_t) format);
347*79330504STreehugger Robot     }
isOutputChannel(audio_channel_mask_t channel)348*79330504STreehugger Robot     static bool isOutputChannel(audio_channel_mask_t channel) {
349*79330504STreehugger Robot         return audio_is_output_channel(channel);
350*79330504STreehugger Robot     }
isInputChannel(audio_channel_mask_t channel)351*79330504STreehugger Robot     static bool isInputChannel(audio_channel_mask_t channel) {
352*79330504STreehugger Robot         return audio_is_input_channel(channel);
353*79330504STreehugger Robot     }
354*79330504STreehugger Robot 
355*79330504STreehugger Robot #endif
356*79330504STreehugger Robot };
357*79330504STreehugger Robot 
358*79330504STreehugger Robot };  // namespace android
359*79330504STreehugger Robot 
360*79330504STreehugger Robot #endif // ANDROID_AUDIOSYSTEM_LEGACY_H_
361