summary refs log tree commit diff
path: root/lib/lufa/BuildTests
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2017-07-07 11:55:23 -0400
committerJack Humbert <jack.humb@gmail.com>2017-07-07 11:55:23 -0400
commit8655d4f4948b2deef7844503c8d690f23ac1a062 (patch)
treeb2c6effc9d6cd5b5b43933a1e53b8bf17e9e82cf /lib/lufa/BuildTests
parent1896c76a2928c96f9ab7947bec2ef8dd37623cff (diff)
parent60b30c036397cb5627fa374bb930794b225daa29 (diff)
Merge commit '60b30c036397cb5627fa374bb930794b225daa29' as 'lib/lufa'
Diffstat (limited to 'lib/lufa/BuildTests')
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/Board/Board.h82
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/Board/Buttons.h92
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/Board/Dataflash.h197
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/Board/Joystick.h104
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/Board/LEDs.h132
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/BoardDeviceMap.cfg89
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/Test.c115
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/makefile69
-rw-r--r--lib/lufa/BuildTests/BoardDriverTest/makefile.test35
-rw-r--r--lib/lufa/BuildTests/BootloaderTest/BootloaderDeviceMap.cfg167
-rw-r--r--lib/lufa/BuildTests/BootloaderTest/makefile65
-rw-r--r--lib/lufa/BuildTests/ModuleTest/Dummy.S41
-rw-r--r--lib/lufa/BuildTests/ModuleTest/Modules.h56
-rw-r--r--lib/lufa/BuildTests/ModuleTest/Test_C.c31
-rw-r--r--lib/lufa/BuildTests/ModuleTest/Test_CPP.cpp31
-rw-r--r--lib/lufa/BuildTests/ModuleTest/makefile67
-rw-r--r--lib/lufa/BuildTests/ModuleTest/makefile.test94
-rw-r--r--lib/lufa/BuildTests/SingleUSBModeTest/Dummy.S42
-rw-r--r--lib/lufa/BuildTests/SingleUSBModeTest/Test.c32
-rw-r--r--lib/lufa/BuildTests/SingleUSBModeTest/makefile57
-rw-r--r--lib/lufa/BuildTests/SingleUSBModeTest/makefile.test75
-rw-r--r--lib/lufa/BuildTests/StaticAnalysisTest/makefile47
-rw-r--r--lib/lufa/BuildTests/makefile24
23 files changed, 1744 insertions, 0 deletions
diff --git a/lib/lufa/BuildTests/BoardDriverTest/Board/Board.h b/lib/lufa/BuildTests/BoardDriverTest/Board/Board.h
new file mode 100644
index 0000000000..33b65fe4cd
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/Board/Board.h
@@ -0,0 +1,82 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief LUFA Custom Board Hardware Information Driver (Template)
+ *
+ *  This is a stub driver header file, for implementing custom board
+ *  layout hardware with compatible LUFA board specific drivers. If
+ *  the library is configured to use the BOARD_USER board mode, this
+ *  driver file should be completed and copied into the "/Board/" folder
+ *  inside the application's folder.
+ *
+ *  This stub is for the board-specific component of the LUFA Board Hardware
+ *  information driver.
+ */
+
+#ifndef __BOARD_USER_H__
+#define __BOARD_USER_H__
+
+	/* Includes: */
+		// TODO: Add any required includes here
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_BOARD_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/Board.h instead.
+		#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Indicates the board has a hardware Buttons mounted if defined. */
+//			#define BOARD_HAS_BUTTONS
+
+			/** Indicates the board has a hardware Dataflash mounted if defined. */
+//			#define BOARD_HAS_DATAFLASH
+
+			/** Indicates the board has a hardware Joystick mounted if defined. */
+//			#define BOARD_HAS_JOYSTICK
+
+			/** Indicates the board has a hardware LEDs mounted if defined. */
+//			#define BOARD_HAS_LEDS
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
+
diff --git a/lib/lufa/BuildTests/BoardDriverTest/Board/Buttons.h b/lib/lufa/BuildTests/BoardDriverTest/Board/Buttons.h
new file mode 100644
index 0000000000..c1a23ef087
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/Board/Buttons.h
@@ -0,0 +1,92 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief LUFA Custom Board Button Hardware Driver (Template)
+ *
+ *  This is a stub driver header file, for implementing custom board
+ *  layout hardware with compatible LUFA board specific drivers. If
+ *  the library is configured to use the BOARD_USER board mode, this
+ *  driver file should be completed and copied into the "/Board/" folder
+ *  inside the application's folder.
+ *
+ *  This stub is for the board-specific component of the LUFA Buttons driver,
+ *  for the control of physical board-mounted GPIO pushbuttons.
+ */
+
+#ifndef __BUTTONS_USER_H__
+#define __BUTTONS_USER_H__
+
+	/* Includes: */
+		// TODO: Add any required includes here
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_BUTTONS_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.
+		#endif
+
+		#define BOARD_DUMMY_BUTTONS_IMPLEMENTATION
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Button mask for the first button on the board. */
+			#define BUTTONS_BUTTON1          (1 << 0)
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void Buttons_Init(void)
+			{
+
+			}
+
+			static inline void Buttons_Disable(void)
+			{
+
+			}
+
+			static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Buttons_GetStatus(void)
+			{
+				return 0;
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
diff --git a/lib/lufa/BuildTests/BoardDriverTest/Board/Dataflash.h b/lib/lufa/BuildTests/BoardDriverTest/Board/Dataflash.h
new file mode 100644
index 0000000000..86726a2923
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/Board/Dataflash.h
@@ -0,0 +1,197 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief LUFA Custom Board Dataflash Hardware Driver (Template)
+ *
+ *  This is a stub driver header file, for implementing custom board
+ *  layout hardware with compatible LUFA board specific drivers. If
+ *  the library is configured to use the BOARD_USER board mode, this
+ *  driver file should be completed and copied into the "/Board/" folder
+ *  inside the application's folder.
+ *
+ *  This stub is for the board-specific component of the LUFA Dataflash
+ *  driver.
+*/
+
+#ifndef __DATAFLASH_USER_H__
+#define __DATAFLASH_USER_H__
+
+	/* Includes: */
+		// TODO: Add any required includes here
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_DATAFLASH_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/Dataflash.h instead.
+		#endif
+
+		#define BOARD_DUMMY_DATAFLASH_IMPLEMENTATION
+
+	/* Private Interface - For use in library only: */
+	#if !defined(__DOXYGEN__)
+		/* Macros: */
+			#define DATAFLASH_CHIPCS_MASK                0
+			#define DATAFLASH_CHIPCS_DDR                 0
+			#define DATAFLASH_CHIPCS_PORT                0
+	#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Constant indicating the total number of dataflash ICs mounted on the selected board. */
+			#define DATAFLASH_TOTALCHIPS                 1
+
+			/** Mask for no dataflash chip selected. */
+			#define DATAFLASH_NO_CHIP                    0
+
+			/** Mask for the first dataflash chip selected. */
+			#define DATAFLASH_CHIP1                      0
+
+			/** Mask for the second dataflash chip selected. */
+			#define DATAFLASH_CHIP2                      0
+
+			/** Internal main memory page size for the board's dataflash ICs. */
+			#define DATAFLASH_PAGE_SIZE                  0
+
+			/** Total number of pages inside each of the board's dataflash ICs. */
+			#define DATAFLASH_PAGES                      0
+
+		/* Inline Functions: */
+			/** Initializes the dataflash driver so that commands and data may be sent to an attached dataflash IC.
+			 *  The microcontroller's SPI driver MUST be initialized before any of the dataflash commands are used.
+			 */
+			static inline void Dataflash_Init(void)
+			{
+
+			}
+
+			/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
+			 *
+			 *  \param[in] Byte  Byte of data to send to the dataflash
+			 *
+			 *  \return Last response byte from the dataflash
+			 */
+			static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
+			static inline uint8_t Dataflash_TransferByte(const uint8_t Byte)
+			{
+				return 0;
+			}
+
+			/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
+			 *
+			 *  \param[in] Byte  Byte of data to send to the dataflash
+			 */
+			static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
+			static inline void Dataflash_SendByte(const uint8_t Byte)
+			{
+
+			}
+
+			/** Sends a dummy byte to the currently selected dataflash IC, and returns the next byte from the dataflash.
+			 *
+			 *  \return Last response byte from the dataflash
+			 */
+			static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Dataflash_ReceiveByte(void)
+			{
+				return 0;
+			}
+
+			/** Determines the currently selected dataflash chip.
+			 *
+			 *  \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected
+			 *          or a DATAFLASH_CHIPn mask (where n is the chip number).
+			 */
+			static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Dataflash_GetSelectedChip(void)
+			{
+				return 0;
+			}
+
+			/** Selects the given dataflash chip.
+			 *
+			 *  \param[in]  ChipMask  Mask of the Dataflash IC to select, in the form of a \c DATAFLASH_CHIPn mask (where n is
+			 *              the chip number).
+			 */
+			static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE;
+			static inline void Dataflash_SelectChip(const uint8_t ChipMask)
+			{
+
+			}
+
+			/** Deselects the current dataflash chip, so that no dataflash is selected. */
+			static inline void Dataflash_DeselectChip(void) ATTR_ALWAYS_INLINE;
+			static inline void Dataflash_DeselectChip(void)
+			{
+
+			}
+
+			/** Selects a dataflash IC from the given page number, which should range from 0 to
+			 *  ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). For boards containing only one
+			 *  dataflash IC, this will select DATAFLASH_CHIP1. If the given page number is outside
+			 *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs
+			 *  are deselected.
+			 *
+			 *  \param[in] PageAddress  Address of the page to manipulate, ranging from
+			 *                          0 to ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
+			 */
+			static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress)
+			{
+
+			}
+
+			/** Toggles the select line of the currently selected dataflash IC, so that it is ready to receive
+			 *  a new command.
+			 */
+			static inline void Dataflash_ToggleSelectedChipCS(void)
+			{
+
+			}
+
+			/** Spin-loops while the currently selected dataflash is busy executing a command, such as a main
+			 *  memory page program or main memory to buffer transfer.
+			 */
+			static inline void Dataflash_WaitWhileBusy(void)
+			{
+
+			}
+
+			/** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
+			 *  dataflash commands which require a complete 24-bit address.
+			 *
+			 *  \param[in] PageAddress  Page address within the selected dataflash IC
+			 *  \param[in] BufferByte   Address within the dataflash's buffer
+			 */
+			static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte)
+			{
+
+			}
+
+#endif
+
diff --git a/lib/lufa/BuildTests/BoardDriverTest/Board/Joystick.h b/lib/lufa/BuildTests/BoardDriverTest/Board/Joystick.h
new file mode 100644
index 0000000000..86a7d7681d
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/Board/Joystick.h
@@ -0,0 +1,104 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief LUFA Custom Board Joystick Hardware Driver (Template)
+ *
+ *  This is a stub driver header file, for implementing custom board
+ *  layout hardware with compatible LUFA board specific drivers. If
+ *  the library is configured to use the BOARD_USER board mode, this
+ *  driver file should be completed and copied into the "/Board/" folder
+ *  inside the application's folder.
+ *
+ *  This stub is for the board-specific component of the LUFA Joystick
+ *  driver, for a digital four-way (plus button) joystick.
+*/
+
+#ifndef __JOYSTICK_USER_H__
+#define __JOYSTICK_USER_H__
+
+	/* Includes: */
+		// TODO: Add any required includes here
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_JOYSTICK_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/Joystick.h instead.
+		#endif
+
+		#define BOARD_DUMMY_JOYSTICK_IMPLEMENTATION
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Mask for the joystick being pushed in the left direction. */
+			#define JOY_LEFT                  0
+
+			/** Mask for the joystick being pushed in the right direction. */
+			#define JOY_RIGHT                 0
+
+			/** Mask for the joystick being pushed in the upward direction. */
+			#define JOY_UP                    0
+
+			/** Mask for the joystick being pushed in the downward direction. */
+			#define JOY_DOWN                  0
+
+			/** Mask for the joystick being pushed inward. */
+			#define JOY_PRESS                 0
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void Joystick_Init(void)
+			{
+
+			}
+
+			static inline void Joystick_Disable(void)
+			{
+
+			}
+
+			static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Joystick_GetStatus(void)
+			{
+				return 0;
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
diff --git a/lib/lufa/BuildTests/BoardDriverTest/Board/LEDs.h b/lib/lufa/BuildTests/BoardDriverTest/Board/LEDs.h
new file mode 100644
index 0000000000..548d24232c
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/Board/LEDs.h
@@ -0,0 +1,132 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief LUFA Custom Board LED Hardware Driver (Template)
+ *
+ *  This is a stub driver header file, for implementing custom board
+ *  layout hardware with compatible LUFA board specific drivers. If
+ *  the library is configured to use the BOARD_USER board mode, this
+ *  driver file should be completed and copied into the "/Board/" folder
+ *  inside the application's folder.
+ *
+ *  This stub is for the board-specific component of the LUFA LEDs driver,
+ *  for the LEDs (up to four) mounted on most development boards.
+*/
+
+#ifndef __LEDS_USER_H__
+#define __LEDS_USER_H__
+
+	/* Includes: */
+		// TODO: Add any required includes here
+
+/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_LEDS_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead.
+		#endif
+
+		#define BOARD_DUMMY_LEDS_IMPLEMENTATION
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** LED mask for the first LED on the board. */
+			#define LEDS_LED1        (1 << 0)
+
+			/** LED mask for the second LED on the board. */
+			#define LEDS_LED2        (1 << 1)
+
+			/** LED mask for the third LED on the board. */
+			#define LEDS_LED3        (1 << 2)
+
+			/** LED mask for the fourth LED on the board. */
+			#define LEDS_LED4        (1 << 3)
+
+			/** LED mask for all the LEDs on the board. */
+			#define LEDS_ALL_LEDS    (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4)
+
+			/** LED mask for none of the board LEDs. */
+			#define LEDS_NO_LEDS     0
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void LEDs_Init(void)
+			{
+
+			}
+
+			static inline void LEDs_Disable(void)
+			{
+
+			}
+
+			static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
+			{
+
+			}
+
+			static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
+			{
+
+			}
+
+			static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
+			{
+
+			}
+
+			static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
+			{
+
+			}
+
+			static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
+			{
+
+			}
+
+			static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t LEDs_GetLEDs(void)
+			{
+				return 0;
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
diff --git a/lib/lufa/BuildTests/BoardDriverTest/BoardDeviceMap.cfg b/lib/lufa/BuildTests/BoardDriverTest/BoardDeviceMap.cfg
new file mode 100644
index 0000000000..c12050941d
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/BoardDeviceMap.cfg
@@ -0,0 +1,89 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+#
+# =============================================================================
+# Board configuration map script, processed with the "BoardDriverTest"
+# makefile. This script file maps the possible LUFA target BOARD makefile
+# values in user projects to a specific architecture and device. This mapping is
+# then used by the makefile to build all possible drivers for that board, to
+# detect any missing or erroneous functions. To add a new board mapping, use
+# the syntax:
+#
+#    BOARD DEFINE = {ARCH} : {MCU} :
+#
+# And re-run the makefile. Note that each board may have only one target.
+# =============================================================================
+#
+#
+# ----------------- AVR8 Boards ------------------
+BOARD_ADAFRUITU4        = AVR8  : atmega32u4     :
+BOARD_ATAVRUSBRF01      = AVR8  : at90usb1287    :
+BOARD_BENITO            = AVR8  : at90usb162     :
+BOARD_BIGMULTIO         = AVR8  : atmega32u4     :
+BOARD_BLACKCAT          = AVR8  : at90usb162     :
+BOARD_BUI               = AVR8  : at90usb646     :
+BOARD_BUMBLEB           = AVR8  : at90usb162     :
+BOARD_CULV3             = AVR8  : atmega32u4     :
+BOARD_DUCE              = AVR8  : atmega32u2     :
+BOARD_EVK527            = AVR8  : atmega32u4     :
+BOARD_JMDBU2            = AVR8  : atmega32u2     :
+BOARD_LEONARDO          = AVR8  : atmega32u4     :
+BOARD_MAXIMUS           = AVR8  : at90usb162     :
+BOARD_MICROPENDOUS_32U2 = AVR8  : atmega32u2     :
+BOARD_MICROPENDOUS_A    = AVR8  : at90usb1287    :
+BOARD_MICROPENDOUS_1    = AVR8  : at90usb162     :
+BOARD_MICROPENDOUS_2    = AVR8  : atmega32u4     :
+BOARD_MICROPENDOUS_3    = AVR8  : at90usb1287    :
+BOARD_MICROPENDOUS_4    = AVR8  : at90usb1287    :
+BOARD_MICROPENDOUS_DIP  = AVR8  : at90usb1287    :
+BOARD_MICROPENDOUS_REV1 = AVR8  : at90usb1287    :
+BOARD_MICROPENDOUS_REV2 = AVR8  : at90usb1287    :
+BOARD_MICROSIN162       = AVR8  : atmega162      :
+BOARD_MINIMUS           = AVR8  : atmega32u2     :
+BOARD_MULTIO            = AVR8  : at90usb162     :
+BOARD_NONE              = AVR8  : at90usb1287    :
+BOARD_OLIMEX162         = AVR8  : at90usb162     :
+BOARD_OLIMEX32U4        = AVR8  : atmega32u4     :
+BOARD_OLIMEXT32U4       = AVR8  : atmega32u4     :
+BOARD_OLIMEXISPMK2      = AVR8  : at90usb162     :
+BOARD_RZUSBSTICK        = AVR8  : at90usb1287    :
+BOARD_SPARKFUN8U2       = AVR8  : atmega8u2      :
+BOARD_STK525            = AVR8  : at90usb647     :
+BOARD_STK526            = AVR8  : at90usb162     :
+BOARD_TEENSY            = AVR8  : at90usb162     :
+BOARD_TEENSY2           = AVR8  : at90usb646     :
+BOARD_TUL               = AVR8  : atmega32u4     :
+BOARD_UDIP              = AVR8  : atmega32u2     :
+BOARD_UNO               = AVR8  : atmega8u2      :
+BOARD_USB2AX            = AVR8  : atmega32u2     :
+BOARD_USB2AX_V3         = AVR8  : atmega32u2     :
+BOARD_USB2AX_V31        = AVR8  : atmega32u2     :
+BOARD_USBFOO            = AVR8  : atmega162      :
+BOARD_USBKEY            = AVR8  : at90usb1287    :
+BOARD_USBTINYMKII       = AVR8  : at90usb162     :
+BOARD_USER              = AVR8  : at90usb1287    :
+BOARD_XPLAIN            = AVR8  : at90usb1287    :
+BOARD_XPLAIN_REV1       = AVR8  : at90usb1287    :
+BOARD_STANGE_ISP        = AVR8  : at90usb162     :
+BOARD_U2S               = AVR8  : atmega32u2     :
+BOARD_YUN               = AVR8  : atmega32u4     :
+BOARD_MICRO             = AVR8  : atmega32u4     :
+BOARD_POLOLUMICRO       = AVR8  : atmega32u4     :
+BOARD_XPLAINED_MINI     = AVR8  : atmega32u4     :
+#
+# ----------------- XMEGA Boards -----------------
+BOARD_A3BU_XPLAINED     = XMEGA : atxmega256a3bu :
+BOARD_B1_XPLAINED       = XMEGA : atxmega128b1   :
+BOARD_C3_XPLAINED       = XMEGA : atxmega384c3   :
+#
+# ------------------ UC3 Boards ------------------
+BOARD_EVK1100           = UC3   : uc3a0512       :
+BOARD_EVK1101           = UC3   : uc3b0256       :
+BOARD_EVK1104           = UC3   : uc3a3256       :
+BOARD_UC3A3_XPLAINED    = UC3   : uc3a3256       :
+#
diff --git a/lib/lufa/BuildTests/BoardDriverTest/Test.c b/lib/lufa/BuildTests/BoardDriverTest/Test.c
new file mode 100644
index 0000000000..8baa4460ba
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/Test.c
@@ -0,0 +1,115 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include <LUFA/Common/Common.h>
+#include <LUFA/Drivers/Board/Board.h>
+#include <LUFA/Drivers/Board/Buttons.h>
+#include <LUFA/Drivers/Board/Dataflash.h>
+#include <LUFA/Drivers/Board/LEDs.h>
+#include <LUFA/Drivers/Board/Joystick.h>
+
+#if defined(BOARD_HAS_BUTTONS) == defined(BOARD_DUMMY_BUTTONS_IMPLEMENTATION)
+	#error Mismatch between BOARD_HAS_BUTTONS and implementation.
+#endif
+
+#if defined(BOARD_HAS_DATAFLASH) == defined(BOARD_DUMMY_DATAFLASH_IMPLEMENTATION)
+	#error Mismatch between BOARD_HAS_DATAFLASH and implementation.
+#endif
+
+#if defined(BOARD_HAS_LEDS) == defined(BOARD_DUMMY_LEDS_IMPLEMENTATION)
+	#error Mismatch between BOARD_HAS_LEDS and implementation.
+#endif
+
+#if defined(BOARD_HAS_JOYSTICK) == defined(BOARD_DUMMY_JOYSTICK_IMPLEMENTATION)
+	#error Mismatch between BOARD_HAS_JOYSTICK and implementation.
+#endif
+
+int main(void)
+{
+	uint_reg_t Dummy;
+
+	/* =============================
+	 *     Buttons Compile Check
+	 * ============================= */
+	// cppcheck-suppress redundantAssignment
+	Dummy = BUTTONS_BUTTON1;
+	Buttons_Init();
+	// cppcheck-suppress redundantAssignment
+	Dummy = Buttons_GetStatus();
+	Buttons_Disable();
+
+	/* =============================
+	 *    Dataflash Compile Check
+	 * ============================= */
+	// cppcheck-suppress redundantAssignment
+	Dummy = DATAFLASH_TOTALCHIPS + DATAFLASH_NO_CHIP + DATAFLASH_CHIP1 + DATAFLASH_PAGE_SIZE + DATAFLASH_PAGES;
+	Dataflash_Init();
+	Dataflash_TransferByte(0);
+	Dataflash_SendByte(0);
+	// cppcheck-suppress redundantAssignment
+	Dummy = Dataflash_ReceiveByte();
+	// cppcheck-suppress redundantAssignment
+	Dummy = Dataflash_GetSelectedChip();
+	Dataflash_SelectChip(DATAFLASH_CHIP1);
+	Dataflash_DeselectChip();
+	Dataflash_SelectChipFromPage(0);
+	Dataflash_ToggleSelectedChipCS();
+	Dataflash_WaitWhileBusy();
+	Dataflash_SendAddressBytes(0, 0);
+
+	/* =============================
+	 *       LEDs Compile Check
+	 * ============================= */
+	// cppcheck-suppress redundantAssignment
+	Dummy = LEDS_LED1 + LEDS_LED2 + LEDS_LED3 + LEDS_LED4;
+	LEDs_Init();
+	LEDs_TurnOnLEDs(LEDS_ALL_LEDS);
+	LEDs_TurnOffLEDs(LEDS_ALL_LEDS);
+	LEDs_SetAllLEDs(LEDS_ALL_LEDS);
+	LEDs_ChangeLEDs(LEDS_ALL_LEDS, LEDS_NO_LEDS);
+	LEDs_ToggleLEDs(LEDS_ALL_LEDS);
+	// cppcheck-suppress redundantAssignment
+	Dummy = LEDs_GetLEDs();
+	LEDs_Disable();
+
+	/* =============================
+	 *     Joystick Compile Check
+	 * ============================= */
+	// cppcheck-suppress redundantAssignment
+	Dummy = JOY_LEFT + JOY_RIGHT + JOY_UP + JOY_DOWN + JOY_PRESS;
+	Joystick_Init();
+	// cppcheck-suppress redundantAssignment
+	Dummy = Joystick_GetStatus();
+	Joystick_Disable();
+
+	(void)Dummy;
+}
+
+
diff --git a/lib/lufa/BuildTests/BoardDriverTest/makefile b/lib/lufa/BuildTests/BoardDriverTest/makefile
new file mode 100644
index 0000000000..8414d91862
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/makefile
@@ -0,0 +1,69 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+
+# Makefile for the board driver build test. This
+# test attempts to build a dummy project with all
+# possible board targets using their respective
+# compiler.
+
+# Path to the LUFA library core
+LUFA_PATH := ../../LUFA/
+
+# Build test cannot be run with multiple parallel jobs
+.NOTPARALLEL:
+
+all: begin makeboardlist testboards clean end
+
+begin:
+	@echo Executing build test "BoardDriverTest".
+	@echo
+
+end:
+	@echo Build test "BoardDriverTest" complete.
+	@echo
+
+makeboardlist:
+	@grep "BOARD_" $(patsubst %/,%,$(LUFA_PATH))/Common/BoardTypes.h | cut -d'#' -f2 | cut -d' ' -f2 | grep "BOARD_" > BoardList.txt
+
+testboards:
+	@echo "buildtest:" > BuildMakefile
+
+	@while read line;                                                                               \
+	 do                                                                                             \
+	   build_cfg=`grep "$$line " BoardDeviceMap.cfg | grep -v "#" | cut -d'=' -f2- | sed 's/ //g'`; \
+	                                                                                                \
+	   build_board=$$line;                                                                          \
+	   build_arch=`echo $$build_cfg | cut -d':' -f1`;                                               \
+	   build_mcu=`echo $$build_cfg | cut -d':' -f2`;                                                \
+	                                                                                                \
+	   if ( test -z "$$build_cfg" ); then                                                           \
+	     echo "No matching information set for board $$build_board";                                \
+	   else                                                                                         \
+	     echo "Found board configuration for $$build_board - $$build_arch, $$build_mcu";            \
+		                                                                                            \
+		 printf "\t@echo Building dummy project for $$build_board...\n" >> BuildMakefile;           \
+		 printf "\t$(MAKE) -f makefile.test clean elf MCU=%s ARCH=%s BOARD=%s\n\n" $$build_mcu $$build_arch $$build_board >> BuildMakefile; \
+	   fi;                                                                                          \
+	 done < BoardList.txt
+
+	 $(MAKE) -f BuildMakefile buildtest
+
+clean:
+	rm -f BuildMakefile
+	rm -f BoardList.txt
+	$(MAKE) -f makefile.test clean BOARD=NONE ARCH=AVR8 MCU=at90usb1287
+	$(MAKE) -f makefile.test clean BOARD=NONE ARCH=XMEGA MCU=atxmega128a1u
+	$(MAKE) -f makefile.test clean BOARD=NONE ARCH=UC3 MCU=uc3a0256
+
+%:
+
+.PHONY: all begin end makeboardlist testboards clean
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
diff --git a/lib/lufa/BuildTests/BoardDriverTest/makefile.test b/lib/lufa/BuildTests/BoardDriverTest/makefile.test
new file mode 100644
index 0000000000..373a15e753
--- /dev/null
+++ b/lib/lufa/BuildTests/BoardDriverTest/makefile.test
@@ -0,0 +1,35 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          =
+ARCH         =
+BOARD        =
+F_CPU        = $(F_USB)
+F_USB        = 8000000
+OPTIMIZATION = 1
+TARGET       = Test
+SRC          = $(TARGET).c
+LUFA_PATH    = ../../LUFA
+CC_FLAGS     = -Werror
+DEBUG_LEVEL  = 0
+
+
+# Include LUFA-specific DMBS extension modules
+DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
+include $(DMBS_LUFA_PATH)/lufa-sources.mk
+include $(DMBS_LUFA_PATH)/lufa-gcc.mk
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
+include $(DMBS_PATH)/gcc.mk
diff --git a/lib/lufa/BuildTests/BootloaderTest/BootloaderDeviceMap.cfg b/lib/lufa/BuildTests/BootloaderTest/BootloaderDeviceMap.cfg
new file mode 100644
index 0000000000..e02d0a30d4
--- /dev/null
+++ b/lib/lufa/BuildTests/BootloaderTest/BootloaderDeviceMap.cfg
@@ -0,0 +1,167 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+#
+# =============================================================================
+# Bootloader configuration map script, processed with the "BootloaderTest"
+# makefile. This script file defines the targets for each LUFA bootloader,
+# which are then built as part of the build test to ensure that there are no
+# failures on all standard configurations. To add a new build target for a
+# bootloader to this script, use the format:
+#
+#    BOOTLOADER = {ARCH} : {MCU} : {BOARD} : {FLASH SIZE KB} : {BOOT SIZE KB} : {F_USB MHZ}
+#
+# And re-run the makefile.
+# =============================================================================
+#
+#
+# ------------ CDC Bootloader --------------------
+CDC         = AVR8 : at90usb1287 : XPLAIN   : 128 : 8 :  8 :
+CDC         = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
+CDC         = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
+CDC         = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
+CDC         = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
+CDC         = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
+CDC         = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
+CDC         = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
+CDC         = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
+CDC         = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
+CDC         = AVR8 : atmega16u2  : NONE     :  16 : 4 :  8 :
+CDC         = AVR8 : atmega8u2   : NONE     :   8 : 4 :  8 :
+CDC         = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
+CDC         = AVR8 : at90usb82   : NONE     :   8 : 4 :  8 :
+CDC         = AVR8 : at90usb1287 : NONE     : 128 : 8 : 16 :
+CDC         = AVR8 : at90usb1287 : NONE     : 128 : 4 : 16 :
+CDC         = AVR8 : at90usb647  : NONE     :  64 : 4 : 16 :
+CDC         = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
+CDC         = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
+CDC         = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
+CDC         = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
+CDC         = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
+CDC         = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
+CDC         = AVR8 : atmega16u2  : NONE     :  16 : 4 : 16 :
+CDC         = AVR8 : atmega8u2   : NONE     :   8 : 4 : 16 :
+CDC         = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
+CDC         = AVR8 : at90usb82   : NONE     :   8 : 4 : 16 :
+#
+# ------------ DFU Bootloader --------------------
+DFU         = AVR8 : at90usb1287 : XPLAIN   : 128 : 8 :  8 :
+DFU         = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
+DFU         = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
+DFU         = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
+DFU         = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
+DFU         = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
+DFU         = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
+DFU         = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
+DFU         = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
+DFU         = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
+DFU         = AVR8 : atmega16u2  : NONE     :  16 : 4 :  8 :
+DFU         = AVR8 : atmega8u2   : NONE     :   8 : 4 :  8 :
+DFU         = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
+DFU         = AVR8 : at90usb82   : NONE     :   8 : 4 :  8 :
+DFU         = AVR8 : at90usb1287 : NONE     : 128 : 8 : 16 :
+DFU         = AVR8 : at90usb1287 : NONE     : 128 : 4 : 16 :
+DFU         = AVR8 : at90usb647  : NONE     :  64 : 4 : 16 :
+DFU         = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
+DFU         = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
+DFU         = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
+DFU         = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
+DFU         = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
+DFU         = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
+DFU         = AVR8 : atmega16u2  : NONE     :  16 : 4 : 16 :
+DFU         = AVR8 : atmega8u2   : NONE     :   8 : 4 : 16 :
+DFU         = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
+DFU         = AVR8 : at90usb82   : NONE     :   8 : 4 : 16 :
+#
+# ------------ HID Bootloader --------------------
+HID         = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
+HID         = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
+HID         = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
+HID         = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
+HID         = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
+HID         = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
+HID         = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
+HID         = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
+HID         = AVR8 : atmega32u2  : NONE     :  32 : 2 :  8 :
+HID         = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
+HID         = AVR8 : atmega16u2  : NONE     :  16 : 2 :  8 :
+HID         = AVR8 : atmega16u2  : NONE     :  16 : 4 :  8 :
+HID         = AVR8 : atmega8u2   : NONE     :   8 : 2 :  8 :
+HID         = AVR8 : atmega8u2   : NONE     :   8 : 4 :  8 :
+HID         = AVR8 : at90usb162  : NONE     :  16 : 2 :  8 :
+HID         = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
+HID         = AVR8 : at90usb162  : NONE     :  16 : 2 :  8 :
+HID         = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
+HID         = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
+HID         = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
+HID         = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
+HID         = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
+HID         = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
+HID         = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
+HID         = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
+HID         = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
+HID         = AVR8 : atmega32u2  : NONE     :  32 : 2 : 16 :
+HID         = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
+HID         = AVR8 : atmega16u2  : NONE     :  16 : 2 : 16 :
+HID         = AVR8 : atmega16u2  : NONE     :  16 : 4 : 16 :
+HID         = AVR8 : atmega8u2   : NONE     :   8 : 2 : 16 :
+HID         = AVR8 : atmega8u2   : NONE     :   8 : 4 : 16 :
+HID         = AVR8 : at90usb162  : NONE     :  16 : 2 : 16 :
+HID         = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
+HID         = AVR8 : at90usb162  : NONE     :  16 : 2 : 16 :
+HID         = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
+#
+# ---------- Printer Bootloader ------------------
+Printer     = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
+Printer     = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
+Printer     = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
+Printer     = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
+Printer     = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
+Printer     = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
+Printer     = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
+Printer     = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
+Printer     = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
+Printer     = AVR8 : atmega16u2  : NONE     :  16 : 4 :  8 :
+Printer     = AVR8 : atmega8u2   : NONE     :   8 : 4 :  8 :
+Printer     = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
+Printer     = AVR8 : at90usb82   : NONE     :   8 : 4 :  8 :
+Printer     = AVR8 : at90usb1287 : NONE     : 128 : 8 : 16 :
+Printer     = AVR8 : at90usb1287 : NONE     : 128 : 4 : 16 :
+Printer     = AVR8 : at90usb647  : NONE     :  64 : 4 : 16 :
+Printer     = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
+Printer     = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
+Printer     = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
+Printer     = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
+Printer     = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
+Printer     = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
+Printer     = AVR8 : atmega16u2  : NONE     :  16 : 4 : 16 :
+Printer     = AVR8 : atmega8u2   : NONE     :   8 : 4 : 16 :
+Printer     = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
+Printer     = AVR8 : at90usb82   : NONE     :   8 : 4 : 16 :
+#
+# ---------- Mass Storage Bootloader -----------------
+MassStorage = AVR8 : at90usb1287 : XPLAIN   : 128 : 8 :  8 :
+MassStorage = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
+MassStorage = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
+MassStorage = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
+MassStorage = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
+MassStorage = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
+MassStorage = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
+MassStorage = AVR8 : atmega32u4  : LEONARDO :  32 : 4 : 16 :
+MassStorage = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
+MassStorage = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
+MassStorage = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
+MassStorage = AVR8 : at90usb1287 : NONE     : 128 : 8 : 16 :
+MassStorage = AVR8 : at90usb1287 : NONE     : 128 : 4 : 16 :
+MassStorage = AVR8 : at90usb647  : NONE     :  64 : 4 : 16 :
+MassStorage = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
+MassStorage = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
+MassStorage = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
+MassStorage = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
+MassStorage = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
+MassStorage = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
+#
diff --git a/lib/lufa/BuildTests/BootloaderTest/makefile b/lib/lufa/BuildTests/BootloaderTest/makefile
new file mode 100644
index 0000000000..34bdf1b364
--- /dev/null
+++ b/lib/lufa/BuildTests/BootloaderTest/makefile
@@ -0,0 +1,65 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+
+# Makefile for the bootloader build test. This
+# test attempts to build all the bootloaders
+# with all supported device configurations.
+
+# Path to the LUFA library core
+LUFA_PATH := ../../LUFA/
+
+# Build test cannot be run with multiple parallel jobs
+.NOTPARALLEL:
+
+all: begin testbootloaders clean end
+
+begin:
+	@echo Executing build test "BootloaderTest".
+	@echo
+
+end:
+	@echo Build test "BootloaderTest" complete.
+	@echo
+
+testbootloaders:
+	@echo "buildtest:" > BuildMakefile
+
+	@while read line;                                         \
+	 do                                                       \
+	   build_cfg=`echo $$line | grep -v "#" | sed 's/ //g'`;  \
+	                                                          \
+	   if ( test -n "$$build_cfg" ); then                     \
+	     build_bootloader=`echo $$build_cfg | cut -d'=' -f1`; \
+		 build_cfg=`echo $$build_cfg | cut -d'=' -f2-`;       \
+		                                                      \
+	     build_arch=`echo $$build_cfg | cut -d':' -f1`;       \
+	     build_mcu=`echo $$build_cfg | cut -d':' -f2`;        \
+	     build_board=`echo $$build_cfg | cut -d':' -f3`;      \
+	     build_flashsize=`echo $$build_cfg | cut -d':' -f4`;  \
+	     build_bootsize=`echo $$build_cfg | cut -d':' -f5`;   \
+	     build_fusb=`echo $$build_cfg | cut -d':' -f6`;       \
+	                                                          \
+	     printf "Found '%s' bootloader configuration (FLASH: %3s KB | BOOT: %3s KB | MCU: %12s / %4s | BOARD: %s | F_USB: %sMHz)\n" $$build_bootloader $$build_flashsize $$build_bootsize $$build_mcu $$build_arch $$build_board $$build_fusb; \
+	                                                          \
+	     printf "\t@echo Building bootloader %s - %s - FLASH: %s KB, BOOT: %s KB, BOARD: %s, F_USB: %sMHz\n" $$build_bootloader $$build_mcu $$build_flashsize $$build_bootsize $$build_board $$build_fusb >> BuildMakefile; \
+	     printf "\t$(MAKE) -C $(patsubst %/,%,$(LUFA_PATH))/../Bootloaders/%s/ clean elf ARCH=%s MCU=%s BOARD=%s FLASH_SIZE_KB=%s BOOT_SECTION_SIZE_KB=%s F_USB=%s000000 DEBUG_LEVEL=0\n\n" $$build_bootloader $$build_arch $$build_mcu $$build_board $$build_flashsize $$build_bootsize $$build_fusb >> BuildMakefile; \
+	   fi;                                                    \
+	 done < BootloaderDeviceMap.cfg
+
+	 $(MAKE) -f BuildMakefile buildtest
+
+clean:
+	rm -f BuildMakefile
+
+%:
+
+.PHONY: all begin end testbootloaders clean
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
diff --git a/lib/lufa/BuildTests/ModuleTest/Dummy.S b/lib/lufa/BuildTests/ModuleTest/Dummy.S
new file mode 100644
index 0000000000..b44cf4c256
--- /dev/null
+++ b/lib/lufa/BuildTests/ModuleTest/Dummy.S
@@ -0,0 +1,41 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+.section .text
+
+
+# Mandatory entry point for successful compilation and link
+.global main
+main:
+
+
+# Mandatory callback needed for base compile of the USB driver
+.global CALLBACK_USB_GetDescriptor
+CALLBACK_USB_GetDescriptor:
diff --git a/lib/lufa/BuildTests/ModuleTest/Modules.h b/lib/lufa/BuildTests/ModuleTest/Modules.h
new file mode 100644
index 0000000000..686183245d
--- /dev/null
+++ b/lib/lufa/BuildTests/ModuleTest/Modules.h
@@ -0,0 +1,56 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include <LUFA/Common/Common.h>
+
+#include <LUFA/Platform/Platform.h>
+
+#include <LUFA/Drivers/USB/USB.h>
+#include <LUFA/Drivers/Misc/RingBuffer.h>
+#include <LUFA/Drivers/Misc/TerminalCodes.h>
+
+#if (ARCH == ARCH_AVR8)
+	#if defined(ADC)
+		#include <LUFA/Drivers/Peripheral/ADC.h>
+	#endif
+
+	#include <LUFA/Drivers/Peripheral/Serial.h>
+	#include <LUFA/Drivers/Peripheral/SerialSPI.h>
+	#include <LUFA/Drivers/Peripheral/SPI.h>
+
+	#if defined(TWCR)
+		#include <LUFA/Drivers/Peripheral/TWI.h>
+	#endif
+#elif (ARCH == ARCH_XMEGA)
+	#include <LUFA/Drivers/Peripheral/Serial.h>
+	#include <LUFA/Drivers/Peripheral/SerialSPI.h>
+	#include <LUFA/Drivers/Peripheral/SPI.h>
+	#include <LUFA/Drivers/Peripheral/TWI.h>
+#endif
diff --git a/lib/lufa/BuildTests/ModuleTest/Test_C.c b/lib/lufa/BuildTests/ModuleTest/Test_C.c
new file mode 100644
index 0000000000..3c3f5a2ab7
--- /dev/null
+++ b/lib/lufa/BuildTests/ModuleTest/Test_C.c
@@ -0,0 +1,31 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include "Modules.h"
diff --git a/lib/lufa/BuildTests/ModuleTest/Test_CPP.cpp b/lib/lufa/BuildTests/ModuleTest/Test_CPP.cpp
new file mode 100644
index 0000000000..3c3f5a2ab7
--- /dev/null
+++ b/lib/lufa/BuildTests/ModuleTest/Test_CPP.cpp
@@ -0,0 +1,31 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include "Modules.h"
diff --git a/lib/lufa/BuildTests/ModuleTest/makefile b/lib/lufa/BuildTests/ModuleTest/makefile
new file mode 100644
index 0000000000..50f1909a38
--- /dev/null
+++ b/lib/lufa/BuildTests/ModuleTest/makefile
@@ -0,0 +1,67 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+
+# Makefile for the module build test. This test
+# attempts to build as many modules as possible
+# under all supported architectures, and include
+# all module headers in a simple C and C++
+# application.
+
+# Path to the LUFA library core
+LUFA_PATH := ../../LUFA/
+
+# Build test cannot be run with multiple parallel jobs
+.NOTPARALLEL:
+
+# List of device families per architecture, one device per architecture sub-family
+AVR8_FAMILIES   := at90usb1287 at90usb1286 atmega16u4 atmega16u2 at90usb162
+XMEGA_FAMILIES  := atxmega128a1u atxmega128a3u atxmega256a3bu atxmega128a4u atxmega128b1 atxmega128b3 atxmega128c3 atxmega32c4
+UC3_FAMILIES    := uc3a0256 uc3a1256 uc3a3256 uc3a4256 uc3b0256 uc3b1256
+
+# List of all device families, with a family postfix
+DEVICE_FAMILIES := $(AVR8_FAMILIES:%=%.avr8) $(XMEGA_FAMILIES:%=%.xmega) $(UC3_FAMILIES:%=%.uc3)
+
+
+all: begin $(DEVICE_FAMILIES) clean end
+
+arch_avr8:  begin $(AVR8_FAMILIES:%=%.avr8) end
+arch_xmega: begin $(XMEGA_FAMILIES:%=%.xmega) end
+arch_uc3:   begin $(UC3_FAMILIES:%=%.uc3) end
+
+begin:
+	@echo Executing build test "ModuleTest".
+	@echo
+
+end:
+	@echo Build test "ModuleTest" complete.
+	@echo
+
+%.avr8:
+	@echo Building ModuleTest for ARCH=AVR8 MCU=$(@:%.avr8=%)...
+	$(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=$(@:%.avr8=%)
+
+%.xmega:
+	@echo Building ModuleTest for ARCH=XMEGA MCU=$(@:%.xmega=%)...
+	$(MAKE) -f makefile.test clean elf ARCH=XMEGA MCU=$(@:%.xmega=%)
+
+%.uc3:
+	@echo Building ModuleTest for ARCH=UC3 MCU=$(@:%.uc3=%)...
+	$(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=$(@:%.uc3=%)
+
+clean:
+	$(MAKE) -f makefile.test clean ARCH=AVR8 MCU=$(firstword $(AVR8_FAMILIES))
+	$(MAKE) -f makefile.test clean ARCH=XMEGA MCU=$(firstword $(XMEGA_FAMILIES))
+	$(MAKE) -f makefile.test clean ARCH=UC3 MCU=$(firstword $(UC3_FAMILIES))
+
+%:
+
+.PHONY: all arch_avr8 arch_xmega arch_uc3 begin end
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
diff --git a/lib/lufa/BuildTests/ModuleTest/makefile.test b/lib/lufa/BuildTests/ModuleTest/makefile.test
new file mode 100644
index 0000000000..5eeb40398c
--- /dev/null
+++ b/lib/lufa/BuildTests/ModuleTest/makefile.test
@@ -0,0 +1,94 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          =
+ARCH         =
+BOARD        = NONE
+F_CPU        = $(F_USB)
+OPTIMIZATION = 1
+TARGET       = Test
+SRC          = $(TARGET)_C.c $(TARGET)_CPP.cpp Dummy.S $(LUFA_SRC_USB)
+LUFA_PATH    = ../../LUFA
+DEBUG_LEVEL  = 0
+
+ifeq ($(ARCH), AVR8)
+  F_USB        = 8000000
+else ifeq ($(ARCH), XMEGA)
+  F_USB        = 48000000
+else ifeq ($(ARCH), UC3)
+  F_USB        = 48000000
+endif
+
+# Generic C/C++ compiler flags
+CC_FLAGS  = -Wextra
+CC_FLAGS += -Werror
+CC_FLAGS += -Wformat=2
+CC_FLAGS += -Winit-self
+CC_FLAGS += -Wswitch-enum
+CC_FLAGS += -Wunused
+CC_FLAGS += -Wundef
+CC_FLAGS += -Wpointer-arith
+CC_FLAGS += -Wcast-align
+CC_FLAGS += -Wwrite-strings
+CC_FLAGS += -Wlogical-op
+CC_FLAGS += -Wmissing-declarations
+CC_FLAGS += -Wmissing-field-initializers
+CC_FLAGS += -Wmissing-format-attribute
+CC_FLAGS += -Woverlength-strings
+CC_FLAGS += -Wswitch-default
+CC_FLAGS += -Wfloat-equal
+CC_FLAGS += -Waggregate-return
+CC_FLAGS += -Wmissing-include-dirs
+
+# Disable warnings not supported by the version of GCC used for UC3 targets (FIXME)
+ifneq ($(ARCH), UC3)
+  CC_FLAGS += -Wdouble-promotion
+endif
+
+# Only enable redundant declaration warnings for AVR8 target (FIXME)
+ifeq ($(ARCH), AVR8)
+  CC_FLAGS += -Wredundant-decls
+endif
+
+# C compiler only flags
+C_FLAGS += -Wmissing-parameter-type
+C_FLAGS += -Wmissing-prototypes
+C_FLAGS += -Wnested-externs
+C_FLAGS += -Wbad-function-cast
+C_FLAGS += -Wstrict-prototypes
+C_FLAGS += -Wold-style-definition
+
+# Disable warnings not supported by the version of GCC used for UC3 targets (FIXME)
+ifneq ($(ARCH), UC3)
+  C_FLAGS += -Wunsuffixed-float-constants
+  C_FLAGS += -Wjump-misses-init
+endif
+
+# Only check C++ compatibility on the build files, to ensure headers are C++ compatible
+Test_C.c Test_CPP.cpp: CC_FLAGS += -Wc++-compat
+
+# Potential additional warnings to enable in the future (FIXME)
+#CC_FLAGS += -Wcast-qual
+#CC_FLAGS += -Wconversion
+#CC_FLAGS += -Wsign-conversion
+#CC_FLAGS += -pedantic
+
+# Include LUFA-specific DMBS extension modules
+DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
+include $(DMBS_LUFA_PATH)/lufa-sources.mk
+include $(DMBS_LUFA_PATH)/lufa-gcc.mk
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
+include $(DMBS_PATH)/gcc.mk
diff --git a/lib/lufa/BuildTests/SingleUSBModeTest/Dummy.S b/lib/lufa/BuildTests/SingleUSBModeTest/Dummy.S
new file mode 100644
index 0000000000..1be4228d2d
--- /dev/null
+++ b/lib/lufa/BuildTests/SingleUSBModeTest/Dummy.S
@@ -0,0 +1,42 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+.section .text
+
+
+# Mandatory entry point for successful compilation and link
+.global main
+main:
+	# Force code generation of the base USB stack
+	call USB_Init
+
+# Mandatory callback needed for base compile of the USB driver
+.global CALLBACK_USB_GetDescriptor
+CALLBACK_USB_GetDescriptor:
diff --git a/lib/lufa/BuildTests/SingleUSBModeTest/Test.c b/lib/lufa/BuildTests/SingleUSBModeTest/Test.c
new file mode 100644
index 0000000000..7ac2e008f3
--- /dev/null
+++ b/lib/lufa/BuildTests/SingleUSBModeTest/Test.c
@@ -0,0 +1,32 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2017.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include <LUFA/Common/Common.h>
+#include <LUFA/Drivers/USB/USB.h>
diff --git a/lib/lufa/BuildTests/SingleUSBModeTest/makefile b/lib/lufa/BuildTests/SingleUSBModeTest/makefile
new file mode 100644
index 0000000000..7921ab6ca2
--- /dev/null
+++ b/lib/lufa/BuildTests/SingleUSBModeTest/makefile
@@ -0,0 +1,57 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+
+# Makefile for the single USB mode build test.
+# This test attempts to build the USB module
+# under fixed device and fixed host modes under
+# all supported architectures
+
+# Path to the LUFA library core
+LUFA_PATH := ../../LUFA/
+
+# Build test cannot be run with multiple parallel jobs
+.NOTPARALLEL:
+
+all: begin compile clean end
+
+begin:
+	@echo Executing build test "SingleUSBModeTest".
+	@echo
+
+end:
+	@echo Build test "SingleUSBModeTest" complete.
+	@echo
+
+compile:
+	@echo Building SingleUSBModeTest for ARCH=AVR8 in device only mode...
+	$(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=at90usb1287 CC_FLAGS='-D USB_DEVICE_ONLY'
+
+	@echo Building SingleUSBModeTest for ARCH=AVR8 in host only mode...
+	$(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=at90usb1287 CC_FLAGS='-D USB_HOST_ONLY'
+
+	@echo Building SingleUSBModeTest for ARCH=XMEGA in device only mode...
+	$(MAKE) -f makefile.test clean elf ARCH=XMEGA MCU=atxmega128a1u CC_FLAGS='-D USB_DEVICE_ONLY'
+
+	@echo Building SingleUSBModeTest for ARCH=UC3 in device only mode...
+	$(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=uc3a0256 CC_FLAGS='-D USB_DEVICE_ONLY'
+
+	@echo Building SingleUSBModeTest for ARCH=UC3 in host only mode...
+	$(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=uc3a0256 CC_FLAGS='-D USB_HOST_ONLY'
+
+clean:
+	$(MAKE) -f makefile.test clean ARCH=AVR8 MCU=at90usb1287
+	$(MAKE) -f makefile.test clean ARCH=XMEGA MCU=atxmega128a1u
+	$(MAKE) -f makefile.test clean ARCH=UC3 MCU=uc3a0256
+
+%:
+
+.PHONY: begin end compile clean
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
diff --git a/lib/lufa/BuildTests/SingleUSBModeTest/makefile.test b/lib/lufa/BuildTests/SingleUSBModeTest/makefile.test
new file mode 100644
index 0000000000..365c7d00b5
--- /dev/null
+++ b/lib/lufa/BuildTests/SingleUSBModeTest/makefile.test
@@ -0,0 +1,75 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          =
+ARCH         =
+BOARD        = NONE
+F_CPU        = $(F_USB)
+DEBUG_LEVEL  = 0
+
+ifeq ($(ARCH), AVR8)
+  F_USB      = 8000000
+else ifeq ($(ARCH), XMEGA)
+  F_USB      = 48000000
+else ifeq ($(ARCH), UC3)
+  F_USB      = 48000000
+endif
+
+OPTIMIZATION = 1
+TARGET       = Test
+SRC          = Test.c Dummy.S $(LUFA_SRC_USB)
+LUFA_PATH    = ../../LUFA
+
+# Generic C/C++ compiler flags
+CC_FLAGS  = -Wextra
+CC_FLAGS += -Werror
+CC_FLAGS += -Wformat=2
+CC_FLAGS += -Winit-self
+CC_FLAGS += -Wswitch-enum
+CC_FLAGS += -Wunused
+CC_FLAGS += -Wundef
+CC_FLAGS += -Wpointer-arith
+CC_FLAGS += -Wcast-align
+CC_FLAGS += -Wwrite-strings
+CC_FLAGS += -Wlogical-op
+CC_FLAGS += -Wmissing-declarations
+CC_FLAGS += -Wmissing-field-initializers
+CC_FLAGS += -Wmissing-format-attribute
+CC_FLAGS += -Woverlength-strings
+
+# Only enable rendundant declaration warnings for AVR8 target (FIXME)
+ifeq ($(ARCH), AVR8)
+  CC_FLAGS += -Wredundant-decls
+endif
+
+# C compiler only flags
+C_FLAGS += -Wmissing-parameter-type
+C_FLAGS += -Wnested-externs
+
+# Potential additional warnings to enable in the future (FIXME)
+#CC_FLAGS += -Wswitch-default
+#CC_FLAGS += -Wc++-compat
+#CC_FLAGS += -Wcast-qual
+#CC_FLAGS += -Wconversion
+#CC_FLAGS += -Wjump-misses-init
+#CC_FLAGS += -pedantic
+
+# Include LUFA-specific DMBS extension modules
+DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
+include $(DMBS_LUFA_PATH)/lufa-sources.mk
+include $(DMBS_LUFA_PATH)/lufa-gcc.mk
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
+include $(DMBS_PATH)/gcc.mk
diff --git a/lib/lufa/BuildTests/StaticAnalysisTest/makefile b/lib/lufa/BuildTests/StaticAnalysisTest/makefile
new file mode 100644
index 0000000000..0041234d19
--- /dev/null
+++ b/lib/lufa/BuildTests/StaticAnalysisTest/makefile
@@ -0,0 +1,47 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+
+# Static anlysis of the entire LUFA source tree, using the free cross-platform "cppcheck" tool.
+
+# Path to the LUFA library core
+LUFA_PATH := ../../LUFA/
+
+CPPCHECK_EXCLUDES := FATFs/            \
+                     PetiteFATFs/      \
+                     uip/
+
+CPPCHECK_INCLUDES := $(patsubst %/,%,$(LUFA_PATH))/CodeTemplates/               \
+                     $(patsubst %/,%,$(LUFA_PATH))/../Projects/AVRISP-MKII/
+
+CPPCHECK_FLAGS    := -U TEMPLATE_FUNC_NAME -U __GNUC__ -U __DOXYGEN__
+
+CPPCHECK_SUPPRESS := variableScope missingInclude unusedFunction
+
+SRC               := $(patsubst %/,%,$(LUFA_PATH))/..
+
+# Build test cannot be run with multiple parallel jobs
+.NOTPARALLEL:
+
+all: begin cppcheck end
+
+begin:
+	@echo Executing build test "StaticAnalysisTest".
+	@echo
+
+end:
+	@echo Build test "StaticAnalysisTest" complete.
+	@echo
+
+%:
+
+.PHONY: all begin end
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
+include $(DMBS_PATH)/cppcheck.mk
diff --git a/lib/lufa/BuildTests/makefile b/lib/lufa/BuildTests/makefile
new file mode 100644
index 0000000000..369ea9ad29
--- /dev/null
+++ b/lib/lufa/BuildTests/makefile
@@ -0,0 +1,24 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2017.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+
+# Makefile to build all the LUFA Build Tests. Build Tests are
+# used to verify the correctness of the LUFA library, and are
+# not intended to be modified or compiled by non-developers.
+
+all:
+
+%:
+	@echo Executing \"make $@\" on all LUFA build tests.
+	@echo
+	$(MAKE) -C BoardDriverTest $@
+	$(MAKE) -C BootloaderTest $@
+	$(MAKE) -C ModuleTest $@
+	$(MAKE) -C SingleUSBModeTest $@
+	$(MAKE) -C StaticAnalysisTest $@
+	@echo
+	@echo LUFA build test \"make $@\" operation complete.