USB device stack
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