this software.\r
*/\r
\r
+/** \file\r
+ * \brief USB low level USB controller definitions.\r
+ *\r
+ * This file contains structures, function prototypes and macros related to the low level configutation of the\r
+ * USB controller, to start, stop and reset the USB library core.\r
+ *\r
+ * \note This file should not be included directly. It is automatically included as needed by the USB driver\r
+ * dispatch header located in LUFA/Drivers/USB/USB.h.\r
+ */\r
+ \r
/** \ingroup Group_USB\r
* @defgroup Group_USBManagement USB Interface Management\r
*\r
#include "../HighLevel/USBMode.h"\r
#include "../HighLevel/Events.h"\r
#include "../HighLevel/USBTask.h"\r
- #include "../HighLevel/USBInterrupt.h"\r
+ #include "USBInterrupt.h"\r
\r
#if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)\r
#include "Host.h"\r
#endif\r
\r
/* Preprocessor Checks and Defines: */\r
+ #if !defined(__INCLUDE_FROM_USB_DRIVER)\r
+ #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
+ #endif\r
+\r
#if !defined(F_CLOCK)\r
#error F_CLOCK is not defined. You must define F_CLOCK to the frequency of the unprescaled input clock in your project makefile.\r
#endif\r
#if (F_CLOCK == 8000000)\r
#if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \\r
defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \\r
- defined(__AVR_ATmega32U2))\r
+ defined(__AVR_ATmega32U2__))\r
#define USB_PLL_PSC 0\r
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
#define USB_PLL_PSC 0\r
#elif (F_CLOCK == 16000000)\r
#if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \\r
defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \\r
- defined(__AVR_ATmega32U2))\r
+ defined(__AVR_ATmega32U2__))\r
#define USB_PLL_PSC (1 << PLLP0)\r
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
#define USB_PLL_PSC (1 << PINDIV)\r
* allow for device connection to a host when in device mode, or for device enumeration while in\r
* host mode.\r
*\r
- * As the USB library relies on USB interrupts for some of its functionality, this routine will\r
- * enable global interrupts.\r
+ * As the USB library relies on interrupts for the device and host mode enumeration processes,\r
+ * the user must enable global interrupts before or shortly after this function is called. In\r
+ * device mode, interrupts must be enabled within 500ms of this function being called to ensure\r
+ * that the host does not time out whilst enumerating the device. In host mode, interrupts may be\r
+ * enabled at the application's leisure however enumeration will not begin of an attached device\r
+ * until after this has occurred.\r
*\r
* Calling this function when the USB interface is already initialized will cause a complete USB\r
* interface reset and re-enumeration.\r
* mode speed.\r
*\r
* \note To reduce the FLASH requirements of the library if only device or host mode is required, \r
- * this can be statically set via defining the token USB_DEVICE_ONLY for device mode or \r
- * USB_HOST_ONLY for host mode in the use project makefile, passing the token to the compiler \r
+ * the mode can be statically set in the project makefile by defining the token USB_DEVICE_ONLY\r
+ * (for device mode) or USB_HOST_ONLY (for host mode), passing the token to the compiler \r
* via the -D switch. If the mode is statically set, this parameter does not exist in the\r
* function prototype.\r
+ * \n\n\r
*\r
* \note To reduce the FLASH requirements of the library if only fixed settings are are required,\r
* the options may be set statically in the same manner as the mode (see the Mode parameter of \r
* this function). To statically set the USB options, pass in the USE_STATIC_OPTIONS token,\r
* defined to the appropriate options masks. When the options are statically set, this\r
* parameter does not exist in the function prototype.\r
+ * \n\n\r
* \r
* \note The mode parameter does not exist on devices where only one mode is possible, such as USB \r
* AVR models which only implement the USB device mode in hardware.\r