usbAudio.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:23k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usbAudio.h - Definitions for USB audio class */
  2. /* Copyright 2000 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01b,20mar00,rcb  Re-define UINT16 members of structures as arrays of
  7.  UINT8...UINT16 fields may not be word aligned and that 
  8.  causes fits for some processor families.
  9. 01a,12jan00,rcb  First.
  10. */
  11. #ifndef __INCusbAudioh
  12. #define __INCusbAudioh
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16. /* defines */
  17. /* USB audio subclass codes */
  18. #define USB_SUBCLASS_AUDIO_NONE      0x00
  19. #define USB_SUBCLASS_AUDIO_AUDIOCONTROL     0x01
  20. #define USB_SUBCLASS_AUDIO_AUDIOSTREAMING   0x02
  21. #define USB_SUBCLASS_AUDIO_MIDISTREAMING    0x03
  22. /* USB audio protocol codes */
  23. #define USB_PROTOCOL_AUDIO_NONE      0x00
  24. /* USB audio class-specific descriptor types */
  25. #define USB_DESCR_AUDIO_UNDEFINED     0x20
  26. #define USB_DESCR_AUDIO_DEVICE     0x21
  27. #define USB_DESCR_AUDIO_CONFIGURATION     0x22
  28. #define USB_DESCR_AUDIO_STRING     0x23
  29. #define USB_DESCR_AUDIO_INTERFACE     0x24
  30. #define USB_DESCR_AUDIO_ENDPOINT     0x25
  31. /* USB audio class-specific AC interface descriptor subtypes */
  32. #define USB_DESCR_AUDIO_AC_UNDEFINED     0x00
  33. #define USB_DESCR_AUDIO_AC_HEADER     0x01
  34. #define USB_DESCR_AUDIO_AC_INPUT_TERMINAL   0x02
  35. #define USB_DESCR_AUDIO_AC_OUTPUT_TERMINAL  0x03
  36. #define USB_DESCR_AUDIO_AC_MIXER_UNIT     0x04
  37. #define USB_DESCR_AUDIO_AC_SELECTOR_UNIT    0x05
  38. #define USB_DESCR_AUDIO_AC_FEATURE_UNIT     0x06
  39. #define USB_DESCR_AUDIO_AC_PROCESSING_UNIT  0x07
  40. #define USB_DESCR_AUDIO_AC_EXTENSION_UNIT   0x08
  41. /* USB audio class-specific AS interface descriptor subtypes */
  42. #define USB_DESCR_AUDIO_AS_UNDEFINED     0x00
  43. #define USB_DESCR_AUDIO_AS_GENERAL     0x01
  44. #define USB_DESCR_AUDIO_AS_FORMAT_TYPE     0x02
  45. #define USB_DESCR_AUDIO_AS_FORMAT_SPECIFIC  0x03
  46. /* processing unit process types */
  47. #define USB_AUDIO_PROCESS_UNDEFINED     0x00
  48. #define USB_AUDIO_PROCESS_UP_DOWN_MIX     0x01
  49. #define USB_AUDIO_PROCESS_DOLBY_PROLOGIC    0x02
  50. #define USB_AUDIO_PROCESS_3D_STEREO_EXT     0x03
  51. #define USB_AUDIO_PROCESS_REVERB     0x04
  52. #define USB_AUDIO_PROCESS_CHORUS     0x05
  53. #define USB_AUDIO_PROCESS_DYN_RANGE_COMP    0x06
  54. /* audio class-specific endpoint descriptor subtypes */
  55. #define USB_DESCR_AUDIO_EP_UNDEFINED     0x00
  56. #define USB_DESCR_AUDIO_EP_GENERAL     0x01
  57. /* USB requests for audio devices */
  58. #define USB_REQ_AUDIO_UNDEFINED      0x00
  59. #define USB_REQ_AUDIO_SET_CUR     0x01
  60. #define USB_REQ_AUDIO_GET_CUR     0x81
  61. #define USB_REQ_AUDIO_SET_MIN     0x02
  62. #define USB_REQ_AUDIO_GET_MIN     0x82
  63. #define USB_REQ_AUDIO_SET_MAX     0x03
  64. #define USB_REQ_AUDIO_GET_MAX     0x83
  65. #define USB_REQ_AUDIO_SET_RES     0x04
  66. #define USB_REQ_AUDIO_GET_RES     0x84
  67. #define USB_REQ_AUDIO_SET_MEM     0x05
  68. #define USB_REQ_AUDIO_GET_MEM     0x86
  69. #define USB_REQ_AUDIO_GET_STAT     0xff
  70. /* terminal control selectors */
  71. #define USB_AUDIO_TCS_UNDEFINED      0x00
  72. #define USB_AUDIO_TCS_COPY_PROTECT     0x01
  73. /* feature unit control selectors */
  74. #define USB_AUDIO_FCS_UNDEFINED      0x00
  75. #define USB_AUDIO_FCS_MUTE     0x01
  76. #define USB_AUDIO_FCS_VOLUME     0x02
  77. #define USB_AUDIO_FCS_BASS     0x03
  78. #define USB_AUDIO_FCS_MID     0x04
  79. #define USB_AUDIO_FCS_TREBLE     0x05
  80. #define USB_AUDIO_FCS_GRAPHIC_EQUALIZER     0x06
  81. #define USB_AUDIO_FCS_AUTOMATIC_GAIN     0x07
  82. #define USB_AUDIO_FCS_DELAY     0x08
  83. #define USB_AUDIO_FCS_BASS_BOOST     0x09
  84. #define USB_AUDIO_FCS_LOUDNESS     0x0a
  85. /* control bit mask in a feature unit descriptor */
  86. #define USB_AUDIO_FCM_MUTE     0x0001
  87. #define USB_AUDIO_FCM_VOLUME     0x0002
  88. #define USB_AUDIO_FCM_BASS     0x0004
  89. #define USB_AUDIO_FCM_MID     0x0008
  90. #define USB_AUDIO_FCM_TREBLE     0x0010
  91. #define USB_AUDIO_FCM_GRAPHIC_EQUALIZER     0x0020
  92. #define USB_AUDIO_FCM_AUTOMATIC_GAIN     0x0040
  93. #define USB_AUDIO_FCM_DELAY     0x0080
  94. #define USB_AUDIO_FCM_BASS_BOOST     0x0100
  95. #define USB_AUDIO_FCM_LOUDNESS     0x0200
  96. /* Width of values for feature unit controls */
  97. #define USB_AUDIO_MUTE_ATTR_WIDTH     1
  98. #define USB_AUDIO_VOLUME_ATTR_WIDTH     2
  99. #define USB_AUDIO_BASS_ATTR_WIDTH     1
  100. #define USB_AUDIO_MID_ATTR_WIDTH     1
  101. #define USB_AUDIO_TREBLE_ATTR_WIDTH     1
  102. /* up/down mix processing unit selectors */
  103. #define USB_AUDIO_UDM_UNDEFINED      0x00
  104. #define USB_AUDIO_UDM_ENABLE     0x01
  105. #define USB_AUDIO_UDM_MODE_SELECT     0x02
  106. /* dolby prologic processing unit control sectors */
  107. #define USB_AUDIO_DPL_UNDEFINED      0x00
  108. #define USB_AUDIO_DPL_ENABLE     0x01
  109. #define USB_AUDIO_DPL_MODE_SELECT     0x02
  110. /* 3d stereo extender processing unit control selectors */
  111. #define USB_AUDIO_3D_UNDEFINED     0x00
  112. #define USB_AUDIO_3D_ENABLE     0x01
  113. #define USB_AUDIO_3D_SPACIOUSNESS     0x03
  114. /* reverberation processing unit control selectors */
  115. #define USB_AUDIO_RCS_UNDEFINED      0x00
  116. #define USB_AUDIO_RCS_ENABLE     0x01
  117. #define USB_AUDIO_RCS_REVERB_LEVEL     0x02
  118. #define USB_AUDIO_RCS_REVERB_TIME     0x03
  119. #define USB_AUDIO_RCS_REVERB_FEEDBACK     0x04
  120. /* chorus processing unit control selectors */
  121. #define USB_AUDIO_CH_UNDEFINED     0x00
  122. #define USB_AUDIO_CH_ENABLE     0x01
  123. #define USB_AUDIO_CH_CHORUS_LEVEL     0x02
  124. #define USB_AUDIO_CH_CHORUS_RATE     0x03
  125. #define USB_AUDIO_CH_CHORUS_DEPTH     0x04
  126. /* dynamic range compressor processing unit control selectors */
  127. #define USB_AUDIO_DRC_UNDEFINED      0x00
  128. #define USB_AUDIO_DRC_ENABLE     0x01
  129. #define USB_AUDIO_DRC_COMPRESSION_RATE     0x02
  130. #define USB_AUDIO_DRC_MAXAMPL     0x03
  131. #define USB_AUDIO_DRC_THRESHOLD      0x04
  132. #define USB_AUDIO_DRC_ATTACK_TIME     0x05
  133. #define USB_AUDIO_DRC_RELEASE_TIME     0x06
  134. /* extension unit control selectors */
  135. #define USB_AUDIO_ECS_UNDEFINED      0x00
  136. #define USB_AUDIO_ECS_ENABLE     0x01
  137. /* endpoint control selectors */
  138. #define USB_AUDIO_EPS_UNDEFINED      0x00
  139. #define USB_AUDIO_EPS_SAMPLING_FREQ     0x01
  140. #define USB_AUDIO_EPS_PITCH     0x02
  141. /* spatial locations in an audio cluster */
  142. #define USB_AUDIO_LOC_LEFT_FRONT     0x0001
  143. #define USB_AUDIO_LOC_RIGHT_FRONT     0x0002
  144. #define USB_AUDIO_LOC_CENTER_FRONT     0x0004
  145. #define USB_AUDIO_LOC_LOW_FREQ_ENHANCE     0x0008
  146. #define USB_AUDIO_LOC_LEFT_SURROUND     0x0010
  147. #define USB_AUDIO_LOC_RIGHT_SURROUND     0x0020
  148. #define USB_AUDIO_LOC_LEFT_OF_CENTER     0x0040
  149. #define USB_AUDIO_LOC_RIGHT_OF_CENTER     0x0080
  150. #define USB_AUDIO_LOC_SURROUND     0x0100
  151. #define USB_AUDIO_LOC_SIDE_LEFT      0x0200
  152. #define USB_AUDIO_LOC_SIDE_RIGHT     0x0400
  153. #define USB_AUDIO_LOC_TOP     0x0800
  154. /* terminal types */
  155. #define USB_AUDIO_TERM_UNDEFINED     0x0100
  156. #define USB_AUDIO_TERM_STREAMING     0x0101
  157. #define USB_AUDIO_TERM_VENDOR_SPECIFIC     0x01ff
  158. /* input terminal types */
  159. #define USB_AUDIO_INTERM_UNDEFINED     0x0200
  160. #define USB_AUDIO_INTERM_MIC     0x0201
  161. #define USB_AUDIO_INTERM_DESKTOP_MIC     0x0202
  162. #define USB_AUDIO_INTERM_PERSONAL_MIC     0x0203
  163. #define USB_AUDIO_INTERM_OMNI_DIR_MIC     0x0204
  164. #define USB_AUDIO_INTERM_MIC_ARRAY     0x0205
  165. #define USB_AUDIO_INTERM_PROC_MIC_ARRAY     0x0206
  166. /* output terminal types */
  167. #define USB_AUDIO_OUTTERM_UNDEFINED     0x0300
  168. #define USB_AUDIO_OUTTERM_SPEAKER     0x0301
  169. #define USB_AUDIO_OUTTERM_HEADPHONES     0x0302
  170. #define USB_AUDIO_OUTTERM_HEAD_MOUNT     0x0303
  171. #define USB_AUDIO_OUTTERM_DESKTOP_SPKR     0x0304
  172. #define USB_AUDIO_OUTTERM_ROOM_SPKR     0x0305
  173. #define USB_AUDIO_OUTTERM_COMM_SPKR     0x0306
  174. #define USB_AUDIO_OUTTERM_LOW_FREQ_SPKR     0x0307
  175. /* bi-directional terminal types */
  176. #define USB_AUDIO_BITERM_UNDEFINED     0x0400
  177. #define USB_AUDIO_BITERM_HEADSET     0x0401
  178. #define USB_AUDIO_BITERM_HEADSET_ALT     0x0402
  179. #define USB_AUDIO_BITERM_SPKRPHONE     0x0403
  180. #define USB_AUDIO_BITERM_SPKRPHONE_ECHO_SUP 0x0404
  181. #define USB_AUDIO_BITERM_SPKRPHONE_ECHO_CAN 0x0405
  182. /* telephony terminal types */
  183. #define USB_AUDIO_TELTERM_UNDEFINED     0x0500
  184. #define USB_AUDIO_TELTERM_PHONE_LINE     0x0501
  185. #define USB_AUDIO_TELTERM_TELEPHONE     0x0502
  186. #define USB_AUDIO_TELTERM_DOWN_LINE_PHONE   0x0503
  187. /* external terminal types */
  188. #define USB_AUDIO_EXTTERM_UNDEFINED     0x0600
  189. #define USB_AUDIO_EXTTERM_ANALOG     0x0601
  190. #define USB_AUDIO_EXTTERM_DIGITAL     0x0602
  191. #define USB_AUDIO_EXTTERM_LINE     0x0603
  192. #define USB_AUDIO_EXTTERM_LEGACY     0x0604
  193. #define USB_AUDIO_EXTTERM_SPDIF      0x0605
  194. #define USB_AUDIO_EXTTERM_1394_DA     0x0606
  195. #define USB_AUDIO_EXTTERM_1394_DV_SOUND     0x0607
  196. /* embedded function terminal types */
  197. #define USB_AUDIO_EMBTERM_UNDEFINED     0x0700
  198. #define USB_AUDIO_EMBTERM_LEVEL_CAL_NOISE   0x0701
  199. #define USB_AUDIO_EMBTERM_EQUAL_NOISE     0x0702
  200. #define USB_AUDIO_EMBTERM_CD_PLAYER     0x0703
  201. #define USB_AUDIO_EMBTERM_DAT     0x0704
  202. #define USB_AUDIO_EMBTERM_DCC     0x0705
  203. #define USB_AUDIO_EMBTERM_MINIDISK     0x0706
  204. #define USB_AUDIO_EMBTERM_ANALOG_TAPE     0x0707
  205. #define USB_AUDIO_EMBTERM_PHONOGRAPH     0x0708
  206. #define USB_AUDIO_EMBTERM_VCR_AUDIO     0x0709
  207. #define USB_AUDIO_EMBTERM_VIDEO_DISC     0x070a
  208. #define USB_AUDIO_EMBTERM_DVD_AUDIO     0x070b
  209. #define USB_AUDIO_EMBTERM_TV_TUNER     0x070c
  210. #define USB_AUDIO_EMBTERM_SAT_RECEIVER     0x070d
  211. #define USB_AUDIO_EMBTERM_CABLE_TUNER     0x070e
  212. #define USB_AUDIO_EMBTERM_DSS     0x070f
  213. #define USB_AUDIO_EMBTERM_RADIO_RECEIVER    0x0710
  214. #define USB_AUDIO_EMBTERM_RADIO_TRANSMITTER 0x0711
  215. #define USB_AUDIO_EMBTERM_MULTI_TRACK_REC   0x0712
  216. #define USB_AUDIO_EMBTERM_SYNTHESIZER     0x0713
  217. /* audio data format type I codes */
  218. #define USB_AUDIO_TYPE1_UNDEFINED     0x0000
  219. #define USB_AUDIO_TYPE1_PCM     0x0001
  220. #define USB_AUDIO_TYPE1_PCM8     0x0002
  221. #define USB_AUDIO_TYPE1_IEEE_FLOAT     0x0003
  222. #define USB_AUDIO_TYPE1_ALAW     0x0004
  223. #define USB_AUDIO_TYPE1_MULAW     0x0005
  224. /* audio data format type II codes */
  225. #define USB_AUDIO_TYPE2_UNDEFINED     0x1000
  226. #define USB_AUDIO_TYPE2_MPEG     0x1001
  227. #define USB_AUDIO_TYPE2_AC3     0x1002
  228. /* audio data format type III codes */
  229. #define USB_AUDIO_TYPE3_UNDEFINED     0x2000
  230. #define USB_AUDIO_TYPE3_1937_AC3     0x2001
  231. #define USB_AUDIO_TYPE3_1937_MPEG1_L1     0x2002
  232. #define USB_AUDIO_TYPE3_1937_MPEG1_L2_3     0x2003
  233. #define USB_AUDIO_TYPE3_1937_MPEG2_NOEXT    0x2003
  234. #define USB_AUDIO_TYPE3_1937_MPEG2_EXT     0x2004
  235. #define USB_AUDIO_TYPE3_1937_MPEG2_L1_LS    0x2005
  236. #define USB_AUDIO_TYPE3_1937_MPEG2_L2_3_LS  0x2006
  237. /* format type codes */
  238. #define USB_AUDIO_FORMAT_UNDEFINED     0x00
  239. #define USB_AUDIO_FORMAT_TYPE1     0x01
  240. #define USB_AUDIO_FORMAT_TYPE2     0x02
  241. #define USB_AUDIO_FORMAT_TYPE3     0x03
  242. /* typedefs */
  243. /* status word format */
  244. typedef struct usb_audio_status_word
  245.     {
  246.     UINT8 statusType;
  247.     UINT8 originatorId;
  248.     } USB_AUDIO_STATUS_WORD, *pUSB_AUDIO_STATUS_WORD;
  249. /* USB_AUDIO_STATUS_WORD.statusType */
  250. #define USB_AUDIO_ST_AUDIO_CONTROL     0x00
  251. #define USB_AUDIO_ST_AUDIO_STREAMING_IF     0x01
  252. #define USB_AUDIO_ST_AUDIO_STREAMING_EP     0x02
  253. #define USB_AUDIO_ST_MEMORY_CHANGED     0x40
  254. #define USB_AUDIO_ST_INT_PENDING     0x80
  255. /* common audio descriptor header */
  256. typedef struct usb_audio_descr_header
  257.     {
  258.     UINT8 length;     /* length of descriptor in bytes */
  259.     UINT8 descriptorType;     /* descriptor type */
  260.     UINT8 descriptorSubType;     /* descriptor sub type */
  261.     } USB_AUDIO_DESCR_HEADER, *pUSB_AUDIO_DESCR_HEADER;
  262. /* standard AC (AudioControl) interface descriptor.
  263.  *
  264.  * NOTE: This structure is identical to the standard USB interface descriptor,
  265.  * except that interfaceClass is defined as the Audio interface class, 
  266.  * interfaceSubClass is defined as the audio interface subclass, and
  267.  * interfaceProtocol is always 0.
  268.  */
  269. /* class-specific AC interface descriptor */
  270. typedef struct usb_audio_ac_descr
  271.     {
  272.     UINT8 length;     /* length of descriptor in bytes */
  273.     UINT8 descriptorType;     /* descriptor type */
  274.     UINT8 descriptorSubType;     /* descriptor sub type */
  275.     UINT8 bcdAdc [2];     /* release level in BCD */
  276.     UINT8 totalLength [2];     /* combined length of all descr */
  277.     UINT8 inCollection;      /* number of streaming interfaces */
  278.     UINT8 interfaceNbr [1];     /* variable number of interface numbers */
  279.     } USB_AUDIO_AC_DESCR, *pUSB_AUDIO_AC_DESCR;
  280. /* header common to all AudioControl unit/terminal descriptors */
  281. typedef struct usb_audio_ac_common
  282.     {
  283.     UINT8 length;     /* length of descriptor in bytes */
  284.     UINT8 descriptorType;     /* descriptor type */
  285.     UINT8 descriptorSubType;     /* descriptor sub type */
  286.     UINT8 unitId;     /* unit/terminal ID */
  287.     } USB_AUDIO_AC_COMMON, *pUSB_AUDIO_AC_COMMON;
  288. /* input terminal descriptor */
  289. typedef struct usb_audio_input_term_descr
  290.     {
  291.     UINT8 length;     /* length of descriptor in bytes */
  292.     UINT8 descriptorType;     /* descriptor type */
  293.     UINT8 descriptorSubType;     /* descriptor sub type */
  294.     UINT8 terminalId;     /* ID of this terminal */
  295.     UINT8 terminalType [2];     /* type of terminal */
  296.     UINT8 assocTerminal;     /* ID of associated output terminal */
  297.     UINT8 channels;     /* count of channels */
  298.     UINT8 channelConfig [2];     /* see USB_AUDIO_LOC_xxxx */
  299.     UINT8 channelNamesIndex;     /* index of first string descr */
  300.     UINT8 terminalNameIndex;     /* index of string descr for this term */
  301.     } USB_AUDIO_INPUT_TERM_DESCR, *pUSB_AUDIO_INPUT_TERM_DESCR;
  302. /* output terminal descriptor */
  303. typedef struct usb_audio_output_term_descr
  304.     {
  305.     UINT8 length;     /* length of descriptor in bytes */
  306.     UINT8 descriptorType;     /* descriptor type */
  307.     UINT8 descriptorSubType;     /* descriptor sub type */
  308.     UINT8 terminalId;     /* ID of this terminal */
  309.     UINT8 terminalType [2];     /* type of terminal */
  310.     UINT8 assocTerminal;     /* ID of associate input terminal */
  311.     UINT8 sourceId;     /* ID of connected unit/terminal */
  312.     UINT8 terminalNameIndex;     /* index of string desdr for this term */
  313.     } USB_AUDIO_OUTPUT_TERM_DESCR, *pUSB_AUDIO_OUTPUT_TERM_DESCR;
  314. /* mixer unit descriptor */
  315. typedef struct usb_audio_mixer_unit_descr
  316.     {
  317.     UINT8 length;     /* length of descriptor in bytes */
  318.     UINT8 descriptorType;     /* descriptor type */
  319.     UINT8 descriptorSubType;     /* descriptor sub type */
  320.     UINT8 unitId;     /* ID of this unit */
  321.     UINT8 nbrInPins;     /* number of input pins */
  322.     UINT8 sourceId [1];      /* array of sources */
  323.     /* followed by a cluster descr */
  324.     /* followed by a controls byte */
  325.     /* followed by iMixer */
  326.     } USB_AUDIO_MIXER_UNIT_DESCR, *pUSB_AUDIO_MIXER_UNIT_DESCR;
  327. /* selector unit descriptor */
  328. typedef struct usb_audio_selector_unit_descr
  329.     {
  330.     UINT8 length;     /* length of descriptor in bytes */
  331.     UINT8 descriptorType;     /* descriptor type */
  332.     UINT8 descriptorSubType;     /* descriptor sub type */
  333.     UINT8 unitId;     /* ID of this unit */
  334.     UINT8 nbrInPins;     /* number of input pins */
  335.     UINT8 sourceId [1];      /* array of sources */
  336.     /* followed by iMixer */
  337.     } USB_AUDIO_SELECTOR_UNIT_DESCR, *pUSB_AUDIO_SELECTOR_UNIT_DESCR;
  338. /* feature unit descriptor */
  339. typedef struct usb_audio_feature_unit_descr
  340.     {
  341.     UINT8 length;     /* length of descriptor in bytes */
  342.     UINT8 descriptorType;     /* descriptor type */
  343.     UINT8 descriptorSubType;     /* descriptor sub type */
  344.     UINT8 unitId;     /* unique ID of this unit */
  345.     UINT8 sourceId;     /* ID of source unit/terminal */
  346.     UINT8 controlSize;     /* size of entries in controls array */
  347.     UINT8 controls [1];      /* variable length, 1 + no. of channels */
  348.     /* iFeature byte follows controls array */
  349.     } USB_AUDIO_FEATURE_UNIT_DESCR, *pUSB_AUDIO_FEATURE_UNIT_DESCR;
  350. /* processing unit descriptor (common part) */
  351. typedef struct usb_audio_process_unit_descr
  352.     {
  353.     UINT8 length;     /* length of descriptor in bytes */
  354.     UINT8 descriptorType;     /* descriptor type */
  355.     UINT8 descriptorSubType;     /* descriptor sub type */
  356.     UINT8 unitId;     /* unique ID of this unit */
  357.     UINT8 processType [2];     /* type of process performed by unit */
  358.     UINT8 nbrInPins;     /* number of input pins */
  359.     UINT8 sourceId [1];      /* array of sources */
  360.     /* ... */
  361.     } USB_AUDIO_PROCESS_UNIT_DESCR, *pUSB_AUDIO_PROCESS_UNIT_DESCR;
  362. /* extension unit descriptor */
  363. typedef struct usb_audio_ext_unit_descr
  364.     {
  365.     UINT8 length;     /* length of descriptor in bytes */
  366.     UINT8 descriptorType;     /* descriptor type */
  367.     UINT8 descriptorSubType;     /* descriptor sub type */
  368.     UINT8 unitId;     /* unique ID of this unit */
  369.     UINT8 extensionCode [2];     /* type of extension */
  370.     UINT8 nbrInPins;     /* number of input pins */
  371.     UINT8 sourceId [1];      /* array of sources */
  372.     /* ... */
  373.     } USB_AUDIO_EXT_UNIT_DESCR, *pUSB_AUDIO_EXT_UNIT_DESCR;
  374. /* standard AC interrupt endpoint descriptor */
  375. typedef struct usb_audio_int_ep_descr
  376.     {
  377.     UINT8 length;     /* bLength */
  378.     UINT8 descriptorType;     /* bDescriptorType */
  379.     UINT8 endpointAddress;     /* bEndpointAddress */
  380.     UINT8 attributes;     /* bmAttributes */
  381.     UINT8 maxPacketSize [2];     /* wMaxPacketSize */
  382.     UINT8 interval;     /* bInterval */
  383.     UINT8 refresh;     /* reset to 0 */
  384.     UINT8 synchAddress;      /* reset to 0 */
  385.     } USB_AUDIO_INT_EP_DESCR, *pUSB_AUDIO_INT_EP_DESCR;
  386. /* standard AS (AudioStreaming) interface descriptor
  387.  *
  388.  * NOTE: This structure is identical to the standard USB interface descriptor,
  389.  * except that interfaceClass is defined as the Audio interface class, 
  390.  * interfaceSubClass is defined as the audio interface subclass, and
  391.  * interfaceProtocol is always 0.
  392.  */
  393. /* class-specific AS interface descriptor */
  394. typedef struct usb_audio_as_descr 
  395.     {
  396.     UINT8 length;     /* length of descriptor in bytes */
  397.     UINT8 descriptorType;     /* descriptor type */
  398.     UINT8 descriptorSubType;     /* descriptor sub type */
  399.     UINT8 terminalLink;      /* ID of connected terminal */
  400.     UINT8 delay;     /* delay introduced by data path */
  401.     UINT8 formatTag [2];     /* audio data format */
  402.     } USB_AUDIO_AS_DESCR, *pUSB_AUDIO_AS_DESCR;
  403. /* standard AS isochronous audio data endpoint descriptor */
  404. typedef struct usb_audio_std_isoch_ep_descr
  405.     {
  406.     UINT8 length;     /* bLength */
  407.     UINT8 descriptorType;     /* bDescriptorType */
  408.     UINT8 endpointAddress;     /* bEndpointAddress */
  409.     UINT8 attributes;     /* bmAttributes */
  410.     UINT8 maxPacketSize [2];     /* wMaxPacketSize */
  411.     UINT8 interval;     /* bInterval */
  412.     UINT8 refresh;     /* reset to 0 */
  413.     UINT8 synchAddress;      /* address of synch endpoint */
  414.     } USB_AUDIO_STD_ISOCH_EP_DESCR, *pUSB_AUDIO_STD_ISOCH_EP_DESCR;
  415. /* class-specific isochronous audio data endpoint descriptor */
  416. typedef struct usb_audio_class_isoch_ep_descr
  417.     {
  418.     UINT8 length;     /* length of descriptor in bytes */
  419.     UINT8 descriptorType;     /* descriptor type */
  420.     UINT8 descriptorSubType;     /* descriptor sub type */
  421.     UINT8 attributes;     /* bmAttributes */
  422.     UINT8 lockDelayUnits;     /* indicates units for lockDelay */
  423.     UINT8 lockDelay;     /* internal clock lock time */
  424.     } USB_AUDIO_CLASS_ISOCH_EP_DESCR, *pUSB_AUDIO_CLASS_ISOCH_EP_DESCR;
  425. /* standard AS isoch synch endpoint descriptor */
  426. typedef struct usb_audio_isoch_synch_ep_descr
  427.     {
  428.     UINT8 length;     /* bLength */
  429.     UINT8 descriptorType;     /* bDescriptorType */
  430.     UINT8 endpointAddress;     /* bEndpointAddress */
  431.     UINT8 attributes;     /* bmAttributes */
  432.     UINT8 maxPacketSize [2];     /* wMaxPacketSize */
  433.     UINT8 interval;     /* bInterval */
  434.     UINT8 refresh;     /* synch refresh rate (pwr of 2) */
  435.     UINT8 synchAddress;      /* reset to 0 */
  436.     } USB_AUDIO_ISOCH_SYNCH_EP_DESCR, *pUSB_AUDIO_ISOCH_SYNCH_EP_DESCR;
  437. /* common sampling frequency information */
  438. typedef UINT8 USB_AUDIO_SAM_FREQ [3];
  439. typedef struct usb_audio_sample_info
  440.     {
  441.     UINT8 freqType;     /* how sampling freq. can be programmed */
  442.     union
  443. {
  444. struct
  445.     {
  446.     USB_AUDIO_SAM_FREQ lowerFreq;   /* lower bound */
  447.     USB_AUDIO_SAM_FREQ upperFreq;   /* upper bound */
  448.     } continous;
  449. struct
  450.     {
  451.     USB_AUDIO_SAM_FREQ freq [1];    /* discrete sampling frequency */
  452.     } discrete;
  453. } freq;
  454.     } USB_AUDIO_SAMPLE_INFO, *pUSB_AUDIO_SAMPLE_INFO;
  455. /* type I format type descriptor */
  456. typedef struct usb_audio_type_1_type_descr
  457.     {
  458.     UINT8 length;     /* length of descriptor in bytes */
  459.     UINT8 descriptorType;     /* descriptor type */
  460.     UINT8 descriptorSubType;     /* descriptor sub type */
  461.     UINT8 formatType;     /* identifies format type */
  462.     UINT8 nbrChannels;     /* number of channels */
  463.     UINT8 subFrameSize;      /* number of bytes for one audio subframe */
  464.     UINT8 bitResolution;     /* number of bits used per audio subframe */
  465.     USB_AUDIO_SAMPLE_INFO sample;   /* sampling frequency info */
  466.     } USB_AUDIO_TYPE_1_TYPE_DESCR, *pUSB_AUDIO_TYPE_1_TYPE_DESCR;
  467. /* type II format type descriptor */
  468. typedef struct usb_audio_type_2_type_descr
  469.     {
  470.     UINT8 length;     /* length of descriptor in bytes */
  471.     UINT8 descriptorType;     /* descriptor type */
  472.     UINT8 descriptorSubType;     /* descriptor sub type */
  473.     UINT8 formatType;     /* identifies format type */
  474.     UINT8 maxBitRate [2];     /* max bits per second sup. by interface */
  475.     UINT8 samplesPerFrame [2];     /* nbr PCM audio samples in audio frame */
  476.     USB_AUDIO_SAMPLE_INFO sample;   /* sampling frequency info */
  477.     } USB_AUDIO_TYPE_2_TYPE_DESCR, *pUSB_AUDIO_TYPE_2_TYPE_DESCR;
  478. /* type III format type descriptor */
  479. typedef struct usb_audio_type_3_type_descr
  480.     {
  481.     UINT8 length;     /* length of descriptor in bytes */
  482.     UINT8 descriptorType;     /* descriptor type */
  483.     UINT8 descriptorSubType;     /* descriptor sub type */
  484.     UINT8 formatType;     /* identifies format type */
  485.     UINT8 nbrChannels;     /* number of channels */
  486.     UINT8 subFrameSize;      /* number of bytes for one audio subframe */
  487.     UINT8 bitResolution;     /* number of bits used per audio subframe */
  488.     USB_AUDIO_SAMPLE_INFO sample;   /* sampling frequency info */
  489.     } USB_AUDIO_TYPE_3_TYPE_DESCR, *pUSB_AUDIO_TYPE_3_TYPE_DESCR;
  490. /* composite type descriptor */
  491. typedef struct usb_audio_type_descr
  492.     {
  493.     UINT8 length;     /* length of descriptor in bytes */
  494.     UINT8 descriptorType;     /* descriptor type */
  495.     UINT8 descriptorSubType;     /* descriptor sub type */
  496.     UINT8 formatType;     /* identifies format type */
  497.     union
  498. {
  499. struct
  500.     {
  501.     UINT8 nbrChannels;     /* number of channels */
  502.     UINT8 subFrameSize;     /* number of bytes for one audio subframe */
  503.     UINT8 bitResolution;    /* number of bits used per audio subframe */
  504.     USB_AUDIO_SAMPLE_INFO sample;   /* sampling frequency info */
  505.     } type1;
  506. struct
  507.     {
  508.     UINT8 maxBitRate [2];   /* max bits per second sup. by interface */
  509.     UINT8 samplesPerFrame [2]; /* nbr PCM audio samples in audio frame */
  510.     USB_AUDIO_SAMPLE_INFO sample;   /* sampling frequency info */
  511.     } type2;
  512. struct
  513.     {
  514.     UINT8 nbrChannels;     /* number of channels */
  515.     UINT8 subFrameSize;     /* number of bytes for one audio subframe */
  516.     UINT8 bitResolution;    /* number of bits used per audio subframe */
  517.     USB_AUDIO_SAMPLE_INFO sample;   /* sampling frequency info */
  518.     } type3;
  519. } ts;
  520.     } USB_AUDIO_TYPE_DESCR, *pUSB_AUDIO_TYPE_DESCR;
  521. #ifdef __cplusplus
  522. }
  523. #endif
  524. #endif /* __INCusbAudioh */
  525. /* End of file. */