From d18f12bf42e735cecfccb7cbc551f022bf0dd91b Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Thu, 28 Mar 2013 14:59:19 +0000
Subject: Added additional MIDI command definitions to the MIDI class driver
 (thanks to Daniel Dreibrodt).

---
 LUFA/DoxygenPages/ChangeLog.txt                 |  1 +
 LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h | 54 +++++++++++++++++++++----
 2 files changed, 47 insertions(+), 8 deletions(-)

diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt
index e7615fdfc..ffe1bd006 100644
--- a/LUFA/DoxygenPages/ChangeLog.txt
+++ b/LUFA/DoxygenPages/ChangeLog.txt
@@ -11,6 +11,7 @@
   *  - Library Applications:
   *   - Added new Printer class bootloader
   *   - Added new Mass Storage class bootloader
+  *   - Added additional MIDI command definitions to the MIDI class driver (thanks to Daniel Dreibrodt)
   *
   *  <b>Changed:</b>
   *  - Core:
diff --git a/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h b/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h
index c07fbbf4e..9bb042cb7 100644
--- a/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h
+++ b/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h
@@ -68,17 +68,55 @@
 		#endif
 
 	/* Macros: */
-		/** \name MIDI Command Values */
+		/** \name MIDI Command Values
+		 *  See http://www.midi.org/techspecs/midimessages.php for more information.
+		 */
 		//@{
-		/** MIDI command for a note on (activation) event. */
-		#define MIDI_COMMAND_NOTE_ON        0x90
+		/** MIDI command for System Exclusive (SysEx) single event that has one byte of data total. */
+		#define MIDI_COMMAND_SYSEX_1BYTE           MIDI_COMMAND_SYSEX_END_1BYTE
+
+		/** MIDI command for System Exclusive (SysEx) single event that has two bytes of data total. */
+		#define MIDI_COMMAND_SYSEX_2BYTE           0x20
+
+		/** MIDI command for System Exclusive (SysEx) single event that has three bytes of data total. */
+		#define MIDI_COMMAND_SYSEX_3BYTE           0x30
+
+		/** MIDI command for System Exclusive (SysEx) stream event that has at least four bytes of data total. */
+		#define MIDI_COMMAND_SYSEX_START_3BYTE     0x40
+
+		/** MIDI command for System Exclusive (SysEx) stream event terminator with one remaining data byte. */
+		#define MIDI_COMMAND_SYSEX_END_1BYTE       0x50
+
+		/** MIDI command for System Exclusive (SysEx) stream event terminator with two remaining data bytes. */
+		#define MIDI_COMMAND_SYSEX_END_2BYTE       0x60
+
+		/** MIDI command for System Exclusive (SysEx) stream event terminator with three remaining data bytes. */
+		#define MIDI_COMMAND_SYSEX_END_3BYTE       0x70
 
 		/** MIDI command for a note off (deactivation) event. */
-		#define MIDI_COMMAND_NOTE_OFF       0x80
+		#define MIDI_COMMAND_NOTE_OFF              0x80
+
+		/** MIDI command for a note on (activation) event. */
+		#define MIDI_COMMAND_NOTE_ON               0x90
+
+		/** MIDI command for a note pressure change event. */
+		#define MIDI_COMMAND_NOTE_PRESSURE         0xA0
+
+		/** MIDI command for a control change event. */
+		#define MIDI_COMMAND_CONTROL_CHANGE        0xB0
+
+		/** MIDI command for a control change event. */
+		#define MIDI_COMMAND_PROGRAM_CHANGE        0xC0
+
+		/** MIDI command for a channel pressure change event. */
+		#define MIDI_COMMAND_CHANNEL_PRESSURE      0xD0
+
+		/** MIDI command for a pitch change event. */
+		#define MIDI_COMMAND_PITCH_WHEEL_CHANGE    0xE0
 		//@}
 
 		/** Standard key press velocity value used for all note events. */
-		#define MIDI_STANDARD_VELOCITY      64
+		#define MIDI_STANDARD_VELOCITY             64
 
 		/** Convenience macro. MIDI channels are numbered from 1-10 (natural numbers) however the logical channel
 		 *  addresses are zero-indexed. This converts a natural MIDI channel number into the logical channel address.
@@ -87,8 +125,8 @@
 		 *
 		 *  \return Constructed MIDI channel ID.
 		 */
-		#define MIDI_CHANNEL(channel)        ((channel) - 1)
-		
+		#define MIDI_CHANNEL(channel)              ((channel) - 1)
+
 		/** Constructs a MIDI event ID from a given MIDI command and a virtual MIDI cable index. This can then be
 		 *  used to create and decode \ref MIDI_EventPacket_t MIDI event packets.
 		 *
@@ -97,7 +135,7 @@
 		 *
 		 *  \return Constructed MIDI event ID.
 		 */
-		#define MIDI_EVENT(virtualcable, command) ((virtualcable << 4) | (command >> 4))
+		#define MIDI_EVENT(virtualcable, command)  ((virtualcable << 4) | (command >> 4))
 
 	/* Enums: */
 		/** Enum for the possible MIDI jack types in a MIDI device jack descriptor. */
-- 
cgit v1.2.3