summaryrefslogtreecommitdiff
path: root/digital/avr/modules/usb/lufa/LUFA/Drivers/USB/HighLevel/USBTask.h
diff options
context:
space:
mode:
Diffstat (limited to 'digital/avr/modules/usb/lufa/LUFA/Drivers/USB/HighLevel/USBTask.h')
-rw-r--r--digital/avr/modules/usb/lufa/LUFA/Drivers/USB/HighLevel/USBTask.h198
1 files changed, 198 insertions, 0 deletions
diff --git a/digital/avr/modules/usb/lufa/LUFA/Drivers/USB/HighLevel/USBTask.h b/digital/avr/modules/usb/lufa/LUFA/Drivers/USB/HighLevel/USBTask.h
new file mode 100644
index 00000000..1fcc2bbb
--- /dev/null
+++ b/digital/avr/modules/usb/lufa/LUFA/Drivers/USB/HighLevel/USBTask.h
@@ -0,0 +1,198 @@
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2009.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.fourwalledcubicle.com
+*/
+
+/*
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, and distribute this software
+ and its documentation for any purpose and without fee is hereby
+ granted, provided that the above copyright notice appear in all
+ copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaim 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
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+/** \file
+ *
+ * Main library USB management task for both Host and Device mode operations. This contains the master
+ * USB_USBTask task which should be periodically run to service both host and device USB projects.
+ */
+
+#ifndef __USBTASK_H__
+#define __USBTASK_H__
+
+ /* Includes: */
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+ #include <util/atomic.h>
+ #include <stdbool.h>
+ #include <stddef.h>
+
+ #include "../../../Scheduler/Scheduler.h"
+ #include "../LowLevel/LowLevel.h"
+ #include "../LowLevel/HostChapter9.h"
+ #include "../LowLevel/USBMode.h"
+ #include "Events.h"
+ #include "StdDescriptors.h"
+
+ /* Enable C linkage for C++ Compilers: */
+ #if defined(__cplusplus)
+ extern "C" {
+ #endif
+
+ /* Public Interface - May be used in end-application: */
+ /* Global Variables: */
+ /** Indicates if the USB interface is currently connected to a host if in device mode, or to a
+ * device while running in host mode.
+ *
+ * \note This variable should be treated as read-only in the user application, and never manually
+ * changed in value.
+ *
+ * \note For the smaller USB AVRs (AT90USBXX2) with limited USB controllers, VBUS is not available to the USB controller.
+ * this means that the current connection state is derived from the bus suspension and wake up events by default,
+ * which is not always accurate (host may suspend the bus while still connected). If the actual connection state
+ * needs to be determined, VBUS should be routed to an external pin, and the auto-detect behaviour turned off by
+ * passing the NO_LIMITED_CONTROLLER_CONNECT token to the compiler via the -D switch at compile time. The connection
+ * and disconnection events may be manually fired by RAISE_EVENT(), and the USB_IsConnected global changed manually.
+ */
+ extern volatile bool USB_IsConnected;
+
+ /** Indicates if the USB interface is currently initialized but not neccesarily connected to a host
+ * or device (i.e. if USB_Init() has been run). If this is false, all other library globals are invalid.
+ *
+ * \note This variable should be treated as read-only in the user application, and never manually
+ * changed in value.
+ */
+ extern volatile bool USB_IsInitialized;
+
+ #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
+ /** Indicates if the USB interface is currently suspended by the host when in device mode. When suspended,
+ * the device should consume minimal power, and cannot communicate to the host. If Remote Wakeup is
+ * supported by the device and USB_RemoteWakeupEnabled is true, suspension can be terminated by the device
+ * by issuing a Remote Wakup request.
+ *
+ * \note This global is only present if the user application can be a USB device.
+ *
+ * \note This variable should be treated as read-only in the user application, and never manually
+ * changed in value.
+ */
+ extern volatile bool USB_IsSuspended;
+ #endif
+
+ #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
+ /** Indicates the current host state machine state. When in host mode, this indicates the state
+ * via one of the values of the USB_Host_States_t enum values in Host.h.
+ *
+ * This value may be altered by the user application to implement the HOST_STATE_Addressed,
+ * HOST_STATE_Configured, HOST_STATE_Ready and HOST_STATE_Suspended states which are not implemented
+ * by the library.
+ *
+ * \note This global is only present if the user application can be a USB host.
+ */
+ extern volatile uint8_t USB_HostState;
+ #endif
+
+ /* Throwable Events: */
+ #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
+ /** This module raises the USB Connect event when a USB device has been connected whilst in host
+ * mode, but not yet enumerated.
+ *
+ * \see Events.h for more information on this event.
+ */
+ RAISES_EVENT(USB_Connect);
+
+ /** This module raises the USB Device Attached event when in host mode, and a device is attached
+ * to the AVR's USB interface.
+ *
+ * \see Events.h for more information on this event.
+ */
+ RAISES_EVENT(USB_DeviceAttached);
+
+ /** This module raises the USB Device Unattached event when in host mode, and a device is removed
+ * from the AVR's USB interface.
+ *
+ * \see Events.h for more information on this event.
+ */
+ RAISES_EVENT(USB_DeviceUnattached);
+
+ /** This module raises the USB Device Enumeration Failed event when in host mode, and an
+ * attached USB device has failed to successfully enumerated.
+ *
+ * \see Events.h for more information on this event.
+ */
+ RAISES_EVENT(USB_DeviceEnumerationFailed);
+
+ /** This module raises the USB Device Enumeration Complete event when in host mode, and an
+ * attached USB device has been successfully enumerated and ready to be used by the user
+ * application.
+ *
+ * \see Events.h for more information on this event.
+ */
+ RAISES_EVENT(USB_DeviceEnumerationComplete);
+
+ /** This module raises the USB Disconnect event when an attached USB device is removed from the USB
+ * bus.
+ *
+ * \see Events.h for more information on this event.
+ */
+ RAISES_EVENT(USB_Disconnect);
+ #endif
+
+ /* Tasks: */
+ /** This is the main USB management task. The USB driver requires that this task be executed
+ * continuously when the USB system is active (device attached in host mode, or attached to a host
+ * in device mode) in order to manage USB communications. This task may be executed inside an RTOS,
+ * scheduler (e.g. the simple LUFA Scheduler), fast timer ISR or the main user application loop.
+ *
+ * The USB task must be serviced within 50mS in all modes, when needed. The task may be serviced
+ * at all times, or (for minimum CPU consumption):
+ *
+ * - In device mode, it may be disabled at startup, enabled on the firing of the USB_Connect event
+ * and disabled again on the firing of the USB_Disconnect event.
+ *
+ * - In host mode, it may be disabled at startup, enabled on the firing of the USB_DeviceAttached
+ * event and disabled again on the firing of the USB_DeviceUnattached event.
+ *
+ * \see Events.h for more information on the USB events.
+ */
+ TASK(USB_USBTask);
+
+ /* Private Interface - For use in library only: */
+ #if !defined(__DOXYGEN__)
+ /* Function Prototypes: */
+ #if defined(INCLUDE_FROM_USBTASK_C)
+ #if defined(USB_CAN_BE_HOST)
+ static void USB_HostTask(void);
+ #endif
+
+ #if defined(USB_CAN_BE_DEVICE)
+ static void USB_DeviceTask(void);
+ #endif
+ #endif
+
+ /* Macros: */
+ #define HOST_TASK_NONBLOCK_WAIT(duration, nextstate) {USB_HostState = HOST_STATE_WaitForDevice; WaitMSRemaining = duration; PostWaitState = nextstate; }
+ #endif
+
+ /* Disable C linkage for C++ Compilers: */
+ #if defined(__cplusplus)
+ }
+ #endif
+
+#endif