From 5f3c4cc6e044bdfd4c35b5e27a2841b961766843 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Wed, 22 Sep 2010 04:20:45 +0000
Subject: [PATCH] Reverted modifications to USBInterrupt.h that were intefering
 with correct host mode operation.

Fixed SUSPI interrupt not being cleared during device mode enumeration, causing accidental mis-fires on re-enumeration.

Fixed JTAG_DEBUG_POINT() and JTAG_DEBUG_BREAK() macros not compiling under pure C99 standards mode.
---
 Demos/Host/Incomplete/BluetoothHost/makefile |  2 +-
 LUFA/Common/Common.h                         |  4 ++--
 LUFA/Drivers/USB/LowLevel/USBController.c    |  1 +
 LUFA/Drivers/USB/LowLevel/USBInterrupt.c     | 17 ++++++-----------
 LUFA/ManPages/ChangeLog.txt                  |  1 +
 5 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/Demos/Host/Incomplete/BluetoothHost/makefile b/Demos/Host/Incomplete/BluetoothHost/makefile
index 9620ffadf..c65cd0f5f 100644
--- a/Demos/Host/Incomplete/BluetoothHost/makefile
+++ b/Demos/Host/Incomplete/BluetoothHost/makefile
@@ -80,7 +80,7 @@ BOARD  = USBKEY
 #     does not *change* the processor frequency - it should merely be updated to
 #     reflect the processor speed set externally so that the code can use accurate
 #     software delays.
-F_CPU = 16000000
+F_CPU = 8000000
 
 
 # Input clock frequency.
diff --git a/LUFA/Common/Common.h b/LUFA/Common/Common.h
index e939b66f3..c750e4015 100644
--- a/LUFA/Common/Common.h
+++ b/LUFA/Common/Common.h
@@ -85,14 +85,14 @@
 			 *
 			 *  \ingroup Group_Debugging
 			 */
-			#define JTAG_DEBUG_POINT()      asm volatile ("NOP" ::)
+			#define JTAG_DEBUG_POINT()      __asm__ volatile ("NOP" ::)
 
 			/** Defines an explicit JTAG break point in the resulting binary via the ASM BREAK statement. When
 			 *  a JTAG is used, this causes the program execution to halt when reached until manually resumed.
 			 *
 			 *  \ingroup Group_Debugging
 			 */
-			#define JTAG_DEBUG_BREAK()      asm volatile ("BREAK" ::)
+			#define JTAG_DEBUG_BREAK()      __asm__ volatile ("BREAK" ::)
 			
 			/** Macro for testing condition "x" and breaking via JTAG_DEBUG_BREAK() if the condition is false.
 			 *
diff --git a/LUFA/Drivers/USB/LowLevel/USBController.c b/LUFA/Drivers/USB/LowLevel/USBController.c
index 51e560483..a542353eb 100644
--- a/LUFA/Drivers/USB/LowLevel/USBController.c
+++ b/LUFA/Drivers/USB/LowLevel/USBController.c
@@ -203,6 +203,7 @@ static void USB_Init_Device(void)
 							   ENDPOINT_DIR_OUT, USB_ControlEndpointSize,
 							   ENDPOINT_BANK_SINGLE);		
 
+	USB_INT_Clear(USB_INT_SUSPI);
 	USB_INT_Enable(USB_INT_SUSPI);
 	USB_INT_Enable(USB_INT_EORSTI);
 
diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
index 66a86a1b2..7844a87d7 100644
--- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
+++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
@@ -34,7 +34,7 @@
 void USB_INT_DisableAllInterrupts(void)
 {
 	#if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
-	USBCON &= ~((1 << OTGPADE) | (1 << VBUSTE) | (1 << IDTE));				
+	USBCON &= ~((1 << VBUSTE) | (1 << IDTE));				
 	#elif defined(USB_SERIES_4_AVR)
 	USBCON &= ~(1 << VBUSTE);
 	#endif
@@ -168,8 +168,6 @@ ISR(USB_GEN_vect, ISR_BLOCK)
 	#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);
@@ -177,8 +175,8 @@ ISR(USB_GEN_vect, ISR_BLOCK)
 		USB_INT_Disable(USB_INT_DDISCI);
 			
 		EVENT_USB_Host_DeviceUnattached();
-		
-		MustResetInterface = true;
+
+		USB_ResetInterface();
 	}
 	
 	if (USB_INT_HasOccurred(USB_INT_VBERRI) && USB_INT_IsEnabled(USB_INT_VBERRI))
@@ -213,7 +211,7 @@ ISR(USB_GEN_vect, ISR_BLOCK)
 		EVENT_USB_Host_DeviceEnumerationFailed(HOST_ENUMERROR_NoDeviceDetected, 0);
 		EVENT_USB_Host_DeviceUnattached();
 
-		MustResetInterface = true;
+		USB_ResetInterface();
 	}
 
 	if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI))
@@ -236,13 +234,10 @@ ISR(USB_GEN_vect, ISR_BLOCK)
 		  EVENT_USB_Host_DeviceUnattached();
 		
 		USB_CurrentMode = USB_GetUSBModeFromUID();
-		EVENT_USB_UIDChange();
+		USB_ResetInterface();
 
-		MustResetInterface = true;
+		EVENT_USB_UIDChange();
 	}
-	
-	if (MustResetInterface)
-	  USB_ResetInterface();
 	#endif
 }
 
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index bf31f76de..a6d04ae12 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -57,6 +57,7 @@
   *  - Fixed SET FEATURE and CLEAR FEATURE control requests directed at an unconfigured endpoint causing request timeouts
   *  - Fixed incorrect signature reported in the CDC class bootloader for the ATMEGA32U2
   *  - Fixed USB_Host_ClearPipeStall() incorrectly determining the endpoint direction from the currently selected pipe
+  *  - Fixed JTAG_DEBUG_POINT() and JTAG_DEBUG_BREAK() macros not compiling under pure C99 standards mode
   *
   *  \section Sec_ChangeLog100807 Version 100807
   *  <b>New:</b>
-- 
GitLab