Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of USBDevice by
Diff: USBMIDI/MIDIMessage.h
- Revision:
- 48:03f8e580579a
- Parent:
- 25:7c72828865f3
- Child:
- 50:a3c50882f2c5
diff -r a0cd9646ecd1 -r 03f8e580579a USBMIDI/MIDIMessage.h --- 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