Snoopy: print correct title for OpenResource patch.
[AROS.git] / compiler / include / devices / usb_audio.h
blob305e9d36a825e60c9483d36319462dbed1321863
1 #ifndef DEVICES_USB_AUDIO_H
2 #define DEVICES_USB_AUDIO_H
3 /*
4 ** $VER: usb_audio.h 2.0 (15.12.07)
5 **
6 ** usb definitions include file
7 **
8 ** (C) Copyright 2002-2007 Chris Hodges
9 ** All Rights Reserved
12 #include <exec/types.h>
14 #if defined(__GNUC__)
15 # pragma pack(1)
16 #endif
18 /* Usb Audio Requests */
19 #define UAUDR_SET_CUR 0x01
20 #define UAUDR_GET_CUR 0x81
21 #define UAUDR_SET_MIN 0x02
22 #define UAUDR_GET_MIN 0x82
23 #define UAUDR_SET_MAX 0x03
24 #define UAUDR_GET_MAX 0x83
25 #define UAUDR_SET_RES 0x04
26 #define UAUDR_GET_RES 0x84
27 #define UAUDR_SET_MEM 0x05
28 #define UAUDR_GET_MEM 0x85
29 #define UAUDR_GET_STAT 0xff
31 /* Audio Ctrl class specific interface descriptor subtypes */
32 #define UDST_AUDIO_CTRL_HEADER 0x01
33 #define UDST_AUDIO_CTRL_INPUT_TERMINAL 0x02
34 #define UDST_AUDIO_CTRL_OUTPUT_TERMINAL 0x03
35 #define UDST_AUDIO_CTRL_MIXER_UNIT 0x04
36 #define UDST_AUDIO_CTRL_SELECTOR_UNIT 0x05
37 #define UDST_AUDIO_CTRL_FEATURE_UNIT 0x06
38 #define UDST_AUDIO_CTRL_PROCESSING_UNIT 0x07
39 #define UDST_AUDIO_CTRL_EXTENSION_UNIT 0x08
41 /* Audio Streaming class specific interface descriptor subtypes */
42 #define UDST_AUDIO_STREAM_GENERAL 0x01
43 #define UDST_AUDIO_STREAM_FMT_TYPE 0x02
44 #define UDST_AUDIO_STREAM_FMT_SPECIFIC 0x03
46 /* Audio MIDI class specific interface descriptor subtypes */
47 #define UDST_AUDIO_MIDI_HEADER 0x01
48 #define UDST_AUDIO_MIDI_IN_JACK 0x02
49 #define UDST_AUDIO_MIDI_OUT_JACK 0x03
50 #define UDST_AUDIO_MIDI_ELEMENT 0x04
52 /* Audioclass specific endpoint descriptors subtypes */
53 #define UDST_AUDIO_EP_GENERAL 0x01
55 /* Audio MIDI Jack-types */
56 #define USBMIDI_JACK_TYPE_UNDEFINED 0x00
57 #define USBMIDI_JACK_EMBEDDED 0x01
58 #define USBMIDI_JACK_EXTERNAL 0x02
60 /* Audio classes */
61 #define AUDIO_NO_SUBCLASS 0x00
62 #define AUDIO_CTRL_SUBCLASS 0x01
63 #define AUDIO_STREAM_SUBCLASS 0x02
64 #define AUDIO_MIDI_SUBCLASS 0x03
66 /* USB Audio specific stuff */
68 /* USB Audio USB Terminal types */
69 #define UAUTT_UNDEFINED 0x0100 /* USB Undefined */
70 #define UAUTT_STREAMING 0x0101 /* USB streaming */
71 #define UAUTT_VENDOR 0x01ff /* USB vendor specific */
73 /* USB Audio Input Terminal types */
74 #define UAITT_UNDEFINED 0x0200 /* Input Undefined */
75 #define UAITT_MIC 0x0201 /* Microphone */
76 #define UAITT_DESKTOP_MIC 0x0202 /* Desktop microphone */
77 #define UAITT_PERSONAL_MIC 0x0203 /* Personal microphone */
78 #define UAITT_OMNI_DIR_MIC 0x0204 /* Omni-directional microphone */
79 #define UAITT_MIC_ARRAY 0x0205 /* Microphone array */
80 #define UAITT_PROC_MIC_ARRAY 0x0206 /* Processing microphone array */
82 /* USB Audio Output Terminal types */
83 #define UAOTT_UNDEFINED 0x0300 /* Output Undefined */
84 #define UAOTT_SPEAKER 0x0301 /* Speaker */
85 #define UAOTT_HEADPHONES 0x0302 /* Headphones */
86 #define UAOTT_DISPLAY 0x0303 /* Head Mounted Display Audio */
87 #define UAOTT_DESKTOP_SPEAKER 0x0304 /* Desktop speaker */
88 #define UAOTT_ROOM_SPEAKER 0x0305 /* Room speaker */
89 #define UAOTT_COMM_SPEAKER 0x0306 /* Communication speaker */
90 #define UAOTT_LOFI_SPEAKER 0x0307 /* Low frequency effects speaker */
92 /* USB Audio Bi-directional Terminal types */
93 #define UABTT_UNDEFINED 0x0400 /* Bi-directional Undefined */
94 #define UABTT_HANDSET 0x0401 /* Handset */
95 #define UABTT_HEADSET 0x0402 /* Headset */
96 #define UABTT_SPEAKERPHONE_NER 0x0403 /* Speakerphone, no echo reduction */
97 #define UABTT_SPEAKERPHONE_ES 0x0404 /* Echo-suppressing speakerphone */
98 #define UABTT_SPEAKERPHONE_EC 0x0405 /* Echo-canceling speakerphone */
100 /* USB Audio Telephony Terminal Types */
101 #define UATTT_UNDEFINED 0x0500 /* Telephony Undefined */
102 #define UATTT_PHONE_LINE 0x0501 /* Phone line */
103 #define UATTT_TELEPHONE 0x0502 /* Telephone */
104 #define UATTT_DOWN_LINE_PHONE 0x0503 /* Down Line Phone */
106 /* USB Audio External Terminal Types */
107 #define UAETT_UNDEFINED 0x0600 /* External Undefined */
108 #define UAETT_ANALOG 0x0601 /* Analog connector */
109 #define UAETT_DIGITAL 0x0602 /* Digital audio interface */
110 #define UAETT_LINE 0x0603 /* Line connector */
111 #define UAETT_LEGACY 0x0604 /* Legacy audio connector */
112 #define UAETT_SPDIF 0x0605 /* S/PDIF interface */
113 #define UAETT_1394DA 0x0606 /* 1394 DA stream */
114 #define UAETT_1394DV 0x0607 /* 1394 DV stream soundtrack */
116 /* USB Embedded Function Terminal Types */
117 #define UAFTT_UNDEFINED 0x0700 /* Embedded Undefined */
118 #define UAFTT_CALIB_NOISE 0x0701 /* Level Calibration Noise Source */
119 #define UAFTT_EQ_NOISE 0x0702 /* Equalization Noise */
120 #define UAFTT_CD 0x0703 /* CD player */
121 #define UAFTT_DAT 0x0704 /* DAT */
122 #define UAFTT_DCC 0x0705 /* DCC */
123 #define UAFTT_MINIDISK 0x0706 /* MiniDisk */
124 #define UAFTT_TAPE 0x0707 /* Analog Tape */
125 #define UAFTT_PHONO 0x0708 /* Phonograph */
126 #define UAFTT_VCR 0x0709 /* VCR Audio */
127 #define UAFTT_VIDEODISC 0x070a /* Video Disc Audio */
128 #define UAFTT_DVD 0x070b /* DVD Audio */
129 #define UAFTT_TV_TUNER 0x070c /* TV Tuner Audio */
130 #define UAFTT_SAT_RX 0x070d /* Satellite Receiver Audio */
131 #define UAFTT_CABLE_TUNER 0x070e /* Cable Tuner Audio */
132 #define UAFTT_DSS 0x070f /* DSS Audio */
133 #define UAFTT_RADIO_RX 0x0710 /* Radio Receiver */
134 #define UAFTT_RADIO_TX 0x0711 /* Radio Transmitter */
135 #define UAFTT_MULTITRACK 0x0712 /* Multi-track Recorder */
136 #define UAFTT_SYNTHESIZER 0x0713 /* Synthesizer */
138 /* USB Audio Audio Data Formats */
139 #define UAADF_TYPE_I_UNDEFINED 0x0000
140 #define UAADF_PCM 0x0001
141 #define UAADF_PCM8 0x0002
142 #define UAADF_IEEE_FLOAT 0x0003
143 #define UAADF_ALAW 0x0004
144 #define UAADF_MULAW 0x0005
146 #define UAADF_TYPE_II_UNDEFINED 0x1000
147 #define UAADF_MPEG 0x1001
148 #define UAADF_AC3 0x1002
150 #define UAADF_TYPE_III_UNDEFINED 0x2000
151 #define UAADF_IEC1937_AC3 0x2001
152 #define UAADF_IEC1937_MPEG1_L1 0x2002
153 #define UAADF_IEC1937_MPEG1_L2_3 0x2003
154 #define UAADF_IEC1937_MPEG2_NOEXT 0x2003
155 #define UAADF_IEC1937_MPEG2_EXT 0x2004
156 #define UAADF_IEC1937_MPEG2_L1_LS 0x2005
157 #define UAADF_IEC1937_MPEG2_L2_3_LS 0x2006
159 /* USB Audio Format Type Codes */
160 #define UAFTC_UNDEFINED 0x00
161 #define UAFTC_TYPE_I 0x01
162 #define UAFTC_TYPE_II 0x02
163 #define UAFTC_TYPE_III 0x03
165 /* Endpoint control selectors */
166 #define UAECS_SAMPLE_FREQ 0x01
167 #define UAECS_PITCH 0x02
169 /* Feature Unit Bits */
170 #define UAFUB_MUTE 0
171 #define UAFUB_VOLUME 1
172 #define UAFUB_BASS 2
173 #define UAFUB_MID 3
174 #define UAFUB_TREBLE 4
175 #define UAFUB_EQUALIZER 5
176 #define UAFUB_AUTOMATIC_GAIN 6
177 #define UAFUB_DELAY 7
178 #define UAFUB_BASS_BOOST 8
179 #define UAFUB_LOUDNESS 9
181 #define UAFUF_MUTE (1<<UAFUB_MUTE)
182 #define UAFUF_VOLUME (1<<UAFUB_VOLUME)
183 #define UAFUF_BASS (1<<UAFUB_BASS)
184 #define UAFUF_MID (1<<UAFUB_MID)
185 #define UAFUF_TREBLE (1<<UAFUB_TREBLE)
186 #define UAFUF_EQUALIZER (1<<UAFUB_EQUALIZER)
187 #define UAFUF_AUTOMATIC_GAIN (1<<UAFUB_AUTOMATIC_GAIN)
188 #define UAFUF_DELAY (1<<UAFUB_DELAY)
189 #define UAFUF_BASS_BOOST (1<<UAFUB_BASS_BOOST)
190 #define UAFUF_LOUDNESS (1<<UAFUB_LOUDNESS)
192 /* Feature Unit Control Selectors */
193 #define UAFUCS_MUTE 0x01
194 #define UAFUCS_VOLUME 0x02
195 #define UAFUCS_BASS 0x03
196 #define UAFUCS_MID 0x04
197 #define UAFUCS_TREBLE 0x05
198 #define UAFUCS_EQUALIZER 0x06
199 #define UAFUCS_AUTOMATIC_GAIN 0x07
200 #define UAFUCS_DELAY 0x08
201 #define UAFUCS_BASS_BOOST 0x09
202 #define UAFUCS_LOUDNESS 0x0a
204 /* USB Audio Spec 1.0 stuff */
205 struct UsbAudioHeaderDesc10
207 UBYTE bLength; /* Size of this descriptor */
208 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
209 UBYTE bDescriptorSubType; /* Subtype (0x01) */
210 UBYTE bcdADC0; /* Low byte of spec version (0x00) */
211 UBYTE bcdADC1; /* High byte of spec version (0x01) */
212 UBYTE wTotalLength0; /* Total length of all descriptors (low byte) */
213 UBYTE wTotalLength1; /* Total length of all descriptors (high byte) */
214 UBYTE bInCollection; /* The number of Audio/MidiStreaming */
215 UBYTE baInterfaceNr[1]; /* Interface number of the first AudioStreaming or MIDIStreaming interface */
218 struct UsbAudioInputTermDesc10
220 UBYTE bLength; /* Size of this descriptor */
221 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
222 UBYTE bDescriptorSubType; /* Subtype (0x02) */
223 UBYTE bTerminalID; /* unique ID */
224 UWORD wTerminalType; /* Terminal Type */
225 UBYTE bAssocTerminal; /* Associated Output Terminal ID */
226 UBYTE bNrChannels; /* Number of logical output channels in the output terminal */
227 UWORD wChannelConfig; /* Spacial location */
228 UBYTE iChannelNames; /* String descriptor */
229 UBYTE iTerminal; /* String descriptor */
232 struct UsbAudioOutputTermDesc10
234 UBYTE bLength; /* Size of this descriptor */
235 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
236 UBYTE bDescriptorSubType; /* Subtype (0x03) */
237 UBYTE bTerminalID; /* unique ID */
238 UWORD wTerminalType; /* Terminal Type */
239 UBYTE bAssocTerminal; /* Associated Output Terminal ID */
240 UBYTE bSourceID; /* ID of the Unit or Terminal to which this Terminal is connected. */
241 UBYTE iTerminal; /* String descriptor */
244 /* this data structure is of no use, as it's highly variable in size */
245 struct UsbAudioMixerUnitDesc10
247 UBYTE bLength; /* Size of this descriptor */
248 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
249 UBYTE bDescriptorSubType; /* Subtype (0x04) */
250 UBYTE bUnitID; /* unique ID */
251 UBYTE bNrInPins; /* Number of Input Pins */
252 UBYTE baSourceID[0]; /* ID of the Unit or Terminal to which the nth Input Pin of this Mixer Unit is connected. */
253 UBYTE bNrChannels; /* Number of logical output channels in the Mixer's output audio channel cluster. */
254 UWORD wChannelConfig; /* Spatial location */
255 UBYTE iChannelNames; /* String descriptor */
256 UBYTE bmControls[0]; /* Controls bitmap */
257 UBYTE iMixer; /* String descriptor */
260 /* this data structure is of no use, as it's highly variable in size */
261 struct UsbAudioSelectorUnitDesc10
263 UBYTE bLength; /* Size of this descriptor */
264 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
265 UBYTE bDescriptorSubType; /* Subtype (0x05) */
266 UBYTE bUnitID; /* unique ID */
267 UBYTE bNrInPins; /* Number of Input Pins */
268 UBYTE baSourceID[0]; /* ID of the Unit or Terminal to which the nth Input Pin of this Selector Unit is connected. */
269 UBYTE iSelector; /* String descriptor */
272 /* this data structure is of no use, as it's highly variable in size */
273 struct UsbAudioFeatureUnitDesc10
275 UBYTE bLength; /* Size of this descriptor */
276 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
277 UBYTE bDescriptorSubType; /* Subtype (0x06) */
278 UBYTE bUnitID; /* unique ID */
279 UBYTE bSourceID; /* ID of the Unit or Terminal to which this Terminal is connected. */
280 UBYTE bControlSize; /* Size in bytes of an element of the control array */
281 UBYTE bmaControls[0]; /* Controls matrix */
282 UBYTE iFeature; /* String descriptor */
285 /* this data structure is of no use, as it's highly variable in size */
286 struct UsbAudioProcessingUnitDesc10
288 UBYTE bLength; /* Size of this descriptor */
289 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
290 UBYTE bDescriptorSubType; /* Subtype (0x07) */
291 UBYTE bUnitID; /* unique ID */
292 UWORD wProcessType; /* type of processing */
293 UBYTE bNrInPins; /* Number of Input Pins */
294 UBYTE baSourceID[0]; /* ID of the Unit or Terminal to which the nth Input Pin of this Processing Unit is connected. */
295 UBYTE bNrChannels; /* Number of logical output channels in the Mixer's output audio channel cluster. */
296 UWORD wChannelConfig; /* Spatial location */
297 UBYTE iChannelNames; /* String descriptor */
298 UBYTE bControlSize; /* Size in bytes of an element of the control array */
299 UBYTE bmControls[0]; /* Controls bitmap */
300 UBYTE iProcessing; /* String descriptor */
303 /* this data structure is of no use, as it's highly variable in size */
304 struct UsbAudioExtensionUnitDesc10
306 UBYTE bLength; /* Size of this descriptor */
307 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
308 UBYTE bDescriptorSubType; /* Subtype (0x08) */
309 UBYTE bUnitID; /* unique ID */
310 UWORD wExtensionCode; /* vendor specific */
311 UBYTE bNrInPins; /* Number of Input Pins */
312 UBYTE baSourceID[0]; /* ID of the Unit or Terminal to which the nth Input Pin of this Mixer Unit is connected. */
313 UBYTE bNrChannels; /* Number of logical output channels in the Mixer's output audio channel cluster. */
314 UWORD wChannelConfig; /* Spatial location */
315 UBYTE iChannelNames; /* String descriptor */
316 UBYTE bControlSize; /* Size in bytes of an element of the control array */
317 UBYTE bmControls[0]; /* Controls bitmap */
318 UBYTE iExtension; /* String descriptor */
321 /* USB Audio Spec 2.0 stuff */
322 struct UsbAudioHeaderDesc20
324 UBYTE bLength; /* Size of this descriptor */
325 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
326 UBYTE bDescriptorSubType; /* Subtype (0x01) */
327 UBYTE bcdADC0; /* Low byte of spec version (0x00)*/
328 UBYTE bcdADC1; /* High byte of spec version (0x02) */
329 UBYTE bCategory; /* Primary use of the audio function */
330 UWORD wTotalLength; /* Total length of all descriptors */
331 UBYTE bmControls; /* Latency control (%00=n/a,%01=read only, %11=r/w) */
334 struct UsbAudioInputTermDesc20
336 UBYTE bLength; /* Size of this descriptor */
337 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
338 UBYTE bDescriptorSubType; /* Subtype (0x02) */
339 UBYTE bTerminalID; /* unique ID */
340 UWORD wTerminalType; /* Terminal Type */
341 UBYTE bAssocTerminal; /* Associated Output Terminal ID */
342 UBYTE bCSourceID; /* ID of the Clock Entity */
343 UBYTE bNrChannels; /* Number of logical output channels in the output terminal */
344 UBYTE bmChannelConfig[4]; /* Bitmap of spacial location */
345 UBYTE iChannelNames; /* String descriptor */
346 UBYTE bmControls; /* Various controls */
347 UBYTE iTerminal; /* String descriptor */
350 /* generic audio stuff */
351 struct UsbAudioGeneralIFDesc
353 UBYTE bLength; /* Size of this descriptor */
354 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
355 UBYTE bDescriptorSubType; /* Subtype (0x01) */
356 UBYTE bTerminalLink; /* Terminal linked to this interface */
357 UBYTE bDelay; /* Delay in frames */
358 UBYTE wFormatTag0; /* Data Format (low byte) */
359 UBYTE wFormatTag1; /* Data Format (high byte) */
362 struct UsbAudioType1FormatDesc
364 UBYTE bLength; /* Size of this descriptor */
365 UBYTE bDescriptorType; /* Descriptor Type (0x24) */
366 UBYTE bDescriptorSubType; /* Subtype (0x02) */
367 UBYTE bFormatType; /* Format Type I (0x01) */
368 UBYTE bNrChannels; /* Number of physical channels */
369 UBYTE bSubframeSize; /* Number of bytes occubied by one audio subframe (1-4) */
370 UBYTE bBitResolution; /* Number of bits used in a subframe */
371 UBYTE bSamFreqType; /* 0 = continuous freq, otherwise number of discrete freqs */
372 UBYTE tSamFreq0[3]; /* first sampling freq (or lower range) */
375 struct UsbAudioGeneralEPDesc
377 UBYTE bLength; /* Size of this descriptor */
378 UBYTE bDescriptorType; /* Descriptor Type (0x25) */
379 UBYTE bDescriptorSubType; /* Subtype (0x01) */
380 UBYTE bmAttributes; /* bit 0: Sampling freq, bit 1: Pitch, bit 7 = MaxPktsOnly */
381 UBYTE bLockDelayUnits; /* 0=undef, 1=ms, 2=PCM samples */
382 UBYTE wLockDelay0; /* Delay until locked (low byte) */
383 UBYTE wLockDelay1; /* Delay until locked (high byte) */
387 #if defined(__GNUC__)
388 # pragma pack()
389 #endif
391 #endif /* DEVICES_USB_AUDIO_H */