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 /**   Device Audio Class                                                  */
18 /**                                                                       */
19 /**************************************************************************/
20 /**************************************************************************/
21 
22 
23 /**************************************************************************/
24 /*                                                                        */
25 /*  COMPONENT DEFINITION                                   RELEASE        */
26 /*                                                                        */
27 /*    ux_device_class_audio20.h                           PORTABLE C      */
28 /*                                                           6.3.0        */
29 /*  AUTHOR                                                                */
30 /*                                                                        */
31 /*    Chaoqiong Xiao, Microsoft Corporation                               */
32 /*                                                                        */
33 /*  DESCRIPTION                                                           */
34 /*                                                                        */
35 /*    This file contains all the header and extern functions used by the  */
36 /*    USBX audio class version 2.0.                                       */
37 /*                                                                        */
38 /*  RELEASE HISTORY                                                       */
39 /*                                                                        */
40 /*    DATE              NAME                      DESCRIPTION             */
41 /*                                                                        */
42 /*  05-19-2020     Chaoqiong Xiao           Initial Version 6.0           */
43 /*  09-30-2020     Chaoqiong Xiao           Modified comment(s),          */
44 /*                                            resulting in version 6.1    */
45 /*  04-02-2021     Chaoqiong Xiao           Modified comment(s),          */
46 /*                                            added volume RES support,   */
47 /*                                            resulting in version 6.1.6  */
48 /*  08-02-2021     Chaoqiong Xiao           Modified comment(s),          */
49 /*                                            added extern "C" keyword    */
50 /*                                            for compatibility with C++, */
51 /*                                            resulting in version 6.1.8  */
52 /*  07-29-2022     Chaoqiong Xiao           Modified comment(s),          */
53 /*                                            added support of multiple   */
54 /*                                            sampling frequencies,       */
55 /*                                            added clock multiplier DEFs,*/
56 /*                                            resulting in version 6.1.12 */
57 /*  03-08-2023     Chaoqiong Xiao           Modified comment(s),          */
58 /*                                            added error checks support, */
59 /*                                            resulting in version 6.2.1  */
60 /*  10-31-2023     Chaoqiong Xiao           Modified comment(s),          */
61 /*                                            optimized USB descriptors,  */
62 /*                                            resulting in version 6.3.0  */
63 /*                                                                        */
64 /**************************************************************************/
65 
66 #ifndef UX_DEVICE_CLASS_AUDIO20_H
67 #define UX_DEVICE_CLASS_AUDIO20_H
68 
69 /* Determine if a C++ compiler is being used.  If so, ensure that standard
70    C is used to process the API information.  */
71 
72 #ifdef   __cplusplus
73 
74 /* Yes, C++ compiler is present.  Use standard C.  */
75 extern   "C" {
76 
77 #endif
78 
79 
80 /* Internal option: enable the basic USBX error checking. This define is typically used
81    while debugging application.  */
82 #if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_DEVICE_CLASS_AUDIO_ENABLE_ERROR_CHECKING)
83 #define UX_DEVICE_CLASS_AUDIO_ENABLE_ERROR_CHECKING
84 #endif
85 
86 
87 /* Define Audio Class function category codes.  */
88 
89 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_UNDEFINED                0x00
90 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_DESKTOP_SPEAKER          0x01
91 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_HOME_THEATER             0x02
92 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_MICROPHONE               0x03
93 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_HEADSET                  0x04
94 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_TELEPHONE                0x05
95 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_CONVERTER                0x06
96 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_VOICE_SOUND_RECORDER     0x07
97 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_I_O_BOX                  0x08
98 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_MUSICAL_INSTRUMENT       0x09
99 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_PRO_AUDIO                0x0A
100 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_AUDIO_VIDEO              0x0B
101 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_CONTROL_PANEL            0x0C
102 #define UX_DEVICE_CLASS_AUDIO20_CATEGORY_OTHER                    0xFF
103 
104 
105 /* Define Audio Class specific AC interface descriptor subclasses.  */
106 
107 #define UX_DEVICE_CLASS_AUDIO20_AC_UNDEFINED                      0x00
108 #define UX_DEVICE_CLASS_AUDIO20_AC_HEADER                         0x01
109 #define UX_DEVICE_CLASS_AUDIO20_AC_INPUT_TERMINAL                 0x02
110 #define UX_DEVICE_CLASS_AUDIO20_AC_OUTPUT_TERMINAL                0x03
111 #define UX_DEVICE_CLASS_AUDIO20_AC_MIXER_UNIT                     0x04
112 #define UX_DEVICE_CLASS_AUDIO20_AC_SELECTOR_UNIT                  0x05
113 #define UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT                   0x06
114 #define UX_DEVICE_CLASS_AUDIO20_AC_EFFECT_UNIT                    0x07
115 #define UX_DEVICE_CLASS_AUDIO20_AC_PROCESSING_UNIT                0x08
116 #define UX_DEVICE_CLASS_AUDIO20_AC_EXTENSION_UNIT                 0x09
117 #define UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_SOURCE                   0x0A
118 #define UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_SELECTOR                 0x0B
119 #define UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_MULTIPLIER               0x0C
120 #define UX_DEVICE_CLASS_AUDIO20_AC_SAMPLE_RATE_CONVERTER          0x0D
121 
122 
123 /* Define Audio Class specific AS interface descriptor subclasses.  */
124 
125 #define UX_DEVICE_CLASS_AUDIO20_AS_UNDEFINED                      0x00
126 #define UX_DEVICE_CLASS_AUDIO20_AS_GENERAL                        0x01
127 #define UX_DEVICE_CLASS_AUDIO20_AS_FORMAT_TYPE                    0x02
128 #define UX_DEVICE_CLASS_AUDIO20_AS_ENCODER                        0x03
129 #define UX_DEVICE_CLASS_AUDIO20_AS_DECODER                        0x04
130 
131 
132 /* Define Audio Class specific endpoint descriptor subtypes.  */
133 
134 #define UX_DEVICE_CLASS_AUDIO20_EP_UNDEFINED                      0x00
135 #define UX_DEVICE_CLASS_AUDIO20_EP_GENERAL                        0x01
136 
137 
138 /* Define Audio Class specific request codes.  */
139 
140 #define UX_DEVICE_CLASS_AUDIO20_REQUEST_CODE_UNDEFINED            0x00
141 #define UX_DEVICE_CLASS_AUDIO20_CUR                               0x01
142 #define UX_DEVICE_CLASS_AUDIO20_RANGE                             0x02
143 #define UX_DEVICE_CLASS_AUDIO20_MEM                               0x03
144 
145 
146 /* Define Audio Class specific clock source control selectors.  */
147 
148 #define UX_DEVICE_CLASS_AUDIO20_CS_CONTROL_UNDEFINED              0x00
149 #define UX_DEVICE_CLASS_AUDIO20_CS_SAM_FREQ_CONTROL               0x01
150 #define UX_DEVICE_CLASS_AUDIO20_CS_CLOCK_VALID_CONTROL            0x02
151 
152 
153 /* Define Audio Class specific clock selector control selectors.  */
154 
155 
156 #define UX_DEVICE_CLASS_AUDIO20_CX_CONTROL_UNDEFINED              0x00
157 #define UX_DEVICE_CLASS_AUDIO20_CX_CLOCK_SELECTOR_CONTROL         0x01
158 
159 
160 /* Define Audio Class specific clock multiplier control selectors.  */
161 
162 
163 #define UX_DEVICE_CLASS_AUDIO20_CM_CONTROL_UNDEFINED              0x00
164 #define UX_DEVICE_CLASS_AUDIO20_CM_NUMERATOR_CONTROL              0x01
165 #define UX_DEVICE_CLASS_AUDIO20_CM_DENOMINATOR_CONTROL            0x02
166 
167 /* Define Audio Class specific terminal control selectors.  */
168 
169 #define UX_DEVICE_CLASS_AUDIO20_TE_CONTROL_UNDEFINED              0x00
170 #define UX_DEVICE_CLASS_AUDIO20_TE_COPY_PROTECT_CONTROL           0x01
171 #define UX_DEVICE_CLASS_AUDIO20_TE_CONNECTOR_CONTROL              0x02
172 #define UX_DEVICE_CLASS_AUDIO20_TE_OVERLOAD_CONTROL               0x03
173 #define UX_DEVICE_CLASS_AUDIO20_TE_CLUSTER_CONTROL                0x04
174 #define UX_DEVICE_CLASS_AUDIO20_TE_UNDERFLOW_CONTROL              0x05
175 #define UX_DEVICE_CLASS_AUDIO20_TE_OVERFLOW_CONTROL               0x06
176 #define UX_DEVICE_CLASS_AUDIO20_TE_LATENCY_CONTROL                0x07
177 
178 
179 /* Define Audio Class specific feature unit control selectors.  */
180 
181 #define UX_DEVICE_CLASS_AUDIO20_FU_CONTROL_UNDEFINED              0x00
182 #define UX_DEVICE_CLASS_AUDIO20_FU_MUTE_CONTROL                   0x01
183 #define UX_DEVICE_CLASS_AUDIO20_FU_VOLUME_CONTROL                 0x02
184 #define UX_DEVICE_CLASS_AUDIO20_FU_BASS_CONTROL                   0x03
185 #define UX_DEVICE_CLASS_AUDIO20_FU_MID_CONTROL                    0x04
186 #define UX_DEVICE_CLASS_AUDIO20_FU_TREBLE_CONTROL                 0x05
187 #define UX_DEVICE_CLASS_AUDIO20_FU_GRAPHIC_EQUALIZER_CONTROL      0x06
188 #define UX_DEVICE_CLASS_AUDIO20_FU_AUTOMATIC_GAIN_CONTROL         0x07
189 #define UX_DEVICE_CLASS_AUDIO20_FU_DELAY_CONTROL                  0x08
190 #define UX_DEVICE_CLASS_AUDIO20_FU_BASS_BOOST_CONTROL             0x09
191 #define UX_DEVICE_CLASS_AUDIO20_FU_LOUNDNESS_CONTROL              0x0A
192 #define UX_DEVICE_CLASS_AUDIO20_FU_INPUT_GAIN_CONTROL             0x0B
193 #define UX_DEVICE_CLASS_AUDIO20_FU_INPUT_GAIN_PAD_CONTROL         0x0C
194 #define UX_DEVICE_CLASS_AUDIO20_FU_PHASE_INVERTER_CONTROL         0x0D
195 #define UX_DEVICE_CLASS_AUDIO20_FU_UNDERFLOW_CONTROL              0x0E
196 #define UX_DEVICE_CLASS_AUDIO20_FU_OVERFLOW_CONTROL               0x0F
197 #define UX_DEVICE_CLASS_AUDIO20_FU_LATENCY_CONTROL                0x10
198 
199 
200 /* Define Audio Class encoding format type bit allocations.  */
201 
202 #define UX_DEVICE_CLASS_AUDIO20_FORMAT_PCM                        (1u << 0)
203 #define UX_DEVICE_CLASS_AUDIO20_FORMAT_PCM8                       (1u << 1)
204 #define UX_DEVICE_CLASS_AUDIO20_FORMAT_IEEE_FLOAT                 (1u << 2)
205 #define UX_DEVICE_CLASS_AUDIO20_FORMAT_ALAW                       (1u << 3)
206 #define UX_DEVICE_CLASS_AUDIO20_FORMAT_MULAW                      (1u << 4)
207 #define UX_DEVICE_CLASS_AUDIO20_FORMAT_RAW                        (1u << 31)
208 
209 
210 /* Audio Class Control header descriptor structures.  */
211 
212 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_HEADER_DESCRIPTOR_STRUCT
213 {
214 
215     UCHAR           bLength;
216     UCHAR           bDescriptorType;
217     UCHAR           bDescriptorSubtype;
218     UCHAR           _align_bcdADC[1];
219     USHORT          bcdADC;
220     UCHAR           bCategory;
221     UCHAR           _align_wTotalLength[1];
222     USHORT          wTotalLength;
223     UCHAR           _align_bmControls[2];
224     ULONG           bmControls;
225 } UX_DEVICE_CLASS_AUDIO20_AC_HEADER_DESCRIPTOR;
226 
227 
228 /* Define Audio Class specific clock source descriptor.  */
229 
230 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_SOURCE_DESCRIPTOR_STRUCT
231 {
232 
233     UCHAR           bLength;
234     UCHAR           bDescriptorType;
235     UCHAR           bDescriptorSubType;
236     UCHAR           bClockID;
237     UCHAR           bmAttributes;
238     UCHAR           bmControls;
239     UCHAR           bAssocTerminal;
240     UCHAR           iClockSource;
241 } UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_SOURCE_DESCRIPTOR;
242 
243 
244 /* Define Audio Class specific input terminal interface descriptor.  */
245 
246 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_INPUT_TERMINAL_DESCRIPTOR_STRUCT
247 {
248 
249     UCHAR           bLength;
250     UCHAR           bDescriptorType;
251     UCHAR           bDescriptorSubType;
252     UCHAR           bTerminalID;
253     USHORT          wTerminalType;
254     UCHAR           bAssocTerminal;
255     UCHAR           bCSourceID;
256     UCHAR           bNrChannels;
257     UCHAR           _align_bmChannelConfig[3];
258     ULONG           bmChannelConfig;
259     UCHAR           iChannelNames;
260     UCHAR           _align_bmControls[1];
261     USHORT          bmControls;
262     UCHAR           iTerminal;
263     UCHAR           _align_size[3];
264 } UX_DEVICE_CLASS_AUDIO20_AC_INPUT_TERMINAL_DESCRIPTOR;
265 
266 
267 /* Define Audio Class specific output terminal interface descriptor.  */
268 
269 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_OUTPUT_TERMINAL_DESCRIPTOR_STRUCT
270 {
271 
272     UCHAR           bLength;
273     UCHAR           bDescriptorType;
274     UCHAR           bDescriptorSubType;
275     UCHAR           bTerminalID;
276     USHORT          wTerminalType;
277     UCHAR           bAssocTerminal;
278     UCHAR           bSourceID;
279     UCHAR           bCSourceID;
280     UCHAR           _align_bmControls[1];
281     USHORT          bmControls;
282     UCHAR           iTerminal;
283     UCHAR           _align_size[3];
284 } UX_DEVICE_CLASS_AUDIO20_AC_OUTPUT_TERMINAL_DESCRIPTOR;
285 
286 
287 /* Define Audio Class specific feature unit descriptor.  */
288 
289 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR_STRUCT
290 {
291 
292     UCHAR           bLength;
293     UCHAR           bDescriptorType;
294     UCHAR           bDescriptorSubType;
295     UCHAR           bUnitID;
296     UCHAR           bSourceID;
297     UCHAR           _align_bmaControls[3];
298     ULONG           bmaControls;
299 } UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR;
300 
301 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT1_DESCRIPTOR_STRUCT
302 {
303 
304     UCHAR           bLength;
305     UCHAR           bDescriptorType;
306     UCHAR           bDescriptorSubType;
307     UCHAR           bUnitID;
308     UCHAR           bSourceID;
309     UCHAR           _align_bmaControls[3];
310     ULONG           bmaControls0;
311     ULONG           bmaControls1;
312 } UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT1_DESCRIPTOR;
313 
314 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT2_DESCRIPTOR_STRUCT
315 {
316 
317     UCHAR           bLength;
318     UCHAR           bDescriptorType;
319     UCHAR           bDescriptorSubType;
320     UCHAR           bUnitID;
321     UCHAR           bSourceID;
322     UCHAR           _align_bmaControls[3];
323     ULONG           bmaControls0;
324     ULONG           bmaControls1;
325     ULONG           bmaControls2;
326 } UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT2_DESCRIPTOR;
327 
328 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT3_DESCRIPTOR_STRUCT
329 {
330 
331     UCHAR           bLength;
332     UCHAR           bDescriptorType;
333     UCHAR           bDescriptorSubType;
334     UCHAR           bUnitID;
335     UCHAR           bSourceID;
336     UCHAR           _align_bmaControls[3];
337     ULONG           bmaControls0;
338     ULONG           bmaControls1;
339     ULONG           bmaControls2;
340     ULONG           bmaControls3;
341 } UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT3_DESCRIPTOR;
342 
343 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT6_DESCRIPTOR_STRUCT
344 {
345 
346     UCHAR           bLength;
347     UCHAR           bDescriptorType;
348     UCHAR           bDescriptorSubType;
349     UCHAR           bUnitID;
350     UCHAR           bSourceID;
351     UCHAR           _align_bmaControls[3];
352     ULONG           bmaControls0;
353     ULONG           bmaControls1;
354     ULONG           bmaControls2;
355     ULONG           bmaControls3;
356     ULONG           bmaControls4;
357     ULONG           bmaControls5;
358     ULONG           bmaControls6;
359 } UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT6_DESCRIPTOR;
360 
361 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT7_DESCRIPTOR_STRUCT
362 {
363 
364     UCHAR           bLength;
365     UCHAR           bDescriptorType;
366     UCHAR           bDescriptorSubType;
367     UCHAR           bUnitID;
368     UCHAR           bSourceID;
369     UCHAR           _align_bmaControls[3];
370     ULONG           bmaControls0;
371     ULONG           bmaControls1;
372     ULONG           bmaControls2;
373     ULONG           bmaControls3;
374     ULONG           bmaControls4;
375     ULONG           bmaControls5;
376     ULONG           bmaControls6;
377     ULONG           bmaControls7;
378 } UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT7_DESCRIPTOR;
379 
380 typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT8_DESCRIPTOR_STRUCT
381 {
382 
383     UCHAR           bLength;
384     UCHAR           bDescriptorType;
385     UCHAR           bDescriptorSubType;
386     UCHAR           bUnitID;
387     UCHAR           bSourceID;
388     UCHAR           _align_bmaControls[3];
389     ULONG           bmaControls0;
390     ULONG           bmaControls1;
391     ULONG           bmaControls2;
392     ULONG           bmaControls3;
393     ULONG           bmaControls4;
394     ULONG           bmaControls5;
395     ULONG           bmaControls6;
396     ULONG           bmaControls7;
397     ULONG           bmaControls8;
398 } UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT8_DESCRIPTOR;
399 
400 
401 /* Define Audio Class streaming interface descriptor.  */
402 
403 typedef struct UX_DEVICE_CLASS_AUDIO20_AS_INTERFACE_DESCRIPTOR_STRUCT
404 {
405 
406     UCHAR           bLength;
407     UCHAR           bDescriptorType;
408     UCHAR           bDescriptorSubtype;
409     UCHAR           bTerminalLink;
410     UCHAR           bmControls;
411     UCHAR           bFormatType;
412     UCHAR           _align_bmFormats[2];
413     ULONG           bmFormats;
414     UCHAR           bNrChannels;
415     UCHAR           _align_bmChannelConfig[3];
416     ULONG           bmChannelConfig;
417     UCHAR           iChannelNames;
418     UCHAR           _align_size[3];
419 } UX_DEVICE_CLASS_AUDIO20_AS_INTERFACE_DESCRIPTOR;
420 
421 
422 /* Define Audio Class type I format type descriptor.  */
423 
424 typedef struct UX_DEVICE_CLASS_AUDIO20_AS_TYPE_I_FORMAT_TYPE_DESCRIPTOR_STRUCT
425 {
426 
427     UCHAR           bLength;
428     UCHAR           bDescriptorType;
429     UCHAR           bDescriptorSubtype;
430     UCHAR           bFormatType;
431     UCHAR           bSubslotSize;
432     UCHAR           bBitResolution;
433     UCHAR           _align_size[2];
434 } UX_DEVICE_CLASS_AUDIO20_AS_TYPE_I_FORMAT_TYPE_DESCRIPTOR;
435 
436 
437 /* Define Audio Class specific streaming endpoint descriptor.  */
438 
439 typedef struct UX_DEVICE_CLASS_AUDIO20_AS_DATA_ENDPOINT_DESCRIPTOR_STRUCT
440 {
441 
442     UCHAR           bLength;
443     UCHAR           bDescriptorType;
444     UCHAR           bDescriptorSubtype;
445     UCHAR           bmAttributes;
446     UCHAR           bmControls;
447     UCHAR           bLockDelayUnits;
448     USHORT          wLockDelay;
449 } UX_DEVICE_CLASS_AUDIO20_AS_DATA_ENDPOINT_DESCRIPTOR;
450 
451 typedef struct UX_DEVICE_CLASS_AUDIO20_CONTROL_STRUCT
452 {
453     ULONG           ux_device_class_audio20_control_changed;
454 
455     ULONG           ux_device_class_audio20_control_cs_id;
456     ULONG           ux_device_class_audio20_control_sampling_frequency;         /* Set to 0 to customize frequencies (with following two fields).  */
457     ULONG           ux_device_class_audio20_control_sampling_frequency_cur;     /* Current selected frequency.  */
458     UCHAR           *ux_device_class_audio20_control_sampling_frequency_range;  /* UAC 2.0 Layer 3 parameter block of RANGE.  */
459 
460     ULONG           ux_device_class_audio20_control_fu_id;
461     USHORT          ux_device_class_audio20_control_mute[1];
462     SHORT           ux_device_class_audio20_control_volume_min[1];
463     SHORT           ux_device_class_audio20_control_volume_max[1];
464     USHORT          ux_device_class_audio20_control_volume_res[1];
465     SHORT           ux_device_class_audio20_control_volume[1];
466 } UX_DEVICE_CLASS_AUDIO20_CONTROL;
467 
468 #define UX_DEVICE_CLASS_AUDIO20_CONTROL_MUTE_CHANGED                1u
469 #define UX_DEVICE_CLASS_AUDIO20_CONTROL_VOLUME_CHANGED              2u
470 #define UX_DEVICE_CLASS_AUDIO20_CONTROL_FREQUENCY_CHANGED           4u
471 
472 typedef struct UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP_STRUCT
473 {
474     ULONG                            ux_device_class_audio20_control_group_controls_nb;
475     UX_DEVICE_CLASS_AUDIO20_CONTROL *ux_device_class_audio20_control_group_controls;
476 } UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP;
477 
478 
479 UINT _ux_device_class_audio20_control_process(UX_DEVICE_CLASS_AUDIO *audio,
480                                               UX_SLAVE_TRANSFER *transfer,
481                                               UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP *group);
482 
483 UINT _uxe_device_class_audio20_control_process(UX_DEVICE_CLASS_AUDIO *audio,
484                                               UX_SLAVE_TRANSFER *transfer,
485                                               UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP *group);
486 
487 #if defined(UX_DEVICE_CLASS_AUDIO_ENABLE_ERROR_CHECKING)
488 
489 #define ux_device_class_audio20_control_process _uxe_device_class_audio20_control_process
490 
491 #else
492 
493 #define ux_device_class_audio20_control_process _ux_device_class_audio20_control_process
494 
495 #endif
496 
497 /* Determine if a C++ compiler is being used.  If so, complete the standard
498    C conditional started above.  */
499 #ifdef __cplusplus
500 }
501 #endif
502 
503 #endif /* ifndef UX_DEVICE_CLASS_AUDIO20_H */
504