feat: Get CIN from status byte
Removed unused implementation of UsbMidiEventPacket
This commit is contained in:
parent
a34087c92c
commit
3f15b733e4
|
|
@ -60,6 +60,45 @@ struct CodeIndexNumbers
|
||||||
singleByte = 0x0F,
|
singleByte = 0x0F,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline byte fromStatus(StatusByte inStatus)
|
||||||
|
{
|
||||||
|
const byte statusWithoutChannel = inStatus & 0xf0;
|
||||||
|
if (statusWithoutChannel >= midi::NoteOff &&
|
||||||
|
statusWithoutChannel <= midi::PitchBend)
|
||||||
|
{
|
||||||
|
// Channel Voice Messages
|
||||||
|
return inStatus >> 4;
|
||||||
|
}
|
||||||
|
switch (inStatus)
|
||||||
|
{
|
||||||
|
// System Real Time Messages
|
||||||
|
case midi::Clock:
|
||||||
|
case midi::Start:
|
||||||
|
case midi::Continue:
|
||||||
|
case midi::Stop:
|
||||||
|
case midi::ActiveSensing:
|
||||||
|
case midi::SystemReset:
|
||||||
|
return CodeIndexNumbers::singleByte;
|
||||||
|
|
||||||
|
case midi::SystemExclusive:
|
||||||
|
return CodeIndexNumbers::sysExStart;
|
||||||
|
|
||||||
|
// System Common Messages
|
||||||
|
case midi::TimeCodeQuarterFrame:
|
||||||
|
return CodeIndexNumbers::systemCommon2Bytes;
|
||||||
|
case midi::SongPosition:
|
||||||
|
return CodeIndexNumbers::systemCommon3Bytes;
|
||||||
|
case midi::SongSelect:
|
||||||
|
return CodeIndexNumbers::systemCommon2Bytes;
|
||||||
|
case midi::TuneRequest:
|
||||||
|
return CodeIndexNumbers::systemCommon1Byte;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return CodeIndexNumbers::reserved;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static inline byte getSize(byte inCodeIndexNumber)
|
static inline byte getSize(byte inCodeIndexNumber)
|
||||||
{
|
{
|
||||||
switch (inCodeIndexNumber)
|
switch (inCodeIndexNumber)
|
||||||
|
|
@ -91,54 +130,4 @@ struct CodeIndexNumbers
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
struct UsbMidiEventPacket
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
inline UsbMidiEventPacket()
|
|
||||||
{
|
|
||||||
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
|
END_MIDI_NAMESPACE
|
||||||
|
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
||||||
#include "unit-tests.h"
|
|
||||||
#include <src/midi_UsbDefs.h>
|
|
||||||
|
|
||||||
BEGIN_MIDI_NAMESPACE
|
|
||||||
|
|
||||||
END_MIDI_NAMESPACE
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
BEGIN_UNNAMED_NAMESPACE
|
|
||||||
|
|
||||||
TEST(MidiUsb, codeIndexNumberSizes)
|
|
||||||
{
|
|
||||||
typedef midi::CodeIndexNumbers CIN;
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::reserved), 0);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::misc), 0);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::cableEvent), 0);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::systemCommon2Bytes), 2);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::systemCommon3Bytes), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::sysExStart), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::sysExContinue), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::systemCommon1Byte), 1);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::sysExEnds1Byte), 1);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::sysExEnds2Bytes), 2);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::sysExEnds3Bytes), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::noteOff), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::noteOn), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::polyPressure), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::controlChange), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::programChange), 2);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::channelPressure), 2);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::pitchBend), 3);
|
|
||||||
EXPECT_EQ(CIN::getSize(CIN::singleByte), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(MidiUsb, UsbMidiEventPacket)
|
|
||||||
{
|
|
||||||
midi::UsbMidiEventPacket packet;
|
|
||||||
EXPECT_EQ(packet.mData[0], 0);
|
|
||||||
EXPECT_EQ(packet.mData[1], 0);
|
|
||||||
EXPECT_EQ(packet.mData[2], 0);
|
|
||||||
EXPECT_EQ(packet.mData[3], 0);
|
|
||||||
EXPECT_EQ(packet.getCableNumber(), 0);
|
|
||||||
EXPECT_EQ(packet.getCodeIndexNumber(), 0);
|
|
||||||
|
|
||||||
packet.setHeader(12, 7);
|
|
||||||
EXPECT_EQ(packet.mData[0], 0xc7);
|
|
||||||
EXPECT_EQ(packet.getCableNumber(), 12);
|
|
||||||
EXPECT_EQ(packet.getCodeIndexNumber(), 7);
|
|
||||||
|
|
||||||
const byte midiData[3] = { 12, 42, 47 };
|
|
||||||
packet.setMidiData(midiData);
|
|
||||||
EXPECT_EQ(packet.mData[0], 0xc7);
|
|
||||||
EXPECT_EQ(packet.mData[1], 12);
|
|
||||||
EXPECT_EQ(packet.mData[2], 42);
|
|
||||||
EXPECT_EQ(packet.mData[3], 47);
|
|
||||||
|
|
||||||
const byte fullData[4] = { 12, 34, 56, 78 };
|
|
||||||
packet = fullData;
|
|
||||||
EXPECT_EQ(packet.mData[0], 12);
|
|
||||||
EXPECT_EQ(packet.mData[1], 34);
|
|
||||||
EXPECT_EQ(packet.mData[2], 56);
|
|
||||||
EXPECT_EQ(packet.mData[3], 78);
|
|
||||||
|
|
||||||
const byte* midiDataConst = packet.getMidiData();
|
|
||||||
EXPECT_EQ(midiDataConst[0], 34);
|
|
||||||
EXPECT_EQ(midiDataConst[1], 56);
|
|
||||||
EXPECT_EQ(midiDataConst[2], 78);
|
|
||||||
byte* midiDataMutable = packet.getMidiData();
|
|
||||||
EXPECT_EQ(midiDataMutable[0], 34);
|
|
||||||
EXPECT_EQ(midiDataMutable[1], 56);
|
|
||||||
EXPECT_EQ(midiDataMutable[2], 78);
|
|
||||||
}
|
|
||||||
|
|
||||||
END_UNNAMED_NAMESPACE
|
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
#include "unit-tests.h"
|
||||||
|
#include <src/midi_UsbDefs.h>
|
||||||
|
|
||||||
|
BEGIN_MIDI_NAMESPACE
|
||||||
|
|
||||||
|
END_MIDI_NAMESPACE
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BEGIN_UNNAMED_NAMESPACE
|
||||||
|
|
||||||
|
TEST(MidiUsbDefs, codeIndexNumberFromStatus)
|
||||||
|
{
|
||||||
|
typedef midi::CodeIndexNumbers CIN;
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::InvalidType), CIN::reserved);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::NoteOff), CIN::noteOff);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::NoteOn), CIN::noteOn);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::AfterTouchPoly), CIN::polyPressure);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::ControlChange), CIN::controlChange);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::ProgramChange), CIN::programChange);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::AfterTouchChannel), CIN::channelPressure);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::PitchBend), CIN::pitchBend);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::Clock), CIN::singleByte);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::Start), CIN::singleByte);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::Continue), CIN::singleByte);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::Stop), CIN::singleByte);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::ActiveSensing), CIN::singleByte);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::SystemReset), CIN::singleByte);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::SystemExclusive), CIN::sysExStart);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::TuneRequest), CIN::systemCommon1Byte);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::TimeCodeQuarterFrame), CIN::systemCommon2Bytes);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::SongSelect), CIN::systemCommon2Bytes);
|
||||||
|
EXPECT_EQ(CIN::fromStatus(midi::SongPosition), CIN::systemCommon3Bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MidiUsbDefs, codeIndexNumberSizes)
|
||||||
|
{
|
||||||
|
typedef midi::CodeIndexNumbers CIN;
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::reserved), 0);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::misc), 0);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::cableEvent), 0);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::systemCommon2Bytes), 2);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::systemCommon3Bytes), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::sysExStart), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::sysExContinue), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::systemCommon1Byte), 1);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::sysExEnds1Byte), 1);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::sysExEnds2Bytes), 2);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::sysExEnds3Bytes), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::noteOff), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::noteOn), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::polyPressure), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::controlChange), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::programChange), 2);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::channelPressure), 2);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::pitchBend), 3);
|
||||||
|
EXPECT_EQ(CIN::getSize(CIN::singleByte), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
END_UNNAMED_NAMESPACE
|
||||||
Loading…
Reference in New Issue