From 2a28862dcc6a8e5fcf7c8015f67b3eee4716fef6 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Thu, 26 Nov 2009 11:16:20 +0000
Subject: [PATCH] Make MIDI device demos also turn off the on board LEDs if
 MIDI Note On messages are sent with a velocity of zero, which some devices
 use instead of Note Off messages (thanks to Robin Green).

---
 Demos/Device/ClassDriver/MIDI/MIDI.c | 2 +-
 Demos/Device/LowLevel/MIDI/MIDI.c    | 5 +++--
 LUFA/ManPages/ChangeLog.txt          | 4 +++-
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c
index b70482787..765bec65d 100644
--- a/Demos/Device/ClassDriver/MIDI/MIDI.c
+++ b/Demos/Device/ClassDriver/MIDI/MIDI.c
@@ -72,7 +72,7 @@ int main(void)
 		MIDI_EventPacket_t ReceivedMIDIEvent;
 		if (MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &ReceivedMIDIEvent))
 		{
-			if (ReceivedMIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4))
+			if ((ReceivedMIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4)) && (ReceivedMIDIEvent.Data3 > 0))
 			  LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);
 			else
 			  LEDs_SetAllLEDs(LEDS_NO_LEDS);
diff --git a/Demos/Device/LowLevel/MIDI/MIDI.c b/Demos/Device/LowLevel/MIDI/MIDI.c
index 2cdf71152..cfd81486a 100644
--- a/Demos/Device/LowLevel/MIDI/MIDI.c
+++ b/Demos/Device/LowLevel/MIDI/MIDI.c
@@ -198,14 +198,15 @@ void MIDI_Task(void)
 		/* Read the MIDI event packet from the endpoint */
 		Endpoint_Read_Stream_LE(&MIDIEvent, sizeof(MIDIEvent));
 	
-		if (MIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4))
+		/* Check to see if the sent command is a note on message with a non-zero velocity */
+		if ((MIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4)) && (MIDIEvent.Data3 > 0))
 		{
 			/* Change LEDs depending on the pitch of the sent note */
 			LEDs_SetAllLEDs(MIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);
 		}
 		else
 		{
-			/* Turn off all LEDs in response to non-Note On messages */
+			/* Turn off all LEDs in response to non Note On messages */
 			LEDs_SetAllLEDs(LEDS_NO_LEDS);
 		}
 	
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index d06d91399..8f7a410ff 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -27,7 +27,9 @@
   *  - All Class Drivers now return false or the "DeviceDisconnected" error code of their respective error enums when a function
   *    is called when no host/device is connected where possible
   *  - The HOST_SENDCONTROL_DeviceDisconnect enum value has been renamed to HOST_SENDCONTROL_DeviceDisconnected to be in line
-  *    with the rest of the library errorcodes.
+  *    with the rest of the library errorcodes
+  *  - Make MIDI device demos also turn off the on board LEDs if MIDI Note On messages are sent with a velocity of zero,
+  *    which some devices use instead of Note Off messages (thanks to Robin Green)
   *
   *  <b>Fixed:</b>
   *  - Added missing CDC_Host_CreateBlockingStream() function code to the CDC Host Class driver
-- 
GitLab