From 10a56f6105647e5cad568a44b878b5d179493e23 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Fri, 3 Feb 2012 20:20:11 +0000
Subject: [PATCH] Add support for the Micropendous series of USB AVR8 boards.

---
 LUFA/Common/BoardTypes.h                      |  95 ++++++----
 LUFA/DoxygenPages/ChangeLog.txt               |   1 +
 LUFA/DoxygenPages/DeviceSupport.txt           |   4 +-
 .../Drivers/Board/AVR8/MICROPENDOUS/Buttons.h | 166 ++++++++++++++++++
 LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h   | 130 ++++++++++++++
 LUFA/Drivers/Board/Buttons.h                  |   5 +
 LUFA/Drivers/Board/LEDs.h                     |   2 +
 7 files changed, 365 insertions(+), 38 deletions(-)
 create mode 100644 LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h
 create mode 100644 LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h

diff --git a/LUFA/Common/BoardTypes.h b/LUFA/Common/BoardTypes.h
index ea0d7073f..ad34d513e 100644
--- a/LUFA/Common/BoardTypes.h
+++ b/LUFA/Common/BoardTypes.h
@@ -59,120 +59,141 @@
 	/* Public Interface - May be used in end-application: */
 		/* Macros: */
 			/** Selects the USBKEY specific board drivers, including Temperature, Button, Dataflash, Joystick and LED drivers. */
-			#define BOARD_USBKEY        0
+			#define BOARD_USBKEY               0
 
 			/** Selects the STK525 specific board drivers, including Temperature, Button, Dataflash, Joystick and LED drivers. */
-			#define BOARD_STK525        1
+			#define BOARD_STK525               1
 
 			/** Selects the STK526 specific board drivers, including Temperature, Button, Dataflash, Joystick and LED drivers. */
-			#define BOARD_STK526        2
+			#define BOARD_STK526               2
 
 			/** Selects the RZUSBSTICK specific board drivers, including the driver for the boards LEDs. */
-			#define BOARD_RZUSBSTICK    3
+			#define BOARD_RZUSBSTICK           3
 
 			/** Selects the ATAVRUSBRF01 specific board drivers, including the driver for the board LEDs. */
-			#define BOARD_ATAVRUSBRF01  4
+			#define BOARD_ATAVRUSBRF01         4
 
 			/** Selects the user-defined board drivers, which should be placed in the user project's folder
 			 *  under a directory named \c /Board/. Each board driver should be named identically to the LUFA
 			 *  master board driver (i.e., driver in the \c LUFA/Drivers/Board directory) so that the library
 			 *  can correctly identify it.
 			 */
-			#define BOARD_USER          5
+			#define BOARD_USER                 5
 
 			/** Selects the BUMBLEB specific board drivers, using the officially recommended peripheral layout. */
-			#define BOARD_BUMBLEB       6
+			#define BOARD_BUMBLEB              6
 
 			/** Selects the XPLAIN (Revision 2 or newer) specific board drivers, including LED and Dataflash drivers. */
-			#define BOARD_XPLAIN        7
+			#define BOARD_XPLAIN               7
 
 			/** Selects the XPLAIN (Revision 1) specific board drivers, including LED and Dataflash drivers. */
-			#define BOARD_XPLAIN_REV1   8
+			#define BOARD_XPLAIN_REV1          8
 
 			/** Selects the EVK527 specific board drivers, including Temperature, Button, Dataflash, Joystick and LED drivers. */
-			#define BOARD_EVK527        9
+			#define BOARD_EVK527               9
 
 			/** Disables board drivers when operation will not be adversely affected (e.g. LEDs) - use of board drivers
 			 *  such as the Joystick driver, where the removal would adversely affect the code's operation is still disallowed. */
-			#define BOARD_NONE          10
+			#define BOARD_NONE                 10
 
 			/** Selects the Teensy version 1.x specific board drivers, including the driver for the board LEDs. */
