Audio.h 42.4 KB
Newer Older
 Dean Camera committed May 08, 2010 1 2 /* LUFA Library  Dean Camera committed Jan 01, 2011 3  Copyright (C) Dean Camera, 2011.  4   Dean Camera committed May 08, 2010 5  dean [at] fourwalledcubicle [dot] com  Dean Camera committed Oct 28, 2010 6  www.lufa-lib.org  Dean Camera committed May 08, 2010 7 8 9 */ /*  Dean Camera committed Jan 01, 2011 10  Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)  Dean Camera committed May 08, 2010 11   12  Permission to use, copy, modify, distribute, and sell this  Dean Camera committed May 08, 2010 13  software and its documentation for any purpose is hereby granted  14  without fee, provided that the above copyright notice appear in  Dean Camera committed May 08, 2010 15  all copies and that both that the copyright notice and this  16 17 18  permission notice and warranty disclaimer appear in supporting documentation, and that the name of the author not be used in advertising or publicity pertaining to distribution of the  Dean Camera committed May 08, 2010 19 20 21 22 23 24 25 26 27 28 29 30 31  software without specific, written prior permission. The author disclaim all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the author be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. */ /** \file  Dean Camera committed Aug 21, 2010 32  * \brief Common definitions and declarations for the library USB Audio 1.0 Class driver.  Dean Camera committed May 08, 2010 33  *  Dean Camera committed Aug 21, 2010 34  * Common definitions and declarations for the library USB Audio 1.0 Class driver.  Dean Camera committed May 08, 2010 35  *  Dean Camera committed Oct 24, 2010 36 37  * \note This file should not be included directly. It is automatically included as needed by the USB module driver * dispatch header located in LUFA/Drivers/USB.h.  Dean Camera committed May 08, 2010 38 39 40  */ /** \ingroup Group_USBClassAudio  Dean Camera committed Feb 19, 2011 41  * \defgroup Group_USBClassAudioCommon Common Class Definitions  Dean Camera committed May 08, 2010 42  *  Dean Camera committed Dec 26, 2010 43  * \section Sec_ModDescription Module Description  Dean Camera committed May 08, 2010 44  * Constants, Types and Enum definitions that are common to both Device and Host modes for the USB  Dean Camera committed Aug 21, 2010 45  * Audio 1.0 Class.  Dean Camera committed May 08, 2010 46 47 48 49 50 51 52 53  * * @{ */ #ifndef _AUDIO_CLASS_COMMON_H_ #define _AUDIO_CLASS_COMMON_H_ /* Includes: */  Dean Camera committed Feb 19, 2011 54  #include "../../Core/StdDescriptors.h"  55   Dean Camera committed May 08, 2010 56 57 58 59 60 61 62  /* Enable C linkage for C++ Compilers: */ #if defined(__cplusplus) extern "C" { #endif /* Preprocessor Checks: */ #if !defined(__INCLUDE_FROM_AUDIO_DRIVER)  Dean Camera committed Oct 24, 2010 63  #error Do not include this file directly. Include LUFA/Drivers/USB.h instead.  Dean Camera committed May 08, 2010 64 65 66  #endif /* Macros: */  Dean Camera committed Oct 28, 2010 67 68  /** \name Audio Channel Masks */ //@{  Dean Camera committed May 08, 2010 69  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 70  #define AUDIO_CHANNEL_LEFT_FRONT (1 << 0)  Dean Camera committed May 08, 2010 71 72  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 73  #define AUDIO_CHANNEL_RIGHT_FRONT (1 << 1)  Dean Camera committed May 08, 2010 74 75  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 76  #define AUDIO_CHANNEL_CENTER_FRONT (1 << 2)  Dean Camera committed May 08, 2010 77 78  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 79  #define AUDIO_CHANNEL_LOW_FREQ_ENHANCE (1 << 3)  Dean Camera committed May 08, 2010 80 81  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 82  #define AUDIO_CHANNEL_LEFT_SURROUND (1 << 4)  Dean Camera committed May 08, 2010 83 84  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 85  #define AUDIO_CHANNEL_RIGHT_SURROUND (1 << 5)  Dean Camera committed May 08, 2010 86 87  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 88  #define AUDIO_CHANNEL_LEFT_OF_CENTER (1 << 6)  Dean Camera committed May 08, 2010 89 90  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 91  #define AUDIO_CHANNEL_RIGHT_OF_CENTER (1 << 7)  Dean Camera committed May 08, 2010 92 93  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 94  #define AUDIO_CHANNEL_SURROUND (1 << 8)  Dean Camera committed May 08, 2010 95 96  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 97  #define AUDIO_CHANNEL_SIDE_LEFT (1 << 9)  Dean Camera committed May 08, 2010 98 99  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 100  #define AUDIO_CHANNEL_SIDE_RIGHT (1 << 10)  Dean Camera committed May 08, 2010 101 102  /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 103  #define AUDIO_CHANNEL_TOP (1 << 11)  Dean Camera committed Oct 28, 2010 104  //@}  Dean Camera committed May 08, 2010 105   Dean Camera committed Oct 28, 2010 106 107  /** \name Audio Feature Masks */ //@{  Dean Camera committed May 08, 2010 108  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 109  #define AUDIO_FEATURE_MUTE (1 << 0)  Dean Camera committed May 08, 2010 110 111  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 112  #define AUDIO_FEATURE_VOLUME (1 << 1)  Dean Camera committed May 08, 2010 113 114  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 115  #define AUDIO_FEATURE_BASS (1 << 2)  Dean Camera committed May 08, 2010 116 117  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 118  #define AUDIO_FEATURE_MID (1 << 3)  Dean Camera committed May 08, 2010 119 120  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 121  #define AUDIO_FEATURE_TREBLE (1 << 4)  Dean Camera committed May 08, 2010 122 123  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 124  #define AUDIO_FEATURE_GRAPHIC_EQUALIZER (1 << 5)  Dean Camera committed May 08, 2010 125 126  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 127  #define AUDIO_FEATURE_AUTOMATIC_GAIN (1 << 6)  Dean Camera committed May 08, 2010 128 129  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 130  #define AUDIO_FEATURE_DELAY (1 << 7)  Dean Camera committed May 08, 2010 131 132  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 133  #define AUDIO_FEATURE_BASS_BOOST (1 << 8)  Dean Camera committed May 08, 2010 134 135  /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 136  #define AUDIO_FEATURE_BASS_LOUDNESS (1 << 9)  Dean Camera committed Oct 28, 2010 137  //@}  Dean Camera committed May 08, 2010 138   Dean Camera committed Oct 28, 2010 139 140  /** \name Audio Terminal Types */ //@{  141  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 142  #define AUDIO_TERMINAL_UNDEFINED 0x0100  Dean Camera committed May 08, 2010 143   144  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 145  #define AUDIO_TERMINAL_STREAMING 0x0101  Dean Camera committed May 08, 2010 146   147  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 148  #define AUDIO_TERMINAL_VENDOR 0x01FF  Dean Camera committed May 08, 2010 149   150  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 151  #define AUDIO_TERMINAL_IN_UNDEFINED 0x0200  Dean Camera committed May 08, 2010 152   153  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 154  #define AUDIO_TERMINAL_IN_MIC 0x0201  Dean Camera committed May 08, 2010 155   156  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 157  #define AUDIO_TERMINAL_IN_DESKTOP_MIC 0x0202  Dean Camera committed May 08, 2010 158   159  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 160  #define AUDIO_TERMINAL_IN_PERSONAL_MIC 0x0203  Dean Camera committed May 08, 2010 161   162  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 163  #define AUDIO_TERMINAL_IN_OMNIDIR_MIC 0x0204  Dean Camera committed May 08, 2010 164   165  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 166  #define AUDIO_TERMINAL_IN_MIC_ARRAY 0x0205  Dean Camera committed May 08, 2010 167   168  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 169  #define AUDIO_TERMINAL_IN_PROCESSING_MIC 0x0206  Dean Camera committed May 08, 2010 170   171  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 172  #define AUDIO_TERMINAL_IN_OUT_UNDEFINED 0x0300  Dean Camera committed May 08, 2010 173   174  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 175  #define AUDIO_TERMINAL_OUT_SPEAKER 0x0301  Dean Camera committed May 08, 2010 176   177  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 178  #define AUDIO_TERMINAL_OUT_HEADPHONES 0x0302  Dean Camera committed May 08, 2010 179   180  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 181  #define AUDIO_TERMINAL_OUT_HEAD_MOUNTED 0x0303  Dean Camera committed May 08, 2010 182   183  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 184  #define AUDIO_TERMINAL_OUT_DESKTOP 0x0304  Dean Camera committed May 08, 2010 185   186  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 187  #define AUDIO_TERMINAL_OUT_ROOM 0x0305  Dean Camera committed May 08, 2010 188   189  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 190  #define AUDIO_TERMINAL_OUT_COMMUNICATION 0x0306  Dean Camera committed May 08, 2010 191   192  /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */  Dean Camera committed Sep 28, 2010 193  #define AUDIO_TERMINAL_OUT_LOWFREQ 0x0307  Dean Camera committed Oct 28, 2010 194  //@}  Dean Camera committed May 08, 2010 195   Dean Camera committed Sep 28, 2010 196  /** Convenience macro to fill a 24-bit \ref USB_Audio_SampleFreq_t structure with the given sample rate as a 24-bit number.  Dean Camera committed May 08, 2010 197 198 199  * * \param[in] freq Required audio sampling frequency in HZ */  Dean Camera committed Jun 03, 2011 200  #define AUDIO_SAMPLE_FREQ(freq) {.Byte1 = ((uint32_t)freq & 0xFF), .Byte2 = (((uint32_t)freq >> 8) & 0xFF), .Byte3 = (((uint32_t)freq >> 16) & 0xFF)}  201   Dean Camera committed Jun 17, 2010 202  /** Mask for the attributes parameter of an Audio class-specific Endpoint descriptor, indicating that the endpoint  Dean Camera committed May 08, 2010 203 204  * accepts only filled endpoint packets of audio samples. */  Dean Camera committed Sep 28, 2010 205  #define AUDIO_EP_FULL_PACKETS_ONLY (1 << 7)  Dean Camera committed May 08, 2010 206   Dean Camera committed Jun 17, 2010 207  /** Mask for the attributes parameter of an Audio class-specific Endpoint descriptor, indicating that the endpoint  Dean Camera committed May 08, 2010 208 209  * will accept partially filled endpoint packets of audio samples. */  Dean Camera committed Sep 28, 2010 210  #define AUDIO_EP_ACCEPTS_SMALL_PACKETS (0 << 7)  Dean Camera committed Jun 03, 2011 211 212 213 214 215 216 217 218 219 220  /** Mask for the attributes parameter of an Audio class-specific Endpoint descriptor, indicating that the endpoint * allows for sampling frequency adjustments to be made via control requests directed at the endpoint. */ #define AUDIO_EP_SAMPLE_FREQ_CONTROL (1 << 0) /** Mask for the attributes parameter of an Audio class-specific Endpoint descriptor, indicating that the endpoint * allows for pitch adjustments to be made via control requests directed at the endpoint. */ #define AUDIO_EP_PITCH_CONTROL (1 << 1)  Dean Camera committed May 29, 2011 221   222  /* Enums: */  Dean Camera committed Oct 25, 2010 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247  /** Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the Audio * device class. */ enum Audio_Descriptor_ClassSubclassProtocol_t { AUDIO_CSCP_AudioClass = 0x01, /**< Descriptor Class value indicating that the device or * interface belongs to the USB Audio 1.0 class. */ AUDIO_CSCP_ControlSubclass = 0x01, /**< Descriptor Subclass value indicating that the device or * interface belongs to the Audio Control subclass. */ AUDIO_CSCP_ControlProtocol = 0x00, /**< Descriptor Protocol value indicating that the device or * interface belongs to the Audio Control protocol. */ AUDIO_CSCP_AudioStreamingSubclass = 0x02, /**< Descriptor Subclass value indicating that the device or * interface belongs to the MIDI Streaming subclass. */ AUDIO_CSCP_MIDIStreamingSubclass = 0x03, /**< Descriptor Subclass value indicating that the device or * interface belongs to the Audio streaming subclass. */ AUDIO_CSCP_StreamingProtocol = 0x00, /**< Descriptor Protocol value indicating that the device or * interface belongs to the Streaming Audio protocol. */ };  248 249  /** Audio class specific interface description subtypes, for the Audio Control interface. */ enum Audio_CSInterface_AC_SubTypes_t  Dean Camera committed May 08, 2010 250  {  251 252 253 254 255 256 257 258 259 260 261 262  AUDIO_DSUBTYPE_CSInterface_Header = 0x01, /**< Audio class specific control interface header. */ AUDIO_DSUBTYPE_CSInterface_InputTerminal = 0x02, /**< Audio class specific control interface Input Terminal. */ AUDIO_DSUBTYPE_CSInterface_OutputTerminal = 0x03, /**< Audio class specific control interface Output Terminal. */ AUDIO_DSUBTYPE_CSInterface_Mixer = 0x04, /**< Audio class specific control interface Mixer Unit. */ AUDIO_DSUBTYPE_CSInterface_Selector = 0x05, /**< Audio class specific control interface Selector Unit. */ AUDIO_DSUBTYPE_CSInterface_Feature = 0x06, /**< Audio class specific control interface Feature Unit. */ AUDIO_DSUBTYPE_CSInterface_Processing = 0x07, /**< Audio class specific control interface Processing Unit. */ AUDIO_DSUBTYPE_CSInterface_Extension = 0x08, /**< Audio class specific control interface Extension Unit. */ }; /** Audio class specific interface description subtypes, for the Audio Streaming interface. */ enum Audio_CSInterface_AS_SubTypes_t  Dean Camera committed May 08, 2010 263  {  264 265 266 267  AUDIO_DSUBTYPE_CSInterface_General = 0x01, /**< Audio class specific streaming interface general descriptor. */ AUDIO_DSUBTYPE_CSInterface_FormatType = 0x02, /**< Audio class specific streaming interface format type descriptor. */ AUDIO_DSUBTYPE_CSInterface_FormatSpecific = 0x03, /**< Audio class specific streaming interface format information descriptor. */ };  Dean Camera committed May 08, 2010 268   269 270  /** Audio class specific endpoint description subtypes, for the Audio Streaming interface. */ enum Audio_CSEndpoint_SubTypes_t  Dean Camera committed Sep 09, 2010 271  {  272 273  AUDIO_DSUBTYPE_CSEndpoint_General = 0x01, /**< Audio class specific endpoint general descriptor. */ };  274   Dean Camera committed May 29, 2011 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289  /** Enum for the Audio class specific control requests that can be issued by the USB bus host. */ enum Audio_ClassRequests_t { AUDIO_REQ_SetCurrent = 0x01, /**< Audio class-specific request to set the current value of a parameter within the device. */ AUDIO_REQ_SetMinimum = 0x02, /**< Audio class-specific request to set the minimum value of a parameter within the device. */ AUDIO_REQ_SetMaximum = 0x03, /**< Audio class-specific request to set the maximum value of a parameter within the device. */ AUDIO_REQ_SetResolution = 0x04, /**< Audio class-specific request to set the resolution value of a parameter within the device. */ AUDIO_REQ_SetMemory = 0x05, /**< Audio class-specific request to set the memory value of a parameter within the device. */ AUDIO_REQ_GetCurrent = 0x81, /**< Audio class-specific request to get the current value of a parameter within the device. */ AUDIO_REQ_GetMinimum = 0x82, /**< Audio class-specific request to get the minimum value of a parameter within the device. */ AUDIO_REQ_GetMaximum = 0x83, /**< Audio class-specific request to get the maximum value of a parameter within the device. */ AUDIO_REQ_GetResolution = 0x84, /**< Audio class-specific request to get the resolution value of a parameter within the device. */ AUDIO_REQ_GetMemory = 0x85, /**< Audio class-specific request to get the memory value of a parameter within the device. */ AUDIO_REQ_GetStatus = 0xFF, /**< Audio class-specific request to get the device status. */ };  Dean Camera committed Jun 03, 2011 290 291 292 293 294 295 296 297 298  /** Enum for Audio class specific Endpoint control modifiers which can be set and retrieved by a USB host, if the corresponding * endpoint control is indicated to be supported in the Endpoint's Audio-class specific endpoint descriptor. */ enum Audio_EndpointControls_t { AUDIO_EPCONTROL_SamplingFreq = 0x01, /**< Sampling frequency adjustment of the endpoint. */ AUDIO_EPCONTROL_Pitch = 0x02, /**< Pitch adjustment of the endpoint. */ };  Dean Camera committed May 29, 2011 299   300  /* Type Defines: */  Dean Camera committed Sep 09, 2010 301  /** \brief Audio class-specific Input Terminal Descriptor (LUFA naming conventions).  Dean Camera committed May 08, 2010 302  *  Dean Camera committed Jun 17, 2010 303  * Type define for an Audio class-specific input terminal descriptor. This indicates to the host that the device  Dean Camera committed May 08, 2010 304 305  * contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example, * a USB endpoint). See the USB Audio specification for more details.  Dean Camera committed Sep 09, 2010 306 307  * * \see \ref USB_Audio_StdDescriptor_InputTerminal_t for the version of this type with standard element names.  Dean Camera committed May 08, 2010 308 309 310  */ typedef struct {  Dean Camera committed Sep 09, 2010 311  USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */  312 313 314  uint8_t Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * must be \ref AUDIO_DSUBTYPE_CSInterface_InputTerminal. */  315   Dean Camera committed Sep 09, 2010 316  uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device. */  Dean Camera committed Jan 08, 2011 317  uint16_t TerminalType; /**< Type of terminal, a \c TERMINAL_* mask. */  Dean Camera committed Sep 09, 2010 318  uint8_t AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals  Dean Camera committed Sep 09, 2010 319 320  * such as the speaker and microphone of a phone handset. */  Dean Camera committed Sep 09, 2010 321  uint8_t TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */  Dean Camera committed Jan 08, 2011 322  uint16_t ChannelConfig; /**< \c CHANNEL_* masks indicating what channel layout is supported by this terminal. */  323   Dean Camera committed Sep 09, 2010 324 325  uint8_t ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device. */ uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device. */  Dean Camera committed Mar 11, 2011 326  } ATTR_PACKED USB_Audio_Descriptor_InputTerminal_t;  Dean Camera committed May 08, 2010 327   Dean Camera committed Sep 09, 2010 328 329 330 331 332 333 334 335 336 337 338 339 340  /** \brief Audio class-specific Input Terminal Descriptor (USB-IF naming conventions). * * Type define for an Audio class-specific input terminal descriptor. This indicates to the host that the device * contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example, * a USB endpoint). See the USB Audio specification for more details. * * \see \ref USB_Audio_Descriptor_InputTerminal_t for the version of this type with non-standard LUFA specific * element names. */ typedef struct { uint8_t bLength; /**< Size of the descriptor, in bytes. */ uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value  Dean Camera committed Sep 09, 2010 341 342  * given by the specific class. */  Dean Camera committed Sep 09, 2010 343   344 345 346  uint8_t bDescriptorSubtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * must be \ref AUDIO_DSUBTYPE_CSInterface_InputTerminal. */  Dean Camera committed Sep 09, 2010 347  uint8_t bTerminalID; /**< ID value of this terminal unit - must be a unique value within the device. */  Dean Camera committed Jan 08, 2011 348  uint16_t wTerminalType; /**< Type of terminal, a \c TERMINAL_* mask. */  Dean Camera committed Sep 09, 2010 349 350 351 352  uint8_t bAssocTerminal; /**< ID of associated output terminal, for physically grouped terminals * such as the speaker and microphone of a phone handset. */ uint8_t bNrChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */  Dean Camera committed Jan 08, 2011 353  uint16_t wChannelConfig; /**< \c CHANNEL_* masks indicating what channel layout is supported by this terminal. */  354   Dean Camera committed Sep 09, 2010 355 356  uint8_t iChannelNames; /**< Index of a string descriptor describing this channel within the device. */ uint8_t iTerminal; /**< Index of a string descriptor describing this descriptor within the device. */  Dean Camera committed Mar 11, 2011 357  } ATTR_PACKED USB_Audio_StdDescriptor_InputTerminal_t;  Dean Camera committed Sep 09, 2010 358 359  /** \brief Audio class-specific Output Terminal Descriptor (LUFA naming conventions).  Dean Camera committed May 08, 2010 360  *  Dean Camera committed Jun 17, 2010 361  * Type define for an Audio class-specific output terminal descriptor. This indicates to the host that the device  Dean Camera committed May 08, 2010 362 363  * contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example, * a USB endpoint). See the USB Audio specification for more details.  Dean Camera committed Sep 09, 2010 364 365  * * \see \ref USB_Audio_StdDescriptor_OutputTerminal_t for the version of this type with standard element names.  Dean Camera committed May 08, 2010 366 367 368  */ typedef struct {  Dean Camera committed Sep 09, 2010 369  USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */  370 371 372  uint8_t Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * must be \ref AUDIO_DSUBTYPE_CSInterface_OutputTerminal. */  373   Dean Camera committed Sep 09, 2010 374  uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device. */  Dean Camera committed Jan 08, 2011 375  uint16_t TerminalType; /**< Type of terminal, a \c TERMINAL_* mask. */  Dean Camera committed Sep 09, 2010 376  uint8_t AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals  Dean Camera committed Jun 17, 2010 377  * such as the speaker and microphone of a phone handset.  Dean Camera committed May 08, 2010 378  */  Dean Camera committed Sep 09, 2010 379  uint8_t SourceID; /**< ID value of the unit this terminal's audio is sourced from. */  380   Dean Camera committed Sep 09, 2010 381  uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device. */  Dean Camera committed Mar 11, 2011 382  } ATTR_PACKED USB_Audio_Descriptor_OutputTerminal_t;  Dean Camera committed Sep 09, 2010 383 384 385 386 387 388 389 390 391 392 393 394 395  /** \brief Audio class-specific Output Terminal Descriptor (USB-IF naming conventions). * * Type define for an Audio class-specific output terminal descriptor. This indicates to the host that the device * contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example, * a USB endpoint). See the USB Audio specification for more details. * * \see \ref USB_Audio_Descriptor_OutputTerminal_t for the version of this type with non-standard LUFA specific * element names. */ typedef struct { uint8_t bLength; /**< Size of the descriptor, in bytes. */  396 397  uint8_t bDescriptorType; /**< Sub type value used to distinguish between audio class-specific descriptors, * must be \ref AUDIO_DSUBTYPE_CSInterface_OutputTerminal.  Dean Camera committed Sep 09, 2010 398  */  Dean Camera committed Sep 09, 2010 399   400 401 402  uint8_t bDescriptorSubtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * a value from the \ref Audio_CSInterface_AC_SubTypes_t enum. */  Dean Camera committed Sep 09, 2010 403  uint8_t bTerminalID; /**< ID value of this terminal unit - must be a unique value within the device. */  Dean Camera committed Jan 08, 2011 404  uint16_t wTerminalType; /**< Type of terminal, a \c TERMINAL_* mask. */  Dean Camera committed Sep 09, 2010 405 406 407 408  uint8_t bAssocTerminal; /**< ID of associated input terminal, for physically grouped terminals * such as the speaker and microphone of a phone handset. */ uint8_t bSourceID; /**< ID value of the unit this terminal's audio is sourced from. */  409   Dean Camera committed Sep 09, 2010 410  uint8_t iTerminal; /**< Index of a string descriptor describing this descriptor within the device. */  Dean Camera committed Mar 11, 2011 411  } ATTR_PACKED USB_Audio_StdDescriptor_OutputTerminal_t;  412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429  /** \brief Audio class-specific Interface Descriptor (LUFA naming conventions). * * Type define for an Audio class-specific interface descriptor. This follows a regular interface descriptor to * supply extra information about the audio device's layout to the host. See the USB Audio specification for more * details. * * \see \ref USB_Audio_StdDescriptor_Interface_AC_t for the version of this type with standard element names. */ typedef struct { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * a value from the \ref Audio_CSInterface_AS_SubTypes_t enum. */ uint16_t ACSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version. */ uint16_t TotalLength; /**< Total length of the Audio class-specific descriptors, including this descriptor. */  430   431 432  uint8_t InCollection; /**< Total number of Audio Streaming interfaces linked to this Audio Control interface (must be 1). */ uint8_t InterfaceNumber; /**< Interface number of the associated Audio Streaming interface. */  Dean Camera committed Mar 11, 2011 433  } ATTR_PACKED USB_Audio_Descriptor_Interface_AC_t;  434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456  /** \brief Audio class-specific Interface Descriptor (USB-IF naming conventions). * * Type define for an Audio class-specific interface descriptor. This follows a regular interface descriptor to * supply extra information about the audio device's layout to the host. See the USB Audio specification for more * details. * * \see \ref USB_Audio_Descriptor_Interface_AC_t for the version of this type with non-standard LUFA specific * element names. */ typedef struct { uint8_t bLength; /**< Size of the descriptor, in bytes. */ uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value * given by the specific class. */ uint8_t bDescriptorSubtype;/**< Sub type value used to distinguish between audio class-specific descriptors, * a value from the \ref Audio_CSInterface_AS_SubTypes_t enum. */ uint16_t bcdADC; /**< Binary coded decimal value, indicating the supported Audio Class specification version. */ uint16_t wTotalLength; /**< Total length of the Audio class-specific descriptors, including this descriptor. */  457   458 459  uint8_t bInCollection; /**< Total number of Audio Streaming interfaces linked to this Audio Control interface (must be 1). */ uint8_t bInterfaceNumbers; /**< Interface number of the associated Audio Streaming interface. */  Dean Camera committed Mar 11, 2011 460  } ATTR_PACKED USB_Audio_StdDescriptor_Interface_AC_t;  461   462 463 464 465 466 467 468 469 470 471 472 473 474 475  /** \brief Audio class-specific Feature Unit Descriptor (LUFA naming conventions). * * Type define for an Audio class-specific Feature Unit descriptor. This indicates to the host what features * are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio * specification for more details. * * \see \ref USB_Audio_StdDescriptor_FeatureUnit_t for the version of this type with standard element names. */ typedef struct { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * must be \ref AUDIO_DSUBTYPE_CSInterface_Feature. */  476   477 478  uint8_t UnitID; /**< ID value of this feature unit - must be a unique value within the device. */ uint8_t SourceID; /**< Source ID value of the audio source input into this feature unit. */  479   Dean Camera committed Jan 08, 2011 480  uint8_t ControlSize; /**< Size of each element in the \c ChanelControlls array. */  481  uint8_t ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel. */  482   483  uint8_t FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device. */  Dean Camera committed Mar 11, 2011 484  } ATTR_PACKED USB_Audio_Descriptor_FeatureUnit_t;  485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504  /** \brief Audio class-specific Feature Unit Descriptor (USB-IF naming conventions). * * Type define for an Audio class-specific Feature Unit descriptor. This indicates to the host what features * are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio * specification for more details. * * \see \ref USB_Audio_Descriptor_FeatureUnit_t for the version of this type with non-standard LUFA specific * element names. */ typedef struct { uint8_t bLength; /**< Size of the descriptor, in bytes. */ uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value * given by the specific class. */ uint8_t bDescriptorSubtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * must be \ref AUDIO_DSUBTYPE_CSInterface_Feature. */  505   506 507  uint8_t bUnitID; /**< ID value of this feature unit - must be a unique value within the device. */ uint8_t bSourceID; /**< Source ID value of the audio source input into this feature unit. */  508   Dean Camera committed Jan 08, 2011 509  uint8_t bControlSize; /**< Size of each element in the \c ChanelControlls array. */  510  uint8_t bmaControls[3]; /**< Feature masks for the control channel, and each separate audio channel. */  511   512  uint8_t iFeature; /**< Index of a string descriptor describing this descriptor within the device. */  Dean Camera committed Mar 11, 2011 513  } ATTR_PACKED USB_Audio_StdDescriptor_FeatureUnit_t;  514   Dean Camera committed Sep 09, 2010 515  /** \brief Audio class-specific Streaming Audio Interface Descriptor (LUFA naming conventions).  Dean Camera committed May 08, 2010 516  *  Dean Camera committed Jun 17, 2010 517  * Type define for an Audio class-specific streaming interface descriptor. This indicates to the host  Dean Camera committed May 08, 2010 518  * how audio streams within the device are formatted. See the USB Audio specification for more details.  Dean Camera committed Sep 09, 2010 519 520  * * \see \ref USB_Audio_StdDescriptor_Interface_AS_t for the version of this type with standard element names.  Dean Camera committed May 08, 2010 521 522 523  */ typedef struct {  Dean Camera committed Sep 09, 2010 524  USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */  525 526 527  uint8_t Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * a value from the \ref Audio_CSInterface_AS_SubTypes_t enum. */  528   Dean Camera committed Sep 09, 2010 529  uint8_t TerminalLink; /**< ID value of the output terminal this descriptor is describing. */  530   Dean Camera committed Sep 09, 2010 531 532  uint8_t FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output. */ uint16_t AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification. */  Dean Camera committed Mar 11, 2011 533  } ATTR_PACKED USB_Audio_Descriptor_Interface_AS_t;  Dean Camera committed Sep 09, 2010 534 535 536 537 538 539 540 541 542 543 544 545 546  /** \brief Audio class-specific Streaming Audio Interface Descriptor (USB-IF naming conventions). * * Type define for an Audio class-specific streaming interface descriptor. This indicates to the host * how audio streams within the device are formatted. See the USB Audio specification for more details. * * \see \ref USB_Audio_Descriptor_Interface_AS_t for the version of this type with non-standard LUFA specific * element names. */ typedef struct { uint8_t bLength; /**< Size of the descriptor, in bytes. */ uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value  Dean Camera committed Sep 09, 2010 547 548  * given by the specific class. */  Dean Camera committed Sep 09, 2010 549   550 551 552  uint8_t bDescriptorSubtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * a value from the \ref Audio_CSInterface_AS_SubTypes_t enum. */  553   Dean Camera committed Sep 09, 2010 554  uint8_t bTerminalLink; /**< ID value of the output terminal this descriptor is describing. */  555   Dean Camera committed Sep 09, 2010 556 557  uint8_t bDelay; /**< Delay in frames resulting from the complete sample processing from input to output. */ uint16_t wFormatTag; /**< Format of the audio stream, see Audio Device Formats specification. */  Dean Camera committed Mar 11, 2011 558  } ATTR_PACKED USB_Audio_StdDescriptor_Interface_AS_t;  559   Dean Camera committed Sep 09, 2010 560  /** \brief Audio class-specific Format Descriptor (LUFA naming conventions).  Dean Camera committed May 08, 2010 561  *  Dean Camera committed Jun 17, 2010 562  * Type define for an Audio class-specific audio format descriptor. This is used to give the host full details  Dean Camera committed May 08, 2010 563 564  * about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used * in the device's audio streams. See the USB Audio specification for more details.  Dean Camera committed Sep 09, 2010 565  *  Dean Camera committed May 30, 2011 566 567 568  * \note This descriptor must be followed by one or more \ref USB_Audio_SampleFreq_t elements containing * the continuous or discrete sample frequencies. *  Dean Camera committed Sep 09, 2010 569  * \see \ref USB_Audio_StdDescriptor_Format_t for the version of this type with standard element names.  Dean Camera committed May 08, 2010 570 571 572  */ typedef struct {  Dean Camera committed Sep 09, 2010 573  USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */  574 575 576  uint8_t Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * must be \ref AUDIO_DSUBTYPE_CSInterface_FormatType. */  577   Dean Camera committed Sep 09, 2010 578 579  uint8_t FormatType; /**< Format of the audio stream, see Audio Device Formats specification. */ uint8_t Channels; /**< Total number of discrete channels in the stream. */  580   Dean Camera committed Sep 09, 2010 581 582 583  uint8_t SubFrameSize; /**< Size in bytes of each channel's sample data in the stream. */ uint8_t BitResolution; /**< Bits of resolution of each channel's samples in the stream. */  Dean Camera committed May 30, 2011 584 585 586 587 588  uint8_t TotalDiscreteSampleRates; /**< Total number of discrete sample frequencies supported by the device. When * zero, this must be followed by the lower and upper continuous sampling * frequencies supported by the device; otherwise, this must be followed * by the given number of discrete sampling frequencies supported. */  Dean Camera committed Mar 11, 2011 589  } ATTR_PACKED USB_Audio_Descriptor_Format_t;  Dean Camera committed Sep 09, 2010 590   Dean Camera committed Jun 03, 2011 591 592 593 594 595 596 597 598 599 600 601 602  /** \brief 24-Bit Audio Frequency Structure. * * Type define for a 24bit audio sample frequency structure. As GCC does not contain a built in 24-bit datatype, * this this structure is used to build up the value instead. Fill this structure with the \ref AUDIO_SAMPLE_FREQ() macro. */ typedef struct { uint8_t Byte1; /**< Lowest 8 bits of the 24-bit value. */ uint8_t Byte2; /**< Middle 8 bits of the 24-bit value. */ uint8_t Byte3; /**< Upper 8 bits of the 24-bit value. */ } ATTR_PACKED USB_Audio_SampleFreq_t;  Dean Camera committed Sep 09, 2010 603 604 605 606 607 608  /** \brief Audio class-specific Format Descriptor (USB-IF naming conventions). * * Type define for an Audio class-specific audio format descriptor. This is used to give the host full details * about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used * in the device's audio streams. See the USB Audio specification for more details. *  Dean Camera committed May 30, 2011 609 610 611  * \note This descriptor must be followed by one or more 24-bit integer elements containing the continuous * or discrete sample frequencies. *  Dean Camera committed Sep 09, 2010 612 613 614 615 616  * \see \ref USB_Audio_Descriptor_Format_t for the version of this type with non-standard LUFA specific * element names. */ typedef struct {  617 618 619 620  uint8_t bLength; /**< Size of the descriptor, in bytes. */ uint8_t bDescriptorType; /**< Sub type value used to distinguish between audio class-specific descriptors, * must be \ref AUDIO_DSUBTYPE_CSInterface_FormatType. */  Dean Camera committed May 08, 2010 621   622 623 624  uint8_t bDescriptorSubtype;/**< Sub type value used to distinguish between audio class-specific descriptors, * a value from the \ref Audio_CSInterface_AS_SubTypes_t enum. */  Dean Camera committed Sep 09, 2010 625   626 627  uint8_t bFormatType; /**< Format of the audio stream, see Audio Device Formats specification. */ uint8_t bNrChannels; /**< Total number of discrete channels in the stream. */  628   629 630  uint8_t bSubFrameSize; /**< Size in bytes of each channel's sample data in the stream. */ uint8_t bBitResolution; /**< Bits of resolution of each channel's samples in the stream. */  Dean Camera committed May 08, 2010 631   Dean Camera committed May 30, 2011 632 633 634 635 636  uint8_t bSampleFrequencyType; /**< Total number of sample frequencies supported by the device. When * zero, this must be followed by the lower and upper continuous sampling * frequencies supported by the device; otherwise, this must be followed * by the given number of discrete sampling frequencies supported. */  Dean Camera committed Mar 11, 2011 637  } ATTR_PACKED USB_Audio_StdDescriptor_Format_t;  638   Dean Camera committed Sep 09, 2010 639  /** \brief Audio class-specific Streaming Endpoint Descriptor (LUFA naming conventions).  Dean Camera committed May 08, 2010 640  *  641  * Type define for an Audio class-specific endpoint descriptor. This contains a regular endpoint  Dean Camera committed Jun 17, 2010 642  * descriptor with a few Audio-class-specific extensions. See the USB Audio specification for more details.  Dean Camera committed Sep 09, 2010 643 644  * * \see \ref USB_Audio_StdDescriptor_StreamEndpoint_Std_t for the version of this type with standard element names.  Dean Camera committed May 08, 2010 645 646 647  */ typedef struct {  Dean Camera committed Jun 17, 2010 648  USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint. */  Dean Camera committed May 08, 2010 649   Dean Camera committed Jun 17, 2010 650 651  uint8_t Refresh; /**< Always set to zero for Audio class devices. */ uint8_t SyncEndpointNumber; /**< Endpoint address to send synchronization information to, if needed (zero otherwise). */  Dean Camera committed Mar 11, 2011 652  } ATTR_PACKED USB_Audio_Descriptor_StreamEndpoint_Std_t;  Dean Camera committed Sep 09, 2010 653 654 655  /** \brief Audio class-specific Streaming Endpoint Descriptor (USB-IF naming conventions). *  656  * Type define for an Audio class-specific endpoint descriptor. This contains a regular endpoint  Dean Camera committed Sep 09, 2010 657 658 659 660 661 662 663 664 665  * descriptor with a few Audio-class-specific extensions. See the USB Audio specification for more details. * * \see \ref USB_Audio_Descriptor_StreamEndpoint_Std_t for the version of this type with non-standard LUFA specific * element names. */ typedef struct { uint8_t bLength; /**< Size of the descriptor, in bytes. */ uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a  Dean Camera committed Sep 09, 2010 666 667  * value given by the specific class. */  668  uint8_t bEndpointAddress; /**< Logical address of the endpoint within the device for the current  Dean Camera committed Sep 09, 2010 669 670  * configuration, including direction mask. */  Dean Camera committed Jan 08, 2011 671 672  uint8_t bmAttributes; /**< Endpoint attributes, comprised of a mask of the endpoint type (\c EP_TYPE_*) * and attributes (\c ENDPOINT_ATTR_*) masks.  Dean Camera committed Sep 09, 2010 673  */  Dean Camera committed Sep 09, 2010 674  uint16_t wMaxPacketSize; /**< Size of the endpoint bank, in bytes. This indicates the maximum packet size  Dean Camera committed Sep 09, 2010 675 676  * that the endpoint can receive at a time. */  Dean Camera committed Sep 09, 2010 677  uint8_t bInterval; /**< Polling interval in milliseconds for the endpoint if it is an INTERRUPT or  Dean Camera committed Sep 09, 2010 678 679  * ISOCHRONOUS type. */  680   Dean Camera committed Sep 09, 2010 681 682  uint8_t bRefresh; /**< Always set to zero for Audio class devices. */ uint8_t bSynchAddress; /**< Endpoint address to send synchronization information to, if needed (zero otherwise). */  Dean Camera committed Mar 11, 2011 683  } ATTR_PACKED USB_Audio_StdDescriptor_StreamEndpoint_Std_t;  Dean Camera committed Sep 09, 2010 684   Dean Camera committed Sep 09, 2010 685  /** \brief Audio class-specific Extended Endpoint Descriptor (LUFA naming conventions).  Dean Camera committed May 08, 2010 686  *  Dean Camera committed Jun 17, 2010 687  * Type define for an Audio class-specific extended endpoint descriptor. This contains extra information  Dean Camera committed May 08, 2010 688  * on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio  Dean Camera committed Jun 17, 2010 689  * class-specific extended endpoint descriptor. See the USB Audio specification for more details.  Dean Camera committed Sep 09, 2010 690 691  * * \see \ref USB_Audio_StdDescriptor_StreamEndpoint_Spc_t for the version of this type with standard element names.  Dean Camera committed May 08, 2010 692 693 694  */ typedef struct {  695 696 697 698  USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * a value from the \ref Audio_CSEndpoint_SubTypes_t enum. */  699   Dean Camera committed Jan 08, 2011 700  uint8_t Attributes; /**< Audio class-specific endpoint attributes, such as \ref AUDIO_EP_FULL_PACKETS_ONLY. */  Dean Camera committed May 08, 2010 701   702 703  uint8_t LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification. */ uint16_t LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry. */  Dean Camera committed Mar 11, 2011 704  } ATTR_PACKED USB_Audio_Descriptor_StreamEndpoint_Spc_t;  Dean Camera committed May 08, 2010 705   Dean Camera committed Sep 09, 2010 706 707 708 709 710 711 712 713 714 715 716 717 718  /** \brief Audio class-specific Extended Endpoint Descriptor (USB-IF naming conventions). * * Type define for an Audio class-specific extended endpoint descriptor. This contains extra information * on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio * class-specific extended endpoint descriptor. See the USB Audio specification for more details. * * \see \ref USB_Audio_Descriptor_StreamEndpoint_Spc_t for the version of this type with non-standard LUFA specific * element names. */ typedef struct { uint8_t bLength; /**< Size of the descriptor, in bytes. */ uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value  Dean Camera committed Sep 09, 2010 719 720  * given by the specific class. */  Dean Camera committed Sep 09, 2010 721   722 723 724  uint8_t bDescriptorSubtype; /**< Sub type value used to distinguish between audio class-specific descriptors, * a value from the \ref Audio_CSEndpoint_SubTypes_t enum. */  725   Dean Camera committed Jan 08, 2011 726  uint8_t bmAttributes; /**< Audio class-specific endpoint attributes, such as \ref AUDIO_EP_FULL_PACKETS_ONLY. */  Dean Camera committed Sep 09, 2010 727 728 729  uint8_t bLockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification. */ uint16_t wLockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry. */  Dean Camera committed Mar 11, 2011 730  } ATTR_PACKED USB_Audio_StdDescriptor_StreamEndpoint_Spc_t;  731   Dean Camera committed May 08, 2010 732 733 734 735  /* Disable C linkage for C++ Compilers: */ #if defined(__cplusplus) } #endif  736   Dean Camera committed May 08, 2010 737 738 739 #endif /** @} */  740