Fixed EVENT_USB_CDC_ControLineStateChanged() event not taking the CDC interface struc...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / Audio.h
1 /*
2 LUFA Library
3 Copyright (C) Dean Camera, 2009.
4
5 dean [at] fourwalledcubicle [dot] com
6 www.fourwalledcubicle.com
7 */
8
9 /*
10 Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)
11
12 Permission to use, copy, modify, and distribute this software
13 and its documentation for any purpose and without fee is hereby
14 granted, provided that the above copyright notice appear in all
15 copies and that both that the copyright notice and this
16 permission notice and warranty disclaimer appear in supporting
17 documentation, and that the name of the author not be used in
18 advertising or publicity pertaining to distribution of the
19 software without specific, written prior permission.
20
21 The author disclaim all warranties with regard to this
22 software, including all implied warranties of merchantability
23 and fitness. In no event shall the author be liable for any
24 special, indirect or consequential damages or any damages
25 whatsoever resulting from loss of use, data or profits, whether
26 in an action of contract, negligence or other tortious action,
27 arising out of or in connection with the use or performance of
28 this software.
29 */
30
31 /** \ingroup Group_USBDeviceClassDrivers
32 * @defgroup Group_USBClassAudioDevice Audio Device Class Driver - LUFA/Drivers/Class/Device/Audio.h
33 *
34 * \section Sec_Dependencies Module Source Dependencies
35 * The following files must be built with any user project that uses this module:
36 * - LUFA/Drivers/USB/Class/Device/Audio.c
37 *
38 * \section Module Description
39 * Functions, macros, variables, enums and types related to the management of USB Audio Class interfaces
40 * within a USB device.
41 *
42 * @{
43 */
44
45 #ifndef _AUDIO_CLASS_H_
46 #define _AUDIO_CLASS_H_
47
48 /* Includes: */
49 #include "../../USB.h"
50
51 #include <string.h>
52
53 /* Enable C linkage for C++ Compilers: */
54 #if defined(__cplusplus)
55 extern "C" {
56 #endif
57
58 /* Macros: */
59 /** Descriptor header constant to indicate a Audio class interface descriptor. */
60 #define DTYPE_AudioInterface 0x24
61
62 /** Descriptor header constant to indicate a Audio class endpoint descriptor. */
63 #define DTYPE_AudioEndpoint 0x25
64
65 /** Audio class descriptor subtype value for a Audio class specific header descriptor. */
66 #define DSUBTYPE_Header 0x01
67
68 /** Audio class descriptor subtype value for an Output Terminal Audio class specific descriptor. */
69 #define DSUBTYPE_InputTerminal 0x02
70
71 /** Audio class descriptor subtype value for an Input Terminal Audio class specific descriptor. */
72 #define DSUBTYPE_OutputTerminal 0x03
73
74 /** Audio class descriptor subtype value for a Feature Unit Audio class specific descriptor. */
75 #define DSUBTYPE_FeatureUnit 0x06
76
77 /** Audio class descriptor subtype value for a general Audio class specific descriptor. */
78 #define DSUBTYPE_General 0x01
79
80 /** Audio class descriptor subtype value for an Audio class specific descriptor indicating the format of an audio stream. */
81 #define DSUBTYPE_Format 0x02
82
83 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
84 #define CHANNEL_LEFT_FRONT (1 << 0)
85
86 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
87 #define CHANNEL_RIGHT_FRONT (1 << 1)
88
89 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
90 #define CHANNEL_CENTER_FRONT (1 << 2)
91
92 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
93 #define CHANNEL_LOW_FREQ_ENHANCE (1 << 3)
94
95 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
96 #define CHANNEL_LEFT_SURROUND (1 << 4)
97
98 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
99 #define CHANNEL_RIGHT_SURROUND (1 << 5)
100
101 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
102 #define CHANNEL_LEFT_OF_CENTER (1 << 6)
103
104 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
105 #define CHANNEL_RIGHT_OF_CENTER (1 << 7)
106
107 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
108 #define CHANNEL_SURROUND (1 << 8)
109
110 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
111 #define CHANNEL_SIDE_LEFT (1 << 9)
112
113 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
114 #define CHANNEL_SIDE_RIGHT (1 << 10)
115
116 /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
117 #define CHANNEL_TOP (1 << 11)
118
119 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
120 #define FEATURE_MUTE (1 << 0)
121
122 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
123 #define FEATURE_VOLUME (1 << 1)
124
125 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
126 #define FEATURE_BASS (1 << 2)
127
128 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
129 #define FEATURE_MID (1 << 3)
130
131 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
132 #define FEATURE_TREBLE (1 << 4)
133
134 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
135 #define FEATURE_GRAPHIC_EQUALIZER (1 << 5)
136
137 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
138
139 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
140 #define FEATURE_AUTOMATIC_GAIN (1 << 6)
141
142 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
143 #define FEATURE_DELAY (1 << 7)
144
145 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
146 #define FEATURE_BASS_BOOST (1 << 8)
147
148 /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
149 #define FEATURE_BASS_LOUDNESS (1 << 9)
150
151 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
152 #define TERMINAL_UNDEFINED 0x0100
153
154 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
155 #define TERMINAL_STREAMING 0x0101
156
157 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
158 #define TERMINAL_VENDOR 0x01FF
159
160 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
161 #define TERMINAL_IN_UNDEFINED 0x0200
162
163 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
164 #define TERMINAL_IN_MIC 0x0201
165
166 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
167 #define TERMINAL_IN_DESKTOP_MIC 0x0202
168
169 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
170 #define TERMINAL_IN_PERSONAL_MIC 0x0203
171
172 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
173 #define TERMINAL_IN_OMNIDIR_MIC 0x0204
174
175 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
176 #define TERMINAL_IN_MIC_ARRAY 0x0205
177
178 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
179 #define TERMINAL_IN_PROCESSING_MIC 0x0206
180
181 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
182 #define TERMINAL_IN_OUT_UNDEFINED 0x0300
183
184 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
185 #define TERMINAL_OUT_SPEAKER 0x0301
186
187 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
188 #define TERMINAL_OUT_HEADPHONES 0x0302
189
190 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
191 #define TERMINAL_OUT_HEAD_MOUNTED 0x0303
192
193 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
194 #define TERMINAL_OUT_DESKTOP 0x0304
195
196 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
197 #define TERMINAL_OUT_ROOM 0x0305
198
199 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
200 #define TERMINAL_OUT_COMMUNICATION 0x0306
201
202 /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */
203 #define TERMINAL_OUT_LOWFREQ 0x0307
204
205 /** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.
206 *
207 * \param freq Required audio sampling frequency in HZ
208 */
209 #define AUDIO_SAMPLE_FREQ(freq) {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}
210
211 /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint
212 * accepts only filled endpoint packets of audio samples.
213 */
214 #define EP_ACCEPTS_ONLY_FULL_PACKETS (1 << 7)
215
216 /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint
217 * will accept partially filled endpoint packets of audio samples.
218 */
219 #define EP_ACCEPTS_SMALL_PACKETS (0 << 7)
220
221 /* Type Defines: */
222 /** Type define for an Audio class specific interface descriptor. This follows a regular interface descriptor to
223 * supply extra information about the audio device's layout to the host. See the USB Audio specification for more
224 * details.
225 */
226 typedef struct
227 {
228 USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
229 uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */
230
231 uint16_t ACSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */
232 uint16_t TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */
233
234 uint8_t InCollection; /**< Total number of audio class interfaces within this device */
235 uint8_t InterfaceNumbers[1]; /**< Interface numbers of each audio interface */
236 } USB_AudioInterface_AC_t;
237
238 /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features
239 * are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio
240 * specification for more details.
241 */
242 typedef struct
243 {
244 USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
245 uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */
246
247 uint8_t UnitID; /**< ID value of this feature unit - must be a unique value within the device */
248 uint8_t SourceID; /**< Source ID value of the audio source input into this feature unit */
249
250 uint8_t ControlSize; /**< Size of each element in the ChanelControlls array */
251 uint8_t ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */
252
253 uint8_t FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */
254 } USB_AudioFeatureUnit_t;
255
256 /** Type define for an Audio class specific input terminal descriptor. This indicates to the host that the device
257 * contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example,
258 * a USB endpoint). See the USB Audio specification for more details.
259 */
260 typedef struct
261 {
262 USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
263 uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */
264
265 uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */
266 uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */
267 uint8_t AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals
268 * such as the speaker and microphone of a phone handset
269 */
270 uint8_t TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */
271 uint16_t ChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal */
272
273 uint8_t ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */
274 uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */
275 } USB_AudioInputTerminal_t;
276
277 /** Type define for an Audio class specific output terminal descriptor. This indicates to the host that the device
278 * contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example,
279 * a USB endpoint). See the USB Audio specification for more details.
280 */
281 typedef struct
282 {
283 USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
284 uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */
285
286 uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */
287 uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */
288 uint8_t AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals
289 * such as the speaker and microphone of a phone handset
290 */
291 uint8_t SourceID; /**< ID value of the unit this terminal's audio is sourced from */
292
293 uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */
294 } USB_AudioOutputTerminal_t;
295
296 /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host
297 * how audio streams within the device are formatted. See the USB Audio specification for more details.
298 */
299 typedef struct
300 {
301 USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
302 uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */
303
304 uint8_t TerminalLink; /**< ID value of the output terminal this descriptor is describing */
305
306 uint8_t FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */
307 uint16_t AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */
308 } USB_AudioInterface_AS_t;
309
310 /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype,
311 * this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro.
312 */
313 typedef struct
314 {
315 uint16_t LowWord; /**< Low 16 bits of the 24-bit value */
316 uint8_t HighByte; /**< Upper 8 bits of the 24-bit value */
317 } AudioSampleFreq_t;
318
319 /** Type define for an Audio class specific audio format descriptor. This is used to give the host full details
320 * about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used
321 * in the device's audio streams. See the USB Audio specification for more details.
322 */
323 typedef struct
324 {
325 USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
326 uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */
327
328 uint8_t FormatType; /**< Format of the audio stream, see Audio Device Formats specification */
329 uint8_t Channels; /**< Total number of discrete channels in the stream */
330
331 uint8_t SubFrameSize; /**< Size in bytes of each channel's sample data in the stream */
332 uint8_t BitResolution; /**< Bits of resolution of each channel's samples in the stream */
333
334 uint8_t SampleFrequencyType; /**< Total number of sample frequencies supported by the device */
335 AudioSampleFreq_t SampleFrequencies[1]; /**< Sample frequencies supported by the device */
336 } USB_AudioFormat_t;
337
338 /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint
339 * descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.
340 */
341 typedef struct
342 {
343 USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */
344
345 uint8_t Refresh; /**< Always set to zero */
346 uint8_t SyncEndpointNumber; /**< Endpoint address to send synchronisation information to, if needed (zero otherwise) */
347 } USB_AudioStreamEndpoint_Std_t;
348
349 /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information
350 * on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio
351 * class specific extended endpoint descriptor. See the USB Audio specification for more details.
352 */
353 typedef struct
354 {
355 USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */
356 uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */
357
358 uint8_t Attributes; /**< Audio class specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS */
359
360 uint8_t LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */
361 uint16_t LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */
362 } USB_AudioStreamEndpoint_Spc_t;
363
364 /** Type define for an Audio Class interface configuration and state structure. This structure should be used for each Audio
365 * Class unit within the device, and passed (per-interface) to the Audio Class driver functions so that each Audio interface
366 * has seperate state and configuration data and can be controlled seperately.
367 */
368 typedef struct
369 {
370 uint8_t StreamingInterfaceNumber; /**< Index of the Audio Streaming interface within the device this structure controls */
371
372 uint8_t DataINEndpointNumber; /**< Endpoint number of the incomming Audio Streaming data, if available (zero if unused) */
373 uint16_t DataINEndpointSize; /**< Size in bytes of the incomming Audio Streaming data endpoint, if available (zero if unused) */
374
375 uint8_t DataOUTEndpointNumber; /**< Endpoint number of the outgoing Audio Streaming data, if available (zero if unused) */
376 uint16_t DataOUTEndpointSize; /**< Size in bytes of the outgoing Audio Streaming data endpoint, if available (zero if unused) */
377
378 bool InterfaceEnabled; /**< Set and cleared by the class driver to indicate if the host has enabled the streaming endpoints
379 * of the Audio Streaming interface
380 */
381 } USB_ClassInfo_Audio_t;
382
383 /* Function Prototypes: */
384 /** Configures the endpoints of a given Audio interface, ready for use. This should be linked to the library
385 * \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration containing the
386 * given Audio interface is selected.
387 *
388 * \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
389 *
390 * \return Boolean true if the endpoints were sucessfully configured, false otherwise
391 */
392 bool USB_Audio_ConfigureEndpoints(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
393
394 /** Processes incomming control requests from the host, that are directed to the given Audio class interface. This should be
395 * linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
396 *
397 * \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
398 */
399 void USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
400
401 /** General management task for a given Audio class interface, required for the correct operation of the interface. This should
402 * be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
403 *
404 * \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
405 */
406 void USB_Audio_USBTask(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
407
408 /** Reads the next 8-bit audio sample from the current audio interface.
409 *
410 * \note This should be preceeded immediately by a call to the USB_Audio_IsSampleReceived() function to ensure that
411 * the correct endpoint is selected and ready for data.
412 *
413 * \return Signed 8-bit audio sample from the audio interface
414 */
415 int8_t USB_Audio_ReadSample8(void);
416
417 /** Reads the next 16-bit audio sample from the current audio interface.
418 *
419 * \note This should be preceeded immediately by a call to the USB_Audio_IsSampleReceived() function to ensure that
420 * the correct endpoint is selected and ready for data.
421 *
422 * \return Signed 16-bit audio sample from the audio interface
423 */
424 int16_t USB_Audio_ReadSample16(void);
425
426 /** Reads the next 24-bit audio sample from the current audio interface.
427 *
428 * \note This should be preceeded immediately by a call to the USB_Audio_IsSampleReceived() function to ensure that
429 * the correct endpoint is selected and ready for data.
430 *
431 * \return Signed 24-bit audio sample from the audio interface
432 */
433 int32_t USB_Audio_ReadSample24(void);
434
435 /** Writes the next 8-bit audio sample to the current audio interface.
436 *
437 * \note This should be preceeded immediately by a call to the USB_Audio_IsReadyForNextSample() function to ensure that
438 * the correct endpoint is selected and ready for data.
439 *
440 * \param Sample Signed 8-bit audio sample
441 */
442 void USB_Audio_WriteSample8(int8_t Sample);
443
444 /** Writes the next 16-bit audio sample to the current audio interface.
445 *
446 * \note This should be preceeded immediately by a call to the USB_Audio_IsReadyForNextSample() function to ensure that
447 * the correct endpoint is selected and ready for data.
448 *
449 * \param Sample Signed 16-bit audio sample
450 */
451 void USB_Audio_WriteSample16(int16_t Sample);
452
453 /** Writes the next 24-bit audio sample to the current audio interface.
454 *
455 * \note This should be preceeded immediately by a call to the USB_Audio_IsReadyForNextSample() function to ensure that
456 * the correct endpoint is selected and ready for data.
457 *
458 * \param Sample Signed 24-bit audio sample
459 */
460 void USB_Audio_WriteSample24(int32_t Sample);
461
462 /** Determines if the given audio interface is ready for a sample to be read from it.
463 *
464 * \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
465 *
466 * \return Boolean true if the given Audio interface has a sample to be read, false otherwise
467 */
468 bool USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
469
470 /** Determines if the given audio interface is ready to accept the next sample to be written to it.
471 *
472 * \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
473 *
474 * \return Boolean true if the given Audio interface is ready to accept the next sample, false otherwise
475 */
476 bool USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
477
478 /* Disable C linkage for C++ Compilers: */
479 #if defined(__cplusplus)
480 }
481 #endif
482
483 #endif
484
485 /** @} */