| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SYSROOT_ZIRCON_HW_USB_AUDIO_H_ |
| #define SYSROOT_ZIRCON_HW_USB_AUDIO_H_ |
| |
| // clang-format off |
| |
| #include <zircon/compiler.h> |
| #include <zircon/types.h> |
| |
| __BEGIN_CDECLS |
| |
| //////////////////////////////////////////////////// |
| // |
| // General Audio interface constants |
| // |
| //////////////////////////////////////////////////// |
| |
| // audio interface subclasses |
| #define USB_SUBCLASS_AUDIO_CONTROL 0x01 |
| #define USB_SUBCLASS_AUDIO_STREAMING 0x02 |
| #define USB_SUBCLASS_MIDI_STREAMING 0x03 |
| |
| // audio class specific descriptor types |
| #define USB_AUDIO_CS_DEVICE 0x21 |
| #define USB_AUDIO_CS_CONFIGURATION 0x22 |
| #define USB_AUDIO_CS_STRING 0x23 |
| #define USB_AUDIO_CS_INTERFACE 0x24 |
| #define USB_AUDIO_CS_ENDPOINT 0x25 |
| |
| //////////////////////////////////////////////////// |
| // |
| // Audio Control interface constants |
| // |
| //////////////////////////////////////////////////// |
| |
| // audio class specific AC interface descriptor subtypes |
| #define USB_AUDIO_AC_HEADER 0x01 |
| #define USB_AUDIO_AC_INPUT_TERMINAL 0x02 |
| #define USB_AUDIO_AC_OUTPUT_TERMINAL 0x03 |
| #define USB_AUDIO_AC_MIXER_UNIT 0x04 |
| #define USB_AUDIO_AC_SELECTOR_UNIT 0x05 |
| #define USB_AUDIO_AC_FEATURE_UNIT 0x06 |
| #define USB_AUDIO_AC_PROCESSING_UNIT 0x07 |
| #define USB_AUDIO_AC_EXTENSION_UNIT 0x08 |
| |
| // processing unit process types |
| #define USB_AUDIO_UP_DOWN_MIX_PROCESS 0x01 |
| #define USB_AUDIO_DOLBY_PROLOGIC_PROCESS 0x02 |
| #define USB_AUDIO_3D_STEREO_EXTENDER_PROCESS 0x03 |
| #define USB_AUDIO_REVERBERATION_PROCESS 0x04 |
| #define USB_AUDIO_CHORUS_PROCESS 0x05 |
| #define USB_AUDIO_DYN_RANGE_COMP_PROCESS 0x06 |
| |
| // audio class specific endpoint descriptor subtypes |
| #define USB_AUDIO_EP_GENERAL 0x01 |
| |
| // audio class specific request codes |
| #define USB_AUDIO_SET_CUR 0x01 |
| #define USB_AUDIO_GET_CUR 0x81 |
| #define USB_AUDIO_SET_MIN 0x02 |
| #define USB_AUDIO_GET_MIN 0x82 |
| #define USB_AUDIO_SET_MAX 0x03 |
| #define USB_AUDIO_GET_MAX 0x83 |
| #define USB_AUDIO_SET_RES 0x04 |
| #define USB_AUDIO_GET_RES 0x84 |
| #define USB_AUDIO_SET_MEM 0x05 |
| #define USB_AUDIO_GET_MEM 0x85 |
| #define USB_AUDIO_GET_STAT 0xFF |
| |
| // terminal control selectors |
| #define USB_AUDIO_COPY_PROTECT_CONTROL 0x01 |
| |
| // feature unit control selectors |
| #define USB_AUDIO_MUTE_CONTROL 0x01 |
| #define USB_AUDIO_VOLUME_CONTROL 0x02 |
| #define USB_AUDIO_BASS_CONTROL 0x03 |
| #define USB_AUDIO_MID_CONTROL 0x04 |
| #define USB_AUDIO_TREBLE_CONTROL 0x05 |
| #define USB_AUDIO_GRAPHIC_EQUALIZER_CONTROL 0x06 |
| #define USB_AUDIO_AUTOMATIC_GAIN_CONTROL 0x07 |
| #define USB_AUDIO_DELAY_CONTROL 0x08 |
| #define USB_AUDIO_BASS_BOOST_CONTROL 0x09 |
| #define USB_AUDIO_LOUDNESS_CONTROL 0x0A |
| |
| // feature unit control support bitmasks |
| #define USB_AUDIO_FU_BMA_MUTE (1u << 0u) |
| #define USB_AUDIO_FU_BMA_VOLUME (1u << 1u) |
| #define USB_AUDIO_FU_BMA_BASS (1u << 2u) |
| #define USB_AUDIO_FU_BMA_MID (1u << 3u) |
| #define USB_AUDIO_FU_BMA_TREBLE (1u << 4u) |
| #define USB_AUDIO_FU_BMA_GRAPHIC_EQUALIZER (1u << 5u) |
| #define USB_AUDIO_FU_BMA_AUTOMATIC_GAIN (1u << 6u) |
| #define USB_AUDIO_FU_BMA_DELAY (1u << 7u) |
| #define USB_AUDIO_FU_BMA_BASS_BOOST (1u << 8u) |
| #define USB_AUDIO_FU_BMA_LOUDNESS (1u << 9u) |
| |
| // up/down mix processing unit control selectors |
| #define USB_AUDIO_UD_ENABLE_CONTROL 0x01 |
| #define USB_AUDIO_UD_MODE_SELECT_CONTROL 0x02 |
| #define USB_AUDIO_UD_MODE_SELECT_CONTROL 0x02 |
| |
| // Dolby Prologic processing unit control selectors |
| #define USB_AUDIO_DP_ENABLE_CONTROL 0x01 |
| #define USB_AUDIO_DP_MODE_SELECT_CONTROL 0x02 |
| |
| // 3D stereo extender processing unit control selectors |
| #define USB_AUDIO_3D_ENABLE_CONTROL 0x01 |
| #define USB_AUDIO_SPACIOUSNESS_CONTROL 0x03 |
| |
| // reverberation processing unit control selectors |
| #define USB_AUDIO_RV_ENABLE_CONTROL 0x01 |
| #define USB_AUDIO_REVERB_LEVEL_CONTROL 0x02 |
| #define USB_AUDIO_REVERB_TIME_CONTROL 0x03 |
| #define USB_AUDIO_REVERB_FEEDBACK_CONTROL 0x04 |
| |
| // chorus processing unit control selectors |
| #define USB_AUDIO_CH_ENABLE_CONTROL 0x01 |
| #define USB_AUDIO_CHORUS_LEVEL_CONTROL 0x02 |
| #define USB_AUDIO_CHORUS_RATE_CONTROL 0x03 |
| #define USB_AUDIO_CHORUS_DEPTH_CONTROL 0x04 |
| |
| // dynamic range compressor processing unit control selectors |
| #define USB_AUDIO_DR_ENABLE_CONTROL 0x01 |
| #define USB_AUDIO_COMPRESSION_RATE_CONTROL 0x02 |
| #define USB_AUDIO_MAXAMPL_CONTROL 0x03 |
| #define USB_AUDIO_THRESHOLD_CONTROL 0x04 |
| #define USB_AUDIO_ATTACK_TIME 0x05 |
| #define USB_AUDIO_RELEASE_TIME 0x06 |
| |
| // extension unit control selectors |
| #define USB_AUDIO_XU_ENABLE_CONTROL 0x01 |
| |
| // endpoint control selectors |
| #define USB_AUDIO_SAMPLING_FREQ_CONTROL 0x01 |
| #define USB_AUDIO_PITCH_CONTROL 0x02 |
| |
| // USB audio terminal types |
| #define USB_AUDIO_TERMINAL_USB_UNDEFINED 0x0100 |
| #define USB_AUDIO_TERMINAL_USB_STREAMING 0x0101 |
| #define USB_AUDIO_TERMINAL_USB_VENDOR 0x01FF |
| #define USB_AUDIO_TERMINAL_INPUT_UNDEFINED 0x0200 |
| #define USB_AUDIO_TERMINAL_MICROPHONE 0x0201 |
| #define USB_AUDIO_TERMINAL_DESKTOP_MICROPHONE 0x0202 |
| #define USB_AUDIO_TERMINAL_PERSONAL_MICROPHONE 0x0203 |
| #define USB_AUDIO_TERMINAL_OMNI_DIRECTIONAL_MICROPHONE 0x0204 |
| #define USB_AUDIO_TERMINAL_MICROPHONE_ARRAY 0x0205 |
| #define USB_AUDIO_TERMINAL_PROCESSING_MICROPHONE_ARRAY 0x0206 |
| #define USB_AUDIO_TERMINAL_OUTPUT_UNDEFINED 0x0300 |
| #define USB_AUDIO_TERMINAL_SPEAKER 0x0301 |
| #define USB_AUDIO_TERMINAL_HEADPHONES 0x0302 |
| #define USB_AUDIO_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO 0x0303 |
| #define USB_AUDIO_TERMINAL_DESKTOP_SPEAKER 0x0304 |
| #define USB_AUDIO_TERMINAL_ROOM_SPEAKER 0x0305 |
| #define USB_AUDIO_TERMINAL_COMMUNICATION_SPEAKER 0x0306 |
| #define USB_AUDIO_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER 0x0307 |
| #define USB_AUDIO_TERMINAL_BIDIRECTIONAL_UNDEFINED 0x0400 |
| #define USB_AUDIO_TERMINAL_HANDSET 0x0401 |
| #define USB_AUDIO_TERMINAL_HEADSET 0x0402 |
| #define USB_AUDIO_TERMINAL_SPEAKERPHONE 0x0403 |
| #define USB_AUDIO_TERMINAL_ECHO_SUPPRESSING_SPEAKERPHONE 0x0404 |
| #define USB_AUDIO_TERMINAL_ECHO_CANCELING_SPEAKERPHONE 0x0405 |
| #define USB_AUDIO_TERMINAL_TELEPHONY_UNDEFINED 0x0500 |
| #define USB_AUDIO_TERMINAL_PHONE_LINE 0x0501 |
| #define USB_AUDIO_TERMINAL_TELEPHONE 0x0502 |
| #define USB_AUDIO_TERMINAL_DOWN_LINE_PHONE 0x0503 |
| #define USB_AUDIO_TERMINAL_EXTERNAL_UNDEFINED 0x0600 |
| #define USB_AUDIO_TERMINAL_ANALOG_CONNECTOR 0x0601 |
| #define USB_AUDIO_TERMINAL_DIGITAL_AUDIO_INTERFACE 0x0602 |
| #define USB_AUDIO_TERMINAL_LINE_CONNECTOR 0x0603 |
| #define USB_AUDIO_TERMINAL_LEGACY_AUDIO_CONNECTOR 0x0604 |
| #define USB_AUDIO_TERMINAL_SPDIF_INTERFACE 0x0605 |
| #define USB_AUDIO_TERMINAL_1394_DA_STREAM 0x0606 |
| #define USB_AUDIO_TERMINAL_1394_DV_STREAM_SOUNDTRACK 0x0607 |
| #define USB_AUDIO_TERMINAL_EMBEDDED_UNDEFINED 0x0700 |
| #define USB_AUDIO_TERMINAL_LEVEL_CALIBRATION_NOISE_SOURCE 0x0701 |
| #define USB_AUDIO_TERMINAL_EQUALIZATION_NOISE 0x0702 |
| #define USB_AUDIO_TERMINAL_CD_PLAYER 0x0703 |
| #define USB_AUDIO_TERMINAL_DAT 0x0704 |
| #define USB_AUDIO_TERMINAL_DCC 0x0705 |
| #define USB_AUDIO_TERMINAL_MINI_DISK 0x0706 |
| #define USB_AUDIO_TERMINAL_ANALOG_TAPE 0x0707 |
| #define USB_AUDIO_TERMINAL_PHONOGRAPH 0x0708 |
| #define USB_AUDIO_TERMINAL_VCR_AUDIO 0x0709 |
| #define USB_AUDIO_TERMINAL_VIDEO_DISK_AUDIO 0x070A |
| #define USB_AUDIO_TERMINAL_DVD_AUDIO 0x070B |
| #define USB_AUDIO_TERMINAL_TV_TUNER_AUDIO 0x070C |
| #define USB_AUDIO_TERMINAL_SATELLITE_RECEIVER_AUDIO 0x070D |
| #define USB_AUDIO_TERMINAL_CABLE_TUNER_AUDIO 0x070E |
| #define USB_AUDIO_TERMINAL_DSS_AUDIO 0x070F |
| #define USB_AUDIO_TERMINAL_RADIO_RECEIVER 0x0710 |
| #define USB_AUDIO_TERMINAL_RADIO_TRANSMITTER 0x0711 |
| #define USB_AUDIO_TERMINAL_MULTI_TRACK_RECORDER 0x0712 |
| #define USB_AUDIO_TERMINAL_SYNTHESIZER 0x0713 |
| |
| //////////////////////////////////////////////////// |
| // |
| // Audio streaming interface constants |
| // |
| //////////////////////////////////////////////////// |
| |
| // Audio stream class-specific AS interface descriptor subtypes |
| #define USB_AUDIO_AS_GENERAL 0x01 |
| #define USB_AUDIO_AS_FORMAT_TYPE 0x02 |
| #define USB_AUDIO_AS_FORMAT_SPECIFIC 0x03 |
| |
| // wFormatTag values present in the class specific AS header |
| // Defined in Section A.1 of USB Device Class Definition for Audio Data Formats |
| #define USB_AUDIO_AS_FT_TYPE_I_UNDEFINED 0x0000 |
| #define USB_AUDIO_AS_FT_PCM 0x0001 |
| #define USB_AUDIO_AS_FT_PCM8 0x0002 |
| #define USB_AUDIO_AS_FT_IEEE_FLOAT 0x0003 |
| #define USB_AUDIO_AS_FT_ALAW 0x0004 |
| #define USB_AUDIO_AS_FT_MULAW 0x0005 |
| #define USB_AUDIO_AS_FT_TYPE_II_UNDEFINED 0x1000 |
| #define USB_AUDIO_AS_FT_MPEG 0x1001 |
| #define USB_AUDIO_AS_FT_AC3 0x1002 |
| #define USB_AUDIO_AS_FT_TYPE_III_UNDEFINED 0x2000 |
| #define USB_AUDIO_AS_FT_IEC1937_AC3 0x2001 |
| #define USB_AUDIO_AS_FT_IEC1937_MPEG1_L1 0x2002 |
| #define USB_AUDIO_AS_FT_IEC1937_MPEG1_L23 0x2003 |
| #define USB_AUDIO_AS_FT_IEC1937_MPEG2_EXT 0x2004 |
| #define USB_AUDIO_AS_FT_IEC1937_MPEG2_L1_LS 0x2005 |
| #define USB_AUDIO_AS_FT_IEC1937_MPEG2_L23_LS 0x2006 |
| |
| // Audio stream class-specific format-specific types |
| #define USB_AUDIO_FORMAT_TYPE_UNDEFINED 0x00 |
| #define USB_AUDIO_FORMAT_TYPE_I 0x01 |
| #define USB_AUDIO_FORMAT_TYPE_II 0x02 |
| #define USB_AUDIO_FORMAT_TYPE_III 0x03 |
| |
| //////////////////////////////////////////////////// |
| // |
| // MIDI streaming interface constants |
| // |
| //////////////////////////////////////////////////// |
| |
| // MIDI class specific MS interface descriptor subtypes |
| #define USB_MIDI_MS_HEADER 0x01 |
| #define USB_MIDI_IN_JACK 0x02 |
| #define USB_MIDI_OUT_JACK 0x03 |
| #define USB_MIDI_ELEMENT 0x04 |
| |
| // MIDI class specific MS endpoint descriptor subtypes |
| #define USB_MIDI_MS_GENERAL 0x01 |
| |
| // MIDI IN and OUT jack types |
| #define USB_MIDI_JACK_EMBEDDED 0x01 |
| #define USB_MIDI_JACK_INTERNAL 0x02 |
| |
| // MIDI endpoint control selectors |
| #define USB_MIDI_ASSOCIATION_CONTROL 0x01 |
| |
| |
| // Top level header structure shared by all USB audio descriptors. |
| // |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; |
| } __PACKED usb_audio_desc_header; |
| |
| // Audio Control Interface descriptor definitions |
| // |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_HEADER |
| uint16_t bcdADC; |
| uint16_t wTotalLength; |
| uint8_t bInCollection; |
| uint8_t baInterfaceNr[]; |
| } __PACKED usb_audio_ac_header_desc; |
| |
| // Common header structure shared by all unit and terminal descriptors found in |
| // an Audio Control interface descriptor. |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_.*_(TERMINAL|UNIT) |
| uint8_t bID; |
| } __PACKED usb_audio_ac_ut_desc; |
| |
| // Common header structure shared by all terminal descriptors found in an Audio |
| // Control interface descriptor. |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_(INPUT|OUTPUT)_TERMINAL |
| uint8_t bTerminalID; |
| uint16_t wTerminalType; |
| uint8_t bAssocTerminal; |
| } __PACKED usb_audio_ac_terminal_desc; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_INPUT_TERMINAL |
| uint8_t bTerminalID; |
| uint16_t wTerminalType; |
| uint8_t bAssocTerminal; |
| uint8_t bNrChannels; |
| uint16_t wChannelConfig; |
| uint8_t iChannelNames; |
| uint8_t iTerminal; |
| } __PACKED usb_audio_ac_input_terminal_desc; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_OUTPUT_TERMINAL |
| uint8_t bTerminalID; |
| uint16_t wTerminalType; |
| uint8_t bAssocTerminal; |
| uint8_t bSourceID; |
| uint8_t iTerminal; |
| } __PACKED usb_audio_ac_output_terminal_desc; |
| |
| // Note: Mixer unit descriptors contain two inlined variable length arrays, each |
| // with descriptor data following them. They are therefor described using 3 |
| // structure definitions which are logically concatenated, but separated by the |
| // inline arrays. |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_MIXER_UNIT |
| uint8_t bUnitID; |
| uint8_t bNrInPins; |
| uint8_t baSourceID[]; |
| } __PACKED usb_audio_ac_mixer_unit_desc_0; |
| |
| typedef struct { |
| uint8_t bNrChannels; |
| uint16_t wChannelConfig; |
| uint8_t iChannelNames; |
| uint8_t bmControls[]; |
| } __PACKED usb_audio_ac_mixer_unit_desc_1; |
| |
| typedef struct { |
| uint8_t iMixer; |
| } __PACKED usb_audio_ac_mixer_unit_desc_2; |
| |
| // Note: Selector unit descriptors contain an inlined variable length array with |
| // descriptor data following it. They are therefor described using 2 structure |
| // definitions which are logically concatenated, but separated by the inline |
| // array. |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_SELECTOR_UNIT |
| uint8_t bUnitID; |
| uint8_t bNrInPins; |
| uint8_t baSourceID[]; |
| } __PACKED usb_audio_ac_selector_unit_desc_0; |
| |
| typedef struct { |
| uint8_t iSelector; |
| } __PACKED usb_audio_ac_selector_unit_desc_1; |
| |
| // Note: Feature unit descriptors contain an inlined variable length array with |
| // descriptor data following it. They are therefor described using 2 structure |
| // definitions which are logically concatenated, but separated by the inline |
| // array. |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_FEATURE_UNIT |
| uint8_t bUnitID; |
| uint8_t bSourceID; |
| uint8_t bControlSize; |
| uint8_t bmaControls[]; |
| } __PACKED usb_audio_ac_feature_unit_desc_0; |
| |
| typedef struct { |
| uint8_t iFeature; |
| } __PACKED usb_audio_ac_feature_unit_desc_1; |
| |
| // Note: Processing unit descriptors contain two inlined variable length arrays, |
| // each with descriptor data following them. They are therefor described using |
| // 3 structure definitions which are logically concatenated, but separated by |
| // the inline arrays. |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_PROCESSING_UNIT |
| uint8_t bUnitID; |
| uint16_t wProcessType; |
| uint8_t bNrInPins; |
| uint8_t baSourceID[]; |
| } __PACKED usb_audio_ac_processing_unit_desc_0; |
| |
| typedef struct { |
| uint8_t bNrChannels; |
| uint16_t wChannelConfig; |
| uint8_t iChannelNames; |
| uint8_t bControlSize; |
| uint8_t bmControls[]; |
| } __PACKED usb_audio_ac_processing_unit_desc_1; |
| |
| typedef struct { |
| uint8_t iProcessing; |
| // Note: The Process-specific control structure follows this with the |
| // structure type determined by wProcessType |
| // TODO(johngro) : Define the process specific control structures. As of |
| // the 1.0 revision of the USB audio spec, the types to be defined are... |
| // |
| // ** Up/Down-mix |
| // ** Dolby Prologic |
| // ** 3D-Stereo Extender |
| // ** Reverberation |
| // ** Chorus |
| // ** Dynamic Range Compressor |
| } __PACKED usb_audio_ac_processing_unit_desc_2; |
| |
| // Note: Extension unit descriptors contain two inlined variable length arrays, |
| // each with descriptor data following them. They are therefor described using |
| // 3 structure definitions which are logically concatenated, but separated by |
| // the inline arrays. |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AC_EXTENSION_UNIT |
| uint8_t bUnitID; |
| uint16_t wExtensionCode; |
| uint8_t bNrInPins; |
| uint8_t baSourceID[]; |
| } __PACKED usb_audio_ac_extension_unit_desc_0; |
| |
| typedef struct { |
| uint8_t bNrChannels; |
| uint16_t wChannelConfig; |
| uint8_t iChannelNames; |
| uint8_t bControlSize; |
| uint8_t bmControls[]; |
| } __PACKED usb_audio_ac_extension_unit_desc_1; |
| |
| typedef struct { |
| uint8_t iExtension; |
| } __PACKED usb_audio_ac_extension_unit_desc_2; |
| |
| // Audio Streaming Interface descriptor definitions |
| // |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AS_GENERAL |
| uint8_t bTerminalLink; |
| uint8_t bDelay; |
| uint16_t wFormatTag; |
| } __PACKED usb_audio_as_header_desc; |
| |
| typedef struct { |
| uint8_t freq[3]; // 24 bit unsigned integer, little-endian |
| } __PACKED usb_audio_as_samp_freq; |
| |
| // Common header used by all format type descriptors |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AS_FORMAT_TYPE |
| uint8_t bFormatType; |
| } __PACKED usb_audio_as_format_type_hdr; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_AUDIO_AS_FORMAT_TYPE |
| uint8_t bFormatType; // USB_AUDIO_FORMAT_TYPE_I |
| uint8_t bNrChannels; |
| uint8_t bSubFrameSize; |
| uint8_t bBitResolution; |
| uint8_t bSamFreqType; // number of sampling frequencies |
| usb_audio_as_samp_freq tSamFreq[]; // list of sampling frequencies (3 bytes each) |
| } __PACKED usb_audio_as_format_type_i_desc; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_ENDPOINT |
| uint8_t bDescriptorSubtype; // USB_AUDIO_EP_GENERAL |
| uint8_t bmAttributes; |
| uint8_t bLockDelayUnits; |
| uint16_t wLockDelay; |
| } __PACKED usb_audio_as_isoch_ep_desc; |
| |
| // MIDI Streaming Interface descriptor definitions |
| // |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_MIDI_MS_HEADER |
| uint16_t bcdMSC; |
| uint16_t wTotalLength; |
| } __PACKED usb_midi_ms_header_desc; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_MIDI_IN_JACK |
| uint8_t bJackType; |
| uint8_t bJackID; |
| uint8_t iJack; |
| } __PACKED usb_midi_ms_in_jack_desc; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE |
| uint8_t bDescriptorSubtype; // USB_MIDI_OUT_JACK |
| uint8_t bJackType; |
| uint8_t bJackID; |
| uint8_t bNrInputPins; |
| uint8_t baSourceID; |
| uint8_t baSourcePin; |
| } __PACKED usb_midi_ms_out_jack_desc; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_AUDIO_CS_ENDPOINT |
| uint8_t bDescriptorSubtype; // USB_MIDI_MS_GENERAL |
| uint8_t bNumEmbMIDIJack; |
| uint8_t baAssocJackID[]; |
| } __PACKED usb_midi_ms_endpoint_desc; |
| |
| __END_CDECLS |
| |
| #endif // SYSROOT_ZIRCON_HW_USB_AUDIO_H_ |