-			#define BOARD_TEENSY        11
+			#define BOARD_TEENSY               11
 
 			/** Selects the USBTINY MKII specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_USBTINYMKII   12
+			#define BOARD_USBTINYMKII          12
 
 			/** Selects the Benito specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_BENITO        13
+			#define BOARD_BENITO               13
 
 			/** Selects the JM-DB-U2 specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_JMDBU2        14
+			#define BOARD_JMDBU2               14
 
 			/** Selects the Olimex AVR-USB-162 specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_OLIMEX162     15
+			#define BOARD_OLIMEX162            15
 
 			/** Selects the UDIP specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_UDIP          16
+			#define BOARD_UDIP                 16
 
 			/** Selects the BUI specific board drivers, including the driver for the board LEDs. */
-			#define BOARD_BUI           17
+			#define BOARD_BUI                  17
 
 			/** Selects the Arduino Uno specific board drivers, including the driver for the board LEDs. */
-			#define BOARD_UNO           18
+			#define BOARD_UNO                  18
 
 			/** Selects the Busware CUL V3 specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_CULV3         19
+			#define BOARD_CULV3                19
 
 			/** Selects the Blackcat USB JTAG specific board drivers, including the driver for the board LEDs. */
-			#define BOARD_BLACKCAT      20
+			#define BOARD_BLACKCAT             20
 
 			/** Selects the Maximus specific board drivers, including the driver for the board LEDs. */
-			#define BOARD_MAXIMUS       21
+			#define BOARD_MAXIMUS              21
 
 			/** Selects the Minimus specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_MINIMUS       22
+			#define BOARD_MINIMUS              22
 
 			/** Selects the Adafruit U4 specific board drivers, including the Button driver. */
-			#define BOARD_ADAFRUITU4    23
+			#define BOARD_ADAFRUITU4           23
 
 			/** Selects the Microsin AVR-USB162 specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_MICROSIN162   24
+			#define BOARD_MICROSIN162          24
 
 			/** Selects the Kernel Concepts USBFOO specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_USBFOO        25
+			#define BOARD_USBFOO               25
 
 			/** Selects the Sparkfun ATMEGA8U2 specific board drivers, including the driver for the board LEDs. */
-			#define BOARD_SPARKFUN8U2   26
+			#define BOARD_SPARKFUN8U2          26
 
 			/** Selects the Atmel EVK1101 specific board drivers, including the Button, Joystick and LED drivers. */
-			#define BOARD_EVK1101       27
+			#define BOARD_EVK1101              27
 
 			/** Selects the Busware TUL specific board drivers, including the Button and LED drivers. */
-			#define BOARD_TUL           28
+			#define BOARD_TUL                  28
 
 			/** Selects the Atmel EVK1100 specific board drivers, including the Button, Joystick and LED drivers. */
-			#define BOARD_EVK1100       29
+			#define BOARD_EVK1100              29
 
 			/** Selects the Atmel EVK1104 specific board drivers, including the Button and LED drivers. */
-			#define BOARD_EVK1104       30
+			#define BOARD_EVK1104              30
 
 			/** Selects the Atmel XMEGA A3BU Xplained specific board drivers, including Dataflash, Button and LED drivers. */
-			#define BOARD_A3BU_XPLAINED 31
+			#define BOARD_A3BU_XPLAINED        31
 
 			/** Selects the Teensy version 2.x specific board drivers, including the driver for the board LEDs. */
-			#define BOARD_TEENSY2       32
+			#define BOARD_TEENSY2              32
 
 			/** Selects the USB2AX version 1 and 2 specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_USB2AX        33
+			#define BOARD_USB2AX               33
 
 			/** Selects the USB2AX version 3 specific board drivers, including the Button and LEDs drivers. */
