X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/01fecac0a70b02ccb197091935052fcfc9955b26..c459ef69815366c11d2d00c51b75908603ed3ca1:/LUFA/Drivers/USB/LowLevel/USBInterrupt.c?ds=inline diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c index 52951fc39..66a86a1b2 100644 --- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c +++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c @@ -92,12 +92,12 @@ ISR(USB_GEN_vect, ISR_BLOCK) } #endif - if (USB_INT_HasOccurred(USB_INT_SUSPEND) && USB_INT_IsEnabled(USB_INT_SUSPEND)) + if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) { - USB_INT_Clear(USB_INT_SUSPEND); + USB_INT_Clear(USB_INT_SUSPI); - USB_INT_Disable(USB_INT_SUSPEND); - USB_INT_Enable(USB_INT_WAKEUP); + USB_INT_Disable(USB_INT_SUSPI); + USB_INT_Enable(USB_INT_WAKEUPI); USB_CLK_Freeze(); @@ -113,7 +113,7 @@ ISR(USB_GEN_vect, ISR_BLOCK) #endif } - if (USB_INT_HasOccurred(USB_INT_WAKEUP) && USB_INT_IsEnabled(USB_INT_WAKEUP)) + if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) { if (!(USB_Options & USB_OPT_MANUAL_PLL)) { @@ -123,10 +123,10 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_CLK_Unfreeze(); - USB_INT_Clear(USB_INT_WAKEUP); + USB_INT_Clear(USB_INT_WAKEUPI); - USB_INT_Disable(USB_INT_WAKEUP); - USB_INT_Enable(USB_INT_SUSPEND); + USB_INT_Disable(USB_INT_WAKEUPI); + USB_INT_Enable(USB_INT_SUSPI); #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) USB_DeviceState = (USB_ConfigurationNumber) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; @@ -144,9 +144,9 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_DeviceState = DEVICE_STATE_Default; USB_ConfigurationNumber = 0; - USB_INT_Clear(USB_INT_SUSPEND); - USB_INT_Disable(USB_INT_SUSPEND); - USB_INT_Enable(USB_INT_WAKEUP); + USB_INT_Clear(USB_INT_SUSPI); + USB_INT_Disable(USB_INT_SUSPI); + USB_INT_Enable(USB_INT_WAKEUPI); Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL, ENDPOINT_DIR_OUT, USB_ControlEndpointSize, @@ -168,6 +168,8 @@ ISR(USB_GEN_vect, ISR_BLOCK) #endif #if defined(USB_CAN_BE_HOST) + bool MustResetInterface = false; + if (USB_INT_HasOccurred(USB_INT_DDISCI) && USB_INT_IsEnabled(USB_INT_DDISCI)) { USB_INT_Clear(USB_INT_DDISCI); @@ -175,8 +177,8 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_INT_Disable(USB_INT_DDISCI); EVENT_USB_Host_DeviceUnattached(); - - USB_ResetInterface(); + + MustResetInterface = true; } if (USB_INT_HasOccurred(USB_INT_VBERRI) && USB_INT_IsEnabled(USB_INT_VBERRI)) @@ -211,7 +213,7 @@ ISR(USB_GEN_vect, ISR_BLOCK) EVENT_USB_Host_DeviceEnumerationFailed(HOST_ENUMERROR_NoDeviceDetected, 0); EVENT_USB_Host_DeviceUnattached(); - USB_ResetInterface(); + MustResetInterface = true; } if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI)) @@ -236,8 +238,11 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_CurrentMode = USB_GetUSBModeFromUID(); EVENT_USB_UIDChange(); - USB_ResetInterface(); + MustResetInterface = true; } + + if (MustResetInterface) + USB_ResetInterface(); #endif }