diff --git a/src/MIDI.h b/src/MIDI.h index 995202b..320e778 100644 --- a/src/MIDI.h +++ b/src/MIDI.h @@ -293,7 +293,6 @@ private: MidiMessage mMessage; unsigned long mLastMessageSentTime; unsigned long mLastMessageReceivedTime; - unsigned long mSenderActiveSensingPeriodicity; bool mReceiverActiveSensingActivated; int8_t mLastError; diff --git a/src/MIDI.hpp b/src/MIDI.hpp index d44c5da..7eeab89 100644 --- a/src/MIDI.hpp +++ b/src/MIDI.hpp @@ -42,11 +42,10 @@ inline MidiInterface::MidiInterface(Transport& in , mCurrentNrpnNumber(0xffff) , mLastMessageSentTime(0) , mLastMessageReceivedTime(0) - , mSenderActiveSensingPeriodicity(0) , mReceiverActiveSensingActivated(false) , mLastError(0) + , mSenderActiveSensingPeriodicity(Settings::SenderActiveSensingPeriodicity) { - mSenderActiveSensingPeriodicity = Settings::SenderActiveSensingPeriodicity; } /*! \brief Destructor for MidiInterface. @@ -765,7 +764,7 @@ inline bool MidiInterface::read(Channel inChannel // assume that the connection has been terminated. At // termination, the receiver will turn off all voices and return to // normal (non- active sensing) operation. - if (Settings::UseSenderActiveSensing && (mSenderActiveSensingPeriodicity > 0) && (Platform::now() - mLastMessageSentTime) > mSenderActiveSensingPeriodicity) + if (Settings::UseSenderActiveSensing && (Platform::now() - mLastMessageSentTime) > Settings::SenderActiveSensingPeriodicity) { sendActiveSensing(); mLastMessageSentTime = Platform::now(); @@ -1407,6 +1406,10 @@ template inline MidiInterface& MidiInterface::turnThruOff() { mThruFilterCallback = thruOff; + if (Settings::UseSenderActiveSensing) + { + mLastMessageSentTime = Platform::now(); + } return *this; } diff --git a/src/midi_Settings.h b/src/midi_Settings.h index 179b773..f142593 100644 --- a/src/midi_Settings.h +++ b/src/midi_Settings.h @@ -75,6 +75,7 @@ struct DefaultSettings /*! Global switch to turn on/off sender ActiveSensing Set to true to send ActiveSensing Set to false will not send ActiveSensing message (will also save memory) + as often as possible (1000 / SenderActiveSensingPeriodicity per second). */ static const bool UseSenderActiveSensing = false; @@ -95,10 +96,8 @@ struct DefaultSettings Typical value is 250 (ms) - an Active Sensing command is send every 250ms. (All Roland devices send Active Sensing every 250ms) - - Setting this field to 0 will disable sending MIDI active sensing. */ - static const uint16_t SenderActiveSensingPeriodicity = 0; + static const uint16_t SenderActiveSensingPeriodicity = 250; }; END_MIDI_NAMESPACE diff --git a/src/serialMIDI.h b/src/serialMIDI.h index f783439..2bb673e 100644 --- a/src/serialMIDI.h +++ b/src/serialMIDI.h @@ -124,13 +124,11 @@ END_MIDI_NAMESPACE #endif /*! \brief Create an instance of the library attached to a serial port with - custom settings. + custom MIDI settings (not to be confused with modified Serial Settings, like BaudRate) @see DefaultSettings @see MIDI_CREATE_INSTANCE */ -#define MIDI_CREATE_CUSTOM_INSTANCE(Type, SerialPort, Name, Settings) \ - using Name##SerialTransport = MIDI_NAMESPACE::SerialMIDI; \ - using Name##Interface = MIDI_NAMESPACE::MidiInterface; \ - using Name##Message = Name##Interface::MidiMessage; \ - Name##SerialTransport serial##Name(SerialPort); \ - Name##Interface Name((Name##SerialTransport&)serial##Name); +#define MIDI_CREATE_CUSTOM_INSTANCE(Type, SerialPort, Name, Settings) \ + MIDI_NAMESPACE::SerialMIDI serial##Name(SerialPort);\ + MIDI_NAMESPACE::MidiInterface, Settings> Name((MIDI_NAMESPACE::SerialMIDI&)serial##Name); +