Get rid of the redundant ATTR_NEVER_INLINE macro which translated to the same as...
[pub/USBasp.git] / LUFA / Drivers / USB / Core / USBController.h
index 49fbb41..7702b74 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2011.
+     Copyright (C) Dean Camera, 2013.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2013  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
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -18,7 +18,7 @@
   advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
   advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
-  The author disclaim all warranties with regard to this
+  The author disclaims all warranties with regard to this
   software, including all implied warranties of merchantability
   and fitness.  In no event shall the author be liable for any
   special, indirect or consequential damages or any damages
   software, including all implied warranties of merchantability
   and fitness.  In no event shall the author be liable for any
   special, indirect or consequential damages or any damages
@@ -50,7 +50,7 @@
 
        /* Includes: */
                #include "../../../Common/Common.h"
 
        /* Includes: */
                #include "../../../Common/Common.h"
-               #include "USBMode.h"            
+               #include "USBMode.h"
 
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
 
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                #endif
 
        /* Defines: */
                #endif
 
        /* Defines: */
+               /** \name Endpoint Direction Masks */
+               //@{
+               /** Endpoint direction mask, for masking against endpoint addresses to retrieve the endpoint's
+                *  direction for comparing with the \c ENDPOINT_DIR_* masks.
+                */
+               #define ENDPOINT_DIR_MASK                  0x80
+
+               /** Endpoint address direction mask for an OUT direction (Host to Device) endpoint. This may be ORed with
+                *  the index of the address within a device to obtain the full endpoint address.
+                */
+               #define ENDPOINT_DIR_OUT                   0x00
+
+               /** Endpoint address direction mask for an IN direction (Device to Host) endpoint. This may be ORed with
+                *  the index of the address within a device to obtain the full endpoint address.
+                */
+               #define ENDPOINT_DIR_IN                    0x80
+               //@}
+
+               /** \name Pipe Direction Masks */
+               //@{
+               /** Pipe direction mask, for masking against pipe addresses to retrieve the pipe's
+                *  direction for comparing with the \c PIPE_DIR_* masks.
+                */
+               #define PIPE_DIR_MASK                      0x80
+
+               /** Endpoint address direction mask for an OUT direction (Host to Device) endpoint. This may be ORed with
+                *  the index of the address within a device to obtain the full endpoint address.
+                */
+               #define PIPE_DIR_OUT                       0x00
+
+               /** Endpoint address direction mask for an IN direction (Device to Host) endpoint. This may be ORed with
+                *  the index of the address within a device to obtain the full endpoint address.
+                */
+               #define PIPE_DIR_IN                        0x80
+               //@}
+
                /** \name Endpoint/Pipe Type Masks */
                //@{
                /** \name Endpoint/Pipe Type Masks */
                //@{
+               /** Mask for determining the type of an endpoint from an endpoint descriptor. This should then be compared
+                *  with the \c EP_TYPE_* masks to determine the exact type of the endpoint.
+                */
+               #define EP_TYPE_MASK                       0x03
+
                /** Mask for a CONTROL type endpoint or pipe.
                 *
                 *  \note See \ref Group_EndpointManagement and \ref Group_PipeManagement for endpoint/pipe functions.
                /** Mask for a CONTROL type endpoint or pipe.
                 *
                 *  \note See \ref Group_EndpointManagement and \ref Group_PipeManagement for endpoint/pipe functions.
                #define EP_TYPE_INTERRUPT                  0x03
                //@}
 
                #define EP_TYPE_INTERRUPT                  0x03
                //@}
 
+       /* Enums: */
+               /** Enum for the possible USB controller modes, for initialization via \ref USB_Init() and indication back to the
+                *  user application via \ref USB_CurrentMode.
+                */
+               enum USB_Modes_t
+               {
+                       USB_MODE_None   = 0, /**< Indicates that the controller is currently not initialized in any specific USB mode. */
+                       USB_MODE_Device = 1, /**< Indicates that the controller is currently initialized in USB Device mode. */
+                       USB_MODE_Host   = 2, /**< Indicates that the controller is currently initialized in USB Host mode. */
+                       USB_MODE_UID    = 3, /**< Indicates that the controller should determine the USB mode from the UID pin of the
+                                             *   USB connector.
+                                             */
+               };
+
        /* Architecture Includes: */
                #if (ARCH == ARCH_AVR8)
                        #include "AVR8/USBController_AVR8.h"
                #elif (ARCH == ARCH_UC3)
                        #include "UC3/USBController_UC3.h"
                #elif (ARCH == ARCH_XMEGA)
        /* Architecture Includes: */
                #if (ARCH == ARCH_AVR8)
                        #include "AVR8/USBController_AVR8.h"
                #elif (ARCH == ARCH_UC3)
                        #include "UC3/USBController_UC3.h"
                #elif (ARCH == ARCH_XMEGA)
-                       #include "XMEGA/USBController_XMEGA.h"  
+                       #include "XMEGA/USBController_XMEGA.h"
                #endif
 
        /* Disable C linkage for C++ Compilers: */
                #endif
 
        /* Disable C linkage for C++ Compilers: */