Using new definitions for Thru.

This commit is contained in:
Francois Best 2016-10-27 08:11:29 +02:00
parent 6abbdd7963
commit f1f0ef41ce
3 changed files with 34 additions and 40 deletions

View File

@ -205,12 +205,12 @@ private:
// MIDI Soft Thru // MIDI Soft Thru
public: public:
inline MidiFilterMode getFilterMode() const; inline Thru::Mode getFilterMode() const;
inline bool getThruState() const; inline bool getThruState() const;
inline void turnThruOn(MidiFilterMode inThruFilterMode = Full); inline void turnThruOn(Thru::Mode inThruFilterMode = Thru::Full);
inline void turnThruOff(); inline void turnThruOff();
inline void setThruFilterMode(MidiFilterMode inThruFilterMode); inline void setThruFilterMode(Thru::Mode inThruFilterMode);
private: private:
void thruFilter(byte inChannel); void thruFilter(byte inChannel);
@ -237,7 +237,7 @@ private:
unsigned mCurrentRpnNumber; unsigned mCurrentRpnNumber;
unsigned mCurrentNrpnNumber; unsigned mCurrentNrpnNumber;
bool mThruActivated : 1; bool mThruActivated : 1;
MidiFilterMode mThruFilterMode : 7; Thru::Mode mThruFilterMode : 7;
MidiMessage mMessage; MidiMessage mMessage;

View File

