Complete USB XMEGA interrupt control subsystem code in the core USB driver.
[pub/USBasp.git] / LUFA / Drivers / USB / Core / XMEGA / USBInterrupt_XMEGA.c
index cb80622..b52a716 100644 (file)
 \r
 void USB_INT_DisableAllInterrupts(void)\r
 {\r
-       // TODO\r
+       USB.INTCTRLA     = 0;\r
+       USB.INTCTRLB     = 0;\r
 }\r
 \r
 void USB_INT_ClearAllInterrupts(void)\r
 {\r
-       // TODO\r
+       USB.INTFLAGSACLR = 0xFF;\r
+       USB.INTFLAGSBCLR = 0xFF;\r
 }\r
 \r
-// TODO: USB ISR\r
+ISR(USB_BUSEVENT_vect)\r
+{\r
+       #if !defined(NO_SOF_EVENTS)\r
+       if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI))\r
+       {\r
+               USB_INT_Clear(USB_INT_SOFI);\r
+\r
+               EVENT_USB_Device_StartOfFrame();\r
+       }\r
+       #endif\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_BUSEVENTI_Suspend))\r
+       {\r
+               USB_INT_Clear(USB_INT_BUSEVENTI_Suspend);\r
+\r
+               #if !defined(NO_LIMITED_CONTROLLER_CONNECT)\r
+               USB_DeviceState = DEVICE_STATE_Unattached;\r
+               EVENT_USB_Device_Disconnect();\r
+               #else\r
+               USB_DeviceState = DEVICE_STATE_Suspended;\r
+               EVENT_USB_Device_Suspend();\r
+               #endif\r
+       }\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_BUSEVENTI_Resume))\r
+       {\r
+               USB_INT_Clear(USB_INT_BUSEVENTI_Resume);\r
+               \r
+               if (USB_Device_ConfigurationNumber)\r
+                 USB_DeviceState = DEVICE_STATE_Configured;\r
+               else\r
+                 USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;\r
+\r
+               #if !defined(NO_LIMITED_CONTROLLER_CONNECT)\r
+               EVENT_USB_Device_Connect();\r
+               #else\r
+               EVENT_USB_Device_WakeUp();\r
+               #endif\r
+       }\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_BUSEVENTI_Reset))\r
+       {\r
+               USB_INT_Clear(USB_INT_BUSEVENTI_Reset);\r
+               \r
+               USB_DeviceState                = DEVICE_STATE_Default;\r
+               USB_Device_ConfigurationNumber = 0;\r
+\r
+               Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,\r
+                                          ENDPOINT_DIR_OUT, USB_Device_ControlEndpointSize,\r
+                                          ENDPOINT_BANK_SINGLE);\r
+\r
+               EVENT_USB_Device_Reset();\r
+       }\r
+}\r
 \r