Add FatFS library to the Webserver project, extend the HTTP server so that it now...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Common / Audio.h
index 51cdfc6..0e2c692 100644 (file)
@@ -1,21 +1,21 @@
 /*\r
              LUFA Library\r
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this \r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in \r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting \r
+  documentation, and that the name of the author not be used in \r
+  advertising or publicity pertaining to distribution of the \r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
 */\r
 \r
 /** \ingroup Group_USBClassAudio\r
 */\r
 \r
 /** \ingroup Group_USBClassAudio\r
+ *  @defgroup Group_USBClassAudioCommon  Common Class Definitions\r
+ *\r
+ *  \section Module Description\r
+ *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB\r
+ *  Audio Class.\r
+ *\r
  *  @{\r
  */\r
 \r
  *  @{\r
  */\r
 \r
                #endif\r
 \r
        /* Macros: */\r
                #endif\r
 \r
        /* Macros: */\r
+               #if !defined(AUDIO_TOTAL_SAMPLE_RATES) || defined(__DOXYGEN__)\r
+                       /** Total number of discrete audio sample rates supported by the device. This value can be overridden by defining this\r
+                        *  token in the project makefile to the desired value, and passing it to the compiler via the -D switch.\r
+                        */\r
+                       #define AUDIO_TOTAL_SAMPLE_RATES    1\r
+               #endif\r
+               \r
                /** Descriptor header constant to indicate a Audio class interface descriptor. */\r
                #define DTYPE_AudioInterface         0x24\r
 \r
                /** Descriptor header constant to indicate a Audio class interface descriptor. */\r
                #define DTYPE_AudioInterface         0x24\r
 \r
 \r
                /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */\r
                #define FEATURE_BASS_BOOST           (1 << 8)\r
 \r
                /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */\r
                #define FEATURE_BASS_BOOST           (1 << 8)\r
-
+\r
                /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */\r
                #define FEATURE_BASS_LOUDNESS        (1 << 9)\r
 \r
                /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */\r
                #define FEATURE_BASS_LOUDNESS        (1 << 9)\r
 \r
 \r
                /** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.\r
                 *\r
 \r
                /** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.\r
                 *\r
-                *  \param freq  Required audio sampling frequency in HZ\r
+                *  \param[in] freq  Required audio sampling frequency in HZ\r
                 */\r
                #define AUDIO_SAMPLE_FREQ(freq)  {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}\r
                \r
                 */\r
                #define AUDIO_SAMPLE_FREQ(freq)  {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}\r
                \r
                        \r
                        uint8_t                   InCollection; /**< Total number of audio class interfaces within this device */\r
                        uint8_t                   InterfaceNumbers[1]; /**< Interface numbers of each audio interface */\r
                        \r
                        uint8_t                   InCollection; /**< Total number of audio class interfaces within this device */\r
                        uint8_t                   InterfaceNumbers[1]; /**< Interface numbers of each audio interface */\r
-               } USB_AudioInterface_AC_t;\r
+               } USB_Audio_Interface_AC_t;\r
                \r
                /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features\r
                 *  are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio\r
                \r
                /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features\r
                 *  are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio\r
                        uint8_t                   ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */\r
                        \r
                        uint8_t                   FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
                        uint8_t                   ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */\r
                        \r
                        uint8_t                   FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
-               } USB_AudioFeatureUnit_t;\r
+               } USB_Audio_FeatureUnit_t;\r
 \r
                /** Type define for an Audio class specific input terminal descriptor. This indicates to the host that the device\r
                 *  contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example,\r
 \r
                /** Type define for an Audio class specific input terminal descriptor. This indicates to the host that the device\r
                 *  contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example,\r
                        \r
                        uint8_t                   ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */\r
                        uint8_t                   TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
                        \r
                        uint8_t                   ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */\r
                        uint8_t                   TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
-               } USB_AudioInputTerminal_t;\r
+               } USB_Audio_InputTerminal_t;\r
 \r
                /** Type define for an Audio class specific output terminal descriptor. This indicates to the host that the device\r
                 *  contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example,\r
 \r
                /** Type define for an Audio class specific output terminal descriptor. This indicates to the host that the device\r
                 *  contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example,\r
                        uint8_t                   SourceID; /**< ID value of the unit this terminal's audio is sourced from */\r
                        \r
                        uint8_t                   TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
                        uint8_t                   SourceID; /**< ID value of the unit this terminal's audio is sourced from */\r
                        \r
                        uint8_t                   TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
-               } USB_AudioOutputTerminal_t;\r
+               } USB_Audio_OutputTerminal_t;\r
                \r
                /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host\r
                 *  how audio streams within the device are formatted. See the USB Audio specification for more details.\r
                \r
                /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host\r
                 *  how audio streams within the device are formatted. See the USB Audio specification for more details.\r
                        \r
                        uint8_t                   FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */\r
                        uint16_t                  AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */\r
                        \r
                        uint8_t                   FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */\r
                        uint16_t                  AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */\r
