From 299cd97cd1042f398a04c12d1f571defdab5be17 Mon Sep 17 00:00:00 2001 From: Element Date: Tue, 2 Nov 2021 07:56:12 -0400 Subject: [PATCH 1/2] updated send(midiMessage&) to better handle system real time, sysex and other system common messages --- src/MIDI.hpp | 26 +++++++++++++++----------- src/midi_Message.h | 12 ++++++++++++ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/MIDI.hpp b/src/MIDI.hpp index bb9ffc1c..d03eab18 100644 --- a/src/MIDI.hpp +++ b/src/MIDI.hpp @@ -124,22 +124,25 @@ MidiInterface& MidiInterface 1) mTransport.write(inMessage.data1); if (inMessage.length > 2) mTransport.write(inMessage.data2); - } else + } else if (inMessage.type == MidiType::SystemExclusive) { - // sysexArray does not contain the start and end tags - mTransport.write(MidiType::SystemExclusiveStart); - - for (size_t i = 0; i < inMessage.getSysExSize(); i++) + const unsigned size = inMessage.getSysExSize(); + for (size_t i = 0; i < size; i++) mTransport.write(inMessage.sysexArray[i]); - - mTransport.write(MidiType::SystemExclusiveEnd); + } else // at this point, it it assumed to be a system common message + { + mTransport.write(inMessage.type); + if (inMessage.length > 1) mTransport.write(inMessage.data1); + if (inMessage.length > 2) mTransport.write(inMessage.data2); } } mTransport.endTransmission(); @@ -1083,6 +1086,7 @@ bool MidiInterface::parse() mMessage.data1 = mPendingMessage[1]; // Save data2 only if applicable mMessage.data2 = mPendingMessageExpectedLength == 3 ? mPendingMessage[2] : 0; + mMessage.length = mPendingMessageExpectedLength; // Reset local variables mPendingMessageIndex = 0; diff --git a/src/midi_Message.h b/src/midi_Message.h index bbd8d6a1..0b6422e7 100644 --- a/src/midi_Message.h +++ b/src/midi_Message.h @@ -114,6 +114,18 @@ struct Message const unsigned size = unsigned(data2) << 8 | data1; return size > sSysExMaxSize ? sSysExMaxSize : size; } + inline bool isSysRT () const + { + return (type & 0xf8) == 0xf8; + } + inline bool isSysCommon () const + { + return (type & 0xf8) == 0xf0; + } + inline bool isChannelMessage () const + { + return (type & 0xf0) != 0xf0; + } }; END_MIDI_NAMESPACE From 8c39aea6c6b786a29b797ad47f596fae0099519d Mon Sep 17 00:00:00 2001 From: Element Date: Wed, 3 Nov 2021 09:48:49 -0400 Subject: [PATCH 2/2] use fully qualified function names as requested --- src/MIDI.hpp | 2 +- src/midi_Message.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MIDI.hpp b/src/MIDI.hpp index d03eab18..be7c28a1 100644 --- a/src/MIDI.hpp +++ b/src/MIDI.hpp @@ -124,7 +124,7 @@ MidiInterface& MidiInterface sSysExMaxSize ? sSysExMaxSize : size; } - inline bool isSysRT () const + inline bool isSystemRealTime () const { return (type & 0xf8) == 0xf8; } - inline bool isSysCommon () const + inline bool isSystemCommon () const { return (type & 0xf8) == 0xf0; }