Annotation of sys/dev/usb/uaudioreg.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: uaudioreg.h,v 1.12 2007/06/09 11:06:53 mbalmer Exp $ */
! 2: /* $NetBSD: uaudioreg.h,v 1.11 2002/10/23 02:32:37 christos Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1999 The NetBSD Foundation, Inc.
! 6: * All rights reserved.
! 7: *
! 8: * This code is derived from software contributed to The NetBSD Foundation
! 9: * by Lennart Augustsson (lennart@augustsson.net) at
! 10: * Carlstedt Research & Technology.
! 11: *
! 12: * Redistribution and use in source and binary forms, with or without
! 13: * modification, are permitted provided that the following conditions
! 14: * are met:
! 15: * 1. Redistributions of source code must retain the above copyright
! 16: * notice, this list of conditions and the following disclaimer.
! 17: * 2. Redistributions in binary form must reproduce the above copyright
! 18: * notice, this list of conditions and the following disclaimer in the
! 19: * documentation and/or other materials provided with the distribution.
! 20: * 3. All advertising materials mentioning features or use of this software
! 21: * must display the following acknowledgement:
! 22: * This product includes software developed by the NetBSD
! 23: * Foundation, Inc. and its contributors.
! 24: * 4. Neither the name of The NetBSD Foundation nor the names of its
! 25: * contributors may be used to endorse or promote products derived
! 26: * from this software without specific prior written permission.
! 27: *
! 28: * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
! 29: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! 30: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! 31: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
! 32: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 33: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! 34: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
! 35: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 36: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 37: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! 38: * POSSIBILITY OF SUCH DAMAGE.
! 39: */
! 40:
! 41: #define UAUDIO_VERSION 0x100
! 42:
! 43: #define UDESC_CS_CONFIG 0x22
! 44: #define UDESC_CS_STRING 0x23
! 45: #define UDESC_CS_INTERFACE 0x24
! 46: #define UDESC_CS_ENDPOINT 0x25
! 47:
! 48: #define UDESCSUB_AC_HEADER 1
! 49: #define UDESCSUB_AC_INPUT 2
! 50: #define UDESCSUB_AC_OUTPUT 3
! 51: #define UDESCSUB_AC_MIXER 4
! 52: #define UDESCSUB_AC_SELECTOR 5
! 53: #define UDESCSUB_AC_FEATURE 6
! 54: #define UDESCSUB_AC_PROCESSING 7
! 55: #define UDESCSUB_AC_EXTENSION 8
! 56:
! 57: /* The first fields are identical to usb_endpoint_descriptor_t */
! 58: typedef struct {
! 59: uByte bLength;
! 60: uByte bDescriptorType;
! 61: uByte bEndpointAddress;
! 62: uByte bmAttributes;
! 63: uWord wMaxPacketSize;
! 64: uByte bInterval;
! 65: /*
! 66: * The following two entries are only used by the Audio Class.
! 67: * And according to the specs the Audio Class is the only one
! 68: * allowed to extend the endpoint descriptor.
! 69: * Who knows what goes on in the minds of the people in the USB
! 70: * standardization? :-(
! 71: */
! 72: uByte bRefresh;
! 73: uByte bSynchAddress;
! 74: } __packed usb_endpoint_descriptor_audio_t;
! 75:
! 76: struct usb_audio_control_descriptor {
! 77: uByte bLength;
! 78: uByte bDescriptorType;
! 79: uByte bDescriptorSubtype;
! 80: uWord bcdADC;
! 81: uWord wTotalLength;
! 82: uByte bInCollection;
! 83: uByte baInterfaceNr[1];
! 84: } __packed;
! 85:
! 86: struct usb_audio_streaming_interface_descriptor {
! 87: uByte bLength;
! 88: uByte bDescriptorType;
! 89: uByte bDescriptorSubtype;
! 90: uByte bTerminalLink;
! 91: uByte bDelay;
! 92: uWord wFormatTag;
! 93: } __packed;
! 94:
! 95: struct usb_audio_streaming_endpoint_descriptor {
! 96: uByte bLength;
! 97: uByte bDescriptorType;
! 98: uByte bDescriptorSubtype;
! 99: uByte bmAttributes;
! 100: #define UA_SED_FREQ_CONTROL 0x01
! 101: #define UA_SED_PITCH_CONTROL 0x02
! 102: #define UA_SED_MAXPACKETSONLY 0x80
! 103: uByte bLockDelayUnits;
! 104: uWord wLockDelay;
! 105: } __packed;
! 106:
! 107: struct usb_audio_streaming_type1_descriptor {
! 108: uByte bLength;
! 109: uByte bDescriptorType;
! 110: uByte bDescriptorSubtype;
! 111: uByte bFormatType;
! 112: uByte bNrChannels;
! 113: uByte bSubFrameSize;
! 114: uByte bBitResolution;
! 115: uByte bSamFreqType;
! 116: #define UA_SAMP_CONTNUOUS 0
! 117: uByte tSamFreq[3*2]; /* room for low and high */
! 118: #define UA_GETSAMP(p, n) ((p)->tSamFreq[(n)*3+0] | ((p)->tSamFreq[(n)*3+1] << 8) | ((p)->tSamFreq[(n)*3+2] << 16))
! 119: #define UA_SAMP_LO(p) UA_GETSAMP(p, 0)
! 120: #define UA_SAMP_HI(p) UA_GETSAMP(p, 1)
! 121: } __packed;
! 122:
! 123: struct usb_audio_cluster {
! 124: uByte bNrChannels;
! 125: uWord wChannelConfig;
! 126: uByte iChannelNames;
! 127: } __packed;
! 128:
! 129: /* Shared by all units and terminals */
! 130: struct usb_audio_unit {
! 131: uByte bLength;
! 132: uByte bDescriptorType;
! 133: uByte bDescriptorSubtype;
! 134: uByte bUnitId;
! 135: };
! 136:
! 137: /* UDESCSUB_AC_INPUT */
! 138: struct usb_audio_input_terminal {
! 139: uByte bLength;
! 140: uByte bDescriptorType;
! 141: uByte bDescriptorSubtype;
! 142: uByte bTerminalId;
! 143: uWord wTerminalType;
! 144: uByte bAssocTerminal;
! 145: uByte bNrChannels;
! 146: uWord wChannelConfig;
! 147: uByte iChannelNames;
! 148: uByte iTerminal;
! 149: } __packed;
! 150:
! 151: /* UDESCSUB_AC_OUTPUT */
! 152: struct usb_audio_output_terminal {
! 153: uByte bLength;
! 154: uByte bDescriptorType;
! 155: uByte bDescriptorSubtype;
! 156: uByte bTerminalId;
! 157: uWord wTerminalType;
! 158: uByte bAssocTerminal;
! 159: uByte bSourceId;
! 160: uByte iTerminal;
! 161: } __packed;
! 162:
! 163: /* UDESCSUB_AC_MIXER */
! 164: struct usb_audio_mixer_unit {
! 165: uByte bLength;
! 166: uByte bDescriptorType;
! 167: uByte bDescriptorSubtype;
! 168: uByte bUnitId;
! 169: uByte bNrInPins;
! 170: uByte baSourceId[255]; /* [bNrInPins] */
! 171: /* struct usb_audio_mixer_unit_1 */
! 172: } __packed;
! 173: struct usb_audio_mixer_unit_1 {
! 174: uByte bNrChannels;
! 175: uWord wChannelConfig;
! 176: uByte iChannelNames;
! 177: uByte bmControls[255]; /* [bNrChannels] */
! 178: /*uByte iMixer;*/
! 179: } __packed;
! 180:
! 181: /* UDESCSUB_AC_SELECTOR */
! 182: struct usb_audio_selector_unit {
! 183: uByte bLength;
! 184: uByte bDescriptorType;
! 185: uByte bDescriptorSubtype;
! 186: uByte bUnitId;
! 187: uByte bNrInPins;
! 188: uByte baSourceId[255]; /* [bNrInPins] */
! 189: /* uByte iSelector; */
! 190: } __packed;
! 191:
! 192: /* UDESCSUB_AC_FEATURE */
! 193: struct usb_audio_feature_unit {
! 194: uByte bLength;
! 195: uByte bDescriptorType;
! 196: uByte bDescriptorSubtype;
! 197: uByte bUnitId;
! 198: uByte bSourceId;
! 199: uByte bControlSize;
! 200: uByte bmaControls[255]; /* size for more than enough */
! 201: /* uByte iFeature; */
! 202: } __packed;
! 203:
! 204: /* UDESCSUB_AC_PROCESSING */
! 205: struct usb_audio_processing_unit {
! 206: uByte bLength;
! 207: uByte bDescriptorType;
! 208: uByte bDescriptorSubtype;
! 209: uByte bUnitId;
! 210: uWord wProcessType;
! 211: uByte bNrInPins;
! 212: uByte baSourceId[255]; /* [bNrInPins] */
! 213: /* struct usb_audio_processing_unit_1 */
! 214: } __packed;
! 215: struct usb_audio_processing_unit_1{
! 216: uByte bNrChannels;
! 217: uWord wChannelConfig;
! 218: uByte iChannelNames;
! 219: uByte bControlSize;
! 220: uByte bmControls[255]; /* [bControlSize] */
! 221: #define UA_PROC_ENABLE_MASK 1
! 222: } __packed;
! 223:
! 224: struct usb_audio_processing_unit_updown {
! 225: uByte iProcessing;
! 226: uByte bNrModes;
! 227: uWord waModes[255]; /* [bNrModes] */
! 228: } __packed;
! 229:
! 230: /* UDESCSUB_AC_EXTENSION */
! 231: struct usb_audio_extension_unit {
! 232: uByte bLength;
! 233: uByte bDescriptorType;
! 234: uByte bDescriptorSubtype;
! 235: uByte bUnitId;
! 236: uWord wExtensionCode;
! 237: uByte bNrInPins;
! 238: uByte baSourceId[255]; /* [bNrInPins] */
! 239: /* struct usb_audio_extension_unit_1 */
! 240: } __packed;
! 241: struct usb_audio_extension_unit_1 {
! 242: uByte bNrChannels;
! 243: uWord wChannelConfig;
! 244: uByte iChannelNames;
! 245: uByte bControlSize;
! 246: uByte bmControls[255]; /* [bControlSize] */
! 247: #define UA_EXT_ENABLE_MASK 1
! 248: #define UA_EXT_ENABLE 1
! 249: /*uByte iExtension;*/
! 250: } __packed;
! 251:
! 252: /* USB terminal types */
! 253: #define UAT_UNDEFINED 0x0100
! 254: #define UAT_STREAM 0x0101
! 255: #define UAT_VENDOR 0x01ff
! 256: /* input terminal types */
! 257: #define UATI_UNDEFINED 0x0200
! 258: #define UATI_MICROPHONE 0x0201
! 259: #define UATI_DESKMICROPHONE 0x0202
! 260: #define UATI_PERSONALMICROPHONE 0x0203
! 261: #define UATI_OMNIMICROPHONE 0x0204
! 262: #define UATI_MICROPHONEARRAY 0x0205
! 263: #define UATI_PROCMICROPHONEARR 0x0206
! 264: /* output terminal types */
! 265: #define UATO_UNDEFINED 0x0300
! 266: #define UATO_SPEAKER 0x0301
! 267: #define UATO_HEADPHONES 0x0302
! 268: #define UATO_DISPLAYAUDIO 0x0303
! 269: #define UATO_DESKTOPSPEAKER 0x0304
! 270: #define UATO_ROOMSPEAKER 0x0305
! 271: #define UATO_COMMSPEAKER 0x0306
! 272: #define UATO_SUBWOOFER 0x0307
! 273: /* bidir terminal types */
! 274: #define UATB_UNDEFINED 0x0400
! 275: #define UATB_HANDSET 0x0401
! 276: #define UATB_HEADSET 0x0402
! 277: #define UATB_SPEAKERPHONE 0x0403
! 278: #define UATB_SPEAKERPHONEESUP 0x0404
! 279: #define UATB_SPEAKERPHONEECANC 0x0405
! 280: /* telephony terminal types */
! 281: #define UATT_UNDEFINED 0x0500
! 282: #define UATT_PHONELINE 0x0501
! 283: #define UATT_TELEPHONE 0x0502
! 284: #define UATT_DOWNLINEPHONE 0x0503
! 285: /* external terminal types */
! 286: #define UATE_UNDEFINED 0x0600
! 287: #define UATE_ANALOGCONN 0x0601
! 288: #define UATE_DIGITALAUIFC 0x0602
! 289: #define UATE_LINECONN 0x0603
! 290: #define UATE_LEGACYCONN 0x0604
! 291: #define UATE_SPDIF 0x0605
! 292: #define UATE_1394DA 0x0606
! 293: #define UATE_1394DV 0x0607
! 294: /* embedded function terminal types */
! 295: #define UATF_UNDEFINED 0x0700
! 296: #define UATF_CALIBNOISE 0x0701
! 297: #define UATF_EQUNOISE 0x0702
! 298: #define UATF_CDPLAYER 0x0703
! 299: #define UATF_DAT 0x0704
! 300: #define UATF_DCC 0x0705
! 301: #define UATF_MINIDISK 0x0706
! 302: #define UATF_ANALOGTAPE 0x0707
! 303: #define UATF_PHONOGRAPH 0x0708
! 304: #define UATF_VCRAUDIO 0x0709
! 305: #define UATF_VIDEODISCAUDIO 0x070a
! 306: #define UATF_DVDAUDIO 0x070b
! 307: #define UATF_TVTUNERAUDIO 0x070c
! 308: #define UATF_SATELLITE 0x070d
! 309: #define UATF_CABLETUNER 0x070e
! 310: #define UATF_DSS 0x070f
! 311: #define UATF_RADIORECV 0x0710
! 312: #define UATF_RADIOXMIT 0x0711
! 313: #define UATF_MULTITRACK 0x0712
! 314: #define UATF_SYNTHESIZER 0x0713
! 315:
! 316:
! 317: #define SET_CUR 0x01
! 318: #define GET_CUR 0x81
! 319: #define SET_MIN 0x02
! 320: #define GET_MIN 0x82
! 321: #define SET_MAX 0x03
! 322: #define GET_MAX 0x83
! 323: #define SET_RES 0x04
! 324: #define GET_RES 0x84
! 325: #define SET_MEM 0x05
! 326: #define GET_MEM 0x85
! 327: #define GET_STAT 0xff
! 328:
! 329: #define MUTE_CONTROL 0x01
! 330: #define VOLUME_CONTROL 0x02
! 331: #define BASS_CONTROL 0x03
! 332: #define MID_CONTROL 0x04
! 333: #define TREBLE_CONTROL 0x05
! 334: #define GRAPHIC_EQUALIZER_CONTROL 0x06
! 335: #define AGC_CONTROL 0x07
! 336: #define DELAY_CONTROL 0x08
! 337: #define BASS_BOOST_CONTROL 0x09
! 338: #define LOUDNESS_CONTROL 0x0a
! 339:
! 340: #define FU_MASK(u) (1 << ((u)-1))
! 341:
! 342: #define MASTER_CHAN 0
! 343:
! 344: #define AS_GENERAL 1
! 345: #define FORMAT_TYPE 2
! 346: #define FORMAT_SPECIFIC 3
! 347:
! 348: #define UA_FMT_PCM 1
! 349: #define UA_FMT_PCM8 2
! 350: #define UA_FMT_IEEE_FLOAT 3
! 351: #define UA_FMT_ALAW 4
! 352: #define UA_FMT_MULAW 5
! 353: #define UA_FMT_MPEG 0x1001
! 354: #define UA_FMT_AC3 0x1002
! 355:
! 356: #define SAMPLING_FREQ_CONTROL 0x01
! 357: #define PITCH_CONTROL 0x02
! 358:
! 359: #define FORMAT_TYPE_UNDEFINED 0
! 360: #define FORMAT_TYPE_I 1
! 361: #define FORMAT_TYPE_II 2
! 362: #define FORMAT_TYPE_III 3
! 363:
! 364: #define UA_PROC_MASK(n) (1<< ((n)-1))
! 365: #define PROCESS_UNDEFINED 0
! 366: #define XX_ENABLE_CONTROL 1
! 367: #define UPDOWNMIX_PROCESS 1
! 368: #define UD_ENABLE_CONTROL 1
! 369: #define UD_MODE_SELECT_CONTROL 2
! 370: #define DOLBY_PROLOGIC_PROCESS 2
! 371: #define DP_ENABLE_CONTROL 1
! 372: #define DP_MODE_SELECT_CONTROL 2
! 373: #define P3D_STEREO_EXTENDER_PROCESS 3
! 374: #define P3D_ENABLE_CONTROL 1
! 375: #define P3D_SPACIOUSNESS_CONTROL 2
! 376: #define REVERBATION_PROCESS 4
! 377: #define RV_ENABLE_CONTROL 1
! 378: #define RV_LEVEL_CONTROL 2
! 379: #define RV_TIME_CONTROL 3
! 380: #define RV_FEEDBACK_CONTROL 4
! 381: #define CHORUS_PROCESS 5
! 382: #define CH_ENABLE_CONTROL 1
! 383: #define CH_LEVEL_CONTROL 2
! 384: #define CH_RATE_CONTROL 3
! 385: #define CH_DEPTH_CONTROL 4
! 386: #define DYN_RANGE_COMP_PROCESS 6
! 387: #define DR_ENABLE_CONTROL 1
! 388: #define DR_COMPRESSION_RATE_CONTROL 2
! 389: #define DR_MAXAMPL_CONTROL 3
! 390: #define DR_THRESHOLD_CONTROL 4
! 391: #define DR_ATTACK_TIME_CONTROL 5
! 392: #define DR_RELEASE_TIME_CONTROL 6
CVSweb