From 04526d284dec7f2b2b2cd3716de979d8d3140198 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Sun, 27 Feb 2011 20:00:15 +0000
Subject: [PATCH] Changed over the AVR8 USB controller interrupt management
 macros to be inlined functions instead, for better compile-time validity
 checking and to keep the per-architecture source files as uniform as
 possible.

---
 .../USB/Core/AVR8/USBController_AVR8.c        |   2 +-
 .../Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c |   4 +-
 .../Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h | 270 ++++++++++++++++--
 .../USB/Core/UC3B/USBController_UC3B.c        |   2 +-
 .../Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c |   4 +-
 .../Drivers/USB/Core/UC3B/USBInterrupt_UC3B.h | 105 +++----
 LUFA/ManPages/WhyUseLUFA.txt                  |   2 +-
 7 files changed, 305 insertions(+), 84 deletions(-)

diff --git a/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
index 797981107..18fa48a23 100644
--- a/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
+++ b/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
@@ -197,7 +197,7 @@ static void USB_Init_Device(void)
 	else
 	  USB_Device_SetFullSpeed();
 
-	USB_INT_Enable(USB_INT_VBUS);
+	USB_INT_Enable(USB_INT_VBUSTI);
 	#endif
 
 	Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,
diff --git a/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c
index f4f7ad988..e983cde83 100644
--- a/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c
+++ b/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c
@@ -84,9 +84,9 @@ ISR(USB_GEN_vect, ISR_BLOCK)
 	#endif
 
 	#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))
