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