X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/6a10d6b465be27db090d760dc0fbe722c94e4344..09bedd6555a72c70f6d6bfb965225d44dec171cd:/LUFA/Drivers/USB/HighLevel/USBInterrupt.c diff --git a/LUFA/Drivers/USB/HighLevel/USBInterrupt.c b/LUFA/Drivers/USB/HighLevel/USBInterrupt.c index 58faa69de..a8083c92a 100644 --- a/LUFA/Drivers/USB/HighLevel/USBInterrupt.c +++ b/LUFA/Drivers/USB/HighLevel/USBInterrupt.c @@ -28,14 +28,13 @@ this software. */ -#include "../LowLevel/USBMode.h" #include "USBInterrupt.h" void USB_INT_DisableAllInterrupts(void) { - #if defined(USB_FULL_CONTROLLER) + #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) USBCON &= ~((1 << VBUSTE) | (1 << IDTE)); - #elif defined(USB_MODIFIED_FULL_CONTROLLER) + #elif defined(USB_SERIES_4_AVR) USBCON &= ~(1 << VBUSTE); #endif @@ -51,7 +50,7 @@ void USB_INT_DisableAllInterrupts(void) void USB_INT_ClearAllInterrupts(void) { - #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) USBINT = 0; #endif @@ -68,40 +67,20 @@ void USB_INT_ClearAllInterrupts(void) ISR(USB_GEN_vect, ISR_BLOCK) { #if defined(USB_CAN_BE_DEVICE) - #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) if (USB_INT_HasOccurred(USB_INT_VBUS) && USB_INT_IsEnabled(USB_INT_VBUS)) { USB_INT_Clear(USB_INT_VBUS); - RAISE_EVENT(USB_VBUSChange); - if (USB_VBUS_GetStatus()) { - RAISE_EVENT(USB_VBUSConnect); - - if (USB_IsConnected) - RAISE_EVENT(USB_Disconnect); - - USB_ResetInterface(); - - USB_IsConnected = true; - - RAISE_EVENT(USB_Connect); + USB_DeviceState = DEVICE_STATE_Powered; + EVENT_USB_Device_Connect(); } else { - RAISE_EVENT(USB_Disconnect); - - USB_Detach(); - USB_CLK_Freeze(); - USB_PLL_Off(); - USB_REG_Off(); - - USB_IsConnected = false; - - RAISE_EVENT(USB_VBUSDisconnect); - - USB_INT_Clear(USB_INT_VBUS); + USB_DeviceState = DEVICE_STATE_Unattached; + EVENT_USB_Device_Disconnect(); } } #endif @@ -118,16 +97,12 @@ ISR(USB_GEN_vect, ISR_BLOCK) if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); - USB_IsSuspended = true; - - RAISE_EVENT(USB_Suspend); - - #if defined(USB_LIMITED_CONTROLLER) && !defined(NO_LIMITED_CONTROLLER_CONNECT) - if (USB_IsConnected) - { - USB_IsConnected = false; - RAISE_EVENT(USB_Disconnect); - } + #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) + USB_DeviceState = DEVICE_STATE_Unattached; + EVENT_USB_Device_Disconnect(); + #else + USB_DeviceState = DEVICE_STATE_Suspended; + EVENT_USB_Device_Suspend(); #endif } @@ -146,23 +121,20 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_INT_Disable(USB_INT_WAKEUP); USB_INT_Enable(USB_INT_SUSPEND); - #if defined(USB_LIMITED_CONTROLLER) && !defined(NO_LIMITED_CONTROLLER_CONNECT) - if (!(USB_IsConnected)) - { - USB_IsConnected = true; - RAISE_EVENT(USB_Connect); - } + #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) + USB_DeviceState = (USB_ConfigurationNumber) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; + EVENT_USB_Device_Connect(); + #else + USB_DeviceState = (USB_ConfigurationNumber) ? DEVICE_STATE_Configured : DEVICE_STATE_Addressed; + EVENT_USB_Device_WakeUp(); #endif - - USB_IsSuspended = false; - - RAISE_EVENT(USB_WakeUp); } if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) { USB_INT_Clear(USB_INT_EORSTI); + USB_DeviceState = DEVICE_STATE_Default; USB_ConfigurationNumber = 0; USB_INT_Clear(USB_INT_SUSPEND); @@ -175,7 +147,18 @@ ISR(USB_GEN_vect, ISR_BLOCK) ENDPOINT_DIR_OUT, USB_ControlEndpointSize, ENDPOINT_BANK_SINGLE); - RAISE_EVENT(USB_Reset); + #if defined(INTERRUPT_CONTROL_ENDPOINT) + USB_INT_Enable(USB_INT_ENDPOINT_SETUP); + #endif + + EVENT_USB_Device_Reset(); + } + + if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) + { + USB_INT_Clear(USB_INT_SOFI); + + EVENT_USB_Device_StartOfFrame(); } #endif @@ -186,8 +169,7 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_INT_Clear(USB_INT_DCONNI); USB_INT_Disable(USB_INT_DDISCI); - RAISE_EVENT(USB_DeviceUnattached); - RAISE_EVENT(USB_Disconnect); + EVENT_USB_Host_DeviceUnattached(); USB_ResetInterface(); } @@ -199,8 +181,8 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_Host_VBUS_Manual_Off(); USB_Host_VBUS_Auto_Off(); - RAISE_EVENT(USB_HostError, HOST_ERROR_VBusVoltageDip); - RAISE_EVENT(USB_DeviceUnattached); + EVENT_USB_Host_HostError(HOST_ERROR_VBusVoltageDip); + EVENT_USB_Host_DeviceUnattached(); USB_HostState = HOST_STATE_Unattached; } @@ -210,22 +192,19 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_INT_Clear(USB_INT_SRPI); USB_INT_Disable(USB_INT_SRPI); - RAISE_EVENT(USB_DeviceAttached); + EVENT_USB_Host_DeviceAttached(); USB_INT_Enable(USB_INT_DDISCI); - USB_HostState = HOST_STATE_Attached; + USB_HostState = HOST_STATE_Powered; } if (USB_INT_HasOccurred(USB_INT_BCERRI) && USB_INT_IsEnabled(USB_INT_BCERRI)) { USB_INT_Clear(USB_INT_BCERRI); - RAISE_EVENT(USB_DeviceEnumerationFailed, HOST_ENUMERROR_NoDeviceDetected, 0); - RAISE_EVENT(USB_DeviceUnattached); - - if (USB_IsConnected) - RAISE_EVENT(USB_Disconnect); + EVENT_USB_Host_DeviceEnumerationFailed(HOST_ENUMERROR_NoDeviceDetected, 0); + EVENT_USB_Host_DeviceUnattached(); USB_ResetInterface(); } @@ -236,17 +215,29 @@ ISR(USB_GEN_vect, ISR_BLOCK) { USB_INT_Clear(USB_INT_IDTI); - if (USB_IsConnected) - { - if (USB_CurrentMode == USB_MODE_HOST) - RAISE_EVENT(USB_DeviceUnattached); - else - RAISE_EVENT(USB_Disconnect); - } + if (USB_DeviceState != DEVICE_STATE_Unattached) + EVENT_USB_Device_Disconnect(); - RAISE_EVENT(USB_UIDChange); + if (USB_HostState != HOST_STATE_Unattached) + EVENT_USB_Host_DeviceUnattached(); + USB_CurrentMode = USB_GetUSBModeFromUID(); + EVENT_USB_UIDChange(); + USB_ResetInterface(); } #endif } + +#if defined(INTERRUPT_CONTROL_ENDPOINT) +ISR(USB_COM_vect, ISR_BLOCK) +{ + uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint(); + + USB_USBTask(); + + USB_INT_Clear(USB_INT_ENDPOINT_SETUP); + + Endpoint_SelectEndpoint(PrevSelectedEndpoint); +} +#endif