*/
/** \file
- * \brief USB mode and capability macros.
- *
- * This file defines macros indicating the type of USB controller the library is being compiled for, and its
- * capabilities. These macros may then be referenced in the user application to selectively enable or disable
- * code sections depending on if they are defined or not.
+ * \brief USB mode and feature support definitions.
+ * \copydetails Group_USBMode
*
* \note This file should not be included directly. It is automatically included as needed by the USB driver
* dispatch header located in LUFA/Drivers/USB/USB.h.
/** \ingroup Group_USB
* \defgroup Group_USBMode USB Mode Tokens
+ * \brief USB mode and feature support definitions.
+ *
+ * This file defines macros indicating the type of USB controller the library is being compiled for, and its
+ * capabilities. These macros may then be referenced in the user application to selectively enable or disable
+ * code sections depending on if they are defined or not.
*
- * After the inclusion of the master USB driver header, one or more of the following
- * tokens may be defined, to allow the user code to conditionally enable or disable
- * code based on the USB controller family and allowable USB modes. These tokens may
- * be tested against to eliminate code relating to a USB mode which is not enabled for
+ * After the inclusion of the master USB driver header, one or more of the following tokens may be defined, to
+ * allow the user code to conditionally enable or disable code based on the USB controller family and allowable
+ * USB modes. These tokens may be tested against to eliminate code relating to a USB mode which is not enabled for
* the given compilation.
*
* @{
*/
#define USB_SERIES_7_AVR
- /** Indicates that the target AVR microcontroller and compilation settings allow for the
+ /** Indicates that the target AVR microcontroller belongs to the UC3B Series USB controller
+ * (i.e. AT32UC3B*) when defined.
+ */
+ #define USB_SERIES_UC3B_AVR
+
+ /** Indicates that the target microcontroller and compilation settings allow for the
* target to be configured in USB Device mode when defined.
*/
#define USB_CAN_BE_DEVICE
- /** Indicates that the target AVR microcontroller and compilation settings allow for the
+ /** Indicates that the target microcontroller and compilation settings allow for the
* target to be configured in USB Host mode when defined.
*/
#define USB_CAN_BE_HOST
- /** Indicates that the target AVR microcontroller and compilation settings allow for the
+ /** Indicates that the target microcontroller and compilation settings allow for the
* target to be configured in either USB Device or Host mode when defined.
*/
#define USB_CAN_BE_BOTH
#if (defined(__AVR_AT90USB162__) || defined(__AVR_AT90USB82__) || \
defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega8U2__))
#define USB_SERIES_2_AVR
+ #define USB_CAN_BE_DEVICE
#elif (defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega16U4__))
#define USB_SERIES_4_AVR
+ #define USB_CAN_BE_DEVICE
#elif (defined(__AVR_ATmega32U6__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))
#define USB_SERIES_6_AVR
+ #define USB_CAN_BE_DEVICE
#elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))
#define USB_SERIES_7_AVR
+ #define USB_CAN_BE_DEVICE
+ #define USB_CAN_BE_HOST
+ #elif (defined(__AVR32_UC3B0512__) || defined(__AVR32_UC3B1512__) || \
+ defined(__AVR32_UC3B0256__) || defined(__AVR32_UC3B1256__) || \
+ defined(__AVR32_UC3B0128__) || defined(__AVR32_UC3B1128__) || \
+ defined(__AVR32_UC3B064__) || defined(__AVR32_UC3B164__))
+ #define USB_SERIES_UC3B_AVR
+ #define USB_CAN_BE_DEVICE
+ #define USB_CAN_BE_HOST
+ #endif
+
+ #if (defined(USB_CAN_BE_DEVICE) && defined(USB_CAN_BE_HOST))
+ #define USB_CAN_BE_BOTH
#endif
- #if !defined(USB_SERIES_7_AVR)
- #if defined(USB_HOST_ONLY)
- #error USB_HOST_ONLY is not available for the currently selected USB AVR model.
- #endif
-
- #if !defined(USB_DEVICE_ONLY)
- #define USB_DEVICE_ONLY
+ #if defined(USB_HOST_ONLY)
+ #if !defined(USB_CAN_BE_HOST)
+ #error USB_HOST_ONLY is not available for the currently selected microcontroller model.
+ #else
+ #undef USB_CAN_BE_DEVICE
+ #undef USB_CAN_BE_BOTH
#endif
#endif
- #if (!defined(USB_DEVICE_ONLY) && !defined(USB_HOST_ONLY))
- #define USB_CAN_BE_BOTH
- #define USB_CAN_BE_HOST
- #define USB_CAN_BE_DEVICE
- #elif defined(USB_HOST_ONLY)
- #define USB_CAN_BE_HOST
- #elif defined(USB_DEVICE_ONLY)
- #define USB_CAN_BE_DEVICE
+ #if defined(USB_DEVICE_ONLY)
+ #if !defined(USB_CAN_BE_DEVICE)
+ #error USB_DEVICE_ONLY is not available for the currently selected microcontroller model.
+ #else
+ #undef USB_CAN_BE_HOST
+ #undef USB_CAN_BE_BOTH
+ #endif
#endif
-
+
#if (defined(USB_HOST_ONLY) && defined(USB_DEVICE_ONLY))
#error USB_HOST_ONLY and USB_DEVICE_ONLY are mutually exclusive.
#endif
+
+ #if (!defined(USB_CAN_BE_DEVICE) && !defined(USB_CAN_BE_HOST))
+ #error The currently selected architecture is not supported under the USB component of the library.
+ #endif
#endif
#endif