Oops - fix broken SPI driver due to missing bit inversion on a port mask.
[pub/USBasp.git] / LUFA / Drivers / USB / USB.h
index 8b151b5..b8dce82 100644 (file)
@@ -1,7 +1,7 @@
 /*
              LUFA Library
      Copyright (C) Dean Camera, 2010.
 /*
              LUFA Library
      Copyright (C) Dean Camera, 2010.
-              
+
   dean [at] fourwalledcubicle [dot] com
       www.fourwalledcubicle.com
 */
   dean [at] fourwalledcubicle [dot] com
       www.fourwalledcubicle.com
 */
@@ -9,13 +9,13 @@
 /*
   Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
 /*
   Copyright 2010  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
  *  including any headers in the USB/LowLevel/ or USB/HighLevel/ subdirectories.
  */
 
  *  including any headers in the USB/LowLevel/ or USB/HighLevel/ subdirectories.
  */
 
-/** @defgroup Group_USB USB - LUFA/Drivers/USB/USB.h
+/** @defgroup Group_USB USB Core - LUFA/Drivers/USB/USB.h
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
- *    - LUFA/Drivers/USB/LowLevel/DevChapter9.c
- *    - LUFA/Drivers/USB/LowLevel/Endpoint.c
- *    - LUFA/Drivers/USB/LowLevel/Host.c
- *    - LUFA/Drivers/USB/LowLevel/HostChapter9.c
- *    - LUFA/Drivers/USB/LowLevel/LowLevel.c
- *    - LUFA/Drivers/USB/LowLevel/Pipe.c
- *    - LUFA/Drivers/USB/LowLevel/USBInterrupt.c
- *    - LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c
- *    - LUFA/Drivers/USB/HighLevel/Events.c
- *    - LUFA/Drivers/USB/HighLevel/USBTask.c
+ *    - LUFA/Drivers/USB/LowLevel/Device.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/LowLevel/Endpoint.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/LowLevel/Host.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/LowLevel/Pipe.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/LowLevel/USBController.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/LowLevel/USBInterrupt.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/Events.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/EndpointStream.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/HostStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/PipeStream.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/USBTask.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *
  *  \section Module Description
  *  Driver and framework for the USB controller hardware on the USB series of AVR microcontrollers. This module
  *
  *  \section Module Description
  *  Driver and framework for the USB controller hardware on the USB series of AVR microcontrollers. This module
@@ -67,8 +70,7 @@
  *  of USB management functions found \ref Group_USBManagement.
  */
 
  *  of USB management functions found \ref Group_USBManagement.
  */
 
