From 513db46548c4757d912d158d0e261520c9ee608c Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Sat, 23 Apr 2011 03:45:29 +0000
Subject: [PATCH] Added LED flashing to the CDC and DFU class bootloaders to
 indicate when they are running.

---
 Bootloaders/CDC/BootloaderCDC.c | 14 ++++++++++++++
 Bootloaders/CDC/BootloaderCDC.h |  1 +
 Bootloaders/DFU/BootloaderDFU.c | 14 ++++++++++++++
 Bootloaders/DFU/BootloaderDFU.h |  1 +
 LUFA/ManPages/ChangeLog.txt     |  1 +
 5 files changed, 31 insertions(+)

diff --git a/Bootloaders/CDC/BootloaderCDC.c b/Bootloaders/CDC/BootloaderCDC.c
index 8e6a58b0a..ba0a629bc 100644
--- a/Bootloaders/CDC/BootloaderCDC.c
+++ b/Bootloaders/CDC/BootloaderCDC.c
@@ -66,6 +66,9 @@ int main(void)
 	/* Setup hardware required for the bootloader */
 	SetupHardware();
 
+	/* Turn on first LED on the board to indicate that the bootloader has started */
+	LEDs_SetAllLEDs(LEDS_LED1);
+
 	/* Enable global interrupts so that the USB stack can function */
 	sei();
 
@@ -100,6 +103,17 @@ void SetupHardware(void)
 
 	/* Initialize USB Subsystem */
 	USB_Init();
+	LEDs_Init();
+	
+	/* Bootloader active LED toggle timer initialization */
+	TIMSK1 = (1 << TOIE1);
+	TCCR1B = ((1 << CS11) | (1 << CS10));	
+}
+
+/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */
+ISR(TIMER1_OVF_vect, ISR_BLOCK)
+{
+	LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
 }
 
 /** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready
diff --git a/Bootloaders/CDC/BootloaderCDC.h b/Bootloaders/CDC/BootloaderCDC.h
index b6bea11e4..72bc1e773 100644
--- a/Bootloaders/CDC/BootloaderCDC.h
+++ b/Bootloaders/CDC/BootloaderCDC.h
@@ -48,6 +48,7 @@
 		#include "Descriptors.h"
 
 		#include <LUFA/Drivers/USB/USB.h>
+		#include <LUFA/Drivers/Board/LEDs.h>
 
 	/* Macros: */
 		/** Version major of the CDC bootloader. */
diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c
index 113bea748..9f6166075 100644
--- a/Bootloaders/DFU/BootloaderDFU.c
+++ b/Bootloaders/DFU/BootloaderDFU.c
@@ -119,6 +119,9 @@ int main(void)
 	MCUCR &= ~(1 << JTD);	
 	#endif
 
+	/* Turn on first LED on the board to indicate that the bootloader has started */
+	LEDs_SetAllLEDs(LEDS_LED1);
+
 	/* Enable global interrupts so that the USB stack can function */
 	sei();
 
@@ -149,6 +152,11 @@ void SetupHardware(void)
 
 	/* Initialize the USB subsystem */
 	USB_Init();
+	LEDs_Init();
+	
+	/* Bootloader active LED toggle timer initialization */
+	TIMSK1 = (1 << TOIE1);
+	TCCR1B = ((1 << CS11) | (1 << CS10));
 }
 
 /** Resets all configured hardware required for the bootloader back to their original states. */
@@ -162,6 +170,12 @@ void ResetHardware(void)
 	MCUCR = 0;
 }
 
+/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */
+ISR(TIMER1_OVF_vect, ISR_BLOCK)
+{
+	LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+}
+
 /** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
  *  the device from the USB host before passing along unhandled control requests to the library for processing
  *  internally.
diff --git a/Bootloaders/DFU/BootloaderDFU.h b/Bootloaders/DFU/BootloaderDFU.h
index 1c1ebba6c..8fbf64c7e 100644
--- a/Bootloaders/DFU/BootloaderDFU.h
+++ b/Bootloaders/DFU/BootloaderDFU.h
@@ -50,6 +50,7 @@
 		#include "Descriptors.h"
 
 		#include <LUFA/Drivers/USB/USB.h>
+		#include <LUFA/Drivers/Board/LEDs.h>
 
 	/* Macros: */
 		/** Configuration define. Define this token to true to case the bootloader to reject all memory commands
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index f7a008551..d50779068 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -33,6 +33,7 @@
   *   - Added new KeyboardMouseMultiReport Device ClassDriver demo
   *   - Added new VirtualSerialMassStorage Device ClassDriver demo
   *   - Added HID class bootloader, compatible with a modified version of the command line Teensy loader from PJRC.com
+  *   - Added LED flashing to the CDC and DFU class bootloaders to indicate when they are running
   *
   *  <b>Changed:</b>
   *  - Core:
-- 
GitLab