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_audio10.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) 1.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_AUDIO10_H
47 #define UX_CLASS_AUDIO10_H
48 
49 /* Define Audio Class Codes.  */
50 
51 #define UX_CLASS_AUDIO10_CLASS                              0x01
52 #define UX_CLASS_AUDIO10_SUBCLASS_UNDEFINED                 0x00
53 #define UX_CLASS_AUDIO10_SUBCLASS_AUDIOCONTROL              0x01
54 #define UX_CLASS_AUDIO10_SUBCLASS_AUDIOSTREAMING            0x02
55 #define UX_CLASS_AUDIO10_SUBCLASS_MIDISTREAMING             0x03
56 #define UX_CLASS_AUDIO10_PROTOCOL_UNDEFINED                 0x00
57 
58 
59 /* Define Audio Class desctiptor types.  */
60 #define UX_CLASS_AUDIO10_CS_UNDEFINED                       0x20
61 #define UX_CLASS_AUDIO10_CS_DEVICE                          0x21
62 #define UX_CLASS_AUDIO10_CS_CONFIGURATION                   0x22
63 #define UX_CLASS_AUDIO10_CS_STRING                          0x23
64 #define UX_CLASS_AUDIO10_CS_INTERFACE                       0x24
65 #define UX_CLASS_AUDIO10_CS_ENDPOINT                        0x25
66 
67 
68 /* Define Audio Class AC interface descriptor subclasses.  */
69 
70 #define UX_CLASS_AUDIO10_AC_UNDEFINED                       0x00
71 #define UX_CLASS_AUDIO10_AC_HEADER                          0x01
72 #define UX_CLASS_AUDIO10_AC_INPUT_TERMINAL                  0x02
73 #define UX_CLASS_AUDIO10_AC_OUTPUT_TERMINAL                 0x03
74 #define UX_CLASS_AUDIO10_AC_MIXER_UNIT                      0x04
75 #define UX_CLASS_AUDIO10_AC_SELECTOR_UNIT                   0x05
76 #define UX_CLASS_AUDIO10_AC_FEATURE_UNIT                    0x06
77 #define UX_CLASS_AUDIO10_AC_PROCESSING_UNIT                 0x07
78 #define UX_CLASS_AUDIO10_AC_EXTENSION_UNIT                  0x08
79 
80 
81 /* Define Audio Class Processing Unit (PU) Process Types (PT).  */
82 
83 #define UX_CLASS_AUDIO10_PROCESS_UNDEFINED                  0x00
84 #define UX_CLASS_AUDIO10_PROCESS_UP_DOWN_MIX                0x01
85 #define UX_CLASS_AUDIO10_PROCESS_DOLBY_PROLOGIC             0x02
86 #define UX_CLASS_AUDIO10_PROCESS_3D_STEREO_EXTENDER         0x03
87 #define UX_CLASS_AUDIO10_PROCESS_REVERBERATION              0x04
88 #define UX_CLASS_AUDIO10_PROCESS_CHORUS                     0x05
89 #define UX_CLASS_AUDIO10_PROCESS_DYN_RANGE_COMP             0x06
90 
91 
92 /* Define Audio Class AS interface descriptor subclasses.  */
93 
94 #define UX_CLASS_AUDIO10_AS_UNDEFINED                       0x00
95 #define UX_CLASS_AUDIO10_AS_GENERAL                         0x01
96 #define UX_CLASS_AUDIO10_AS_FORMAT_TYPE                     0x02
97 #define UX_CLASS_AUDIO10_AS_FORMAT_SPECIFIC                 0x03
98 
99 
100 /* Define Audio Class endpoint descriptor subtypes.  */
101 
102 #define UX_CLASS_AUDIO10_EP_UNDEFINED                       0x00
103 #define UX_CLASS_AUDIO10_EP_GENERAL                         0x01
104 
105 
106 /* Define Audio Class request codes.  */
107 
108 #define UX_CLASS_AUDIO10_REQUEST_CODE_UNDEFINED             0x00
109 #define UX_CLASS_AUDIO10_SET_CUR                            0x01
110 #define UX_CLASS_AUDIO10_GET_CUR                            0x81
111 #define UX_CLASS_AUDIO10_SET_MIN                            0x02
112 #define UX_CLASS_AUDIO10_GET_MIN                            0x82
113 #define UX_CLASS_AUDIO10_SET_MAX                            0x03
114 #define UX_CLASS_AUDIO10_GET_MAX                            0x83
115 #define UX_CLASS_AUDIO10_SET_RES                            0x04
116 #define UX_CLASS_AUDIO10_GET_RES                            0x84
117 #define UX_CLASS_AUDIO10_SET_MEM                            0x05
118 #define UX_CLASS_AUDIO10_GET_MEM                            0x85
119 #define UX_CLASS_AUDIO10_GET_STAT                           0xFF
120 
121 
122 /* Define Audio Class terminal control selectors.  */
123 
124 #define UX_CLASS_AUDIO10_TE_CONTROL_UNDEFINED               0x00
125 #define UX_CLASS_AUDIO10_TE_COPY_PROTECT_CONTROL            0x01
126 
127 /* Define Audio Class feature unit control selectors.  */
128 
129 #define UX_CLASS_AUDIO10_FU_CONTROL_UNDEFINED               0x00
130 #define UX_CLASS_AUDIO10_FU_MUTE_CONTROL                    0x01
131 #define UX_CLASS_AUDIO10_FU_VOLUME_CONTROL                  0x02
132 #define UX_CLASS_AUDIO10_FU_BASS_CONTROL                    0x03
133 #define UX_CLASS_AUDIO10_FU_MID_CONTROL                     0x04
134 #define UX_CLASS_AUDIO10_FU_TREBLE_CONTROL                  0x05
135 #define UX_CLASS_AUDIO10_FU_GRAPHIC_EQUALIZER_CONTROL       0x06
136 #define UX_CLASS_AUDIO10_FU_AUTOMATIC_GAIN_CONTROL          0x07
137 #define UX_CLASS_AUDIO10_FU_DELAY_CONTROL                   0x08
138 #define UX_CLASS_AUDIO10_FU_BASS_BOOST_CONTROL              0x09
139 #define UX_CLASS_AUDIO10_FU_LOUNDNESS_CONTROL               0x0A
140 
141 
142 /* Define Audio Class processing unit control selectors.  */
143 
144 /* Define Audio Class up/down-mix (UD) processing unit control selectors.  */
145 
146 #define UX_CLASS_AUDIO10_UD_CONTROL_UNDEFINED               0x00
147 #define UX_CLASS_AUDIO10_UD_ENABLE_CONTROL                  0x01
148 #define UX_CLASS_AUDIO10_UD_MODE_SELECT_CONTROL             0x02
149 
150 /* Define Audio Class dolby prologic (DP) processing unit control selectors.  */
151 
152 #define UX_CLASS_AUDIO10_DP_CONTROL_UNDEFINED               0x00
153 #define UX_CLASS_AUDIO10_DP_ENABLE_CONTROL                  0x01
154 #define UX_CLASS_AUDIO10_DP_MODE_SELECT_CONTROL             0x02
155 
156 /* Define Audio Class 3D stereo extender (3D) processing unit control selectors.  */
157 
158 #define UX_CLASS_AUDIO10_3D_CONTROL_UNDEFINED               0x00
159 #define UX_CLASS_AUDIO10_3D_ENABLE_CONTROL                  0x01
160 #define UX_CLASS_AUDIO10_3D_SPACIOUSNESS_CONTROL            0x02
161 
162 /* Define Audio Class reverberation (RV) processing unit control selectors.  */
163 
164 #define UX_CLASS_AUDIO10_RV_CONTROL_UNDEFINED               0x00
165 #define UX_CLASS_AUDIO10_RV_ENABLE_CONTROL                  0x01
166 #define UX_CLASS_AUDIO10_RV_LEVEL_CONTROL                   0x02
167 #define UX_CLASS_AUDIO10_RV_TIME_CONTROL                    0x03
168 #define UX_CLASS_AUDIO10_RV_FEEDBACK_CONTROL                0x04
169 
170 /* Define Audio Class chorus (CH) processing unit control selectors.  */
171 
172 #define UX_CLASS_AUDIO10_CHORUS_CONTROL_UNDEFINED           0x00
173 #define UX_CLASS_AUDIO10_CHORUS_ENABLE_CONTROL              0x01
174 #define UX_CLASS_AUDIO10_CHORUS_LEVEL_CONTROL               0x02
175 #define UX_CLASS_AUDIO10_CHORUS_RATE_CONTROL                0x03
176 #define UX_CLASS_AUDIO10_CHORUS_DEPTH_CONTROL               0x04
177 
178 /* Define Audio Class dynamic range compressor (DR) processing unit control selectors.  */
179 
180 #define UX_CLASS_AUDIO10_DR_CONTROL_UNDEFINED               0x00
181 #define UX_CLASS_AUDIO10_DR_ENABLE_CONTROL                  0x01
182 #define UX_CLASS_AUDIO10_DR_COMPRESSION_RATE_CONTROL        0x02
183 #define UX_CLASS_AUDIO10_DR_MAXAMPL_CONTROL                 0x03
184 #define UX_CLASS_AUDIO10_DR_THRESHOLD_CONTROL               0x04
185 #define UX_CLASS_AUDIO10_DR_ATTACK_TIME                     0x05
186 #define UX_CLASS_AUDIO10_DR_RELEASE_TIME                    0x06
187 
188 /* Define Audio Class extension unit (XU) control selectors.  */
189 
190 #define UX_CLASS_AUDIO10_XU_CONTROL_UNDEFINED               0x00
191 #define UX_CLASS_AUDIO10_XU_ENABLE_CONTROL                  0x01
192 
193 
194 /* Define Audio Class endpoint control selectors.  */
195 
196 #define UX_CLASS_AUDIO10_EP_CONTROL_UNDEFINED               0x00
197 #define UX_CLASS_AUDIO10_EP_SAMPLING_FREQ_CONTROL           0x01
198 #define UX_CLASS_AUDIO10_EP_PITCH_CONTROL                   0x02
199 
200 
201 /* Define Audio Class format type codes.  */
202 
203 #define UX_CLASS_AUDIO10_FORMAT_TYPE_UNDEFINED              0x00
204 #define UX_CLASS_AUDIO10_FORMAT_TYPE_I                      0x01
205 #define UX_CLASS_AUDIO10_FORMAT_TYPE_II                     0x02
206 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III                    0x03
207 
208 /* Define Audio Class format tag codes.  */
209 
210 #define UX_CLASS_AUDIO10_FORMAT_TYPE_I_UNDEFINED                    0x0000
211 #define UX_CLASS_AUDIO10_FORMAT_TYPE_I_PCM                          0x0001
212 #define UX_CLASS_AUDIO10_FORMAT_TYPE_I_PCM8                         0x0002
213 #define UX_CLASS_AUDIO10_FORMAT_TYPE_I_IEEE_FLOAT                   0x0003
214 #define UX_CLASS_AUDIO10_FORMAT_TYPE_I_ALAW                         0x0004
215 #define UX_CLASS_AUDIO10_FORMAT_TYPE_I_MULAW                        0x0005
216 
217 #define UX_CLASS_AUDIO10_FORMAT_TYPE_II_UNDEFINED                   0x1000
218 #define UX_CLASS_AUDIO10_FORMAT_TYPE_II_MPEG                        0x1001
219 #define UX_CLASS_AUDIO10_FORMAT_TYPE_II_AC3                         0x1002
220 
221 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III_UNDEFINED                  0x2000
222 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_AC3                0x2001
223 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG1_L1           0x2002
224 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG1_L2_3         0x2003
225 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT        0x2003
226 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG2_EXT          0x2004
227 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG2_L1_LS        0x2005
228 #define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG2_L2_3_LS      0x2006
229 
230 
231 /* Define Audio Class MPEG (MP) control selectors.  */
232 
233 #define UX_CLASS_AUDIO10_MP_CONTROL_UNDEFINED                       0x00
234 #define UX_CLASS_AUDIO10_MP_DUAL_CHANNEL_CONTROL                    0x01
235 #define UX_CLASS_AUDIO10_MP_SECOND_STEREO_CONTROL                   0x02
236 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_CONTROL                    0x03
237 #define UX_CLASS_AUDIO10_MP_DYN_RANGE_CONTROL                       0x04
238 #define UX_CLASS_AUDIO10_MP_SCALING_CONTROL                         0x05
239 #define UX_CLASS_AUDIO10_MP_HILO_SCALING_CONTROL                    0x06
240 
241 /* Define Audio Class AC-3 (AC) control selectors.  */
242 
243 #define UX_CLASS_AUDIO10_AC_CONTROL_UNDEFINED                       0x00
244 #define UX_CLASS_AUDIO10_AC_MODE_CONTROL                            0x01
245 #define UX_CLASS_AUDIO10_AC_DYN_RANGE_CONTROL                       0x02
246 #define UX_CLASS_AUDIO10_AC_SCALING_CONTROL                         0x03
247 #define UX_CLASS_AUDIO10_AC_HILO_SCALING_CONTROL                    0x04
248 
249 
250 /* Class descriptor structures (packed).
251  * Typedefs to be used:
252  * - for byte               : UCHAR/CHAR
253  * - for word               : USHORT/SHORT
254  * - for double word (dword): ULONG/LONG
255  * - for 64-bit-width word  : ULONG64
256  * Field offset considerations inside descriptor:
257  * - Minimum fields alignment: byte (8-bit)
258  * - Field is not byte and not aligned : field declared as bytes array (UCHAR[])
259  * - Field is word and word aligned    : field declared as USHORT/SHORT
260  * - Field is dword and dword aligned  : field declared as ULONG/LONG
261  */
262 
263 
264 /* Audio Class AC interface header descriptors (bInCollection=1).  */
265 
266 typedef struct UX_CLASS_AUDIO10_AC_HEADER_DESCRIPTOR_STRUCT
267 {
268     UCHAR           bLength;
269     UCHAR           bDescriptorType;
270     UCHAR           bDescriptorSubtype;
271     UCHAR           bcdADC[2];
272     UCHAR           wTotalLength[2];
273     UCHAR           bInCollection;
274     UCHAR           baInterfaceNr[1];
275 } UX_CLASS_AUDIO10_AC_HEADER_DESCRIPTOR;
276 
277 /* Define Audio Class input terminal descriptor (ITD).  */
278 
279 typedef struct UX_CLASS_AUDIO10_AC_INPUT_TERMINAL_DESCRIPTOR_STRUCT
280 {
281     UCHAR           bLength;
282     UCHAR           bDescriptorType;
283     UCHAR           bDescriptorSubtype;
284     UCHAR           bTerminalID;
285     USHORT          wTerminalType;
286     UCHAR           bAssocTerminal;
287     UCHAR           bNrChannels;
288     USHORT          wChannelConfig;
289     UCHAR           iChannelNames;
290     UCHAR           iTerminal;
291 } UX_CLASS_AUDIO10_AC_INPUT_TERMINAL_DESCRIPTOR, UX_CLASS_AUDIO10_AC_ITD;
292 
293 /* Define Audio Class output terminal descriptor (OTD).  */
294 
295 typedef struct UX_CLASS_AUDIO10_AC_OUTPUT_TERMINAL_DESCRIPTOR_STRUCT
296 {
297     UCHAR           bLength;
298     UCHAR           bDescriptorType;
299     UCHAR           bDescriptorSubtype;
300     UCHAR           bTerminalID;
301     USHORT          wTerminalType;
302     UCHAR           bAssocTerminal;
303     UCHAR           bSourceID;
304     UCHAR           iTerminal;
305 } UX_CLASS_AUDIO10_AC_OUTPUT_TERMINAL_DESCRIPTOR, UX_CLASS_AUDIO10_AC_OTD;
306 
307 /* Define Audio Class mixer unit descriptor (MUD, bNrInPins=1, bmMixerControls N=1).  */
308 
309 typedef struct UX_CLASS_AUDIO10_AC_MIXER_UNIT_DESCRIPTOR_STRUCT
310 {
311     UCHAR           bLength;
312     UCHAR           bDescriptorType;
313     UCHAR           bDescriptorSubtype;
314     UCHAR           bUnitID;
315     UCHAR           bNrInPins;
316     UCHAR           baSourceID[1];
317     UCHAR           bNrChannels;
318     UCHAR           wChannelConfig[2];
319     UCHAR           iChannelNames;
320     UCHAR           bmControls[1];
321     UCHAR           iMixer;
322 } UX_CLASS_AUDIO10_AC_MIXER_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_MUD;
323 
324 /* Define Audio Class selector unit descriptor (SUD, bNrInPins=1).  */
325 
326 typedef struct UX_CLASS_AUDIO10_AC_SELECTOR_UNIT_DESCRIPTOR_STRUCT
327 {
328     UCHAR           bLength;
329     UCHAR           bDescriptorType;
330     UCHAR           bDescriptorSubtype;
331     UCHAR           bUnitID;
332     UCHAR           bNrInPins;
333     UCHAR           baSourceID[1];
334     UCHAR           iSelector;
335 } UX_CLASS_AUDIO10_AC_SELECTOR_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_SUD;
336 
337 /* Define Audio Class feature unit descriptor (FUD, ch=1, bControlSize=2).  */
338 
339 typedef struct UX_CLASS_AUDIO10_AC_FEATURE_UNIT_DESCRIPTOR_STRUCT
340 {
341     UCHAR           bLength;
342     UCHAR           bDescriptorType;
343     UCHAR           bDescriptorSubtype;
344     UCHAR           bUnitID;
345     UCHAR           bSourceID;
346     UCHAR           bControlSize;
347     UCHAR           bmaControls[2 * 2];
348     UCHAR           iFeature;
349 } UX_CLASS_AUDIO10_AC_FEATURE_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_FUD;
350 
351 /* FUD::bmControls.  */
352 #define UX_CLASS_AUDIO10_FUD_CONTROL_MUTE                               (1u << 0)
353 #define UX_CLASS_AUDIO10_FUD_CONTROL_VOLUME                             (1u << 1)
354 #define UX_CLASS_AUDIO10_FUD_CONTROL_BASS                               (1u << 2)
355 #define UX_CLASS_AUDIO10_FUD_CONTROL_MID                                (1u << 3)
356 #define UX_CLASS_AUDIO10_FUD_CONTROL_TREBLE                             (1u << 4)
357 #define UX_CLASS_AUDIO10_FUD_CONTROL_GRAPHIC_EQ                         (1u << 5)
358 #define UX_CLASS_AUDIO10_FUD_CONTROL_AUTO_GAIN                          (1u << 6)
359 #define UX_CLASS_AUDIO10_FUD_CONTROL_DELAY                              (1u << 7)
360 #define UX_CLASS_AUDIO10_FUD_CONTROL_BASS_BOOST                         (1u << 8)
361 #define UX_CLASS_AUDIO10_FUD_CONTROL_LOUDNESS                           (1u << 9)
362 
363 /* Define Audio Class processing unit descriptor (PUD, bNrInPins=1,bControlSize=1).  */
364 
365 typedef struct UX_CLASS_AUDIO10_AC_PROCESSING_UNIT_DESCRIPTOR_STRUCT
366 {
367     UCHAR           bLength;
368     UCHAR           bDescriptorType;
369     UCHAR           bDescriptorSubtype;
370     UCHAR           bUnitID;
371     USHORT          wProcessType;
372     UCHAR           bNrInPins;
373     UCHAR           baSourceID[1];
374     UCHAR           bNrChannels;
375     UCHAR           wChannelConfig;
376     UCHAR           iChannelNames;
377     UCHAR           bControlSize;
378     UCHAR           bmControls[1];
379     UCHAR           iProcessing;
380 } UX_CLASS_AUDIO10_AC_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_PUD;
381 
382 /* Define Audio Class up/down processing unit descriptor (PUD, bNrInPins=1,bControlSize=1,bNrModes=1).  */
383 
384 typedef struct UX_CLASS_AUDIO10_AC_UP_DOWN_PROCESSING_UNIT_DESCRIPTOR_STRUCT
385 {
386     UCHAR           bLength;
387     UCHAR           bDescriptorType;
388     UCHAR           bDescriptorSubtype;
389     UCHAR           bUnitID;
390     USHORT          wProcessType;
391     UCHAR           bNrInPins;
392     UCHAR           bSourceID;
393     UCHAR           bNrChannels;
394     UCHAR           wChannelConfig[2];
395     UCHAR           iChannelNames;
396     UCHAR           bControlSize;
397     UCHAR           bmControls[1];
398     UCHAR           iProcessing;
399     UCHAR           bNrModes;
400     UCHAR           waModes[2 * 1];
401 } UX_CLASS_AUDIO10_AC_UP_DOWN_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_UDD;
402 
403 /* UDD::bmControls.  */
404 #define UX_CLASS_AUDIO10_UDD_CONTROL_ENABLE                             (1u << 0)
405 #define UX_CLASS_AUDIO10_UDD_CONTROL_MODE_SELECT                        (1u << 1)
406 
407 /* Define Audio Class dolby prologic processing unit descriptor (DPD, bNrInPins=1,bControlSize=1,bNrModes=1).  */
408 
409 typedef struct UX_CLASS_AUDIO10_AC_DOLBY_PROCESSING_UNIT_DESCRIPTOR_STRUCT
410 {
411     UCHAR           bLength;
412     UCHAR           bDescriptorType;
413     UCHAR           bDescriptorSubtype;
414     UCHAR           bUnitID;
415     USHORT          wProcessType;
416     UCHAR           bNrInPins;
417     UCHAR           bSourceID;
418     UCHAR           bNrChannels;
419     UCHAR           wChannelConfig[2];
420     UCHAR           iChannelNames;
421     UCHAR           bControlSize;
422     UCHAR           bmControls[1];
423     UCHAR           iProcessing;
424     UCHAR           bNrModes;
425     UCHAR           daModes[2 * 1];
426 } UX_CLASS_AUDIO10_AC_DOLBY_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_DPD;
427 
428 /* DPD::bmaControls.  */
429 #define UX_CLASS_AUDIO10_DPD_CONTROL_ENABLE                                 (1u << 0)
430 #define UX_CLASS_AUDIO10_DPD_CONTROL_MODE_SELECT                            (1u << 1)
431 
432 /* Define Audio Class 3D Stereo Extender (3D) Processing Unit Descriptor.  */
433 typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_3D_STEREO_EXT_PROCESSING_UNIT_DESCRIPTOR;
434 typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_3DD;
435 
436 /* 3DD::bmaControls.  */
437 #define UX_CLASS_AUDIO10_3DD_CONTROL_ENABLE                                 (1u << 0)
438 #define UX_CLASS_AUDIO10_3DD_CONTROL_MODE_SELECT                            (1u << 1)
439 
440 /* Define Audio Class Reverberation (RV) Processing Unit Descriptor.  */
441 typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_REVERBERATION_PROCESSING_UNIT_DESCRIPTOR;
442 typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_RVD;
443 
444 /* RVD::bmaControls.  */
445 #define UX_CLASS_AUDIO10_RVD_CONTROL_ENABLE                                 (1u << 0)
446 #define UX_CLASS_AUDIO10_RVD_CONTROL_REVERB_TYPE                            (1u << 1)
447 #define UX_CLASS_AUDIO10_RVD_CONTROL_REVERB_LEVEL                           (1u << 2)
448 #define UX_CLASS_AUDIO10_RVD_CONTROL_REVERB_TIME                            (1u << 3)
449 #define UX_CLASS_AUDIO10_RVD_CONTROL_REVERB_DELAY_FEEDBACK                  (1u << 4)
450 
451 /* Define Audio Class Chorus (CH) Processing Unit Descriptor.  */
452 typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_CHORUS_PROCESSING_UNIT_DESCRIPTOR;
453 typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_CHORUSD;
454 
455 /* CHORUSD::bmaControls.  */
456 #define UX_CLASS_AUDIO10_CHORUSD_CONTROL_ENABLE                             (1u << 0)
457 #define UX_CLASS_AUDIO10_CHORUSD_CONTROL_CHORUS_LEVEL                       (1u << 1)
458 #define UX_CLASS_AUDIO10_CHORUSD_CONTROL_CHORUS_MODULATION_RATE             (1u << 2)
459 #define UX_CLASS_AUDIO10_CHORUSD_CONTROL_CHORUS_MODULATION_DEPTH            (1u << 3)
460 
461 /* Define Audio Class Dynamic Range Compressor (DR) Processing Unit Descriptor.  */
462 typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_DYN_RNG_COMP_PROCESSING_UNIT_DESCRIPTOR;
463 typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_DRD;
464 
465 /* DRD::bmaControls.  */
466 #define UX_CLASS_AUDIO10_DRD_CONTROL_ENABLE                                 (1u << 0)
467 #define UX_CLASS_AUDIO10_DRD_CONTROL_COMPRESSION_RATIO                      (1u << 1)
468 #define UX_CLASS_AUDIO10_DRD_CONTROL_MAXAMPL                                (1u << 2)
469 #define UX_CLASS_AUDIO10_DRD_CONTROL_THRESHOLD                              (1u << 3)
470 #define UX_CLASS_AUDIO10_DRD_CONTROL_ATTACH_TIME                            (1u << 4)
471 #define UX_CLASS_AUDIO10_DRD_CONTROL_RELEASE_TIME                           (1u << 5)
472 
473 /* Define Audio Class Extension unit descriptor (XUD, bNrInPins=1,bControlSize=1).  */
474 
475 typedef struct UX_CLASS_AUDIO10_AC_EXTENSION_UNIT_DESCRIPTOR_STRUCT
476 {
477     UCHAR           bLength;
478     UCHAR           bDescriptorType;
479     UCHAR           bDescriptorSubtype;
480     UCHAR           bUnitID;
481     USHORT          wExtensionCode;
482     UCHAR           bNrInPins;
483     UCHAR           baSourceID[1];
484     UCHAR           bNrChannels;
485     UCHAR           wChannelConfig[2];
486     UCHAR           iChannelNames;
487     UCHAR           bControlSize;
488     UCHAR           bmControls[1];
489     UCHAR           iExtension;
490 } UX_CLASS_AUDIO10_AC_EXTENSION_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_XUD;
491 
492 /* XUD::bmaControls.  */
493 #define UX_CLASS_AUDIO10_XUD_CONTROL_ENABLE                                 (1u << 0)
494 
495 /* Define Audio Class Associated Interface descriptor (Association-specific x=1).  */
496 
497 typedef struct UX_CLASS_AUDIO10_ASSOCIATED_INTERFACE_DESCRIPTOR_STRUCT
498 {
499     UCHAR           bLength;
500     UCHAR           bDescriptorType;
501     UCHAR           bDescriptorSubtype;
502     UCHAR           bInterfaceNr;
503     UCHAR           assoc_specific;
504 } UX_CLASS_AUDIO10_ASSOCIATED_INTERFACE_DESCRIPTOR;
505 
506 /* Define Audio Class Interrupt/Isochronous Endpoint Descriptor.  */
507 
508 typedef struct UX_CLASS_AUDIO10_ENDPOINT_DESCRIPTOR_STRUCT
509 {
510     UCHAR           bLength;
511     UCHAR           bDescriptorType;
512     UCHAR           bEndpointAddress;
513     UCHAR           bmAttributes;
514     UCHAR           wMaxPacketSize;
515     UCHAR           bInterval;
516     UCHAR           bRefresh;
517     UCHAR           bSynchAddress;
518 } UX_CLASS_AUDIO10_ENDPOINT_DESCRIPTOR, UX_CLASS_AUDIO10_EPD;
519 
520 /* Audio class-specific AS interface descriptor.  */
521 
522 typedef struct UX_CLASS_AUDIO10_AS_INTERFACE_DESCRIPTOR_STRUCT
523 {
524     UCHAR           bLength;
525     UCHAR           bDescriptorType;
526     UCHAR           bDescriptorSubtype;
527     UCHAR           bTerminalLink;
528     UCHAR           bDelay;
529     UCHAR           wFormatTag[2];
530 } UX_CLASS_AUDIO10_AS_INTERFACE_DESCRIPTOR, UX_CLASS_AUDIO10_AS_IFACED;
531 
532 
533 /* Audio class-specific isochronous audio data endpoint descriptor (EPD).  */
534 
535 typedef struct UX_CLASS_AUDIO10_ISOCH_ENDPOINT_DESCRIPTOR_STRUCT
536 {
537     UCHAR           bLength;
538     UCHAR           bDescriptorType;
539     UCHAR           bDescriptorSubtype;
540     UCHAR           bmAttributes;
541     UCHAR           bLockDelayUnits;
542     UCHAR           wLockDelay[2];
543 } UX_CLASS_AUDIO10_ISOCH_ENDPOINT_DESCRIPTOR, UX_CLASS_AUDIO10_ISOCH_EPD;
544 
545 /* EPD::bmAttributes.  */
546 #define UX_CLASS_AUDIO10_ISOCH_EPD_ATTR_SAMPLING_FREQ                       (0x1u << 0)
547 #define UX_CLASS_AUDIO10_ISOCH_EPD_ATTR_PITCH                               (0x1u << 1)
548 #define UX_CLASS_AUDIO10_ISOCH_EPD_ATTR_MAX_PACKET_SIZE_ONLY                (0x1u << 7)
549 
550 /* EPD::bLockDelayUnits.  */
551 #define UX_CLASS_AUDIO10_EPD_LOCK_DELAY_UNITS_UNDEFINED                     0
552 #define UX_CLASS_AUDIO10_EPD_LOCK_DELAY_UNITS_MS                            1
553 #define UX_CLASS_AUDIO10_EPD_LOCK_DELAY_UNITS_DEC_PCM_SAMPLES               2
554 
555 
556 /* Audio class control request layout.  */
557 
558 typedef struct UX_CLASS_AUDIO10_REQUEST_VALUE_CS_STRUCT {
559     UCHAR   unused_zero;
560     UCHAR   control_sel;        /* Control Selector      (CS)   */
561 } UX_CLASS_AUDIO10_REQUEST_VALUE_CS;
562 
563 typedef struct UX_CLASS_AUDIO10_REQUEST_VALUE_MIXER_STRUCT {
564     UCHAR   output_ch_num;      /* Output Channel Number (OCN)   */
565     UCHAR   input_ch_num;       /* Input Channel Number  (ICN)   */
566 } UX_CLASS_AUDIO10_REQUEST_VALUE_MIXER;
567 
568 typedef struct UX_CLASS_AUDIO10_REQUEST_VALUE_CONTROL_STRUCT {
569     UCHAR   unused_zero;
570     UCHAR   cs;                 /* CS       */
571 } UX_CLASS_AUDIO10_REQUEST_VALUE_CONTROL;
572 
573 typedef struct UX_CLASS_AUDIO10_REQUEST_INDEX_EP_STRUCT {
574     UCHAR   ep_addr;            /* Endpoint Address  */
575     UCHAR   unused_zero;
576 } UX_CLASS_AUDIO10_REQUEST_INDEX_EP;
577 
578 typedef struct UX_CLASS_AUDIO10_REQUEST_INDEX_INTERFACE_STRUCT {
579     UCHAR   iface_num;          /* Interface number  */
580     UCHAR   entity_id;
581 } UX_CLASS_AUDIO10_REQUEST_INDEX_INTERFACE;
582 
583 typedef struct UX_CLASS_AUDIO10_REQUEST_INDEX_CONTROL_STRUCT {
584     UCHAR   ep_iface;           /* Endpoint Address/Interface Number  */
585     UCHAR   entity_id_zero;     /* Entity ID/Zero  */
586 } UX_CLASS_AUDIO10_REQUEST_INDEX_CONTROL;
587 
588 typedef struct UX_CLASS_AUDIO10_REQUEST_STRUCT
589 {
590     UCHAR           bmRequestType;
591     UCHAR           bRequest;
592     union UX_CLASS_AUDIO10_REQUEST_VALUE_UNION {
593         USHORT      value;
594         UX_CLASS_AUDIO10_REQUEST_VALUE_CS
595                     control_cs;
596         UX_CLASS_AUDIO10_REQUEST_VALUE_MIXER
597                     control_mixer;
598         UX_CLASS_AUDIO10_REQUEST_VALUE_CONTROL
599                     control;
600         USHORT      mem_offset;
601     }               wValue;
602     union UX_CLASS_AUDIO10_REQUEST_INDEX_UNION {
603         USHORT      value;
604         UX_CLASS_AUDIO10_REQUEST_INDEX_EP
605                     ep;
606         UX_CLASS_AUDIO10_REQUEST_INDEX_INTERFACE
607                     iface;
608         UX_CLASS_AUDIO10_REQUEST_INDEX_CONTROL
609                     control;
610     }               wIndex;
611     USHORT          wLength;
612 } UX_CLASS_AUDIO10_REQUEST;
613 
614 /* Audio Class 1.0 Copy Protect Control Parameter  */
615 
616 typedef struct UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_PARAMETER_STRUCT
617 {
618     UCHAR           bCopyProtect;
619 } UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_PARAMETER;
620 
621 #define UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_CPL0                          (1u << 0)
622 #define UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_CPL1                          (1u << 1)
623 #define UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_CPL2                          (1u << 2)
624 
625 /* Audio Class 1.0 Mixer Control Parameter (specific control or 0xFF)  */
626 
627 typedef struct UX_CLASS_AUDIO10_MIXER_CONTROL_PARAMETER_STRUCT
628 {
629     USHORT          wMixer;
630 } UX_CLASS_AUDIO10_MIXER_CONTROL_PARAMETER;
631 
632 typedef struct UX_CLASS_AUDIO10_MIXER_CONTROL_PARAMETER_FF_STRUCT
633 {
634     USHORT          wMixer[1];
635 } UX_CLASS_AUDIO10_MIXER_CONTROL_PARAMETER_FF;
636 
637 /* Audio Class 1.0 Selector Control Parameter  */
638 
639 typedef struct UX_CLASS_AUDIO10_SELECTOR_CONTROL_PARAMETER_STRUCT
640 {
641     UCHAR           bSelector;
642 } UX_CLASS_AUDIO10_SELECTOR_CONTROL_PARAMETER;
643 
644 /* Audio Class 1.0 Mute Control Parameter (specific CH or 0xFF)  */
645 
646 typedef struct UX_CLASS_AUDIO10_MUTE_CONTROL_PARAMETER_STRUCT
647 {
648     UCHAR           bMute;
649 } UX_CLASS_AUDIO10_MUTE_CONTROL_PARAMETER;
650 
651 typedef struct UX_CLASS_AUDIO10_MUTE_CONTROL_PARAMETER_FF_STRUCT
652 {
653     UCHAR           bMute[1];
654 } UX_CLASS_AUDIO10_MUTE_CONTROL_PARAMETER_FF;
655 
656 /* Audio Class 1.0 Volume Control Parameter (specific CH or 0xFF)  */
657 
658 typedef struct UX_CLASS_AUDIO10_VOLUME_CONTROL_PARAMETER_STRUCT
659 {
660     SHORT           wVolume;
661 } UX_CLASS_AUDIO10_VOLUME_CONTROL_PARAMETER;
662 
663 typedef struct UX_CLASS_AUDIO10_VOLUME_CONTROL_PARAMETER_FF_STRUCT
664 {
665     SHORT           wVolume[1];
666 } UX_CLASS_AUDIO10_VOLUME_CONTROL_PARAMETER_FF;
667 
668 /* Audio Class 1.0 Bass Control Parameter (specific CH or 0xFF)  */
669 
670 typedef struct UX_CLASS_AUDIO10_BASS_CONTROL_PARAMETER_STRUCT
671 {
672     UCHAR           bBass;
673 } UX_CLASS_AUDIO10_BASS_CONTROL_PARAMETER;
674 
675 typedef struct UX_CLASS_AUDIO10_BASS_CONTROL_PARAMETER_FF_STRUCT
676 {
677     UCHAR           bBass[1];
678 } UX_CLASS_AUDIO10_BASS_CONTROL_PARAMETER_FF;
679 
680 /* Audio Class 1.0 Mid Control Parameter (specific CH or 0xFF)  */
681 
682 typedef struct UX_CLASS_AUDIO10_MID_CONTROL_PARAMETER_STRUCT
683 {
684     UCHAR           bMid;
685 } UX_CLASS_AUDIO10_MID_CONTROL_PARAMETER;
686 
687 typedef struct UX_CLASS_AUDIO10_MID_CONTROL_PARAMETER_FF_STRUCT
688 {
689     UCHAR           bMid[1];
690 } UX_CLASS_AUDIO10_MID_CONTROL_PARAMETER_FF;
691 
692 /* Audio Class 1.0 Treble Control Parameter (specific CH or 0xFF)  */
693 
694 typedef struct UX_CLASS_AUDIO10_TREBLE_CONTROL_PARAMETER_STRUCT
695 {
696     UCHAR           bTreble;
697 } UX_CLASS_AUDIO10_TREBLE_CONTROL_PARAMETER;
698 
699 typedef struct UX_CLASS_AUDIO10_TREBLE_CONTROL_PARAMETER_FF_STRUCT
700 {
701     UCHAR           bTreble[1];
702 } UX_CLASS_AUDIO10_TREBLE_CONTROL_PARAMETER_FF;
703 
704 /* Audio Class 1.0 Graphic Equalizer Control Parameter (NrBits=1)  */
705 
706 typedef struct UX_CLASS_AUDIO10_GRAPHIC_EQ_CONTROL_PARAMETER_STRUCT
707 {
708     ULONG           bmBandsPresent;
709     UCHAR           bBand[1];
710 } UX_CLASS_AUDIO10_GRAPHIC_EQ_CONTROL_PARAMETER;
711 
712 /* Audio Class 1.0 Automatic Gain Control Parameter (specific CH or 0xFF)  */
713 
714 typedef struct UX_CLASS_AUDIO10_AG_CONTROL_PARAMETER_STRUCT
715 {
716     UCHAR           bAGC;
717 } UX_CLASS_AUDIO10_AG_CONTROL_PARAMETER;
718 
719 typedef struct UX_CLASS_AUDIO10_AG_CONTROL_PARAMETER_FF_STRUCT
720 {
721     UCHAR           bAGC[1];
722 } UX_CLASS_AUDIO10_AG_CONTROL_PARAMETER_FF;
723 
724 /* Audio Class 1.0 Delay Control Parameter (specific CH or 0xFF)  */
725 
726 typedef struct UX_CLASS_AUDIO10_DELAY_CONTROL_PARAMETER_STRUCT
727 {
728     SHORT           wDelay;
729 } UX_CLASS_AUDIO10_DELAY_CONTROL_PARAMETER;
730 
731 typedef struct UX_CLASS_AUDIO10_DELAY_CONTROL_PARAMETER_FF_STRUCT
732 {
733     SHORT           wDelay[1];
734 } UX_CLASS_AUDIO10_DELAY_CONTROL_PARAMETER_FF;
735 
736 /* Audio Class 1.0 BassBoost Control Parameter (specific CH or 0xFF)  */
737 
738 typedef struct UX_CLASS_AUDIO10_BASSBOOST_CONTROL_PARAMETER_STRUCT
739 {
740     UCHAR           bBassBoost;
741 } UX_CLASS_AUDIO10_BASSBOOST_CONTROL_PARAMETER;
742 
743 typedef struct UX_CLASS_AUDIO10_BASSBOOST_CONTROL_PARAMETER_FF_STRUCT
744 {
745     UCHAR           bBassBoost[1];
746 } UX_CLASS_AUDIO10_BASSBOOST_CONTROL_PARAMETER_FF;
747 
748 /* Audio Class 1.0 Loudness Control Parameter (specific CH or 0xFF)  */
749 
750 typedef struct UX_CLASS_AUDIO10_LOUDNESS_CONTROL_PARAMETER_STRUCT
751 {
752     UCHAR           bLoudness;
753 } UX_CLASS_AUDIO10_LOUDNESS_CONTROL_PARAMETER;
754 
755 typedef struct UX_CLASS_AUDIO10_LOUDNESS_CONTROL_PARAMETER_FF_STRUCT
756 {
757     UCHAR           bLoudness[1];
758 } UX_CLASS_AUDIO10_LOUDNESS_CONTROL_PARAMETER_FF;
759 
760 /* Audio Class 1.0 Enable Processing Control Parameter  */
761 
762 typedef struct UX_CLASS_AUDIO10_ENABLE_PROCESSING_CONTROL_PARAMETER_STRUCT
763 {
764     UCHAR           bEnable;
765 } UX_CLASS_AUDIO10_ENABLE_PROCESSING_CONTROL_PARAMETER;
766 
767 /* Audio Class 1.0 Spaciousness Control Parameter  */
768 
769 typedef struct UX_CLASS_AUDIO10_SPACIOUSNESS_CONTROL_PARAMETER_STRUCT
770 {
771     UCHAR           bSpaciousness;
772 } UX_CLASS_AUDIO10_SPACIOUSNESS_CONTROL_PARAMETER;
773 
774 /* Audio Class 1.0 ReverbType Control Parameter  */
775 
776 typedef struct UX_CLASS_AUDIO10_REVERB_TYPE_CONTROL_PARAMETER_STRUCT
777 {
778     UCHAR           bReverbType;
779 } UX_CLASS_AUDIO10_REVERB_TYPE_CONTROL_PARAMETER;
780 
781 #define UX_CLASS_AUDIO10_REVERB_TYPE_ROOM_1                             0
782 #define UX_CLASS_AUDIO10_REVERB_TYPE_SMALL_ROOM                         0
783 #define UX_CLASS_AUDIO10_REVERB_TYPE_ROOM_2                             1
784 #define UX_CLASS_AUDIO10_REVERB_TYPE_MEDIUM_ROOM                        1
785 #define UX_CLASS_AUDIO10_REVERB_TYPE_ROOM_3                             2
786 #define UX_CLASS_AUDIO10_REVERB_TYPE_LARGE_ROOM                         2
787 #define UX_CLASS_AUDIO10_REVERB_TYPE_HALL_1                             3
788 #define UX_CLASS_AUDIO10_REVERB_TYPE_MEDIUM_CONCERT_HALL                3
789 #define UX_CLASS_AUDIO10_REVERB_TYPE_HALL_2                             4
790 #define UX_CLASS_AUDIO10_REVERB_TYPE_LARGE_CONCERT_HALL                 4
791 #define UX_CLASS_AUDIO10_REVERB_TYPE_PLATE                              5
792 #define UX_CLASS_AUDIO10_REVERB_TYPE_PLATE_REVERBERATION                5
793 #define UX_CLASS_AUDIO10_REVERB_TYPE_DELAY                              6
794 #define UX_CLASS_AUDIO10_REVERB_TYPE_PANNING_DELAY                      7
795 
796 /* Audio Class 1.0 ReverbLevel Control Parameter  */
797 
798 typedef struct UX_CLASS_AUDIO10_REVERB_LEVEL_CONTROL_PARAMETER_STRUCT
799 {
800     UCHAR           bReverbLevel;
801 } UX_CLASS_AUDIO10_REVERB_LEVEL_CONTROL_PARAMETER;
802 
803 /* Audio Class 1.0 ReverTime Control Parameter  */
804 
805 typedef struct UX_CLASS_AUDIO10_REVERB_TIME_CONTROL_PARAMETER_STRUCT
806 {
807     USHORT          wReverTime;
808 } UX_CLASS_AUDIO10_REVERB_TIME_CONTROL_PARAMETER;
809 
810 /* Audio Class 1.0 ReverbDelayFeedback Control Parameter  */
811 
812 typedef struct UX_CLASS_AUDIO10_REVERB_FEEDBACK_CONTROL_PARAMETER_STRUCT
813 {
814     UCHAR           bReverbFeedback;
815 } UX_CLASS_AUDIO10_REVERB_FEEDBACK_CONTROL_PARAMETER;
816 
817 /* Audio Class 1.0 ChorusLevel Control Parameter  */
818 
819 typedef struct UX_CLASS_AUDIO10_CHORUS_LEVEL_CONTROL_PARAMETER_STRUCT
820 {
821     UCHAR           bChorusLevel;
822 } UX_CLASS_AUDIO10_CHORUS_LEVEL_CONTROL_PARAMETER;
823 
824 /* Audio Class 1.0 ChorusRate Control Parameter  */
825 
826 typedef struct UX_CLASS_AUDIO10_CHORUS_RATE_CONTROL_PARAMETER_STRUCT
827 {
828     USHORT          wChorusRate;
829 } UX_CLASS_AUDIO10_CHORUS_RATE_CONTROL_PARAMETER;
830 
831 /* Audio Class 1.0 ChorusModulationDepth Control Parameter  */
832 
833 typedef struct UX_CLASS_AUDIO10_CHORUS_DEPTH_CONTROL_PARAMETER_STRUCT
834 {
835     USHORT          wChorusDepth;
836 } UX_CLASS_AUDIO10_CHORUS_DEPTH_CONTROL_PARAMETER;
837 
838 /* Audio Class 1.0 Dynamic Range Compressor Compression Ratio Control Parameter  */
839 
840 typedef struct UX_CLASS_AUDIO10_COMPRESSION_RATIO_CONTROL_PARAMETER_STRUCT
841 {
842     USHORT          wRatio;
843 } UX_CLASS_AUDIO10_COMPRESSION_RATIO_CONTROL_PARAMETER;
844 
845 /* Audio Class 1.0 Dynamic Range Compressor MaxAmpl Control Parameter  */
846 
847 typedef struct UX_CLASS_AUDIO10_MAXAMPL_CONTROL_PARAMETER_STRUCT
848 {
849     USHORT          wMaxAmpl;
850 } UX_CLASS_AUDIO10_MAXAMPL_CONTROL_PARAMETER;
851 
852 /* Audio Class 1.0 Dynamic Range Compressor Threshold Control Parameter  */
853 
854 typedef struct UX_CLASS_AUDIO10_THRESHOLD_CONTROL_PARAMETER_STRUCT
855 {
856     USHORT          wThreshold;
857 } UX_CLASS_AUDIO10_THRESHOLD_CONTROL_PARAMETER;
858 
859 /* Audio Class 1.0 Dynamic Range Compressor AttachTime Control Parameter  */
860 
861 typedef struct UX_CLASS_AUDIO10_ATTACK_TIME_CONTROL_PARAMETER_STRUCT
862 {
863     USHORT          wAttachTime;
864 } UX_CLASS_AUDIO10_ATTACK_TIME_CONTROL_PARAMETER;
865 
866 /* Audio Class 1.0 Dynamic Range Compressor ReleaseTime Control Parameter  */
867 
868 typedef struct UX_CLASS_AUDIO10_RELEASE_TIME_CONTROL_PARAMETER_STRUCT
869 {
870     USHORT          wReleaseTime;
871 } UX_CLASS_AUDIO10_RELEASE_TIME_CONTROL_PARAMETER;
872 
873 /* Audio Class 1.0 Enable Processing Control (XU_ENABLE_CONTROL) Parameter  */
874 
875 typedef struct UX_CLASS_AUDIO10_XU_ENABLE_CONTROL_PARAMETER_STRUCT
876 {
877     UCHAR           bOn;
878 } UX_CLASS_AUDIO10_XU_ENABLE_CONTROL_PARAMETER;
879 
880 /* Audio Class 1.0 Sampling Frequency Control (SAMPLING_FREQ_CONTROL) Parameter  */
881 
882 typedef struct UX_CLASS_AUDIO10_SAMPLING_FREQ_CONTROL_PARAMETER_STRUCT
883 {
884     UCHAR           tSampleFreq[3];
885 } UX_CLASS_AUDIO10_SAMPLING_FREQ_CONTROL_PARAMETER;
886 
887 /* Audio Class 1.0 Pitch Control (PITCH_CONTROL) Parameter  */
888 
889 typedef struct UX_CLASS_AUDIO10_PITCH_CONTROL_PARAMETER_STRUCT
890 {
891     UCHAR           bPitchEnable;
892 } UX_CLASS_AUDIO10_PITCH_CONTROL_PARAMETER;
893 
894 /* Audio Class 1.0 Continuous Sampling Frequency.  */
895 
896 typedef struct UX_CLASS_AUDIO10_CONTINUOUS_SAMPLING_FREQ_STRUCT
897 {
898     UCHAR           tLowerSamFreq[3];
899     UCHAR           tUpperSamFreq[3];
900 } UX_CLASS_AUDIO10_CONTINUOUS_SAMPLING_FREQ;
901 
902 /* Audio Class 1.0 Discrete Sampling Frequency (N=1).  */
903 
904 typedef struct UX_CLASS_AUDIO10_DISCRETE_SAMPLING_FREQ_STRUCT
905 {
906     UCHAR           tSamFreq[3 * 1];
907 } UX_CLASS_AUDIO10_DISCRETE_SAMPLING_FREQ;
908 
909 /* Audio Class 1.0 Type I Format Type Descriptor  */
910 
911 typedef struct UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DESCRIPTOR_STRUCT
912 {
913     UCHAR           bLength;
914     UCHAR           bDescriptorType;
915     UCHAR           bDescriptorSubtype;
916     UCHAR           bFormatType;
917     UCHAR           bNrChannels;
918     UCHAR           bSubframeSize;
919     UCHAR           bBitResolution;
920     UCHAR           bSamFreqType;
921 } UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DESCRIPTOR;
922 
923 typedef struct UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR_STRUCT
924 {
925     UCHAR           bLength;
926     UCHAR           bDescriptorType;
927     UCHAR           bDescriptorSubtype;
928     UCHAR           bFormatType;
929     UCHAR           bNrChannels;
930     UCHAR           bSubframeSize;
931     UCHAR           bBitResolution;
932     UCHAR           bSamFreqType;       /* 0  */
933     UCHAR           tLowerSamFreq[3];
934     UCHAR           tUpperSamFreq[3];
935 }
936 UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR,
937 UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DESCRIPTOR_0;
938 
939 typedef struct UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DISCRETE_DESCRIPTOR_STRUCT
940 {
941     UCHAR           bLength;
942     UCHAR           bDescriptorType;
943     UCHAR           bDescriptorSubtype;
944     UCHAR           bFormatType;
945     UCHAR           bNrChannels;
946     UCHAR           bSubframeSize;
947     UCHAR           bBitResolution;
948     UCHAR           bSamFreqType;       /* 1  */
949     UCHAR           tSamFreq[3 * 1];
950 }
951 UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DISCRETE_DESCRIPTOR,
952 UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DESCRIPTOR_1;
953 
954 typedef struct UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DESCRIPTOR_STRUCT
955 {
956     UCHAR           bLength;
957     UCHAR           bDescriptorType;
958     UCHAR           bDescriptorSubtype;
959     UCHAR           bFormatType;
960     USHORT          wMaxBitRate;
961     USHORT          wSamplesPerFrame;
962     UCHAR           bSamFreqType;
963 } UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DESCRIPTOR;
964 
965 typedef struct UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR_STRUCT
966 {
967     UCHAR           bLength;
968     UCHAR           bDescriptorType;
969     UCHAR           bDescriptorSubtype;
970     UCHAR           bFormatType;
971     USHORT          wMaxBitRate;
972     USHORT          wSamplesPerFrame;
973     UCHAR           bSamFreqType;       /* 0  */
974     UCHAR           tLowerSamFreq[3];
975     UCHAR           tUpperSamFreq[3];
976 }
977 UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR,
978 UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DESCRIPTOR_0;
979 
980 typedef struct UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DISCRETE_DESCRIPTOR_STRUCT
981 {
982     UCHAR           bLength;
983     UCHAR           bDescriptorType;
984     UCHAR           bDescriptorSubtype;
985     UCHAR           bFormatType;
986     USHORT          wMaxBitRate;
987     USHORT          wSamplesPerFrame;
988     UCHAR           bSamFreqType;       /* 1  */
989     UCHAR           tSamFreq[3 * 1];
990 }
991 UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DISCRETE_DESCRIPTOR,
992 UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DESCRIPTOR_1;
993 
994 
995 /* Audio Class 1.0 MPEG (MP) Format-Specific Descriptor (MPEGD)  */
996 
997 typedef struct UX_CLASS_AUDIO10_MPEG_DESCRIPTOR_STRUCT
998 {
999     UCHAR           bLength;
1000     UCHAR           bDescriptorType;
1001     UCHAR           bDescriptorSubtype;
1002     UCHAR           wFormatTag[2];
1003     UCHAR           bmMPEGCapabilities[2];
1004     UCHAR           bmMPEGFeatures;
1005 } UX_CLASS_AUDIO10_MPEG_DESCRIPTOR, UX_CLASS_AUDIO10_MPEGD;
1006 
1007 /* MPEG::bmMPEGCapabilities.  */
1008 #define UX_CLASS_AUDIO10_MPEGD_CAP_LAYER_MASK                           (0x7u << 0)
1009 #define UX_CLASS_AUDIO10_MPEGD_CAP_LAYER_I                              (0x1u << 0)
1010 #define UX_CLASS_AUDIO10_MPEGD_CAP_LAYER_II                             (0x1u << 1)
1011 #define UX_CLASS_AUDIO10_MPEGD_CAP_LAYER_III                            (0x1u << 2)
1012 #define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG1_ONLY                           (0x1u << 3)
1013 #define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG1_DUAL_CH                        (0x1u << 4)
1014 #define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_STEREO                         (0x1u << 5)
1015 #define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_7_1_CH                         (0x1u << 6)
1016 #define UX_CLASS_AUDIO10_MPEGD_CAP_ADAPTIVE_MULTI_CH_PREDICT            (0x1u << 7)
1017 #define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_MULTILINGUAL_MASK              (0x3u << 8)
1018 #define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_MULTI_NOT_SUPPORT              (0x0u << 8)
1019 #define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_MULTI_FS                       (0x1u << 8)
1020 #define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_MULTI_FS_HALF_FS               (0x3u << 8)
1021 
1022 /* MPEG::bmMPEGFeatures.  */
1023 #define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_MASK                  (0x3u << 4) /* Internal Dynamic Range Control  */
1024 #define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_NOT_SUP               (0x0u << 4) /* Not support  */
1025 #define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_NOT_SCAL              (0x1u << 4) /* Not scalable  */
1026 #define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_SCAL_COMMON           (0x2u << 4) /* Common boost and cut scaling value  */
1027 #define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_SCAL_SEPARA           (0x3u << 4) /* Separate boost and cut scaling value  */
1028 
1029 /* Audio Class 1.0 Dual Channel Control  */
1030 
1031 typedef struct UX_CLASS_AUDIO10_MP_DUAL_CHANNEL_CONTROL_PARAMETER_STRUCT
1032 {
1033     UCHAR           BChannel2Enable;
1034 } UX_CLASS_AUDIO10_MP_DUAL_CHANNEL_CONTROL_PARAMETER;
1035 
1036 /* Audio Class 1.0 Second Stereo Control  */
1037 
1038 typedef struct UX_CLASS_AUDIO10_MP_2ND_STEREO_CONTROL_PARAMETER_STRUCT
1039 {
1040     UCHAR           B2ndStereoEnable;
1041 } UX_CLASS_AUDIO10_MP_2ND_STEREO_CONTROL_PARAMETER;
1042 
1043 /* Audio Class 1.0 Multilingual Control  */
1044 
1045 typedef struct UX_CLASS_AUDIO10_MP_MULTILINGUAL_CONTROL_PARAMETER_STRUCT
1046 {
1047     UCHAR           bMultiLingual;
1048 } UX_CLASS_AUDIO10_MP_MULTILINGUAL_CONTROL_PARAMETER;
1049 
1050 /* bMultiLingual  */
1051 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_NO_CHANNEL              0
1052 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_1               1
1053 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_2               2
1054 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_3               3
1055 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_4               4
1056 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_5               5
1057 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_6               6
1058 #define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_7               7
1059 
1060 /* Audio Class 1.0 Dynamic Range Control (MP_DYN_RANGE_CONTROL)  */
1061 
1062 typedef struct UX_CLASS_AUDIO10_MP_DYN_RANGE_CONTROL_PARAMETER_STRUCT
1063 {
1064     UCHAR           bEnable;
1065 } UX_CLASS_AUDIO10_MP_DYN_RANGE_CONTROL_PARAMETER;
1066 
1067 /* Audio Class 1.0 Scaling Control  */
1068 
1069 typedef struct UX_CLASS_AUDIO10_MP_SCALING_CONTROL_PARAMETER_STRUCT
1070 {
1071     UCHAR           bScale;
1072 } UX_CLASS_AUDIO10_MP_SCALING_CONTROL_PARAMETER;
1073 
1074 /* Audio Class 1.0 High/Low (HILO) Scaling Control  */
1075 
1076 typedef struct UX_CLASS_AUDIO10_MP_HILO_SCALING_CONTROL_PARAMETER_STRUCT
1077 {
1078     UCHAR           bLowScale;
1079     UCHAR           bHighScale;
1080 } UX_CLASS_AUDIO10_MP_HILO_SCALING_CONTROL_PARAMETER;
1081 
1082 
1083 /* Audio Class 1.0 AC-3 Format Descriptor  */
1084 
1085 typedef struct UX_CLASS_AUDIO10_AS_AC_DESCRIPTOR_STRUCT
1086 {
1087     UCHAR           bLength;
1088     UCHAR           bDescriptorType;
1089     UCHAR           bDescriptorSubType;
1090     UCHAR           wFormatTag[2];
1091     UCHAR           bmBSID[4];
1092     UCHAR           bmAC3Features;
1093 } UX_CLASS_AUDIO10_AS_AC_DESCRIPTOR, UX_CLASS_AUDIO10_AS_ACD;
1094 
1095 /* AC3 DECODER::bmAC3Features.  */
1096 #define UX_CLASS_AUDIO10_ACD_FEAT_RF_MODE                           (0x1u << 0)
1097 #define UX_CLASS_AUDIO10_ACD_FEAT_LINE_MODE                         (0x1u << 1)
1098 #define UX_CLASS_AUDIO10_ACD_FEAT_CUSTOM0_MODE                      (0x1u << 2)
1099 #define UX_CLASS_AUDIO10_ACD_FEAT_CUSTOM1_MODE                      (0x1u << 3)
1100 #define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_MASK                (0x3u << 4) /* Internal Dynamic Range Control  */
1101 #define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_NOT_SUP             (0x0u << 4) /* Not support  */
1102 #define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_NOT_SCAL            (0x3u << 4) /* Not scalable  */
1103 #define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_SCAL_COMMON         (0x3u << 4) /* Common boost and cut scaling value  */
1104 #define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_SCAL_SEPARATE       (0x3u << 4) /* Separate boost and cut scaling value  */
1105 
1106 /* Audio Class 1.0 AC-3 Mode Control (AC_MODE_CONTROL)  */
1107 
1108 typedef struct UX_CLASS_AUDIO10_AS_AC_MODE_CONTROL_PARAMETER_STRUCT
1109 {
1110     UCHAR           bMode;
1111 } UX_CLASS_AUDIO10_AS_AC_MODE_CONTROL_PARAMETER;
1112 
1113 /* AC-3 Compression Mode Control.  */
1114 #define UX_CLASS_AUDIO10_AC_MODE_RF                                 (0x1u << 0)
1115 #define UX_CLASS_AUDIO10_AC_MODE_LINE                               (0x1u << 1)
1116 #define UX_CLASS_AUDIO10_AC_MODE_CUSTOM0                            (0x1u << 2)
1117 #define UX_CLASS_AUDIO10_AC_MODE_CUSTOM1                            (0x1u << 3)
1118 
1119 /* Audio Class 1.0 AC-3 Dynamic Range Control (AC_DYN_RANGE_CONTROL)  */
1120 
1121 typedef struct UX_CLASS_AUDIO10_AS_AC_DYN_RANGE_CONTROL_PARAMETER_STRUCT
1122 {
1123     UCHAR           bMode;
1124 } UX_CLASS_AUDIO10_AS_AC_DYN_RANGE_CONTROL_PARAMETER;
1125 
1126 /* Audio Class 1.0 AC-3 Scaling Control (AC_SCALING_CONTROL)  */
1127 
1128 typedef struct UX_CLASS_AUDIO10_AS_AC_SCALING_CONTROL_PARAMETER_STRUCT
1129 {
1130     UCHAR           bScale;
1131 } UX_CLASS_AUDIO10_AS_AC_SCALING_CONTROL_PARAMETER;
1132 
1133 /* Audio Class 1.0 AC-3 High/Low Scaling Control (AC_HILO_SCALING_CONTROL)  */
1134 
1135 typedef struct UX_CLASS_AUDIO10_AS_AC_HILO_SCALING_CONTROL_PARAMETER_STRUCT
1136 {
1137     UCHAR           bLowScale;
1138     UCHAR           bHighScale;
1139 } UX_CLASS_AUDIO10_AS_AC_HILO_SCALING_CONTROL_PARAMETER;
1140 
1141 typedef struct UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DESCRIPTOR_STRUCT
1142 {
1143     UCHAR           bLength;
1144     UCHAR           bDescriptorType;
1145     UCHAR           bDescriptorSubtype;
1146     UCHAR           bFormatType;
1147     UCHAR           bNrChannels;
1148     UCHAR           bSubframeSize;
1149     UCHAR           bBitResolution;
1150     UCHAR           bSamFreqType;
1151 } UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DESCRIPTOR;
1152 
1153 typedef struct UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR_STRUCT
1154 {
1155     UCHAR           bLength;
1156     UCHAR           bDescriptorType;
1157     UCHAR           bDescriptorSubtype;
1158     UCHAR           bFormatType;
1159     UCHAR           bNrChannels;
1160     UCHAR           bSubframeSize;
1161     UCHAR           bBitResolution;
1162     UCHAR           bSamFreqType;   /* 0  */
1163     UCHAR           tLowerSamFreq[3];
1164     UCHAR           tUpperSamFreq[3];
1165 }
1166 UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR,
1167 UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DESCRIPTOR_0;
1168 
1169 typedef struct UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DISCRETE_DESCRIPTOR_STRUCT
1170 {
1171     UCHAR           bLength;
1172     UCHAR           bDescriptorType;
1173     UCHAR           bDescriptorSubtype;
1174     UCHAR           bFormatType;
1175     UCHAR           bNrChannels;
1176     UCHAR           bSubframeSize;
1177     UCHAR           bBitResolution;
1178     UCHAR           bSamFreqType;   /* 1  */
1179     UCHAR           tSamFreq[3 * 1];
1180 }
1181 UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DISCRETE_DESCRIPTOR,
1182 UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DESCRIPTOR_1;
1183 
1184 /* Audio Class 1.0 Interrupt Status Word  */
1185 typedef struct UX_CLASS_AUDIO10_INT_STATUS_STRUCT
1186 {
1187     UCHAR           bStatusType;
1188     UCHAR           bOriginator;
1189 } UX_CLASS_AUDIO10_INT_STATUS;
1190 
1191 /* Status Word::bStatusType.  */
1192 #define UX_CLASS_AUDIO10_INT_STATUS_TYPE_PENDING                    (0x1u << 7)
1193 #define UX_CLASS_AUDIO10_INT_STATUS_TYPE_MEM_CHANGED                (0x1u << 6)
1194 #define UX_CLASS_AUDIO10_INT_STATUS_TYPE_ORIGINATOR_MASK            (0xFu << 0)
1195 #define UX_CLASS_AUDIO10_INT_STATUS_TYPE_ORIGINATOR_AC              (0x0u << 0) /* AudioControl interface    */
1196 #define UX_CLASS_AUDIO10_INT_STATUS_TYPE_ORIGINATOR_AS              (0x1u << 0) /* AudioStreaming interface  */
1197 #define UX_CLASS_AUDIO10_INT_STATUS_TYPE_ORIGINATOR_AS_EP           (0x2u << 0) /* AudioStreaming endpoint   */
1198 
1199 
1200 #endif
1201