projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Oops - need to call USB_Attach() when reinitializing into USB Host mode, or no device...
[pub/USBasp.git]
/
LUFA
/
Drivers
/
USB
/
LowLevel
/
USBInterrupt.c
diff --git
a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
index
36541cf
..
66a86a1
100644
(file)
--- a/
LUFA/Drivers/USB/LowLevel/USBInterrupt.c
+++ b/
LUFA/Drivers/USB/LowLevel/USBInterrupt.c
@@
-34,14
+34,17
@@
void USB_INT_DisableAllInterrupts(void)
{
#if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
void USB_INT_DisableAllInterrupts(void)
{
#if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
- USBCON &= ~((1 <<
VBUSTE) | (1 << IDTE));
+ USBCON &= ~((1 <<
OTGPADE) | (1 << VBUSTE) | (1 << IDTE));
#elif defined(USB_SERIES_4_AVR)
USBCON &= ~(1 << VBUSTE);
#endif
#elif defined(USB_SERIES_4_AVR)
USBCON &= ~(1 << VBUSTE);
#endif
+ #if defined(USB_CAN_BE_BOTH)
+ OTGIEN = 0;
+ #endif
+
#if defined(USB_CAN_BE_HOST)
UHIEN = 0;
#if defined(USB_CAN_BE_HOST)
UHIEN = 0;
- OTGIEN = 0;
#endif
#if defined(USB_CAN_BE_DEVICE)
#endif
#if defined(USB_CAN_BE_DEVICE)
@@
-55,9
+58,12
@@
void USB_INT_ClearAllInterrupts(void)
USBINT = 0;
#endif
USBINT = 0;
#endif
+ #if defined(USB_CAN_BE_BOTH)
+ OTGINT = 0;
+ #endif
+
#if defined(USB_CAN_BE_HOST)
UHINT = 0;
#if defined(USB_CAN_BE_HOST)
UHINT = 0;
- OTGINT = 0;
#endif
#if defined(USB_CAN_BE_DEVICE)
#endif
#if defined(USB_CAN_BE_DEVICE)
@@
-86,12
+92,12
@@
ISR(USB_GEN_vect, ISR_BLOCK)
}
#endif
}
#endif
- if (USB_INT_HasOccurred(USB_INT_SUSP
END) && USB_INT_IsEnabled(USB_INT_SUSPEND
))
+ if (USB_INT_HasOccurred(USB_INT_SUSP
I) && USB_INT_IsEnabled(USB_INT_SUSPI
))
{
{
- USB_INT_Clear(USB_INT_SUSP
END
);
+ USB_INT_Clear(USB_INT_SUSP
I
);
- USB_INT_Disable(USB_INT_SUSP
END
);
- USB_INT_Enable(USB_INT_WAKEUP);
+ USB_INT_Disable(USB_INT_SUSP
I
);
+ USB_INT_Enable(USB_INT_WAKEUP
I
);
USB_CLK_Freeze();
USB_CLK_Freeze();
@@
-107,7
+113,7
@@
ISR(USB_GEN_vect, ISR_BLOCK)
#endif
}
#endif
}
- if (USB_INT_HasOccurred(USB_INT_WAKEUP
) && USB_INT_IsEnabled(USB_INT_WAKEUP
))
+ if (USB_INT_HasOccurred(USB_INT_WAKEUP
I) && USB_INT_IsEnabled(USB_INT_WAKEUPI
))
{
if (!(USB_Options & USB_OPT_MANUAL_PLL))
{
{
if (!(USB_Options & USB_OPT_MANUAL_PLL))
{
@@
-117,10
+123,10
@@
ISR(USB_GEN_vect, ISR_BLOCK)
USB_CLK_Unfreeze();
USB_CLK_Unfreeze();
- USB_INT_Clear(USB_INT_WAKEUP);
+ USB_INT_Clear(USB_INT_WAKEUP
I
);
- USB_INT_Disable(USB_INT_WAKEUP);
- USB_INT_Enable(USB_INT_SUSP
END
);
+ USB_INT_Disable(USB_INT_WAKEUP
I
);
+ USB_INT_Enable(USB_INT_SUSP
I
);
#if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)
USB_DeviceState = (USB_ConfigurationNumber) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;
#if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)
USB_DeviceState = (USB_ConfigurationNumber) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;
@@
-138,11
+144,9
@@
ISR(USB_GEN_vect, ISR_BLOCK)
USB_DeviceState = DEVICE_STATE_Default;
USB_ConfigurationNumber = 0;
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);
-
- Endpoint_ClearEndpoints();
+ 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,
Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,
ENDPOINT_DIR_OUT, USB_ControlEndpointSize,
@@
-164,6
+168,8
@@
ISR(USB_GEN_vect, ISR_BLOCK)
#endif
#if defined(USB_CAN_BE_HOST)
#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);
if (USB_INT_HasOccurred(USB_INT_DDISCI) && USB_INT_IsEnabled(USB_INT_DDISCI))
{
USB_INT_Clear(USB_INT_DDISCI);
@@
-171,8
+177,8
@@
ISR(USB_GEN_vect, ISR_BLOCK)
USB_INT_Disable(USB_INT_DDISCI);
EVENT_USB_Host_DeviceUnattached();
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))
}
if (USB_INT_HasOccurred(USB_INT_VBERRI) && USB_INT_IsEnabled(USB_INT_VBERRI))
@@
-207,7
+213,7
@@
ISR(USB_GEN_vect, ISR_BLOCK)
EVENT_USB_Host_DeviceEnumerationFailed(HOST_ENUMERROR_NoDeviceDetected, 0);
EVENT_USB_Host_DeviceUnattached();
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))
}
if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI))
@@
-232,8
+238,11
@@
ISR(USB_GEN_vect, ISR_BLOCK)
USB_CurrentMode = USB_GetUSBModeFromUID();
EVENT_USB_UIDChange();
USB_CurrentMode = USB_GetUSBModeFromUID();
EVENT_USB_UIDChange();
-
USB_ResetInterface()
;
+
MustResetInterface = true
;
}
}
+
+ if (MustResetInterface)
+ USB_ResetInterface();
#endif
}
#endif
}