/*\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
* listed here. If an event with no user-associated handler is fired within the library, it by default maps to an\r
* internal empty stub function.\r
*\r
- * Each event must only have one associated event handler, but can be raised by multiple sources.\r
+ * Each event must only have one associated event handler, but can be raised by multiple sources by calling the\r
+ * event handler function (with any required event parameters).\r
*\r
* @{\r
*/\r
/** Event for USB device enumeration completion. This event fires when a the USB interface is\r
* in host mode and an attached USB device has been completely enumerated and is ready to be\r
* controlled by the user application.\r
+ *\r
+ * This event is time-critical; exceeding OS-specific delays within this event handler (typically of around\r
+ * 1 second) when a transaction is waiting to be processed by the device will prevent break communications\r
+ * and cause the host to reset the USB bus.\r
*/\r
void EVENT_USB_Host_DeviceEnumerationComplete(void);\r
\r
/** Event for USB device connection. This event fires when the AVR in device mode and the device is connected\r
* to a host, beginning the enumeration process, measured by a rising level on the AVR's VBUS pin.\r
*\r
- * \note For the smaller USB AVRs (AT90USBXX2) with limited USB controllers, VBUS is not available to the USB controller.\r
+ * This event is time-critical; exceeding OS-specific delays within this event handler (typically of around\r
+ * two seconds) will prevent the device from enumerating correctly.\r
+ *\r
+ * \note For the smaller series 2 USB AVRs with limited USB controllers, VBUS is not available to the USB controller.\r
* this means that the current connection state is derived from the bus suspension and wake up events by default,\r
* which is not always accurate (host may suspend the bus while still connected). If the actual connection state\r
* needs to be determined, VBUS should be routed to an external pin, and the auto-detect behaviour turned off by\r
* passing the NO_LIMITED_CONTROLLER_CONNECT token to the compiler via the -D switch at compile time. The connection\r
* and disconnection events may be manually fired, and the \ref USB_DeviceState global changed manually.\r
*\r
+ * \note This event may fire multiple times during device enumeration on the series 2 USB AVRs with limited USB controllers\r
+ * if NO_LIMITED_CONTROLLER_CONNECT is not defined.\r
+ *\r
* \see USBTask.h for more information on the USB management task and reducing CPU usage.\r
*/\r
void EVENT_USB_Device_Connect(void);\r
/** Event for USB device disconnection. This event fires when the AVR in device mode and the device is disconnected\r
* from a host, measured by a falling level on the AVR's VBUS pin.\r
*\r
- * \note For the smaller USB AVRs (AT90USBXX2) with limited USB controllers, VBUS is not available to the USB controller.\r
+ * \note For the smaller series 2 USB AVRs with limited USB controllers, VBUS is not available to the USB controller.\r
* this means that the current connection state is derived from the bus suspension and wake up events by default,\r
* which is not always accurate (host may suspend the bus while still connected). If the actual connection state\r
* needs to be determined, VBUS should be routed to an external pin, and the auto-detect behaviour turned off by\r
* passing the NO_LIMITED_CONTROLLER_CONNECT token to the compiler via the -D switch at compile time. The connection\r
* and disconnection events may be manually fired, and the \ref USB_DeviceState global changed manually.\r
*\r
+ * \note This event may fire multiple times during device enumeration on the series 2 USB AVRs with limited USB controllers\r
+ * if NO_LIMITED_CONTROLLER_CONNECT is not defined.\r
+ *\r
* \see USBTask.h for more information on the USB management task and reducing CPU usage.\r
*/\r
void EVENT_USB_Device_Disconnect(void);\r
/** Event for unhandled control requests. This event fires when a the USB host issues a control\r
* request to the control endpoint (address 0) that the library does not handle. This may either\r
* be a standard request that the library has no handler code for, or a class specific request\r
- * issued to the device which must be handled appropriately. Due to the strict timing requirements\r
- * on control transfers, interrupts are disabled during control request processing.\r
+ * issued to the device which must be handled appropriately.\r
+ *\r
+ * This event is time-critical; each packet within the request transaction must be acknowledged or\r
+ * sent within 50ms or the host will abort the transfer.\r
+ *\r
+ * The library interally handles all standard control requests with the exceptions of SYNC FRAME,\r
+ * SET DESCRIPTOR and SET INTERFACE. These and all other non-standard control requests will be left\r
+ * for the user to process via this event if desired. If not handled in the user application, requests\r
+ * are automatically STALLed.\r
*\r
* \note This event does not exist if the USB_HOST_ONLY token is supplied to the compiler (see\r
* \ref Group_USBManagement documentation).\r
* selected configuration number while in device mode. This event should be hooked in device\r
* applications to create the endpoints and configure the device for the selected configuration.\r
*\r
+ * This event is time-critical; exceeding OS-specific delays within this event handler (typically of around\r
+ * one second) will prevent the device from enumerating correctly.\r
+ *\r
* This event fires after the value of \ref USB_ConfigurationNumber has been changed.\r
*\r
* \note This event does not exist if the USB_HOST_ONLY token is supplied to the compiler (see\r
* \note This event does not exist if the USB_HOST_ONLY token is supplied to the compiler (see\r
* \ref Group_USBManagement documentation).\r
*\r
+ * \note This event does not exist on the series 2 USB AVRs when the NO_LIMITED_CONTROLLER_CONNECT\r
+ * compile time token is not set - see \ref EVENT_USB_Device_Disconnect.\r
+ *\r
* \see \ref EVENT_USB_Device_WakeUp() event for accompanying Wake Up event.\r
*/\r
void EVENT_USB_Device_Suspend(void);\r
\r
/** Event for USB wake up. This event fires when a the USB interface is suspended while in device\r
* mode, and the host wakes up the device by supplying Start Of Frame pulses. This is generally\r
- * hooked to pull the user application out of a lowe power state and back into normal operating\r
+ * hooked to pull the user application out of a low power state and back into normal operating\r
* mode. If the USB interface is enumerated with the \ref USB_OPT_AUTO_PLL option set, the library\r
* will automatically restart the USB PLL before the event is fired.\r
*\r
* \note This event does not exist if the USB_HOST_ONLY token is supplied to the compiler (see\r
* \ref Group_USBManagement documentation).\r
*\r
+ * \note This event does not exist on the series 2 USB AVRs when the NO_LIMITED_CONTROLLER_CONNECT\r
+ * compile time token is not set - see \ref EVENT_USB_Device_Connect.\r
+ *\r
* \see \ref EVENT_USB_Device_Suspend() event for accompanying Suspend event.\r
*/\r
void EVENT_USB_Device_WakeUp(void);\r
* a the USB host requests that the device reset its interface. This event fires after the control\r
* endpoint has been automatically configured by the library.\r
*\r
+ * This event is time-critical; exceeding OS-specific delays within this event handler (typically of around\r
+ * two seconds) will prevent the device from enumerating correctly.\r
+ *\r
* \note This event does not exist if the USB_HOST_ONLY token is supplied to the compiler (see\r
* \ref Group_USBManagement documentation).\r
*/\r
void EVENT_USB_Device_Reset(void);\r
\r
/** Event for USB Start Of Frame detection, when enabled. This event fires at the start of each USB\r
- * frame, once per millisecond, and is synchronised to the USB bus. This can be used as an accurate\r
+ * frame, once per millisecond, and is synchronized to the USB bus. This can be used as an accurate\r
* millisecond timer source when the USB bus is enumerated in device mode to a USB host.\r
*\r
- * This event is not normally active - it must be manually enabled and disabled via the\r
- * \ref USB_Device_EnableSOFEvents() and \ref USB_Device_DisableSOFEvents() commands after enumeration.\r
+ * This event is time-critical; it is run once per millisecond and thus long handlers will significantly\r
+ * degrade device performance. This event should only be enabled when needed to reduce device wakeups.\r
+ *\r
+ * \note This event is not normally active - it must be manually enabled and disabled via the\r
+ * \ref USB_Device_EnableSOFEvents() and \ref USB_Device_DisableSOFEvents() commands after enumeration.\r
*\r
* \note This event does not exist if the USB_HOST_ONLY token is supplied to the compiler (see\r
* \ref Group_USBManagement documentation).\r