From cf7885d79b777eec9aeb38fa95ec30f6e86d2875 Mon Sep 17 00:00:00 2001 From: Francois Best Date: Thu, 13 Oct 2016 18:30:49 +0200 Subject: [PATCH] Fixed stuff, using struct & methods rather than union. --- src/midi_UsbDefs.h | 60 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/src/midi_UsbDefs.h b/src/midi_UsbDefs.h index 514c1a0..5e607cf 100644 --- a/src/midi_UsbDefs.h +++ b/src/midi_UsbDefs.h @@ -28,7 +28,7 @@ #pragma once -#include "midi_Namespace.h" +#include "midi_Defs.h" BEGIN_MIDI_NAMESPACE @@ -69,9 +69,10 @@ struct CodeIndexNumbers case noteOff: case controlChange: case pitchBend: - case polyKeyPress: + case polyPressure: case systemCommon3Bytes: case sysExEnds3Bytes: + case sysExStart: return 3; case programChange: @@ -87,7 +88,7 @@ struct CodeIndexNumbers default: break; } - return 0; + return 0; // Can be any length (1, 2 or 3). } }; @@ -95,17 +96,50 @@ struct CodeIndexNumbers struct UsbMidiEventPacket { - union +public: + inline UsbMidiEventPacket() { - uint32_t mRawData; - struct - { - byte mCableNumber:4; - byte mCodeIndexNumber:4; - byte mMidi[3]; - }; - byte mDataArray[4]; - }; + memset(mData, 0, 4 * sizeof(byte)); + } + +public: + inline void setHeader(byte inCableNumber, byte inCodeIndexNumber) + { + const byte msb = (0x0f & inCableNumber) << 4; + const byte lsb = (0x0f & inCodeIndexNumber); + mData[0] = msb | lsb; + } + inline void setMidiData(const byte* inData) + { + mData[1] = *inData++; + mData[2] = *inData++; + mData[3] = *inData; + } + inline byte getCableNumber() const + { + return mData[0] >> 4; + } + inline byte getCodeIndexNumber() const + { + return mData[0] & 0x0f; + } + inline const byte* getMidiData() const + { + return mData + 1; + } + inline byte* getMidiData() + { + return mData + 1; + } + inline UsbMidiEventPacket& operator=(const byte* inData) + { + mData[0] = *inData++; + setMidiData(inData); + return *this; + } + +public: + byte mData[4]; }; END_MIDI_NAMESPACE