1 /* $NetBSD: uaudioreg.h,v 1.19 2023/04/16 19:26:20 mlelstv Exp $ */ 2 3 /* 4 * Copyright (c) 1999 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Lennart Augustsson (lennart@augustsson.net) at 9 * Carlstedt Research & Technology. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #define UAUDIO_VERSION1 0x100 34 #define UAUDIO_VERSION2 0x200 35 36 #define UDESC_CS_CONFIG 0x22 37 #define UDESC_CS_STRING 0x23 38 #define UDESC_CS_INTERFACE 0x24 39 #define UDESC_CS_ENDPOINT 0x25 40 41 #define UDESCSUB_AC_HEADER 1 42 #define UDESCSUB_AC_INPUT 2 43 #define UDESCSUB_AC_OUTPUT 3 44 #define UDESCSUB_AC_MIXER 4 45 #define UDESCSUB_AC_SELECTOR 5 46 #define UDESCSUB_AC_FEATURE 6 47 #define UDESCSUB_AC_EFFECT 7 48 #define UDESCSUB_AC_PROCESSING 8 49 #define UDESCSUB_AC_EXTENSION 9 50 #define UDESCSUB_AC_CLKSRC 10 51 #define UDESCSUB_AC_CLKSEL 11 52 #define UDESCSUB_AC_CLKMULT 12 53 #define UDESCSUB_AC_RATECONV 13 54 55 /* The first fields are identical to usb_endpoint_descriptor_t */ 56 typedef struct { 57 uByte bLength; 58 uByte bDescriptorType; 59 uByte bEndpointAddress; 60 uByte bmAttributes; 61 uWord wMaxPacketSize; 62 uByte bInterval; 63 /* 64 * The following two entries are only used by the Audio Class. 65 * And according to the specs the Audio Class is the only one 66 * allowed to extend the endpoint descriptor. 67 * Who knows what goes on in the minds of the people in the USB 68 * standardization? :-( 69 * 70 * UAC2 no longer uses these extra fields. Check bLength to 71 * find out if these exist. 72 */ 73 uByte bRefresh; 74 uByte bSynchAddress; 75 } UPACKED usb_endpoint_descriptor_audio_t; 76 77 /* generic, for iteration */ 78 typedef struct { 79 uByte bLength; 80 uByte bDescriptorType; 81 uByte bDescriptorSubtype; 82 } UPACKED uaudio_cs_descriptor_t; 83 84 struct usb_audio_control_descriptor { 85 uByte bLength; 86 uByte bDescriptorType; 87 uByte bDescriptorSubtype; 88 uWord bcdADC; 89 uWord wTotalLength; 90 uByte bInCollection; 91 uByte baInterfaceNr[1]; 92 } UPACKED; 93 94 struct usb_audio_streaming_interface_v1_descriptor { 95 uByte bLength; 96 uByte bDescriptorType; 97 uByte bDescriptorSubtype; 98 uByte bTerminalLink; 99 uByte bDelay; 100 uWord wFormatTag; 101 } UPACKED; 102 103 struct usb_audio_streaming_interface_v2_descriptor { 104 uByte bLength; 105 uByte bDescriptorType; 106 uByte bDescriptorSubtype; 107 uByte bTerminalLink; 108 uByte bmControls; 109 uByte bFormatType; 110 uDWord bmFormats; 111 uByte bNrChannels; 112 uDWord bmChannelConfig; 113 uByte iChannelNames; 114 } UPACKED; 115 116 union usb_audio_streaming_interface_descriptor { 117 struct usb_audio_streaming_interface_v1_descriptor v1; 118 struct usb_audio_streaming_interface_v2_descriptor v2; 119 }; 120 121 struct usb_audio_streaming_endpoint_descriptor { 122 uByte bLength; 123 uByte bDescriptorType; 124 uByte bDescriptorSubtype; 125 uByte bmAttributes; 126 #define UA_SED_FREQ_CONTROL 0x01 127 #define UA_SED_PITCH_CONTROL 0x02 128 #define UA_SED_MAXPACKETSONLY 0x80 129 uByte bLockDelayUnits; 130 uWord wLockDelay; 131 } UPACKED; 132 133 struct usb_audio_streaming_type1_v1_descriptor { 134 uByte bLength; 135 uByte bDescriptorType; 136 uByte bDescriptorSubtype; 137 uByte bFormatType; 138 uByte bNrChannels; 139 uByte bSubFrameSize; 140 uByte bBitResolution; 141 uByte bSamFreqType; 142 #define UA_SAMP_CONTINUOUS 0 143 uByte tSamFreq[3*AUFMT_MAX_FREQUENCIES]; 144 #define UA_GETSAMP(p, n) ((p)->tSamFreq[(n)*3+0] | ((p)->tSamFreq[(n)*3+1] << 8) | ((p)->tSamFreq[(n)*3+2] << 16)) 145 #define UA_SAMP_LO(p) UA_GETSAMP(p, 0) 146 #define UA_SAMP_HI(p) UA_GETSAMP(p, 1) 147 } UPACKED; 148 149 struct usb_audio_streaming_type1_v2_descriptor { 150 uByte bLength; 151 uByte bDescriptorType; 152 uByte bDescriptorSubtype; 153 uByte bFormatType; 154 uByte bSubslotSize; 155 uByte bBitResolution; 156 } UPACKED; 157 158 union usb_audio_streaming_type1_descriptor { 159 struct usb_audio_streaming_type1_v1_descriptor v1; 160 struct usb_audio_streaming_type1_v2_descriptor v2; 161 }; 162 163 struct usb_audio_v1_cluster { 164 uByte bNrChannels; 165 uWord wChannelConfig; 166 #define UA_CHANNEL_LEFT 0x0001 167 #define UA_CHANNEL_RIGHT 0x0002 168 #define UA_CHANNEL_CENTER 0x0004 169 #define UA_CHANNEL_LFE 0x0008 170 #define UA_CHANNEL_L_SURROUND 0x0010 171 #define UA_CHANNEL_R_SURROUND 0x0020 172 #define UA_CHANNEL_L_CENTER 0x0040 173 #define UA_CHANNEL_R_CENTER 0x0080 174 #define UA_CHANNEL_SURROUND 0x0100 175 #define UA_CHANNEL_L_SIDE 0x0200 176 #define UA_CHANNEL_R_SIDE 0x0400 177 #define UA_CHANNEL_TOP 0x0800 178 uByte iChannelNames; 179 } UPACKED; 180 181 struct usb_audio_v2_cluster { 182 uByte bNrChannels; 183 uDWord bmChannelConfig; 184 /*#define UA_CHANNEL_LEFT 0x00000001 */ 185 /*#define UA_CHANNEL_RIGHT 0x00000002 */ 186 /*#define UA_CHANNEL_CENTER 0x00000004 */ 187 /*#define UA_CHANNEL_LFE 0x00000008 */ 188 #define UA_CHANNEL_BL 0x00000010 189 #define UA_CHANNEL_BR 0x00000020 190 #define UA_CHANNEL_FLC 0x00000040 191 #define UA_CHANNEL_FRC 0x00000080 192 #define UA_CHANNEL_BC 0x00000100 193 #define UA_CHANNEL_SL 0x00000200 194 #define UA_CHANNEL_SR 0x00000400 195 #define UA_CHANNEL_TC 0x00000800 196 #define UA_CHANNEL_TFL 0x00001000 197 #define UA_CHANNEL_TFC 0x00002000 198 #define UA_CHANNEL_TFR 0x00004000 199 #define UA_CHANNEL_TBL 0x00008000 200 #define UA_CHANNEL_TBC 0x00010000 201 #define UA_CHANNEL_TBR 0x00020000 202 #define UA_CHANNEL_TFLC 0x00040000 203 #define UA_CHANNEL_TFRC 0x00080000 204 #define UA_CHANNEL_LLFE 0x00100000 205 #define UA_CHANNEL_RLFE 0x00200000 206 #define UA_CHANNEL_TSL 0x00400000 207 #define UA_CHANNEL_TSR 0x00800000 208 #define UA_CHANNEL_BOTTOM 0x01000000 209 #define UA_CHANNEL_BOTTOMLC 0x02000000 210 #define UA_CHANNEL_BOTTOMRC 0x04000000 211 #define UA_CHANNEL_RD 0x80000000 212 uByte iChannelNames; 213 } UPACKED; 214 215 union usb_audio_cluster { 216 struct usb_audio_v1_cluster v1; 217 struct usb_audio_v2_cluster v2; 218 }; 219 220 /* Shared by all units and terminals */ 221 struct usb_audio_unit { 222 uByte bLength; 223 uByte bDescriptorType; 224 uByte bDescriptorSubtype; 225 uByte bUnitId; 226 }; 227 228 /* UDESCSUB_AC_INPUT */ 229 struct usb_audio_input_v1_terminal { 230 uByte bLength; 231 uByte bDescriptorType; 232 uByte bDescriptorSubtype; 233 uByte bTerminalId; 234 uWord wTerminalType; 235 uByte bAssocTerminal; 236 uByte bNrChannels; 237 uWord wChannelConfig; 238 uByte iChannelNames; 239 uByte iTerminal; 240 } UPACKED; 241 struct usb_audio_input_v2_terminal { 242 uByte bLength; 243 uByte bDescriptorType; 244 uByte bDescriptorSubtype; 245 uByte bTerminalId; 246 uWord wTerminalType; 247 uByte bAssocTerminal; 248 uByte bCSourceId; 249 uByte bNrChannels; 250 uDWord bmChannelConfig; 251 uByte iChannelNames; 252 uWord bmControls; 253 uByte iTerminal; 254 } UPACKED; 255 256 union usb_audio_input_terminal { 257 struct usb_audio_input_v1_terminal v1; 258 struct usb_audio_input_v2_terminal v2; 259 }; 260 261 /* UDESCSUB_AC_OUTPUT */ 262 struct usb_audio_output_v1_terminal { 263 uByte bLength; 264 uByte bDescriptorType; 265 uByte bDescriptorSubtype; 266 uByte bTerminalId; 267 uWord wTerminalType; 268 uByte bAssocTerminal; 269 uByte bSourceId; 270 uByte iTerminal; 271 } UPACKED; 272 struct usb_audio_output_v2_terminal { 273 uByte bLength; 274 uByte bDescriptorType; 275 uByte bDescriptorSubtype; 276 uByte bTerminalId; 277 uWord wTerminalType; 278 uByte bAssocTerminal; 279 uByte bSourceId; 280 uByte bCSourceId; 281 uWord bmControls; 282 uByte iTerminal; 283 } UPACKED; 284 285 union usb_audio_output_terminal { 286 struct usb_audio_output_v1_terminal v1; 287 struct usb_audio_output_v2_terminal v2; 288 }; 289 290 /* UDESCSUB_AC_MIXER */ 291 struct usb_audio_mixer_unit { 292 uByte bLength; 293 uByte bDescriptorType; 294 uByte bDescriptorSubtype; 295 uByte bUnitId; 296 uByte bNrInPins; 297 uByte baSourceId[255]; /* [bNrInPins] */ 298 /* union usb_audio_mixer_unit_1 */ 299 } UPACKED; 300 struct usb_audio_mixer_v1_unit_1 { 301 uByte bNrChannels; 302 uWord wChannelConfig; 303 uByte iChannelNames; 304 uByte bmControls[255]; /* [bNrChannels] */ 305 /*uByte iMixer;*/ 306 } UPACKED; 307 struct usb_audio_mixer_v2_unit_1 { 308 uByte bNrChannels; 309 uDWord bmChannelConfig; 310 uByte iChannelNames; 311 uByte bmMixerControls[255]; /* [bNrChannels] */ 312 /*uByte bmControls;*/ 313 /*uByte iMixer;*/ 314 } UPACKED; 315 #define UA_MIX_CLUSTER_MASK 0x03 316 #define UA_MIX_CLUSTER_RO 0x01 317 #define UA_MIX_CLUSTER_RW 0x03 318 /* UAC2 */ 319 #define UA_MIX_UNDERFLOW_MASK 0x0c 320 #define UA_MIX_UNDERFLOW_RO 0x04 321 #define UA_MIX_UNDERFLOW_RW 0x0c 322 #define UA_MIX_OVERFLOW_MASK 0x30 323 #define UA_MIX_OVERFLOW_RO 0x10 324 #define UA_MIX_OVERFLOW_RW 0x30 325 326 union usb_audio_mixer_unit_1 { 327 struct usb_audio_mixer_v1_unit_1 v1; 328 struct usb_audio_mixer_v2_unit_1 v2; 329 }; 330 331 /* UDESCSUB_AC_SELECTOR */ 332 struct usb_audio_selector_unit { 333 uByte bLength; 334 uByte bDescriptorType; 335 uByte bDescriptorSubtype; 336 uByte bUnitId; 337 uByte bNrInPins; 338 uByte baSourceId[255]; /* [bNrInPins] */ 339 /* uByte iSelector; */ 340 } UPACKED; 341 342 /* UDESCSUB_AC_FEATURE */ 343 struct usb_audio_feature_v1_unit { 344 uByte bLength; 345 uByte bDescriptorType; 346 uByte bDescriptorSubtype; 347 uByte bUnitId; 348 uByte bSourceId; 349 uByte bControlSize; 350 uByte bmaControls[255]; /* size for more than enough */ 351 /* uByte iFeature; */ 352 } UPACKED; 353 struct usb_audio_feature_v2_unit { 354 uByte bLength; 355 uByte bDescriptorType; 356 uByte bDescriptorSubtype; 357 uByte bUnitId; 358 uByte bSourceId; 359 uDWord bmaControls[255]; /* size for more than enough */ 360 /* uByte iFeature; */ 361 } UPACKED; 362 363 union usb_audio_feature_unit { 364 struct usb_audio_feature_v1_unit v1; 365 struct usb_audio_feature_v2_unit v2; 366 }; 367 368 /* UDESCSUB_AC_PROCESSING */ 369 struct usb_audio_processing_unit { 370 uByte bLength; 371 uByte bDescriptorType; 372 uByte bDescriptorSubtype; 373 uByte bUnitId; 374 uWord wProcessType; 375 uByte bNrInPins; 376 uByte baSourceId[255]; /* [bNrInPins] */ 377 /* struct usb_audio_processing_unit_1 */ 378 } UPACKED; 379 struct usb_audio_processing_unit_1{ 380 uByte bNrChannels; 381 uWord wChannelConfig; 382 uByte iChannelNames; 383 uByte bControlSize; 384 uByte bmControls[255]; /* [bControlSize] */ 385 #define UA_PROC_ENABLE_MASK 1 386 } UPACKED; 387 388 struct usb_audio_processing_unit_updown { 389 uByte iProcessing; 390 uByte bNrModes; 391 uWord waModes[255]; /* [bNrModes] */ 392 } UPACKED; 393 394 /* UDESCSUB_AC_EXTENSION */ 395 struct usb_audio_extension_unit { 396 uByte bLength; 397 uByte bDescriptorType; 398 uByte bDescriptorSubtype; 399 uByte bUnitId; 400 uWord wExtensionCode; 401 uByte bNrInPins; 402 uByte baSourceId[255]; /* [bNrInPins] */ 403 /* struct usb_audio_extension_unit_1 */ 404 } UPACKED; 405 struct usb_audio_extension_unit_1 { 406 uByte bNrChannels; 407 uWord wChannelConfig; 408 uByte iChannelNames; 409 uByte bControlSize; 410 uByte bmControls[255]; /* [bControlSize] */ 411 #define UA_EXT_ENABLE_MASK 1 412 #define UA_EXT_ENABLE 1 413 /*uByte iExtension;*/ 414 } UPACKED; 415 416 /* UDESCSUB_AC_CLKSRC */ 417 struct usb_audio_clksrc_unit { 418 uByte bLength; 419 uByte bDescriptorType; 420 uByte bDescriptorSubtype; 421 uByte bClockId; 422 uByte bmAttributes; 423 uByte bmControls; 424 uByte bAssocTerminal; 425 uByte iClockSource; 426 } UPACKED; 427 428 /* UDESCSUB_AC_CLKSEL */ 429 struct usb_audio_clksel_unit { 430 uByte bLength; 431 uByte bDescriptorType; 432 uByte bDescriptorSubtype; 433 uByte bClockId; 434 uByte bNrInPins; 435 uByte baCSourceId[255]; 436 /*uByte bmControls;*/ 437 /*uByte iClockSelector;*/ 438 } UPACKED; 439 440 /* UDESCSUB_AC_CLKMULT */ 441 struct usb_audio_clkmult_unit { 442 uByte bLength; 443 uByte bDescriptorType; 444 uByte bDescriptorSubtype; 445 uByte bClockId; 446 uByte bCSourceId; 447 uByte bmControls; 448 uByte iClockMultiplier; 449 } UPACKED; 450 451 /* USB terminal types */ 452 #define UAT_UNDEFINED 0x0100 453 #define UAT_STREAM 0x0101 454 #define UAT_VENDOR 0x01ff 455 /* input terminal types */ 456 #define UATI_UNDEFINED 0x0200 457 #define UATI_MICROPHONE 0x0201 458 #define UATI_DESKMICROPHONE 0x0202 459 #define UATI_PERSONALMICROPHONE 0x0203 460 #define UATI_OMNIMICROPHONE 0x0204 461 #define UATI_MICROPHONEARRAY 0x0205 462 #define UATI_PROCMICROPHONEARR 0x0206 463 /* output terminal types */ 464 #define UATO_UNDEFINED 0x0300 465 #define UATO_SPEAKER 0x0301 466 #define UATO_HEADPHONES 0x0302 467 #define UATO_DISPLAYAUDIO 0x0303 468 #define UATO_DESKTOPSPEAKER 0x0304 469 #define UATO_ROOMSPEAKER 0x0305 470 #define UATO_COMMSPEAKER 0x0306 471 #define UATO_SUBWOOFER 0x0307 472 /* bidir terminal types */ 473 #define UATB_UNDEFINED 0x0400 474 #define UATB_HANDSET 0x0401 475 #define UATB_HEADSET 0x0402 476 #define UATB_SPEAKERPHONE 0x0403 477 #define UATB_SPEAKERPHONEESUP 0x0404 478 #define UATB_SPEAKERPHONEECANC 0x0405 479 /* telephony terminal types */ 480 #define UATT_UNDEFINED 0x0500 481 #define UATT_PHONELINE 0x0501 482 #define UATT_TELEPHONE 0x0502 483 #define UATT_DOWNLINEPHONE 0x0503 484 /* external terminal types */ 485 #define UATE_UNDEFINED 0x0600 486 #define UATE_ANALOGCONN 0x0601 487 #define UATE_DIGITALAUIFC 0x0602 488 #define UATE_LINECONN 0x0603 489 #define UATE_LEGACYCONN 0x0604 490 #define UATE_SPDIF 0x0605 491 #define UATE_1394DA 0x0606 492 #define UATE_1394DV 0x0607 493 /* embedded function terminal types */ 494 #define UATF_UNDEFINED 0x0700 495 #define UATF_CALIBNOISE 0x0701 496 #define UATF_EQUNOISE 0x0702 497 #define UATF_CDPLAYER 0x0703 498 #define UATF_DAT 0x0704 499 #define UATF_DCC 0x0705 500 #define UATF_MINIDISK 0x0706 501 #define UATF_ANALOGTAPE 0x0707 502 #define UATF_PHONOGRAPH 0x0708 503 #define UATF_VCRAUDIO 0x0709 504 #define UATF_VIDEODISCAUDIO 0x070a 505 #define UATF_DVDAUDIO 0x070b 506 #define UATF_TVTUNERAUDIO 0x070c 507 #define UATF_SATELLITE 0x070d 508 #define UATF_CABLETUNER 0x070e 509 #define UATF_DSS 0x070f 510 #define UATF_RADIORECV 0x0710 511 #define UATF_RADIOXMIT 0x0711 512 #define UATF_MULTITRACK 0x0712 513 #define UATF_SYNTHESIZER 0x0713 514 515 516 #define SET_CUR 0x01 517 #define GET_CUR 0x81 518 #define SET_MIN 0x02 519 #define GET_MIN 0x82 520 #define SET_MAX 0x03 521 #define GET_MAX 0x83 522 #define SET_RES 0x04 523 #define GET_RES 0x84 524 #define SET_MEM 0x05 525 #define GET_MEM 0x85 526 #define GET_STAT 0xff 527 528 #define V2_CUR 0x01 529 #define V2_RANGES 0x02 530 531 #define V2_CUR_CLKFREQ 0x01 532 #define V2_CUR_CLKSEL 0x01 533 #define V2_CUR_SELECTOR 0x01 534 535 536 #define MUTE_CONTROL 0x01 537 #define VOLUME_CONTROL 0x02 538 #define BASS_CONTROL 0x03 539 #define MID_CONTROL 0x04 540 #define TREBLE_CONTROL 0x05 541 #define GRAPHIC_EQUALIZER_CONTROL 0x06 542 #define AGC_CONTROL 0x07 543 #define DELAY_CONTROL 0x08 544 #define BASS_BOOST_CONTROL 0x09 545 #define LOUDNESS_CONTROL 0x0a 546 #define GAIN_CONTROL 0x0b 547 #define GAINPAD_CONTROL 0x0c 548 #define PHASEINV_CONTROL 0x0d 549 /* V2 */ 550 #define UNDERFLOW_CONTROL 0x0e 551 #define OVERFLOW_CONTROL 0x0f 552 553 #define FU_MASK(u) (1 << ((u)-1)) 554 #define V2_FU_MASK(u) (3 << ((u)-1)*2) 555 556 #define MASTER_CHAN 0 557 558 #define AS_GENERAL 1 559 #define FORMAT_TYPE 2 560 #define FORMAT_SPECIFIC 3 561 562 #define UA_FMT_PCM 1 563 #define UA_FMT_PCM8 2 564 #define UA_FMT_IEEE_FLOAT 3 565 #define UA_FMT_ALAW 4 566 #define UA_FMT_MULAW 5 567 #define UA_FMT_MPEG 0x1001 568 #define UA_FMT_AC3 0x1002 569 570 #define UA_V2_FMT_PCM 0x01 571 #define UA_V2_FMT_PCM8 0x02 572 #define UA_V2_FMT_IEEE_FLOAT 0x04 573 #define UA_V2_FMT_ALAW 0x08 574 #define UA_V2_FMT_MULAW 0x10 575 576 #define SAMPLING_FREQ_CONTROL 0x01 577 #define PITCH_CONTROL 0x02 578 579 #define FORMAT_TYPE_UNDEFINED 0 580 #define FORMAT_TYPE_I 1 581 #define FORMAT_TYPE_II 2 582 #define FORMAT_TYPE_III 3 583 584 #define UA_PROC_MASK(n) (1<< ((n)-1)) 585 #define PROCESS_UNDEFINED 0 586 #define XX_ENABLE_CONTROL 1 587 #define UPDOWNMIX_PROCESS 1 588 #define UD_ENABLE_CONTROL 1 589 #define UD_MODE_SELECT_CONTROL 2 590 #define DOLBY_PROLOGIC_PROCESS 2 591 #define DP_ENABLE_CONTROL 1 592 #define DP_MODE_SELECT_CONTROL 2 593 #define P3D_STEREO_EXTENDER_PROCESS 3 594 #define P3D_ENABLE_CONTROL 1 595 #define P3D_SPACIOUSNESS_CONTROL 2 596 #define REVERBATION_PROCESS 4 597 #define RV_ENABLE_CONTROL 1 598 #define RV_LEVEL_CONTROL 2 599 #define RV_TIME_CONTROL 3 600 #define RV_FEEDBACK_CONTROL 4 601 #define CHORUS_PROCESS 5 602 #define CH_ENABLE_CONTROL 1 603 #define CH_LEVEL_CONTROL 2 604 #define CH_RATE_CONTROL 3 605 #define CH_DEPTH_CONTROL 4 606 #define DYN_RANGE_COMP_PROCESS 6 607 #define DR_ENABLE_CONTROL 1 608 #define DR_COMPRESSION_RATE_CONTROL 2 609 #define DR_MAXAMPL_CONTROL 3 610 #define DR_THRESHOLD_CONTROL 4 611 #define DR_ATTACK_TIME_CONTROL 5 612 #define DR_RELEASE_TIME_CONTROL 6 613