-               } USB_AudioInterface_AS_t;\r
+               } USB_Audio_Interface_AS_t;\r
                \r
                /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype,\r
                 *  this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro.\r
                \r
                /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype,\r
                 *  this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro.\r
                {\r
                        uint16_t                  LowWord; /**< Low 16 bits of the 24-bit value */\r
                        uint8_t                   HighByte; /**< Upper 8 bits of the 24-bit value */\r
                {\r
                        uint16_t                  LowWord; /**< Low 16 bits of the 24-bit value */\r
                        uint8_t                   HighByte; /**< Upper 8 bits of the 24-bit value */\r
-               } AudioSampleFreq_t;\r
+               } USB_Audio_SampleFreq_t;\r
 \r
                /** Type define for an Audio class specific audio format descriptor. This is used to give the host full details\r
                 *  about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used\r
 \r
                /** Type define for an Audio class specific audio format descriptor. This is used to give the host full details\r
                 *  about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used\r
                        uint8_t                   BitResolution; /**< Bits of resolution of each channel's samples in the stream */\r
 \r
                        uint8_t                   SampleFrequencyType; /**< Total number of sample frequencies supported by the device */                       \r
                        uint8_t                   BitResolution; /**< Bits of resolution of each channel's samples in the stream */\r
 \r
                        uint8_t                   SampleFrequencyType; /**< Total number of sample frequencies supported by the device */                       \r
-                       AudioSampleFreq_t         SampleFrequencies[1]; /**< Sample frequencies supported by the device */\r
-               } USB_AudioFormat_t;\r
+                       USB_Audio_SampleFreq_t    SampleFrequencies[AUDIO_TOTAL_SAMPLE_RATES]; /**< Sample frequencies supported by the device */\r
+               } USB_Audio_Format_t;\r
                \r
                /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint \r
                 *  descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.\r
                \r
                /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint \r
                 *  descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.\r
                        USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */\r
 \r
                        uint8_t                   Refresh; /**< Always set to zero */\r
                        USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */\r
 \r
                        uint8_t                   Refresh; /**< Always set to zero */\r
-                       uint8_t                   SyncEndpointNumber; /**< Endpoint address to send synchronisation information to, if needed (zero otherwise) */\r
-               } USB_AudioStreamEndpoint_Std_t;\r
+                       uint8_t                   SyncEndpointNumber; /**< Endpoint address to send synchronization information to, if needed (zero otherwise) */\r
+               } USB_Audio_StreamEndpoint_Std_t;\r
                                        \r
                /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information\r
                 *  on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio\r
                                        \r
                /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information\r
                 *  on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio\r
 \r
                        uint8_t                   LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */\r
                        uint16_t                  LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */\r
 \r
                        uint8_t                   LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */\r
                        uint16_t                  LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */\r
-               } USB_AudioStreamEndpoint_Spc_t;        \r
-\r
-               /** Class state structure. An instance of this structure should be made for each Audio interface\r
-                *  within the user application, and passed to each of the Audio class driver functions as the\r
-                *  AudioInterfaceInfo parameter. The contents of this structure should be set to their correct\r
-                *  values when used, or ommitted to force the library to use default values.\r
-                */\r
-               typedef struct\r
-               {\r
-                       uint8_t  StreamingInterfaceNumber; /**< Index of the Audio Streaming interface within the device this structure controls */\r
-\r
-                       uint8_t  DataINEndpointNumber; /**< Endpoint number of the incomming Audio Streaming data, if available (zero if unused) */\r
-                       uint16_t DataINEndpointSize; /**< Size in bytes of the incomming Audio Streaming data endpoint, if available (zero if unused) */\r
-\r
-                       uint8_t  DataOUTEndpointNumber; /**< Endpoint number of the outgoing Audio Streaming data, if available (zero if unused) */\r
-                       uint16_t DataOUTEndpointSize; /**< Size in bytes of the outgoing Audio Streaming data endpoint, if available (zero if unused) */\r
-\r
-                       bool     InterfaceEnabled; /**< Set and cleared by the class driver to indicate if the host has enabled the streaming endpoints\r
-                                                   *   of the Audio Streaming interface\r
-                                                   */\r
-               } USB_ClassInfo_Audio_t;\r
+               } USB_Audio_StreamEndpoint_Spc_t;\r
 \r
        /* Disable C linkage for C++ Compilers: */\r
                #if defined(__cplusplus)\r
 \r
        /* Disable C linkage for C++ Compilers: */\r
                #if defined(__cplusplus)\r