-/** \ingroup Group_USB
- *  @defgroup Group_USBClassDrivers USB Class Drivers
+/** @defgroup Group_USBClassDrivers USB Class Drivers
  *
  *  Drivers for both host and device mode of the standard USB classes, for rapid application development.
  *  Class drivers give a framework which sits on top of the low level library API, allowing for standard
  *
  *  Drivers for both host and device mode of the standard USB classes, for rapid application development.
  *  Class drivers give a framework which sits on top of the low level library API, allowing for standard
@@ -84,9 +86,9 @@
  *
  *  <table>
  *  <tr>
  *
  *  <table>
  *  <tr>
- *   <th width="100px">USB Class</th> 
- *   <th width="90px">Device Mode</th> 
- *   <th width="90px">Host Mode</th> 
+ *   <th width="100px">USB Class</th>
+ *   <th width="90px">Device Mode</th>
+ *   <th width="90px">Host Mode</th>
  *  </tr>
  *  <tr>
  *   <td>Audio</td>
  *  </tr>
  *  <tr>
  *   <td>Audio</td>
  *
  *  \subsection SSec_ClassDriverDevice Device Mode Class Drivers
  *  Implementing a Device Mode Class Driver in a user application requires a number of steps to be followed. Firstly,
  *
  *  \subsection SSec_ClassDriverDevice Device Mode Class Drivers
  *  Implementing a Device Mode Class Driver in a user application requires a number of steps to be followed. Firstly,
- *  the module configuration and state structure must be added to the project source. These structures are named in a 
+ *  the module configuration and state structure must be added to the project source. These structures are named in a
  *  similar manner between classes, that of <i>USB_ClassInfo_<b>{Class Name}</b>_Device_t</i>, and are used to hold the
  *  similar manner between classes, that of <i>USB_ClassInfo_<b>{Class Name}</b>_Device_t</i>, and are used to hold the
- *  complete state and configuration for each class instance. Multiple class instances is where the power of the class 
- *  drivers lie; multiple interfaces of the same class simply require more instances of the Class Driver's ClassInfo 
+ *  complete state and configuration for each class instance. Multiple class instances is where the power of the class
+ *  drivers lie; multiple interfaces of the same class simply require more instances of the Class Driver's ClassInfo
  *  structure.
  *
  *  Inside the ClassInfo structure lies two sections, a <i>Config</i> section, and a <i>State</i> section. The Config
  *  structure.
  *
  *  Inside the ClassInfo structure lies two sections, a <i>Config</i> section, and a <i>State</i> section. The Config
  *      .Config =
  *          {
  *              .StreamingInterfaceNumber = 1,
  *      .Config =
  *          {
  *              .StreamingInterfaceNumber = 1,
- *              
+ *
  *              .DataINEndpointNumber     = 1,
  *              .DataINEndpointSize       = 256,
  *          },
  *              .DataINEndpointNumber     = 1,
  *              .DataINEndpointSize       = 256,
  *          },
  *
  *  To initialize the Class driver instance, the driver's <i><b>{Class Name}</b>_Device_ConfigureEndpoints()</i> function
  *  should be called in response to the \ref EVENT_USB_Device_ConfigurationChanged() event. This function will return a
  *
  *  To initialize the Class driver instance, the driver's <i><b>{Class Name}</b>_Device_ConfigureEndpoints()</i> function
  *  should be called in response to the \ref EVENT_USB_Device_ConfigurationChanged() event. This function will return a
- *  boolean value if the driver sucessfully initialized the instance. Like all the class driver functions, this function
- *  takes in the address of the specific instance you wish to initialize - in this manner, multiple seperate instances of
+ *  boolean value if the driver successfully initialized the instance. Like all the class driver functions, this function
+ *  takes in the address of the specific instance you wish to initialize - in this manner, multiple separate instances of
  *  the same class type can be initialized like thus:
  *
  *  \code
  *  void EVENT_USB_Device_ConfigurationChanged(void)
  *  {
  *     LEDs_SetAllLEDs(LEDMASK_USB_READY);
  *  the same class type can be initialized like thus:
  *
  *  \code
  *  void EVENT_USB_Device_ConfigurationChanged(void)
  *  {
  *     LEDs_SetAllLEDs(LEDMASK_USB_READY);
- *     
+ *
  *     if (!(Audio_Device_ConfigureEndpoints(&My_Audio_Interface)))
  *       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
  *  }
  *  \endcode
  *     if (!(Audio_Device_ConfigureEndpoints(&My_Audio_Interface)))
  *       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
  *  }
  *  \endcode
- * 
+ *
  *  Once initialized, it is important to maintain the class driver's state by repeatedly calling the Class Driver's
  *  <i><b>{Class Name}</b>_Device_USBTask()</i> function in the main program loop. The exact implementation of this
  *  function varies between class drivers, and can be used for any internal class driver purpose to maintain each
  *  instance. Again, this function uses the address of the instance to operate on, and thus needs to be called for each
  *  Once initialized, it is important to maintain the class driver's state by repeatedly calling the Class Driver's
  *  <i><b>{Class Name}</b>_Device_USBTask()</i> function in the main program loop. The exact implementation of this
  *  function varies between class drivers, and can be used for any internal class driver purpose to maintain each
  *  instance. Again, this function uses the address of the instance to operate on, and thus needs to be called for each
- *  seperate instance, just like the main USB maintenance routine \ref USB_USBTask():
+ *  separate instance, just like the main USB maintenance routine \ref USB_USBTask():
  *
  *  \code
  *  int main(void)
  *  {
  *      SetupHardware();
  *
  *  \code
  *  int main(void)
  *  {
  *      SetupHardware();
- *  
+ *
  *      LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
  *      LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
- *  
+ *
  *      for (;;)
  *      {
  *          Create_And_Process_Samples();
  *      for (;;)
  *      {
  *          Create_And_Process_Samples();
- *      
+ *
  *          Audio_Device_USBTask(&My_Audio_Interface);
  *          USB_USBTask();
  *      }
  *          Audio_Device_USBTask(&My_Audio_Interface);
  *          USB_USBTask();
  *      }
  *
  *  \subsection SSec_ClassDriverHost Host Mode Class Drivers
  *  Implementing a Host Mode Class Driver in a user application requires a number of steps to be followed. Firstly,
  *
  *  \subsection SSec_ClassDriverHost Host Mode Class Drivers
  *  Implementing a Host Mode Class Driver in a user application requires a number of steps to be followed. Firstly,
- *  the module configuration and state structure must be added to the project source. These structures are named in a 
+ *  the module configuration and state structure must be added to the project source. These structures are named in a
  *  similar manner between classes, that of <i>USB_ClassInfo_<b>{Class Name}</b>_Host_t</i>, and are used to hold the
  *  similar manner between classes, that of <i>USB_ClassInfo_<b>{Class Name}</b>_Host_t</i>, and are used to hold the
- *  complete state and configuration for each class instance. Multiple class instances is where the power of the class 
- *  drivers lie; multiple interfaces of the same class simply require more instances of the Class Driver's ClassInfo 
+ *  complete state and configuration for each class instance. Multiple class instances is where the power of the class
+ *  drivers lie; multiple interfaces of the same class simply require more instances of the Class Driver's ClassInfo
  *  structure.
  *
  *  Inside the ClassInfo structure lies two sections, a <i>Config</i> section, and a <i>State</i> section. The Config
  *  structure.
  *
  *  Inside the ClassInfo structure lies two sections, a <i>Config</i> section, and a <i>State</i> section. The Config
  *          {
  *              .DataINPipeNumber       = 1,
  *              .DataINPipeDoubleBank   = false,
  *          {
  *              .DataINPipeNumber       = 1,
  *              .DataINPipeDoubleBank   = false,
- *              
+ *
  *              .DataOUTPipeNumber      = 2,
  *              .DataOUTPipeDoubleBank  = false,
  *          },
  *              .DataOUTPipeNumber      = 2,
  *              .DataOUTPipeDoubleBank  = false,
  *          },
  *  To initialize the Class driver instance, the driver's <i><b>{Class Name}</b>_Host_ConfigurePipes()</i> function
  *  should be called in response to the host state machine entering the \ref HOST_STATE_Addressed state. This function
  *  will return an error code from the class driver's <i><b>{Class Name}</b>_EnumerationFailure_ErrorCodes_t</i> enum
  *  To initialize the Class driver instance, the driver's <i><b>{Class Name}</b>_Host_ConfigurePipes()</i> function
  *  should be called in response to the host state machine entering the \ref HOST_STATE_Addressed state. This function
  *  will return an error code from the class driver's <i><b>{Class Name}</b>_EnumerationFailure_ErrorCodes_t</i> enum
- *  to indicate if the driver sucessfully initialized the instance and bound it to an interface in the attached device.
- *  Like all the class driver functions, this function takes in the address of the specific instance you wish to initialize
- *  - in this manner, multiple seperate instances of the same class type can be initialized. A fragment of a Class Driver
+ *  to indicate if the driver successfully initialized the instance and bound it to an interface in the attached device.
+ *  Like all the class driver functions, this function takes in the address of the specific instance you wish to initialize -
+ *  in this manner, multiple separate instances of the same class type can be initialized. A fragment of a Class Driver
  *  based Host mode application may look like the following:
  *
  *  \code
  *  based Host mode application may look like the following:
  *
  *  \code
  *      {
  *          case HOST_STATE_Addressed:
  *              LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
  *      {
  *          case HOST_STATE_Addressed:
  *              LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
- *          
+ *
  *              uint16_t ConfigDescriptorSize;
  *              uint8_t  ConfigDescriptorData[512];
  *
  *              uint16_t ConfigDescriptorSize;
  *              uint8_t  ConfigDescriptorData[512];
  *
  *  <i><b>{Class Name}</b>_Host_USBTask()</i> function in the main program loop. The exact implementation of this
  *  function varies between class drivers, and can be used for any internal class driver purpose to maintain each
  *  instance. Again, this function uses the address of the instance to operate on, and thus needs to be called for each
  *  <i><b>{Class Name}</b>_Host_USBTask()</i> function in the main program loop. The exact implementation of this
  *  function varies between class drivers, and can be used for any internal class driver purpose to maintain each
  *  instance. Again, this function uses the address of the instance to operate on, and thus needs to be called for each
- *  seperate instance, just like the main USB maintenance routine \ref USB_USBTask():
+ *  separate instance, just like the main USB maintenance routine \ref USB_USBTask():
  *
  *  \code
  *  int main(void)
  *  {
  *      SetupHardware();
  *
  *  \code
  *  int main(void)
  *  {
  *      SetupHardware();
- *  
+ *
  *      LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
  *      LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
- *  
+ *
  *      for (;;)
  *      {
  *          switch (USB_HostState)
  *          {
  *             // Host state machine handling here
  *      for (;;)
  *      {
  *          switch (USB_HostState)
  *          {
  *             // Host state machine handling here
- *          } 
- *      
+ *          }
+ *
  *          MIDI_Host_USBTask(&My_Audio_Interface);
  *          USB_USBTask();
  *      }
  *          MIDI_Host_USBTask(&My_Audio_Interface);
  *          USB_USBTask();
  *      }
  *  read and write routines. See each driver's individual documentation for more information on the
  *  class-specific functions.
  */
  *  read and write routines. See each driver's individual documentation for more information on the
  *  class-specific functions.
  */
