From e071f3897a0946c6be1e1b5e1f78eda8dcbf6fc7 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 21 Jul 2009 13:31:21 +0000 Subject: Added new USB_DeviceState variable to keep track of the current Device mode USB state. Added new Endpoint_ClearStatusStage() convenience function to assist with the status stages of control transfers. Removed vague USB_IsConnected global - test USB_DeviceState or USB_HostState explicitly to gain previous functionality. Removed USB_IsSuspended global - test USB_DeviceState against DEVICE_STATE_Suspended instead. Fixed possible enumeration errors from spinloops which may fail to exit if the USB connection is severed before the exit condition becomes true. --- LUFA/Drivers/USB/LowLevel/LowLevel.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'LUFA/Drivers/USB/LowLevel/LowLevel.c') diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.c b/LUFA/Drivers/USB/LowLevel/LowLevel.c index 4fcf4fcab..cd7fa891d 100644 --- a/LUFA/Drivers/USB/LowLevel/LowLevel.c +++ b/LUFA/Drivers/USB/LowLevel/LowLevel.c @@ -110,15 +110,21 @@ void USB_Init( void USB_ShutDown(void) { - if (USB_IsConnected) + #if defined(USB_CAN_BE_DEVICE) + if (USB_DeviceState != DEVICE_STATE_Unattached) + EVENT_USB_Disconnect(); + #endif + + #if defined(USB_CAN_BE_HOST) + if (USB_HostState != HOST_STATE_Unattached) EVENT_USB_Disconnect(); + #endif USB_Detach(); USB_INT_DisableAllInterrupts(); USB_INT_ClearAllInterrupts(); - USB_IsConnected = false; USB_IsInitialized = false; #if defined(USB_CAN_BE_HOST) @@ -126,7 +132,10 @@ void USB_ShutDown(void) #endif #if defined(USB_CAN_BE_DEVICE) - USB_ConfigurationNumber = 0; + USB_DeviceState = DEVICE_STATE_Unattached; + USB_ConfigurationNumber = 0; + USB_RemoteWakeupEnabled = false; + USB_CurrentlySelfPowered = false; #endif #if defined(CAN_BE_BOTH) @@ -149,16 +158,14 @@ void USB_ResetInterface(void) { USB_INT_DisableAllInterrupts(); USB_INT_ClearAllInterrupts(); - - USB_IsConnected = false; - + #if defined(USB_CAN_BE_HOST) - USB_HostState = HOST_STATE_Unattached; + USB_HostState = HOST_STATE_Unattached; #endif - + #if defined(USB_CAN_BE_DEVICE) + USB_DeviceState = DEVICE_STATE_Unattached; USB_ConfigurationNumber = 0; - USB_IsSuspended = false; USB_RemoteWakeupEnabled = false; USB_CurrentlySelfPowered = false; #endif -- cgit v1.2.3