@ -42,7 +42,7 @@ inline MidiInterface<SerialPort, Settings>::MidiInterface(SerialPort& inSerial)
, mCurrentRpnNumber(0xffff) , mCurrentRpnNumber(0xffff)
, mCurrentNrpnNumber(0xffff) , mCurrentNrpnNumber(0xffff)
, mThruActivated(true) , mThruActivated(true)
, mThruFilterMode(Full) , mThruFilterMode(Thru::Full)
{ {
mNoteOffCallback = 0; mNoteOffCallback = 0;
mNoteOnCallback = 0; mNoteOnCallback = 0;
@ -107,7 +107,7 @@ void MidiInterface<SerialPort, Settings>::begin(Channel inChannel)
mMessage.data1 = 0; mMessage.data1 = 0;
mMessage.data2 = 0; mMessage.data2 = 0;
mThruFilterMode = Full; mThruFilterMode = Thru::Full;
mThruActivated = true; mThruActivated = true;
} }
@ -1250,20 +1250,20 @@ void MidiInterface<SerialPort, Settings>::launchCallback()
/*! \brief Set the filter for thru mirroring /*! \brief Set the filter for thru mirroring
\param inThruFilterMode a filter mode \param inThruFilterMode a filter mode
@see MidiFilterMode @see Thru::Mode
*/ */
template<class SerialPort, class Settings> template<class SerialPort, class Settings>
void MidiInterface<SerialPort, Settings>::setThruFilterMode(MidiFilterMode inThruFilterMode) void MidiInterface<SerialPort, Settings>::setThruFilterMode(Thru::Mode inThruFilterMode)
{ {
mThruFilterMode = inThruFilterMode; mThruFilterMode = inThruFilterMode;
if (mThruFilterMode != Off) if (mThruFilterMode != Thru::Off)
mThruActivated = true; mThruActivated = true;
else else
mThruActivated = false; mThruActivated = false;
} }
template<class SerialPort, class Settings> template<class SerialPort, class Settings>
MidiFilterMode MidiInterface<SerialPort, Settings>::getFilterMode() const Thru::Mode MidiInterface<SerialPort, Settings>::getFilterMode() const
{ {
return mThruFilterMode; return mThruFilterMode;
} }
@ -1275,7 +1275,7 @@ bool MidiInterface<SerialPort, Settings>::getThruState() const
} }
template<class SerialPort, class Settings> template<class SerialPort, class Settings>
void MidiInterface<SerialPort, Settings>::turnThruOn(MidiFilterMode inThruFilterMode) void MidiInterface<SerialPort, Settings>::turnThruOn(Thru::Mode inThruFilterMode)
{ {
mThruActivated = true; mThruActivated = true;
mThruFilterMode = inThruFilterMode; mThruFilterMode = inThruFilterMode;
@ -1285,7 +1285,7 @@ template<class SerialPort, class Settings>
void MidiInterface<SerialPort, Settings>::turnThruOff() void MidiInterface<SerialPort, Settings>::turnThruOff()
{ {
mThruActivated = false; mThruActivated = false;
mThruFilterMode = Off; mThruFilterMode = Thru::Off;
} }
/*! @} */ // End of doc group MIDI Thru /*! @} */ // End of doc group MIDI Thru
@ -1300,7 +1300,7 @@ template<class SerialPort, class Settings>
void MidiInterface<SerialPort, Settings>::thruFilter(Channel inChannel) void MidiInterface<SerialPort, Settings>::thruFilter(Channel inChannel)
{ {
// If the feature is disabled, don't do anything. // If the feature is disabled, don't do anything.
if (!mThruActivated || (mThruFilterMode == Off)) if (!mThruActivated || (mThruFilterMode == Thru::Off))
return; return;
// First, check if the received message is Channel // First, check if the received message is Channel
@ -1312,14 +1312,14 @@ void MidiInterface<SerialPort, Settings>::thruFilter(Channel inChannel)
// Now let's pass it to the output // Now let's pass it to the output
switch (mThruFilterMode) switch (mThruFilterMode)
{ {
case Full: case Thru::Full:
send(mMessage.type, send(mMessage.type,
mMessage.data1, mMessage.data1,
mMessage.data2, mMessage.data2,
mMessage.channel); mMessage.channel);
break; break;
case SameChannel: case Thru::SameChannel:
if (filter_condition) if (filter_condition)
{ {
send(mMessage.type, send(mMessage.type,
@ -1329,7 +1329,7 @@ void MidiInterface<SerialPort, Settings>::thruFilter(Channel inChannel)
} }
break; break;
case DifferentChannel: case Thru::DifferentChannel:
if (!filter_condition) if (!filter_condition)
{ {
send(mMessage.type, send(mMessage.type,
@ -1339,12 +1339,6 @@ void MidiInterface<SerialPort, Settings>::thruFilter(Channel inChannel)
} }
break; break;
case Off:
// Do nothing.
// Technically it's impossible to get there because
// the case was already tested earlier.
break;
default: default:
break; break;
} }

View File

@ -30,10 +30,10 @@ TEST(MidiThru, defaultValues)
MidiInterface midi(serial); MidiInterface midi(serial);
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::Full); EXPECT_EQ(midi.getFilterMode(), midi::Thru::Full);
midi.begin(); // Should not change the state midi.begin(); // Should not change the state
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::Full); EXPECT_EQ(midi.getFilterMode(), midi::Thru::Full);
} }
TEST(MidiThru, beginEnablesThru) TEST(MidiThru, beginEnablesThru)
@ -43,10 +43,10 @@ TEST(MidiThru, beginEnablesThru)
midi.turnThruOff(); midi.turnThruOff();
EXPECT_EQ(midi.getThruState(), false); EXPECT_EQ(midi.getThruState(), false);
EXPECT_EQ(midi.getFilterMode(), midi::Off); EXPECT_EQ(midi.getFilterMode(), midi::Thru::Off);
midi.begin(); midi.begin();
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::Full); EXPECT_EQ(midi.getFilterMode(), midi::Thru::Full);
} }
TEST(MidiThru, setGet) TEST(MidiThru, setGet)
@ -56,30 +56,30 @@ TEST(MidiThru, setGet)
midi.turnThruOff(); midi.turnThruOff();
EXPECT_EQ(midi.getThruState(), false); EXPECT_EQ(midi.getThruState(), false);
EXPECT_EQ(midi.getFilterMode(), midi::Off); EXPECT_EQ(midi.getFilterMode(), midi::Thru::Off);
midi.turnThruOn(); midi.turnThruOn();
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::Full); EXPECT_EQ(midi.getFilterMode(), midi::Thru::Full);
midi.turnThruOn(midi::SameChannel); midi.turnThruOn(midi::Thru::SameChannel);
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::SameChannel); EXPECT_EQ(midi.getFilterMode(), midi::Thru::SameChannel);
midi.turnThruOn(midi::DifferentChannel); midi.turnThruOn(midi::Thru::DifferentChannel);
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::DifferentChannel); EXPECT_EQ(midi.getFilterMode(), midi::Thru::DifferentChannel);
midi.setThruFilterMode(midi::Full); midi.setThruFilterMode(midi::Thru::Full);
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::Full); EXPECT_EQ(midi.getFilterMode(), midi::Thru::Full);
midi.setThruFilterMode(midi::SameChannel); midi.setThruFilterMode(midi::Thru::SameChannel);
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::SameChannel); EXPECT_EQ(midi.getFilterMode(), midi::Thru::SameChannel);
midi.setThruFilterMode(midi::DifferentChannel); midi.setThruFilterMode(midi::Thru::DifferentChannel);
EXPECT_EQ(midi.getThruState(), true); EXPECT_EQ(midi.getThruState(), true);
EXPECT_EQ(midi.getFilterMode(), midi::DifferentChannel); EXPECT_EQ(midi.getFilterMode(), midi::Thru::DifferentChannel);
midi.setThruFilterMode(midi::Off); midi.setThruFilterMode(midi::Thru::Off);
EXPECT_EQ(midi.getThruState(), false); EXPECT_EQ(midi.getThruState(), false);
EXPECT_EQ(midi.getFilterMode(), midi::Off); EXPECT_EQ(midi.getFilterMode(), midi::Thru::Off);
} }
END_UNNAMED_NAMESPACE END_UNNAMED_NAMESPACE