1 /***************************************************************************
2  * Copyright (c) 2024 Microsoft Corporation
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the MIT License which is available at
6  * https://opensource.org/licenses/MIT.
7  *
8  * SPDX-License-Identifier: MIT
9  **************************************************************************/
10 
11 
12 /**************************************************************************/
13 /**************************************************************************/
14 /**                                                                       */
15 /** USBX Component                                                        */
16 /**                                                                       */
17 /**   Audio Class                                                         */
18 /**                                                                       */
19 /**************************************************************************/
20 /**************************************************************************/
21 
22 
23 /**************************************************************************/
24 /*                                                                        */
25 /*  COMPONENT DEFINITION                                   RELEASE        */
26 /*                                                                        */
27 /*    ux_class_audio20.h                                  PORTABLE C      */
28 /*                                                           6.1.12       */
29 /*  AUTHOR                                                                */
30 /*                                                                        */
31 /*    Chaoqiong Xiao, Microsoft Corporation                               */
32 /*                                                                        */
33 /*  DESCRIPTION                                                           */
34 /*                                                                        */
35 /*    This file contains all the header and structures used by the        */
36 /*    USBX Audio Class (UAC) 2.0.                                         */
37 /*                                                                        */
38 /*  RELEASE HISTORY                                                       */
39 /*                                                                        */
40 /*    DATE              NAME                      DESCRIPTION             */
41 /*                                                                        */
42 /*  07-29-2022     Chaoqiong Xiao           Initial Version 6.1.12        */
43 /*                                                                        */
44 /**************************************************************************/
45 
46 #ifndef UX_CLASS_AUDIO20_H
47 #define UX_CLASS_AUDIO20_H
48 
49 /* Define Audio Class Codes.  */
50 
51 #define UX_CLASS_AUDIO20_IP_VERSION_02_00                  0x20
52 
53 #define UX_CLASS_AUDIO20_CLASS                             0x01
54 #define UX_CLASS_AUDIO20_SUBCLASS_UNDEFINED                0x00
55 #define UX_CLASS_AUDIO20_SUBCLASS_AUDIOCONTROL             0x01
56 #define UX_CLASS_AUDIO20_SUBCLASS_AUDIOSTREAMING           0x02
57 #define UX_CLASS_AUDIO20_SUBCLASS_MIDISTREAMING            0x03
58 #define UX_CLASS_AUDIO20_PROTOCOL_UNDEFINED                0x00
59 #define UX_CLASS_AUDIO20_PROTOCOL_02_00                    UX_CLASS_AUDIO20_IP_VERSION_02_00
60 
61 
62 /* Define Audio Function (AF) code.  */
63 
64 #define UX_CLASS_AUDIO20_AF_VERSION_02_00                  UX_CLASS_AUDIO20_IP_VERSION_02_00
65 
66 
67 /* Define Audio Class function category codes.  */
68 
69 #define UX_CLASS_AUDIO20_CATEGORY_UNDEFINED                0x00
70 #define UX_CLASS_AUDIO20_CATEGORY_DESKTOP_SPEAKER          0x01
71 #define UX_CLASS_AUDIO20_CATEGORY_HOME_THEATER             0x02
72 #define UX_CLASS_AUDIO20_CATEGORY_MICROPHONE               0x03
73 #define UX_CLASS_AUDIO20_CATEGORY_HEADSET                  0x04
74 #define UX_CLASS_AUDIO20_CATEGORY_TELEPHONE                0x05
75 #define UX_CLASS_AUDIO20_CATEGORY_CONVERTER                0x06
76 #define UX_CLASS_AUDIO20_CATEGORY_VOICE_SOUND_RECORDER     0x07
77 #define UX_CLASS_AUDIO20_CATEGORY_I_O_BOX                  0x08
78 #define UX_CLASS_AUDIO20_CATEGORY_MUSICAL_INSTRUMENT       0x09
79 #define UX_CLASS_AUDIO20_CATEGORY_PRO_AUDIO                0x0A
80 #define UX_CLASS_AUDIO20_CATEGORY_AUDIO_VIDEO              0x0B
81 #define UX_CLASS_AUDIO20_CATEGORY_CONTROL_PANEL            0x0C
82 #define UX_CLASS_AUDIO20_CATEGORY_OTHER                    0xFF
83 
84 
85 /* Define Audio Class desctiptor types.  */
86 #define UX_CLASS_AUDIO20_CS_UNDEFINED                      0x20
87 #define UX_CLASS_AUDIO20_CS_DEVICE                         0x21
88 #define UX_CLASS_AUDIO20_CS_CONFIGURATION                  0x22
89 #define UX_CLASS_AUDIO20_CS_STRING                         0x23
90 #define UX_CLASS_AUDIO20_CS_INTERFACE                      0x24
91 #define UX_CLASS_AUDIO20_CS_ENDPOINT                       0x25
92 
93 
94 /* Define Audio Class AC interface descriptor subclasses.  */
95 
96 #define UX_CLASS_AUDIO20_AC_UNDEFINED                      0x00
97 #define UX_CLASS_AUDIO20_AC_HEADER                         0x01
98 #define UX_CLASS_AUDIO20_AC_INPUT_TERMINAL                 0x02
99 #define UX_CLASS_AUDIO20_AC_OUTPUT_TERMINAL                0x03
100 #define UX_CLASS_AUDIO20_AC_MIXER_UNIT                     0x04
101 #define UX_CLASS_AUDIO20_AC_SELECTOR_UNIT                  0x05
102 #define UX_CLASS_AUDIO20_AC_FEATURE_UNIT                   0x06
103 #define UX_CLASS_AUDIO20_AC_EFFECT_UNIT                    0x07
104 #define UX_CLASS_AUDIO20_AC_PROCESSING_UNIT                0x08
105 #define UX_CLASS_AUDIO20_AC_EXTENSION_UNIT                 0x09
106 #define UX_CLASS_AUDIO20_AC_CLOCK_SOURCE                   0x0A
107 #define UX_CLASS_AUDIO20_AC_CLOCK_SELECTOR                 0x0B
108 #define UX_CLASS_AUDIO20_AC_CLOCK_MULTIPLIER               0x0C
109 #define UX_CLASS_AUDIO20_AC_SAMPLE_RATE_CONVERTER          0x0D
110 
111 /* Define Audio Class Effect Unit (EU) Effect Types (ET).  */
112 
113 #define UX_CLASS_AUDIO20_EFFECT_UNDEFINED                  0x00
114 #define UX_CLASS_AUDIO20_EFFECT_PARAM_EQ_SECTION           0x01
115 #define UX_CLASS_AUDIO20_EFFECT_REVERBERATION              0x02
116 #define UX_CLASS_AUDIO20_EFFECT_MOD_DELAY                  0x03
117 #define UX_CLASS_AUDIO20_EFFECT_DYN_RANGE_COMP             0x04
118 
119 /* Define Audio Class Processing Unit (PU) Process Types (PT).  */
120 
121 #define UX_CLASS_AUDIO20_PROCESS_UNDEFINED                 0x00
122 #define UX_CLASS_AUDIO20_PROCESS_UP_DOWN_MIX               0x01
123 #define UX_CLASS_AUDIO20_PROCESS_DOLBY_PROLOGIC            0x02
124 #define UX_CLASS_AUDIO20_PROCESS_STEREO_EXTENDER           0x03
125 
126 
127 /* Define Audio Class AS interface descriptor subclasses.  */
128 
129 #define UX_CLASS_AUDIO20_AS_UNDEFINED                      0x00
130 #define UX_CLASS_AUDIO20_AS_GENERAL                        0x01
131 #define UX_CLASS_AUDIO20_AS_FORMAT_TYPE                    0x02
132 #define UX_CLASS_AUDIO20_AS_ENCODER                        0x03
133 #define UX_CLASS_AUDIO20_AS_DECODER                        0x04
134 
135 
136 /* Define Audio Class endpoint descriptor subtypes.  */
137 
138 #define UX_CLASS_AUDIO20_EP_UNDEFINED                      0x00
139 #define UX_CLASS_AUDIO20_EP_GENERAL                        0x01
140 
141 
142 /* Define Audio Class Encoder Type codes.  */
143 
144 #define UX_CLASS_AUDIO20_ENCODER_UNDEFINED                 0x00
145 #define UX_CLASS_AUDIO20_ENCODER_OTHER                     0x01
146 #define UX_CLASS_AUDIO20_ENCODER_MPEG                      0x02
147 #define UX_CLASS_AUDIO20_ENCODER_AC3                       0x03
148 #define UX_CLASS_AUDIO20_ENCODER_WMA                       0x04
149 #define UX_CLASS_AUDIO20_ENCODER_DTS                       0x05
150 
151 /* Define Audio Class Decoder Type codes.  */
152 
153 #define UX_CLASS_AUDIO20_DECODER_UNDEFINED                 0x00
154 #define UX_CLASS_AUDIO20_DECODER_OTHER                     0x01
155 #define UX_CLASS_AUDIO20_DECODER_MPEG                      0x02
156 #define UX_CLASS_AUDIO20_DECODER_AC3                       0x03
157 #define UX_CLASS_AUDIO20_DECODER_WMA                       0x04
158 #define UX_CLASS_AUDIO20_DECODER_DTS                       0x05
159 
160 
161 /* Define Audio Class request codes.  */
162 
163 #define UX_CLASS_AUDIO20_REQUEST_CODE_UNDEFINED            0x00
164 #define UX_CLASS_AUDIO20_CUR                               0x01
165 #define UX_CLASS_AUDIO20_RANGE                             0x02
166 #define UX_CLASS_AUDIO20_MEM                               0x03
167 
168 
169 /* Define Audio Class clock source control selectors.  */
170 
171 #define UX_CLASS_AUDIO20_CS_CONTROL_UNDEFINED              0x00
172 #define UX_CLASS_AUDIO20_CS_SAM_FREQ_CONTROL               0x01
173 #define UX_CLASS_AUDIO20_CS_CLOCK_VALID_CONTROL            0x02
174 
175 /* Define Audio Class clock selector control selectors.  */
176 
177 #define UX_CLASS_AUDIO20_CX_CONTROL_UNDEFINED              0x00
178 #define UX_CLASS_AUDIO20_CX_CLOCK_SELECTOR_CONTROL         0x01
179 
180 /* Define Audio Class clock multiplier control selectors.  */
181 
182 #define UX_CLASS_AUDIO20_CM_CONTROL_UNDEFINED              0x00
183 #define UX_CLASS_AUDIO20_CM_NUMERATOR_CONTROL              0x01
184 #define UX_CLASS_AUDIO20_CM_DENOMINATOR_CONTROL            0x02
185 
186 /* Define Audio Class terminal control selectors.  */
187 
188 #define UX_CLASS_AUDIO20_TE_CONTROL_UNDEFINED              0x00
189 #define UX_CLASS_AUDIO20_TE_COPY_PROTECT_CONTROL           0x01
190 #define UX_CLASS_AUDIO20_TE_CONNECTOR_CONTROL              0x02
191 #define UX_CLASS_AUDIO20_TE_OVERLOAD_CONTROL               0x03
192 #define UX_CLASS_AUDIO20_TE_CLUSTER_CONTROL                0x04
193 #define UX_CLASS_AUDIO20_TE_UNDERFLOW_CONTROL              0x05
194 #define UX_CLASS_AUDIO20_TE_OVERFLOW_CONTROL               0x06
195 #define UX_CLASS_AUDIO20_TE_LATENCY_CONTROL                0x07
196 
197 /* Define Audio Class mixer control selectors.  */
198 
199 #define UX_CLASS_AUDIO20_MU_CONTROL_UNDEFINED              0x00
200 #define UX_CLASS_AUDIO20_MU_MIXER_CONTROL                  0x01
201 #define UX_CLASS_AUDIO20_MU_CLUSTER_CONTROL                0x02
202 #define UX_CLASS_AUDIO20_MU_UNDERFLOW_CONTROL              0x03
203 #define UX_CLASS_AUDIO20_MU_OVERFLOW_CONTROL               0x04
204 #define UX_CLASS_AUDIO20_MU_LATENCY_CONTROL                0x05
205 
206 /* Define Audio Class selector control selectors.  */
207 
208 #define UX_CLASS_AUDIO20_SU_CONTROL_UNDEFINED              0x00
209 #define UX_CLASS_AUDIO20_SU_SELECTOR_CONTROL               0x01
210 #define UX_CLASS_AUDIO20_SU_LATENCY_CONTROL                0x02
211 
212 /* Define Audio Class feature unit control selectors.  */
213 
214 #define UX_CLASS_AUDIO20_FU_CONTROL_UNDEFINED              0x00
215 #define UX_CLASS_AUDIO20_FU_MUTE_CONTROL                   0x01
216 #define UX_CLASS_AUDIO20_FU_VOLUME_CONTROL                 0x02
217 #define UX_CLASS_AUDIO20_FU_BASS_CONTROL                   0x03
218 #define UX_CLASS_AUDIO20_FU_MID_CONTROL                    0x04
219 #define UX_CLASS_AUDIO20_FU_TREBLE_CONTROL                 0x05
220 #define UX_CLASS_AUDIO20_FU_GRAPHIC_EQUALIZER_CONTROL      0x06
221 #define UX_CLASS_AUDIO20_FU_AUTOMATIC_GAIN_CONTROL         0x07
222 #define UX_CLASS_AUDIO20_FU_DELAY_CONTROL                  0x08
223 #define UX_CLASS_AUDIO20_FU_BASS_BOOST_CONTROL             0x09
224 #define UX_CLASS_AUDIO20_FU_LOUNDNESS_CONTROL              0x0A
225 #define UX_CLASS_AUDIO20_FU_INPUT_GAIN_CONTROL             0x0B
226 #define UX_CLASS_AUDIO20_FU_INPUT_GAIN_PAD_CONTROL         0x0C
227 #define UX_CLASS_AUDIO20_FU_PHASE_INVERTER_CONTROL         0x0D
228 #define UX_CLASS_AUDIO20_FU_UNDERFLOW_CONTROL              0x0E
229 #define UX_CLASS_AUDIO20_FU_OVERFLOW_CONTROL               0x0F
230 #define UX_CLASS_AUDIO20_FU_LATENCY_CONTROL                0x10
231 
232 /* Define Audio Class effect unit control selectors.  */
233 
234 /* Define Audio Class parametric equalizer (PE) section effect unit control selectors.  */
235 #define UX_CLASS_AUDIO20_PE_CONTROL_UNDEFINED              0x00
236 #define UX_CLASS_AUDIO20_PE_ENABLE_CONTROL                 0x01
237 #define UX_CLASS_AUDIO20_PE_CENTERFREQ_CONTROL             0x02
238 #define UX_CLASS_AUDIO20_PE_QFACTOR_CONTROL                0x03
239 #define UX_CLASS_AUDIO20_PE_GAIN_CONTROL                   0x04
240 #define UX_CLASS_AUDIO20_PE_UNDERFLOW_CONTROL              0x05
241 #define UX_CLASS_AUDIO20_PE_OVERFLOW_CONTROL               0x06
242 #define UX_CLASS_AUDIO20_PE_LATENCY_CONTROL                0x07
243 
244 /* Define Audio Class reverberation (RV) section effect unit control selectors.  */
245 #define UX_CLASS_AUDIO20_RV_CONTROL_UNDEFINED              0x00
246 #define UX_CLASS_AUDIO20_RV_ENABLE_CONTROL                 0x01
247 #define UX_CLASS_AUDIO20_RV_TYPE_CONTROL                   0x02
248 #define UX_CLASS_AUDIO20_RV_LEVEL_CONTROL                  0x03
249 #define UX_CLASS_AUDIO20_RV_TIME_CONTROL                   0x04
250 #define UX_CLASS_AUDIO20_RV_FEEDBACK_CONTROL               0x05
251 #define UX_CLASS_AUDIO20_RV_PREDELAY_CONTROL               0x06
252 #define UX_CLASS_AUDIO20_RV_DENSITY_CONTROL                0x07
253 #define UX_CLASS_AUDIO20_RV_HIFREQ_ROLLOFF_CONTROL         0x08
254 #define UX_CLASS_AUDIO20_RV_UNDERFLOW_CONTROL              0x09
255 #define UX_CLASS_AUDIO20_RV_OVERFLOW_CONTROL               0x0A
256 #define UX_CLASS_AUDIO20_RV_LATENCY_CONTROL                0x0B
257 
258 /* Define Audio Class modulation delay (MD) effect unit control selectors.  */
259 
260 #define UX_CLASS_AUDIO20_MD_CONTROL_UNDEFINED              0x00
261 #define UX_CLASS_AUDIO20_MD_ENABLE_CONTROL                 0x01
262 #define UX_CLASS_AUDIO20_MD_BALANCE_CONTROL                0x02
263 #define UX_CLASS_AUDIO20_MD_RATE_CONTROL                   0x03
264 #define UX_CLASS_AUDIO20_MD_DEPTH_CONTROL                  0x04
265 #define UX_CLASS_AUDIO20_MD_TIME_CONTROL                   0x05
266 #define UX_CLASS_AUDIO20_MD_FEEDBACK_CONTROL               0x06
267 #define UX_CLASS_AUDIO20_MD_UNDERFLOW_CONTROL              0x07
268 #define UX_CLASS_AUDIO20_MD_OVERFLOW_CONTROL               0x08
269 #define UX_CLASS_AUDIO20_MD_LATENCY_CONTROL                0x09
270 
271 /* Define Audio Class dynamic range (DR) compressor effect unit control selectors.  */
272 
273 #define UX_CLASS_AUDIO20_DR_CONTROL_UNDEFINED              0x00
274 #define UX_CLASS_AUDIO20_DR_ENABLE_CONTROL                 0x01
275 #define UX_CLASS_AUDIO20_DR_COMPRESSION_RATE_CONTROL       0x02
276 #define UX_CLASS_AUDIO20_DR_MAXAMPL_CONTROL                0x03
277 #define UX_CLASS_AUDIO20_DR_THRESHOLD_CONTROL              0x04
278 #define UX_CLASS_AUDIO20_DR_ATTACK_TIME_CONTROL            0x05
279 #define UX_CLASS_AUDIO20_DR_RELEASE_TIME_CONTROL           0x06
280 #define UX_CLASS_AUDIO20_DR_UNDERFLOW_CONTROL              0x07
281 #define UX_CLASS_AUDIO20_DR_OVERFLOW_CONTROL               0x08
282 #define UX_CLASS_AUDIO20_DR_LATENCY_CONTROL                0x09
283 
284 /* Define Audio Class processing unit control selectors.  */
285 
286 /* Define Audio Class up/down-mix (UD) processing unit control selectors.  */
287 
288 #define UX_CLASS_AUDIO20_UD_CONTROL_UNDEFINED              0x00
289 #define UX_CLASS_AUDIO20_UD_ENABLE_CONTROL                 0x01
290 #define UX_CLASS_AUDIO20_UD_MODE_SELECT_CONTROL            0x02
291 #define UX_CLASS_AUDIO20_UD_CLUSTER_CONTROL                0x03
292 #define UX_CLASS_AUDIO20_UD_UNDERFLOW_CONTROL              0x04
293 #define UX_CLASS_AUDIO20_UD_OVERFLOW_CONTROL               0x05
294 #define UX_CLASS_AUDIO20_UD_LATENCY_CONTROL                0x06
295 
296 /* Define Audio Class dolby prologic (DP) processing unit control selectors.  */
297 
298 #define UX_CLASS_AUDIO20_DP_CONTROL_UNDEFINED              0x00
299 #define UX_CLASS_AUDIO20_DP_ENABLE_CONTROL                 0x01
300 #define UX_CLASS_AUDIO20_DP_MODE_SELECT_CONTROL            0x02
301 #define UX_CLASS_AUDIO20_DP_CLUSTER_CONTROL                0x03
302 #define UX_CLASS_AUDIO20_DP_UNDERFLOW_CONTROL              0x04
303 #define UX_CLASS_AUDIO20_DP_OVERFLOW_CONTROL               0x05
304 #define UX_CLASS_AUDIO20_DP_LATENCY_CONTROL                0x06
305 
306 /* Define Audio Class stereo extender (ST_EXT) processing unit control selectors.  */
307 
308 #define UX_CLASS_AUDIO20_ST_EXT_CONTROL_UNDEFINED          0x00
309 #define UX_CLASS_AUDIO20_ST_EXT_ENABLE_CONTROL             0x01
310 #define UX_CLASS_AUDIO20_ST_EXT_WIDTH_CONTROL              0x02
311 #define UX_CLASS_AUDIO20_ST_EXT_UNDERFLOW_CONTROL          0x03
312 #define UX_CLASS_AUDIO20_ST_EXT_OVERFLOW_CONTROL           0x04
313 #define UX_CLASS_AUDIO20_ST_EXT_LATENCY_CONTROL            0x05
314 
315 /* Define Audio Class extension unit (XU) control selectors.  */
316 
317 #define UX_CLASS_AUDIO20_XU_CONTROL_UNDEFINED              0x00
318 #define UX_CLASS_AUDIO20_XU_ENABLE_CONTROL                 0x01
319 #define UX_CLASS_AUDIO20_XU_CLUSTER_CONTROL                0x02
320 #define UX_CLASS_AUDIO20_XU_UNDERFLOW_CONTROL              0x03
321 #define UX_CLASS_AUDIO20_XU_OVERFLOW_CONTROL               0x04
322 #define UX_CLASS_AUDIO20_XU_LATENCY_CONTROL                0x05
323 
324 
325 /* Define Audio Class AudioStreaming interface control selectors.  */
326 
327 #define UX_CLASS_AUDIO20_AS_CONTROL_UNDEFINED              0x00
328 #define UX_CLASS_AUDIO20_AS_ACT_ALT_SETTING_CONTROL        0x01
329 #define UX_CLASS_AUDIO20_AS_VAL_ALT_SETTINGS_CONTROL       0x02
330 #define UX_CLASS_AUDIO20_AS_AUDIO_DATA_FORMAT_CONTROL      0x03
331 
332 /* Define Audio Class encoder (EN) control selectors.  */
333 
334 #define UX_CLASS_AUDIO20_EN_CONTROL_UNDEFINED              0x00
335 #define UX_CLASS_AUDIO20_EN_BIT_RATE_CONTROL               0x01
336 #define UX_CLASS_AUDIO20_EN_QUALITY_CONTROL                0x02
337 #define UX_CLASS_AUDIO20_EN_VBR_CONTROL                    0x03
338 #define UX_CLASS_AUDIO20_EN_TYPE_CONTROL                   0x04
339 #define UX_CLASS_AUDIO20_EN_UNDERFLOW_CONTROL              0x05
340 #define UX_CLASS_AUDIO20_EN_OVERFLOW_CONTROL               0x06
341 #define UX_CLASS_AUDIO20_EN_ENCODER_ERROR_CONTROL          0x07
342 #define UX_CLASS_AUDIO20_EN_PARAM1_CONTROL                 0x08
343 #define UX_CLASS_AUDIO20_EN_PARAM2_CONTROL                 0x09
344 #define UX_CLASS_AUDIO20_EN_PARAM3_CONTROL                 0x0A
345 #define UX_CLASS_AUDIO20_EN_PARAM4_CONTROL                 0x0B
346 #define UX_CLASS_AUDIO20_EN_PARAM5_CONTROL                 0x0C
347 #define UX_CLASS_AUDIO20_EN_PARAM6_CONTROL                 0x0D
348 #define UX_CLASS_AUDIO20_EN_PARAM7_CONTROL                 0x0E
349 #define UX_CLASS_AUDIO20_EN_PARAM8_CONTROL                 0x0F
350 
351 /* Define Audio Class decoder control selectors.  */
352 
353 /* Define Audio Class MPEG decoder (MD) control selectors.  */
354 
355 #define UX_CLASS_AUDIO20_MD_CONTROL_UNDEFINED              0x00
356 #define UX_CLASS_AUDIO20_MD_DUAL_CHANNEL_CONTROL           0x01
357 #define UX_CLASS_AUDIO20_MD_SECOND_STEREO_CONTROL          0x02
358 #define UX_CLASS_AUDIO20_MD_MULTILINGUAL_CONTROL           0x03
359 #define UX_CLASS_AUDIO20_MD_DYN_RANGE_CONTROL              0x04
360 #define UX_CLASS_AUDIO20_MD_SCALING_CONTROL                0x05
361 #define UX_CLASS_AUDIO20_MD_HILO_SCALING_CONTROL           0x06
362 #define UX_CLASS_AUDIO20_MD_UNDERFLOW_CONTROL              0x07
363 #define UX_CLASS_AUDIO20_MD_OVERFLOW_CONTROL               0x08
364 #define UX_CLASS_AUDIO20_MD_DECODER_ERROR_CONTROL          0x09
365 
366 /* Define Audio Class AC-3 decoder (AD) control selectors.  */
367 
368 #define UX_CLASS_AUDIO20_AD_CONTROL_UNDEFINED              0x00
369 #define UX_CLASS_AUDIO20_AD_MODE_CONTROL                   0x01
370 #define UX_CLASS_AUDIO20_AD_DYN_RANGE_CONTROL              0x02
371 #define UX_CLASS_AUDIO20_AD_SCALING_CONTROL                0x03
372 #define UX_CLASS_AUDIO20_AD_HILO_SCALING_CONTROL           0x04
373 #define UX_CLASS_AUDIO20_AD_UNDERFLOW_CONTROL              0x05
374 #define UX_CLASS_AUDIO20_AD_OVERFLOW_CONTROL               0x06
375 #define UX_CLASS_AUDIO20_AD_DECODER_ERROR_CONTROL          0x07
376 
377 /* Define Audio Class WMA decoder (WD) control selectors.  */
378 
379 #define UX_CLASS_AUDIO20_WD_CONTROL_UNDEFINED              0x00
380 #define UX_CLASS_AUDIO20_WD_UNDERFLOW_CONTROL              0x01
381 #define UX_CLASS_AUDIO20_WD_OVERFLOW_CONTROL               0x02
382 #define UX_CLASS_AUDIO20_WD_DECODER_ERROR_CONTROL          0x03
383 
384 /* Define Audio Class DTS decoder (DD) control selectors.  */
385 
386 #define UX_CLASS_AUDIO20_DD_CONTROL_UNDEFINED              0x00
387 #define UX_CLASS_AUDIO20_DD_UNDERFLOW_CONTROL              0x01
388 #define UX_CLASS_AUDIO20_DD_OVERFLOW_CONTROL               0x02
389 #define UX_CLASS_AUDIO20_DD_DECODER_ERROR_CONTROL          0x03
390 
391 
392 /* Define Audio Class endpoint control selectors.  */
393 
394 #define UX_CLASS_AUDIO20_EP_CONTROL_UNDEFINED              0x00
395 #define UX_CLASS_AUDIO20_EP_PITCH_CONTROL                  0x01
396 #define UX_CLASS_AUDIO20_EP_DATA_OVERRUN_CONTROL           0x02
397 #define UX_CLASS_AUDIO20_EP_DATA_UNDERRUN_CONTROL          0x03
398 
399 
400 /* Define Audio Class format type codes.  */
401 
402 #define UX_CLASS_AUDIO20_FORMAT_TYPE_UNDEFINED             0x00
403 #define UX_CLASS_AUDIO20_FORMAT_TYPE_I                     0x01
404 #define UX_CLASS_AUDIO20_FORMAT_TYPE_II                    0x02
405 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III                   0x03
406 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV                    0x04
407 #define UX_CLASS_AUDIO20_EXT_FORMAT_TYPE_I                 0x81
408 #define UX_CLASS_AUDIO20_EXT_FORMAT_TYPE_II                0x82
409 #define UX_CLASS_AUDIO20_EXT_FORMAT_TYPE_III               0x83
410 
411 
412 /* Define Audio Class encoding format type I bit allocations.  */
413 
414 #define UX_CLASS_AUDIO20_FORMAT_TYPE_I_PCM                          (1u << 0)
415 #define UX_CLASS_AUDIO20_FORMAT_TYPE_I_PCM8                         (1u << 1)
416 #define UX_CLASS_AUDIO20_FORMAT_TYPE_I_IEEE_FLOAT                   (1u << 2)
417 #define UX_CLASS_AUDIO20_FORMAT_TYPE_I_ALAW                         (1u << 3)
418 #define UX_CLASS_AUDIO20_FORMAT_TYPE_I_MULAW                        (1u << 4)
419 #define UX_CLASS_AUDIO20_FORMAT_TYPE_I_RAW                          (1u << 31)
420 
421 /* Define Audio Class encoding format type II bit allocations.  */
422 
423 #define UX_CLASS_AUDIO20_FORMAT_TYPE_II_MPEG                        (1u << 0)
424 #define UX_CLASS_AUDIO20_FORMAT_TYPE_II_AC3                         (1u << 1)
425 #define UX_CLASS_AUDIO20_FORMAT_TYPE_II_WMA                         (1u << 2)
426 #define UX_CLASS_AUDIO20_FORMAT_TYPE_II_DTS                         (1u << 3)
427 #define UX_CLASS_AUDIO20_FORMAT_TYPE_II_RAW_DATA                    (1u << 31)
428 
429 /* Define Audio Class encoding format type III bit allocations.  */
430 
431 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_AC3               (1u << 0)
432 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_MPEG1_LAYER1      (1u << 1)
433 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_MPEG1_LAYER2_3    (1u << 2)
434 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_MPEG2_NOEXT       (1u << 2)
435 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_MPEG2_EXT         (1u << 3)
436 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_MPEG2_AAC_ADTS    (1u << 4)
437 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_MPEG2_LAYER1_LS   (1u << 5)
438 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_MPEG2_LAYER2_3_LS (1u << 6)
439 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_DTS_I             (1u << 7)
440 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_DTS_II            (1u << 8)
441 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_DTS_III           (1u << 9)
442 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_ATRAC             (1u << 10)
443 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_IEC61937_ATRAC2_3          (1u << 11)
444 #define UX_CLASS_AUDIO20_FORMAT_TYPE_III_WMA                        (1u << 12)
445 
446 /* Define Audio Class encoding format type IV bit allocations.  */
447 
448 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_PCM                         (1u << 0)
449 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_PCM8                        (1u << 1)
450 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEEE_FLOAT                  (1u << 2)
451 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_ALAW                        (1u << 3)
452 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_MULAW                       (1u << 4)
453 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_MPEG                        (1u << 5)
454 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_AC3                         (1u << 6)
455 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_WMA                         (1u << 7)
456 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_AC3                (1u << 8)
457 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_MPEG1_LAYER1       (1u << 9)
458 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_MPEG1_LAYER2_3     (1u << 10)
459 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_MPEG2_NOEXT        (1u << 10)
460 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_MPEG2_EXT          (1u << 11)
461 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_MPEG2_AAC_ADTS     (1u << 12)
462 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_MPEG2_LAYER1_LS    (1u << 13)
463 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_MPEG2_LAYER2_3_LS  (1u << 14)
464 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_DTS_I              (1u << 15)
465 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_DTS_II             (1u << 16)
466 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_DTS_III            (1u << 17)
467 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_ATRAC              (1u << 18)
468 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC61937_ATRAC2_3           (1u << 19)
469 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_TYPE_III_WMA                (1u << 20)
470 #define UX_CLASS_AUDIO20_FORMAT_TYPE_IV_IEC60958_PCM                (1u << 21)
471 
472 /* Define Audio Class side band protocol codes.  */
473 
474 #define UX_CLASS_AUDIO20_SIDE_BAND_PROTOCOL_UNDEFINED               0x00
475 #define UX_CLASS_AUDIO20_SIDE_BAND_PRES_TIMESTAMP_PROTOCOL          0x01
476 
477 
478 /* Define Audio Class bmControls bit pair.  */
479 
480 #define UX_CLASS_AUDIO20_CONTROL_MASK                               0x3u
481 #define UX_CLASS_AUDIO20_CONTROL_NOT_PRESENT                        0x0u
482 #define UX_CLASS_AUDIO20_CONTROL_READ_ONLY                          0x1u
483 #define UX_CLASS_AUDIO20_CONTROL_PROGRAMMABLE                       0x3u
484 
485 /* Control position from control selector (CS).  */
486 #define UX_CLASS_AUDIO20_CONTROL_POS(cs)                            (((cs)-1) << 1)
487 
488 
489 
490 /* Class descriptor structures (packed).
491  * Typedefs to be used:
492  * - for byte               : UCHAR/CHAR
493  * - for word               : USHORT/SHORT
494  * - for double word (dword): ULONG/LONG
495  * - for 64-bit-width word  : ULONG64
496  * Field offset considerations inside descriptor:
497  * - Minimum fields alignment: byte (8-bit)
498  * - Field is not byte and not aligned : field declared as bytes array (UCHAR[])
499  * - Field is word and word aligned    : field declared as USHORT/SHORT
500  * - Field is dword and dword aligned  : field declared as ULONG/LONG
501  */
502 
503 /* Audio Class Audio Channel Cluster Descriptor.  */
504 
505 typedef struct UX_CLASS_AUDIO20_CHANNEL_CLUSTER_DESCRIPTOR_STRUCT
506 {
507     UCHAR           bNrChannels;
508     UCHAR           bmChannelConfig[4];
509     UCHAR           iChannelNames;
510 } UX_CLASS_AUDIO20_CHANNEL_CLUSTER_DESCRIPTOR;
511 
512 /* bmChannelConfig channel bits (F-Front,L-Left,R-Right,C-Center,B-Back,S-Side,T-Top).  */
513 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_FL                 (1u << 0)
514 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_FR                 (1u << 1)
515 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_FC                 (1u << 2)
516 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_LFE                (1u << 3) /* Low Frequency Effects  */
517 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_BL                 (1u << 4)
518 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_BR                 (1u << 5)
519 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_FLC                (1u << 6)
520 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_FRC                (1u << 7)
521 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_BC                 (1u << 8)
522 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_SL                 (1u << 9)
523 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_SR                 (1u << 10)
524 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TC                 (1u << 11)
525 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TFL                (1u << 12)
526 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TFC                (1u << 13)
527 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TFR                (1u << 14)
528 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TBL                (1u << 15)
529 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TBC                (1u << 16)
530 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TBR                (1u << 17)
531 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TFLC               (1u << 18)
532 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TFRC               (1u << 19)
533 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_LLFE               (1u << 20)
534 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_RLFE               (1u << 21)
535 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TSL                (1u << 22)
536 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_TSR                (1u << 23)
537 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_BottomC            (1u << 24) /* Bottom Center  */
538 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_BLC                (1u << 25)
539 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_BRC                (1u << 26)
540 #define UX_CLASS_AUDIO20_CHANNEL_CLUSTER_CHANNEL_RD                 (1u << 31) /* Raw Data  */
541 
542 /* Audio Class AC interface header descriptors.  */
543 
544 typedef struct UX_CLASS_AUDIO20_AC_HEADER_DESCRIPTOR_STRUCT
545 {
546     UCHAR           bLength;
547     UCHAR           bDescriptorType;
548     UCHAR           bDescriptorSubtype;
549     UCHAR           bcdADC[2];
550     UCHAR           bCategory;
551     USHORT          wTotalLength;
552     UCHAR           bmControls;
553 } UX_CLASS_AUDIO20_AC_HEADER_DESCRIPTOR;
554 
555 /* Define Audio Class clock source descriptor (CSD).  */
556 
557 typedef struct UX_CLASS_AUDIO20_AC_CLOCK_SOURCE_DESCRIPTOR_STRUCT
558 {
559     UCHAR           bLength;
560     UCHAR           bDescriptorType;
561     UCHAR           bDescriptorSubType;
562     UCHAR           bClockID;
563     UCHAR           bmAttributes;
564     UCHAR           bmControls;
565     UCHAR           bAssocTerminal;
566     UCHAR           iClockSource;
567 } UX_CLASS_AUDIO20_AC_CLOCK_SOURCE_DESCRIPTOR, UX_CLASS_AUDIO20_AC_CSD;
568 
569 /* CSD::bmAttributes.  */
570 #define UX_CLASS_AUDIO20_CSD_ATTR_CLOCK_TYPE_MASK                       (0x3u)
571 #define UX_CLASS_AUDIO20_CSD_ATTR_CLOCK_TYPE_EXTERNAL                   (0x0u)
572 #define UX_CLASS_AUDIO20_CSD_ATTR_CLOCK_TYPE_INTERNAL_FIXED             (0x1u)
573 #define UX_CLASS_AUDIO20_CSD_ATTR_CLOCK_TYPE_INTERNAL_VARIABLE          (0x2u)
574 #define UX_CLASS_AUDIO20_CSD_ATTR_CLOCK_TYPE_INTERNAL_PROGRAMMABLE      (0x3u)
575 #define UX_CLASS_AUDIO20_CSD_ATTR_CLOCK_SYNCH_TO_SOF                    (0x1u << 2)
576 
577 /* CSD::bmControls.  */
578 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_FREQ_POS                     (0)
579 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_FREQ_MASK                    (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_FREQ_POS)
580 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_FREQ(v)                      ((v) << UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_FREQ_POS)
581 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_VALIDITY_POS                 (2)
582 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_VALIDITY_MASK                (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_VALIDITY_POS)
583 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_VALIDITY(v)                  ((v) << UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_VALIDITY_POS)
584 
585 /* Define Audio Class clock selector descriptor (CXD, bNrInPins=1).  */
586 
587 typedef struct UX_CLASS_AUDIO20_AC_CLOCK_SELECTOR_DESCRIPTOR_STRUCT
588 {
589     UCHAR           bLength;
590     UCHAR           bDescriptorType;
591     UCHAR           bDescriptorSubType;
592     UCHAR           bClockID;
593     UCHAR           bNrInPins;
594     UCHAR           baCSourceID[1];
595     UCHAR           bmControls;
596     UCHAR           iClockSelector;
597 } UX_CLASS_AUDIO20_AC_CLOCK_SELECTOR_DESCRIPTOR, UX_CLASS_AUDIO20_AC_CXD;
598 
599 /* CXD::bmControls.  */
600 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_SELECTOR_POS                 (0)
601 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_SELECTOR_MASK                (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_SELECTOR_POS)
602 #define UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_SELECTOR(v)                  ((v) << UX_CLASS_AUDIO20_CSD_CONTROL_CLOCK_SELECTOR_POS)
603 
604 /* Define Audio Class clock multiplier descriptor (CMD).  */
605 
606 typedef struct UX_CLASS_AUDIO20_AC_CLOCK_MULTIPLIER_DESCRIPTOR_STRUCT
607 {
608     UCHAR           bLength;
609     UCHAR           bDescriptorType;
610     UCHAR           bDescriptorSubType;
611     UCHAR           bClockID;
612     UCHAR           bCSourceID;
613     UCHAR           bmControls;
614     UCHAR           iClockMultiplier;
615 } UX_CLASS_AUDIO20_AC_CLOCK_MULTIPLIER_DESCRIPTOR, UX_CLASS_AUDIO20_AC_CMD;
616 
617 /* CMD::bmControls.  */
618 #define UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_NUMERATOR_POS                (0)
619 #define UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_NUMERATOR_MASK               (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_NUMERATOR_POS)
620 #define UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_NUMERATOR(v)                 ((v) << UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_NUMERATOR_POS)
621 #define UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_DENOMINATOR_POS              (2)
622 #define UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_DENOMINATOR_MASK             (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_DENOMINATOR_POS)
623 #define UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_DENOMINATOR(v)               ((v) << UX_CLASS_AUDIO20_CMD_CONTROL_CLOCK_DENOMINATOR_POS)
624 
625 /* Define Audio Class input terminal descriptor (ITD).  */
626 
627 typedef struct UX_CLASS_AUDIO20_AC_INPUT_TERMINAL_DESCRIPTOR_STRUCT
628 {
629     UCHAR           bLength;
630     UCHAR           bDescriptorType;
631     UCHAR           bDescriptorSubType;
632     UCHAR           bTerminalID;
633     USHORT          wTerminalType;
634     UCHAR           bAssocTerminal;
635     UCHAR           bCSourceID;
636     UCHAR           bNrChannels;
637     UCHAR           bmChannelConfig[4];
638     UCHAR           iChannelNames;
639     USHORT          bmControls;
640     UCHAR           iTerminal;
641 } UX_CLASS_AUDIO20_AC_INPUT_TERMINAL_DESCRIPTOR, UX_CLASS_AUDIO20_AC_ITD;
642 
643 /* ITD::bmControls.  */
644 #define UX_CLASS_AUDIO20_ITD_CONTROL_COPY_PROTECT_POS                   (0)
645 #define UX_CLASS_AUDIO20_ITD_CONTROL_COPY_PROTECT_MASK                  (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ITD_CONTROL_COPY_PROTECT_POS)
646 #define UX_CLASS_AUDIO20_ITD_CONTROL_COPY_PROTECT(v)                    ((v) << UX_CLASS_AUDIO20_ITD_CONTROL_COPY_PROTECT_POS)
647 #define UX_CLASS_AUDIO20_ITD_CONTROL_CONNECTOR_POS                      (2)
648 #define UX_CLASS_AUDIO20_ITD_CONTROL_CONNECTOR_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ITD_CONTROL_CONNECTOR_POS)
649 #define UX_CLASS_AUDIO20_ITD_CONTROL_CONNECTOR(v)                       ((v) << UX_CLASS_AUDIO20_ITD_CONTROL_CONNECTOR_POS)
650 #define UX_CLASS_AUDIO20_ITD_CONTROL_OVERLOAD_POS                       (4)
651 #define UX_CLASS_AUDIO20_ITD_CONTROL_OVERLOAD_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ITD_CONTROL_OVERLOAD_POS)
652 #define UX_CLASS_AUDIO20_ITD_CONTROL_OVERLOAD(v)                        ((v) << UX_CLASS_AUDIO20_ITD_CONTROL_OVERLOAD_POS)
653 #define UX_CLASS_AUDIO20_ITD_CONTROL_CLUSTER_POS                        (6)
654 #define UX_CLASS_AUDIO20_ITD_CONTROL_CLUSTER_MASK                       (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ITD_CONTROL_CLUSTER_POS)
655 #define UX_CLASS_AUDIO20_ITD_CONTROL_CLUSTER(v)                         ((v) << UX_CLASS_AUDIO20_ITD_CONTROL_CLUSTER_POS)
656 #define UX_CLASS_AUDIO20_ITD_CONTROL_UNDERFLOW_POS                      (8)
657 #define UX_CLASS_AUDIO20_ITD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ITD_CONTROL_UNDERFLOW_POS)
658 #define UX_CLASS_AUDIO20_ITD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_ITD_CONTROL_UNDERFLOW_POS)
659 #define UX_CLASS_AUDIO20_ITD_CONTROL_OVERFLOW_POS                       (10)
660 #define UX_CLASS_AUDIO20_ITD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ITD_CONTROL_OVERFLOW_POS)
661 #define UX_CLASS_AUDIO20_ITD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_ITD_CONTROL_OVERFLOW_POS)
662 
663 /* Define Audio Class output terminal descriptor (OTD).  */
664 
665 typedef struct UX_CLASS_AUDIO20_AC_OUTPUT_TERMINAL_DESCRIPTOR_STRUCT
666 {
667     UCHAR           bLength;
668     UCHAR           bDescriptorType;
669     UCHAR           bDescriptorSubType;
670     UCHAR           bTerminalID;
671     USHORT          wTerminalType;
672     UCHAR           bAssocTerminal;
673     UCHAR           bSourceID;
674     UCHAR           bCSourceID;
675     UCHAR           bmControls[2];
676     UCHAR           iTerminal;
677 } UX_CLASS_AUDIO20_AC_OUTPUT_TERMINAL_DESCRIPTOR, UX_CLASS_AUDIO20_AC_OTD;
678 
679 /* OTD::bmControls.  */
680 #define UX_CLASS_AUDIO20_OTD_CONTROL_COPY_PROTECT_POS                   (0)
681 #define UX_CLASS_AUDIO20_OTD_CONTROL_COPY_PROTECT_MASK                  (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_OTD_CONTROL_COPY_PROTECT_POS)
682 #define UX_CLASS_AUDIO20_OTD_CONTROL_COPY_PROTECT(v)                    ((v) << UX_CLASS_AUDIO20_OTD_CONTROL_COPY_PROTECT_POS)
683 #define UX_CLASS_AUDIO20_OTD_CONTROL_CONNECTOR_POS                      (2)
684 #define UX_CLASS_AUDIO20_OTD_CONTROL_CONNECTOR_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_OTD_CONTROL_CONNECTOR_POS)
685 #define UX_CLASS_AUDIO20_OTD_CONTROL_CONNECTOR(v)                       ((v) << UX_CLASS_AUDIO20_OTD_CONTROL_CONNECTOR_POS)
686 #define UX_CLASS_AUDIO20_OTD_CONTROL_OVERLOAD_POS                       (4)
687 #define UX_CLASS_AUDIO20_OTD_CONTROL_OVERLOAD_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_OTD_CONTROL_OVERLOAD_POS)
688 #define UX_CLASS_AUDIO20_OTD_CONTROL_OVERLOAD(v)                        ((v) << UX_CLASS_AUDIO20_OTD_CONTROL_OVERLOAD_POS)
689 #define UX_CLASS_AUDIO20_OTD_CONTROL_UNDERFLOW_POS                      (6)
690 #define UX_CLASS_AUDIO20_OTD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_OTD_CONTROL_UNDERFLOW_POS)
691 #define UX_CLASS_AUDIO20_OTD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_OTD_CONTROL_UNDERFLOW_POS)
692 #define UX_CLASS_AUDIO20_OTD_CONTROL_OVERFLOW_POS                       (8)
693 #define UX_CLASS_AUDIO20_OTD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_OTD_CONTROL_OVERFLOW_POS)
694 #define UX_CLASS_AUDIO20_OTD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_OTD_CONTROL_OVERFLOW_POS)
695 
696 /* Define Audio Class mixer unit descriptor (MUD, bNrInPins=1, bmMixerControls N=1).  */
697 
698 typedef struct UX_CLASS_AUDIO20_AC_MIXER_UNIT_DESCRIPTOR_STRUCT
699 {
700     UCHAR           bLength;
701     UCHAR           bDescriptorType;
702     UCHAR           bDescriptorSubType;
703     UCHAR           bUnitID;
704     UCHAR           bNrInPins;
705     UCHAR           baSourceID[1];
706     UCHAR           bNrChannels;
707     UCHAR           bmChannelConfig[4];
708     UCHAR           iChannelNames;
709     UCHAR           bmMixerControls[1];
710     UCHAR           bmControls;
711     UCHAR           iMixer;
712 } UX_CLASS_AUDIO20_AC_MIXER_UNIT_DESCRIPTOR, UX_CLASS_AUDIO20_AC_MUD;
713 
714 /* MUD::bmControls.  */
715 #define UX_CLASS_AUDIO20_MUD_CONTROL_CLUSTER_POS                        (0)
716 #define UX_CLASS_AUDIO20_MUD_CONTROL_CLUSTER_MASK                       (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MUD_CONTROL_CLUSTER_POS)
717 #define UX_CLASS_AUDIO20_MUD_CONTROL_CLUSTER(v)                         ((v) << UX_CLASS_AUDIO20_MUD_CONTROL_CLUSTER_POS)
718 #define UX_CLASS_AUDIO20_MUD_CONTROL_UNDERFLOW_POS                      (2)
719 #define UX_CLASS_AUDIO20_MUD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MUD_CONTROL_UNDERFLOW_POS)
720 #define UX_CLASS_AUDIO20_MUD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_MUD_CONTROL_UNDERFLOW_POS)
721 #define UX_CLASS_AUDIO20_MUD_CONTROL_OVERFLOW_POS                       (4)
722 #define UX_CLASS_AUDIO20_MUD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MUD_CONTROL_OVERFLOW_POS)
723 #define UX_CLASS_AUDIO20_MUD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_MUD_CONTROL_OVERFLOW_POS)
724 
725 /* Define Audio Class selector unit descriptor (SUD, bNrInPins=1).  */
726 
727 typedef struct UX_CLASS_AUDIO20_AC_SELECTOR_UNIT_DESCRIPTOR_STRUCT
728 {
729     UCHAR           bLength;
730     UCHAR           bDescriptorType;
731     UCHAR           bDescriptorSubType;
732     UCHAR           bUnitID;
733     UCHAR           bNrInPins;
734     UCHAR           baSourceID[1];
735     UCHAR           bmControls;
736     UCHAR           iSelector;
737 } UX_CLASS_AUDIO20_AC_SELECTOR_UNIT_DESCRIPTOR, UX_CLASS_AUDIO20_AC_SUD;
738 
739 /* SUD::bmControls.  */
740 #define UX_CLASS_AUDIO20_SUD_CONTROL_SELECTOR_POS                       (0)
741 #define UX_CLASS_AUDIO20_SUD_CONTROL_SELECTOR_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_SUD_CONTROL_SELECTOR_POS)
742 #define UX_CLASS_AUDIO20_SUD_CONTROL_SELECTOR(v)                        ((v) << UX_CLASS_AUDIO20_SUD_CONTROL_SELECTOR_POS)
743 
744 /* Define Audio Class feature unit descriptor (FUD, ch=1).  */
745 
746 typedef struct UX_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR_STRUCT
747 {
748     UCHAR           bLength;
749     UCHAR           bDescriptorType;
750     UCHAR           bDescriptorSubType;
751     UCHAR           bUnitID;
752     UCHAR           bSourceID;
753     UCHAR           bmaControls[4 * 2];
754     UCHAR           iFeature;
755 } UX_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR, UX_CLASS_AUDIO20_AC_FUD;
756 
757 /* FUD::bmControls.  */
758 #define UX_CLASS_AUDIO20_FUD_CONTROL_MUTE_POS                           (0)
759 #define UX_CLASS_AUDIO20_FUD_CONTROL_MUTE_MASK                          (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_MUTE_POS)
760 #define UX_CLASS_AUDIO20_FUD_CONTROL_MUTE(v)                            ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_MUTE_POS)
761 #define UX_CLASS_AUDIO20_FUD_CONTROL_VOLUME_POS                         (2)
762 #define UX_CLASS_AUDIO20_FUD_CONTROL_VOLUME_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_VOLUME_POS)
763 #define UX_CLASS_AUDIO20_FUD_CONTROL_VOLUME(v)                          ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_VOLUME_POS)
764 #define UX_CLASS_AUDIO20_FUD_CONTROL_BASS_POS                           (4)
765 #define UX_CLASS_AUDIO20_FUD_CONTROL_BASS_MASK                          (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_BASS_POS)
766 #define UX_CLASS_AUDIO20_FUD_CONTROL_BASS(v)                            ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_BASS_POS)
767 #define UX_CLASS_AUDIO20_FUD_CONTROL_MID_POS                            (6)
768 #define UX_CLASS_AUDIO20_FUD_CONTROL_MID_MASK                           (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_MID_POS)
769 #define UX_CLASS_AUDIO20_FUD_CONTROL_MID(v)                             ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_MID_POS)
770 #define UX_CLASS_AUDIO20_FUD_CONTROL_TREBLE_POS                         (8)
771 #define UX_CLASS_AUDIO20_FUD_CONTROL_TREBLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_TREBLE_POS)
772 #define UX_CLASS_AUDIO20_FUD_CONTROL_TREBLE(v)                          ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_TREBLE_POS)
773 #define UX_CLASS_AUDIO20_FUD_CONTROL_GRAPHIC_EQ_POS                     (10)
774 #define UX_CLASS_AUDIO20_FUD_CONTROL_GRAPHIC_EQ_MASK                    (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_GRAPHIC_EQ_POS)
775 #define UX_CLASS_AUDIO20_FUD_CONTROL_GRAPHIC_EQ(v)                      ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_GRAPHIC_EQ_POS)
776 #define UX_CLASS_AUDIO20_FUD_CONTROL_AUTO_GAIN_POS                      (12)
777 #define UX_CLASS_AUDIO20_FUD_CONTROL_AUTO_GAIN_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_AUTO_GAIN_POS)
778 #define UX_CLASS_AUDIO20_FUD_CONTROL_AUTO_GAIN(v)                       ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_AUTO_GAIN_POS)
779 #define UX_CLASS_AUDIO20_FUD_CONTROL_DELAY_POS                          (14)
780 #define UX_CLASS_AUDIO20_FUD_CONTROL_DELAY_MASK                         (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_DELAY_POS)
781 #define UX_CLASS_AUDIO20_FUD_CONTROL_DELAY(v)                           ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_DELAY_POS)
782 #define UX_CLASS_AUDIO20_FUD_CONTROL_BASS_BOOST_POS                     (16)
783 #define UX_CLASS_AUDIO20_FUD_CONTROL_BASS_BOOST_MASK                    (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_BASS_BOOST_POS)
784 #define UX_CLASS_AUDIO20_FUD_CONTROL_BASS_BOOST(v)                      ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_BASS_BOOST_POS)
785 #define UX_CLASS_AUDIO20_FUD_CONTROL_LOUDNESS_POS                       (18)
786 #define UX_CLASS_AUDIO20_FUD_CONTROL_LOUDNESS_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_LOUDNESS_POS)
787 #define UX_CLASS_AUDIO20_FUD_CONTROL_LOUDNESS(v)                        ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_LOUDNESS_POS)
788 #define UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_POS                     (20)
789 #define UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_MASK                    (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_POS)
790 #define UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN(v)                      ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_POS)
791 #define UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_PAD_POS                 (22)
792 #define UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_PAD_MASK                (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_PAD_POS)
793 #define UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_PAD(v)                  ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_INPUT_GAIN_PAD_POS)
794 #define UX_CLASS_AUDIO20_FUD_CONTROL_PHASE_INVERTER_POS                 (24)
795 #define UX_CLASS_AUDIO20_FUD_CONTROL_PHASE_INVERTER_MASK                (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_PHASE_INVERTER_POS)
796 #define UX_CLASS_AUDIO20_FUD_CONTROL_PHASE_INVERTER(v)                  ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_PHASE_INVERTER_POS)
797 #define UX_CLASS_AUDIO20_FUD_CONTROL_UNDERFLOW_POS                      (26)
798 #define UX_CLASS_AUDIO20_FUD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_UNDERFLOW_POS)
799 #define UX_CLASS_AUDIO20_FUD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_UNDERFLOW_POS)
800 #define UX_CLASS_AUDIO20_FUD_CONTROL_OVERFLOW_POS                       (28)
801 #define UX_CLASS_AUDIO20_FUD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_FUD_CONTROL_OVERFLOW_POS)
802 #define UX_CLASS_AUDIO20_FUD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_FUD_CONTROL_OVERFLOW_POS)
803 
804 typedef struct UX_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR_1_STRUCT
805 {
806     UCHAR           bLength;
807     UCHAR           bDescriptorType;
808     UCHAR           bDescriptorSubType;
809     UCHAR           bUnitID;
810     UCHAR           bSourceID;
811     UCHAR           bmaControl0[4];
812     UCHAR           bmaControl1[4];
813     UCHAR           iFeature;
814 } UX_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR_1, UX_CLASS_AUDIO20_AC_FUD_1;
815 
816 typedef struct UX_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR_2_STRUCT
817 {
818     UCHAR           bLength;
819     UCHAR           bDescriptorType;
820     UCHAR           bDescriptorSubType;
821     UCHAR           bUnitID;
822     UCHAR           bSourceID;
823     UCHAR           bmaControl0[4];
824     UCHAR           bmaControl1[4];
825     UCHAR           bmaControl2[4];
826     UCHAR           iFeature;
827 } UX_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR_2, UX_CLASS_AUDIO20_AC_FUD_2;
828 
829 /* Define Audio Class sampling rate converter descriptor (RDU).  */
830 
831 typedef struct UX_CLASS_AUDIO20_AC_SAMPLING_RATE_CONVERTER_DESCRIPTOR_STRUCT
832 {
833     UCHAR           bLength;
834     UCHAR           bDescriptorType;
835     UCHAR           bDescriptorSubType;
836     UCHAR           bUnitID;
837     UCHAR           bSourceID;
838     UCHAR           bSourceInID;
839     UCHAR           bSourceOutID;
840     UCHAR           iSRC;
841 } UX_CLASS_AUDIO20_AC_SAMPLING_RATE_CONVERTER_DESCRIPTOR, UX_CLASS_AUDIO20_AC_RUD;
842 
843 /* Define Audio Class effect unit descriptor (EUD, ch=1).  */
844 
845 typedef struct UX_CLASS_AUDIO20_AC_EFFECT_UNIT_DESCRIPTOR_STRUCT
846 {
847     UCHAR           bLength;
848     UCHAR           bDescriptorType;
849     UCHAR           bDescriptorSubType;
850     UCHAR           bUnitID;
851     USHORT          wEffectType;
852     UCHAR           bSourceID;
853     UCHAR           bmaControls[4 * 2];
854     UCHAR           iEffects;
855 } UX_CLASS_AUDIO20_AC_EFFECT_UNIT_DESCRIPTOR, UX_CLASS_AUDIO20_AC_EUD;
856 
857 typedef struct UX_CLASS_AUDIO20_AC_EFFECT_UNIT_DESCRIPTOR_1_STRUCT
858 {
859     UCHAR           bLength;
860     UCHAR           bDescriptorType;
861     UCHAR           bDescriptorSubType;
862     UCHAR           bUnitID;
863     USHORT          wEffectType;
864     UCHAR           bSourceID;
865     UCHAR           bmaControl0[4];
866     UCHAR           bmaControl1[4];
867     UCHAR           iEffects;
868 } UX_CLASS_AUDIO20_AC_EFFECT_UNIT_DESCRIPTOR_1, UX_CLASS_AUDIO20_AC_EUD_1;
869 
870 typedef struct UX_CLASS_AUDIO20_AC_EFFECT_UNIT_DESCRIPTOR_2_STRUCT
871 {
872     UCHAR           bLength;
873     UCHAR           bDescriptorType;
874     UCHAR           bDescriptorSubType;
875     UCHAR           bUnitID;
876     USHORT          wEffectType;
877     UCHAR           bSourceID;
878     UCHAR           bmaControl0[4];
879     UCHAR           bmaControl1[4];
880     UCHAR           bmaControl2[4];
881     UCHAR           iEffects;
882 } UX_CLASS_AUDIO20_AC_EFFECT_UNIT_DESCRIPTOR_2, UX_CLASS_AUDIO20_AC_EUD_2;
883 
884 /* Parametric Equalizer Section (PEQS) EUD(PED)::bmaControls.  */
885 #define UX_CLASS_AUDIO20_PED_CONTROL_ENABLE_POS                         (0)
886 #define UX_CLASS_AUDIO20_PED_CONTROL_ENABLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_PED_CONTROL_ENABLE_POS)
887 #define UX_CLASS_AUDIO20_PED_CONTROL_ENABLE(v)                          ((v) << UX_CLASS_AUDIO20_PED_CONTROL_ENABLE_POS)
888 #define UX_CLASS_AUDIO20_PED_CONTROL_CENTER_FREQ_POS                    (2)
889 #define UX_CLASS_AUDIO20_PED_CONTROL_CENTER_FREQ_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_PED_CONTROL_CENTER_FREQ_POS)
890 #define UX_CLASS_AUDIO20_PED_CONTROL_CENTER_FREQ(v)                     ((v) << UX_CLASS_AUDIO20_PED_CONTROL_CENTER_FREQ_POS)
891 #define UX_CLASS_AUDIO20_PED_CONTROL_Q_FACTOR_POS                       (4)
892 #define UX_CLASS_AUDIO20_PED_CONTROL_Q_FACTOR_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_PED_CONTROL_Q_FACTOR_POS)
893 #define UX_CLASS_AUDIO20_PED_CONTROL_Q_FACTOR(v)                        ((v) << UX_CLASS_AUDIO20_PED_CONTROL_Q_FACTOR_POS)
894 #define UX_CLASS_AUDIO20_PED_CONTROL_GAIN_POS                           (6)
895 #define UX_CLASS_AUDIO20_PED_CONTROL_GAIN_MASK                          (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_PED_CONTROL_GAIN_POS)
896 #define UX_CLASS_AUDIO20_PED_CONTROL_GAIN(v)                            ((v) << UX_CLASS_AUDIO20_PED_CONTROL_GAIN_POS)
897 #define UX_CLASS_AUDIO20_PED_CONTROL_UNDERFLOW_POS                      (8)
898 #define UX_CLASS_AUDIO20_PED_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_PED_CONTROL_UNDERFLOW_POS)
899 #define UX_CLASS_AUDIO20_PED_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_PED_CONTROL_UNDERFLOW_POS)
900 #define UX_CLASS_AUDIO20_PED_CONTROL_OVERFLOW_POS                       (10)
901 #define UX_CLASS_AUDIO20_PED_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_PED_CONTROL_OVERFLOW_POS)
902 #define UX_CLASS_AUDIO20_PED_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_PED_CONTROL_OVERFLOW_POS)
903 
904 /* Reverberation EUD(RVD)::bmaControls.  */
905 #define UX_CLASS_AUDIO20_RVD_CONTROL_ENABLE_POS                         (0)
906 #define UX_CLASS_AUDIO20_RVD_CONTROL_ENABLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_ENABLE_POS)
907 #define UX_CLASS_AUDIO20_RVD_CONTROL_ENABLE(v)                          ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_ENABLE_POS)
908 #define UX_CLASS_AUDIO20_RVD_CONTROL_TYPE_POS                           (2)
909 #define UX_CLASS_AUDIO20_RVD_CONTROL_TYPE_MASK                          (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_TYPE_POS)
910 #define UX_CLASS_AUDIO20_RVD_CONTROL_TYPE(v)                            ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_TYPE_POS)
911 #define UX_CLASS_AUDIO20_RVD_CONTROL_LEVEL_POS                          (4)
912 #define UX_CLASS_AUDIO20_RVD_CONTROL_LEVEL_MASK                         (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_LEVEL_POS)
913 #define UX_CLASS_AUDIO20_RVD_CONTROL_LEVEL(v)                           ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_LEVEL_POS)
914 #define UX_CLASS_AUDIO20_RVD_CONTROL_TIME_POS                           (6)
915 #define UX_CLASS_AUDIO20_RVD_CONTROL_TIME_MASK                          (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_TIME_POS)
916 #define UX_CLASS_AUDIO20_RVD_CONTROL_TIME(v)                            ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_TIME_POS)
917 #define UX_CLASS_AUDIO20_RVD_CONTROL_DELAY_FEEDBACK_POS                 (8)
918 #define UX_CLASS_AUDIO20_RVD_CONTROL_DELAY_FEEDBACK_MASK                (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_DELAY_FEEDBACK_POS)
919 #define UX_CLASS_AUDIO20_RVD_CONTROL_DELAY_FEEDBACK(v)                  ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_DELAY_FEEDBACK_POS)
920 #define UX_CLASS_AUDIO20_RVD_CONTROL_PRE_DELAY_POS                      (10)
921 #define UX_CLASS_AUDIO20_RVD_CONTROL_PRE_DELAY_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_PRE_DELAY_POS)
922 #define UX_CLASS_AUDIO20_RVD_CONTROL_PRE_DELAY(v)                       ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_PRE_DELAY_POS)
923 #define UX_CLASS_AUDIO20_RVD_CONTROL_DENSITY_POS                        (12)
924 #define UX_CLASS_AUDIO20_RVD_CONTROL_DENSITY_MASK                       (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_DENSITY_POS)
925 #define UX_CLASS_AUDIO20_RVD_CONTROL_DENSITY(v)                         ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_DENSITY_POS)
926 #define UX_CLASS_AUDIO20_RVD_CONTROL_HI_FREQ_ROLL_OFF_POS               (14)
927 #define UX_CLASS_AUDIO20_RVD_CONTROL_HI_FREQ_ROLL_OFF_MASK              (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_HI_FREQ_ROLL_OFF_POS)
928 #define UX_CLASS_AUDIO20_RVD_CONTROL_HI_FREQ_ROLL_OFF(v)                ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_HI_FREQ_ROLL_OFF_POS)
929 #define UX_CLASS_AUDIO20_RVD_CONTROL_UNDERFLOW_POS                      (16)
930 #define UX_CLASS_AUDIO20_RVD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_UNDERFLOW_POS)
931 #define UX_CLASS_AUDIO20_RVD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_UNDERFLOW_POS)
932 #define UX_CLASS_AUDIO20_RVD_CONTROL_OVERFLOW_POS                       (18)
933 #define UX_CLASS_AUDIO20_RVD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_RVD_CONTROL_OVERFLOW_POS)
934 #define UX_CLASS_AUDIO20_RVD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_RVD_CONTROL_OVERFLOW_POS)
935 
936 /* Modulation Delay EUD(MDD)::bmaControls.  */
937 #define UX_CLASS_AUDIO20_MDD_CONTROL_ENABLE_POS                         (0)
938 #define UX_CLASS_AUDIO20_MDD_CONTROL_ENABLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MDD_CONTROL_ENABLE_POS)
939 #define UX_CLASS_AUDIO20_MDD_CONTROL_ENABLE(v)                          ((v) << UX_CLASS_AUDIO20_MDD_CONTROL_ENABLE_POS)
940 #define UX_CLASS_AUDIO20_MDD_CONTROL_BALANCE_POS                        (2)
941 #define UX_CLASS_AUDIO20_MDD_CONTROL_BALANCE_MASK                       (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MDD_CONTROL_BALANCE_POS)
942 #define UX_CLASS_AUDIO20_MDD_CONTROL_BALANCE(v)                         ((v) << UX_CLASS_AUDIO20_MDD_CONTROL_BALANCE_POS)
943 #define UX_CLASS_AUDIO20_MDD_CONTROL_RATE_POS                           (4)
944 #define UX_CLASS_AUDIO20_MDD_CONTROL_RATE_MASK                          (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MDD_CONTROL_RATE_POS)
945 #define UX_CLASS_AUDIO20_MDD_CONTROL_RATE(v)                            ((v) << UX_CLASS_AUDIO20_MDD_CONTROL_RATE_POS)
946 #define UX_CLASS_AUDIO20_MDD_CONTROL_DEPTH_POS                          (6)
947 #define UX_CLASS_AUDIO20_MDD_CONTROL_DEPTH_MASK                         (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MDD_CONTROL_DEPTH_POS)
948 #define UX_CLASS_AUDIO20_MDD_CONTROL_DEPTH(v)                           ((v) << UX_CLASS_AUDIO20_MDD_CONTROL_DEPTH_POS)
949 #define UX_CLASS_AUDIO20_MDD_CONTROL_TIME_POS                           (8)
950 #define UX_CLASS_AUDIO20_MDD_CONTROL_TIME_MASK                          (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MDD_CONTROL_TIME_POS)
951 #define UX_CLASS_AUDIO20_MDD_CONTROL_TIME(v)                            ((v) << UX_CLASS_AUDIO20_MDD_CONTROL_TIME_POS)
952 #define UX_CLASS_AUDIO20_MDD_CONTROL_FEEDBACK_LEVEL_POS                 (10)
953 #define UX_CLASS_AUDIO20_MDD_CONTROL_FEEDBACK_LEVEL_MASK                (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MDD_CONTROL_FEEDBACK_LEVEL_POS)
954 #define UX_CLASS_AUDIO20_MDD_CONTROL_FEEDBACK_LEVEL(v)                  ((v) << UX_CLASS_AUDIO20_MDD_CONTROL_FEEDBACK_LEVEL_POS)
955 #define UX_CLASS_AUDIO20_MDD_CONTROL_UNDERFLOW_POS                      (12)
956 #define UX_CLASS_AUDIO20_MDD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MDD_CONTROL_UNDERFLOW_POS)
957 #define UX_CLASS_AUDIO20_MDD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_MDD_CONTROL_UNDERFLOW_POS)
958 #define UX_CLASS_AUDIO20_MDD_CONTROL_OVERFLOW_POS                       (14)
959 #define UX_CLASS_AUDIO20_MDD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MDD_CONTROL_OVERFLOW_POS)
960 #define UX_CLASS_AUDIO20_MDD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_MDD_CONTROL_OVERFLOW_POS)
961 
962 /* Dynamic Range Compressor EUD(DRD)::bmaControls.  */
963 #define UX_CLASS_AUDIO20_DRD_CONTROL_ENABLE_POS                         (0)
964 #define UX_CLASS_AUDIO20_DRD_CONTROL_ENABLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DRD_CONTROL_ENABLE_POS)
965 #define UX_CLASS_AUDIO20_DRD_CONTROL_ENABLE(v)                          ((v) << UX_CLASS_AUDIO20_DRD_CONTROL_ENABLE_POS)
966 #define UX_CLASS_AUDIO20_DRD_CONTROL_COMPRESS_RATIO_POS                 (2)
967 #define UX_CLASS_AUDIO20_DRD_CONTROL_COMPRESS_RATIO_MASK                (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DRD_CONTROL_COMPRESS_RATIO_POS)
968 #define UX_CLASS_AUDIO20_DRD_CONTROL_COMPRESS_RATIO(v)                  ((v) << UX_CLASS_AUDIO20_DRD_CONTROL_COMPRESS_RATIO_POS)
969 #define UX_CLASS_AUDIO20_DRD_CONTROL_MAX_AMPL_POS                       (4)
970 #define UX_CLASS_AUDIO20_DRD_CONTROL_MAX_AMPL_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DRD_CONTROL_MAX_AMPL_POS)
971 #define UX_CLASS_AUDIO20_DRD_CONTROL_MAX_AMPL(v)                        ((v) << UX_CLASS_AUDIO20_DRD_CONTROL_MAX_AMPL_POS)
972 #define UX_CLASS_AUDIO20_DRD_CONTROL_THRESHOLD_POS                      (6)
973 #define UX_CLASS_AUDIO20_DRD_CONTROL_THRESHOLD_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DRD_CONTROL_THRESHOLD_POS)
974 #define UX_CLASS_AUDIO20_DRD_CONTROL_THRESHOLD(v)                       ((v) << UX_CLASS_AUDIO20_DRD_CONTROL_THRESHOLD_POS)
975 #define UX_CLASS_AUDIO20_DRD_CONTROL_ATTACK_TIME_POS                    (8)
976 #define UX_CLASS_AUDIO20_DRD_CONTROL_ATTACK_TIME_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DRD_CONTROL_ATTACK_TIME_POS)
977 #define UX_CLASS_AUDIO20_DRD_CONTROL_ATTACK_TIME(v)                     ((v) << UX_CLASS_AUDIO20_DRD_CONTROL_ATTACK_TIME_POS)
978 #define UX_CLASS_AUDIO20_DRD_CONTROL_RELEASE_TIME_POS                   (10)
979 #define UX_CLASS_AUDIO20_DRD_CONTROL_RELEASE_TIME_MASK                  (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DRD_CONTROL_RELEASE_TIME_POS)
980 #define UX_CLASS_AUDIO20_DRD_CONTROL_RELEASE_TIME(v)                    ((v) << UX_CLASS_AUDIO20_DRD_CONTROL_RELEASE_TIME_POS)
981 #define UX_CLASS_AUDIO20_DRD_CONTROL_UNDERFLOW_POS                      (12)
982 #define UX_CLASS_AUDIO20_DRD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DRD_CONTROL_UNDERFLOW_POS)
983 #define UX_CLASS_AUDIO20_DRD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_DRD_CONTROL_UNDERFLOW_POS)
984 #define UX_CLASS_AUDIO20_DRD_CONTROL_OVERFLOW_POS                       (14)
985 #define UX_CLASS_AUDIO20_DRD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DRD_CONTROL_OVERFLOW_POS)
986 #define UX_CLASS_AUDIO20_DRD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_DRD_CONTROL_OVERFLOW_POS)
987 
988 /* Define Audio Class processing unit descriptor (PUD, bNrInPins=1).  */
989 
990 typedef struct UX_CLASS_AUDIO20_AC_PROCESSING_UNIT_DESCRIPTOR_STRUCT
991 {
992     UCHAR           bLength;
993     UCHAR           bDescriptorType;
994     UCHAR           bDescriptorSubType;
995     UCHAR           bUnitID;
996     USHORT          wProcessType;
997     UCHAR           bNrInPins;
998     UCHAR           baSourceID[1];
999     UCHAR           bNrChannels;
1000     UCHAR           bmChannelConfig[4];
1001     UCHAR           iChannelNames;
1002     USHORT          bmControls;
1003     UCHAR           iProcessing;
1004 } UX_CLASS_AUDIO20_AC_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO20_AC_PUD;
1005 
1006 /* PDU::bmaControls.  */
1007 #define UX_CLASS_AUDIO20_PDU_CONTROL_ENABLE_POS                         (0)
1008 #define UX_CLASS_AUDIO20_PDU_CONTROL_ENABLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_PDU_CONTROL_ENABLE_POS)
1009 #define UX_CLASS_AUDIO20_PDU_CONTROL_ENABLE(v)                          ((v) << UX_CLASS_AUDIO20_PDU_CONTROL_ENABLE_POS)
1010 
1011 /* Define Audio Class up/down processing unit descriptor (PUD, bNrInPins=1, bNrModes=1).  */
1012 
1013 typedef struct UX_CLASS_AUDIO20_AC_UP_DOWN_PROCESSING_UNIT_DESCRIPTOR_STRUCT
1014 {
1015     UCHAR           bLength;
1016     UCHAR           bDescriptorType;
1017     UCHAR           bDescriptorSubType;
1018     UCHAR           bUnitID;
1019     USHORT          wProcessType;
1020     UCHAR           bNrInPins;
1021     UCHAR           baSourceID[1];
1022     UCHAR           bNrChannels;
1023     UCHAR           bmChannelConfig[4];
1024     UCHAR           iChannelNames;
1025     USHORT          bmControls;
1026     UCHAR           iProcessing;
1027     UCHAR           bNrModes;
1028     UCHAR           daModes[4 * 1];
1029 } UX_CLASS_AUDIO20_AC_UP_DOWN_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO20_AC_UDD;
1030 
1031 /* UDD::bmaControls.  */
1032 #define UX_CLASS_AUDIO20_UDD_CONTROL_ENABLE_POS                         (0)
1033 #define UX_CLASS_AUDIO20_UDD_CONTROL_ENABLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_UDD_CONTROL_ENABLE_POS)
1034 #define UX_CLASS_AUDIO20_UDD_CONTROL_ENABLE(v)                          ((v) << UX_CLASS_AUDIO20_UDD_CONTROL_ENABLE_POS)
1035 #define UX_CLASS_AUDIO20_UDD_CONTROL_MODE_SELECT_POS                    (2)
1036 #define UX_CLASS_AUDIO20_UDD_CONTROL_MODE_SELECT_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_UDD_CONTROL_MODE_SELECT_POS)
1037 #define UX_CLASS_AUDIO20_UDD_CONTROL_MODE_SELECT(v)                     ((v) << UX_CLASS_AUDIO20_UDD_CONTROL_MODE_SELECT_POS)
1038 #define UX_CLASS_AUDIO20_UDD_CONTROL_CLUSTER_POS                        (4)
1039 #define UX_CLASS_AUDIO20_UDD_CONTROL_CLUSTER_MASK                       (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_UDD_CONTROL_CLUSTER_POS)
1040 #define UX_CLASS_AUDIO20_UDD_CONTROL_CLUSTER(v)                         ((v) << UX_CLASS_AUDIO20_UDD_CONTROL_CLUSTER_POS)
1041 #define UX_CLASS_AUDIO20_UDD_CONTROL_UNDERFLOW_POS                      (6)
1042 #define UX_CLASS_AUDIO20_UDD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_UDD_CONTROL_UNDERFLOW_POS)
1043 #define UX_CLASS_AUDIO20_UDD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_UDD_CONTROL_UNDERFLOW_POS)
1044 #define UX_CLASS_AUDIO20_UDD_CONTROL_OVERFLOW_POS                       (8)
1045 #define UX_CLASS_AUDIO20_UDD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_UDD_CONTROL_OVERFLOW_POS)
1046 #define UX_CLASS_AUDIO20_UDD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_UDD_CONTROL_OVERFLOW_POS)
1047 
1048 /* Define Audio Class dolby prologic processing unit descriptor (DPD, bNrInPins=1, bNrModes=1).  */
1049 
1050 typedef struct UX_CLASS_AUDIO20_AC_DOLBY_PROCESSING_UNIT_DESCRIPTOR_STRUCT
1051 {
1052     UCHAR           bLength;
1053     UCHAR           bDescriptorType;
1054     UCHAR           bDescriptorSubType;
1055     UCHAR           bUnitID;
1056     USHORT          wProcessType;
1057     UCHAR           bNrInPins;
1058     UCHAR           baSourceID[1];
1059     UCHAR           bNrChannels;
1060     UCHAR           bmChannelConfig[4];
1061     UCHAR           iChannelNames;
1062     USHORT          bmControls;
1063     UCHAR           iProcessing;
1064     UCHAR           bNrModes;
1065     UCHAR           daModes[4 * 1];
1066 } UX_CLASS_AUDIO20_AC_DOLBY_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO20_AC_DPD;
1067 
1068 /* DPD::bmaControls.  */
1069 #define UX_CLASS_AUDIO20_DPD_CONTROL_ENABLE_POS                         (0)
1070 #define UX_CLASS_AUDIO20_DPD_CONTROL_ENABLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DPD_CONTROL_ENABLE_POS)
1071 #define UX_CLASS_AUDIO20_DPD_CONTROL_ENABLE(v)                          ((v) << UX_CLASS_AUDIO20_DPD_CONTROL_ENABLE_POS)
1072 #define UX_CLASS_AUDIO20_DPD_CONTROL_MODE_SELECT_POS                    (2)
1073 #define UX_CLASS_AUDIO20_DPD_CONTROL_MODE_SELECT_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DPD_CONTROL_MODE_SELECT_POS)
1074 #define UX_CLASS_AUDIO20_DPD_CONTROL_MODE_SELECT(v)                     ((v) << UX_CLASS_AUDIO20_DPD_CONTROL_MODE_SELECT_POS)
1075 #define UX_CLASS_AUDIO20_DPD_CONTROL_CLUSTER_POS                        (4)
1076 #define UX_CLASS_AUDIO20_DPD_CONTROL_CLUSTER_MASK                       (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DPD_CONTROL_CLUSTER_POS)
1077 #define UX_CLASS_AUDIO20_DPD_CONTROL_CLUSTER(v)                         ((v) << UX_CLASS_AUDIO20_DPD_CONTROL_CLUSTER_POS)
1078 #define UX_CLASS_AUDIO20_DPD_CONTROL_UNDERFLOW_POS                      (6)
1079 #define UX_CLASS_AUDIO20_DPD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DPD_CONTROL_UNDERFLOW_POS)
1080 #define UX_CLASS_AUDIO20_DPD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_DPD_CONTROL_UNDERFLOW_POS)
1081 #define UX_CLASS_AUDIO20_DPD_CONTROL_OVERFLOW_POS                       (8)
1082 #define UX_CLASS_AUDIO20_DPD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DPD_CONTROL_OVERFLOW_POS)
1083 #define UX_CLASS_AUDIO20_DPD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_DPD_CONTROL_OVERFLOW_POS)
1084 
1085 /* Define Audio Class Stereo Extender (ST_EXT) Processing Unit Descriptor.  */
1086 typedef UX_CLASS_AUDIO20_AC_PUD UX_CLASS_AUDIO20_AC_STEREO_EXT_PROCESSING_UNIT_DESCRIPTOR;
1087 typedef UX_CLASS_AUDIO20_AC_PUD UX_CLASS_AUDIO20_AC_ST_EXTD;
1088 
1089 /* ST_EXTD::bmaControls.  */
1090 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_ENABLE_POS                         (0)
1091 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_ENABLE_MASK                        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_ENABLE_POS)
1092 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_ENABLE(v)                          ((v) << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_ENABLE_POS)
1093 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_MODE_SELECT_POS                    (2)
1094 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_MODE_SELECT_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_MODE_SELECT_POS)
1095 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_MODE_SELECT(v)                     ((v) << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_MODE_SELECT_POS)
1096 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_CLUSTER_POS                        (4)
1097 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_CLUSTER_MASK                       (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_CLUSTER_POS)
1098 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_CLUSTER(v)                         ((v) << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_CLUSTER_POS)
1099 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_UNDERFLOW_POS                      (6)
1100 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_UNDERFLOW_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_UNDERFLOW_POS)
1101 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_UNDERFLOW(v)                       ((v) << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_UNDERFLOW_POS)
1102 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_OVERFLOW_POS                       (8)
1103 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_OVERFLOW_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_OVERFLOW_POS)
1104 #define UX_CLASS_AUDIO20_ST_EXTD_CONTROL_OVERFLOW(v)                        ((v) << UX_CLASS_AUDIO20_ST_EXTD_CONTROL_OVERFLOW_POS)
1105 
1106 /* Define Audio Class extension unit descriptor (XUD, bNrInPins=1).  */
1107 
1108 typedef struct UX_CLASS_AUDIO20_AC_EXTENSION_UNIT_DESCRIPTOR_STRUCT
1109 {
1110     UCHAR           bLength;
1111     UCHAR           bDescriptorType;
1112     UCHAR           bDescriptorSubType;
1113     UCHAR           bUnitID;
1114     USHORT          wExtensionCode;
1115     UCHAR           bNrInPins;
1116     UCHAR           baSourceID[1];
1117     UCHAR           bNrChannels;
1118     UCHAR           bmChannelConfig[4];
1119     UCHAR           iChannelNames;
1120     USHORT          bmControls;
1121     UCHAR           iExtension;
1122 } UX_CLASS_AUDIO20_AC_EXTENSION_UNIT_DESCRIPTOR, UX_CLASS_AUDIO20_AC_XUD;
1123 
1124 /* XUD::bmaControls.  */
1125 #define UX_CLASS_AUDIO20_XUD_CONTROL_ENABLE_POS                             (0)
1126 #define UX_CLASS_AUDIO20_XUD_CONTROL_ENABLE_MASK                            (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_XUD_CONTROL_ENABLE_POS)
1127 #define UX_CLASS_AUDIO20_XUD_CONTROL_ENABLE(v)                              ((v) << UX_CLASS_AUDIO20_XUD_CONTROL_ENABLE_POS)
1128 #define UX_CLASS_AUDIO20_XUD_CONTROL_CLUSTER_POS                            (2)
1129 #define UX_CLASS_AUDIO20_XUD_CONTROL_CLUSTER_MASK                           (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_XUD_CONTROL_CLUSTER_POS)
1130 #define UX_CLASS_AUDIO20_XUD_CONTROL_CLUSTER(v)                             ((v) << UX_CLASS_AUDIO20_XUD_CONTROL_CLUSTER_POS)
1131 #define UX_CLASS_AUDIO20_XUD_CONTROL_UNDERFLOW_POS                          (4)
1132 #define UX_CLASS_AUDIO20_XUD_CONTROL_UNDERFLOW_MASK                         (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_XUD_CONTROL_UNDERFLOW_POS)
1133 #define UX_CLASS_AUDIO20_XUD_CONTROL_UNDERFLOW(v)                           ((v) << UX_CLASS_AUDIO20_XUD_CONTROL_UNDERFLOW_POS)
1134 #define UX_CLASS_AUDIO20_XUD_CONTROL_OVERFLOW_POS                           (6)
1135 #define UX_CLASS_AUDIO20_XUD_CONTROL_OVERFLOW_MASK                          (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_XUD_CONTROL_OVERFLOW_POS)
1136 #define UX_CLASS_AUDIO20_XUD_CONTROL_OVERFLOW(v)                            ((v) << UX_CLASS_AUDIO20_XUD_CONTROL_OVERFLOW_POS)
1137 
1138 /* Audio class-specific AS interface descriptor.  */
1139 
1140 typedef struct UX_CLASS_AUDIO20_AS_INTERFACE_DESCRIPTOR_STRUCT
1141 {
1142     UCHAR           bLength;
1143     UCHAR           bDescriptorType;
1144     UCHAR           bDescriptorSubType;
1145     UCHAR           bTerminalLink;
1146     UCHAR           bmControls;
1147     UCHAR           bFormatType;
1148     UCHAR           bmFormats[4];
1149     UCHAR           bNrChannels;
1150     UCHAR           bmChannelConfig[4];
1151     UCHAR           iChannelNames;
1152 } UX_CLASS_AUDIO20_AS_INTERFACE_DESCRIPTOR, UX_CLASS_AUDIO20_AS_IFACED;
1153 
1154 /* AS interface (AS_INTERFACE)::bmaControls.  */
1155 #define UX_CLASS_AUDIO20_AS_IFACED_CONTROL_ACTIVE_ALT_POS               (0)
1156 #define UX_CLASS_AUDIO20_AS_IFACED_CONTROL_ACTIVE_ALT_MASK              (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_AS_IFACED_CONTROL_ACTIVE_ALT_POS)
1157 #define UX_CLASS_AUDIO20_AS_IFACED_CONTROL_ACTIVE_ALT(v)                ((v) << UX_CLASS_AUDIO20_AS_IFACED_CONTROL_ACTIVE_ALT_POS)
1158 #define UX_CLASS_AUDIO20_AS_IFACED_CONTROL_VALID_ALT_POS                (2)
1159 #define UX_CLASS_AUDIO20_AS_IFACED_CONTROL_VALID_ALT_MASK               (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_AS_IFACED_CONTROL_VALID_ALT_POS)
1160 #define UX_CLASS_AUDIO20_AS_IFACED_CONTROL_VALID_ALT(v)                 ((v) << UX_CLASS_AUDIO20_AS_IFACED_CONTROL_VALID_ALT_POS)
1161 
1162 
1163 /* Audio class-specific AS encoder descriptor.  */
1164 
1165 typedef struct UX_CLASS_AUDIO20_AS_ENCODER_DESCRIPTOR_STRUCT
1166 {
1167     UCHAR           bLength;
1168     UCHAR           bDescriptorType;
1169     UCHAR           bDescriptorSubType;
1170     UCHAR           bEncoderID;
1171     UCHAR           bEncoder;
1172     UCHAR           unknown[3]; /* These 3 bytes are not described in spec (UAC 2.0, May 31, 2006)?  */
1173     ULONG           bmControls;
1174     UCHAR           iParam1;
1175     UCHAR           iParam2;
1176     UCHAR           iParam3;
1177     UCHAR           iParam4;
1178     UCHAR           iParam5;
1179     UCHAR           iParam6;
1180     UCHAR           iParam7;
1181     UCHAR           iParam8;
1182     UCHAR           iEncoder;
1183 } UX_CLASS_AUDIO20_AS_ENCODER_DESCRIPTOR, UX_CLASS_AUDIO20_AS_ENCD;
1184 
1185 /* AS ENCODER::bmaControls.  */
1186 #define UX_CLASS_AUDIO20_ENCD_CONTROL_BIT_RATE_POS                  (0)
1187 #define UX_CLASS_AUDIO20_ENCD_CONTROL_BIT_RATE_MASK                 (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_BIT_RATE_POS)
1188 #define UX_CLASS_AUDIO20_ENCD_CONTROL_BIT_RATE(v)                   ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_BIT_RATE_POS)
1189 #define UX_CLASS_AUDIO20_ENCD_CONTROL_QUALITY_POS                   (2)
1190 #define UX_CLASS_AUDIO20_ENCD_CONTROL_QUALITY_MASK                  (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_QUALITY_POS)
1191 #define UX_CLASS_AUDIO20_ENCD_CONTROL_QUALITY(v)                    ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_QUALITY_POS)
1192 #define UX_CLASS_AUDIO20_ENCD_CONTROL_VBR_POS                       (4)
1193 #define UX_CLASS_AUDIO20_ENCD_CONTROL_VBR_MASK                      (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_VBR_POS)
1194 #define UX_CLASS_AUDIO20_ENCD_CONTROL_VBR(v)                        ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_VBR_POS)
1195 #define UX_CLASS_AUDIO20_ENCD_CONTROL_TYPE_POS                      (6)
1196 #define UX_CLASS_AUDIO20_ENCD_CONTROL_TYPE_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_TYPE_POS)
1197 #define UX_CLASS_AUDIO20_ENCD_CONTROL_TYPE(v)                       ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_TYPE_POS)
1198 #define UX_CLASS_AUDIO20_ENCD_CONTROL_UNDERFLOW_POS                 (8)
1199 #define UX_CLASS_AUDIO20_ENCD_CONTROL_UNDERFLOW_MASK                (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_UNDERFLOW_POS)
1200 #define UX_CLASS_AUDIO20_ENCD_CONTROL_UNDERFLOW(v)                  ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_UNDERFLOW_POS)
1201 #define UX_CLASS_AUDIO20_ENCD_CONTROL_OVERFLOW_POS                  (10)
1202 #define UX_CLASS_AUDIO20_ENCD_CONTROL_OVERFLOW_MASK                 (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_OVERFLOW_POS)
1203 #define UX_CLASS_AUDIO20_ENCD_CONTROL_OVERFLOW(v)                   ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_OVERFLOW_POS)
1204 #define UX_CLASS_AUDIO20_ENCD_CONTROL_ENCODER_ERROR_POS             (12)
1205 #define UX_CLASS_AUDIO20_ENCD_CONTROL_ENCODER_ERROR_MASK            (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_ENCODER_ERROR_POS)
1206 #define UX_CLASS_AUDIO20_ENCD_CONTROL_ENCODER_ERROR(v)              ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_ENCODER_ERROR_POS)
1207 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM1_POS                    (14)
1208 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM1_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM1_POS)
1209 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM1(v)                     ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM1_POS)
1210 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM2_POS                    (16)
1211 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM2_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM2_POS)
1212 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM2(v)                     ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM2_POS)
1213 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM3_POS                    (18)
1214 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM3_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM3_POS)
1215 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM3(v)                     ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM3_POS)
1216 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM4_POS                    (20)
1217 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM4_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM4_POS)
1218 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM4(v)                     ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM4_POS)
1219 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM5_POS                    (22)
1220 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM5_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM5_POS)
1221 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM5(v)                     ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM5_POS)
1222 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM6_POS                    (24)
1223 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM6_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM6_POS)
1224 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM6(v)                     ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM6_POS)
1225 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM7_POS                    (26)
1226 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM7_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM7_POS)
1227 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM7(v)                     ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM7_POS)
1228 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM8_POS                    (28)
1229 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM8_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM8_POS)
1230 #define UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM8(v)                     ((v) << UX_CLASS_AUDIO20_ENCD_CONTROL_PARAM8_POS)
1231 
1232 
1233 /* Audio class-specific AS decoder descriptor.  */
1234 
1235 /* Audio class-specific AS MPEG decoder descriptor.  */
1236 
1237 typedef struct UX_CLASS_AUDIO20_AS_MPEG_DECODER_DESCRIPTOR_STRUCT
1238 {
1239     UCHAR           bLength;
1240     UCHAR           bDescriptorType;
1241     UCHAR           bDescriptorSubType;
1242     UCHAR           bDecoderID;
1243     UCHAR           bDecoder;
1244     UCHAR           bmMPEGCapabilities[2];
1245     UCHAR           bmMPEGFeatures;
1246     UCHAR           bmControls;
1247     UCHAR           iDecoder;
1248 } UX_CLASS_AUDIO20_AS_MPEG_DECODER_DESCRIPTOR, UX_CLASS_AUDIO20_AS_MPEG_DECD;
1249 
1250 /* MPEG DECODER::bmMPEGCapabilities.  */
1251 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_LAYER_MASK                   (0x7u << 0)
1252 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_LAYER_I                      (0x1u << 0)
1253 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_LAYER_II                     (0x1u << 1)
1254 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_LAYER_III                    (0x1u << 2)
1255 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_MPEG1_ONLY                   (0x1u << 3)
1256 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_MPEG1_DUAL_CH                (0x1u << 4)
1257 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_MPEG2_STEREO                 (0x1u << 5)
1258 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_MPEG2_7_1_CH                 (0x1u << 6)
1259 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_ADAPTIVE_MULTI_CH_PREDICT    (0x1u << 7)
1260 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_MPEG2_MULTILINGUAL_MASK      (0x3u << 8)
1261 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_MPEG2_MULTI_NOT_SUPPORT      (0x0u << 8)
1262 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_MPEG2_MULTI_FS               (0x1u << 8)
1263 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_MPEG2_MULTI_FS_HALF_FS       (0x3u << 8)
1264 #define UX_CLASS_AUDIO20_MPEG_DECD_CAP_SUPPORT_HALF_FS              (0x1u << 10)
1265 
1266 /* MPEG DECODER::bmMPEGFeatures.  */
1267 #define UX_CLASS_AUDIO20_MPEG_DECD_FEAT_IDYN_RNG_CTRL_MASK          (0x3u << 4) /* Internal Dynamic Range Control  */
1268 #define UX_CLASS_AUDIO20_MPEG_DECD_FEAT_IDYN_RNG_CTRL_NOT_SUP       (0x0u << 4) /* Not support  */
1269 #define UX_CLASS_AUDIO20_MPEG_DECD_FEAT_IDYN_RNG_CTRL_NOT_SCAL      (0x1u << 4) /* Not scalable  */
1270 #define UX_CLASS_AUDIO20_MPEG_DECD_FEAT_IDYN_RNG_CTRL_SCAL_COMMON   (0x2u << 4) /* Common boost and cut scaling value  */
1271 #define UX_CLASS_AUDIO20_MPEG_DECD_FEAT_IDYN_RNG_CTRL_SCAL_SEPARA   (0x3u << 4) /* Separate boost and cut scaling value  */
1272 
1273 /* MPEG DECODER::bmControls.  */
1274 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_UNDERFLOW_POS            (0)
1275 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_UNDERFLOW_MASK           (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_UNDERFLOW_POS)
1276 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_UNDERFLOW(v)             ((v) << UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_UNDERFLOW_POS)
1277 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_OVERFLOW_POS             (2)
1278 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_OVERFLOW_MASK            (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_OVERFLOW_POS)
1279 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_OVERFLOW(v)              ((v) << UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_OVERFLOW_POS)
1280 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_DECODER_ERROR_POS        (4)
1281 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_DECODER_ERROR_MASK       (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_DECODER_ERROR_POS)
1282 #define UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_DECODER_ERROR(v)         ((v) << UX_CLASS_AUDIO20_MPEG_DECD_CONTROL_DECODER_ERROR_POS)
1283 
1284 /* Audio class-specific AS AC-3 decoder descriptor.  */
1285 
1286 typedef struct UX_CLASS_AUDIO20_AS_AC3_DECODER_DESCRIPTOR_STRUCT
1287 {
1288     UCHAR           bLength;
1289     UCHAR           bDescriptorType;
1290     UCHAR           bDescriptorSubType;
1291     UCHAR           bDecoderID;
1292     UCHAR           bDecoder;
1293     UCHAR           bmBSID[4];
1294     UCHAR           bmAC3Features;
1295     UCHAR           bmControls;
1296     UCHAR           iDecoder;
1297 } UX_CLASS_AUDIO20_AS_AC3_DECODER_DESCRIPTOR, UX_CLASS_AUDIO20_AS_AC3_DECD;
1298 
1299 /* AC3 DECODER::bmAC3Features.  */
1300 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_RF_MODE                      (0x1u << 0)
1301 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_LINE_MODE                    (0x1u << 1)
1302 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_CUSTOM0_MODE                 (0x1u << 2)
1303 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_CUSTOM1_MODE                 (0x1u << 3)
1304 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_IDYN_RNG_CTRL_MASK           (0x3u << 4) /* Internal Dynamic Range Control  */
1305 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_IDYN_RNG_CTRL_NOT_SUP        (0x0u << 4) /* Not support  */
1306 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_IDYN_RNG_CTRL_NOT_SCAL       (0x3u << 4) /* Not scalable  */
1307 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_IDYN_RNG_CTRL_SCAL_COMMON    (0x3u << 4) /* Common boost and cut scaling value  */
1308 #define UX_CLASS_AUDIO20_AC3_DECD_FEAT_IDYN_RNG_CTRL_SCAL_SEPARATE  (0x3u << 4) /* Separate boost and cut scaling value  */
1309 
1310 /* AC3 DECODER::bmControls.  */
1311 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_UNDERFLOW_POS             (0)
1312 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_UNDERFLOW_MASK            (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_AC3_DECD_CONTROL_UNDERFLOW_POS)
1313 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_UNDERFLOW(v)              ((v) << UX_CLASS_AUDIO20_AC3_DECD_CONTROL_UNDERFLOW_POS)
1314 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_OVERFLOW_POS              (2)
1315 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_OVERFLOW_MASK             (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_AC3_DECD_CONTROL_OVERFLOW_POS)
1316 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_OVERFLOW(v)               ((v) << UX_CLASS_AUDIO20_AC3_DECD_CONTROL_OVERFLOW_POS)
1317 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_DECODER_ERROR_POS         (4)
1318 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_DECODER_ERROR_MASK        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_AC3_DECD_CONTROL_DECODER_ERROR_POS)
1319 #define UX_CLASS_AUDIO20_AC3_DECD_CONTROL_DECODER_ERROR(v)          ((v) << UX_CLASS_AUDIO20_AC3_DECD_CONTROL_DECODER_ERROR_POS)
1320 
1321 /* Audio class-specific AS WMA decoder descriptor.  */
1322 
1323 typedef struct UX_CLASS_AUDIO20_AS_WMA_DECODER_DESCRIPTOR_STRUCT
1324 {
1325     UCHAR           bLength;
1326     UCHAR           bDescriptorType;
1327     UCHAR           bDescriptorSubType;
1328     UCHAR           bDecoderID;
1329     UCHAR           bDecoder;
1330     UCHAR           bmWMAProfile[2];
1331     UCHAR           bmControls;
1332     UCHAR           iDecoder;
1333 } UX_CLASS_AUDIO20_AS_WMA_DECODER_DESCRIPTOR, UX_CLASS_AUDIO20_AS_WMA_DECD;
1334 
1335 /* WMA DECODER::bmWMAProfile.  */
1336 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_1_L1                      (1u << 0)
1337 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_2_L2                      (1u << 1)
1338 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_3_L3                      (1u << 2)
1339 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_OTHER_L                   (1u << 3)
1340 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_SPEECH_1_S1               (1u << 4)
1341 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_SPEECH_2_S2               (1u << 5)
1342 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_PRO_1_M1                  (1u << 6)
1343 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_PRO_2_M2                  (1u << 7)
1344 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_PRO_3_M3                  (1u << 8)
1345 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_PRO_OTHER_M               (1u << 9)
1346 #define UX_CLASS_AUDIO20_WMA_DECD_PROFILE_LOSSLESS_SUPPORT          (1u << 10)
1347 
1348 /* WMA DECODER::bmControls.  */
1349 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_UNDERFLOW_POS             (0)
1350 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_UNDERFLOW_MASK            (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_WMA_DECD_CONTROL_UNDERFLOW_POS)
1351 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_UNDERFLOW(v)              ((v) << UX_CLASS_AUDIO20_WMA_DECD_CONTROL_UNDERFLOW_POS)
1352 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_OVERFLOW_POS              (2)
1353 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_OVERFLOW_MASK             (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_WMA_DECD_CONTROL_OVERFLOW_POS)
1354 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_OVERFLOW(v)               ((v) << UX_CLASS_AUDIO20_WMA_DECD_CONTROL_OVERFLOW_POS)
1355 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_DECODER_ERROR_POS         (4)
1356 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_DECODER_ERROR_MASK        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_WMA_DECD_CONTROL_DECODER_ERROR_POS)
1357 #define UX_CLASS_AUDIO20_WMA_DECD_CONTROL_DECODER_ERROR(v)          ((v) << UX_CLASS_AUDIO20_WMA_DECD_CONTROL_DECODER_ERROR_POS)
1358 
1359 /* Audio class-specific AS DTS decoder descriptor.  */
1360 
1361 typedef struct UX_CLASS_AUDIO20_AS_DTS_DECODER_DESCRIPTOR_STRUCT
1362 {
1363     UCHAR           bLength;
1364     UCHAR           bDescriptorType;
1365     UCHAR           bDescriptorSubType;
1366     UCHAR           bDecoderID;
1367     UCHAR           bDecoder;
1368     UCHAR           bmCapabilities;
1369     UCHAR           bmControls;
1370     UCHAR           iDecoder;
1371 } UX_CLASS_AUDIO20_AS_DTS_DECODER_DESCRIPTOR, UX_CLASS_AUDIO20_AS_DTS_DECD;
1372 
1373 /* DTS DECODER::bmCapabilities.  */
1374 #define UX_CLASS_AUDIO20_DTS_DECD_CAP_CORE                          (0x1u << 0)
1375 #define UX_CLASS_AUDIO20_DTS_DECD_CAP_LOSSLESS                      (0x1u << 1)
1376 #define UX_CLASS_AUDIO20_DTS_DECD_CAP_LBR                           (0x1u << 2)
1377 #define UX_CLASS_AUDIO20_DTS_DECD_CAP_MULTI_STREAM_MIX              (0x1u << 3)
1378 #define UX_CLASS_AUDIO20_DTS_DECD_CAP_DUAL_DECODE                   (0x1u << 4)
1379 
1380 /* DTS DECODER::bmControls.  */
1381 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_UNDERFLOW_POS             (2)
1382 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_UNDERFLOW_MASK            (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DTS_DECD_CONTROL_UNDERFLOW_POS)
1383 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_UNDERFLOW(v)              ((v) << UX_CLASS_AUDIO20_DTS_DECD_CONTROL_UNDERFLOW_POS)
1384 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_OVERFLOW_POS              (4)
1385 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_OVERFLOW_MASK             (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DTS_DECD_CONTROL_OVERFLOW_POS)
1386 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_OVERFLOW(v)               ((v) << UX_CLASS_AUDIO20_DTS_DECD_CONTROL_OVERFLOW_POS)
1387 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_DECODER_ERROR_POS         (6)
1388 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_DECODER_ERROR_MASK        (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_DTS_DECD_CONTROL_DECODER_ERROR_POS)
1389 #define UX_CLASS_AUDIO20_DTS_DECD_CONTROL_DECODER_ERROR(v)          ((v) << UX_CLASS_AUDIO20_DTS_DECD_CONTROL_DECODER_ERROR_POS)
1390 
1391 
1392 /* Audio class-specific isochronous audio data endpoint descriptor (EPD).  */
1393 typedef struct UX_CLASS_AUDIO20_ENDPOINT_DESCRIPTOR_STRUCT
1394 {
1395     UCHAR           bLength;
1396     UCHAR           bDescriptorType;
1397     UCHAR           bDescriptorSubType;
1398     UCHAR           bmAttributes;
1399     UCHAR           bmControls;
1400     UCHAR           bLockDelayUnits;
1401     USHORT          wLockDelay;
1402 } UX_CLASS_AUDIO20_ENDPOINT_DESCRIPTOR, UX_CLASS_AUDIO20_EPD;
1403 
1404 /* EPD::bmAttributes.  */
1405 #define UX_CLASS_AUDIO20_EPD_ATTR_MAX_PACKET_SIZE_ONLY              (0x1u << 7)
1406 
1407 /* EPD::bmControls.  */
1408 #define UX_CLASS_AUDIO20_EPD_CONTROL_PITCH_POS                      (0)
1409 #define UX_CLASS_AUDIO20_EPD_CONTROL_PITCH_MASK                     (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_EPD_CONTROL_PITCH_POS)
1410 #define UX_CLASS_AUDIO20_EPD_CONTROL_PITCH(v)                       ((v) << UX_CLASS_AUDIO20_EPD_CONTROL_PITCH_POS)
1411 #define UX_CLASS_AUDIO20_EPD_CONTROL_OVERRUN_POS                    (2)
1412 #define UX_CLASS_AUDIO20_EPD_CONTROL_OVERRUN_MASK                   (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_EPD_CONTROL_OVERRUN_POS)
1413 #define UX_CLASS_AUDIO20_EPD_CONTROL_OVERRUN(v)                     ((v) << UX_CLASS_AUDIO20_EPD_CONTROL_OVERRUN_POS)
1414 #define UX_CLASS_AUDIO20_EPD_CONTROL_UNDERRUN_POS                   (4)
1415 #define UX_CLASS_AUDIO20_EPD_CONTROL_UNDERRUN_MASK                  (UX_CLASS_AUDIO20_CONTROL_MASK << UX_CLASS_AUDIO20_EPD_CONTROL_UNDERRUN_POS)
1416 #define UX_CLASS_AUDIO20_EPD_CONTROL_UNDERRUN(v)                    ((v) << UX_CLASS_AUDIO20_EPD_CONTROL_UNDERRUN_POS)
1417 
1418 /* EPD::bLockDelayUnits.  */
1419 #define UX_CLASS_AUDIO20_EPD_LOCK_DELAY_UNITS_UNDEFINED             0
1420 #define UX_CLASS_AUDIO20_EPD_LOCK_DELAY_UNITS_MS                    1
1421 #define UX_CLASS_AUDIO20_EPD_LOCK_DELAY_UNITS_DEC_PCM_SAMPLES       2
1422 
1423 
1424 /* Audio class control request layout.  */
1425 
1426 typedef struct UX_CLASS_AUDIO20_REQUEST_VALUE_CS_CN_STRUCT {
1427     UCHAR   channel_num;        /* Channel Number       (CN)   */
1428     UCHAR   control_sel;        /* Control Selector     (CS)   */
1429 } UX_CLASS_AUDIO20_REQUEST_VALUE_CS_CN;
1430 
1431 typedef struct UX_CLASS_AUDIO20_REQUEST_VALUE_MIXER_STRUCT {
1432     UCHAR   mixer_ctrl_num;     /* Mixer Control Number (MCN)  */
1433     UCHAR   control_sel;        /* Control Selector     (CS)   */
1434 } UX_CLASS_AUDIO20_REQUEST_VALUE_MIXER, UX_CLASS_AUDIO20_REQUEST_VALUE_CS_MCN;
1435 
1436 typedef struct UX_CLASS_AUDIO20_REQUEST_VALUE_CONTROL_STRUCT {
1437     UCHAR   cn_mcn;             /* CN/MCN   */
1438     UCHAR   cs;                 /* CS       */
1439 } UX_CLASS_AUDIO20_REQUEST_VALUE_CONTROL;
1440 
1441 typedef struct UX_CLASS_AUDIO20_REQUEST_INDEX_EP_STRUCT {
1442     UCHAR   ep_addr;            /* Endpoint Address  */
1443     UCHAR   reserved_zero;
1444 } UX_CLASS_AUDIO20_REQUEST_INDEX_EP;
1445 
1446 typedef struct UX_CLASS_AUDIO20_REQUEST_INDEX_INTERFACE_STRUCT {
1447     UCHAR   iface_num;          /* Interface number  */
1448     UCHAR   entity_id;
1449 } UX_CLASS_AUDIO20_REQUEST_INDEX_INTERFACE;
1450 
1451 typedef struct UX_CLASS_AUDIO20_REQUEST_INDEX_CONTROL_STRUCT {
1452     UCHAR   ep_iface;           /* Endpoint Address/Interface Number  */
1453     UCHAR   entity_id_zero;     /* Entity ID/Zero  */
1454 } UX_CLASS_AUDIO20_REQUEST_INDEX_CONTROL;
1455 
1456 typedef struct UX_CLASS_AUDIO20_REQUEST_STRUCT
1457 {
1458     UCHAR           bmRequestType;
1459     UCHAR           bRequest;
1460     union UX_CLASS_AUDIO20_REQUEST_VALUE_UNION {
1461         USHORT      value;
1462         UX_CLASS_AUDIO20_REQUEST_VALUE_CS_CN
1463                     control_cs_cn;
1464         UX_CLASS_AUDIO20_REQUEST_VALUE_MIXER
1465                     control_mixer;
1466         UX_CLASS_AUDIO20_REQUEST_VALUE_CONTROL
1467                     control;
1468         USHORT      mem_offset;
1469     }               wValue;
1470     union UX_CLASS_AUDIO20_REQUEST_INDEX_UNION {
1471         USHORT      value;
1472         UX_CLASS_AUDIO20_REQUEST_INDEX_EP
1473                     ep;
1474         UX_CLASS_AUDIO20_REQUEST_INDEX_INTERFACE
1475                     iface;
1476         UX_CLASS_AUDIO20_REQUEST_INDEX_CONTROL
1477                     control;
1478     }               wIndex;
1479     USHORT          wLength;
1480 } UX_CLASS_AUDIO20_REQUEST;
1481 
1482 typedef struct UX_CLASS_AUDIO20_RANGE_1B_STRUCT
1483 {
1484     UCHAR           bMIN;
1485     UCHAR           bMAX;
1486     UCHAR           bRES;
1487 } UX_CLASS_AUDIO20_RANGE_1B;
1488 
1489 typedef struct UX_CLASS_AUDIO20_RANGE_1B_BLOCK_STRUCT
1490 {
1491     USHORT          wNumSubRanges;
1492     UX_CLASS_AUDIO20_RANGE_1B
1493                     aSubRange[1];
1494 } UX_CLASS_AUDIO20_RANGE_1B_BLOCK;
1495 
1496 typedef struct UX_CLASS_AUDIO20_RANGE_2B_STRUCT
1497 {
1498     USHORT          wMIN;
1499     USHORT          wMAX;
1500     USHORT          wRES;
1501 } UX_CLASS_AUDIO20_RANGE_2B;
1502 
1503 typedef struct UX_CLASS_AUDIO20_RANGE_2B_BLOCK_STRUCT
1504 {
1505     USHORT          wNumSubRanges;
1506     UX_CLASS_AUDIO20_RANGE_2B
1507                     aSubRange[1];
1508 } UX_CLASS_AUDIO20_RANGE_2B_BLOCK;
1509 
1510 typedef struct UX_CLASS_AUDIO20_RANGE_4B_STRUCT
1511 {
1512     ULONG           dMIN;
1513     ULONG           dMAX;
1514     ULONG           dRES;
1515 } UX_CLASS_AUDIO20_RANGE_4B;
1516 
1517 typedef struct UX_CLASS_AUDIO20_RANGE_4B_BLOCK_STRUCT
1518 {
1519     USHORT          wNumSubRanges;
1520     struct UX_CLASS_AUDIO20_RANGE_4B_UNALIGNED_STRUCT {
1521         UCHAR       dMIN[4];
1522         UCHAR       dMAX[4];
1523         UCHAR       dRES[4];
1524     }               aSubRange[1];   /* Not 4-byte aligned.  */
1525 } UX_CLASS_AUDIO20_RANGE_4B_BLOCK;
1526 
1527 
1528 /* Audio Class 2.0 connector control CUR parameter block.  */
1529 
1530 typedef struct UX_CLASS_AUDIO20_CONNECTOR_CONTROL_CUR_PARAM_BLOCK_STRUCT
1531 {
1532     UCHAR           bNrChannels;
1533     UCHAR           bmChannelConfig[4];
1534     UCHAR           iChannelNames;
1535 } UX_CLASS_AUDIO20_CONNECTOR_CONTROL_CUR_PARAM_BLOCK;
1536 
1537 /* Audio Class 2.0 Graphic Equalizer Control CUR parameter block (NrBits=4).  */
1538 
1539 typedef struct UX_CLASS_AUDIO20_GEQ_CONTROL_CUR_PARAM_BLOCK_STRUCT
1540 {
1541     ULONG           bmBandsPresent;
1542     UCHAR           bCUR[4];
1543 } UX_CLASS_AUDIO20_GEQ_CONTROL_CUR_PARAM_BLOCK;
1544 
1545 /* Audio Class 2.0 Graphic Equalizer Control RANGE parameter block (NrBits=1).  */
1546 
1547 typedef struct UX_CLASS_AUDIO20_GEQ_CONTROL_RANGE_PARAM_BLOCK_STRUCT
1548 {
1549     ULONG           bmBandsPresent;
1550     UX_CLASS_AUDIO20_RANGE_1B
1551                     aRNG[1];
1552 } UX_CLASS_AUDIO20_GEQ_CONTROL_RANGE_PARAM_BLOCK;
1553 
1554 /* Audio Class 2.0 Valid Alternate Settings Control CUR parameter block (bControlSize=1).  */
1555 
1556 typedef struct UX_CLASS_AUDIO20_VALID_ALT_SETT_CONTROL_CUR_PARAM_BLOCK_STRUCT
1557 {
1558     UCHAR           bControlSize;           /* Number of bytes.  */
1559     UCHAR           bmValidAltSettings[1];  /* bControlSize bytes.  */
1560 } UX_CLASS_AUDIO20_VALID_ALT_SETT_CONTROL_CUR_PARAM_BLOCK;
1561 
1562 /* Audio Class 2.0 High/Low Scaling Control CUR parameter block.  */
1563 
1564 typedef struct UX_CLASS_AUDIO20_HI_LO_SCALING_CONTROL_CUR_PARAM_BLOCK_STRUCT
1565 {
1566     UCHAR           bCUR_Lo;
1567     UCHAR           bCUR_Hi;
1568 } UX_CLASS_AUDIO20_HI_LO_SCALING_CONTROL_CUR_PARAM_BLOCK;
1569 
1570 /* Audio Class 2.0 High/Low Scaling Control RANGE parameter block (wNumSubRanges=1).  */
1571 
1572 typedef struct UX_CLASS_AUDIO20_HI_LO_SCALING_CONTROL_RANGE_PARAM_BLOCK_STRUCT
1573 {
1574     USHORT          wNumSubRanges;
1575     UX_CLASS_AUDIO20_RANGE_1B
1576                     aRNG[1];
1577 } UX_CLASS_AUDIO20_HI_LO_SCALING_CONTROL_RANGE_PARAM_BLOCK;
1578 
1579 
1580 /* Audio Class 2.0 Interrupt Data Message Format.  */
1581 
1582 typedef struct UX_CLASS_AUDIO20_INT_MESSAGE_STRUCT
1583 {
1584     UCHAR           bInfo;
1585     UCHAR           bAttribute;
1586     union UX_CLASS_AUDIO20_INT_MESSAGE_VALUE {
1587         USHORT      value;
1588         UX_CLASS_AUDIO20_REQUEST_VALUE_CONTROL
1589                     control;
1590     }               wValue;
1591     union UX_CLASS_AUDIO20_INT_MESSAGE_INDEX {
1592         USHORT      value;
1593         UX_CLASS_AUDIO20_REQUEST_INDEX_CONTROL
1594                     control;
1595     }               wIndex;
1596 } UX_CLASS_AUDIO20_INT_MESSAGE;
1597 
1598 
1599 /* Audio Class 2.0 Type I Format Type Descriptor.  */
1600 
1601 typedef struct UX_CLASS_AUDIO20_TYPE_I_FORMAT_TYPE_DESCRIPTOR
1602 {
1603     UCHAR           bLength;
1604     UCHAR           bDescriptorType;
1605     UCHAR           bDescriptorSubType;
1606     UCHAR           bFormatType;
1607     UCHAR           bSubslotSize;
1608     UCHAR           bBitResolution;
1609 } UX_CLASS_AUDIO20_TYPE_I_FORMAT_TYPE;
1610 
1611 /* Audio Class 2.0 Type II Format Type Descriptor.  */
1612 
1613 typedef struct UX_CLASS_AUDIO20_TYPE_II_FORMAT_TYPE_DESCRIPTOR
1614 {
1615     UCHAR           bLength;
1616     UCHAR           bDescriptorType;
1617     UCHAR           bDescriptorSubType;
1618     UCHAR           bFormatType;
1619     USHORT          wMaxBitRate;
1620     USHORT          wSlotsPerFrame;
1621 } UX_CLASS_AUDIO20_TYPE_II_FORMAT_TYPE;
1622 
1623 /* Audio Class 2.0 Type III Format Type Descriptor.  */
1624 
1625 typedef struct UX_CLASS_AUDIO20_TYPE_III_FORMAT_TYPE_DESCRIPTOR
1626 {
1627     UCHAR           bLength;
1628     UCHAR           bDescriptorType;
1629     UCHAR           bDescriptorSubType;
1630     UCHAR           bFormatType;
1631     UCHAR           bSubslotSize;
1632     UCHAR           bBitResolution;
1633 } UX_CLASS_AUDIO20_TYPE_III_FORMAT_TYPE;
1634 
1635 /* Audio Class 2.0 Type IV Format Type Descriptor.  */
1636 
1637 typedef struct UX_CLASS_AUDIO20_TYPE_IV_FORMAT_TYPE_DESCRIPTOR
1638 {
1639     UCHAR           bLength;
1640     UCHAR           bDescriptorType;
1641     UCHAR           bDescriptorSubType;
1642     UCHAR           bFormatType;
1643 } UX_CLASS_AUDIO20_TYPE_IV_FORMAT_TYPE;
1644 
1645 /* Audio Class 2.0 Extended Type I Format Type Descriptor.  */
1646 
1647 typedef struct UX_CLASS_AUDIO20_EXT_TYPE_I_FORMAT_TYPE_DESCRIPTOR
1648 {
1649     UCHAR           bLength;
1650     UCHAR           bDescriptorType;
1651     UCHAR           bDescriptorSubType;
1652     UCHAR           bFormatType;
1653     UCHAR           bSubslotSize;
1654     UCHAR           bBitResolution;
1655     UCHAR           bHeaderLength;
1656     UCHAR           bControlSize;
1657     UCHAR           bSideBandProtocol;
1658 } UX_CLASS_AUDIO20_EXT_TYPE_I_FORMAT_TYPE;
1659 
1660 /* Audio Class 2.0 Extended Type II Format Type Descriptor.  */
1661 
1662 typedef struct UX_CLASS_AUDIO20_EXT_TYPE_II_FORMAT_TYPE_DESCRIPTOR
1663 {
1664     UCHAR           bLength;
1665     UCHAR           bDescriptorType;
1666     UCHAR           bDescriptorSubType;
1667     UCHAR           bFormatType;
1668     USHORT          wMaxBitRate;
1669     USHORT          wSamplesPerFrame;
1670     UCHAR           bHeaderLength;
1671     UCHAR           bSideBandProtocol;
1672 } UX_CLASS_AUDIO20_EXT_TYPE_II_FORMAT_TYPE;
1673 
1674 /* Audio Class 2.0 Extended Type III Format Type Descriptor.  */
1675 
1676 typedef struct UX_CLASS_AUDIO20_EXT_TYPE_III_FORMAT_TYPE_DESCRIPTOR
1677 {
1678     UCHAR           bLength;
1679     UCHAR           bDescriptorType;
1680     UCHAR           bDescriptorSubType;
1681     UCHAR           bFormatType;
1682     UCHAR           bSubslotSize;
1683     UCHAR           bBitResolution;
1684     UCHAR           bHeaderLength;
1685     UCHAR           bSideBandProtocol;
1686 } UX_CLASS_AUDIO20_EXT_TYPE_III_FORMAT_TYPE;
1687 
1688 /* Audio Class 2.0 Hi-Res Presentation TimeStamp Layout.  */
1689 
1690 typedef struct UX_CLASS_AUDIO20_HI_RES_PRESENTATION_TIMESTAMP_STRUCT
1691 {
1692     UCHAR           bmFlags;
1693     UCHAR           qNanoSeconds[8];
1694 } UX_CLASS_AUDIO20_HI_RES_PRESENTATION_TIMESTAMP;
1695 
1696 #define UX_CLASS_AUDIO20_HI_RES_PRESENTATION_TIMESTAMP_FLAG_VALID   (1u << 31)
1697 
1698 #endif
1699