aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA
diff options
context:
space:
mode:
Diffstat (limited to 'LUFA')
-rw-r--r--LUFA/Drivers/USB/Class/Host/CDC.c4
-rw-r--r--LUFA/Drivers/USB/LowLevel/Host.c4
-rw-r--r--LUFA/Drivers/USB/LowLevel/Host.h111
-rw-r--r--LUFA/ManPages/ChangeLog.txt2
-rw-r--r--LUFA/ManPages/CompileTimeTokens.txt4
-rw-r--r--LUFA/ManPages/FutureChanges.txt2
6 files changed, 108 insertions, 19 deletions
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.c b/LUFA/Drivers/USB/Class/Host/CDC.c
index 943cb7363..688143c08 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.c
+++ b/LUFA/Drivers/USB/Class/Host/CDC.c
@@ -203,12 +203,12 @@ void CDC_Host_USBTask(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo)
case HOST_STATE_Addressed:
if ((ErrorCode = CDC_Host_ProcessConfigDescriptor(CDCInterfaceInfo)) != CDC_ENUMERROR_NoError)
{
- USB_HostState = HOST_STATE_Unattached;
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
}
if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
{
- USB_HostState = HOST_STATE_Unattached;
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
}
USB_HostState = HOST_STATE_Configured;
diff --git a/LUFA/Drivers/USB/LowLevel/Host.c b/LUFA/Drivers/USB/LowLevel/Host.c
index 037e6d80a..78a9ca8fb 100644
--- a/LUFA/Drivers/USB/LowLevel/Host.c
+++ b/LUFA/Drivers/USB/LowLevel/Host.c
@@ -66,6 +66,7 @@ void USB_Host_ProcessNextHostState(void)
USB_HostState = HOST_STATE_Attached_WaitForDeviceSettle;
break;
case HOST_STATE_Attached_WaitForDeviceSettle:
+ #if HOST_DEVICE_SETTLE_DELAY_MS > 0
_delay_ms(1);
if (!(WaitMSRemaining--))
@@ -78,6 +79,9 @@ void USB_Host_ProcessNextHostState(void)
USB_HostState = HOST_STATE_Attached_WaitForConnect;
}
+ #else
+ USB_HostState = HOST_STATE_Attached_WaitForConnect;
+ #endif
break;
case HOST_STATE_Attached_WaitForConnect:
diff --git a/LUFA/Drivers/USB/LowLevel/Host.h b/LUFA/Drivers/USB/LowLevel/Host.h
index 08b21f688..d91c1d82d 100644
--- a/LUFA/Drivers/USB/LowLevel/Host.h
+++ b/LUFA/Drivers/USB/LowLevel/Host.h
@@ -221,20 +221,103 @@
*/
enum USB_Host_States_t
{
- HOST_STATE_WaitForDevice = 0, /**< Internally implemented by the library. */
- HOST_STATE_Unattached = 1, /**< Internally implemented by the library. */
- HOST_STATE_Attached = 2, /**< Internally implemented by the library. */
- HOST_STATE_Attached_WaitForDeviceSettle = 3, /**< Internally implemented by the library. */
- HOST_STATE_Attached_WaitForConnect = 4, /**< Internally implemented by the library. */
- HOST_STATE_Attached_DoReset = 5, /**< Internally implemented by the library. */
- HOST_STATE_Powered = 6, /**< Internally implemented by the library. */
- HOST_STATE_Default = 7, /**< Internally implemented by the library. */
- HOST_STATE_Default_PostReset = 8, /**< Internally implemented by the library. */
- HOST_STATE_Default_PostAddressSet = 9, /**< Internally implemented by the library. */
- HOST_STATE_Addressed = 10, /**< May be implemented by the user project. */
- HOST_STATE_Configured = 11, /**< May be implemented by the user project. */
- HOST_STATE_Ready = 12, /**< May be implemented by the user project. */
- HOST_STATE_Suspended = 13, /**< May be implemented by the user project. */
+ HOST_STATE_WaitForDeviceRemoval = 0, /**< Internally implemented by the library. This state can be
+ * used by the library to wait until the attached device is
+ * removed by the user - useful for when an error occurs or
+ * further communication with the device is not needed. This
+ * allows for other code to run while the state machine is
+ * effectively disabled.
+ */
+ HOST_STATE_WaitForDevice = 1, /**< Internally implemented by the library. This state indicates
+ * that the stack is waiting for an interval to elapse before
+ * continuing with the next step of the device enumeration
+ * process.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Unattached = 2, /**< Internally implemented by the library. This state indicates
+ * that the host state machine is waiting for a device to be
+ * attached so that it can start the enumeration process.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Attached = 3, /**< Internally implemented by the library. This state indicates
+ * that a device has been attached, and the library's internals
+ * are being configured to begin the enumeration process.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Attached_WaitForDeviceSettle = 4, /**< Internally implemented by the library. This state indicates
+ * that the stack is waiting for the initial settling period to
+ * elapse before beginning the enumeration process.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Attached_WaitForConnect = 5, /**< Internally implemented by the library. This state indicates
+ * that the stack is waiting for a connection event from the USB
+ * controller to indicate a valid USB device has been attached to
+ * the bus and is ready to be enumerated.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Attached_DoReset = 6, /**< Internally implemented by the library. This state indicates
+ * that a valid USB device has been attached, and that it is
+ * will now be reset to ensure it is ready for enumeration.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Powered = 7, /**< Internally implemented by the library. This state indicates
+ * that the attached device is currently powered and reset, and
+ * that the control pipe is now being configured by the stack.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Default = 8, /**< Internally implemented by the library. This state indicates
+ * that the stack is currently retrieving the control endpoint's
+ * size from the device, so that the control pipe can be altered
+ * to match.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Default_PostReset = 9, /**< Internally implemented by the library. This state indicates that
+ * the control pipe is being reconfigured to match the retrieved
+ * control endpoint size from the device, and the device's USB bus
+ * address is being set.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Default_PostAddressSet = 10, /**< Internally implemented by the library. This state indicates that
+ * the device's address has now been set, and the stack is has now
+ * completed the device enumeration process. This state causes the
+ * stack to change the current USB device address to that set for
+ * the connected device, before progressing to the user-implemented
+ * HOST_STATE_Addressed state for further communications.
+ *
+ * \note Do not manually change to this state in the user code.
+ */
+ HOST_STATE_Addressed = 11, /**< May be implemented by the user project. This state should
+ * set the device configuration before progressing to the
+ * HOST_STATE_Configured state. Other processing (such as the
+ * retrieval and processing of the device descriptor) should also
+ * be placed in this state.
+ */
+ HOST_STATE_Configured = 12, /**< May be implemented by the user project. This state should
+ * implement any extra device configuration (such as the setting of
+ * class-specific parameters) before normal communication is begun
+ * in the HOST_STATE_Ready state.
+ */
+ HOST_STATE_Ready = 13, /**< May be implemented by the user project. This state should
+ * contain the main communications with the attached device. From this
+ * this state the host state machine should be changed to either
+ * HOST_STATE_Suspended (after the bus is manually suspended using the
+ * USB_Host_SuspendBus() macro) or HOST_STATE_WaitForDeviceRemoval as
+ * needed.
+ */
+ HOST_STATE_Suspended = 15, /**< May be implemented by the user project. This state should be maintained
+ * while the bus is suspended, and changed to either the HOST_STATE_Ready
+ * (after resuming the bus with the USB_Host_ResumeBus() macro) or the
+ * HOST_STATE_WaitForDeviceRemoval states as needed.
+ */
};
/** Enum for the error codes for the \ref EVENT_USB_HostError() event.
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 0f582a657..f22a9ff04 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -21,6 +21,8 @@
* added NO_INTERNAL_SERIAL compile time option to turn off new serial number reading code
* - Added new DATAFLASH_CHIP_MASK() macro to the Dataflash driver, which returns the Dataflash select mask for the given chip index
* - Updated MassStorage device block write routines to use ping-pong Dataflash buffering to increase throughput by around 30%
+ * - Added new HOST_STATE_WaitForDeviceRemoval host state machine state for non-blocking disabling of device communications until the
+ * device has been removed (for use when an error occurs or communications with the device have completed)
*
* <b>Changed:</b>
* - Deprecated psuedo-scheduler and removed dynamic memory allocator from the library (first no longer needed and second unused)
diff --git a/LUFA/ManPages/CompileTimeTokens.txt b/LUFA/ManPages/CompileTimeTokens.txt
index bc49ba2cc..796ee8484 100644
--- a/LUFA/ManPages/CompileTimeTokens.txt
+++ b/LUFA/ManPages/CompileTimeTokens.txt
@@ -120,8 +120,8 @@
* <b>HOST_DEVICE_SETTLE_DELAY_MS</b> - ( \ref Group_Host ) \n
* Some devices require a delay of up to 5 seconds after they are connected to VBUS before the enumeration process can be started, or
* they will fail to enumerate correctly. By placing a delay before the enumeration process, it can be ensured that the bus has settled
- * back to a known idle state before communications occur with the device. This token may be defined to a non-zero 16-bit value to set
- * the device settle period, specified in milliseconds. If not defined, the default value specified in Host.h is used instead.
+ * back to a known idle state before communications occur with the device. This token may be defined to a 16-bit value to set the device
+ * settle period, specified in milliseconds. If not defined, the default value specified in Host.h is used instead.
*
* <b>USE_STATIC_OPTIONS</b> - ( \ref Group_USBManagement ) \n
* By default, the USB_Init() function accepts dynamic options at runtime to alter the library behaviour, including whether the USB pad
diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt
index 59a279072..2e348d53e 100644
--- a/LUFA/ManPages/FutureChanges.txt
+++ b/LUFA/ManPages/FutureChanges.txt
@@ -19,9 +19,9 @@
* -# Re-enable Host mode Class driver builds after completion
* -# Update Host mode Class Driver demo .txt files
* - Add standardized descriptor names to device and host class driver structures
- * - Remove USE_NONSTANDARD_DESCRIPTOR_NAMES, make all typedefs unions to allow either naming scheme to be used
* - Add in INTERRUPT_CONTROL_PIPE to use HSOFI to trigger calls to the host state machine
* - Make Suspend host state suspend USB bus frames
+ * - Split StillImageHost demo into lib directory
* - Add in Stream functions for PROGMEM, EEPROM -- move to templated system
* - Debug mode for pipe/endpoint calls
* - Test and document new FAST_STREAM_TRANSFERS compile time option