@ -73,30 +73,6 @@
# define AUDIO_TOTAL_SAMPLE_RATES 1
# define AUDIO_TOTAL_SAMPLE_RATES 1
# endif
# endif
/** Descriptor header constant to indicate a Audio class interface descriptor. */
# define DTYPE_AudioInterface 0x24
/** Descriptor header constant to indicate a Audio class endpoint descriptor. */
# define DTYPE_AudioEndpoint 0x25
/** Audio class descriptor subtype value for a Audio class-specific header descriptor. */
# define DSUBTYPE_Header 0x01
/** Audio class descriptor subtype value for an Output Terminal Audio class-specific descriptor. */
# define DSUBTYPE_InputTerminal 0x02
/** Audio class descriptor subtype value for an Input Terminal Audio class-specific descriptor. */
# define DSUBTYPE_OutputTerminal 0x03
/** Audio class descriptor subtype value for a Feature Unit Audio class-specific descriptor. */
# define DSUBTYPE_FeatureUnit 0x06
/** Audio class descriptor subtype value for a general Audio class-specific descriptor. */
# define DSUBTYPE_General 0x01
/** Audio class descriptor subtype value for an Audio class-specific descriptor indicating the format of an audio stream. */
# define DSUBTYPE_Format 0x02
/** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
/** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */
# define CHANNEL_LEFT_FRONT (1 << 0)
# define CHANNEL_LEFT_FRONT (1 << 0)
@ -151,8 +127,6 @@
/** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
/** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
# define FEATURE_GRAPHIC_EQUALIZER (1 << 5)
# define FEATURE_GRAPHIC_EQUALIZER (1 << 5)
/** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
/** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
/** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */
# define FEATURE_AUTOMATIC_GAIN (1 << 6)
# define FEATURE_AUTOMATIC_GAIN (1 << 6)
@ -235,101 +209,35 @@
*/
*/
# define EP_ACCEPTS_SMALL_PACKETS (0 << 7)
# define EP_ACCEPTS_SMALL_PACKETS (0 << 7)
/* Type Defines: */
/* Enums: */
/** \brief Audio class-specific Interface Descriptor (LUFA naming conventions).
/** Audio class specific interface description subtypes, for the Audio Control interface. */
*
enum Audio_CSInterface_AC_SubTypes_t
* 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. */
AUDIO_DSUBTYPE_CSInterface_Header = 0x01 , /**< Audio class specific control interface header. */
uint8_t Subtype ; /**< Sub type value used to distinguish between audio class-specific descriptors. */
AUDIO_DSUBTYPE_CSInterface_InputTerminal = 0x02 , /**< Audio class specific control interface Input Terminal. */
AUDIO_DSUBTYPE_CSInterface_OutputTerminal = 0x03 , /**< Audio class specific control interface Output Terminal. */
uint16_t ACSpecification ; /**< Binary coded decimal value, indicating the supported Audio Class specification version. */
AUDIO_DSUBTYPE_CSInterface_Mixer = 0x04 , /**< Audio class specific control interface Mixer Unit. */
uint16_t TotalLength ; /**< Total length of the Audio class-specific descriptors, including this descriptor. */
AUDIO_DSUBTYPE_CSInterface_Selector = 0x05 , /**< Audio class specific control interface Selector Unit. */
AUDIO_DSUBTYPE_CSInterface_Feature = 0x06 , /**< Audio class specific control interface Feature Unit. */
uint8_t InCollection ; /**< Total number of audio class interfaces within this device. */
AUDIO_DSUBTYPE_CSInterface_Processing = 0x07 , /**< Audio class specific control interface Processing Unit. */
uint8_t InterfaceNumbers [ 1 ] ; /**< Interface numbers of each audio interface. */
AUDIO_DSUBTYPE_CSInterface_Extension = 0x08 , /**< Audio class specific control interface Extension Unit. */
} USB_Audio_Descriptor_Interface_AC_t ;
} ;
/** \brief Audio class-specific Interface Descriptor (USB-IF naming conventions).
/** Audio class specific interface description subtypes, for the Audio Streaming interface. */
*
enum Audio_CSInterface_AS_SubTypes_t
* 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. */
AUDIO_DSUBTYPE_CSInterface_General = 0x01 , /**< Audio class specific streaming interface general descriptor. */
uint8_t bDescriptorType ; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
AUDIO_DSUBTYPE_CSInterface_FormatType = 0x02 , /**< Audio class specific streaming interface format type descriptor. */
* given by the specific class .
AUDIO_DSUBTYPE_CSInterface_FormatSpecific = 0x03 , /**< Audio class specific streaming interface format information descriptor. */
*/
} ;
uint8_t bDescriptorSubtype ; /**< Sub type value used to distinguish between audio class-specific descriptors. */
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. */
uint8_t bInCollection ; /**< Total number of audio class interfaces within this device. */
uint8_t bInterfaceNumbers [ 1 ] ; /**< Interface numbers of each audio interface. */
} USB_Audio_StdDescriptor_Interface_AC_t ;
/** \brief Audio class-specific Feature Unit Descriptor (LUFA naming conventions).
/** Audio class specific endpoint description subtypes, for the Audio Streaming interface. */
*
enum Audio_CSEndpoint_SubTypes_t
* 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. */
AUDIO_DSUBTYPE_CSEndpoint_General = 0x01 , /**< Audio class specific endpoint general descriptor. */
uint8_t Subtype ; /**< Sub type value used to distinguish between audio class-specific descriptors. */
} ;
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. */
uint8_t ControlSize ; /**< Size of each element in the ChanelControlls array. */
uint8_t ChannelControls [ 3 ] ; /**< Feature masks for the control channel, and each separate audio channel. */
uint8_t FeatureUnitStrIndex ; /**< Index of a string descriptor describing this descriptor within the device. */
} USB_Audio_Descriptor_FeatureUnit_t ;
/** \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. */
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. */
uint8_t bControlSize ; /**< Size of each element in the ChanelControlls array. */
uint8_t bmaControls [ 3 ] ; /**< Feature masks for the control channel, and each separate audio channel. */
uint8_t iFeature ; /**< Index of a string descriptor describing this descriptor within the device. */
} USB_Audio_StdDescriptor_FeatureUnit_t ;
/* Type Defines: */
/** \brief Audio class-specific Input Terminal Descriptor (LUFA naming conventions).
/** \brief Audio class-specific Input Terminal Descriptor (LUFA naming conventions).
*
*
* Type define for an Audio class - specific input terminal descriptor . This indicates to the host that the device
* Type define for an Audio class - specific input terminal descriptor . This indicates to the host that the device
@ -341,7 +249,9 @@
typedef struct
typedef struct
{
{
USB_Descriptor_Header_t Header ; /**< Regular descriptor header containing the descriptor's type and length. */
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. */
uint8_t Subtype ; /**< Sub type value used to distinguish between audio class-specific descriptors,
* must be \ ref AUDIO_DSUBTYPE_CSInterface_InputTerminal .
*/
uint8_t TerminalID ; /**< ID value of this terminal unit - must be a unique value within the device. */
uint8_t TerminalID ; /**< ID value of this terminal unit - must be a unique value within the device. */
uint16_t TerminalType ; /**< Type of terminal, a TERMINAL_* mask. */
uint16_t TerminalType ; /**< Type of terminal, a TERMINAL_* mask. */
@ -371,7 +281,9 @@
* given by the specific class .
* given by the specific class .
*/
*/
uint8_t bDescriptorSubtype ; /**< Sub type value used to distinguish between audio class-specific descriptors. */
uint8_t bDescriptorSubtype ; /**< Sub type value used to distinguish between audio class-specific descriptors,
* must be \ ref AUDIO_DSUBTYPE_CSInterface_InputTerminal .
*/
uint8_t bTerminalID ; /**< ID value of this terminal unit - must be a unique value within the device. */
uint8_t bTerminalID ; /**< ID value of this terminal unit - must be a unique value within the device. */
uint16_t wTerminalType ; /**< Type of terminal, a TERMINAL_* mask. */
uint16_t wTerminalType ; /**< Type of terminal, a TERMINAL_* mask. */
uint8_t bAssocTerminal ; /**< ID of associated output terminal, for physically grouped terminals
uint8_t bAssocTerminal ; /**< ID of associated output terminal, for physically grouped terminals
@ -395,7 +307,9 @@
typedef struct
typedef struct
{
{
USB_Descriptor_Header_t Header ; /**< Regular descriptor header containing the descriptor's type and length. */
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. */
uint8_t Subtype ; /**< Sub type value used to distinguish between audio class-specific descriptors,
* must be \ ref AUDIO_DSUBTYPE_CSInterface_OutputTerminal .
*/
uint8_t TerminalID ; /**< ID value of this terminal unit - must be a unique value within the device. */
uint8_t TerminalID ; /**< ID value of this terminal unit - must be a unique value within the device. */
uint16_t TerminalType ; /**< Type of terminal, a TERMINAL_* mask. */
uint16_t TerminalType ; /**< Type of terminal, a TERMINAL_* mask. */
@ -419,11 +333,13 @@
typedef struct
typedef struct
{
{
uint8_t bLength ; /**< Size of the descriptor, in bytes. */
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
uint8_t bDescriptorType ; /**< Sub type value used to distinguish between audio class-specific descriptors,
* given by the specific class .
* must be \ ref AUDIO_DSUBTYPE_CSInterface_OutputTerminal .
*/
*/
uint8_t bDescriptorSubtype ; /**< Sub type value used to distinguish between audio class-specific descriptors. */
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 .
*/
uint8_t bTerminalID ; /**< ID value of this terminal unit - must be a unique value within the device. */
uint8_t bTerminalID ; /**< ID value of this terminal unit - must be a unique value within the device. */
uint16_t wTerminalType ; /**< Type of terminal, a TERMINAL_* mask. */
uint16_t wTerminalType ; /**< Type of terminal, a TERMINAL_* mask. */
uint8_t bAssocTerminal ; /**< ID of associated input terminal, for physically grouped terminals
uint8_t bAssocTerminal ; /**< ID of associated input terminal, for physically grouped terminals
@ -434,6 +350,108 @@
uint8_t iTerminal ; /**< Index of a string descriptor describing this descriptor within the device. */
uint8_t iTerminal ; /**< Index of a string descriptor describing this descriptor within the device. */
} USB_Audio_StdDescriptor_OutputTerminal_t ;
} USB_Audio_StdDescriptor_OutputTerminal_t ;
/** \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. */
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. */
} USB_Audio_Descriptor_Interface_AC_t ;
/** \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. */
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. */
} USB_Audio_StdDescriptor_Interface_AC_t ;
/** \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 .
*/
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. */
uint8_t ControlSize ; /**< Size of each element in the ChanelControlls array. */
uint8_t ChannelControls [ 3 ] ; /**< Feature masks for the control channel, and each separate audio channel. */
uint8_t FeatureUnitStrIndex ; /**< Index of a string descriptor describing this descriptor within the device. */
} USB_Audio_Descriptor_FeatureUnit_t ;
/** \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 .
*/
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. */
uint8_t bControlSize ; /**< Size of each element in the ChanelControlls array. */
uint8_t bmaControls [ 3 ] ; /**< Feature masks for the control channel, and each separate audio channel. */
uint8_t iFeature ; /**< Index of a string descriptor describing this descriptor within the device. */
} USB_Audio_StdDescriptor_FeatureUnit_t ;
/** \brief Audio class-specific Streaming Audio Interface Descriptor (LUFA naming conventions).
/** \brief Audio class-specific Streaming Audio Interface Descriptor (LUFA naming conventions).
*
*
* Type define for an Audio class - specific streaming interface descriptor . This indicates to the host
* Type define for an Audio class - specific streaming interface descriptor . This indicates to the host
@ -444,7 +462,9 @@
typedef struct
typedef struct
{
{
USB_Descriptor_Header_t Header ; /**< Regular descriptor header containing the descriptor's type and length. */
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. */
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 .
*/
uint8_t TerminalLink ; /**< ID value of the output terminal this descriptor is describing. */
uint8_t TerminalLink ; /**< ID value of the output terminal this descriptor is describing. */
@ -467,7 +487,9 @@
* given by the specific class .
* given by the specific class .
*/
*/
uint8_t bDescriptorSubtype ; /**< Sub type value used to distinguish between audio class-specific descriptors. */
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 .
*/
uint8_t bTerminalLink ; /**< ID value of the output terminal this descriptor is describing. */
uint8_t bTerminalLink ; /**< ID value of the output terminal this descriptor is describing. */
@ -497,7 +519,9 @@
typedef struct
typedef struct
{
{
USB_Descriptor_Header_t Header ; /**< Regular descriptor header containing the descriptor's type and length. */
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. */
uint8_t Subtype ; /**< Sub type value used to distinguish between audio class-specific descriptors,
* must be \ ref AUDIO_DSUBTYPE_CSInterface_FormatType .
*/
uint8_t FormatType ; /**< Format of the audio stream, see Audio Device Formats specification. */
uint8_t FormatType ; /**< Format of the audio stream, see Audio Device Formats specification. */
uint8_t Channels ; /**< Total number of discrete channels in the stream. */
uint8_t Channels ; /**< Total number of discrete channels in the stream. */
@ -521,11 +545,13 @@
typedef struct
typedef struct
{
{
uint8_t bLength ; /**< Size of the descriptor, in bytes. */
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
uint8_t bDescriptorType ; /**< Sub type value used to distinguish between audio class-specific descriptors,
* given by the specific class .
* must be \ ref AUDIO_DSUBTYPE_CSInterface_FormatType .
*/
*/
uint8_t bDescriptorSubtype ; /**< Sub type value used to distinguish between audio class-specific descriptors. */
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 .
*/
uint8_t bFormatType ; /**< Format of the audio stream, see Audio Device Formats specification. */
uint8_t bFormatType ; /**< Format of the audio stream, see Audio Device Formats specification. */
uint8_t bNrChannels ; /**< Total number of discrete channels in the stream. */
uint8_t bNrChannels ; /**< Total number of discrete channels in the stream. */
@ -594,7 +620,9 @@
typedef struct
typedef struct
{
{
USB_Descriptor_Header_t Header ; /**< Regular descriptor header containing the descriptor's type and length. */
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. */
uint8_t Subtype ; /**< Sub type value used to distinguish between audio class-specific descriptors,
* a value from the \ ref Audio_CSEndpoint_SubTypes_t enum .
*/
uint8_t Attributes ; /**< Audio class-specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS. */
uint8_t Attributes ; /**< Audio class-specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS. */
@ -618,7 +646,9 @@
* given by the specific class .
* given by the specific class .
*/
*/
uint8_t bDescriptorSubtype ; /**< Sub type value used to distinguish between audio class-specific descriptors. */
uint8_t bDescriptorSubtype ; /**< Sub type value used to distinguish between audio class-specific descriptors,
* a value from the \ ref Audio_CSEndpoint_SubTypes_t enum .
*/
uint8_t bmAttributes ; /**< Audio class-specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS. */
uint8_t bmAttributes ; /**< Audio class-specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS. */