X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/5a4def747897c1c6ffbe465506d846c7c686d3e9..0019fbd1294ccc9ecb0ac4ddb5d8c71efcf9597f:/LUFA/Drivers/USB/Class/Common/Audio.h diff --git a/LUFA/Drivers/USB/Class/Common/Audio.h b/LUFA/Drivers/USB/Class/Common/Audio.h index 5e65865a0..70a8016c1 100644 --- a/LUFA/Drivers/USB/Class/Common/Audio.h +++ b/LUFA/Drivers/USB/Class/Common/Audio.h @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. + Copyright (C) Dean Camera, 2011. dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -33,14 +33,14 @@ * * Common definitions and declarations for the library USB Audio 1.0 Class driver. * - * \note This file should not be included directly. It is automatically included as needed by the class driver - * dispatch header located in LUFA/Drivers/USB/Class/Audio.h. + * \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. */ /** \ingroup Group_USBClassAudio * @defgroup Group_USBClassAudioCommon Common Class Definitions * - * \section Module Description + * \section Sec_ModDescription Module Description * Constants, Types and Enum definitions that are common to both Device and Host modes for the USB * Audio 1.0 Class. * @@ -51,7 +51,7 @@ #define _AUDIO_CLASS_COMMON_H_ /* Includes: */ - #include "../../USB.h" + #include "../../HighLevel/StdDescriptors.h" #include @@ -62,7 +62,7 @@ /* Preprocessor Checks: */ #if !defined(__INCLUDE_FROM_AUDIO_DRIVER) - #error Do not include this file directly. Include LUFA/Drivers/Class/Audio.h instead. + #error Do not include this file directly. Include LUFA/Drivers/USB.h instead. #endif /* Macros: */ @@ -72,7 +72,9 @@ */ #define AUDIO_TOTAL_SAMPLE_RATES 1 #endif - + + /** \name Audio Channel Masks */ + //@{ /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */ #define AUDIO_CHANNEL_LEFT_FRONT (1 << 0) @@ -108,7 +110,10 @@ /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */ #define AUDIO_CHANNEL_TOP (1 << 11) + //@} + /** \name Audio Feature Masks */ + //@{ /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */ #define AUDIO_FEATURE_MUTE (1 << 0) @@ -138,7 +143,10 @@ /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */ #define AUDIO_FEATURE_BASS_LOUDNESS (1 << 9) + //@} + /** \name Audio Terminal Types */ + //@{ /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */ #define AUDIO_TERMINAL_UNDEFINED 0x0100 @@ -192,12 +200,13 @@ /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */ #define AUDIO_TERMINAL_OUT_LOWFREQ 0x0307 + //@} /** Convenience macro to fill a 24-bit \ref USB_Audio_SampleFreq_t structure with the given sample rate as a 24-bit number. * * \param[in] freq Required audio sampling frequency in HZ */ - #define AUDIO_SAMPLE_FREQ(freq) {((uint32_t)freq & 0x00FFFF), (((uint32_t)freq >> 16) & 0x0000FF)} + #define AUDIO_SAMPLE_FREQ(freq) {.Byte1 = (freq & 0x0000FF), .Byte2 = ((freq >> 8) & 0xFF), .Byte3 = ((freq >> 16) & 0xFF)} /** Mask for the attributes parameter of an Audio class-specific Endpoint descriptor, indicating that the endpoint * accepts only filled endpoint packets of audio samples. @@ -210,6 +219,31 @@ #define AUDIO_EP_ACCEPTS_SMALL_PACKETS (0 << 7) /* Enums: */ + /** 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. + */ + }; + /** Audio class specific interface description subtypes, for the Audio Control interface. */ enum Audio_CSInterface_AC_SubTypes_t { @@ -254,12 +288,12 @@ */ 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 \c TERMINAL_* mask. */ uint8_t AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals * such as the speaker and microphone of a phone handset. */ uint8_t TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */ - uint16_t ChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal. */ + uint16_t ChannelConfig; /**< \c CHANNEL_* masks indicating what channel layout is supported by this terminal. */ 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. */ @@ -285,12 +319,12 @@ * must be \ref AUDIO_DSUBTYPE_CSInterface_InputTerminal. */ 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 \c TERMINAL_* mask. */ 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.) */ - uint16_t wChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal. */ + uint16_t wChannelConfig; /**< \c CHANNEL_* masks indicating what channel layout is supported by this terminal. */ 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. */ @@ -312,7 +346,7 @@ */ 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 \c TERMINAL_* mask. */ uint8_t AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals * such as the speaker and microphone of a phone handset. */ @@ -341,7 +375,7 @@ * 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. */ - uint16_t wTerminalType; /**< Type of terminal, a TERMINAL_* mask. */ + uint16_t wTerminalType; /**< Type of terminal, a \c TERMINAL_* mask. */ uint8_t bAssocTerminal; /**< ID of associated input terminal, for physically grouped terminals * such as the speaker and microphone of a phone handset. */ @@ -417,7 +451,7 @@ 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 ControlSize; /**< Size of each element in the \c 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. */ @@ -446,7 +480,7 @@ 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 bControlSize; /**< Size of each element in the \c 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. */ @@ -504,8 +538,9 @@ */ typedef struct { - uint16_t LowWord; /**< Low 16 bits of the 24-bit value. */ - uint8_t HighByte; /**< Upper 8 bits of the 24-bit value. */ + 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. */ } USB_Audio_SampleFreq_t; /** \brief Audio class-specific Format Descriptor (LUFA naming conventions). @@ -595,8 +630,8 @@ uint8_t bEndpointAddress; /**< Logical address of the endpoint within the device for the current * configuration, including direction mask. */ - uint8_t bmAttributes; /**< Endpoint attributes, comprised of a mask of the endpoint type (EP_TYPE_*) - * and attributes (ENDPOINT_ATTR_*) masks. + uint8_t bmAttributes; /**< Endpoint attributes, comprised of a mask of the endpoint type (\c EP_TYPE_*) + * and attributes (\c ENDPOINT_ATTR_*) masks. */ uint16_t wMaxPacketSize; /**< Size of the endpoint bank, in bytes. This indicates the maximum packet size * that the endpoint can receive at a time. @@ -624,7 +659,7 @@ * 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 \ref AUDIO_EP_FULL_PACKETS_ONLY. */ 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. */ @@ -650,7 +685,7 @@ * 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 \ref AUDIO_EP_FULL_PACKETS_ONLY. */ 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. */