From 7a5d045987f1d42b73a4291a9cd7ac25dc3b8c1a Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 21 Jul 2009 13:51:34 +0000
Subject: [PATCH] Slight changes to TeensyHID bootloader to ensure it builds
 under the 2KB boundary.

Changed USB_Init() and USB_Shutdown() so that they are no longer dependant on oneanother for possible code savings when the interface is never explicitly shut down.
---
 Bootloaders/TeensyHID/TeensyHID.c    | 10 --------
 Bootloaders/TeensyHID/TeensyHID.h    |  1 -
 LUFA/Drivers/USB/LowLevel/LowLevel.c | 34 ++++++++--------------------
 LUFA/Drivers/USB/LowLevel/LowLevel.h |  6 ++---
 4 files changed, 12 insertions(+), 39 deletions(-)

diff --git a/Bootloaders/TeensyHID/TeensyHID.c b/Bootloaders/TeensyHID/TeensyHID.c
index eed709783..67dded545 100644
--- a/Bootloaders/TeensyHID/TeensyHID.c
+++ b/Bootloaders/TeensyHID/TeensyHID.c
@@ -54,9 +54,6 @@ int main(void)
 	
 	while (RunBootloader)
 	  USB_USBTask();
-	
-	/* Reset all configured hardware to their default states for the user app */
-	ResetHardware();
 
 	/* Wait 100ms to give the host time to register the disconnection */
 	_delay_ms(100);
@@ -85,13 +82,6 @@ void SetupHardware(void)
 	USB_Init();
 }
 
-/** Resets all configured hardware required for the bootloader back to their original states. */
-void ResetHardware(void)
-{
-	/* Shut down the USB subsystem */
-	USB_ShutDown();
-}
-
 /** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready
  *  to relay data to and from the attached USB host.
  */
diff --git a/Bootloaders/TeensyHID/TeensyHID.h b/Bootloaders/TeensyHID/TeensyHID.h
index b7d4d6bac..484fb6b3a 100644
--- a/Bootloaders/TeensyHID/TeensyHID.h
+++ b/Bootloaders/TeensyHID/TeensyHID.h
@@ -63,7 +63,6 @@
 		
 	/* Function Prototypes: */
 		void SetupHardware(void);
-		void ResetHardware(void);
 
 		void EVENT_USB_ConfigurationChanged(void);
 		void EVENT_USB_UnhandledControlPacket(void);
diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.c b/LUFA/Drivers/USB/LowLevel/LowLevel.c
index cd7fa891d..41d9e10cc 100644
--- a/LUFA/Drivers/USB/LowLevel/LowLevel.c
+++ b/LUFA/Drivers/USB/LowLevel/LowLevel.c
@@ -54,8 +54,6 @@ void USB_Init(
                #endif
                )
 {
-	USB_ShutDown();
-
 	#if defined(USB_CAN_BE_BOTH)
 	USB_CurrentMode = Mode;
 	#endif
@@ -120,29 +118,9 @@ void USB_ShutDown(void)
 	  EVENT_USB_Disconnect();
 	#endif
 
+	USB_ResetInterface();
 	USB_Detach();
-
-	USB_INT_DisableAllInterrupts();
-	USB_INT_ClearAllInterrupts();
-
-	USB_IsInitialized = false;
-
-	#if defined(USB_CAN_BE_HOST)
-	USB_HostState = HOST_STATE_Unattached;
-	#endif
-
-	#if defined(USB_CAN_BE_DEVICE)
-	USB_DeviceState = DEVICE_STATE_Unattached;
-	USB_ConfigurationNumber  = 0;
-	USB_RemoteWakeupEnabled  = false;
-	USB_CurrentlySelfPowered = false;
-	#endif
-
-	#if defined(CAN_BE_BOTH)
-	USB_CurrentMode = USB_MODE_NONE;
-	#endif
-
-	USB_Interface_Disable();
+	USB_Controller_Disable();
 	USB_PLL_Off();
 	
 	#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
@@ -152,6 +130,12 @@ void USB_ShutDown(void)
 	#if defined(USB_CAN_BE_BOTH)
 	UHWCON &= ~(1 << UIDE);
 	#endif
+
+	USB_IsInitialized = false;
+
+	#if defined(CAN_BE_BOTH)
+	USB_CurrentMode = USB_MODE_NONE;
+	#endif
 }
 
 void USB_ResetInterface(void)
@@ -180,7 +164,7 @@ void USB_ResetInterface(void)
 		while (!(USB_PLL_IsReady()));
 	}
 	
-	USB_Interface_Reset();
+	USB_Controller_Reset();
 	
 	#if defined(USB_CAN_BE_BOTH)
 	if (UHWCON & (1 << UIDE))
diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.h b/LUFA/Drivers/USB/LowLevel/LowLevel.h
index df1fa0bcc..ca2fc7b15 100644
--- a/LUFA/Drivers/USB/LowLevel/LowLevel.h
+++ b/LUFA/Drivers/USB/LowLevel/LowLevel.h
@@ -334,9 +334,9 @@
 			#define USB_CLK_Freeze()           MACROS{ USBCON  |=  (1 << FRZCLK);               }MACROE
 			#define USB_CLK_Unfreeze()         MACROS{ USBCON  &= ~(1 << FRZCLK);               }MACROE
 
-			#define USB_Interface_Enable()     MACROS{ USBCON  |=  (1 << USBE);                 }MACROE
-			#define USB_Interface_Disable()    MACROS{ USBCON  &= ~(1 << USBE);                 }MACROE
-			#define USB_Interface_Reset()      MACROS{ uint8_t Temp = USBCON; USBCON = (Temp & ~(1 << USBE)); \
+			#define USB_Controller_Enable()    MACROS{ USBCON  |=  (1 << USBE);                 }MACROE
+			#define USB_Controller_Disable()   MACROS{ USBCON  &= ~(1 << USBE);                 }MACROE
+			#define USB_Controller_Reset()     MACROS{ uint8_t Temp = USBCON; USBCON = (Temp & ~(1 << USBE)); \
 			                                           USBCON = (Temp | (1 << USBE));           }MACROE
 	
 		/* Inline Functions: */
-- 
GitLab