1// Copyright 2016 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7// clang-format off 8 9#include <zircon/compiler.h> 10#include <zircon/types.h> 11 12__BEGIN_CDECLS; 13 14//////////////////////////////////////////////////// 15// 16// General Audio interface constants 17// 18//////////////////////////////////////////////////// 19 20// audio interface subclasses 21#define USB_SUBCLASS_AUDIO_CONTROL 0x01 22#define USB_SUBCLASS_AUDIO_STREAMING 0x02 23#define USB_SUBCLASS_MIDI_STREAMING 0x03 24 25// audio class specific descriptor types 26#define USB_AUDIO_CS_DEVICE 0x21 27#define USB_AUDIO_CS_CONFIGURATION 0x22 28#define USB_AUDIO_CS_STRING 0x23 29#define USB_AUDIO_CS_INTERFACE 0x24 30#define USB_AUDIO_CS_ENDPOINT 0x25 31 32//////////////////////////////////////////////////// 33// 34// Audio Control interface constants 35// 36//////////////////////////////////////////////////// 37 38// audio class specific AC interface descriptor subtypes 39#define USB_AUDIO_AC_HEADER 0x01 40#define USB_AUDIO_AC_INPUT_TERMINAL 0x02 41#define USB_AUDIO_AC_OUTPUT_TERMINAL 0x03 42#define USB_AUDIO_AC_MIXER_UNIT 0x04 43#define USB_AUDIO_AC_SELECTOR_UNIT 0x05 44#define USB_AUDIO_AC_FEATURE_UNIT 0x06 45#define USB_AUDIO_AC_PROCESSING_UNIT 0x07 46#define USB_AUDIO_AC_EXTENSION_UNIT 0x08 47 48// processing unit process types 49#define USB_AUDIO_UP_DOWN_MIX_PROCESS 0x01 50#define USB_AUDIO_DOLBY_PROLOGIC_PROCESS 0x02 51#define USB_AUDIO_3D_STEREO_EXTENDER_PROCESS 0x03 52#define USB_AUDIO_REVERBERATION_PROCESS 0x04 53#define USB_AUDIO_CHORUS_PROCESS 0x05 54#define USB_AUDIO_DYN_RANGE_COMP_PROCESS 0x06 55 56// audio class specific endpoint descriptor subtypes 57#define USB_AUDIO_EP_GENERAL 0x01 58 59// audio class specific request codes 60#define USB_AUDIO_SET_CUR 0x01 61#define USB_AUDIO_GET_CUR 0x81 62#define USB_AUDIO_SET_MIN 0x02 63#define USB_AUDIO_GET_MIN 0x82 64#define USB_AUDIO_SET_MAX 0x03 65#define USB_AUDIO_GET_MAX 0x83 66#define USB_AUDIO_SET_RES 0x04 67#define USB_AUDIO_GET_RES 0x84 68#define USB_AUDIO_SET_MEM 0x05 69#define USB_AUDIO_GET_MEM 0x85 70#define USB_AUDIO_GET_STAT 0xFF 71 72// terminal control selectors 73#define USB_AUDIO_COPY_PROTECT_CONTROL 0x01 74 75// feature unit control selectors 76#define USB_AUDIO_MUTE_CONTROL 0x01 77#define USB_AUDIO_VOLUME_CONTROL 0x02 78#define USB_AUDIO_BASS_CONTROL 0x03 79#define USB_AUDIO_MID_CONTROL 0x04 80#define USB_AUDIO_TREBLE_CONTROL 0x05 81#define USB_AUDIO_GRAPHIC_EQUALIZER_CONTROL 0x06 82#define USB_AUDIO_AUTOMATIC_GAIN_CONTROL 0x07 83#define USB_AUDIO_DELAY_CONTROL 0x08 84#define USB_AUDIO_BASS_BOOST_CONTROL 0x09 85#define USB_AUDIO_LOUDNESS_CONTROL 0x0A 86 87// feature unit control support bitmasks 88#define USB_AUDIO_FU_BMA_MUTE (1u << 0u) 89#define USB_AUDIO_FU_BMA_VOLUME (1u << 1u) 90#define USB_AUDIO_FU_BMA_BASS (1u << 2u) 91#define USB_AUDIO_FU_BMA_MID (1u << 3u) 92#define USB_AUDIO_FU_BMA_TREBLE (1u << 4u) 93#define USB_AUDIO_FU_BMA_GRAPHIC_EQUALIZER (1u << 5u) 94#define USB_AUDIO_FU_BMA_AUTOMATIC_GAIN (1u << 6u) 95#define USB_AUDIO_FU_BMA_DELAY (1u << 7u) 96#define USB_AUDIO_FU_BMA_BASS_BOOST (1u << 8u) 97#define USB_AUDIO_FU_BMA_LOUDNESS (1u << 9u) 98 99// up/down mix processing unit control selectors 100#define USB_AUDIO_UD_ENABLE_CONTROL 0x01 101#define USB_AUDIO_UD_MODE_SELECT_CONTROL 0x02 102#define USB_AUDIO_UD_MODE_SELECT_CONTROL 0x02 103 104// Dolby Prologic processing unit control selectors 105#define USB_AUDIO_DP_ENABLE_CONTROL 0x01 106#define USB_AUDIO_DP_MODE_SELECT_CONTROL 0x02 107 108// 3D stereo extender processing unit control selectors 109#define USB_AUDIO_3D_ENABLE_CONTROL 0x01 110#define USB_AUDIO_SPACIOUSNESS_CONTROL 0x03 111 112// reverberation processing unit control selectors 113#define USB_AUDIO_RV_ENABLE_CONTROL 0x01 114#define USB_AUDIO_REVERB_LEVEL_CONTROL 0x02 115#define USB_AUDIO_REVERB_TIME_CONTROL 0x03 116#define USB_AUDIO_REVERB_FEEDBACK_CONTROL 0x04 117 118// chorus processing unit control selectors 119#define USB_AUDIO_CH_ENABLE_CONTROL 0x01 120#define USB_AUDIO_CHORUS_LEVEL_CONTROL 0x02 121#define USB_AUDIO_CHORUS_RATE_CONTROL 0x03 122#define USB_AUDIO_CHORUS_DEPTH_CONTROL 0x04 123 124// dynamic range compressor processing unit control selectors 125#define USB_AUDIO_DR_ENABLE_CONTROL 0x01 126#define USB_AUDIO_COMPRESSION_RATE_CONTROL 0x02 127#define USB_AUDIO_MAXAMPL_CONTROL 0x03 128#define USB_AUDIO_THRESHOLD_CONTROL 0x04 129#define USB_AUDIO_ATTACK_TIME 0x05 130#define USB_AUDIO_RELEASE_TIME 0x06 131 132// extension unit control selectors 133#define USB_AUDIO_XU_ENABLE_CONTROL 0x01 134 135// endpoint control selectors 136#define USB_AUDIO_SAMPLING_FREQ_CONTROL 0x01 137#define USB_AUDIO_PITCH_CONTROL 0x02 138 139// USB audio terminal types 140#define USB_AUDIO_TERMINAL_USB_UNDEFINED 0x0100 141#define USB_AUDIO_TERMINAL_USB_STREAMING 0x0101 142#define USB_AUDIO_TERMINAL_USB_VENDOR 0x01FF 143#define USB_AUDIO_TERMINAL_INPUT_UNDEFINED 0x0200 144#define USB_AUDIO_TERMINAL_MICROPHONE 0x0201 145#define USB_AUDIO_TERMINAL_DESKTOP_MICROPHONE 0x0202 146#define USB_AUDIO_TERMINAL_PERSONAL_MICROPHONE 0x0203 147#define USB_AUDIO_TERMINAL_OMNI_DIRECTIONAL_MICROPHONE 0x0204 148#define USB_AUDIO_TERMINAL_MICROPHONE_ARRAY 0x0205 149#define USB_AUDIO_TERMINAL_PROCESSING_MICROPHONE_ARRAY 0x0206 150#define USB_AUDIO_TERMINAL_OUTPUT_UNDEFINED 0x0300 151#define USB_AUDIO_TERMINAL_SPEAKER 0x0301 152#define USB_AUDIO_TERMINAL_HEADPHONES 0x0302 153#define USB_AUDIO_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO 0x0303 154#define USB_AUDIO_TERMINAL_DESKTOP_SPEAKER 0x0304 155#define USB_AUDIO_TERMINAL_ROOM_SPEAKER 0x0305 156#define USB_AUDIO_TERMINAL_COMMUNICATION_SPEAKER 0x0306 157#define USB_AUDIO_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER 0x0307 158#define USB_AUDIO_TERMINAL_BIDIRECTIONAL_UNDEFINED 0x0400 159#define USB_AUDIO_TERMINAL_HANDSET 0x0401 160#define USB_AUDIO_TERMINAL_HEADSET 0x0402 161#define USB_AUDIO_TERMINAL_SPEAKERPHONE 0x0403 162#define USB_AUDIO_TERMINAL_ECHO_SUPPRESSING_SPEAKERPHONE 0x0404 163#define USB_AUDIO_TERMINAL_ECHO_CANCELING_SPEAKERPHONE 0x0405 164#define USB_AUDIO_TERMINAL_TELEPHONY_UNDEFINED 0x0500 165#define USB_AUDIO_TERMINAL_PHONE_LINE 0x0501 166#define USB_AUDIO_TERMINAL_TELEPHONE 0x0502 167#define USB_AUDIO_TERMINAL_DOWN_LINE_PHONE 0x0503 168#define USB_AUDIO_TERMINAL_EXTERNAL_UNDEFINED 0x0600 169#define USB_AUDIO_TERMINAL_ANALOG_CONNECTOR 0x0601 170#define USB_AUDIO_TERMINAL_DIGITAL_AUDIO_INTERFACE 0x0602 171#define USB_AUDIO_TERMINAL_LINE_CONNECTOR 0x0603 172#define USB_AUDIO_TERMINAL_LEGACY_AUDIO_CONNECTOR 0x0604 173#define USB_AUDIO_TERMINAL_SPDIF_INTERFACE 0x0605 174#define USB_AUDIO_TERMINAL_1394_DA_STREAM 0x0606 175#define USB_AUDIO_TERMINAL_1394_DV_STREAM_SOUNDTRACK 0x0607 176#define USB_AUDIO_TERMINAL_EMBEDDED_UNDEFINED 0x0700 177#define USB_AUDIO_TERMINAL_LEVEL_CALIBRATION_NOISE_SOURCE 0x0701 178#define USB_AUDIO_TERMINAL_EQUALIZATION_NOISE 0x0702 179#define USB_AUDIO_TERMINAL_CD_PLAYER 0x0703 180#define USB_AUDIO_TERMINAL_DAT 0x0704 181#define USB_AUDIO_TERMINAL_DCC 0x0705 182#define USB_AUDIO_TERMINAL_MINI_DISK 0x0706 183#define USB_AUDIO_TERMINAL_ANALOG_TAPE 0x0707 184#define USB_AUDIO_TERMINAL_PHONOGRAPH 0x0708 185#define USB_AUDIO_TERMINAL_VCR_AUDIO 0x0709 186#define USB_AUDIO_TERMINAL_VIDEO_DISK_AUDIO 0x070A 187#define USB_AUDIO_TERMINAL_DVD_AUDIO 0x070B 188#define USB_AUDIO_TERMINAL_TV_TUNER_AUDIO 0x070C 189#define USB_AUDIO_TERMINAL_SATELLITE_RECEIVER_AUDIO 0x070D 190#define USB_AUDIO_TERMINAL_CABLE_TUNER_AUDIO 0x070E 191#define USB_AUDIO_TERMINAL_DSS_AUDIO 0x070F 192#define USB_AUDIO_TERMINAL_RADIO_RECEIVER 0x0710 193#define USB_AUDIO_TERMINAL_RADIO_TRANSMITTER 0x0711 194#define USB_AUDIO_TERMINAL_MULTI_TRACK_RECORDER 0x0712 195#define USB_AUDIO_TERMINAL_SYNTHESIZER 0x0713 196 197//////////////////////////////////////////////////// 198// 199// Audio streaming interface constants 200// 201//////////////////////////////////////////////////// 202 203// Audio stream class-specific AS interface descriptor subtypes 204#define USB_AUDIO_AS_GENERAL 0x01 205#define USB_AUDIO_AS_FORMAT_TYPE 0x02 206#define USB_AUDIO_AS_FORMAT_SPECIFIC 0x03 207 208// wFormatTag values present in the class specific AS header 209// Defined in Section A.1 of USB Device Class Definition for Audio Data Formats 210#define USB_AUDIO_AS_FT_TYPE_I_UNDEFINED 0x0000 211#define USB_AUDIO_AS_FT_PCM 0x0001 212#define USB_AUDIO_AS_FT_PCM8 0x0002 213#define USB_AUDIO_AS_FT_IEEE_FLOAT 0x0003 214#define USB_AUDIO_AS_FT_ALAW 0x0004 215#define USB_AUDIO_AS_FT_MULAW 0x0005 216#define USB_AUDIO_AS_FT_TYPE_II_UNDEFINED 0x1000 217#define USB_AUDIO_AS_FT_MPEG 0x1001 218#define USB_AUDIO_AS_FT_AC3 0x1002 219#define USB_AUDIO_AS_FT_TYPE_III_UNDEFINED 0x2000 220#define USB_AUDIO_AS_FT_IEC1937_AC3 0x2001 221#define USB_AUDIO_AS_FT_IEC1937_MPEG1_L1 0x2002 222#define USB_AUDIO_AS_FT_IEC1937_MPEG1_L23 0x2003 223#define USB_AUDIO_AS_FT_IEC1937_MPEG2_EXT 0x2004 224#define USB_AUDIO_AS_FT_IEC1937_MPEG2_L1_LS 0x2005 225#define USB_AUDIO_AS_FT_IEC1937_MPEG2_L23_LS 0x2006 226 227// Audio stream class-specific format-specific types 228#define USB_AUDIO_FORMAT_TYPE_UNDEFINED 0x00 229#define USB_AUDIO_FORMAT_TYPE_I 0x01 230#define USB_AUDIO_FORMAT_TYPE_II 0x02 231#define USB_AUDIO_FORMAT_TYPE_III 0x03 232 233//////////////////////////////////////////////////// 234// 235// MIDI streaming interface constants 236// 237//////////////////////////////////////////////////// 238 239// MIDI class specific MS interface descriptor subtypes 240#define USB_MIDI_MS_HEADER 0x01 241#define USB_MIDI_IN_JACK 0x02 242#define USB_MIDI_OUT_JACK 0x03 243#define USB_MIDI_ELEMENT 0x04 244 245// MIDI class specific MS endpoint descriptor subtypes 246#define USB_MIDI_MS_GENERAL 0x01 247 248// MIDI IN and OUT jack types 249#define USB_MIDI_JACK_EMBEDDED 0x01 250#define USB_MIDI_JACK_INTERNAL 0x02 251 252// MIDI endpoint control selectors 253#define USB_MIDI_ASSOCIATION_CONTROL 0x01 254 255 256// Top level header structure shared by all USB audio descriptors. 257// 258typedef struct { 259 uint8_t bLength; 260 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 261 uint8_t bDescriptorSubtype; 262} __PACKED usb_audio_desc_header; 263 264// Audio Control Interface descriptor definitions 265// 266typedef struct { 267 uint8_t bLength; 268 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 269 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_HEADER 270 uint16_t bcdADC; 271 uint16_t wTotalLength; 272 uint8_t bInCollection; 273 uint8_t baInterfaceNr[]; 274} __PACKED usb_audio_ac_header_desc; 275 276// Common header structure shared by all unit and terminal descriptors found in 277// an Audio Control interface descriptor. 278typedef struct { 279 uint8_t bLength; 280 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 281 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_.*_(TERMINAL|UNIT) 282 uint8_t bID; 283} __PACKED usb_audio_ac_ut_desc; 284 285// Common header structure shared by all terminal descriptors found in an Audio 286// Control interface descriptor. 287typedef struct { 288 uint8_t bLength; 289 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 290 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_(INPUT|OUTPUT)_TERMINAL 291 uint8_t bTerminalID; 292 uint16_t wTerminalType; 293 uint8_t bAssocTerminal; 294} __PACKED usb_audio_ac_terminal_desc; 295 296typedef struct { 297 uint8_t bLength; 298 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 299 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_INPUT_TERMINAL 300 uint8_t bTerminalID; 301 uint16_t wTerminalType; 302 uint8_t bAssocTerminal; 303 uint8_t bNrChannels; 304 uint16_t wChannelConfig; 305 uint8_t iChannelNames; 306 uint8_t iTerminal; 307} __PACKED usb_audio_ac_input_terminal_desc; 308 309typedef struct { 310 uint8_t bLength; 311 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 312 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_OUTPUT_TERMINAL 313 uint8_t bTerminalID; 314 uint16_t wTerminalType; 315 uint8_t bAssocTerminal; 316 uint8_t bSourceID; 317 uint8_t iTerminal; 318} __PACKED usb_audio_ac_output_terminal_desc; 319 320// Note: Mixer unit descriptors contain two inlined variable length arrays, each 321// with descriptor data following them. They are therefor described using 3 322// structure definitions which are logically concatenated, but separated by the 323// inline arrays. 324typedef struct { 325 uint8_t bLength; 326 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 327 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_MIXER_UNIT 328 uint8_t bUnitID; 329 uint8_t bNrInPins; 330 uint8_t baSourceID[]; 331} __PACKED usb_audio_ac_mixer_unit_desc_0; 332 333typedef struct { 334 uint8_t bNrChannels; 335 uint16_t wChannelConfig; 336 uint8_t iChannelNames; 337 uint8_t bmControls[]; 338} __PACKED usb_audio_ac_mixer_unit_desc_1; 339 340typedef struct { 341 uint8_t iMixer; 342} __PACKED usb_audio_ac_mixer_unit_desc_2; 343 344// Note: Selector unit descriptors contain an inlined variable length array with 345// descriptor data following it. They are therefor described using 2 structure 346// definitions which are logically concatenated, but separated by the inline 347// array. 348typedef struct { 349 uint8_t bLength; 350 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 351 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_SELECTOR_UNIT 352 uint8_t bUnitID; 353 uint8_t bNrInPins; 354 uint8_t baSourceID[]; 355} __PACKED usb_audio_ac_selector_unit_desc_0; 356 357typedef struct { 358 uint8_t iSelector; 359} __PACKED usb_audio_ac_selector_unit_desc_1; 360 361// Note: Feature unit descriptors contain an inlined variable length array with 362// descriptor data following it. They are therefor described using 2 structure 363// definitions which are logically concatenated, but separated by the inline 364// array. 365typedef struct { 366 uint8_t bLength; 367 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 368 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_FEATURE_UNIT 369 uint8_t bUnitID; 370 uint8_t bSourceID; 371 uint8_t bControlSize; 372 uint8_t bmaControls[]; 373} __PACKED usb_audio_ac_feature_unit_desc_0; 374 375typedef struct { 376 uint8_t iFeature; 377} __PACKED usb_audio_ac_feature_unit_desc_1; 378 379// Note: Processing unit descriptors contain two inlined variable length arrays, 380// each with descriptor data following them. They are therefor described using 381// 3 structure definitions which are logically concatinated, but separated by 382// the inline arrays. 383typedef struct { 384 uint8_t bLength; 385 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 386 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_PROCESSING_UNIT 387 uint8_t bUnitID; 388 uint16_t wProcessType; 389 uint8_t bNrInPins; 390 uint8_t baSourceID[]; 391} __PACKED usb_audio_ac_processing_unit_desc_0; 392 393typedef struct { 394 uint8_t bNrChannels; 395 uint16_t wChannelConfig; 396 uint8_t iChannelNames; 397 uint8_t bControlSize; 398 uint8_t bmControls[]; 399} __PACKED usb_audio_ac_processing_unit_desc_1; 400 401typedef struct { 402 uint8_t iProcessing; 403 // Note: The Process-specific control structure follows this with the 404 // structure type determined by wProcessType 405 // TODO(johngro) : Define the process specific control structures. As of 406 // the 1.0 revision of the USB audio spec, the types to be defined are... 407 // 408 // ** Up/Down-mix 409 // ** Dolby Prologic 410 // ** 3D-Stereo Extender 411 // ** Reverberation 412 // ** Chorus 413 // ** Dynamic Range Compressor 414} __PACKED usb_audio_ac_processing_unit_desc_2; 415 416// Note: Extension unit descriptors contain two inlined variable length arrays, 417// each with descriptor data following them. They are therefor described using 418// 3 structure definitions which are logically concatenated, but separated by 419// the inline arrays. 420typedef struct { 421 uint8_t bLength; 422 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 423 uint8_t bDescriptorSubtype; // USB_AUDIO_AC_EXTENSION_UNIT 424 uint8_t bUnitID; 425 uint16_t wExtensionCode; 426 uint8_t bNrInPins; 427 uint8_t baSourceID[]; 428} __PACKED usb_audio_ac_extension_unit_desc_0; 429 430typedef struct { 431 uint8_t bNrChannels; 432 uint16_t wChannelConfig; 433 uint8_t iChannelNames; 434 uint8_t bControlSize; 435 uint8_t bmControls[]; 436} __PACKED usb_audio_ac_extension_unit_desc_1; 437 438typedef struct { 439 uint8_t iExtension; 440} __PACKED usb_audio_ac_extension_unit_desc_2; 441 442// Audio Streaming Interface descriptor definitions 443// 444typedef struct { 445 uint8_t bLength; 446 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 447 uint8_t bDescriptorSubtype; // USB_AUDIO_AS_GENERAL 448 uint8_t bTerminalLink; 449 uint8_t bDelay; 450 uint16_t wFormatTag; 451} __PACKED usb_audio_as_header_desc; 452 453typedef struct { 454 uint8_t freq[3]; // 24 bit unsigned integer, little-endian 455} __PACKED usb_audio_as_samp_freq; 456 457// Common header used by all format type descriptors 458typedef struct { 459 uint8_t bLength; 460 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 461 uint8_t bDescriptorSubtype; // USB_AUDIO_AS_FORMAT_TYPE 462 uint8_t bFormatType; 463} __PACKED usb_audio_as_format_type_hdr; 464 465typedef struct { 466 uint8_t bLength; 467 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 468 uint8_t bDescriptorSubtype; // USB_AUDIO_AS_FORMAT_TYPE 469 uint8_t bFormatType; // USB_AUDIO_FORMAT_TYPE_I 470 uint8_t bNrChannels; 471 uint8_t bSubFrameSize; 472 uint8_t bBitResolution; 473 uint8_t bSamFreqType; // number of sampling frequencies 474 usb_audio_as_samp_freq tSamFreq[]; // list of sampling frequencies (3 bytes each) 475} __PACKED usb_audio_as_format_type_i_desc; 476 477typedef struct { 478 uint8_t bLength; 479 uint8_t bDescriptorType; // USB_AUDIO_CS_ENDPOINT 480 uint8_t bDescriptorSubtype; // USB_AUDIO_EP_GENERAL 481 uint8_t bmAttributes; 482 uint8_t bLockDelayUnits; 483 uint16_t wLockDelay; 484} __PACKED usb_audio_as_isoch_ep_desc; 485 486// MIDI Streaming Interface descriptor definitions 487// 488typedef struct { 489 uint8_t bLength; 490 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 491 uint8_t bDescriptorSubtype; // USB_MIDI_MS_HEADER 492 uint16_t bcdMSC; 493 uint16_t wTotalLength; 494} __PACKED usb_midi_ms_header_desc; 495 496typedef struct { 497 uint8_t bLength; 498 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 499 uint8_t bDescriptorSubtype; // USB_MIDI_IN_JACK 500 uint8_t bJackType; 501 uint8_t bJackID; 502 uint8_t iJack; 503} __PACKED usb_midi_ms_in_jack_desc; 504 505typedef struct { 506 uint8_t bLength; 507 uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE 508 uint8_t bDescriptorSubtype; // USB_MIDI_OUT_JACK 509 uint8_t bJackType; 510 uint8_t bJackID; 511 uint8_t bNrInputPins; 512 uint8_t baSourceID; 513 uint8_t baSourcePin; 514} __PACKED usb_midi_ms_out_jack_desc; 515 516typedef struct { 517 uint8_t bLength; 518 uint8_t bDescriptorType; // USB_AUDIO_CS_ENDPOINT 519 uint8_t bDescriptorSubtype; // USB_MIDI_MS_GENERAL 520 uint8_t bNumEmbMIDIJack; 521 uint8_t baAssocJackID[]; 522} __PACKED usb_midi_ms_endpoint_desc; 523 524__END_CDECLS; 525