USB device stack
Dependents: blinky_max32630fthr FTHR_USB_serial FTHR_OLED HSP_RPC_GUI_3_0_1 ... more
Fork of USBDevice by
Diff: USBMIDI/MIDIMessage.h
- Revision:
- 48:03f8e580579a
- Parent:
- 25:7c72828865f3
- Child:
- 50:a3c50882f2c5
--- a/USBMIDI/MIDIMessage.h Wed Apr 08 07:46:23 2015 +0100
+++ b/USBMIDI/MIDIMessage.h Thu Apr 16 11:00:20 2015 +0100
@@ -21,6 +21,8 @@
#include "mbed.h"
+#define MAX_MIDI_MESSAGE_SIZE 256 // Max message size. SysEx can be up to 65536 but 256 should be fine for most usage
+
// MIDI Message Format
//
// [ msg(4) | channel(4) ] [ 0 | n(7) ] [ 0 | m(7) ]
@@ -49,6 +51,16 @@
data[i] = buf[i];
}
+ // New constructor, buf is a true MIDI message (not USBMidi message) and buf_len true message length.
+ MIDIMessage(uint8_t *buf, int buf_len) {
+ length=buf_len+1;
+ // first byte keeped for retro-compatibility
+ data[0]=0;
+
+ for (int i = 0; i < buf_len; i++)
+ data[i+1] = buf[i];
+ }
+
// create messages
/** Create a NoteOff message
@@ -162,6 +174,16 @@
return ControlChange(123, 0, channel);
}
+ /** Create a SysEx message
+ * @param data SysEx data (including 0xF0 .. 0xF7)
+ * @param len SysEx data length
+ * @returns A MIDIMessage
+ */
+ static MIDIMessage SysEx(uint8_t *data, int len) {
+ MIDIMessage msg=MIDIMessage(data,len);
+ return msg;
+ }
+
// decode messages
/** MIDI Message Types */
@@ -174,7 +196,8 @@
ProgramChangeType,
ChannelAftertouchType,
PitchWheelType,
- AllNotesOffType
+ AllNotesOffType,
+ SysExType
};
/** Read the message type
@@ -196,6 +219,7 @@
case 0xC: return ProgramChangeType;
case 0xD: return ChannelAftertouchType;
case 0xE: return PitchWheelType;
+ case 0xF: return SysExType;
default: return ErrorType;
}
}
@@ -245,7 +269,8 @@
return p - 8192; // 0 - 16383, 8192 is center
}
- uint8_t data[4];
+ uint8_t data[MAX_MIDI_MESSAGE_SIZE+1];
+ uint8_t length=4;
};
#endif
