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