+
 #ifndef __USB_H__
 #define __USB_H__
 
 #ifndef __USB_H__
 #define __USB_H__
 
        /* Includes: */
                #include "HighLevel/USBMode.h"
 
        /* Includes: */
                #include "HighLevel/USBMode.h"
 
-       /* Preprocessor Checks: */              
+       /* Preprocessor Checks: */
                #if (!defined(USB_SERIES_2_AVR) && !defined(USB_SERIES_4_AVR) && \
                     !defined(USB_SERIES_6_AVR) && !defined(USB_SERIES_7_AVR))
                        #error The currently selected AVR model is not supported under the USB component of the LUFA library.
                #endif
                #if (!defined(USB_SERIES_2_AVR) && !defined(USB_SERIES_4_AVR) && \
                     !defined(USB_SERIES_6_AVR) && !defined(USB_SERIES_7_AVR))
                        #error The currently selected AVR model is not supported under the USB component of the LUFA library.
                #endif
-               
+
        /* Includes: */
                #include "HighLevel/USBTask.h"
                #include "HighLevel/Events.h"
                #include "HighLevel/StdDescriptors.h"
                #include "HighLevel/ConfigDescriptor.h"
 
        /* Includes: */
                #include "HighLevel/USBTask.h"
                #include "HighLevel/Events.h"
                #include "HighLevel/StdDescriptors.h"
                #include "HighLevel/ConfigDescriptor.h"
 
-               #include "LowLevel/LowLevel.h"
+               #include "LowLevel/USBController.h"
                #include "LowLevel/USBInterrupt.h"
                #include "LowLevel/USBInterrupt.h"
-       
+
                #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
                        #include "LowLevel/Host.h"
                #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
                        #include "LowLevel/Host.h"
-                       #include "LowLevel/HostChapter9.h"
                        #include "LowLevel/Pipe.h"
                        #include "LowLevel/Pipe.h"
+                       #include "HighLevel/HostStandardReq.h"
+                       #include "HighLevel/PipeStream.h"
                #endif
                #endif
-               
+
                #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
                        #include "LowLevel/Device.h"
                #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
                        #include "LowLevel/Device.h"
-                       #include "LowLevel/DevChapter9.h"
                        #include "LowLevel/Endpoint.h"
                        #include "LowLevel/Endpoint.h"
+                       #include "HighLevel/DeviceStandardReq.h"
+                       #include "HighLevel/EndpointStream.h"
                #endif
                #endif
-               
+
                #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)
                        #include "LowLevel/OTG.h"
                #endif
                #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)
                        #include "LowLevel/OTG.h"
                #endif
-                               
+
 #endif
 
 #endif