Simplify the internal serial extraction routines for each architecture.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / MIDI.h
index 4aa6eb8..fc31d40 100644 (file)
@@ -1,21 +1,21 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
-              
+     Copyright (C) Dean Camera, 2011.
+
   dean [at] fourwalledcubicle [dot] com
   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 
+  Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
   software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
+  without fee, provided that the above copyright notice appear in
   all copies and that both that the copyright notice and this
   all copies and that both that the copyright notice and this
-  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 
+  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
   software without specific, written prior permission.
 
   The author disclaim all warranties with regard to this
   software without specific, written prior permission.
 
   The author disclaim all warranties with regard to this
  *
  *  Host mode driver for the library USB MIDI Class driver.
  *
  *
  *  Host mode driver for the library USB MIDI 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/MIDI.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_USBClassMIDI
  */
 
 /** \ingroup Group_USBClassMIDI
- *  @defgroup Group_USBClassMIDIHost MIDI Class Host Mode Driver
+ *  \defgroup Group_USBClassMIDIHost MIDI Class Host Mode Driver
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
  *    - LUFA/Drivers/USB/Class/Host/MIDI.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
  *
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
  *    - LUFA/Drivers/USB/Class/Host/MIDI.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
  *
- *  \section Module Description
+ *  \section Sec_ModDescription Module Description
  *  Host Mode USB Class driver framework interface, for the MIDI USB Class driver.
  *
  *  @{
  *  Host Mode USB Class driver framework interface, for the MIDI USB Class driver.
  *
  *  @{
@@ -56,7 +56,7 @@
        /* Includes: */
                #include "../../USB.h"
                #include "../Common/MIDI.h"
        /* Includes: */
                #include "../../USB.h"
                #include "../Common/MIDI.h"
-               
+
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        extern "C" {
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        extern "C" {
 
        /* Preprocessor Checks: */
                #if !defined(__INCLUDE_FROM_MIDI_DRIVER)
 
        /* Preprocessor Checks: */
                #if !defined(__INCLUDE_FROM_MIDI_DRIVER)
-                       #error Do not include this file directly. Include LUFA/Drivers/Class/MIDI.h instead.
+                       #error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
                #endif
                #endif
-               
+
        /* Public Interface - May be used in end-application: */
                /* Type Defines: */
                        /** \brief MIDI Class Host Mode Configuration and State Structure.
                         *
                         *  Class state structure. An instance of this structure should be made within the user application,
        /* Public Interface - May be used in end-application: */
                /* Type Defines: */
                        /** \brief MIDI Class Host Mode Configuration and State Structure.
                         *
                         *  Class state structure. An instance of this structure should be made within the user application,
-                        *  and passed to each of the MIDI class driver functions as the MIDIInterfaceInfo parameter. This
+                        *  and passed to each of the MIDI class driver functions as the \c MIDIInterfaceInfo parameter. This
                         *  stores each MIDI interface's configuration and state information.
                         */
                        typedef struct
                         *  stores each MIDI interface's configuration and state information.
                         */
                        typedef struct
@@ -81,7 +81,7 @@
                                {
                                        uint8_t  DataINPipeNumber; /**< Pipe number of the MIDI interface's streaming IN data pipe. */
                                        bool     DataINPipeDoubleBank; /**< Indicates if the MIDI interface's IN data pipe should use double banking. */
                                {
                                        uint8_t  DataINPipeNumber; /**< Pipe number of the MIDI interface's streaming IN data pipe. */
                                        bool     DataINPipeDoubleBank; /**< Indicates if the MIDI interface's IN data pipe should use double banking. */
-                                       
+
                                        uint8_t  DataOUTPipeNumber; /**< Pipe number of the MIDI interface's streaming OUT data pipe. */
                                        bool     DataOUTPipeDoubleBank; /**< Indicates if the MIDI interface's OUT data pipe should use double banking. */
                                } Config; /**< Config data for the USB class interface within the device. All elements in this section
                                        uint8_t  DataOUTPipeNumber; /**< Pipe number of the MIDI interface's streaming OUT data pipe. */
                                        bool     DataOUTPipeDoubleBank; /**< Indicates if the MIDI interface's OUT data pipe should use double banking. */
                                } Config; /**< Config data for the USB class interface within the device. All elements in this section
                                                  *   the interface is enumerated.
                                                  */
                        } USB_ClassInfo_MIDI_Host_t;
                                                  *   the interface is enumerated.
                                                  */
                        } USB_ClassInfo_MIDI_Host_t;
