705 lines
23 KiB
C
705 lines
23 KiB
C
/* usbAudio.h - Definitions for USB audio class */
|
|
|
|
/* Copyright 2000 Wind River Systems, Inc. */
|
|
|
|
/*
|
|
Modification history
|
|
--------------------
|
|
01b,20mar00,rcb Re-define UINT16 members of structures as arrays of
|
|
UINT8...UINT16 fields may not be word aligned and that
|
|
causes fits for some processor families.
|
|
01a,12jan00,rcb First.
|
|
*/
|
|
|
|
#ifndef __INCusbAudioh
|
|
#define __INCusbAudioh
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/* defines */
|
|
|
|
/* USB audio subclass codes */
|
|
|
|
#define USB_SUBCLASS_AUDIO_NONE 0x00
|
|
#define USB_SUBCLASS_AUDIO_AUDIOCONTROL 0x01
|
|
#define USB_SUBCLASS_AUDIO_AUDIOSTREAMING 0x02
|
|
#define USB_SUBCLASS_AUDIO_MIDISTREAMING 0x03
|
|
|
|
|
|
/* USB audio protocol codes */
|
|
|
|
#define USB_PROTOCOL_AUDIO_NONE 0x00
|
|
|
|
|
|
/* USB audio class-specific descriptor types */
|
|
|
|
#define USB_DESCR_AUDIO_UNDEFINED 0x20
|
|
#define USB_DESCR_AUDIO_DEVICE 0x21
|
|
#define USB_DESCR_AUDIO_CONFIGURATION 0x22
|
|
#define USB_DESCR_AUDIO_STRING 0x23
|
|
#define USB_DESCR_AUDIO_INTERFACE 0x24
|
|
#define USB_DESCR_AUDIO_ENDPOINT 0x25
|
|
|
|
|
|
/* USB audio class-specific AC interface descriptor subtypes */
|
|
|
|
#define USB_DESCR_AUDIO_AC_UNDEFINED 0x00
|
|
#define USB_DESCR_AUDIO_AC_HEADER 0x01
|
|
#define USB_DESCR_AUDIO_AC_INPUT_TERMINAL 0x02
|
|
#define USB_DESCR_AUDIO_AC_OUTPUT_TERMINAL 0x03
|
|
#define USB_DESCR_AUDIO_AC_MIXER_UNIT 0x04
|
|
#define USB_DESCR_AUDIO_AC_SELECTOR_UNIT 0x05
|
|
#define USB_DESCR_AUDIO_AC_FEATURE_UNIT 0x06
|
|
#define USB_DESCR_AUDIO_AC_PROCESSING_UNIT 0x07
|
|
#define USB_DESCR_AUDIO_AC_EXTENSION_UNIT 0x08
|
|
|
|
|
|
/* USB audio class-specific AS interface descriptor subtypes */
|
|
|
|
#define USB_DESCR_AUDIO_AS_UNDEFINED 0x00
|
|
#define USB_DESCR_AUDIO_AS_GENERAL 0x01
|
|
#define USB_DESCR_AUDIO_AS_FORMAT_TYPE 0x02
|
|
#define USB_DESCR_AUDIO_AS_FORMAT_SPECIFIC 0x03
|
|
|
|
|
|
/* processing unit process types */
|
|
|
|
#define USB_AUDIO_PROCESS_UNDEFINED 0x00
|
|
#define USB_AUDIO_PROCESS_UP_DOWN_MIX 0x01
|
|
#define USB_AUDIO_PROCESS_DOLBY_PROLOGIC 0x02
|
|
#define USB_AUDIO_PROCESS_3D_STEREO_EXT 0x03
|
|
#define USB_AUDIO_PROCESS_REVERB 0x04
|
|
#define USB_AUDIO_PROCESS_CHORUS 0x05
|
|
#define USB_AUDIO_PROCESS_DYN_RANGE_COMP 0x06
|
|
|
|
|
|
/* audio class-specific endpoint descriptor subtypes */
|
|
|
|
#define USB_DESCR_AUDIO_EP_UNDEFINED 0x00
|
|
#define USB_DESCR_AUDIO_EP_GENERAL 0x01
|
|
|
|
|
|
/* USB requests for audio devices */
|
|
|
|
#define USB_REQ_AUDIO_UNDEFINED 0x00
|
|
#define USB_REQ_AUDIO_SET_CUR 0x01
|
|
#define USB_REQ_AUDIO_GET_CUR 0x81
|
|
#define USB_REQ_AUDIO_SET_MIN 0x02
|
|
#define USB_REQ_AUDIO_GET_MIN 0x82
|
|
#define USB_REQ_AUDIO_SET_MAX 0x03
|
|
#define USB_REQ_AUDIO_GET_MAX 0x83
|
|
#define USB_REQ_AUDIO_SET_RES 0x04
|
|
#define USB_REQ_AUDIO_GET_RES 0x84
|
|
#define USB_REQ_AUDIO_SET_MEM 0x05
|
|
#define USB_REQ_AUDIO_GET_MEM 0x86
|
|
#define USB_REQ_AUDIO_GET_STAT 0xff
|
|
|
|
|
|
/* terminal control selectors */
|
|
|
|
#define USB_AUDIO_TCS_UNDEFINED 0x00
|
|
#define USB_AUDIO_TCS_COPY_PROTECT 0x01
|
|
|
|
|
|
/* feature unit control selectors */
|
|
|
|
#define USB_AUDIO_FCS_UNDEFINED 0x00
|
|
#define USB_AUDIO_FCS_MUTE 0x01
|
|
#define USB_AUDIO_FCS_VOLUME 0x02
|
|
#define USB_AUDIO_FCS_BASS 0x03
|
|
#define USB_AUDIO_FCS_MID 0x04
|
|
#define USB_AUDIO_FCS_TREBLE 0x05
|
|
#define USB_AUDIO_FCS_GRAPHIC_EQUALIZER 0x06
|
|
#define USB_AUDIO_FCS_AUTOMATIC_GAIN 0x07
|
|
#define USB_AUDIO_FCS_DELAY 0x08
|
|
#define USB_AUDIO_FCS_BASS_BOOST 0x09
|
|
#define USB_AUDIO_FCS_LOUDNESS 0x0a
|
|
|
|
|
|
/* control bit mask in a feature unit descriptor */
|
|
|
|
#define USB_AUDIO_FCM_MUTE 0x0001
|
|
#define USB_AUDIO_FCM_VOLUME 0x0002
|
|
#define USB_AUDIO_FCM_BASS 0x0004
|
|
#define USB_AUDIO_FCM_MID 0x0008
|
|
#define USB_AUDIO_FCM_TREBLE 0x0010
|
|
#define USB_AUDIO_FCM_GRAPHIC_EQUALIZER 0x0020
|
|
#define USB_AUDIO_FCM_AUTOMATIC_GAIN 0x0040
|
|
#define USB_AUDIO_FCM_DELAY 0x0080
|
|
#define USB_AUDIO_FCM_BASS_BOOST 0x0100
|
|
#define USB_AUDIO_FCM_LOUDNESS 0x0200
|
|
|
|
|
|
/* Width of values for feature unit controls */
|
|
|
|
#define USB_AUDIO_MUTE_ATTR_WIDTH 1
|
|
#define USB_AUDIO_VOLUME_ATTR_WIDTH 2
|
|
#define USB_AUDIO_BASS_ATTR_WIDTH 1
|
|
#define USB_AUDIO_MID_ATTR_WIDTH 1
|
|
#define USB_AUDIO_TREBLE_ATTR_WIDTH 1
|
|
|
|
|
|
/* up/down mix processing unit selectors */
|
|
|
|
#define USB_AUDIO_UDM_UNDEFINED 0x00
|
|
#define USB_AUDIO_UDM_ENABLE 0x01
|
|
#define USB_AUDIO_UDM_MODE_SELECT 0x02
|
|
|
|
|
|
/* dolby prologic processing unit control sectors */
|
|
|
|
#define USB_AUDIO_DPL_UNDEFINED 0x00
|
|
#define USB_AUDIO_DPL_ENABLE 0x01
|
|
#define USB_AUDIO_DPL_MODE_SELECT 0x02
|
|
|
|
|
|
/* 3d stereo extender processing unit control selectors */
|
|
|
|
#define USB_AUDIO_3D_UNDEFINED 0x00
|
|
#define USB_AUDIO_3D_ENABLE 0x01
|
|
#define USB_AUDIO_3D_SPACIOUSNESS 0x03
|
|
|
|
|
|
/* reverberation processing unit control selectors */
|
|
|
|
#define USB_AUDIO_RCS_UNDEFINED 0x00
|
|
#define USB_AUDIO_RCS_ENABLE 0x01
|
|
#define USB_AUDIO_RCS_REVERB_LEVEL 0x02
|
|
#define USB_AUDIO_RCS_REVERB_TIME 0x03
|
|
#define USB_AUDIO_RCS_REVERB_FEEDBACK 0x04
|
|
|
|
|
|
/* chorus processing unit control selectors */
|
|
|
|
#define USB_AUDIO_CH_UNDEFINED 0x00
|
|
#define USB_AUDIO_CH_ENABLE 0x01
|
|
#define USB_AUDIO_CH_CHORUS_LEVEL 0x02
|
|
#define USB_AUDIO_CH_CHORUS_RATE 0x03
|
|
#define USB_AUDIO_CH_CHORUS_DEPTH 0x04
|
|
|
|
|
|
/* dynamic range compressor processing unit control selectors */
|
|
|
|
#define USB_AUDIO_DRC_UNDEFINED 0x00
|
|
#define USB_AUDIO_DRC_ENABLE 0x01
|
|
#define USB_AUDIO_DRC_COMPRESSION_RATE 0x02
|
|
#define USB_AUDIO_DRC_MAXAMPL 0x03
|
|
#define USB_AUDIO_DRC_THRESHOLD 0x04
|
|
#define USB_AUDIO_DRC_ATTACK_TIME 0x05
|
|
#define USB_AUDIO_DRC_RELEASE_TIME 0x06
|
|
|
|
|
|
/* extension unit control selectors */
|
|
|
|
#define USB_AUDIO_ECS_UNDEFINED 0x00
|
|
#define USB_AUDIO_ECS_ENABLE 0x01
|
|
|
|
|
|
/* endpoint control selectors */
|
|
|
|
#define USB_AUDIO_EPS_UNDEFINED 0x00
|
|
#define USB_AUDIO_EPS_SAMPLING_FREQ 0x01
|
|
#define USB_AUDIO_EPS_PITCH 0x02
|
|
|
|
|
|
/* spatial locations in an audio cluster */
|
|
|
|
#define USB_AUDIO_LOC_LEFT_FRONT 0x0001
|
|
#define USB_AUDIO_LOC_RIGHT_FRONT 0x0002
|
|
#define USB_AUDIO_LOC_CENTER_FRONT 0x0004
|
|
#define USB_AUDIO_LOC_LOW_FREQ_ENHANCE 0x0008
|
|
#define USB_AUDIO_LOC_LEFT_SURROUND 0x0010
|
|
#define USB_AUDIO_LOC_RIGHT_SURROUND 0x0020
|
|
#define USB_AUDIO_LOC_LEFT_OF_CENTER 0x0040
|
|
#define USB_AUDIO_LOC_RIGHT_OF_CENTER 0x0080
|
|
#define USB_AUDIO_LOC_SURROUND 0x0100
|
|
#define USB_AUDIO_LOC_SIDE_LEFT 0x0200
|
|
#define USB_AUDIO_LOC_SIDE_RIGHT 0x0400
|
|
#define USB_AUDIO_LOC_TOP 0x0800
|
|
|
|
|
|
/* terminal types */
|
|
|
|
#define USB_AUDIO_TERM_UNDEFINED 0x0100
|
|
#define USB_AUDIO_TERM_STREAMING 0x0101
|
|
#define USB_AUDIO_TERM_VENDOR_SPECIFIC 0x01ff
|
|
|
|
|
|
/* input terminal types */
|
|
|
|
#define USB_AUDIO_INTERM_UNDEFINED 0x0200
|
|
#define USB_AUDIO_INTERM_MIC 0x0201
|
|
#define USB_AUDIO_INTERM_DESKTOP_MIC 0x0202
|
|
#define USB_AUDIO_INTERM_PERSONAL_MIC 0x0203
|
|
#define USB_AUDIO_INTERM_OMNI_DIR_MIC 0x0204
|
|
#define USB_AUDIO_INTERM_MIC_ARRAY 0x0205
|
|
#define USB_AUDIO_INTERM_PROC_MIC_ARRAY 0x0206
|
|
|
|
|
|
/* output terminal types */
|
|
|
|
#define USB_AUDIO_OUTTERM_UNDEFINED 0x0300
|
|
#define USB_AUDIO_OUTTERM_SPEAKER 0x0301
|
|
#define USB_AUDIO_OUTTERM_HEADPHONES 0x0302
|
|
#define USB_AUDIO_OUTTERM_HEAD_MOUNT 0x0303
|
|
#define USB_AUDIO_OUTTERM_DESKTOP_SPKR 0x0304
|
|
#define USB_AUDIO_OUTTERM_ROOM_SPKR 0x0305
|
|
#define USB_AUDIO_OUTTERM_COMM_SPKR 0x0306
|
|
#define USB_AUDIO_OUTTERM_LOW_FREQ_SPKR 0x0307
|
|
|
|
|
|
/* bi-directional terminal types */
|
|
|
|
#define USB_AUDIO_BITERM_UNDEFINED 0x0400
|
|
#define USB_AUDIO_BITERM_HEADSET 0x0401
|
|
#define USB_AUDIO_BITERM_HEADSET_ALT 0x0402
|
|
#define USB_AUDIO_BITERM_SPKRPHONE 0x0403
|
|
#define USB_AUDIO_BITERM_SPKRPHONE_ECHO_SUP 0x0404
|
|
#define USB_AUDIO_BITERM_SPKRPHONE_ECHO_CAN 0x0405
|
|
|
|
|
|
/* telephony terminal types */
|
|
|
|
#define USB_AUDIO_TELTERM_UNDEFINED 0x0500
|
|
#define USB_AUDIO_TELTERM_PHONE_LINE 0x0501
|
|
#define USB_AUDIO_TELTERM_TELEPHONE 0x0502
|
|
#define USB_AUDIO_TELTERM_DOWN_LINE_PHONE 0x0503
|
|
|
|
|
|
/* external terminal types */
|
|
|
|
#define USB_AUDIO_EXTTERM_UNDEFINED 0x0600
|
|
#define USB_AUDIO_EXTTERM_ANALOG 0x0601
|
|
#define USB_AUDIO_EXTTERM_DIGITAL 0x0602
|
|
#define USB_AUDIO_EXTTERM_LINE 0x0603
|
|
#define USB_AUDIO_EXTTERM_LEGACY 0x0604
|
|
#define USB_AUDIO_EXTTERM_SPDIF 0x0605
|
|
#define USB_AUDIO_EXTTERM_1394_DA 0x0606
|
|
#define USB_AUDIO_EXTTERM_1394_DV_SOUND 0x0607
|
|
|
|
|
|
/* embedded function terminal types */
|
|
|
|
#define USB_AUDIO_EMBTERM_UNDEFINED 0x0700
|
|
#define USB_AUDIO_EMBTERM_LEVEL_CAL_NOISE 0x0701
|
|
#define USB_AUDIO_EMBTERM_EQUAL_NOISE 0x0702
|
|
#define USB_AUDIO_EMBTERM_CD_PLAYER 0x0703
|
|
#define USB_AUDIO_EMBTERM_DAT 0x0704
|
|
#define USB_AUDIO_EMBTERM_DCC 0x0705
|
|
#define USB_AUDIO_EMBTERM_MINIDISK 0x0706
|
|
#define USB_AUDIO_EMBTERM_ANALOG_TAPE 0x0707
|
|
#define USB_AUDIO_EMBTERM_PHONOGRAPH 0x0708
|
|
#define USB_AUDIO_EMBTERM_VCR_AUDIO 0x0709
|
|
#define USB_AUDIO_EMBTERM_VIDEO_DISC 0x070a
|
|
#define USB_AUDIO_EMBTERM_DVD_AUDIO 0x070b
|
|
#define USB_AUDIO_EMBTERM_TV_TUNER 0x070c
|
|
#define USB_AUDIO_EMBTERM_SAT_RECEIVER 0x070d
|
|
#define USB_AUDIO_EMBTERM_CABLE_TUNER 0x070e
|
|
#define USB_AUDIO_EMBTERM_DSS 0x070f
|
|
#define USB_AUDIO_EMBTERM_RADIO_RECEIVER 0x0710
|
|
#define USB_AUDIO_EMBTERM_RADIO_TRANSMITTER 0x0711
|
|
#define USB_AUDIO_EMBTERM_MULTI_TRACK_REC 0x0712
|
|
#define USB_AUDIO_EMBTERM_SYNTHESIZER 0x0713
|
|
|
|
|
|
/* audio data format type I codes */
|
|
|
|
#define USB_AUDIO_TYPE1_UNDEFINED 0x0000
|
|
#define USB_AUDIO_TYPE1_PCM 0x0001
|
|
#define USB_AUDIO_TYPE1_PCM8 0x0002
|
|
#define USB_AUDIO_TYPE1_IEEE_FLOAT 0x0003
|
|
#define USB_AUDIO_TYPE1_ALAW 0x0004
|
|
#define USB_AUDIO_TYPE1_MULAW 0x0005
|
|
|
|
|
|
/* audio data format type II codes */
|
|
|
|
#define USB_AUDIO_TYPE2_UNDEFINED 0x1000
|
|
#define USB_AUDIO_TYPE2_MPEG 0x1001
|
|
#define USB_AUDIO_TYPE2_AC3 0x1002
|
|
|
|
|
|
/* audio data format type III codes */
|
|
|
|
#define USB_AUDIO_TYPE3_UNDEFINED 0x2000
|
|
#define USB_AUDIO_TYPE3_1937_AC3 0x2001
|
|
#define USB_AUDIO_TYPE3_1937_MPEG1_L1 0x2002
|
|
#define USB_AUDIO_TYPE3_1937_MPEG1_L2_3 0x2003
|
|
#define USB_AUDIO_TYPE3_1937_MPEG2_NOEXT 0x2003
|
|
#define USB_AUDIO_TYPE3_1937_MPEG2_EXT 0x2004
|
|
#define USB_AUDIO_TYPE3_1937_MPEG2_L1_LS 0x2005
|
|
#define USB_AUDIO_TYPE3_1937_MPEG2_L2_3_LS 0x2006
|
|
|
|
|
|
/* format type codes */
|
|
|
|
#define USB_AUDIO_FORMAT_UNDEFINED 0x00
|
|
#define USB_AUDIO_FORMAT_TYPE1 0x01
|
|
#define USB_AUDIO_FORMAT_TYPE2 0x02
|
|
#define USB_AUDIO_FORMAT_TYPE3 0x03
|
|
|
|
|
|
/* typedefs */
|
|
|
|
/* status word format */
|
|
|
|
typedef struct usb_audio_status_word
|
|
{
|
|
UINT8 statusType;
|
|
UINT8 originatorId;
|
|
} USB_AUDIO_STATUS_WORD, *pUSB_AUDIO_STATUS_WORD;
|
|
|
|
|
|
/* USB_AUDIO_STATUS_WORD.statusType */
|
|
|
|
#define USB_AUDIO_ST_AUDIO_CONTROL 0x00
|
|
#define USB_AUDIO_ST_AUDIO_STREAMING_IF 0x01
|
|
#define USB_AUDIO_ST_AUDIO_STREAMING_EP 0x02
|
|
#define USB_AUDIO_ST_MEMORY_CHANGED 0x40
|
|
#define USB_AUDIO_ST_INT_PENDING 0x80
|
|
|
|
|
|
/* common audio descriptor header */
|
|
|
|
typedef struct usb_audio_descr_header
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
} USB_AUDIO_DESCR_HEADER, *pUSB_AUDIO_DESCR_HEADER;
|
|
|
|
|
|
/* standard AC (AudioControl) interface descriptor.
|
|
*
|
|
* NOTE: This structure is identical to the standard USB interface descriptor,
|
|
* except that interfaceClass is defined as the Audio interface class,
|
|
* interfaceSubClass is defined as the audio interface subclass, and
|
|
* interfaceProtocol is always 0.
|
|
*/
|
|
|
|
|
|
/* class-specific AC interface descriptor */
|
|
|
|
typedef struct usb_audio_ac_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 bcdAdc [2]; /* release level in BCD */
|
|
UINT8 totalLength [2]; /* combined length of all descr */
|
|
UINT8 inCollection; /* number of streaming interfaces */
|
|
UINT8 interfaceNbr [1]; /* variable number of interface numbers */
|
|
} USB_AUDIO_AC_DESCR, *pUSB_AUDIO_AC_DESCR;
|
|
|
|
|
|
/* header common to all AudioControl unit/terminal descriptors */
|
|
|
|
typedef struct usb_audio_ac_common
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 unitId; /* unit/terminal ID */
|
|
} USB_AUDIO_AC_COMMON, *pUSB_AUDIO_AC_COMMON;
|
|
|
|
|
|
/* input terminal descriptor */
|
|
|
|
typedef struct usb_audio_input_term_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 terminalId; /* ID of this terminal */
|
|
UINT8 terminalType [2]; /* type of terminal */
|
|
UINT8 assocTerminal; /* ID of associated output terminal */
|
|
UINT8 channels; /* count of channels */
|
|
UINT8 channelConfig [2]; /* see USB_AUDIO_LOC_xxxx */
|
|
UINT8 channelNamesIndex; /* index of first string descr */
|
|
UINT8 terminalNameIndex; /* index of string descr for this term */
|
|
} USB_AUDIO_INPUT_TERM_DESCR, *pUSB_AUDIO_INPUT_TERM_DESCR;
|
|
|
|
|
|
/* output terminal descriptor */
|
|
|
|
typedef struct usb_audio_output_term_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 terminalId; /* ID of this terminal */
|
|
UINT8 terminalType [2]; /* type of terminal */
|
|
UINT8 assocTerminal; /* ID of associate input terminal */
|
|
UINT8 sourceId; /* ID of connected unit/terminal */
|
|
UINT8 terminalNameIndex; /* index of string desdr for this term */
|
|
} USB_AUDIO_OUTPUT_TERM_DESCR, *pUSB_AUDIO_OUTPUT_TERM_DESCR;
|
|
|
|
|
|
/* mixer unit descriptor */
|
|
|
|
typedef struct usb_audio_mixer_unit_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 unitId; /* ID of this unit */
|
|
UINT8 nbrInPins; /* number of input pins */
|
|
UINT8 sourceId [1]; /* array of sources */
|
|
/* followed by a cluster descr */
|
|
/* followed by a controls byte */
|
|
/* followed by iMixer */
|
|
} USB_AUDIO_MIXER_UNIT_DESCR, *pUSB_AUDIO_MIXER_UNIT_DESCR;
|
|
|
|
|
|
/* selector unit descriptor */
|
|
|
|
typedef struct usb_audio_selector_unit_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 unitId; /* ID of this unit */
|
|
UINT8 nbrInPins; /* number of input pins */
|
|
UINT8 sourceId [1]; /* array of sources */
|
|
/* followed by iMixer */
|
|
} USB_AUDIO_SELECTOR_UNIT_DESCR, *pUSB_AUDIO_SELECTOR_UNIT_DESCR;
|
|
|
|
|
|
/* feature unit descriptor */
|
|
|
|
typedef struct usb_audio_feature_unit_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 unitId; /* unique ID of this unit */
|
|
UINT8 sourceId; /* ID of source unit/terminal */
|
|
UINT8 controlSize; /* size of entries in controls array */
|
|
UINT8 controls [1]; /* variable length, 1 + no. of channels */
|
|
/* iFeature byte follows controls array */
|
|
} USB_AUDIO_FEATURE_UNIT_DESCR, *pUSB_AUDIO_FEATURE_UNIT_DESCR;
|
|
|
|
|
|
/* processing unit descriptor (common part) */
|
|
|
|
typedef struct usb_audio_process_unit_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 unitId; /* unique ID of this unit */
|
|
UINT8 processType [2]; /* type of process performed by unit */
|
|
UINT8 nbrInPins; /* number of input pins */
|
|
UINT8 sourceId [1]; /* array of sources */
|
|
/* ... */
|
|
} USB_AUDIO_PROCESS_UNIT_DESCR, *pUSB_AUDIO_PROCESS_UNIT_DESCR;
|
|
|
|
|
|
/* extension unit descriptor */
|
|
|
|
typedef struct usb_audio_ext_unit_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 unitId; /* unique ID of this unit */
|
|
UINT8 extensionCode [2]; /* type of extension */
|
|
UINT8 nbrInPins; /* number of input pins */
|
|
UINT8 sourceId [1]; /* array of sources */
|
|
/* ... */
|
|
} USB_AUDIO_EXT_UNIT_DESCR, *pUSB_AUDIO_EXT_UNIT_DESCR;
|
|
|
|
|
|
/* standard AC interrupt endpoint descriptor */
|
|
|
|
typedef struct usb_audio_int_ep_descr
|
|
{
|
|
UINT8 length; /* bLength */
|
|
UINT8 descriptorType; /* bDescriptorType */
|
|
UINT8 endpointAddress; /* bEndpointAddress */
|
|
UINT8 attributes; /* bmAttributes */
|
|
UINT8 maxPacketSize [2]; /* wMaxPacketSize */
|
|
UINT8 interval; /* bInterval */
|
|
UINT8 refresh; /* reset to 0 */
|
|
UINT8 synchAddress; /* reset to 0 */
|
|
} USB_AUDIO_INT_EP_DESCR, *pUSB_AUDIO_INT_EP_DESCR;
|
|
|
|
|
|
/* standard AS (AudioStreaming) interface descriptor
|
|
*
|
|
* NOTE: This structure is identical to the standard USB interface descriptor,
|
|
* except that interfaceClass is defined as the Audio interface class,
|
|
* interfaceSubClass is defined as the audio interface subclass, and
|
|
* interfaceProtocol is always 0.
|
|
*/
|
|
|
|
|
|
/* class-specific AS interface descriptor */
|
|
|
|
typedef struct usb_audio_as_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 terminalLink; /* ID of connected terminal */
|
|
UINT8 delay; /* delay introduced by data path */
|
|
UINT8 formatTag [2]; /* audio data format */
|
|
} USB_AUDIO_AS_DESCR, *pUSB_AUDIO_AS_DESCR;
|
|
|
|
|
|
/* standard AS isochronous audio data endpoint descriptor */
|
|
|
|
typedef struct usb_audio_std_isoch_ep_descr
|
|
{
|
|
UINT8 length; /* bLength */
|
|
UINT8 descriptorType; /* bDescriptorType */
|
|
UINT8 endpointAddress; /* bEndpointAddress */
|
|
UINT8 attributes; /* bmAttributes */
|
|
UINT8 maxPacketSize [2]; /* wMaxPacketSize */
|
|
UINT8 interval; /* bInterval */
|
|
UINT8 refresh; /* reset to 0 */
|
|
UINT8 synchAddress; /* address of synch endpoint */
|
|
} USB_AUDIO_STD_ISOCH_EP_DESCR, *pUSB_AUDIO_STD_ISOCH_EP_DESCR;
|
|
|
|
|
|
/* class-specific isochronous audio data endpoint descriptor */
|
|
|
|
typedef struct usb_audio_class_isoch_ep_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 attributes; /* bmAttributes */
|
|
UINT8 lockDelayUnits; /* indicates units for lockDelay */
|
|
UINT8 lockDelay; /* internal clock lock time */
|
|
} USB_AUDIO_CLASS_ISOCH_EP_DESCR, *pUSB_AUDIO_CLASS_ISOCH_EP_DESCR;
|
|
|
|
|
|
/* standard AS isoch synch endpoint descriptor */
|
|
|
|
typedef struct usb_audio_isoch_synch_ep_descr
|
|
{
|
|
UINT8 length; /* bLength */
|
|
UINT8 descriptorType; /* bDescriptorType */
|
|
UINT8 endpointAddress; /* bEndpointAddress */
|
|
UINT8 attributes; /* bmAttributes */
|
|
UINT8 maxPacketSize [2]; /* wMaxPacketSize */
|
|
UINT8 interval; /* bInterval */
|
|
UINT8 refresh; /* synch refresh rate (pwr of 2) */
|
|
UINT8 synchAddress; /* reset to 0 */
|
|
} USB_AUDIO_ISOCH_SYNCH_EP_DESCR, *pUSB_AUDIO_ISOCH_SYNCH_EP_DESCR;
|
|
|
|
|
|
/* common sampling frequency information */
|
|
|
|
typedef UINT8 USB_AUDIO_SAM_FREQ [3];
|
|
|
|
typedef struct usb_audio_sample_info
|
|
{
|
|
UINT8 freqType; /* how sampling freq. can be programmed */
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
USB_AUDIO_SAM_FREQ lowerFreq; /* lower bound */
|
|
USB_AUDIO_SAM_FREQ upperFreq; /* upper bound */
|
|
} continous;
|
|
struct
|
|
{
|
|
USB_AUDIO_SAM_FREQ freq [1]; /* discrete sampling frequency */
|
|
} discrete;
|
|
} freq;
|
|
} USB_AUDIO_SAMPLE_INFO, *pUSB_AUDIO_SAMPLE_INFO;
|
|
|
|
|
|
/* type I format type descriptor */
|
|
|
|
typedef struct usb_audio_type_1_type_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 formatType; /* identifies format type */
|
|
UINT8 nbrChannels; /* number of channels */
|
|
UINT8 subFrameSize; /* number of bytes for one audio subframe */
|
|
UINT8 bitResolution; /* number of bits used per audio subframe */
|
|
USB_AUDIO_SAMPLE_INFO sample; /* sampling frequency info */
|
|
} USB_AUDIO_TYPE_1_TYPE_DESCR, *pUSB_AUDIO_TYPE_1_TYPE_DESCR;
|
|
|
|
|
|
/* type II format type descriptor */
|
|
|
|
typedef struct usb_audio_type_2_type_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 formatType; /* identifies format type */
|
|
UINT8 maxBitRate [2]; /* max bits per second sup. by interface */
|
|
UINT8 samplesPerFrame [2]; /* nbr PCM audio samples in audio frame */
|
|
USB_AUDIO_SAMPLE_INFO sample; /* sampling frequency info */
|
|
} USB_AUDIO_TYPE_2_TYPE_DESCR, *pUSB_AUDIO_TYPE_2_TYPE_DESCR;
|
|
|
|
|
|
/* type III format type descriptor */
|
|
|
|
typedef struct usb_audio_type_3_type_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 formatType; /* identifies format type */
|
|
UINT8 nbrChannels; /* number of channels */
|
|
UINT8 subFrameSize; /* number of bytes for one audio subframe */
|
|
UINT8 bitResolution; /* number of bits used per audio subframe */
|
|
USB_AUDIO_SAMPLE_INFO sample; /* sampling frequency info */
|
|
} USB_AUDIO_TYPE_3_TYPE_DESCR, *pUSB_AUDIO_TYPE_3_TYPE_DESCR;
|
|
|
|
|
|
/* composite type descriptor */
|
|
|
|
typedef struct usb_audio_type_descr
|
|
{
|
|
UINT8 length; /* length of descriptor in bytes */
|
|
UINT8 descriptorType; /* descriptor type */
|
|
UINT8 descriptorSubType; /* descriptor sub type */
|
|
UINT8 formatType; /* identifies format type */
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
UINT8 nbrChannels; /* number of channels */
|
|
UINT8 subFrameSize; /* number of bytes for one audio subframe */
|
|
UINT8 bitResolution; /* number of bits used per audio subframe */
|
|
USB_AUDIO_SAMPLE_INFO sample; /* sampling frequency info */
|
|
} type1;
|
|
struct
|
|
{
|
|
UINT8 maxBitRate [2]; /* max bits per second sup. by interface */
|
|
UINT8 samplesPerFrame [2]; /* nbr PCM audio samples in audio frame */
|
|
USB_AUDIO_SAMPLE_INFO sample; /* sampling frequency info */
|
|
} type2;
|
|
struct
|
|
{
|
|
UINT8 nbrChannels; /* number of channels */
|
|
UINT8 subFrameSize; /* number of bytes for one audio subframe */
|
|
UINT8 bitResolution; /* number of bits used per audio subframe */
|
|
USB_AUDIO_SAMPLE_INFO sample; /* sampling frequency info */
|
|
} type3;
|
|
} ts;
|
|
} USB_AUDIO_TYPE_DESCR, *pUSB_AUDIO_TYPE_DESCR;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __INCusbAudioh */
|
|
|
|
|
|
/* End of file. */
|
|
|