Complete USB XMEGA interrupt control subsystem code in the core USB driver.
[pub/USBasp.git] / LUFA / Drivers / USB / Core / XMEGA / USBInterrupt_XMEGA.h
index 6dcb0e6..b6acec4 100644 (file)
                /* Enums: */\r
                        enum USB_Interrupts_t\r
                        {\r
-                               USB_INT_NONE  = 0, // TODO\r
+                               USB_INT_BUSEVENTI         = 1,\r
+                               USB_INT_BUSEVENTI_Suspend = 2,\r
+                               USB_INT_BUSEVENTI_Resume  = 3,\r
+                               USB_INT_BUSEVENTI_Reset   = 4,\r
+                               USB_INT_SOFI              = 5,\r
                        };\r
 \r
                /* Inline Functions: */\r
                        static inline void USB_INT_Enable(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;\r
                        static inline void USB_INT_Enable(const uint8_t Interrupt)\r
                        {\r
-                               // TODO\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_BUSEVENTI:\r
+                                               USB.INTCTRLA |=  USB_BUSEVIE_bm;\r
+                                               return;\r
+                                       case USB_INT_SOFI:\r
+                                               USB.INTCTRLA |=  USB_SOFIE_bm;                                          \r
+                                               return;                         \r
+                               }\r
                        }\r
 \r
                        static inline void USB_INT_Disable(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;\r
                        static inline void USB_INT_Disable(const uint8_t Interrupt)\r
                        {\r
-                               // TODO\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_BUSEVENTI:\r
+                                               USB.INTCTRLA &= ~USB_BUSEVIE_bm;\r
+                                               return;\r
+                                       case USB_INT_SOFI:\r
+                                               USB.INTCTRLA &= ~USB_SOFIE_bm;                                          \r
+                                               return;                         \r
+                               }\r
                        }\r
                        \r
                        static inline void USB_INT_Clear(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;\r
                        static inline void USB_INT_Clear(const uint8_t Interrupt)\r
                        {\r
-                               // TODO\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_BUSEVENTI_Suspend:\r
+                                               USB.INTFLAGSACLR = USB_SUSPENDIF_bm;\r
+                                               return;\r
+                                       case USB_INT_BUSEVENTI_Resume:\r
+                                               USB.INTFLAGSACLR = USB_RESUMEIF_bm;\r
+                                               return;\r
+                                       case USB_INT_BUSEVENTI_Reset:\r
+                                               USB.INTFLAGSACLR = USB_RSTIF_bm;\r
+                                               return;\r
+                                       case USB_INT_SOFI:\r
+                                               USB.INTFLAGSACLR = USB_SOFIF_bm;                                                \r
+                                               return;                         \r
+                               }\r
                        }\r
                        \r
                        static inline bool USB_INT_IsEnabled(const uint8_t Interrupt) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;\r
                        static inline bool USB_INT_IsEnabled(const uint8_t Interrupt)\r
                        {\r
-                               return false; // TODO\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_BUSEVENTI:\r
+                                               return (USB.INTCTRLA & USB_BUSEVIE_bm);\r
+                                       case USB_INT_SOFI:\r
+                                               return (USB.INTCTRLA & USB_SOFIE_bm);\r
+                               }\r
+                               \r
+                               return false;\r
                        }\r
                \r
                        static inline bool USB_INT_HasOccurred(const uint8_t Interrupt) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;\r
                        static inline bool USB_INT_HasOccurred(const uint8_t Interrupt)\r
                        {\r
-                               return false; // TODO\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_BUSEVENTI_Suspend:\r
+                                               return (USB.INTFLAGSACLR & USB_SUSPENDIF_bm);\r
+                                       case USB_INT_BUSEVENTI_Resume:\r
+                                               return (USB.INTFLAGSACLR & USB_RESUMEIF_bm);\r
+                                       case USB_INT_BUSEVENTI_Reset:\r
+                                               return (USB.INTFLAGSACLR & USB_RSTIF_bm);\r
+                                       case USB_INT_SOFI:\r
+                                               return (USB.INTFLAGSACLR & USB_SOFIF_bm);\r
+                               }\r
+                               \r
+                               return false;\r
                        }\r
 \r
                /* Includes: */\r