-			#define BOARD_USB2AX_V3     34
+			#define BOARD_USB2AX_V3            34
+
+			/** Selects the Micropendous 32U2 specific board drivers, including the Button and LED drivers. */
+			#define BOARD_MICROPENDOUS_32U2    35
+
+			/** Selects the Micropendous A specific board drivers, including the Button. */
+			#define BOARD_MICROPENDOUS_A       36
+
+			/** Selects the Micropendous 1 specific board drivers, including the Button. */
+			#define BOARD_MICROPENDOUS_1       37
+
+			/** Selects the Micropendous 2 specific board drivers, including the Button. */
+			#define BOARD_MICROPENDOUS_2       38
+
+			/** Selects the Micropendous 3 specific board drivers, including the Button. */
+			#define BOARD_MICROPENDOUS_3       39
+
+			/** Selects the Micropendous 4 specific board drivers, including the Button. */
+			#define BOARD_MICROPENDOUS_4       40
+
+			/** Selects the Micropendous DIP specific board drivers, including the Button. */
+			#define BOARD_MICROPENDOUS_DIP     41
 
 			#if !defined(__DOXYGEN__)
-				#define BOARD_          BOARD_NONE
+				#define BOARD_                 BOARD_NONE
 
 				#if !defined(BOARD)
-					#define BOARD       BOARD_NONE
+					#define BOARD              BOARD_NONE
 				#endif
 			#endif
 
diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt
index d6d09bafc..bb00436ec 100644
--- a/LUFA/DoxygenPages/ChangeLog.txt
+++ b/LUFA/DoxygenPages/ChangeLog.txt
@@ -17,6 +17,7 @@
   *   - Added new USB_Host_GetDescriptor(), USB_Host_GetDeviceConfiguration() and USB_Host_GetInterfaceAltSetting() functions
   *   - Added new CALLBACK_Audio_Device_GetSetInterfaceProperty() callback to the Audio Device Class driver
   *   - Added new LEDs_Disable(), Buttons_Disable() and Joystick_Disable() functions to the board hardware drivers
+  *   - Added support for the Micropendous family of boards
   *  - Library Applications:
   *   - Added User Application APIs to the CDC and DFU class bootloaders
   *   - Added INVERTED_ISP_MISO compile time option to the AVRISP-MKII clone project (thanks to Chuck Rohs)
diff --git a/LUFA/DoxygenPages/DeviceSupport.txt b/LUFA/DoxygenPages/DeviceSupport.txt
index 0a8912f14..507ec41ff 100644
--- a/LUFA/DoxygenPages/DeviceSupport.txt
+++ b/LUFA/DoxygenPages/DeviceSupport.txt
@@ -104,11 +104,13 @@
  *   - Arduino Uno
  *   - Busware BUI
  *   - Busware CUL V3
- *   - Fletchtronics Bumble-B (using officially recommended peripheral layout)
+ *   - Busware TUL
+ *   - Fletchtronics Bumble-B (using manufacturer recommended peripheral layout)
  *   - Kernel Concepts USBFOO
  *   - Linnix UDIP
  *   - MattairTech JM-DB-U2
  *   - Maximus USB
+ *   - Micropendous Boards (many versions)
  *   - Microsin AVR-USB162
  *   - Minimus USB
  *   - Olimex AVR-USB-162
