diff --git a/res/Examples/MIDI_LibValidator/MIDI_LibValidator.ino b/res/Examples/MIDI_LibValidator/MIDI_LibValidator.ino index 9d3cfd9..99821c2 100644 --- a/res/Examples/MIDI_LibValidator/MIDI_LibValidator.ino +++ b/res/Examples/MIDI_LibValidator/MIDI_LibValidator.ino @@ -3,175 +3,26 @@ #include #include +#include "midi_ValidatorSerialDebug.h" #include "midi_ValidatorLCD.h" #include "midi_ValidatorLEDs.h" - -// ----------------------------------------------------------------------------- - -#define NUM_TESTS 1 - -// ----------------------------------------------------------------------------- - -SoftwareSerial softSerial(2, 3); - -MIDI_CREATE_INSTANCE(HardwareSerial, Serial, midiHW); -MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, midiSW); -// \todo Create instance for USB if available - - -// ----------------------------------------------------------------------------- -/* -BEGIN_MIDI_NAMESPACE - -template -class TestFixture -{ -public: - typedef const char* String; - typedef bool (*Functor) (MidiInterface&); - -public: - TestFixture(String inTestName, - Functor inFunctor) - : mTestName(inTestName) - , mFunctor(inFunctor) - { - } - -public: - inline bool operator() (void) - { - return mFunctor(); - } - - inline String getName() const - { - return mTestName; - } - -private: - String mTestName; - Functor mFunctor; -}; - -// ----------------------------------------------------------------------------- - -template -class MidiTester -{ -public: - explicit MidiTester(MidiInterface& inInstance) - : mInstance(inInstance) - { - } - - virtual ~MidiTester() - { - } - -public: - inline bool performTestFixture(TestFixture* inFixture) - { - if (inFixture != 0) - { - return (*inFixture)(); - } - return false; - } - - inline bool expect(bool inCondition) const - { - if (inCondition == false) - blinkFail(); - else - blinkPass(); - return inCondition; - } - -public: - inline void registerTest(TestFixture* inFixture) - { - mTests[mNumActiveTests++] = inFixture; - } - - bool runTests() - { - for (unsigned i = 0; i < mNumActiveTests; ++i) - { - if (mTests[i] != 0) - { - if (expect(performTestFixture(mTests[i]) == false)) - { - // \todo Display message - // \todo Store error number and continue. - return false; - } - } - setProgressBar(i, mNumActiveTests); - } - return true; - } - -private: - MidiInterface& mInstance; - TestFixture* mTests[NUM_TESTS]; - unsigned mNumActiveTests; -}; - -// ----------------------------------------------------------------------------- - -template -bool testNoteOn(midi::MidiInterface& inMidi) -{ - inMidi.sendNoteOn(12, 42); - return true; -} - -// ----------------------------------------------------------------------------- - -END_MIDI_NAMESPACE - -midi::MidiTester testerHW(midiHW); -midi::MidiTester testerSW(midiSW); -*/ -// ----------------------------------------------------------------------------- - -template -void setupMidiInstance(midi::MidiInterface& inInstance) -{ - inInstance.begin(MIDI_CHANNEL_OMNI); - inInstance.turnThruOff(); -} - -/* -template -void setupTester(midi::MidiTester& inTester) -{ - inTester.registerTest(new midi::TestFixture("Note On", midi::testNoteOn)); -} - -void setupTesters() -{ - setupTester(testerHW); - setupTester(testerSW); -} -*/ +#include "midi_ValidatorInstances.h" +#include "midi_ValidatorTester.h" // ----------------------------------------------------------------------------- void setup() { - setupMidiInstance(midiHW); - setupMidiInstance(midiSW); + setupSerialDebug(); setupLCD(); setupLEDs(); - //setupTesters(); + setupMidiInstances(); + setupTesters(); } // ----------------------------------------------------------------------------- void loop() { - //testerHW.runTests(); - //testerSW.runTests(); + launchTests(); } diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.h b/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.h new file mode 100644 index 0000000..21a2bb9 --- /dev/null +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.h @@ -0,0 +1,10 @@ + +#pragma once + +#include +#include + +extern midi::MidiInterface midiHW; +extern midi::MidiInterface midiSW; + +void setupMidiInstances(); diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.ino b/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.ino new file mode 100644 index 0000000..565f771 --- /dev/null +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.ino @@ -0,0 +1,34 @@ + +#include "midi_ValidatorInstances.h" + +// ----------------------------------------------------------------------------- + +SoftwareSerial softSerial(2, 3); + +#if defined(__AVR_ATmega32U4__) // Leonardo uses Serial1 as hardware serial. + MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, midiHW); + MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, midiSW); +#else + MIDI_CREATE_INSTANCE(HardwareSerial, Serial, midiHW); + MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, midiSW); +#endif + +// \todo Create instance for USB if available + +// ----------------------------------------------------------------------------- + +template +void setupMidiInstance(MIDI_CLASS(SerialClass)& inInstance) +{ + inInstance.begin(MIDI_CHANNEL_OMNI); + inInstance.turnThruOff(); +} + +// ----------------------------------------------------------------------------- + +void setupMidiInstances() +{ + setupMidiInstance(midiHW); + setupMidiInstance(midiSW); +} + diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.h b/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.h new file mode 100644 index 0000000..717923a --- /dev/null +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.h @@ -0,0 +1,5 @@ +#pragma once + +void setupSerialDebug(); + +void print(const char* inString); diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.ino b/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.ino new file mode 100644 index 0000000..f2eb443 --- /dev/null +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.ino @@ -0,0 +1,12 @@ +#include "midi_ValidatorSerialDebug.h" + +void setupSerialDebug() +{ + Serial.begin(38400); +} + +void print(const char* inString) +{ + Serial.println(inString); +} + diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorTester.h b/res/Examples/MIDI_LibValidator/midi_ValidatorTester.h new file mode 100644 index 0000000..300f7c1 --- /dev/null +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorTester.h @@ -0,0 +1,4 @@ +#pragma once + +void setupTesters(); +void launchTests(); diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorTester.ino b/res/Examples/MIDI_LibValidator/midi_ValidatorTester.ino new file mode 100644 index 0000000..64e0b0f --- /dev/null +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorTester.ino @@ -0,0 +1,140 @@ + +#include "midi_ValidatorTester.h" +#include "midi_ValidatorInstances.h" +/* +// ----------------------------------------------------------------------------- + +BEGIN_MIDI_NAMESPACE + +template +class TestFixture +{ +public: + typedef const char* String; + typedef bool (*Functor) (MidiInterface&); + +public: + TestFixture(String inTestName, + Functor inFunctor) + : mTestName(inTestName) + , mFunctor(inFunctor) + { + } + +public: + inline bool operator() (void) + { + return mFunctor(); + } + + inline String getName() const + { + return mTestName; + } + +private: + String mTestName; + Functor mFunctor; +}; + +// ----------------------------------------------------------------------------- + +template +class MidiTester +{ +public: + explicit MidiTester(MidiInterface& inInstance) + : mInstance(inInstance) + { + } + + virtual ~MidiTester() + { + } + +public: + inline bool performTestFixture(TestFixture* inFixture) + { + if (inFixture != 0) + { + return (*inFixture)(); + } + return false; + } + + inline bool expect(bool inCondition) const + { + if (inCondition == false) + blinkFail(); + else + blinkPass(); + return inCondition; + } + +public: + inline void registerTest(TestFixture* inFixture) + { + mTests[mNumActiveTests++] = inFixture; + } + + bool runTests() + { + for (unsigned i = 0; i < mNumActiveTests; ++i) + { + if (mTests[i] != 0) + { + if (expect(performTestFixture(mTests[i]) == false)) + { + // \todo Display message + // \todo Store error number and continue. + return false; + } + } + setProgressBar(i, mNumActiveTests); + } + return true; + } + +private: + MidiInterface& mInstance; + TestFixture* mTests[NUM_TESTS]; + unsigned mNumActiveTests; +}; + +// ----------------------------------------------------------------------------- + +template +bool testNoteOn(MIDI_CLASS(SerialClass)& inMidi) +{ + inMidi.sendNoteOn(12, 42); + return true; +} + +// ----------------------------------------------------------------------------- + +END_MIDI_NAMESPACE + +midi::MidiTester testerHW(midiHW); +midi::MidiTester testerSW(midiSW); + +// ----------------------------------------------------------------------------- + +template +void setupTester(MIDI_CLASS(SerialClass)& inTester) +{ + inTester.registerTest(new midi::TestFixture("Note On", midi::testNoteOn)); +} + +// ----------------------------------------------------------------------------- +*/ +void setupTesters() +{ + //setupTester(testerHW); + //setupTester(testerSW); +} + +void launchTests() +{ + //testerHW.runTests(); + //testerSW.runTests(); +}