/*\r
LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
+ Copyright (C) Dean Camera, 2010.\r
\r
dean [at] fourwalledcubicle [dot] com\r
www.fourwalledcubicle.com\r
*/\r
\r
/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
+ Permission to use, copy, modify, distribute, and sell this \r
+ software and its documentation for any purpose is hereby granted\r
+ without fee, provided that the above copyright notice appear in \r
+ all copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting \r
+ documentation, and that the name of the author not be used in \r
+ advertising or publicity pertaining to distribution of the \r
software without specific, written prior permission.\r
\r
The author disclaim all warranties with regard to this\r
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 device F_CLOCK to the frequency of the unprescaled input clock in your project makefile.\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
\r
#if (F_CLOCK == 8000000)\r
- #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__))\r
+ #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \\r
+ defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \\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
#define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0))\r
#endif\r
#elif (F_CLOCK == 16000000)\r
- #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__))\r
+ #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \\r
+ defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \\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
*/\r
#define USB_MODE_DEVICE 1\r
\r
- #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)\r
- /** Mode mask for the \ref USB_CurrentMode global and the \ref USB_Init() function. This indicates that the\r
- * USB interface is or should be initialized in the USB host mode.\r
- *\r
- * \note This token is not available on AVR models which do not support host mode.\r
- */\r
- #define USB_MODE_HOST 2\r
- #endif\r
+ /** Mode mask for the \ref USB_CurrentMode global and the \ref USB_Init() function. This indicates that the\r
+ * USB interface is or should be initialized in the USB host mode.\r
+ */\r
+ #define USB_MODE_HOST 2\r
\r
#if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)\r
/** Mode mask for the the \ref USB_Init() function. This indicates that the USB interface should be\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