From b96598f697397ed683d93f97467360e181ff1015 Mon Sep 17 00:00:00 2001 From: patacongo Date: Fri, 20 Apr 2012 21:48:14 +0000 Subject: Fist cut at USB audio definitions git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4637 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/include/nuttx/usb/audio.h | 1557 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 1547 insertions(+), 10 deletions(-) diff --git a/nuttx/include/nuttx/usb/audio.h b/nuttx/include/nuttx/usb/audio.h index e4674525e..b9280e318 100644 --- a/nuttx/include/nuttx/usb/audio.h +++ b/nuttx/include/nuttx/usb/audio.h @@ -1,5 +1,6 @@ -/**************************************************************************** +/******************************************************************************************** * include/nuttx/usb/audio.h + * Audio Device Class (ADC) definitions * * Copyright (C) 2012 Gregory Nutt. All rights reserved. * Author: Gregory Nutt @@ -41,28 +42,1564 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - ****************************************************************************/ + ********************************************************************************************/ #ifndef __INCLUDE_NUTTX_USB_AUDIO_H #define __INCLUDE_NUTTX_USB_AUDIO_H -/**************************************************************************** +/******************************************************************************************** * Included Files - ****************************************************************************/ + ********************************************************************************************/ #include +#include -/**************************************************************************** +/******************************************************************************************** * Preprocessor definitions - ****************************************************************************/ + ********************************************************************************************/ +/* Device Descriptor + * + * Because audio functionality is always considered to reside at the interface level, this + * class specification does not define a specific audio device descriptor. For both composite + * devices and audio-only devices, the device descriptor must indicate that class information + * is to be found at the interface level. Therefore, the bDeviceClass, bDeviceSubClass and + * bDeviceProtocol fields of the device descriptor must contain the values 0xef, 0x02, and + * 0x01 respectively. + */ + +#define ADC_DEVICE_CLASS USB_CLASS_MISC +#define ADC_DEVICE_SUBCLASS 0x02 +#define ADC_DEVICE_PROTOCOL 0x01 + +/* Audio Interface Class Code (defined in usb.h) */ + +#define ADC_CLASS USB_CLASS_AUDIO + +/* Audio Interface Sub-class Codes */ + +#define ADC_SUBCLASS_UNDEF 0x00 /* Undefined */ +#define ADC_SUBCLASS_AUDIOCONTROL 0x01 /* Audio control */ +#define ADC_SUBCLASS_AUDIOSTREAMING 0x02 /* Audio streaming */ +#define ADC_SUBCLASS_MIDISTREAMING 0x03 /* MIDI streaming */ + +/* Audio Protocol Codes */ + +#define ADC_PROTOCOL_UNDEF 0x00 /* Undefined */ +#define ADC_PROTOCOLv20 0x20 /* IP version 2.0 */ + +/* Interface Association Descriptor (IAD) */ + +#define ADC_IAD_CLASS ADC_CLASS +#define ADC_IAD_SUBCLASS ADC_SUBCLASS_UNDEF +#define ADC_IAD_PROTOCOL ADC_PROTOCOLv20 + +/* Standard AC Interface Descriptor */ + +#define ADC_ACIF_CLASS ADC_CLASS +#define ADC_ACIF_SUBCLASS ADC_SUBCLASS_AUDIOCONTROL +#define ADC_ACIF_PROTOCOL ADC_PROTOCOLv20 + +/* Standard AS Interface Descriptor */ + +#define ADC_ASIF_CLASS ADC_CLASS +#define ADC_ASIF_SUBCLASS ADC_SUBCLASS_AUDIOSTREAMING +#define ADC_ASIF_PROTOCOL ADC_PROTOCOLv20 + +/* Class-specific Descriptor Codes: */ + +#define ADC_CS_UNDEF 0x20 +#define ADC_CS_DEVICE 0x21 +#define ADC_CS_CONFIGURATION 0x22 +#define ADC_CS_STRING 0x23 +#define ADC_CS_INTERFACE 0x24 +#define ADC_CS_ENDPOINT 0x25 + +/* Audio Class-Specific AC Interface Descriptor Subtypes */ + +#define ADC_AC_UNDEF 0x00 +#define ADC_AC_HEADER 0x01 +#define ADC_AC_INPUT_TERMINAL 0x02 +#define ADC_AC_OUTPUT_TERMINAL 0x03 +#define ADC_AC_MIXER_UNIT 0x04 +#define ADC_AC_SELECTOR_UNIT 0x05 +#define ADC_AC_FEATURE_UNIT 0x06 +#define ADC_AC_EFFECT_UNIT 0x07 +#define ADC_AC_PROCESSING_UNIT 0x08 +#define ADC_AC_EXTENSION_UNIT 0x09 +#define ADC_AC_CLOCK_SOURCE 0x0a +#define ADC_AC_CLOCK_SELECTOR 0x0b +#define ADC_AC_CLOCK_MULTIPLIER 0x0c +#define ADC_AC_SAMPLERATE_CONVERTER 0x0d + +/* Audio Class-Specific AS Interface Descriptor Subtypes */ + +#define ADC_AS_UNDEF 0x00 +#define ADC_AS_GENERAL 0x01 +#define ADC_AS_FORMAT_TYPE 0x02 +#define ADC_AS_ENCODER 0x03 +#define ADC_AS_DECODER 0x04 + +/* Clock Source Descriptor Clock Types */ + +#define ADC_CLKSRC_EXTERNAL 0x00 /* External clock */ +#define ADC_CLKSRC_INTERNAL_FIXED 0x01 /* Internal fixed clock */ +#define ADC_CLKSRC_INTERNAL_VAR 0x02 /* Internal variable clock */ +#define ADC_CLKSRC_INTERNAL_PROG 0x03 /* Internal programmable clock */ + +/* Effect Unit Effect Types */ + +#define ADC_EFFECT_UNDEF 0x00 +#define ADC_EFFECT_PARAM_EQ_SECTION 0x01 +#define ADC_EFFECT_REVERBERATION 0x02 +#define ADC_EFFECT_MOD_DELAY 0x03 +#define ADC_EFFECT_DYN_RANGE_COMP 0x04 + +/* Processing Unit Process Types */ + +#define ADC_PROCESS_UNDEF 0x00 +#define ADC_PROCESS_UPDOWNMIX 0x01 +#define ADC_PROCESS_DOLBY_PROLOGIC 0x02 +#define ADC_PROCESS_STEREO_EXTENDER 0x03 + +/* Audio Class-Specific Endpoint Descriptor Subtypes */ + +#define ADC_EPTYPE_UNDEF 0x00 +#define ADC_EPTYPE_GENERAL 0x01 + +/* Audio Class-Specific Request Codes */ + +#define ADC_REQUEST_UNDEF 0x00 +#define ADC_REQUEST_CUR 0x01 +#define ADC_REQUEST_RANGE 0x02 +#define ADC_REQUEST_MEM 0x03 + +/* Encoder Type Codes */ + +#define ADC_ENCODER_UNDEF 0x00 +#define ADC_ENCODER_OTHER 0x01 +#define ADC_ENCODER_MPEG 0x02 +#define ADC_ENCODER_AC3 0x03 +#define ADC_ENCODER_WMA 0x04 +#define ADC_ENCODER_DTS 0x05 + +/* Decoder Type Codes */ + +#define ADC_DECODER_UNDEF 0x00 +#define ADC_DECODER_OTHER 0x01 +#define ADC_DECODER_MPEG 0x02 +#define ADC_DECODER_AC3 0x03 +#define ADC_DECODER_WMA 0x04 +#define ADC_DECODER_DTS 0x05 + +/* bmChannelConfig: a bitmap field that indicates which spatial locations + * are occupied by the channels present in the cluster. The bit allocations + * are as follows: + */ + +#define ADC_LOCATION_FL (1 << 0) /* Front Left */ +#define ADC_LOCATION_FR (1 << 1) /* Front Right */ +#define ADC_LOCATION_FC (1 << 2) /* Front Center */ +#define ADC_LOCATION_LFE (1 << 3) /* Low Frequency Effects */ +#define ADC_LOCATION_BL (1 << 4) /* Back Left */ +#define ADC_LOCATION_BR (1 << 5) /* Back Right */ +#define ADC_LOCATION_FLC (1 << 6) /* Front Left of Center */ +#define ADC_LOCATION_FRC (1 << 7) /* Front Right of Center */ +#define ADC_LOCATION_BC (1 << 8) /* Back Center */ +#define ADC_LOCATION_SL (1 << 9) /* Side Left */ +#define ADC_LOCATION_SR (1 << 10) /* Side Right */ +#define ADC_LOCATION_TC (1 << 11) /* Top Center */ +#define ADC_LOCATION_TFL (1 << 12) /* Top Front Left */ +#define ADC_LOCATION_TFC (1 << 13) /* Top Front Center */ +#define ADC_LOCATION_TFR (1 << 14) /* Top Front Right */ +#define ADC_LOCATION_TBL (1 << 15) /* Top Back Left */ +#define ADC_LOCATION_TBC (1 << 16) /* Top Back Center */ +#define ADC_LOCATION_TBR (1 << 17) /* Top Back Right */ +#define ADC_LOCATION_TFLC (1 << 18) /* Top Front Left of Center */ +#define ADC_LOCATION_TFRC (1 << 19) /* Top Front Right of Center */ +#define ADC_LOCATION_LLFE (1 << 20) /* Left Low Frequency Effects */ +#define ADC_LOCATION_RLFE (1 << 21) /* Right Low Frequency Effects */ +#define ADC_LOCATION_TSL (1 << 22) /* Top Side Left */ +#define ADC_LOCATION_TSR (1 << 23) /* Top Side Right */ +#define ADC_LOCATION BC (1 << 24) /* Bottom Center */ +#define ADC_LOCATION_BLC (1 << 25) /* Back Left of Center */ +#define ADC_LOCATION_BRC (1 << 26) /* Back Right of Center */ + /* Bits 27-30: Reserved */ +#define ADC_LOCATION_RD (1 << 31) /* Raw Data */ + +/* Audio Function Category Codes */ + +#define ADC_CATEGORY_UNDEF 0x00 /* Undefined */ +#define ADC_CATEGORY_SPEAKER 0x01 /* Desktop speaker */ +#define ADC_CATEGORY_THEATER 0x02 /* Home theater */ +#define ADC_CATEGORY_MICROPHONE 0x03 /* Microphone */ +#define ADC_CATEGORY_HEADSET 0x04 /* Headset */ +#define ADC_CATEGORY_TELEPHONE 0x05 /* Telephone */ +#define ADC_CATEGORY_CONVERTER 0x06 /* Converter */ +#define ADC_CATEGORY_RECORDER 0x07 /* Voice/Sound recorder */ +#define ADC_CATEGORY_IO_BOX 0x08 /* I/O box */ +#define ADC_CATEGORY_INSTRUMENT 0x09 /* Musical instrument */ +#define ADC_CATEGORY_PROAUDIO 0x0a /* Pro-audio */ +#define ADC_CATEGORY_AV 0x0b /* Audio/video */ +#define ADC_CATEGORY_CONTROL 0x0c /* Control panel */ +#define ADC_CATEGORY_OTHER 0xff + +/* Clock Source Control Selectors */ + +#define ADC_CS_CONTROL_UNDEF 0x00 +#define ADC_CS_CONTROL_SAM_FREQ 0x01 +#define ADC_CS_CONTROL_CLOCK_VALID 0x02 + +/* Clock Selector Control Selectors */ + +#define ADC_CX_CONTROL_UNDEF 0x00 +#define ADC_CX_CONTROL_CLOCKSEL 0x01 + +/* Clock Multiplier Control Selectors */ + +#define ADC_CM_CONTROL_UNDEF 0x00 +#define ADC_CM_CONTROL_NUMERATOR 0x01 +#define ADC_CM_CONTROL_DENOMINATOR 0x02 + +/* Terminal Control Selectors */ + +#define ADC_TE_CONTROL_UNDEF 0x00 +#define ADC_TE_CONTROL_COPY_PROTECT 0x01 +#define ADC_TE_CONTROL_CONNECTOR 0x02 +#define ADC_TE_CONTROL_OVERLOAD 0x03 +#define ADC_TE_CONTROL_CLUSTER 0x04 +#define ADC_TE_CONTROL_UNDERFLOW 0x05 +#define ADC_TE_CONTROL_OVERFLOW 0x06 +#define ADC_TE_CONTROL_LATENCY 0x07 + +/* Mixer Control Selectors */ + +#define ADC_MU_CONTROL_UNDEF 0x00 +#define ADC_MU_CONTROL_MIXER 0x01 +#define ADC_MU_CONTROL_CLUSTER 0x02 +#define ADC_MU_CONTROL_UNDERFLOW 0x03 +#define ADC_MU_CONTROL_OVERFLOW 0x04 +#define ADC_MU_CONTROL_LATENCY 0x05 + +/* Selector Control Selectors */ + +#define ADC_SU_CONTROL_UNDEF 0x00 +#define ADC_SU_CONTROL_SELECTOR 0x01 +#define ADC_SU_CONTROL_LATENCY 0x02 + +/* Feature Unit Control Selectors */ + +#define ADC_FU_CONTROL_UNDEF 0x00 +#define ADC_FU_CONTROL_MUTE 0x01 +#define ADC_FU_CONTROL_VOLUME 0x02 +#define ADC_FU_CONTROL_BASS 0x03 +#define ADC_FU_CONTROL_MID 0x04 +#define ADC_FU_CONTROL_TREBLE 0x05 +#define ADC_FU_CONTROL_EQUALIZER 0x06 +#define ADC_FU_CONTROL_AGC 0x07 +#define ADC_FU_CONTROL_DELAY 0x08 +#define ADC_FU_CONTROL_BASS_BOOST 0x09 +#define ADC_FU_CONTROL_LOUDNESS 0x0a +#define ADC_FU_CONTROL_INP_GAIN 0x0b +#define ADC_FU_CONTROL_INP_GAIN_PAD 0x0c +#define ADC_FU_CONTROL_PHASE_INVERT 0x0d +#define ADC_FU_CONTROL_UNDERFLOW 0x0e +#define ADC_FU_CONTROL_OVERFLOW 0x0f +#define ADC_FU_CONTROL_LATENCY 0x10 + +/* Parametric Equalizer Section Effect Unit Control Selectors */ + +#define ADC_PE_CONTROL_UNDEF 0x00 +#define ADC_PE_CONTROL_ENABLE 0x01 +#define ADC_PE_CONTROL_CENTERFREQ 0x02 +#define ADC_PE_CONTROL_QFACTOR 0x03 +#define ADC_PE_CONTROL_GAIN 0x04 +#define ADC_PE_CONTROL_UNDERFLOW 0x05 +#define ADC_PE_CONTROL_OVERFLOW 0x06 +#define ADC_PE_CONTROL_LATENCY 0x07 + +/* Reverberation Effect Unit Control Selectors */ + +#define ADC_RV_CONTROL_UNDEF 0x00 +#define ADC_RV_CONTROL_ENABLE 0x01 +#define ADC_RV_CONTROL_TYPE 0x02 +#define ADC_RV_CONTROL_LEVEL 0x03 +#define ADC_RV_CONTROL_TIME 0x04 +#define ADC_RV_CONTROL_FEEDBACK 0x05 +#define ADC_RV_CONTROL_PREDELAY 0x06 +#define ADC_RV_CONTROL_DENSITY 0x07 +#define ADC_RV_CONTROL_HF_ROLLOFF 0x08 +#define ADC_RV_CONTROL_UNDERFLOW 0x09 +#define ADC_RV_CONTROL_OVERFLOW 0x0a +#define ADC_RV_CONTROL_LATENCY 0x0b + +/* Modulation Delay Effect Unit Control Selectors */ + +#define ADC_MD_CONTROL_UNDEF 0x00 +#define ADC_MD_CONTROL_ENABLE 0x01 +#define ADC_MD_CONTROL_BALANCE 0x02 +#define ADC_MD_CONTROL_RATE 0x03 +#define ADC_MD_CONTROL_DEPTH 0x04 +#define ADC_MD_CONTROL_TIME 0x05 +#define ADC_MD_CONTROL_FEEDBACK 0x06 +#define ADC_MD_CONTROL_UNDERFLOW 0x07 +#define ADC_MD_CONTROL_OVERFLOW 0x08 +#define ADC_MD_CONTROL_LATENCY 0x09 + +/* Dynamic Range Compressor Effect Unit Control Selectors */ + +#define ADC_DR_CONTROL_UNDEF 0x00 +#define ADC_DR_CONTROL_ENABLE 0x01 +#define ADC_DR_CONTROL_COMP_RATE 0x02 +#define ADC_DR_CONTROL_MAXAMPL 0x03 +#define ADC_DR_CONTROL_THRESHOLD 0x04 +#define ADC_DR_CONTROL_ATTACK_TIME 0x05 +#define ADC_DR_CONTROL_RELEASE_TIME 0x06 +#define ADC_DR_CONTROL_UNDERFLOW 0x07 +#define ADC_DR_CONTROL_OVERFLOW 0x08 +#define ADC_DR_CONTROL_LATENCY 0x09 + +/* Up/Down-mix Processing Unit Control Selectors */ + +#define ADC_UD_CONTROL_UNDEF 0x00 +#define ADC_UD_CONTROL_ENABLE 0x01 +#define ADC_UD_CONTROL_MODE_SELECT 0x02 +#define ADC_UD_CONTROL_CLUSTER 0x03 +#define ADC_UD_CONTROL_UNDERFLOW 0x04 +#define ADC_UD_CONTROL_OVERFLOW 0x05 +#define ADC_UD_CONTROL_LATENCY 0x06 + +/* Dolby Prologic™ Processing Unit Control Selectors */ + +#define ADC_DP_CONTROL_UNDEF 0x00 +#define ADC_DP_CONTROL_ENABLE 0x01 +#define ADC_DP_CONTROL_MODE_SELECT 0x02 +#define ADC_DP_CONTROL_CLUSTER 0x03 +#define ADC_DP_CONTROL_UNDERFLOW 0x04 +#define ADC_DP_CONTROL_OVERFLOW 0x05 +#define ADC_DP_CONTROL_LATENCY 0x06 + +/* Stereo Extender Processing Unit Control Selectors */ -/**************************************************************************** +#define ADC_STEXT_CONTROL_UNDEF 0x00 +#define ADC_STEXT_CONTROL_ENABLE 0x01 +#define ADC_STEXT_CONTROL_WIDTH 0x02 +#define ADC_STEXT_CONTROL_UNDERFLOW 0x03 +#define ADC_STEXT_CONTROL_OVERFLOW 0x04 +#define ADC_STEXT_CONTROL_LATENCY 0x05 + +/* Extension Unit Control Selectors */ + +#define ADC_XU_CONTROL_UNDEF 0x00 +#define ADC_XU_CONTROL_ENABLE 0x01 +#define ADC_XU_CONTROL_CLUSTER 0x02 +#define ADC_XU_CONTROL_UNDERFLOW 0x03 +#define ADC_XU_CONTROL_OVERFLOW 0x04 +#define ADC_XU_CONTROL_LATENCY 0x05 + +/* AudioStreaming Interface Control Selectors */ + +#define ADC_AS_CONTROL_UNDEF 0x00 +#define ADC_AS_CONTROL_ACT_ALT 0x01 +#define ADC_AS_CONTROL_VAL_ALT 0x02 +#define ADC_AS_CONTROL_AUDIO_FORMAT 0x03 + +/* Encoder Control Selectors */ + +#define ADC_EN_CONTROL_UNDEF 0x00 +#define ADC_EN_CONTROL_BIT_RATE 0x01 +#define ADC_EN_CONTROL_QUALITY 0x02 +#define ADC_EN_CONTROL_VBR 0x03 +#define ADC_EN_CONTROL_TYPE 0x04 +#define ADC_EN_CONTROL_UNDERFLOW 0x05 +#define ADC_EN_CONTROL_OVERFLOW 0x06 +#define ADC_EN_CONTROL_ENCODER_ERR 0x07 +#define ADC_EN_CONTROL_PARAM1 0x08 +#define ADC_EN_CONTROL_PARAM2 0x09 +#define ADC_EN_CONTROL_PARAM3 0x0a +#define ADC_EN_CONTROL_PARAM4 0x0b +#define ADC_EN_CONTROL_PARAM5 0x0c +#define ADC_EN_CONTROL_PARAM6 0x0d +#define ADC_EN_CONTROL_PARAM7 0x0e +#define ADC_EN_CONTROL_PARAM8 0x0f + +/* MPEG Decoder Control Selectors */ + +#define ADC_MPGD_CONTROL_UNDEF 0x00 +#define ADC_MPGD_CONTROL_DUAL_CHAN 0x01 +#define ADC_MPGD_CONTROL_2ND_STEREO 0x02 +#define ADC_MPGD_CONTROL_MULTILING 0x03 +#define ADC_MPGD_CONTROL_DYN_RANGE 0x04 +#define ADC_MPGD_CONTROL_SCALING 0x05 +#define ADC_MPGD_CONTROL_HILO_SCALE 0x06 +#define ADC_MPGD_CONTROL_UNDERFLOW 0x07 +#define ADC_MPGD_CONTROL_OVERFLOW 0x08 +#define ADC_MPGD_CONTROL_DECODE_ERR 0x09 + +/* AC-3 Decoder Control Selectors */ + +#define ADC_AC3D_CONTROL_UNDEF 0x00 +#define ADC_AC3D_CONTROL_MODE 0x01 +#define ADC_AC3D_CONTROL_DYN_RANGE 0x02 +#define ADC_AC3D_CONTROL_SCALING 0x03 +#define ADC_AC3D_CONTROL_HILO_SCALE 0x04 +#define ADC_AC3D_CONTROL_UNDERFLOW 0x05 +#define ADC_AC3D_CONTROL_OVERFLOW 0x06 +#define ADC_AC3D_CONTROL_DECODE_ERR 0x07 + +/* WMA Decoder Control Selectors */ + +#define ADC_WMAD_CONTROL_UNDEF 0x00 +#define ADC_WMAD_CONTROL_UNDERFLOW 0x01 +#define ADC_WMAD_CONTROL_OVERFLOW 0x02 +#define ADC_WMAD_CONTROL_DECODE_ERR 0x03 + +/* DTS Decoder Control Selectors */ + +#define ADC_DTSD_CONTROL_UNDEF 0x00 +#define ADC_DTSD_CONTROL_UNDERFLOW 0x01 +#define ADC_DTSD_CONTROL_OVERFLOW 0x02 +#define ADC_DTSD_CONTROL_DECODE_ERR 0x03 + +/* Endpoint Control Selectors */ + +#define ADC_EP_CONTROL_UNDEF 0x00 +#define ADC_EP_CONTROL_PITCH 0x01 +#define ADC_EP_CONTROL_OVERRUN 0x02 +#define ADC_EP_CONTROL_UNDERRUN 0x03 + +/* Encoder Error Codes */ + + /* <0: Reserved for vendor extensions */ +#define ADC_ENCODER_SUCCESS 0 /* No Error */ +#define ADC_ENCODER_ERROR_NOMEM 1 /* Out of Memory */ +#define ADC_ENCODER_ERROR_BW 2 /* Out of Bandwidth */ +#define ADC_ENCODER_ERROR_CYCLE 3 /* Out of Processing Cycles */ +#define ADC_ENCODER_ERROR_FRAME 4 /* General Format Frame Error */ +#define ADC_ENCODER_ERROR_TOOSMALL 5 /* Format Frame Too Small */ +#define ADC_ENCODER_ERROR_TOOBIG 6 /* Format Frame Too Large */ +#define ADC_ENCODER_ERROR_BADFORMAT 7 /* Bad Data Format */ +#define ADC_ENCODER_ERROR_NCHAN 8 /* Incorrect Number of Channels */ +#define ADC_ENCODER_ERROR_RATE 9 /* Incorrect Sampling Rate */ +#define ADC_ENCODER_ERROR_BITRATE 10 /* Unable to Meet Target Bitrate */ +#define ADC_ENCODER_ERROR_PARMS 11 /* Inconsistent Set of Parameters */ +#define ADC_ENCODER_ERROR_NOTREADY 12 /* Not Ready */ +#define ADC_ENCODER_ERROR_BUSY 13 /* Busy */ + /* >13: Reserved */ + +/* Format Type Codes */ + +#define ADC_FORMAT_TYPE_UNDEF 0x00 +#define ADC_FORMAT_TYPEI 0x01 +#define ADC_FORMAT_TYPEII 0x02 +#define ADC_FORMAT_TYPEIII 0x03 +#define ADC_FORMAT_TYPEIV 0x04 +#define ADC_FORMAT_EXT_TYPEI 0x81 +#define ADC_FORMAT_EXT_TYPEII 0x82 +#define ADC_FORMAT_EXT_TYPEIII 0x83 + +/* Audio Data Format Type I Bit Allocations */ + +#define ADC_FORMAT_TYPEI_PCM (1 << 0) +#define ADC_FORMAT_TYPEI_PCM8 (1 << 1) +#define ADC_FORMAT_TYPEI_IEEEFLOAT (1 << 2) +#define ADC_FORMAT_TYPEI_ALAW (1 << 3) +#define ADC_FORMAT_TYPEI_MULAW (1 << 4) +#define ADC_FORMAT_TYPEI_RAWDATA (1 << 31) + +/* Audio Data Format Type II Bit Allocations */ + +#define ADC_FORMAT_TYPEII_MPEG (1 << 0) +#define ADC_FORMAT_TYPEII_AC3 (1 << 1) +#define ADC_FORMAT_TYPEII_WMA (1 << 2) +#define ADC_FORMAT_TYPEII_DTS (1 << 3) +#define ADC_FORMAT_TYPEII_RAWDATA (1 << 31) + +/* Audio Data Format Type III Bit Allocations */ + + +#define ADC_FORMAT_TYPEIII_IEC61937_AC3 (1 << 0) +#define ADC_FORMAT_TYPEIII_IEC61937_MPEG1_L1 (1 << 1) +#define ADC_FORMAT_TYPEIII_IEC61937_MPEG1_L2_3 (1 << 1) +#define ADC_FORMAT_TYPEIII_IEC61937_MPEG2_NOEXT (1 << 2) +#define ADC_FORMAT_TYPEIII_IEC61937_MPEG2_EXT (1 << 3) +#define ADC_FORMAT_TYPEIII_IEC61937_MPEG2_AAC_ADTS (1 << 4) +#define ADC_FORMAT_TYPEIII_IEC61937_MPEG2_L1_LS (1 << 5) +#define ADC_FORMAT_TYPEIII_IEC61937_MPEG2_L2_3_LS (1 << 6) +#define ADC_FORMAT_TYPEIII_IEC61937_DTS-I (1 << 7) +#define ADC_FORMAT_TYPEIII_IEC61937_DTS-II (1 << 8) +#define ADC_FORMAT_TYPEIII_IEC61937_DTS-III (1 << 9) +#define ADC_FORMAT_TYPEIII_IEC61937_ATRAC (1 << 10) +#define ADC_FORMAT_TYPEIII_IEC61937_ATRAC2_3 (1 << 11) +#define ADC_FORMAT_TYPEIII_WMA (1 << 12) + +/* Audio Data Format Type IV Bit Allocations */ + +#define ADC_FORMAT_TYPEIV_PCM (1 << 0) +#define ADC_FORMAT_TYPEIV_PCM8 (1 << 1) +#define ADC_FORMAT_TYPEIV_IEEE_FLOAT (1 << 2) +#define ADC_FORMAT_TYPEIV_ALAW (1 << 3) +#define ADC_FORMAT_TYPEIV_MULAW (1 << 4) +#define ADC_FORMAT_TYPEIV_MPEG (1 << 5) +#define ADC_FORMAT_TYPEIV_AC3 (1 << 6) +#define ADC_FORMAT_TYPEIV_WMA (1 << 7) +#define ADC_FORMAT_TYPEIV_IEC61937_AC3 (1 << 8) +#define ADC_FORMAT_TYPEIV_IEC61937_MPEG1_L1 (1 << 9) +#define ADC_FORMAT_TYPEIV_IEC61937_MPEG1_L2_3 (1 << 10) +#define ADC_FORMAT_TYPEIV_IEC61937_MPEG2_NOEXT (1 << 10) +#define ADC_FORMAT_TYPEIV_IEC61937_MPEG2_EXT (1 << 11) +#define ADC_FORMAT_TYPEIV_IEC61937_MPEG2_AAC_ADTS (1 << 12) +#define ADC_FORMAT_TYPEIV_IEC61937_MPEG2_L1_LS (1 << 13) +#define ADC_FORMAT_TYPEIV_IEC61937_MPEG2_L2_3_LS (1 << 14) +#define ADC_FORMAT_TYPEIV_IEC61937_DTS-I (1 << 15) +#define ADC_FORMAT_TYPEIV_IEC61937_DTS-II (1 << 16) +#define ADC_FORMAT_TYPEIV_IEC61937_DTS-III (1 << 17) +#define ADC_FORMAT_TYPEIV_IEC61937_ATRAC (1 << 18) +#define ADC_FORMAT_TYPEIV_IEC61937_ATRAC2_3 (1 << 19) +#define ADC_FORMAT_TYPEIV_TYPE_III_WMA (1 << 20) +#define ADC_FORMAT_TYPEIV_IEC60958_PCM (1 << 21) + +/* Side Band Protocol Codes */ + +#define ADC_SIDEBAND_PROTOCOL_UNDEF 0x00 +#define ADC_PRES_TIMESTAMP_PROTOCOL 0x01 + +/* USB Terminal Types */ + +#define ADC_TERMINAL_UNDEF 0x0100 +#define ADC_TERMINAL_STREAMING 0x0101 +#define ADC_TERMINAL_VENDOR 0x01ff + +/* Input Terminal Types */ + +#define ADC_INTERM_UNDEF 0x0200 /* Undefined Type */ +#define ADC_INTERM_MIC 0x0201 /* A generic microhpone */ +#define ADC_INTERM_DESKTOP_MIC 0x0202 /* A desktop microphone */ +#define ADC_INTERM_PERSONAL_MIC 0x0203 /* Head-mounted or clip-on microphone */ +#define ADC_INTERM_OMNI_MIC 0x0204 /* Omni-directional microphone */ +#define ADC_INTERM_MIC_ARRAY 0x0205 /* Microphone array */ +#define ADC_INTERM_PROC_MIC_ARRAY 0x0206 /* Microphone array with signal processor */ + +/* Output Terminal Types */ + +#define ADC_OUTTERM_UNDEF 0x0300 /* Undefined Type */ +#define ADC_OUTTERM_SPEAKER 0x0301 /* Generic speakers */ +#define ADC_OUTTERM_HEADPHONES 0x0302 /* A head-mounted audio output device */ +#define ADC_OUTTERM_HEADDISPLAY 0x0303 /* Head Mounted Display Audio */ +#define ADC_OUTTERM_DESKTOP 0x0304 /* Desktop speaker */ +#define ADC_OUTTERM_ROOM 0x0305 /* Room speaker */ +#define ADC_OUTTERM_COMMS 0x0306 /* Communication speaker */ +#define ADC_OUTTERM_LOFREQ 0x0307 /* Low frequency effects speaker */ + +/* Bi-directional Terminal Types */ + +#define ADC_BIDITERM_UNDEF 0x0400 /* Undefined Type */ +#define ADC_BIDITERM_HANDSET 0x0401 /* Hand-held bi-directional audio device */ +#define ADC_BIDITERM_HEADSET 0x0402 /* Head-mounted bi-directional audio device */ +#define ADC_BIDITERM_SPEAKERPHONE 0x0403 /* Speakerphone, no echo reduction */ +#define ADC_BIDITERM_ECHOSUPPRESS 0x0404 /* Echo-suppressing speakerphone */ +#define ADC_BIDITERM_ECHOCANCEL 0x0405 /* Echo-canceling speakerphone */ + +/* Telephony Terminal Types */ + +#define ADC_TELETERM_UNDEF 0x0500 /* Undefined Type */ +#define ADC_TELETERM_PHONELINE 0x0501 /* Analog telephone line jack, an ISDN line, + * a proprietary PBX interface, or a wireless link */ +#define ADC_TELETERM_TELEPHONE 0x0502 /* Device can be used as a telephone */ +#define ADC_TELETERM_DOWNLINE 0x0503 /* Down Line Phone */ + +/* External Terminal Types */ + +#define ADC_EXTTERM_UNDEF 0x0600 /* Undefined Type */ +#define ADC_EXTTERM_ANALOG 0x0601 /* Generic analog connector */ +#define ADC_EXTTERM_DIGITAL 0x0602 /* Generic digital audio interface */ +#define ADC_EXTTERM_LINE 0x0603 /* Analog connector at standard line levels */ +#define ADC_EXTTERM_LEGACY 0x0604 /* Legacy audio line out connector */ +#define ADC_EXTTERM_SPDIF 0x0605 /* SPDIF interface */ +#define ADC_EXTTERM_1394DA 0x0606 /* 1394 DA stream */ +#define ADC_EXTTERM_1394DV 0x0607 /* 1394 DV stream soundtrack */ +#define ADC_EXTTERM_ADAT 0x0608 /* ADAT Lightpipe */ +#define ADC_EXTTERM_TDIF 0x0609 /* TDIF - Tascam Digital Interface */ +#define ADC_EXTTERM_MADI 0x060a /* MADI - Multi-channel Audio Digital Interface (AES) */ + +/* Embedded Function Terminal Types */ + +#define ADC_EMBEDTERM_UNDEF 0x0700 /* Undefined Type */ +#define ADC_EMBEDTERM_CALIBRATION 0x0701 /* Level Calibration Noise Source */ +#define ADC_EMBEDTERM_EQUALIZATION 0x0702 /* Equalization Noise */ +#define ADC_EMBEDTERM_CD 0x0703 /* CD player */ +#define ADC_EMBEDTERM_DAT 0x0704 /* Digital Audio Tape */ +#define ADC_EMBEDTERM_DCC 0x0705 /* Digital Compact Cassette */ +#define ADC_EMBEDTERM_COMPRESSED 0x0706 /* Compressed Audio Player */ +#define ADC_EMBEDTERM_TAPE 0x0707 /* Analog Audio Tape */ +#define ADC_EMBEDTERM_PHONOGRAPH 0x0708 /* Analog vinyl record player */ +#define ADC_EMBEDTERM_VCR 0x0709 /* Audio track of VCR */ +#define ADC_EMBEDTERM_VIDDISC 0x070a /* Audio track of VideoDisc player */ +#define ADC_EMBEDTERM_DVD 0x070b /* Audio track of DVD player */ +#define ADC_EMBEDTERM_TVTUNER 0x070c /* Audio track of TV tuner */ +#define ADC_EMBEDTERM_SATELLITE 0x070d /* Audio track of satellite receiver */ +#define ADC_EMBEDTERM_CABLETUNER 0x070e /* Audio track of cable tuner */ +#define ADC_EMBEDTERM_DSS 0x070f /* Audio track of DSS receiver */ +#define ADC_EMBEDTERM_RADIO 0x0710 /* AM/FM radio receiver */ +#define ADC_EMBEDTERM_TRANSMITTER 0x0711 /* AM/FM radio transmitter */ +#define ADC_EMBEDTERM_MULTITRACK 0x0712 /* A multi-track recording system */ +#define ADC_EMBEDTERM_SYNTHESIZER 0x0713 /* Synthesizer */ +#define ADC_EMBEDTERM_PIANO 0x0714 /* Piano */ +#define ADC_EMBEDTERM_GUITAR 0x0715 /* Guitar */ +#define ADC_EMBEDTERM_PERCUSSON 0x0716 /* Percussion Instrument */ +#define ADC_EMBEDTERM_INSTRUMENT 0x0717 /* Other Musical Instrument */ + +/******************************************************************************************** * Public Types - ****************************************************************************/ + ********************************************************************************************/ +/* Audio Channel Cluster Descriptor */ + +struct adc_cluster_desc_s +{ + uint8_t cl_nchan; /* 0: Number of logical channels in the cluster */ + uint8_t cl_config[4]; /* 1: The spatial location of the channels */ + uint8_t cl_names; /* 5: Index of name string of first channel */ +}; +#define USB_SIZEOF_ADC_CLUSTER_DESC 6 + +/* Class-specific AC Interface Descriptor */ + +struct adc_ac_ifdesc_s +{ + uint8_t ac_len; /* 0: Descriptor length (9)*/ + uint8_t ac_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t ac_subtype; /* 2: Descriptor sub-type (ADC_AC_HEADER) */ + uint8_t ac_adc[2]; /* 3: ADC spec version in BCD */ + uint8_t ac_category; /* 5: Category of audio function */ + uint8_t ac_totallen[2]; /* 6: Total length */ + uint8_t ac_controls; /* 8: Bits 0-1: Latency control; Bits 2-7 reserved */ +}; +#define USB_SIZEOF_ADC_AC_IFDESC 9 + +/* Clock Source Descriptor */ + +struct adc_clksrc_desc_s +{ + uint8_t cs_len; /* 0: Descriptor length (8)*/ + uint8_t cs_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t cs_subtype; /* 2: Descriptor sub-type (ADC_AC_CLOCK_SOURCE) */ + uint8_t cs_clockid; /* 3: Identifies clock source entity */ + uint8_t cs_attr; /* 4: Bits 0-1: CLKSRC type, D2: Clock synch'ed top SOF */ + uint8_t cs_controls; /* 5: Bits 0-1: Clock freq control, Bits 2-3: Clock valid control */ + uint8_t cs_termid; /* 6: ID of the terminal associated with the clock source */ + uint8_t cs_clksrc; /* 7: Clock source string index */ +}; +#define USB_SIZEOF_ADC_CLKSRC_DESC 8 + +/* Clock Selector Descriptor */ + +struct adc_clksel_desc_s +{ + uint8_t cl_len; /* 0: Descriptor length (7+npins)*/ + uint8_t cl_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t cl_subtype; /* 2: Descriptor sub-type (ADC_AC_CLOCK_SELECTOR) */ + uint8_t cl_clockid; /* 3: Identifies clock source entity */ + uint8_t cl_npins; /* 4: Number of input pins */ + uint8_t cl_variable[1]; /* 5-(5+npins-1): cl_csrcid, ID of clock input to pin n, n=1-npins */ + /* 5+npins: cl_controls: + * Bits 0-1: Clock selector controls, Bits 2-7: Reserved */ + /* 6+npins: cl_clksel + * Clock selector string index */ +}; + +#define cl_csrcid(n) cl_variable[(n)-1] +#define cl_controls(p) cl_variable[(p)->cl_npins] +#define cl_clksel(p) cl_variable[(p)->cl_npins+1] + +#define USB_SIZEOF_ADC_CLKSEL_DESC(npins) (7+(npins)) + +/* Clock Multiplier Descriptor */ + +struct adc_clkmult_desc_s +{ + uint8_t cm_len; /* 0: Descriptor length (7) */ + uint8_t cm_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t cm_subtype; /* 2: Descriptor sub-type (ADC_AC_CLOCK_MULTIPLIER) */ + uint8_t cm_clockid; /* 3: Identifies clock source entity */ + uint8_t cm_csrcid; /* 4: ID of clock input to list pin n */ + uint8_t cm_controls; /* 5: Bits 0-1: Clock numerator control, + * Bits 2-3: Clock denominator control */ + uint8_t cm_clkmult; /* 6: Index of clock multiplier name string */ +}; +#define USB_SIZEOF_ADC_CLKMULT_DESC 7 + +/* Input Terminal Descriptor */ + +struct adc_interm_desc_s +{ + uint8_t it_len; /* 0: Descriptor length (17) */ + uint8_t it_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t it_subtype; /* 2: Descriptor sub-type (ADC_AC_INPUT_TERMINAL) */ + uint8_t it_termid; /* 3: Identifies terminal in audio function */ + uint8_t it_termtype[2]; /* 4: Terminal type */ + uint8_t it_outterm; /* 6: ID of the associated output terminal */ + uint8_t it_csrcid; /* 7: ID of clock entity to which terminal is connected */ + uint8_t it_nchan; /* 8: Number of logical output channels */ + uint8_t it_config[4]; /* 9: The spatial location of the logical channels */ + uint8_t it_names; /* 13: Index of name string of first logical channel */ + uint8_t it_controls{2]; /* 14: Bits 0-1: Copy protect control, + * Bits 2-3: Converter control + * Bits 4-5: Overload control + * Bits 6-7: Cluster control + * Bits 8-9: Underflow control + * Bits 10-11: Overflow control + * Bits 12-15: Reserved */ + uint8_t it_interm; /* 16: Input terminal string index */ +}; +#define USB_SIZEOF_ADC_INTERM_DESC 17 + +/* Output Terminal Descriptor */ + +struct adc_outterm_desc_s +{ + uint8_t ot_len; /* 0: Descriptor length (12) */ + uint8_t ot_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t ot_subtype; /* 2: Descriptor sub-type (ADC_AC_OUTPUT_TERMINAL) */ + uint8_t ot_termid; /* 3: Identifies terminal in audio function */ + uint8_t ot_termtype[2]; /* 4: Terminal type */ + uint8_t ot_interm; /* 6: ID of the associated input terminal */ + uint8_t ot_srcid; /* 7: ID of unit/terminal to which terminal is connnected */ + uint8_t ot_csrcid; /* 8: ID of clock entity to whcih terminal is connected */ + uint8_t ot_controls{2]; /* 9: Bits 0-1: Copy protect control, + * Bits 2-3: Connector control + * Bits 4-5: Overload control + * Bits 6-7: Underflow control + * Bits 8-9: Overflow control + * Bits 10-15: Reserved */ + uint8_t ot_outterm; /* 11: Output terminal string index */ +}; +#define USB_SIZEOF_ADC_OUTTERM_DESC 12 + +/* Mixer Unit Descriptor */ + +struct adc_mixerunit_desc_s +{ + uint8_t mu_len; /* 0: Descriptor length (13+npins+nchan)*/ + uint8_t mu_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t mu_subtype; /* 2: Descriptor sub-type (ADC_AC_MIXER_UNIT) */ + uint8_t mu_unitid; /* 3: Identifies unit in audio function */ + uint8_t mu_npins; /* 4: Number of input pins of this unit */ + uint8_t mu_variable[1]; /* 5-(5+npins-1): mu_srcid[n] + * ID of clock input connected to pin n, n=1-npins */ + /* 5+npins: nchan=Number of logic output channels */ + /* 6+npins: config[4]=spatial location of channels */ + /* 10+npins: name=String index of first channel name */ + /* 11+npins+nchan: controls + * Bits 0-1: Cluster control + * Bits 2-3: Underflow control + * Bits 4-5: Overflow control + * Bits 6-7: Reserved */ + /* 12+npins+nchan: mixer=String index of mixer unit name */ +}; + +#define mu_srcid[n] mu_variable[(n)-1] +#define mu_nchan(p) mu_variable[(p)->mu_npins] +#define mu_controls(p) mu_variable[(p)->mu_npins+1] +#define mu_mixer(p) mu_variable[(p)->mu_npins+2] + +#define USB_SIZEOF_ADC_CLKSEL_DESC(npins,nchan) (13+(npins)+(nchan)) + +/* Selector Unit Descriptor */ + +struct adc_selunit_desc_s +{ + uint8_t su_len; /* 0: Descriptor length (7+npins) */ + uint8_t su_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t su_subtype; /* 2: Descriptor sub-type (ADC_AC_SELECTOR_UNIT) */ + uint8_t su_unitid; /* 3: Identifies unit in audio function */ + uint8_t su_npins; /* 4: Number of input pins of this unit */ + uint8_t su_vairable[1]; /* 5-(5+npins-1): su_srcid[n]=ID of unit/terminal input connected to + * pin n, n=1-npins */ + /* 5+npins: su_controls + * Bits 0-1: Selector control + * Bits 2-7: Reserved */ + /* 6+npins: su_selector=String index of selector unit name */ +}; + +#define su_srcid(n) su_srcid[(n)-1] +#define su_controls(p) su_srcid[(p)->su_npins+1] +#define su_selector(p) su_srcid[(p)->su_npins+2] + +#define USB_SIZEOF_ADC_SELUNIT_DESC(npins,nchan) (7+(npins)) + +/* Feature Unit Descriptor */ + +struct adc_featunit_desc_s +{ + uint8_t fu_len; /* 0: Descriptor length (6+4*(nchan+1)) */ + uint8_t fu_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t fu_subtype; /* 2: Descriptor sub-type (ADC_AC_FEATURE_UNIT) */ + uint8_t fu_unitid; /* 3: Identifies unit in audio function */ + uint8_t fu_srcid; /* 4: ID of unit/terminal to which unit is connected */ + uint8_t fu_variable[1]; /* 5-(5+4*nchan): fu_controls + * Controls for master channel n, n=0,..nchan, + * Bits 0-1: Mute control + * Bits 2-3: Volume control + * Bits 4-5: Bass control + * Bits 6-7: Mid control + * Bits 8-9: Treble control + * Bits 10-11: Graphic equalizer control + * Bits 12-13: Automatic gain control + * Bits 14-15: Delay control + * Bits 16-17: Bass boos control + * Bits 18-19: Loudness control + * Bits 20-21: Input gain control + * Bits 22-23: Input gain pad control + * Bits 24-25: Phase inverter control + * Bits 26-27: Underflow control + * Bits 28-29: Overflow control + * Bits 30-31: Reserved */ + /* 5+4*(nchan+1): feature=Strings index to feature unit name */ +}; + +#define fu_controls(n) fu_variable[4*(n)] +#define fu_feature(nchan) fu_variable[4*((nchan)+1] + +#define USB_SIZEOF_ADC_FEATUNIT_DESC(nchan) (6+4*((nchan)+1))) + +/* Sampling Rate Converter Descriptor */ + +struct adc_srconverter_desc_s +{ + uint8_t sr_len; /* 0: Descriptor length (8) */ + uint8_t sr_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t sr_subtype; /* 2: Descriptor sub-type (ADC_AC_SAMPLERATE_CONVERTER) */ + uint8_t sr_unitid; /* 3: Identifies unit in audio function */ + uint8_t sr_srcid; /* 4: ID of unit/terminal to which unit is connected */ + uint8_t sr_csrcinid; /* 5: ID of clock entity to which unit input is connected */ + uint8_t sr_csrcoutid; /* 6: ID of clock entity to which unit output is connected */ + uint8_t sr_converter; /* 7: String index to the name fo the SRC unit */ +}; +#define USB_SIZEOF_ADC_SRCCONVERTER_DESC (8) + +/* Common Effect Unit Descriptor */ + +struct adc_effectunit_desc_s +{ + uint8_t ef_len; /* 0: Descriptor length (16+4*nchan) */ + uint8_t ef_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t ef_subtype; /* 2: Descriptor sub-type (ADC_AC_EFFECT_UNIT) */ + uint8_t ef_unitid; /* 3: Identifies unit in audio function */ + uint8_t ef_eftype[2]; /* 4: Effect type */ + uint8_t ef_srcid; /* 6: ID of unit/terminal to which unit is connected */ + unit8_t ef_variable[1]; /* 7-(7+4*(nchan+1)): ef_controls[n] + * Controls for channel n, n=0,..,nchan + * Bits 0-31: Effect-specific allocation */ + /* 15+4*nchan: ef_effects=String index to the effect unit name */ +}; + +#define ef_controls(n) ef_controls[4*(n)] +#define ef_effects(nchan) ef_controls[4*(nchan)] + +#define USB_SIZEOF_ADC_EFFECTUNIT_DESC(nchan) (16+4*(nchsn)) + +/* Parametric Equalizer Section Effect Unit Descriptor + * + * ef_eftype = ADC_EFFECT_PARAM_EQ_SECTION + * ef_controls: + * Bits 0-1: Enable control + * Bits 2-3: Center frequency control + * Bits 4-5: Q factor control + * Bits 6-7: Gain control + * Bits 8-9: Underflow control + * Bits 10-11: Overflow control + * Bits 12-31: Reserved + * + * Reverberation Effect Unit Descriptor + * + * ef_eftype = ADC_EFFECT_REVERBERATION + * ef_controls: + * Bits 0-1: Enable control + * Bits 2-3: Type control + * Bits 4-5: Level control + * Bits 6-7: Time control + * Bits 8-9: Delay feedback control + * Bits 10-11: Pre-delay control + * Bits 12-13: Density control + * Bits 13-15: Hi-freq roll-off control + * Bits 16-17: Underflow control + * Bits 18-19: Overflow control + * Bits 20-31: Reserved + * + * Modulation Delay Effect Unit Descriptor + * + * ef_eftype = ADC_EFFECT_MOD_DELAY + * ef_controls: + * Bits 0-1: Enable control + * Bits 2-3: Balance control + * Bits 4-5: Rate control + * Bits 6-7: Depth control + * Bits 8-9: Time control + * Bits 10-11: Feedback level control + * Bits 12-13: Underflow control + * Bits 14-15: Overflow control + * Bits 16-31: Reserved + * + * Dynamic Range Compressor Effect Unit Descriptor + * + * ef_eftype = ADC_EFFECT_DYN_RANGE_COMP + * ef_controls: + * Bits 0-1: Enable control + * Bits 2-3: Compression control + * Bits 4-5: MaxAmpl control + * Bits 6-7: Threshold control + * Bits 8-9: Attack time control + * Bits 10-11: Release time control + * Bits 12-13: Underflow control + * Bits 14-15: Overflow control + * Bits 16-31: Reserved + */ + +/* Common Processing Unit Descriptor */ + +struct adc_procunit_desc_s +{ + uint8_t pu_len; /* 0: Descriptor length (17+npins+x) */ + uint8_t pu_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t pu_subtype; /* 2: Descriptor sub-type (ADC_AC_PROCESSING_UNIT) */ + uint8_t pu_unitid; /* 3: Identifies unit in audio function */ + uint8_t pu_putype[2]; /* 4: Processing unit type */ + uint8_t pu_npins; /* 6: Number of input pins of this unit */ + unit8_t pu_variable[1]; /* 7-(7+(npins11)): pu_srcid[n] + * ID of unit/terminal input is connected to, n=1,..,npins */ + /* 7+npins: pu_nchan: Number of logic output channels */ + /* 8+npins: pu_config: Spatial location of channels */ + /* 12+npins: pu_names: String index to first channel name */ + /* 13+npins: pu_controls + * Bits 0-1: Enable control + * Bits 2-15: Process-specific controls */ + /* 15+npins: pu_processing: String index to name of processing unit */ + /* 16+npins: pu_specific: Beginning of process-specific descriptor */ +}; + +#define pu_srcid(n) pu_variable[n] +#define pu_nchan(p) pu_variable[(Ip)->npins] +#define pu_config(p) pu_variable[(Ip)->npins+1] +#define pu_names(p) pu_variable[(Ip)->npins+5] +#define pu_controls(p) pu_variable[(Ip)->npins+6] +#define pu_processing(p) pu_variable[(Ip)->npins+8] +#define pu_specific(p) &pu_variable[(Ip)->npins+9] + +#define USB_SIZEOF_ADC_PROCUNIT_DESC(npins) (16+(npins)) + +/* Up/Down-mix Processing Unit Descriptor */ + +struct adc_updownunit_desc_s +{ + uint8_t ud_len; /* 0: Descriptor length (18+4*nmodes) */ + uint8_t ud_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t ud_subtype; /* 2: Descriptor sub-type (ADC_AC_PROCESSING_UNIT) */ + uint8_t ud_unitid; /* 3: Identifies unit in audio function */ + uint8_t ud_putype[2]; /* 4: Processing unit type (ADC_PROCESS_UPDOWNMIX) */ + uint8_t ud_npins; /* 6: Number of input pins of this unit (1) */ + unit8_t ud_srcid; /* 7: ID of unit/terminal input is connected to */ + uint8_t ud_nchan; /* 8: Number of logic output channels */ + uint8_t ud_config[4]; /* 9: Spatial location of channels */ + uint8_t ud_names; /* 13: String index to first channel name */ + uint8_t ud_controls[2]; /* 14: controls + * Bits 0-1: Enable control + * Bits 2-3; Mode select control + * Bits 4-5: Cluster control + * Bits 6-7: Underflow control + * Bits 8-9: Overflow control + * Bits 10-15 Reserved */ + uint8_t ud_processing; /* 16: String index to name of processing unit */ + uint8_t ud_nmodes; /* 17: Number of modes supported */ + uint8_t ud_modes[1]; /* 18-(18+4*(nmodes-1)): Active logical channels in mode n */ +}; + +#define USB_SIZEOF_ADC_UPDOWNUNIT_DESC(nmodes) (18+4(nmodes)) + +/* Dolby Prologic Processing Unit Descriptor */ + +struct adc_dolbyunit_desc_s +{ + uint8_t dp_len; /* 0: Descriptor length (18+4*nmodes) */ + uint8_t dp_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t dp_subtype; /* 2: Descriptor sub-type (ADC_AC_PROCESSING_UNIT) */ + uint8_t dp_unitid; /* 3: Identifies unit in audio function */ + uint8_t dp_putype[2]; /* 4: Processing unit type (ADC_PROCESS_DOLBY_PROLOGIC) */ + uint8_t dp_npins; /* 6: Number of input pins of this unit (1) */ + unit8_t dp_srcid; /* 7: ID of unit/terminal input is connected to */ + uint8_t dp_nchan; /* 8: Number of logic output channels */ + uint8_t dp_config[4]; /* 9: Spatial location of channels */ + uint8_t dp_names; /* 13: String index to first channel name */ + uint8_t dp_controls[2]; /* 14: controls + * Bits 0-1: Enable control + * Bits 2-3; Mode select control + * Bits 4-5: Cluster control + * Bits 6-7: Underflow control + * Bits 8-9: Overflow control + * Bits 10-15 Reserved */ + uint8_t dp_processing; /* 16: String index to name of processing unit */ + uint8_t dp_nmodes; /* 17: Number of modes supported */ + uint8_t dp_modes[1]; /* 18-(18+4*(nmodes-1)): Active logical channels in mode n */ +}; + +#define USB_SIZEOF_ADC_DOLBYUNIT_DESC(nmodes) (18+4(nmodes)) + +/* Stereo Extender Processing Unit Descriptor */ + +struct adc_stextunit_desc_s +{ + uint8_t st_len; /* 0: Descriptor length (17) */ + uint8_t st_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t st_subtype; /* 2: Descriptor sub-type (ADC_AC_PROCESSING_UNIT) */ + uint8_t st_unitid; /* 3: Identifies unit in audio function */ + uint8_t st_putype[2]; /* 4: Processing unit type (ADC_PROCESS_STEREO_EXTENDER) */ + uint8_t st_npins; /* 6: Number of input pins of this unit (1) */ + unit8_t st_srcid; /* 7: ID of unit/terminal input is connected to */ + uint8_t st_nchan; /* 8: Number of logic output channels */ + uint8_t st_config[4]; /* 9: Spatial location of channels */ + uint8_t st_names; /* 13: String index to first channel name */ + uint8_t st_controls[2]; /* 14: controls + * Bits 0-1: Enable control + * Bits 2-3; Width control + * Bits 4-5: Cluster control + * Bits 6-7: Underflow control + * Bits 8-9: Overflow control + * Bits 10-15 Reserved */ + uint8_t st_processing; /* 16: String index to name of processing unit */ +}; + +#define USB_SIZEOF_ADC_DOLBYUNIT_DESC(nmodes) (17) + +/* Extension Unit Descriptor */ + +struct adc_extunit_desc_s +{ + uint8_t xu_len; /* 0: Descriptor length (16+p) */ + uint8_t xu_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t xu_subtype; /* 2: Descriptor sub-type (ADC_AC_EXTENSION_UNIT) */ + uint8_t xu_unitid; /* 3: Identifies unit in audio function */ + uint8_t xu_extcode[2]; /* 4: Vendor-specific code identifying the extension unit */ + uint8_t xu_npins; /* 6: Number of input pins of this unit */ + uint8_t xu_variable[1]; /* 7-(7+(npins-1)): xu_srcid: ID of unit/terminal to which + * input pin n is connect, n=1,..,npins */ + /* 8+npins: xu_nchan: Number of logic output channels */ + /* 9+npins: xu_config: Spatial location of logical channels */ + /* 13+npins: xu_names: String index to first channel name */ + /* 14+npins: xu_controls: + * Bits 0-1: Enable control + * Bits 2-3: Cluster control + * Bits 4-5: Underflow control + * Bits 6-7: Overflow control */ + /* 15+np;ins: xu_extunit: String index to unit name */ +}; + +#define xu_srcid(n) xu_variable[n] +#define xu_nchan(p) xu_variable[(p)->xu_npins+1] +#define xu_config(p) xu_variable[(p)->xu_npins+2] +#define xu_names(p) xu_variable[(p)->xu_npins+6] +#define xu_controls(p) xu_variable[(p)->xu_npins+7] +#define xu_extunit(p) xu_variable[(p)->xu_npins+8] + +#define USB_SIZEOF_ADC_EXTUNIT_DESC(npins) (16+(npins)) + +/* Class-Specific AS Interface Descriptor */ + +struct adc_as_ifdesc_s +{ + uint8_t as_len; /* 0: Descriptor length (9)*/ + uint8_t as_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t as_subtype; /* 2: Descriptor sub-type (ADC_AS_GENERAL) */ + uint8_t as_terminal; /* 3: ID of connected terminal */ + uint8_t as_controls; /* 4: controls + * Bits 0-1: Active alternate setting control + * Bits 2-3: Valid alternate setting control + * Bits 4-7: Reserved */ + uint8_t as_format; /* 5: Format type of audio streaming interface */ + uint8_t as_formats[4]; /* 6: Supported audio datat formats */ + uint8_t as_nchan; /* 10: Number of physical channels in audo channel cluster */ + uint8_t as_config[4]; /* 11: Spatial location of channels */ + uint8_t as_names; /* 15: String index to name of first channel */ +}; + +#define USB_SIZEOF_ADC_AS_IFDESC 9 + +/* Encoder Descriptor */ + +struct adc_encoder_desc_s +{ + uint8_t as_len; /* 0: Descriptor length (21) */ + uint8_t as_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t as_subtype; /* 2: Descriptor sub-type (ADC_AS_ENCODER) */ + uint8_t as_encoderid; /* 3: Identifies the encoder within the interface */ + uint8_t as_encoder; /* 4: Identifies the encoder */ + uint8_t as_pad[3]; /* (there is an apparent error in the spec) */ + uint8_t as_controls[4]; /* 8: Controls + * Bits 2-3: Quality Control + * Bits 4-5: VBR Control + * Bits 6-7: Type Control + * Bits 8-9: Underflow Control + * Bits 10-11: Overflow Control + * Bits 12-13: Encoder Error Control + * Bits 14-15: Param1 Control + * Bits 16-17: Param2 Control + * Bits 18-19: Param3 Control + * Bits 20-21: Param4 Control + * Bits 22-23: Param5 Control + * Bits 24-25: Param6 Control + * Bits 26-27: Param7 Control + * Bits 28-20: Param8 Control + * Bits 30-31: Reserved */ + uint8_t as_param[8]; /* 12: String index of purpose of parameter n-1, n=1-8 */ + uint8_t as_encoder: /* 20: String index to the name of the encoder */ +}; + +#define USB_SIZEOF_ADC_ENCODER_DESC 21 + +/* MPEG Decoder Descriptor */ + +struct adc_mpeg_decoder_desc_s +{ + uint8_t md_len; /* 0: Descriptor length (10) */ + uint8_t md_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t md_subtype; /* 2: Descriptor sub-type (ADC_AS_DECODER) */ + uint8_t md_decoderid; /* 3: Identifies the decoder within the interface */ + uint8_t md_decoder; /* 4: Identifies the decoder (ADC_DECODER_MPEG) */ + uint8_t md_capabilities[2]; /* 5: MPEG capabilities + * Bits 0-2: Layer support + * Bit 0: Layer I + * Bit 1: Layer II + * Bit 2: Layer III + * Bit 3: MPEG-1 only. + * Bit 4: MPEG-1 dual-channel + * Bit 5: MPEG-2 second stereo + * Bit 6: MPEG-2 7.1 channel augmentation + * Bit 7: Adaptive multi-channel prediction + * Bits 8-9: MPEG-2 multilingual support + * 00 = Not supported + * 01 = Supported at Fs + * 10 = Reserved + * 11 = Supported at Fs and ½Fs. + * Bit 10: + * Bit 11-15: Reserved */ + uint8_t md_features; /* 7: MPEG features + * Bits 0-3: Reserved + * Bits 4-5 Internal dynamic range control + * 00 = not supported + * 01 = supported but not scalable + * 10 = scalable, common boost and cut scaling value + * 11 = scalable, separate boost and cut scaling value. + * Bits 6-7: Reserved */ + uint8_t md_controls; /* 8: Controls: + * Bits 0-1: Underflow control + * Bits 2-3: Overflow control + * Bits 4-5: Decoder error control + * Bits 6-7: Reserved */ + uint8_t md_decoder; /* 9: String index to the name of the decoder */ +}; + +#define USB_SIZEOF_ADC_MPEG_DECODER_DESC 10 + +/* AC-3 Decoder Descriptor */ + +struct adc_ac3_decoder_desc_s +{ + uint8_t ad_len; /* 0: Descriptor length (12) */ + uint8_t ad_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t ad_subtype; /* 2: Descriptor sub-type (ADC_AS_DECODER) */ + uint8_t ad_decoderid; /* 3: Identifies the decoder within the interface */ + uint8_t ad_decoder; /* 4: Identifies the decoder (ADC_DECODER_AC3) */ + uint8_t ad_id[4]; /* 5: Bitmap, 1=corresponding BSID mode supported */ + uint8_t ad_features; /* 7: MPEG features + * Bit 0: RF mode + * Bit 1: Line mode + * Bit 2: Custom0 mode + * Bit 3: Custom1 mode + * Bits 4-5 Internal dynamic range control + * 00 = not supported + * 01 = supported but not scalable + * 10 = scalable, common boost and cut scaling value + * 11 = scalable, separate boost and cut scaling value. + * Bits 6-7: Reserved */ + uint8_t ad_controls; /* 8: Controls: + * Bits 0-1: Underflow control + * Bits 2-3: Overflow control + * Bits 4-5: Decoder error control + * Bits 6-7: Reserved */ + uint8_t ad_decoder; /* 9: String index to the name of the decoder */ +}; + +#define USB_SIZEOF_ADC_AC3_DECODER_DESC 12 + +/* WMA Decoder Descriptor */ + +struct adc_wma_decoder_desc_s +{ + uint8_t wd_len; /* 0: Descriptor length (9) */ + uint8_t wd_type; /* 1: Descriptor type (ADC_CS_ENDPOINT) */ + uint8_t wd_subtype; /* 2: Descriptor sub-type (ADC_AS_DECODER) */ + uint8_t wd_decoderid; /* 3: Identifies the decoder within the interface */ + uint8_t wd_decoder; /* 4: Identifies the decoder (ADC_DECODER_WMA) */ + uint8_t wd_profile[2]; /* 5: WMA profile + * Bit 0: WMA profile 1, L1 + * Bit 1: WMA profile 2, L2 + * Bit 2: WMA profile 3, L3 + * Bit 3: WMA profile other, L + * Bit 4: WMA speech 1, S1 + * Bit 5: WMA speech 2, S2 + * Bit 6: WMAPro profile 1, M1 + * Bit 7: WMAPro profile 2, M2 + * Bit 8: WMAPro profile 3, M3 + * Bit 9: WMAPro profile other, M + * Bit 10: WMA lossless decoding is supported + * Bits 11-15: Reserved */ + uint8_t wd_controls; /* 7: Controls: + * Bits 0-1: Underflow control + * Bits 2-3: Overflow control + * Bits 4-5: Decoder error control + * Bits 6-7: Reserved */ + uint8_t wd_decoder; /* 9: String index to the name of the decoder */ +}; + +#define USB_SIZEOF_ADC_WMA_DECODER_DESC 9 + +/* DTS Decoder Descriptor */ + +struct adc_dts_decoder_desc_s +{ + uint8_t dd_len; /* 0: Descriptor length (8) */ + uint8_t dd_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t dd_subtype; /* 2: Descriptor sub-type (ADC_AS_DECODER) */ + uint8_t dd_decoderid; /* 3: Identifies the decoder within the interface */ + uint8_t dd_decoder; /* 4: Identifies the decoder (ADC_DECODER_DTS) */ + uint8_t dd_capabilities; /* 5: DTS capabilities + * Bit 0: Core + * Bit 1: Lossless + * Bit 2: LBR + * Bit 3: MultipleStreamMixing + * Bit 4: DualDecode + * Bits 5-7: Reserved */ + uint8_t dd_controls; /* 7: Controls: + * Bits 0-1: Underflow control + * Bits 2-3: Overflow control + * Bits 4-5: Decoder error control + * Bits 6-7: Reserved */ + uint8_t dd_decoder; /* 9: String index to the name of the decoder */ +}; + +#define USB_SIZEOF_ADC_DTS_DECODER_DESC 8 + +/* Class-Specific AS Isochronous Audio Data Endpoint Descriptor */ + +struct adc_audio_epdesc_s +{ + uint8_t ae_len; /* 0: Descriptor length (8) */ + uint8_t ae_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t ae_subtype; /* 2: Descriptor sub-type (ADC_EPTYPE_GENERAL) */ + uint8_t ae_attr; /* 3: Attributes: Bit 7: MaxPacketsOnly */ + uint8_t ae_controls; /* 4 Controls + * Bits 0-1: Pitch control + * Bits 2-3: Data overrun control + * Bits 4-5: Data underrun control + * Bits 6-7: Reserved */ + uint8_t ae_units; /* 5: Lock delay units + * 0=undefined + * 1=milliseconds + * 2=Decoded PCM samples + * 2-255=Reserved */ + uint8_t ae_delay[2]; /* 6: Lock delay */ +}; + +#define USB_SIZEOF_ADC_AUDIO_EPDESC 8 + +/* Layout 1, Control CUR Parameter Block */ + +struct adc_l1_curparm_s +{ + uint8_t l1_cur; /* 0: Setting of the CUR attribute of the addressed control */ +}; + +#define USB_SIZEOF_ADC_LI_CURPARM 1 + +/* Layout 1, Control RANGE Parameter Block */ + +struct adc_l1_subrange_s packed_struct +{ + uint8_t l1_min; /* 0: MIN attribute */ + uint8_t l1_max; /* 1: MAX attribute */ + uint8_t l1_res; /* 2: RES attribute */ +}; + +struct adc_l1_rangeparm_s packed_struct +{ + uint8_t l1_nranges; /* 0: Number of sub-ranges */ + struct adc_l1_subrange_s l1_subrange[1]; +}; + +#define USB_SIZEOF_ADC_LI_RANGEPARM(nranges) (1+3*(nranges)) + +/* Layout 2, Control CUR Parameter Block */ + +struct adc_l2_curparm_s +{ + uint8_t l2_cur[2]; /* 0: Setting of the CUR attribute of the addressed control */ +}; + +#define USB_SIZEOF_ADC_L2_CURPARM 2 + +/* Layout 2, Control RANGE Parameter Block */ + +struct adc_l2_subrange_s +{ + uint8_t l2_min[2]; /* 0: MIN attribute */ + uint8_t l2_max[2]; /* 2: MAX attribute */ + uint8_t l2_res[2]; /* 4: RES attribute */ +}; + +struct adc_l2_rangeparm_s +{ + uint8_t l2_nranges[2]; /* 0: Number of sub-ranges */ + struct adc_l2_subrange_s l2_subrange[1]; +}; + +#define USB_SIZEOF_ADC_L2_RANGEPARM(nranges) (2+6*(nranges)) + +/* Layout 2, Control CUR Parameter Block */ + +struct adc_l3_curparm_s +{ + uint8_t l3_cur[4]; /* 0: Setting of the CUR attribute of the addressed control */ +}; + +#define USB_SIZEOF_ADC_L3_CURPARM 4 + +/* Layout 2, Control RANGE Parameter Block */ + +struct adc_l3_subrange_s +{ + uint8_t l3_min[4]; /* 0: MIN attribute */ + uint8_t l3_max[4]; /* 2: MAX attribute */ + uint8_t l3_res[4]; /* 4: RES attribute */ +}; + +struct adc_l3_rangeparm_s +{ + uint8_t l3_nranges[2]; /* 0: Number of sub-ranges */ + struct adc_l3_subrange_s l3_subrange[1]; +}; + +#define USB_SIZEOF_ADC_L3_RANGEPARM(nranges) (2+12*(nranges)) + +/* Cluster Control CUR Parameter Block */ + +struct adc_clustctrl_curparm_s +{ + uint8_t cc_nchan; /* 0: Number of logical channels */ + uint8_t cc_config[4]; /* 1: Spatial location of channels */ + uint8_t cc_names; /* 5: String index of first channel name */ +}; + +#define USB_SIZEOF_ADC_CLUSTCTRL_CURPARM 6 + +/* Cluster Control CUR Parameter Block */ + +struct adc_connctrl_curparm_s +{ + uint8_t cc_nchan; /* 0: Number of logical channels */ + uint8_t cc_config[4]; /* 1: Spatial location of channels */ + uint8_t cc_names; /* 5: String index of first channel name */ +}; + +#define USB_SIZEOF_ADC_CONNCTRL_CURPARM 6 + +/* Graphic Equalizer Control CUR Parameter Block */ + +struct adc_equalizer_curparm_s +{ + uint8_t eq_bands[4]; /* 0: A set bit indicates that the band is present */ + uint8_t eq_cur[[1]; /* 4: Setting for the band in bands bitset */ +}; + +#define USB_SIZEOF_ADC_CONNCTRL_CURPARM(nbands) (4+(nbands)) + +/* Graphic Equalizer Control RANGE Parameter Block */ + +struct adc_eq_subrange_s packed_struct +{ + uint8_t eq_min; /* 0: MIN attribute */ + uint8_t eq_max; /* 1: MAX attribute */ + uint8_t eq_res; /* 2: RES attribute */ +}; + +struct adc_equalizer_rangeparm_s packed_struct +{ + uint8_t eq_nranges; /* 0: Number of sub-ranges */ + struct adc_eq_subrange_s eq_subrange[1]; +}; + +#define USB_SIZEOF_ADC_EQUALIZER_RANGEPARM(nranges) (1+3*(nranges)) + +/* Valid Alternate Settings Control CUR Parameter Block */ + +struct adc_altsettings_curparm_s +{ + uint8_t as_nsettings; /* 0: Number of alternate settings */ + uint8_t as_settings[1]; /* 1-: Altnating setting n, n-1,..., nsettings */ +}; + +#define USB_SIZEOF_ADC_ALTSETTINGS_CURPARM(nsettings) (1+(nsettings)) + +/* High/Low Scaling Control CUR Parameter Block */ + +struct adc_hilo_curparm_s +{ + uint8_t hl_lo; /* 0: CUR value of the low level scaling control */ + uint8_t hl_hi; /* 0: CUR value of the high level scaling control */ +}; + +/* High/Low Scaling Control RANGE Parameter Block */ + +struct adc_hl_subrange_s packed_struct +{ + uint8_t hl_min; /* 0: MIN attribute */ + uint8_t hl_max; /* 1: MAX attribute */ + uint8_t hl_res; /* 2: RES attribute */ +}; + +struct adc_hilo_rangeparm_s packed_struct +{ + uint8_t hl_nranges[2]; /* 0: Number of sub-ranges */ + struct adc_hl_subrange_s hl_subrange[1]; +}; + +#define USB_SIZEOF_ADC_HILO_RANGEPARM(nranges) (2+3*(nranges)) + +/* Interrupt Data Message Format */ + +struct adc_int_message_s +{ + uint8_t im_info; /* 0: Bitmap + * Bit 0: Vender specific, + * Bit 1: Interface or endpoint + * Bits 2-7: Reserved */ + uint8_t im_attr; /* 1: The attribute that cause the interrupt */ + uint8_t im_value[2]; /* 2: CS is MS byte; CN or MCN in LS byte */ + uint8_t im_index[2]; /* 4: ID or zero in MS bytes; Interface or endpoint is LS byte */ +}; + +#define USB_SIZEOF_ADC_INT_MESSAGE 6 + +/* Type I Format Type Descriptor */ + +struct adc_t1_format_desc_s +{ + uint8_t t1_len; /* 0: Descriptor length (6) */ + uint8_t t1_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t t1_subtype; /* 2: Descriptor sub-type (ADC_AS_FORMAT_TYPE) */ + uint8_t t1_fmttype; /* 3: Identifies the format type (ADC_FORMAT_TYPEI) */ + uint8_t t1_size; /* 4: Number of bytes in one audio subslot, 1,2,3, or 4 */ + uint8_t fl_resolution; /* 5: Number of bits used from audio subslot */ +}; + +#define USB_SIZEOF_ADC_T1_FORMAT_DESC 6 + +/* Type II Format Type Descriptor */ + +struct adc_t2_format_desc_s +{ + uint8_t t2_len; /* 0: Descriptor length (8) */ + uint8_t t2_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t t2_subtype; /* 2: Descriptor sub-type (ADC_AS_FORMAT_TYPE) */ + uint8_t t2_fmttype; /* 3: Identifies the format type (ADC_FORMAT_TYPEII) */ + uint8_t t2_bitrate[2]; /* 4 Maximum number of bits per second */ + uint8_t t2_slotsperframe[2]; /* 6: Number of PCM audio slots in one encoded audio frame*/ +}; + +#define USB_SIZEOF_ADC_T2_FORMAT_DESC 8 + +/* Type III Format Type Descriptor */ + +struct adc_t3_format_desc_s +{ + uint8_t t3_len; /* 0: Descriptor length (6) */ + uint8_t t3_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t t3_subtype; /* 2: Descriptor sub-type (ADC_AS_FORMAT_TYPE) */ + uint8_t t3_fmttype; /* 3: Identifies the format type (ADC_FORMAT_TYPEIII) */ + uint8_t t3_size; /* 4: Number of bytes in one audio subslot (2) */ + uint8_t t3_resolution; /* 5: Number of bits used from audio subslot */ +}; + +#define USB_SIZEOF_ADC_T3_FORMAT_DESC 6 + +/* Type IV Format Type Descriptor */ + +struct adc_t4_format_desc_s +{ + uint8_t t4_len; /* 0: Descriptor length (4) */ + uint8_t t4_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t t4_subtype; /* 2: Descriptor sub-type (ADC_AS_FORMAT_TYPE) */ + uint8_t t4_fmttype; /* 3: Identifies the format type (ADC_FORMAT_TYPEIV) */ +}; + +#define USB_SIZEOF_ADC_T4_FORMAT_DESC 6 + +/* Extended Type I Format Type Descriptor */ + +struct adc_x1_format_desc_s +{ + uint8_t x1_len; /* 0: Descriptor length (8) */ + uint8_t x1_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t x1_subtype; /* 2: Descriptor sub-type (ADC_AS_FORMAT_TYPE) */ + uint8_t x1_fmttype; /* 3: Identifies the format type (ADC_FORMAT_EXT_TYPEI) */ + uint8_t x1_size; /* 4: Number of bytes in one audio subslo, 1,2,3, or 4 */ + uint8_t xl_resolution; /* 5: Number of bits used from audio subslot */ + uint8_t x1_hdrlen; /* 6: Size of packet header (in bytes) */ + uint8_t x1_ctrlsize; /* 7: Size of control channel words (in bytes) */ + uint8_t x1_sbproto; /* 8: Sideband protocol used in packet header and ctrl channel */ +}; + +#define USB_SIZEOF_ADC_X1_FORMAT_DESC 8 + +/* Extended Type II Format Type Descriptor */ + +struct adc_x2_format_desc_s +{ + uint8_t x2_len; /* 0: Descriptor length (10) */ + uint8_t x2_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t x2_subtype; /* 2: Descriptor sub-type (ADC_AS_FORMAT_TYPE) */ + uint8_t x2_fmttype; /* 3: Identifies the format type (ADC_FORMAT_TYPEII) */ + uint8_t x2_bitrate[2]; /* 4 Maximum number of bits per second */ + uint8_t x2_samperframe[2]; /* 6: Number of PCM audio samples in one encoded audio frame*/ + uint8_t x2_hdrlen; /* 8: Size of packet header (in bytes) */ + uint8_t x2_sbproto; /* 9: Sideband protocol used in packet header and ctrl channel */ +}; + +#define USB_SIZEOF_ADC_x2_FORMAT_DESC 10 + +/* Extended Type III Format Type Descriptor */ + +struct adc_x3_format_desc_s +{ + uint8_t x3_len; /* 0: Descriptor length (8) */ + uint8_t x3_type; /* 1: Descriptor type (ADC_CS_INTERFACE) */ + uint8_t x3_subtype; /* 2: Descriptor sub-type (ADC_AS_FORMAT_TYPE) */ + uint8_t x3_fmttype; /* 3: Identifies the format type (ADC_FORMAT_TYPEIII) */ + uint8_t x3_size; /* 4: Number of bytes in one audio subslot (2) */ + uint8_t x3_resolution; /* 5: Number of bits used from audio subslot */ + uint8_t x3_hdrlen; /* 6: Size of packet header (in bytes) */ + uint8_t x3_sbproto; /* 7: Sideband protocol used in packet header and ctrl channel */ +}; + +#define USB_SIZEOF_ADC_X3_FORMAT_DESC 8 + +/* Hi-Res Presentation TimeStamp Layout*/ + +struct adc_hires_timestamp_s +{ + uint8_t hr_flags; /* Bit32=valid */ + uint8_t hr_nsec[8]; /* Offset in nanoseconds from the beginning of the stream */ +}; -/**************************************************************************** +/******************************************************************************************** * Public Function Prototypes - ****************************************************************************/ + ********************************************************************************************/ #undef EXTERN #if defined(__cplusplus) -- cgit v1.2.3