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