root/include/uapi/linux/usb/audio.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. uac_mixer_unit_bNrChannels
  2. uac_mixer_unit_wChannelConfig
  3. uac_mixer_unit_iChannelNames
  4. uac_mixer_unit_bmControls
  5. uac3_mixer_unit_wClusterDescrID
  6. uac_mixer_unit_iMixer
  7. uac_selector_unit_iSelector
  8. uac_feature_unit_iFeature
  9. uac_processing_unit_bNrChannels
  10. uac_processing_unit_wChannelConfig
  11. uac_processing_unit_iChannelNames
  12. uac_processing_unit_bControlSize
  13. uac_processing_unit_bmControls
  14. uac_processing_unit_iProcessing
  15. uac_processing_unit_specific
  16. uac_extension_unit_bControlSize
  17. uac_extension_unit_iExtension

   1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2 /*
   3  * <linux/usb/audio.h> -- USB Audio definitions.
   4  *
   5  * Copyright (C) 2006 Thumtronics Pty Ltd.
   6  * Developed for Thumtronics by Grey Innovation
   7  * Ben Williamson <ben.williamson@greyinnovation.com>
   8  *
   9  * This software is distributed under the terms of the GNU General Public
  10  * License ("GPL") version 2, as published by the Free Software Foundation.
  11  *
  12  * This file holds USB constants and structures defined
  13  * by the USB Device Class Definition for Audio Devices.
  14  * Comments below reference relevant sections of that document:
  15  *
  16  * http://www.usb.org/developers/devclass_docs/audio10.pdf
  17  *
  18  * Types and defines in this file are either specific to version 1.0 of
  19  * this standard or common for newer versions.
  20  */
  21 
  22 #ifndef _UAPI__LINUX_USB_AUDIO_H
  23 #define _UAPI__LINUX_USB_AUDIO_H
  24 
  25 #include <linux/types.h>
  26 
  27 /* bInterfaceProtocol values to denote the version of the standard used */
  28 #define UAC_VERSION_1                   0x00
  29 #define UAC_VERSION_2                   0x20
  30 #define UAC_VERSION_3                   0x30
  31 
  32 /* A.2 Audio Interface Subclass Codes */
  33 #define USB_SUBCLASS_AUDIOCONTROL       0x01
  34 #define USB_SUBCLASS_AUDIOSTREAMING     0x02
  35 #define USB_SUBCLASS_MIDISTREAMING      0x03
  36 
  37 /* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */
  38 #define UAC_HEADER                      0x01
  39 #define UAC_INPUT_TERMINAL              0x02
  40 #define UAC_OUTPUT_TERMINAL             0x03
  41 #define UAC_MIXER_UNIT                  0x04
  42 #define UAC_SELECTOR_UNIT               0x05
  43 #define UAC_FEATURE_UNIT                0x06
  44 #define UAC1_PROCESSING_UNIT            0x07
  45 #define UAC1_EXTENSION_UNIT             0x08
  46 
  47 /* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */
  48 #define UAC_AS_GENERAL                  0x01
  49 #define UAC_FORMAT_TYPE                 0x02
  50 #define UAC_FORMAT_SPECIFIC             0x03
  51 
  52 /* A.7 Processing Unit Process Types */
  53 #define UAC_PROCESS_UNDEFINED           0x00
  54 #define UAC_PROCESS_UP_DOWNMIX          0x01
  55 #define UAC_PROCESS_DOLBY_PROLOGIC      0x02
  56 #define UAC_PROCESS_STEREO_EXTENDER     0x03
  57 #define UAC_PROCESS_REVERB              0x04
  58 #define UAC_PROCESS_CHORUS              0x05
  59 #define UAC_PROCESS_DYN_RANGE_COMP      0x06
  60 
  61 /* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */
  62 #define UAC_EP_GENERAL                  0x01
  63 
  64 /* A.9 Audio Class-Specific Request Codes */
  65 #define UAC_SET_                        0x00
  66 #define UAC_GET_                        0x80
  67 
  68 #define UAC__CUR                        0x1
  69 #define UAC__MIN                        0x2
  70 #define UAC__MAX                        0x3
  71 #define UAC__RES                        0x4
  72 #define UAC__MEM                        0x5
  73 
  74 #define UAC_SET_CUR                     (UAC_SET_ | UAC__CUR)
  75 #define UAC_GET_CUR                     (UAC_GET_ | UAC__CUR)
  76 #define UAC_SET_MIN                     (UAC_SET_ | UAC__MIN)
  77 #define UAC_GET_MIN                     (UAC_GET_ | UAC__MIN)
  78 #define UAC_SET_MAX                     (UAC_SET_ | UAC__MAX)
  79 #define UAC_GET_MAX                     (UAC_GET_ | UAC__MAX)
  80 #define UAC_SET_RES                     (UAC_SET_ | UAC__RES)
  81 #define UAC_GET_RES                     (UAC_GET_ | UAC__RES)
  82 #define UAC_SET_MEM                     (UAC_SET_ | UAC__MEM)
  83 #define UAC_GET_MEM                     (UAC_GET_ | UAC__MEM)
  84 
  85 #define UAC_GET_STAT                    0xff
  86 
  87 /* A.10 Control Selector Codes */
  88 
  89 /* A.10.1 Terminal Control Selectors */
  90 #define UAC_TERM_COPY_PROTECT           0x01
  91 
  92 /* A.10.2 Feature Unit Control Selectors */
  93 #define UAC_FU_MUTE                     0x01
  94 #define UAC_FU_VOLUME                   0x02
  95 #define UAC_FU_BASS                     0x03
  96 #define UAC_FU_MID                      0x04
  97 #define UAC_FU_TREBLE                   0x05
  98 #define UAC_FU_GRAPHIC_EQUALIZER        0x06
  99 #define UAC_FU_AUTOMATIC_GAIN           0x07
 100 #define UAC_FU_DELAY                    0x08
 101 #define UAC_FU_BASS_BOOST               0x09
 102 #define UAC_FU_LOUDNESS                 0x0a
 103 
 104 #define UAC_CONTROL_BIT(CS)     (1 << ((CS) - 1))
 105 
 106 /* A.10.3.1 Up/Down-mix Processing Unit Controls Selectors */
 107 #define UAC_UD_ENABLE                   0x01
 108 #define UAC_UD_MODE_SELECT              0x02
 109 
 110 /* A.10.3.2 Dolby Prologic (tm) Processing Unit Controls Selectors */
 111 #define UAC_DP_ENABLE                   0x01
 112 #define UAC_DP_MODE_SELECT              0x02
 113 
 114 /* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */
 115 #define UAC_3D_ENABLE                   0x01
 116 #define UAC_3D_SPACE                    0x02
 117 
 118 /* A.10.3.4 Reverberation Processing Unit Control Selectors */
 119 #define UAC_REVERB_ENABLE               0x01
 120 #define UAC_REVERB_LEVEL                0x02
 121 #define UAC_REVERB_TIME                 0x03
 122 #define UAC_REVERB_FEEDBACK             0x04
 123 
 124 /* A.10.3.5 Chorus Processing Unit Control Selectors */
 125 #define UAC_CHORUS_ENABLE               0x01
 126 #define UAC_CHORUS_LEVEL                0x02
 127 #define UAC_CHORUS_RATE                 0x03
 128 #define UAC_CHORUS_DEPTH                0x04
 129 
 130 /* A.10.3.6 Dynamic Range Compressor Unit Control Selectors */
 131 #define UAC_DCR_ENABLE                  0x01
 132 #define UAC_DCR_RATE                    0x02
 133 #define UAC_DCR_MAXAMPL                 0x03
 134 #define UAC_DCR_THRESHOLD               0x04
 135 #define UAC_DCR_ATTACK_TIME             0x05
 136 #define UAC_DCR_RELEASE_TIME            0x06
 137 
 138 /* A.10.4 Extension Unit Control Selectors */
 139 #define UAC_XU_ENABLE                   0x01
 140 
 141 /* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */
 142 #define UAC_MS_HEADER                   0x01
 143 #define UAC_MIDI_IN_JACK                0x02
 144 #define UAC_MIDI_OUT_JACK               0x03
 145 
 146 /* MIDI - A.1 MS Class-Specific Endpoint Descriptor Subtypes */
 147 #define UAC_MS_GENERAL                  0x01
 148 
 149 /* Terminals - 2.1 USB Terminal Types */
 150 #define UAC_TERMINAL_UNDEFINED          0x100
 151 #define UAC_TERMINAL_STREAMING          0x101
 152 #define UAC_TERMINAL_VENDOR_SPEC        0x1FF
 153 
 154 /* Terminal Control Selectors */
 155 /* 4.3.2  Class-Specific AC Interface Descriptor */
 156 struct uac1_ac_header_descriptor {
 157         __u8  bLength;                  /* 8 + n */
 158         __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
 159         __u8  bDescriptorSubtype;       /* UAC_MS_HEADER */
 160         __le16 bcdADC;                  /* 0x0100 */
 161         __le16 wTotalLength;            /* includes Unit and Terminal desc. */
 162         __u8  bInCollection;            /* n */
 163         __u8  baInterfaceNr[];          /* [n] */
 164 } __attribute__ ((packed));
 165 
 166 #define UAC_DT_AC_HEADER_SIZE(n)        (8 + (n))
 167 
 168 /* As above, but more useful for defining your own descriptors: */
 169 #define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n)                     \
 170 struct uac1_ac_header_descriptor_##n {                  \
 171         __u8  bLength;                                          \
 172         __u8  bDescriptorType;                                  \
 173         __u8  bDescriptorSubtype;                               \
 174         __le16 bcdADC;                                          \
 175         __le16 wTotalLength;                                    \
 176         __u8  bInCollection;                                    \
 177         __u8  baInterfaceNr[n];                                 \
 178 } __attribute__ ((packed))
 179 
 180 /* 4.3.2.1 Input Terminal Descriptor */
 181 struct uac_input_terminal_descriptor {
 182         __u8  bLength;                  /* in bytes: 12 */
 183         __u8  bDescriptorType;          /* CS_INTERFACE descriptor type */
 184         __u8  bDescriptorSubtype;       /* INPUT_TERMINAL descriptor subtype */
 185         __u8  bTerminalID;              /* Constant uniquely terminal ID */
 186         __le16 wTerminalType;           /* USB Audio Terminal Types */
 187         __u8  bAssocTerminal;           /* ID of the Output Terminal associated */
 188         __u8  bNrChannels;              /* Number of logical output channels */
 189         __le16 wChannelConfig;
 190         __u8  iChannelNames;
 191         __u8  iTerminal;
 192 } __attribute__ ((packed));
 193 
 194 #define UAC_DT_INPUT_TERMINAL_SIZE                      12
 195 
 196 /* Terminals - 2.2 Input Terminal Types */
 197 #define UAC_INPUT_TERMINAL_UNDEFINED                    0x200
 198 #define UAC_INPUT_TERMINAL_MICROPHONE                   0x201
 199 #define UAC_INPUT_TERMINAL_DESKTOP_MICROPHONE           0x202
 200 #define UAC_INPUT_TERMINAL_PERSONAL_MICROPHONE          0x203
 201 #define UAC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE          0x204
 202 #define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY             0x205
 203 #define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY        0x206
 204 
 205 /* Terminals - control selectors */
 206 
 207 #define UAC_TERMINAL_CS_COPY_PROTECT_CONTROL            0x01
 208 
 209 /* 4.3.2.2 Output Terminal Descriptor */
 210 struct uac1_output_terminal_descriptor {
 211         __u8  bLength;                  /* in bytes: 9 */
 212         __u8  bDescriptorType;          /* CS_INTERFACE descriptor type */
 213         __u8  bDescriptorSubtype;       /* OUTPUT_TERMINAL descriptor subtype */
 214         __u8  bTerminalID;              /* Constant uniquely terminal ID */
 215         __le16 wTerminalType;           /* USB Audio Terminal Types */
 216         __u8  bAssocTerminal;           /* ID of the Input Terminal associated */
 217         __u8  bSourceID;                /* ID of the connected Unit or Terminal*/
 218         __u8  iTerminal;
 219 } __attribute__ ((packed));
 220 
 221 #define UAC_DT_OUTPUT_TERMINAL_SIZE                     9
 222 
 223 /* Terminals - 2.3 Output Terminal Types */
 224 #define UAC_OUTPUT_TERMINAL_UNDEFINED                   0x300
 225 #define UAC_OUTPUT_TERMINAL_SPEAKER                     0x301
 226 #define UAC_OUTPUT_TERMINAL_HEADPHONES                  0x302
 227 #define UAC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO  0x303
 228 #define UAC_OUTPUT_TERMINAL_DESKTOP_SPEAKER             0x304
 229 #define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER                0x305
 230 #define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER       0x306
 231 #define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER    0x307
 232 
 233 /* Terminals - 2.4 Bi-directional Terminal Types */
 234 #define UAC_BIDIR_TERMINAL_UNDEFINED                    0x400
 235 #define UAC_BIDIR_TERMINAL_HANDSET                      0x401
 236 #define UAC_BIDIR_TERMINAL_HEADSET                      0x402
 237 #define UAC_BIDIR_TERMINAL_SPEAKER_PHONE                0x403
 238 #define UAC_BIDIR_TERMINAL_ECHO_SUPPRESSING             0x404
 239 #define UAC_BIDIR_TERMINAL_ECHO_CANCELING               0x405
 240 
 241 /* Set bControlSize = 2 as default setting */
 242 #define UAC_DT_FEATURE_UNIT_SIZE(ch)            (7 + ((ch) + 1) * 2)
 243 
 244 /* As above, but more useful for defining your own descriptors: */
 245 #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch)                 \
 246 struct uac_feature_unit_descriptor_##ch {                       \
 247         __u8  bLength;                                          \
 248         __u8  bDescriptorType;                                  \
 249         __u8  bDescriptorSubtype;                               \
 250         __u8  bUnitID;                                          \
 251         __u8  bSourceID;                                        \
 252         __u8  bControlSize;                                     \
 253         __le16 bmaControls[ch + 1];                             \
 254         __u8  iFeature;                                         \
 255 } __attribute__ ((packed))
 256 
 257 /* 4.3.2.3 Mixer Unit Descriptor */
 258 struct uac_mixer_unit_descriptor {
 259         __u8 bLength;
 260         __u8 bDescriptorType;
 261         __u8 bDescriptorSubtype;
 262         __u8 bUnitID;
 263         __u8 bNrInPins;
 264         __u8 baSourceID[];
 265 } __attribute__ ((packed));
 266 
 267 static inline __u8 uac_mixer_unit_bNrChannels(struct uac_mixer_unit_descriptor *desc)
 268 {
 269         return desc->baSourceID[desc->bNrInPins];
 270 }
 271 
 272 static inline __u32 uac_mixer_unit_wChannelConfig(struct uac_mixer_unit_descriptor *desc,
 273                                                   int protocol)
 274 {
 275         if (protocol == UAC_VERSION_1)
 276                 return (desc->baSourceID[desc->bNrInPins + 2] << 8) |
 277                         desc->baSourceID[desc->bNrInPins + 1];
 278         else
 279                 return  (desc->baSourceID[desc->bNrInPins + 4] << 24) |
 280                         (desc->baSourceID[desc->bNrInPins + 3] << 16) |
 281                         (desc->baSourceID[desc->bNrInPins + 2] << 8)  |
 282                         (desc->baSourceID[desc->bNrInPins + 1]);
 283 }
 284 
 285 static inline __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor *desc,
 286                                                 int protocol)
 287 {
 288         return (protocol == UAC_VERSION_1) ?
 289                 desc->baSourceID[desc->bNrInPins + 3] :
 290                 desc->baSourceID[desc->bNrInPins + 5];
 291 }
 292 
 293 static inline __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc,
 294                                               int protocol)
 295 {
 296         switch (protocol) {
 297         case UAC_VERSION_1:
 298                 return &desc->baSourceID[desc->bNrInPins + 4];
 299         case UAC_VERSION_2:
 300                 return &desc->baSourceID[desc->bNrInPins + 6];
 301         case UAC_VERSION_3:
 302                 return &desc->baSourceID[desc->bNrInPins + 2];
 303         default:
 304                 return NULL;
 305         }
 306 }
 307 
 308 static inline __u16 uac3_mixer_unit_wClusterDescrID(struct uac_mixer_unit_descriptor *desc)
 309 {
 310         return (desc->baSourceID[desc->bNrInPins + 1] << 8) |
 311                 desc->baSourceID[desc->bNrInPins];
 312 }
 313 
 314 static inline __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc)
 315 {
 316         __u8 *raw = (__u8 *) desc;
 317         return raw[desc->bLength - 1];
 318 }
 319 
 320 /* 4.3.2.4 Selector Unit Descriptor */
 321 struct uac_selector_unit_descriptor {
 322         __u8 bLength;
 323         __u8 bDescriptorType;
 324         __u8 bDescriptorSubtype;
 325         __u8 bUintID;
 326         __u8 bNrInPins;
 327         __u8 baSourceID[];
 328 } __attribute__ ((packed));
 329 
 330 static inline __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc)
 331 {
 332         __u8 *raw = (__u8 *) desc;
 333         return raw[desc->bLength - 1];
 334 }
 335 
 336 /* 4.3.2.5 Feature Unit Descriptor */
 337 struct uac_feature_unit_descriptor {
 338         __u8 bLength;
 339         __u8 bDescriptorType;
 340         __u8 bDescriptorSubtype;
 341         __u8 bUnitID;
 342         __u8 bSourceID;
 343         __u8 bControlSize;
 344         __u8 bmaControls[0]; /* variable length */
 345 } __attribute__((packed));
 346 
 347 static inline __u8 uac_feature_unit_iFeature(struct uac_feature_unit_descriptor *desc)
 348 {
 349         __u8 *raw = (__u8 *) desc;
 350         return raw[desc->bLength - 1];
 351 }
 352 
 353 /* 4.3.2.6 Processing Unit Descriptors */
 354 struct uac_processing_unit_descriptor {
 355         __u8 bLength;
 356         __u8 bDescriptorType;
 357         __u8 bDescriptorSubtype;
 358         __u8 bUnitID;
 359         __le16 wProcessType;
 360         __u8 bNrInPins;
 361         __u8 baSourceID[];
 362 } __attribute__ ((packed));
 363 
 364 static inline __u8 uac_processing_unit_bNrChannels(struct uac_processing_unit_descriptor *desc)
 365 {
 366         return desc->baSourceID[desc->bNrInPins];
 367 }
 368 
 369 static inline __u32 uac_processing_unit_wChannelConfig(struct uac_processing_unit_descriptor *desc,
 370                                                        int protocol)
 371 {
 372         if (protocol == UAC_VERSION_1)
 373                 return (desc->baSourceID[desc->bNrInPins + 2] << 8) |
 374                         desc->baSourceID[desc->bNrInPins + 1];
 375         else
 376                 return  (desc->baSourceID[desc->bNrInPins + 4] << 24) |
 377                         (desc->baSourceID[desc->bNrInPins + 3] << 16) |
 378                         (desc->baSourceID[desc->bNrInPins + 2] << 8)  |
 379                         (desc->baSourceID[desc->bNrInPins + 1]);
 380 }
 381 
 382 static inline __u8 uac_processing_unit_iChannelNames(struct uac_processing_unit_descriptor *desc,
 383                                                      int protocol)
 384 {
 385         return (protocol == UAC_VERSION_1) ?
 386                 desc->baSourceID[desc->bNrInPins + 3] :
 387                 desc->baSourceID[desc->bNrInPins + 5];
 388 }
 389 
 390 static inline __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_descriptor *desc,
 391                                                     int protocol)
 392 {
 393         switch (protocol) {
 394         case UAC_VERSION_1:
 395                 return desc->baSourceID[desc->bNrInPins + 4];
 396         case UAC_VERSION_2:
 397                 return 2; /* in UAC2, this value is constant */
 398         case UAC_VERSION_3:
 399                 return 4; /* in UAC3, this value is constant */
 400         default:
 401                 return 1;
 402         }
 403 }
 404 
 405 static inline __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc,
 406                                                    int protocol)
 407 {
 408         switch (protocol) {
 409         case UAC_VERSION_1:
 410                 return &desc->baSourceID[desc->bNrInPins + 5];
 411         case UAC_VERSION_2:
 412                 return &desc->baSourceID[desc->bNrInPins + 6];
 413         case UAC_VERSION_3:
 414                 return &desc->baSourceID[desc->bNrInPins + 2];
 415         default:
 416                 return NULL;
 417         }
 418 }
 419 
 420 static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc,
 421                                                    int protocol)
 422 {
 423         __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
 424 
 425         switch (protocol) {
 426         case UAC_VERSION_1:
 427         case UAC_VERSION_2:
 428         default:
 429                 return *(uac_processing_unit_bmControls(desc, protocol)
 430                          + control_size);
 431         case UAC_VERSION_3:
 432                 return 0; /* UAC3 does not have this field */
 433         }
 434 }
 435 
 436 static inline __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc,
 437                                                  int protocol)
 438 {
 439         __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
 440 
 441         switch (protocol) {
 442         case UAC_VERSION_1:
 443         case UAC_VERSION_2:
 444         default:
 445                 return uac_processing_unit_bmControls(desc, protocol)
 446                         + control_size + 1;
 447         case UAC_VERSION_3:
 448                 return uac_processing_unit_bmControls(desc, protocol)
 449                         + control_size;
 450         }
 451 }
 452 
 453 /*
 454  * Extension Unit (XU) has almost compatible layout with Processing Unit, but
 455  * on UAC2, it has a different bmControls size (bControlSize); it's 1 byte for
 456  * XU while 2 bytes for PU.  The last iExtension field is a one-byte index as
 457  * well as iProcessing field of PU.
 458  */
 459 static inline __u8 uac_extension_unit_bControlSize(struct uac_processing_unit_descriptor *desc,
 460                                                    int protocol)
 461 {
 462         switch (protocol) {
 463         case UAC_VERSION_1:
 464                 return desc->baSourceID[desc->bNrInPins + 4];
 465         case UAC_VERSION_2:
 466                 return 1; /* in UAC2, this value is constant */
 467         case UAC_VERSION_3:
 468                 return 4; /* in UAC3, this value is constant */
 469         default:
 470                 return 1;
 471         }
 472 }
 473 
 474 static inline __u8 uac_extension_unit_iExtension(struct uac_processing_unit_descriptor *desc,
 475                                                  int protocol)
 476 {
 477         __u8 control_size = uac_extension_unit_bControlSize(desc, protocol);
 478 
 479         switch (protocol) {
 480         case UAC_VERSION_1:
 481         case UAC_VERSION_2:
 482         default:
 483                 return *(uac_processing_unit_bmControls(desc, protocol)
 484                          + control_size);
 485         case UAC_VERSION_3:
 486                 return 0; /* UAC3 does not have this field */
 487         }
 488 }
 489 
 490 /* 4.5.2 Class-Specific AS Interface Descriptor */
 491 struct uac1_as_header_descriptor {
 492         __u8  bLength;                  /* in bytes: 7 */
 493         __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
 494         __u8  bDescriptorSubtype;       /* AS_GENERAL */
 495         __u8  bTerminalLink;            /* Terminal ID of connected Terminal */
 496         __u8  bDelay;                   /* Delay introduced by the data path */
 497         __le16 wFormatTag;              /* The Audio Data Format */
 498 } __attribute__ ((packed));
 499 
 500 #define UAC_DT_AS_HEADER_SIZE           7
 501 
 502 /* Formats - A.1.1 Audio Data Format Type I Codes */
 503 #define UAC_FORMAT_TYPE_I_UNDEFINED     0x0
 504 #define UAC_FORMAT_TYPE_I_PCM           0x1
 505 #define UAC_FORMAT_TYPE_I_PCM8          0x2
 506 #define UAC_FORMAT_TYPE_I_IEEE_FLOAT    0x3
 507 #define UAC_FORMAT_TYPE_I_ALAW          0x4
 508 #define UAC_FORMAT_TYPE_I_MULAW         0x5
 509 
 510 struct uac_format_type_i_continuous_descriptor {
 511         __u8  bLength;                  /* in bytes: 8 + (ns * 3) */
 512         __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
 513         __u8  bDescriptorSubtype;       /* FORMAT_TYPE */
 514         __u8  bFormatType;              /* FORMAT_TYPE_1 */
 515         __u8  bNrChannels;              /* physical channels in the stream */
 516         __u8  bSubframeSize;            /* */
 517         __u8  bBitResolution;
 518         __u8  bSamFreqType;
 519         __u8  tLowerSamFreq[3];
 520         __u8  tUpperSamFreq[3];
 521 } __attribute__ ((packed));
 522 
 523 #define UAC_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE  14
 524 
 525 struct uac_format_type_i_discrete_descriptor {
 526         __u8  bLength;                  /* in bytes: 8 + (ns * 3) */
 527         __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
 528         __u8  bDescriptorSubtype;       /* FORMAT_TYPE */
 529         __u8  bFormatType;              /* FORMAT_TYPE_1 */
 530         __u8  bNrChannels;              /* physical channels in the stream */
 531         __u8  bSubframeSize;            /* */
 532         __u8  bBitResolution;
 533         __u8  bSamFreqType;
 534         __u8  tSamFreq[][3];
 535 } __attribute__ ((packed));
 536 
 537 #define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n)              \
 538 struct uac_format_type_i_discrete_descriptor_##n {              \
 539         __u8  bLength;                                          \
 540         __u8  bDescriptorType;                                  \
 541         __u8  bDescriptorSubtype;                               \
 542         __u8  bFormatType;                                      \
 543         __u8  bNrChannels;                                      \
 544         __u8  bSubframeSize;                                    \
 545         __u8  bBitResolution;                                   \
 546         __u8  bSamFreqType;                                     \
 547         __u8  tSamFreq[n][3];                                   \
 548 } __attribute__ ((packed))
 549 
 550 #define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n) (8 + (n * 3))
 551 
 552 struct uac_format_type_i_ext_descriptor {
 553         __u8 bLength;
 554         __u8 bDescriptorType;
 555         __u8 bDescriptorSubtype;
 556         __u8 bFormatType;
 557         __u8 bSubslotSize;
 558         __u8 bBitResolution;
 559         __u8 bHeaderLength;
 560         __u8 bControlSize;
 561         __u8 bSideBandProtocol;
 562 } __attribute__((packed));
 563 
 564 /* Formats - Audio Data Format Type I Codes */
 565 
 566 #define UAC_FORMAT_TYPE_II_MPEG 0x1001
 567 #define UAC_FORMAT_TYPE_II_AC3  0x1002
 568 
 569 struct uac_format_type_ii_discrete_descriptor {
 570         __u8 bLength;
 571         __u8 bDescriptorType;
 572         __u8 bDescriptorSubtype;
 573         __u8 bFormatType;
 574         __le16 wMaxBitRate;
 575         __le16 wSamplesPerFrame;
 576         __u8 bSamFreqType;
 577         __u8 tSamFreq[][3];
 578 } __attribute__((packed));
 579 
 580 struct uac_format_type_ii_ext_descriptor {
 581         __u8 bLength;
 582         __u8 bDescriptorType;
 583         __u8 bDescriptorSubtype;
 584         __u8 bFormatType;
 585         __le16 wMaxBitRate;
 586         __le16 wSamplesPerFrame;
 587         __u8 bHeaderLength;
 588         __u8 bSideBandProtocol;
 589 } __attribute__((packed));
 590 
 591 /* type III */
 592 #define UAC_FORMAT_TYPE_III_IEC1937_AC3 0x2001
 593 #define UAC_FORMAT_TYPE_III_IEC1937_MPEG1_LAYER1        0x2002
 594 #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT 0x2003
 595 #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_EXT   0x2004
 596 #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER1_LS     0x2005
 597 #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER23_LS    0x2006
 598 
 599 /* Formats - A.2 Format Type Codes */
 600 #define UAC_FORMAT_TYPE_UNDEFINED       0x0
 601 #define UAC_FORMAT_TYPE_I               0x1
 602 #define UAC_FORMAT_TYPE_II              0x2
 603 #define UAC_FORMAT_TYPE_III             0x3
 604 #define UAC_EXT_FORMAT_TYPE_I           0x81
 605 #define UAC_EXT_FORMAT_TYPE_II          0x82
 606 #define UAC_EXT_FORMAT_TYPE_III         0x83
 607 
 608 struct uac_iso_endpoint_descriptor {
 609         __u8  bLength;                  /* in bytes: 7 */
 610         __u8  bDescriptorType;          /* USB_DT_CS_ENDPOINT */
 611         __u8  bDescriptorSubtype;       /* EP_GENERAL */
 612         __u8  bmAttributes;
 613         __u8  bLockDelayUnits;
 614         __le16 wLockDelay;
 615 } __attribute__((packed));
 616 #define UAC_ISO_ENDPOINT_DESC_SIZE      7
 617 
 618 #define UAC_EP_CS_ATTR_SAMPLE_RATE      0x01
 619 #define UAC_EP_CS_ATTR_PITCH_CONTROL    0x02
 620 #define UAC_EP_CS_ATTR_FILL_MAX         0x80
 621 
 622 /* status word format (3.7.1.1) */
 623 
 624 #define UAC1_STATUS_TYPE_ORIG_MASK              0x0f
 625 #define UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF  0x0
 626 #define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_IF   0x1
 627 #define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_EP   0x2
 628 
 629 #define UAC1_STATUS_TYPE_IRQ_PENDING            (1 << 7)
 630 #define UAC1_STATUS_TYPE_MEM_CHANGED            (1 << 6)
 631 
 632 struct uac1_status_word {
 633         __u8 bStatusType;
 634         __u8 bOriginator;
 635 } __attribute__((packed));
 636 
 637 
 638 #endif /* _UAPI__LINUX_USB_AUDIO_H */

/* [<][>][^][v][top][bottom][index][help] */