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,
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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