From 043f3de47d502eb482f2a1e7c3e634cad45ffc53 Mon Sep 17 00:00:00 2001
From: NicoHood <NicoHood@users.noreply.github.com>
Date: Sat, 15 Aug 2015 08:17:43 +0200
Subject: [PATCH 1/2] Made USP-API included flexible

---
 hardware/arduino/avr/cores/arduino/USBAPI.h    | 1 +
 hardware/arduino/avr/cores/arduino/USBCore.cpp | 4 ++++
 hardware/arduino/avr/cores/arduino/main.cpp    | 8 ++++++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/hardware/arduino/avr/cores/arduino/USBAPI.h b/hardware/arduino/avr/cores/arduino/USBAPI.h
index 7f468a66c93..7eafcca5c90 100644
--- a/hardware/arduino/avr/cores/arduino/USBAPI.h
+++ b/hardware/arduino/avr/cores/arduino/USBAPI.h
@@ -67,6 +67,7 @@ class USBDevice_
 	bool wakeupHost(); // returns false, when wakeup cannot be processed
 };
 extern USBDevice_ USBDevice;
+void setupUSB();
 
 //================================================================================
 //================================================================================
diff --git a/hardware/arduino/avr/cores/arduino/USBCore.cpp b/hardware/arduino/avr/cores/arduino/USBCore.cpp
index f12d3269afd..b2f2cdb2728 100644
--- a/hardware/arduino/avr/cores/arduino/USBCore.cpp
+++ b/hardware/arduino/avr/cores/arduino/USBCore.cpp
@@ -828,4 +828,8 @@ bool USBDevice_::wakeupHost()
 	return false;
 }
 
+void setupUSB() {
+	USBDevice.attach();
+}
+
 #endif /* if defined(USBCON) */
diff --git a/hardware/arduino/avr/cores/arduino/main.cpp b/hardware/arduino/avr/cores/arduino/main.cpp
index 434cd403c0d..48325ddef31 100644
--- a/hardware/arduino/avr/cores/arduino/main.cpp
+++ b/hardware/arduino/avr/cores/arduino/main.cpp
@@ -28,7 +28,11 @@ void initVariant() __attribute__((weak));
 void initVariant() { }
 
 void setupUSB() __attribute__((weak));
-void setupUSB() { }
+void setupUSB() {
+#if defined(USBCON) && (MAGIC_KEY_POS != (RAMEND-1))
+	USBDevice.attach();
+#endif
+}
 
 int main(void)
 {
@@ -37,7 +41,7 @@ int main(void)
 	initVariant();
 
 #if defined(USBCON)
-	USBDevice.attach();
+	setupUSB();
 #endif
 	
 	setup();

From 1c7614bf54038ebb429c1d56a1592732e874f3e1 Mon Sep 17 00:00:00 2001
From: Nico <NicoHood@users.noreply.github.com>
Date: Thu, 24 Sep 2015 21:07:15 +0200
Subject: [PATCH 2/2] Rely on a definition rather than the magic key

To enable this function you could use
https://github.com/arduino/arduino-builder/issues/15
---
 hardware/arduino/avr/cores/arduino/main.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hardware/arduino/avr/cores/arduino/main.cpp b/hardware/arduino/avr/cores/arduino/main.cpp
index 48325ddef31..cc1d1ced66d 100644
--- a/hardware/arduino/avr/cores/arduino/main.cpp
+++ b/hardware/arduino/avr/cores/arduino/main.cpp
@@ -29,7 +29,7 @@ void initVariant() { }
 
 void setupUSB() __attribute__((weak));
 void setupUSB() {
-#if defined(USBCON) && (MAGIC_KEY_POS != (RAMEND-1))
+#if defined(USBCON) && defined(DYNAMIC_USB_CORE_INCLUDE))
 	USBDevice.attach();
 #endif
 }