+	if (USB_INT_HasOccurred(USB_INT_VBUSTI) && USB_INT_IsEnabled(USB_INT_VBUSTI))
 	{
-		USB_INT_Clear(USB_INT_VBUS);
+		USB_INT_Clear(USB_INT_VBUSTI);
 
 		if (USB_VBUS_GetStatus())
 		{
diff --git a/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h
index 940fa195e..ebefd1903 100644
--- a/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h
+++ b/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h
@@ -56,32 +56,252 @@
 
 	/* Private Interface - For use in library only: */
 	#if !defined(__DOXYGEN__)
-		/* Macros: */
-			#define USB_INT_Enable(int)       MACROS{ USB_INT_GET_EN_REG(int)   |=   USB_INT_GET_EN_MASK(int);   }MACROE
-			#define USB_INT_Disable(int)      MACROS{ USB_INT_GET_EN_REG(int)   &= ~(USB_INT_GET_EN_MASK(int));  }MACROE
-			#define USB_INT_Clear(int)        MACROS{ USB_INT_GET_INT_REG(int)  &= ~(USB_INT_GET_INT_MASK(int)); }MACROE
-			#define USB_INT_IsEnabled(int)          ((USB_INT_GET_EN_REG(int)   &    USB_INT_GET_EN_MASK(int))  ? true : false)
-			#define USB_INT_HasOccurred(int)        ((USB_INT_GET_INT_REG(int)  &    USB_INT_GET_INT_MASK(int)) ? true : false)
-
-			#define USB_INT_GET_EN_REG(EnableReg, EnableMask, FlagReg, FlagMask)    EnableReg
-			#define USB_INT_GET_EN_MASK(EnableReg, EnableMask, FlagReg, FlagMask)   EnableMask
-			#define USB_INT_GET_INT_REG(EnableReg, EnableMask, FlagReg, FlagMask)   FlagReg
-			#define USB_INT_GET_INT_MASK(EnableReg, EnableMask, FlagReg, FlagMask)  FlagMask
+		/* Enums: */
+			enum USB_Interrupts_t
+			{
+				USB_INT_VBUSTI  = 0,
+				USB_INT_IDTI    = 1,
+				USB_INT_WAKEUPI = 2,
+				USB_INT_SUSPI   = 3,
+				USB_INT_EORSTI  = 4,
+				USB_INT_SOFI    = 5,
+				USB_INT_HSOFI   = 6,
+				USB_INT_DCONNI  = 7,
+				USB_INT_DDISCI  = 8,
+				USB_INT_RSTI    = 9,
+				USB_INT_BCERRI  = 10,
+				USB_INT_VBERRI  = 11,
+				USB_INT_SRPI    = 12,
+				USB_INT_RXSTPI  = 13,
+			};
+
+		/* Inline Functions: */
+			static inline void USB_INT_Enable(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;
+			static inline void USB_INT_Enable(const uint8_t Interrupt)
+			{
+				switch (Interrupt)
+				{
+					case USB_INT_VBUSTI:
+						USBCON |= (1 << VBUSTE);
+						break;
+					case USB_INT_IDTI:
+						USBCON |= (1 << IDTE);
+						break;
+					case USB_INT_WAKEUPI:
+						UDIEN  |= (1 << WAKEUPE);
+						break;
+					case USB_INT_SUSPI:
+						UDIEN  |= (1 << SUSPE);
+						break;
+					case USB_INT_EORSTI:
+						UDIEN  |= (1 << EORSTE);
+						break;
+					case USB_INT_SOFI:
+						UDIEN  |= (1 << SOFE);
+						break;
+					case USB_INT_HSOFI:
+						UHIEN  |= (1 << HSOFE);
+						break;
+					case USB_INT_DCONNI:
+						UHIEN  |= (1 << DCONNE);
+						break;
+					case USB_INT_DDISCI:
+						UHIEN  |= (1 << DDISCE);
+						break;
+					case USB_INT_RSTI:
+						UHIEN  |= (1 << RSTE);
+						break;
+					case USB_INT_BCERRI:
+						OTGIEN |= (1 << BCERRE);
+						break;
+					case USB_INT_VBERRI:
+						OTGIEN |= (1 << VBERRE);
+						break;
+					case USB_INT_SRPI:
+						OTGIEN |= (1 << SRPE);						
+						break;
+					case USB_INT_RXSTPI:
+						UEIENX |= (1 << RXSTPE);
+						break;
+				}
+			}
+
+			static inline void USB_INT_Disable(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;
+			static inline void USB_INT_Disable(const uint8_t Interrupt)
+			{
+				switch (Interrupt)
+				{
+					case USB_INT_VBUSTI:
+						USBCON &= ~(1 << VBUSTE);
+						break;
+					case USB_INT_IDTI:
+						USBCON &= ~(1 << IDTE);
+						break;
+					case USB_INT_WAKEUPI:
+						UDIEN  &= ~(1 << WAKEUPE);
+						break;
+					case USB_INT_SUSPI:
+						UDIEN  &= ~(1 << SUSPE);
+						break;
+					case USB_INT_EORSTI:
+						UDIEN  &= ~(1 << EORSTE);
+						break;
+					case USB_INT_SOFI:
+						UDIEN  &= ~(1 << SOFE);
+						break;
+					case USB_INT_HSOFI:
+						UHIEN  &= ~(1 << HSOFE);
+						break;
+					case USB_INT_DCONNI:
+						UHIEN  &= ~(1 << DCONNE);
+						break;
+					case USB_INT_DDISCI:
+						UHIEN  &= ~(1 << DDISCE);
+						break;
+					case USB_INT_RSTI:
+						UHIEN  &= ~(1 << RSTE);
+						break;
+					case USB_INT_BCERRI:
+						OTGIEN &= ~(1 << BCERRE);
+						break;
+					case USB_INT_VBERRI:
+						OTGIEN &= ~(1 << VBERRE);
+						break;
+					case USB_INT_SRPI:
+						OTGIEN &= ~(1 << SRPE);						
+						break;
+					case USB_INT_RXSTPI:
+						UEIENX &= ~(1 << RXSTPE);
+						break;
+				}
+			}
 			
-			#define USB_INT_VBUS     USBCON, (1 << VBUSTE) , USBINT, (1 << VBUSTI)
-			#define USB_INT_IDTI     USBCON, (1 << IDTE)   , USBINT, (1 << IDTI)
-			#define USB_INT_WAKEUPI  UDIEN , (1 << WAKEUPE), UDINT , (1 << WAKEUPI)
-			#define USB_INT_SUSPI    UDIEN , (1 << SUSPE)  , UDINT , (1 << SUSPI)
-			#define USB_INT_EORSTI   UDIEN , (1 << EORSTE) , UDINT , (1 << EORSTI)
-			#define USB_INT_DCONNI   UHIEN , (1 << DCONNE) , UHINT , (1 << DCONNI)
-			#define USB_INT_DDISCI   UHIEN , (1 << DDISCE) , UHINT , (1 << DDISCI)
-			#define USB_INT_BCERRI   OTGIEN, (1 << BCERRE) , OTGINT, (1 << BCERRI)
-			#define USB_INT_VBERRI   OTGIEN, (1 << VBERRE) , OTGINT, (1 << VBERRI)
-			#define USB_INT_SOFI     UDIEN,  (1 << SOFE)   , UDINT , (1 << SOFI)
-			#define USB_INT_HSOFI    UHIEN,  (1 << HSOFE)  , UHINT , (1 << HSOFI)
-			#define USB_INT_RSTI     UHIEN , (1 << RSTE)   , UHINT , (1 << RSTI)
-			#define USB_INT_SRPI     OTGIEN, (1 << SRPE)   , OTGINT, (1 << SRPI)
-			#define USB_INT_RXSTPI   UEIENX, (1 << RXSTPE) , UEINTX, (1 << RXSTPI)
+			static inline void USB_INT_Clear(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;
+			static inline void USB_INT_Clear(const uint8_t Interrupt)
+			{
+				switch (Interrupt)
+				{
+					case USB_INT_VBUSTI:
+						USBINT &= ~(1 << VBUSTI);
+						break;
+					case USB_INT_IDTI:
+						USBINT &= ~(1 << IDTI);
+						break;
+					case USB_INT_WAKEUPI:
+						UDINT  &= ~(1 << WAKEUPI);
+						break;
+					case USB_INT_SUSPI:
+						UDINT  &= ~(1 << SUSPI);
+						break;
+					case USB_INT_EORSTI:
+						UDINT  &= ~(1 << EORSTI);
+						break;
+					case USB_INT_SOFI:
+						UDINT  &= ~(1 << SOFI);
+						break;
+					case USB_INT_HSOFI:
+						UHINT  &= ~(1 << HSOFI);
+						break;
+					case USB_INT_DCONNI:
+						UHINT  &= ~(1 << DCONNI);
+						break;
+					case USB_INT_DDISCI:
+						UHINT  &= ~(1 << DDISCI);
+						break;
+					case USB_INT_RSTI:
+						UHINT  &= ~(1 << RSTI);
+						break;
+					case USB_INT_BCERRI:
+						OTGINT &= ~(1 << BCERRI);
+						break;
+					case USB_INT_VBERRI:
+						OTGINT &= ~(1 << VBERRI);
+						break;
+					case USB_INT_SRPI:
+						OTGINT &= ~(1 << SRPI);
+						break;
+					case USB_INT_RXSTPI:
+						UEINTX &= ~(1 << RXSTPI);
+						break;
+				}
+			}
+			
+			static inline bool USB_INT_IsEnabled(const uint8_t Interrupt) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
+			static inline bool USB_INT_IsEnabled(const uint8_t Interrupt)
+			{
+				switch (Interrupt)
+				{
+					case USB_INT_VBUSTI:
+						return (USBCON & (1 << VBUSTE));
+					case USB_INT_IDTI:
+						return (USBCON & (1 << IDTE));
+					case USB_INT_WAKEUPI:
+						return (UDIEN  & (1 << WAKEUPE));
+					case USB_INT_SUSPI:
+						return (UDIEN  & (1 << SUSPE));
+					case USB_INT_EORSTI:
+						return (UDIEN  & (1 << EORSTE));
+					case USB_INT_SOFI:
+						return (UDIEN  & (1 << SOFE));
+					case USB_INT_HSOFI:
+						return (UHIEN  & (1 << HSOFE));
+					case USB_INT_DCONNI:
+						return (UHIEN  & (1 << DCONNE));
+					case USB_INT_DDISCI:
+						return (UHIEN  & (1 << DDISCE));
+					case USB_INT_RSTI:
+						return (UHIEN  & (1 << RSTE));
+					case USB_INT_BCERRI:
+						return (OTGIEN & (1 << BCERRE));
+					case USB_INT_VBERRI:
+						return (OTGIEN & (1 << VBERRE));
+					case USB_INT_SRPI:
+						return (OTGIEN & (1 << SRPE));
+					case USB_INT_RXSTPI:
+						return (UEIENX & (1 << RXSTPE));
+						break;
+				}
+				
+				return false;
+			}
+		
+			static inline bool USB_INT_HasOccurred(const uint8_t Interrupt) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
+			static inline bool USB_INT_HasOccurred(const uint8_t Interrupt)
+			{
+				switch (Interrupt)
+				{
+					case USB_INT_VBUSTI:
+						return (USBINT & (1 << VBUSTI));
+					case USB_INT_IDTI:
+						return (USBINT & (1 << IDTI));
+					case USB_INT_WAKEUPI:
+						return (UDINT  & (1 << WAKEUPI));
+					case USB_INT_SUSPI:
+						return (UDINT  & (1 << SUSPI));
+					case USB_INT_EORSTI:
+						return (UDINT  & (1 << EORSTI));
+					case USB_INT_SOFI:
+						return (UDINT  & (1 << SOFI));
+					case USB_INT_HSOFI:
+						return (UHINT  & (1 << HSOFI));
+					case USB_INT_DCONNI:
+						return (UHINT  & (1 << DCONNI));
+					case USB_INT_DDISCI:
+						return (UHINT  & (1 << DDISCI));
+					case USB_INT_RSTI:
+						return (UHINT  & (1 << RSTI));
+					case USB_INT_BCERRI:
+						return (OTGINT & (1 << BCERRI));
+					case USB_INT_VBERRI:
+						return (OTGINT & (1 << VBERRI));
+					case USB_INT_SRPI:
+						return (OTGINT & (1 << SRPI));
+					case USB_INT_RXSTPI:
+						return (UEINTX & (1 << RXSTPI));
+				}
+
+				return false;
+			}
 
 		/* Includes: */
 			#include "../USBMode.h"
diff --git a/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c b/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c
index cc4de29dd..9ae5a27c6 100644
--- a/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c
+++ b/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c
@@ -160,7 +160,7 @@ static void USB_Init_Device(void)
 	else
 	  USB_Device_SetFullSpeed();
 
-	USB_INT_Enable(USB_INT_VBUS);
+	USB_INT_Enable(USB_INT_VBUSTI);
 
 	Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,
 							   ENDPOINT_DIR_OUT, USB_ControlEndpointSize,
diff --git a/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c b/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c
index beab9f0da..0603d5c4a 100644
--- a/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c
+++ b/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c
@@ -61,9 +61,9 @@ ISR(USB_GEN_vect)
 	}
 	#endif
 
-	if (USB_INT_HasOccurred(USB_INT_VBUS) && USB_INT_IsEnabled(USB_INT_VBUS))
+	if (USB_INT_HasOccurred(USB_INT_VBUSTI) && USB_INT_IsEnabled(USB_INT_VBUSTI))
 	{
-		USB_INT_Clear(USB_INT_VBUS);
+		USB_INT_Clear(USB_INT_VBUSTI);
 
 		if (USB_VBUS_GetStatus())
 		{
diff --git a/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.h b/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.h
index e7ad1e82d..e2f96e621 100644
--- a/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.h
+++ b/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.h
@@ -59,28 +59,29 @@
 		/* Macros: */
 			enum USB_Interrupts_t
 			{
-				USB_INT_VBUS    = 0,
+				USB_INT_VBUSTI  = 0,
 				USB_INT_IDTI    = 1,
 				USB_INT_WAKEUPI = 2,
 				USB_INT_SUSPI   = 3,
 				USB_INT_EORSTI  = 4,
-				USB_INT_DCONNI  = 5,
-				USB_INT_DDISCI  = 6,
-				USB_INT_BCERRI  = 7,
-				USB_INT_VBERRI  = 8,
-				USB_INT_SOFI    = 9,
-				USB_INT_HSOFI   = 10,
-				USB_INT_RSTI    = 11,
+				USB_INT_SOFI    = 5,
+				USB_INT_HSOFI   = 6,
+				USB_INT_DCONNI  = 7,
+				USB_INT_DDISCI  = 8,
+				USB_INT_RSTI    = 9,
+				USB_INT_BCERRI  = 10,
+				USB_INT_VBERRI  = 11,
 				USB_INT_SRPI    = 12,
 				USB_INT_RXSTPI  = 13,
 			};
 			
+		/* Inline Functions: */
 			static inline void USB_INT_Enable(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;
 			static inline void USB_INT_Enable(const uint8_t Interrupt)
 			{
 				switch (Interrupt)
 				{
-					case USB_INT_VBUS:
+					case USB_INT_VBUSTI:
 						AVR32_USBB.USBCON.vbuste      = true;
 						break;
 					case USB_INT_IDTI:
@@ -95,27 +96,27 @@
 					case USB_INT_EORSTI:
 						AVR32_USBB.UDINTESET.eorstes  = true;
 						break;
+					case USB_INT_SOFI:
+						AVR32_USBB.UDINTESET.sofes    = true;
+						break;
+					case USB_INT_HSOFI:
+						AVR32_USBB.UHINTESET.hsofies  = true;
+						break;
 					case USB_INT_DCONNI:
 						AVR32_USBB.UHINTESET.dconnies = true;
 						break;
 					case USB_INT_DDISCI:
 						AVR32_USBB.UHINTESET.ddiscies = true;
 						break;
+					case USB_INT_RSTI:
+						AVR32_USBB.UHINTESET.rsties   = true;
+						break;
 					case USB_INT_BCERRI:
 						AVR32_USBB.USBCON.bcerre      = true;
 						break;
 					case USB_INT_VBERRI:
 						AVR32_USBB.USBCON.vberre      = true;
 						break;
-					case USB_INT_SOFI:
-						AVR32_USBB.UDINTESET.sofes    = true;
-						break;
-					case USB_INT_HSOFI:
-						AVR32_USBB.UHINTESET.hsofies  = true;
-						break;
-					case USB_INT_RSTI:
-						AVR32_USBB.UHINTESET.rsties   = true;
-						break;
 					case USB_INT_SRPI:
 					case USB_INT_RXSTPI:
 						// TODO
@@ -128,7 +129,7 @@
 			{
 				switch (Interrupt)
 				{
-					case USB_INT_VBUS:
+					case USB_INT_VBUSTI:
 						AVR32_USBB.USBCON.vbuste      = false;
 						break;
 					case USB_INT_IDTI:
@@ -143,27 +144,27 @@
 					case USB_INT_EORSTI:
 						AVR32_USBB.UDINTECLR.eorstec  = true;
 						break;
+					case USB_INT_SOFI:
+						AVR32_USBB.UDINTECLR.sofec    = true;
+						break;
+					case USB_INT_HSOFI:
+						AVR32_USBB.UHINTECLR.hsofiec  = true;
+						break;
 					case USB_INT_DCONNI:
 						AVR32_USBB.UHINTECLR.dconniec = true;
 						break;
 					case USB_INT_DDISCI:
 						AVR32_USBB.UHINTECLR.ddisciec = true;
 						break;
+					case USB_INT_RSTI:
+						AVR32_USBB.UHINTECLR.rstiec   = true;
+						break;
 					case USB_INT_BCERRI:
 						AVR32_USBB.USBCON.bcerre      = false;
 						break;
 					case USB_INT_VBERRI:
 						AVR32_USBB.USBCON.vberre      = false;
 						break;
-					case USB_INT_SOFI:
-						AVR32_USBB.UDINTECLR.sofec    = true;
-						break;
-					case USB_INT_HSOFI:
-						AVR32_USBB.UHINTECLR.hsofiec  = true;
-						break;
-					case USB_INT_RSTI:
-						AVR32_USBB.UHINTECLR.rstiec   = true;
-						break;
 					case USB_INT_SRPI:
 					case USB_INT_RXSTPI:
 						// TODO
@@ -176,7 +177,7 @@
 			{
 				switch (Interrupt)
 				{
-					case USB_INT_VBUS:
+					case USB_INT_VBUSTI:
 						AVR32_USBB.USBSTACLR.vbustic = true;
 						break;
 					case USB_INT_IDTI:
@@ -191,27 +192,27 @@
 					case USB_INT_EORSTI:
 						AVR32_USBB.UDINTCLR.eorstc   = true;
 						break;
+					case USB_INT_SOFI:
+						AVR32_USBB.UDINTCLR.sofc     = true;
+						break;
+					case USB_INT_HSOFI:
+						AVR32_USBB.UHINTCLR.hsofic   = true;
+						break;
 					case USB_INT_DCONNI:
 						AVR32_USBB.UHINTCLR.dconnic  = true;
 						break;
 					case USB_INT_DDISCI:
 						AVR32_USBB.UHINTCLR.ddiscic  = true;
 						break;
+					case USB_INT_RSTI:
+						AVR32_USBB.UHINTCLR.rstic    = true;
+						break;
 					case USB_INT_BCERRI:
 						AVR32_USBB.USBSTACLR.bcerric = true;
 						break;
 					case USB_INT_VBERRI:
 						AVR32_USBB.USBSTACLR.vberric = true;
 						break;
-					case USB_INT_SOFI:
-						AVR32_USBB.UDINTCLR.sofc     = true;
-						break;
-					case USB_INT_HSOFI:
-						AVR32_USBB.UHINTCLR.hsofic   = true;
-						break;
-					case USB_INT_RSTI:
-						AVR32_USBB.UHINTCLR.rstic    = true;
-						break;
 					case USB_INT_SRPI:
 					case USB_INT_RXSTPI:
 						// TODO
@@ -224,7 +225,7 @@
 			{
 				switch (Interrupt)
 				{
-					case USB_INT_VBUS:
+					case USB_INT_VBUSTI:
 						return AVR32_USBB.USBCON.vbuste;
 					case USB_INT_IDTI:
 						return AVR32_USBB.USBCON.idte;
@@ -234,20 +235,20 @@
 						return AVR32_USBB.UDINTE.suspe;
 					case USB_INT_EORSTI:
 						return AVR32_USBB.UDINTE.eorste;
+					case USB_INT_SOFI:
+						return AVR32_USBB.UDINTE.sofe;
+					case USB_INT_HSOFI:
+						return AVR32_USBB.UHINTE.hsofie;
 					case USB_INT_DCONNI:
 						return AVR32_USBB.UHINTE.dconnie;
 					case USB_INT_DDISCI:
 						return AVR32_USBB.UHINTE.ddiscie;
+					case USB_INT_RSTI:
+						return AVR32_USBB.UHINTE.rstie;
 					case USB_INT_BCERRI:
 						return AVR32_USBB.USBCON.bcerre;
 					case USB_INT_VBERRI:
 						return AVR32_USBB.USBCON.vberre;
-					case USB_INT_SOFI:
-						return AVR32_USBB.UDINTE.sofe;
-					case USB_INT_HSOFI:
-						return AVR32_USBB.UHINTE.hsofie;
-					case USB_INT_RSTI:
-						return AVR32_USBB.UHINTE.rstie;
 					case USB_INT_SRPI:
 					case USB_INT_RXSTPI:
 						// TODO
@@ -262,7 +263,7 @@
 			{
 				switch (Interrupt)
 				{
-					case USB_INT_VBUS:
+					case USB_INT_VBUSTI:
 						return AVR32_USBB.USBSTA.vbusti;
 					case USB_INT_IDTI:
 						return AVR32_USBB.USBSTA.idti;
@@ -272,20 +273,20 @@
 						return AVR32_USBB.UDINT.susp;
 					case USB_INT_EORSTI:
 						return AVR32_USBB.UDINT.eorst;
+					case USB_INT_SOFI:
+						return AVR32_USBB.UDINT.sof;
+					case USB_INT_HSOFI:
+						return AVR32_USBB.UHINT.hsofi;
 					case USB_INT_DCONNI:
 						return AVR32_USBB.UHINT.dconni;
 					case USB_INT_DDISCI:
 						return AVR32_USBB.UHINT.ddisci;
+					case USB_INT_RSTI:
+						return AVR32_USBB.UHINT.rsti;
 					case USB_INT_BCERRI:
 						return AVR32_USBB.USBSTA.bcerri;
 					case USB_INT_VBERRI:
 						return AVR32_USBB.USBSTA.vberri;
-					case USB_INT_SOFI:
-						return AVR32_USBB.UDINT.sof;
-					case USB_INT_HSOFI:
-						return AVR32_USBB.UHINT.hsofi;
-					case USB_INT_RSTI:
-						return AVR32_USBB.UHINT.rsti;
 					case USB_INT_SRPI:
 					case USB_INT_RXSTPI:
 						// TODO
diff --git a/LUFA/ManPages/WhyUseLUFA.txt b/LUFA/ManPages/WhyUseLUFA.txt
index 0428a898a..d83c76b1a 100644
--- a/LUFA/ManPages/WhyUseLUFA.txt
+++ b/LUFA/ManPages/WhyUseLUFA.txt
@@ -40,7 +40,7 @@
  *    into difficulties or need some advice. In addition, you can also email the library author to receive personalized
  *    support when you need it (subject to author's schedule).
  *
- *   <small>* Atmel Stack Mouse Device Demo 4218 bytes, LUFA Mouse Low Level Device Demo 3472 bytes, under identical build
+ *   <small>* Atmel Stack Mouse Device Demo 4218 bytes, LUFA Mouse Low Level Device Demo 3526 bytes, under identical build
  *   environments</small>
  */
 
-- 
GitLab