diff --git a/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h
new file mode 100644
index 000000000..640568dc5
--- /dev/null
+++ b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h
@@ -0,0 +1,166 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2011.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2011  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 disclaim 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 Board specific Buttons driver header for the Micropendous series boards.
+ *  \copydetails Group_Buttons_MICROPENDOUS_32U2
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the Buttons driver
+ *        dispatch header located in LUFA/Drivers/Board/Buttons.h.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_A MICROPENDOUS_A
+ *  \brief Board specific Button driver header for the Micropendous A (https://code.google.com/p/micropendous/wiki/MicropendousA).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_1 MICROPENDOUS_1
+ *  \brief Board specific Button driver header for the Micropendous 1 (https://code.google.com/p/micropendous/wiki/Micropendous1).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_2 MICROPENDOUS_2
+ *  \brief Board specific Button driver header for the Micropendous 2 (https://code.google.com/p/micropendous/wiki/Micropendous2).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+ 
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_3 MICROPENDOUS_3
+ *  \brief Board specific Button driver header for the Micropendous 3 (https://code.google.com/p/micropendous/wiki/Micropendous3).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+ 
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_4 MICROPENDOUS_4
+ *  \brief Board specific Button driver header for the Micropendous 4 (https://code.google.com/p/micropendous/wiki/Micropendous4).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_32U2 MICROPENDOUS_32U2
+ *  \brief Board specific Buttons driver header for the Micropendous 32U2.
+ *
+ *  \note There are multiple supported Micropendous boards, compile with <code>BOARD = MICROPENDOUS_{VERSION}</code>.
+ *
+ *  Board specific Buttons driver header for the Micropendous 32U2 (https://code.google.com/p/micropendous/wiki/Micropendous_32U2).
+ *
+ *  @{
+ */
+
+#ifndef __BUTTONS_MICROPENDOUS_H__
+#define __BUTTONS_MICROPENDOUS_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+
+	/* 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
+
+	/* Private Interface - For use in library only: */
+	#if !defined(__DOXYGEN__)
+		#if (BOARD == BOARD_MICROPENDOUS_32U2)
+			#define _BOARD_BUTTON1_MASK             (1 << 7)
+			#define _BOARD_BUTTON_PORTLETTER        D
+		#elif (BOARD == BOARD_MICROPENDOUS_A)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_1)
+			#define _BOARD_BUTTON1_MASK             (1 << 7)
+			#define _BOARD_BUTTON_PORTLETTER        D
+		#elif (BOARD == BOARD_MICROPENDOUS_2)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_3)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_4)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#endif
+		
+		#define _BOARD_BUTTON_CONCAT2(Reg, Letter)  Reg ## Letter
+		#define _BOARD_BUTTON_CONCAT(Reg, Letter)   _BOARD_BUTTON_CONCAT2(Reg, Letter)
+
+		#define _BOARD_BUTTON_PORT                 _BOARD_BUTTON_CONCAT(PORT, _BOARD_BUTTON_PORTLETTER)
+		#define _BOARD_BUTTON_PIN                  _BOARD_BUTTON_CONCAT(PIN, _BOARD_BUTTON_PORTLETTER)
+		#define _BOARD_BUTTON_DDR                  _BOARD_BUTTON_CONCAT(DDR, _BOARD_BUTTON_PORTLETTER)
+	#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Button mask for the first button on the board. */
+			#define BUTTONS_BUTTON1      _BOARD_BUTTON1_MASK
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void Buttons_Init(void)
+			{
+				_BOARD_BUTTON_DDR  &= ~BUTTONS_BUTTON1;
+				_BOARD_BUTTON_PORT |=  BUTTONS_BUTTON1;
+			}
+
+			static inline void Buttons_Disable(void)
+			{
+				_BOARD_BUTTON_DDR  &= ~BUTTONS_BUTTON1;
+				_BOARD_BUTTON_PORT &= ~BUTTONS_BUTTON1;
+			}
+
+			static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Buttons_GetStatus(void)
+			{
+				return ((_BOARD_BUTTON_PIN & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
+
+
diff --git a/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h
new file mode 100644
index 000000000..9d6c8d7e2
--- /dev/null
+++ b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h
@@ -0,0 +1,130 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2011.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2011  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 disclaim 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 Board specific LED driver header for the Micropendous-32U2.
+ *  \copydetails Group_LEDs_MICROPENDOUS_32U2
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the LEDs driver
+ *        dispatch header located in LUFA/Drivers/Board/LEDs.h.
+ */
+
+/** \ingroup Group_LEDs
+ *  \defgroup Group_LEDs_MICROPENDOUS_32U2 MICROPENDOUS_32U2
+ *  \brief Board specific LED driver header for the Micropendous 32U2.
+ *
+ *  Board specific LED driver header for the Micropendous 32U2 (https://code.google.com/p/micropendous/wiki/Micropendous_32U2).
+ *
+ *  @{
+ */
+
+#ifndef __LEDS_MICROPENDOUS_H__
+#define __LEDS_MICROPENDOUS_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+
+	/* 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
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** LED mask for the first LED on the board. */
+			#define LEDS_LED1        (1 << 6)
+
+			/** LED mask for all the LEDs on the board. */
+			#define LEDS_ALL_LEDS    LEDS_LED1
+
+			/** LED mask for the none of the board LEDs. */
+			#define LEDS_NO_LEDS     0
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void LEDs_Init(void)
+			{
+				DDRD  |=  LEDS_ALL_LEDS;
+				PORTD &= ~LEDS_ALL_LEDS;
+			}
+
+			static inline void LEDs_Disable(void)
+			{
+				DDRD  &= ~LEDS_ALL_LEDS;
+				PORTD &= ~LEDS_ALL_LEDS;
+			}
+
+			static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
+			{
+				PORTD |= LEDMask;
+			}
+
+			static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
+			{
+				PORTD &= ~LEDMask;
+			}
+
+			static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
+			{
+				PORTD = ((PORTF & ~LEDS_ALL_LEDS) | LEDMask);
+			}
+
+			static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
+			                                   const uint8_t ActiveMask)
+			{
+				PORTD = ((PORTF & ~LEDMask) | ActiveMask);
+			}
+
+			static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
+			{
+				PORTD ^= LEDMask;
+			}
+
+			static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t LEDs_GetLEDs(void)
+			{
+				return (PORTD & LEDS_ALL_LEDS);
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
+
diff --git a/LUFA/Drivers/Board/Buttons.h b/LUFA/Drivers/Board/Buttons.h
index 3dd89a943..8fe8ebcc0 100644
--- a/LUFA/Drivers/Board/Buttons.h
+++ b/LUFA/Drivers/Board/Buttons.h
@@ -135,6 +135,11 @@
 			#include "XMEGA/A3BU_XPLAINED/Buttons.h"
 		#elif ((BOARD == BOARD_USB2AX) || (BOARD == BOARD_USB2AX_V3))
 			#include "AVR8/USB2AX/Buttons.h"
+		#elif ((BOARD_MICROPENDOUS_32U2) || (BOARD == BOARD_MICROPENDOUS_A) || \
+		       (BOARD == BOARD_MICROPENDOUS_1) || (BOARD == BOARD_MICROPENDOUS_2) || \
+		       (BOARD == BOARD_MICROPENDOUS_3) || (BOARD == BOARD_MICROPENDOUS_4) || \
+		       (BOARD == BOARD_MICROPENDOUS_DIP))
+			#include "AVR8/MICROPENDOUS/Buttons.h"
 		#else
 			#include "Board/Buttons.h"
 		#endif
diff --git a/LUFA/Drivers/Board/LEDs.h b/LUFA/Drivers/Board/LEDs.h
index 839a059c8..9db695798 100644
--- a/LUFA/Drivers/Board/LEDs.h
+++ b/LUFA/Drivers/Board/LEDs.h
@@ -175,6 +175,8 @@
 			#include "XMEGA/A3BU_XPLAINED/LEDs.h"
 		#elif ((BOARD == BOARD_USB2AX) || (BOARD == BOARD_USB2AX_V3))
 			#include "AVR8/USB2AX/LEDs.h"
+		#elif (BOARD_MICROPENDOUS_32U2)
+			#include "AVR8/MICROPENDOUS/LEDs.h"
 		#else
 			#include "Board/LEDs.h"
 		#endif
-- 
GitLab