-                       
+
                /* Enums: */
                        /** Enum for the possible error codes returned by the \ref MIDI_Host_ConfigurePipes() function. */
                        enum MIDI_Host_EnumerationFailure_ErrorCodes_t
                /* Enums: */
                        /** Enum for the possible error codes returned by the \ref MIDI_Host_ConfigurePipes() function. */
                        enum MIDI_Host_EnumerationFailure_ErrorCodes_t
                                MIDI_ENUMERROR_NoError                    = 0, /**< Configuration Descriptor was processed successfully. */
                                MIDI_ENUMERROR_InvalidConfigDescriptor    = 1, /**< The device returned an invalid Configuration Descriptor. */
                                MIDI_ENUMERROR_NoCompatibleInterfaceFound = 2, /**< A compatible MIDI interface was not found in the device's Configuration Descriptor. */
                                MIDI_ENUMERROR_NoError                    = 0, /**< Configuration Descriptor was processed successfully. */
                                MIDI_ENUMERROR_InvalidConfigDescriptor    = 1, /**< The device returned an invalid Configuration Descriptor. */
                                MIDI_ENUMERROR_NoCompatibleInterfaceFound = 2, /**< A compatible MIDI interface was not found in the device's Configuration Descriptor. */
+                               MIDI_ENUMERROR_PipeConfigurationFailed    = 3, /**< One or more pipes for the specified interface could not be configured correctly. */
                        };
                        };
-       
+
                /* Function Prototypes: */
                        /** Host interface configuration routine, to configure a given MIDI host interface instance using the Configuration
                         *  Descriptor read from an attached USB device. This function automatically updates the given MIDI Host instance's
                /* Function Prototypes: */
                        /** Host interface configuration routine, to configure a given MIDI host interface instance using the Configuration
                         *  Descriptor read from an attached USB device. This function automatically updates the given MIDI Host instance's
                                                         uint16_t ConfigDescriptorSize,
                                                         void* DeviceConfigDescriptor) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);
 
                                                         uint16_t ConfigDescriptorSize,
                                                         void* DeviceConfigDescriptor) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);
 
+                       /** General management task for a given MIDI host class interface, required for the correct operation of the interface. This should
+                        *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
+                        *
+                        *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing an MIDI Class host configuration and state.
+                        */
+                       void MIDI_Host_USBTask(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
+
                        /** Sends a MIDI event packet to the device. If no device is connected, the event packet is discarded.
                         *
                         *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
                        /** Sends a MIDI event packet to the device. If no device is connected, the event packet is discarded.
                         *
                         *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
                         *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
                         */
                         uint8_t MIDI_Host_Flush(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
                         *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
                         */
                         uint8_t MIDI_Host_Flush(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
-                        
+
                        /** Receives a MIDI event packet from the device.
                         *
                         *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
                        /** Receives a MIDI event packet from the device.
                         *
                         *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
                         *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
                         *  \param[out]    Event              Pointer to a USB_MIDI_EventPacket_t structure where the received MIDI event is to be placed.
                         *
                         *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing a MIDI Class configuration and state.
                         *  \param[out]    Event              Pointer to a USB_MIDI_EventPacket_t structure where the received MIDI event is to be placed.
                         *
-                        *  \return Boolean true if a MIDI event packet was received, false otherwise.
+                        *  \return Boolean \c true if a MIDI event packet was received, \c false otherwise.
                         */
                        bool MIDI_Host_ReceiveEventPacket(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo,
                                                          MIDI_EventPacket_t* const Event) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
 
                         */
                        bool MIDI_Host_ReceiveEventPacket(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo,
                                                          MIDI_EventPacket_t* const Event) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
 
-               /* Inline Functions: */
-                       /** General management task for a given MIDI host class interface, required for the correct operation of the interface. This should
-                        *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
-                        *
-                        *  \param[in,out] MIDIInterfaceInfo  Pointer to a structure containing an MIDI Class host configuration and state.
-                        */
-                       static inline void MIDI_Host_USBTask(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
-                       static inline void MIDI_Host_USBTask(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo)
-                       {
-                               (void)MIDIInterfaceInfo;
-                       }
-
        /* Private Interface - For use in library only: */
        #if !defined(__DOXYGEN__)
        /* Private Interface - For use in library only: */
        #if !defined(__DOXYGEN__)
-               /* Macros: */
-                       #define MIDI_STREAMING_CLASS           0x01
-                       #define MIDI_STREAMING_SUBCLASS        0x03
-                       #define MIDI_STREAMING_PROTOCOL        0x00
-
                /* Function Prototypes: */
                /* Function Prototypes: */
-                       #if defined(__INCLUDE_FROM_MIDI_CLASS_HOST_C)
+                       #if defined(__INCLUDE_FROM_MIDI_HOST_C)
                                static uint8_t DCOMP_MIDI_Host_NextMIDIStreamingInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
                                static uint8_t DCOMP_MIDI_Host_NextMIDIStreamingDataEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
                                static uint8_t DCOMP_MIDI_Host_NextMIDIStreamingInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
                                static uint8_t DCOMP_MIDI_Host_NextMIDIStreamingDataEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                       #endif  
+                       #endif
        #endif
        #endif
-                               
+
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        }
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        }
 #endif
 
 /** @} */
 #endif
 
 /** @} */
+