Fixed incorrect comparison in the descriptor callback routine of the TeensyHID bootlo...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / Audio.h
index 02d3ae5..fd821e9 100644 (file)
@@ -1,13 +1,13 @@
 /*\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
+  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
 \r
   Permission to use, copy, modify, distribute, and sell this \r
   software and its documentation for any purpose is hereby granted\r
   this software.\r
 */\r
 \r
   this software.\r
 */\r
 \r
+/** \file\r
+ *  \brief Device mode driver for the library USB Audio Class driver.\r
+ *\r
+ *  Device mode driver for the library USB Audio Class driver.\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the class driver\r
+ *        dispatch header located in LUFA/Drivers/USB/Class/Audio.h.\r
+ */\r
+\r
 /** \ingroup Group_USBClassAudio\r
  *  @defgroup Group_USBClassAudioDevice Audio Class Device Mode Driver\r
  *\r
 /** \ingroup Group_USBClassAudio\r
  *  @defgroup Group_USBClassAudioDevice Audio Class Device Mode Driver\r
  *\r
                        extern "C" {\r
                #endif\r
 \r
                        extern "C" {\r
                #endif\r
 \r
+       /* Preprocessor Checks: */\r
+               #if !defined(__INCLUDE_FROM_AUDIO_DRIVER)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/Class/Audio.h instead.\r
+               #endif\r
+\r
        /* Public Interface - May be used in end-application: */\r
        /* Public Interface - May be used in end-application: */\r
-               /* Type Defines: */             \r
-                       /** Class state structure. An instance of this structure should be made for each Audio interface\r
+               /* Type Defines: */\r
+                       /** \brief Audio Class Device Mode Configuration and State Structure.\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. This stores each Audio interface's configuration and state information.\r
                         */\r
                         *  within the user application, and passed to each of the Audio class driver functions as the\r
                         *  AudioInterfaceInfo parameter. This stores each Audio interface's configuration and state information.\r
                         */\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         */\r
                        void Audio_Device_ProcessControlRequest(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         */\r
                        void Audio_Device_ProcessControlRequest(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
-\r
+                       \r
+               /* Inline Functions: */         \r
                        /** General management task for a given Audio class interface, required for the correct operation of the interface. This should\r
                         *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().\r
                         *\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         */\r
                        /** General management task for a given Audio class interface, required for the correct operation of the interface. This should\r
                         *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().\r
                         *\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         */\r
-                       void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
-                       \r
+                       static inline void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);\r
+                       static inline void Audio_Device_USBTask(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)\r
+                       {\r
+                               (void)AudioInterfaceInfo;\r
+                       }\r
+\r
                        /** Determines if the given audio interface is ready for a sample to be read from it, and selects the streaming\r
                         *  OUT endpoint ready for reading.\r
                         *\r
                        /** Determines if the given audio interface is ready for a sample to be read from it, and selects the streaming\r
                         *  OUT endpoint ready for reading.\r
                         *\r
+                        *  \note This function must only be called when the Device state machine is in the DEVICE_STATE_Configured state or\r
+                        *        the call will fail.\r
+                        *\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         *\r
                         *  \return Boolean true if the given Audio interface has a sample to be read, false otherwise\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         *\r
                         *  \return Boolean true if the given Audio interface has a sample to be read, false otherwise\r
-                        */\r
-                       bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);\r
+                        */             \r
+                       static inline bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)\r
+                       {\r
+                               if ((USB_DeviceState != DEVICE_STATE_Configured) || !(AudioInterfaceInfo->State.InterfaceEnabled))\r
+                                 return false;\r
+                               \r
+                               Endpoint_SelectEndpoint(AudioInterfaceInfo->Config.DataOUTEndpointNumber);      \r
+                               return Endpoint_IsOUTReceived();\r
+                       }\r
 \r
                        /** Determines if the given audio interface is ready to accept the next sample to be written to it, and selects\r
                         *  the streaming IN endpoint ready for writing.\r
                         *\r
 \r
                        /** Determines if the given audio interface is ready to accept the next sample to be written to it, and selects\r
                         *  the streaming IN endpoint ready for writing.\r
                         *\r
+                        *  \note This function must only be called when the Device state machine is in the DEVICE_STATE_Configured state or\r
+                        *        the call will fail.\r
+                        *\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         *\r
                         *  \return Boolean true if the given Audio interface is ready to accept the next sample, false otherwise\r
                         */\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         *\r
                         *  \return Boolean true if the given Audio interface is ready to accept the next sample, false otherwise\r
                         */\r
-                       bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);\r
+                       static inline bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)\r
+                       {\r
+                               if ((USB_DeviceState != DEVICE_STATE_Configured) || !(AudioInterfaceInfo->State.InterfaceEnabled))\r
+                                 return false;\r
+                               \r
+                               Endpoint_SelectEndpoint(AudioInterfaceInfo->Config.DataINEndpointNumber);\r
+                               return Endpoint_IsINReady();\r
+                       }\r
 \r
 \r
-               /* Inline Functions: */\r
                        /** Reads the next 8-bit audio sample from the current audio interface.\r
                         *\r
                         *  \note This should be preceded immediately by a call to the USB_Audio_IsSampleReceived() function to ensure that\r
                        /** Reads the next 8-bit audio sample from the current audio interface.\r
                         *\r
                         *  \note This should be preceded immediately by a call to the USB_Audio_IsSampleReceived() function to ensure that\r
                         *        the correct endpoint is selected and ready for data.\r
                         *\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
                         *        the correct endpoint is selected and ready for data.\r
                         *\r
                         *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state\r
+                        *\r
                         *  \return  Signed 24-bit audio sample from the audio interface\r
                         */\r
                        static inline int32_t Audio_Device_ReadSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo) ATTR_ALWAYS_INLINE;\r
                         *  \return  Signed 24-bit audio sample from the audio interface\r
                         */\r
                        static inline int32_t Audio_Device_ReadSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo) ATTR_ALWAYS_INLINE;\r