Skip to content

Commit

Permalink
Cleanup MIDI_Sender
Browse files Browse the repository at this point in the history
  • Loading branch information
tttapa committed Jun 28, 2021
1 parent e81874d commit bf8fb66
Show file tree
Hide file tree
Showing 19 changed files with 380 additions and 144 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,9 @@ struct MyMIDI_Callbacks : FineGrainedMIDI_Callbacks<MyMIDI_Callbacks> {
void onActiveSensing(Cable cable) {
Serial << "Active Sensing: " << cable << endl;
}
void onReset(Cable cable) { Serial << "Reset: " << cable << endl; }
void onSystemReset(Cable cable) {
Serial << "System Reset: " << cable << endl;
}

} callback;

Expand Down
44 changes: 39 additions & 5 deletions keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -860,19 +860,35 @@ USBDebugMIDI_Interface KEYWORD1
SoftwareSerialDebugMIDI_Interface KEYWORD1
HairlessMIDI_Interface KEYWORD1
MIDI_Callbacks KEYWORD1
FineGrainedMIDI_Callbacks KEYWORD1
SysExMessage KEYWORD1
FortySevenEffectsMIDI_Interface KEYWORD1

begin KEYWORD2
update KEYWORD2
send KEYWORD2
sendChannelMessage KEYWORD2
sendNoteOn KEYWORD2
sendNoteOff KEYWORD2
sendKP KEYWORD2
sendCC KEYWORD2
sendPC KEYWORD2
sendCP KEYWORD2
sendPB KEYWORD2
sendKeyPressure KEYWORD2
sendControlChange KEYWORD2
sendProgramChange KEYWORD2
sendChannelPressure KEYWORD2
sendPitchBend KEYWORD2
sendSysCommon KEYWORD2
sendMTCQuarterFrame KEYWORD2
sendSongPositionPointer KEYWORD2
sendSongSelect KEYWORD2
sendTuneRequest KEYWORD2
sendSysEx KEYWORD2
sendRealTime KEYWORD2
sendTimingClock KEYWORD2
sendStart KEYWORD2
sendContinue KEYWORD2
sendStop KEYWORD2
sendActiveSensing KEYWORD2
sendSystemReset KEYWORD2
sendNow KEYWORD2
getDefault KEYWORD2
setAsDefault KEYWORD2
setCallbacks KEYWORD2
Expand All @@ -882,6 +898,24 @@ getSysExMessage KEYWORD2
onChannelMessage KEYWORD2
onSysExMessage KEYWORD2
onRealTimeMessage KEYWORD2
onNoteOff KEYWORD2
onNoteOn KEYWORD2
onKeyPressure KEYWORD2
onControlChange KEYWORD2
onProgramChange KEYWORD2
onChannelPressure KEYWORD2
onPitchBend KEYWORD2
onSystemExclusive KEYWORD2
onTimeCodeQuarterFrame KEYWORD2
onSongPosition KEYWORD2
onSongSelect KEYWORD2
onTuneRequest KEYWORD2
onClock KEYWORD2
onStart KEYWORD2
onContinue KEYWORD2
onStop KEYWORD2
onActiveSensing KEYWORD2
onSystemReset KEYWORD2

MIDIChannelCable KEYWORD1
MIDIAddress KEYWORD1
2 changes: 1 addition & 1 deletion src/Control_Surface/Control_Surface_Class.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ void Control_Surface_::sinkMIDIfromPipe(ChannelMessage midimsg) {
case MIDIMessageType::STOP: break;
case MIDIMessageType::UNDEFINED_REALTIME_2: break;
case MIDIMessageType::ACTIVE_SENSING: break;
case MIDIMessageType::RESET: break;
case MIDIMessageType::SYSTEM_RESET: break;
default:
break;
// LCOV_EXCL_STOP
Expand Down
12 changes: 6 additions & 6 deletions src/MIDI_Interfaces/MIDI_Callbacks.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class FineGrainedMIDI_Callbacks : public MIDI_Callbacks {
void onContinue(Cable cable);
void onStop(Cable cable);
void onActiveSensing(Cable cable);
void onReset(Cable cable);
void onSystemReset(Cable cable);
// clang-format on
/// @}

Expand Down Expand Up @@ -105,7 +105,7 @@ class FineGrainedMIDI_Callbacks : public MIDI_Callbacks {
case MMT::STOP:
case MMT::UNDEFINED_REALTIME_2:
case MMT::ACTIVE_SENSING:
case MMT::RESET:
case MMT::SYSTEM_RESET:
default: break;
}
}
Expand Down Expand Up @@ -150,7 +150,7 @@ class FineGrainedMIDI_Callbacks : public MIDI_Callbacks {
case MMT::STOP:
case MMT::UNDEFINED_REALTIME_2:
case MMT::ACTIVE_SENSING:
case MMT::RESET:
case MMT::SYSTEM_RESET:
default: break;
}
}
Expand Down Expand Up @@ -185,7 +185,7 @@ class FineGrainedMIDI_Callbacks : public MIDI_Callbacks {
case MMT::ACTIVE_SENSING:
CRTP(Derived).onActiveSensing(msg.getCable());
break;
case MMT::RESET: CRTP(Derived).onReset(msg.getCable()); break;
case MMT::SYSTEM_RESET: CRTP(Derived).onSystemReset(msg.getCable()); break;
default: break;
}
}
Expand Down Expand Up @@ -223,7 +223,7 @@ class FineGrainedMIDI_Callbacks : public MIDI_Callbacks {
static_assert(same_return_type_and_arguments(&Derived::onContinue, &FineGrainedMIDI_Callbacks::onContinue), "Incorrect signature for onContinue");
static_assert(same_return_type_and_arguments(&Derived::onStop, &FineGrainedMIDI_Callbacks::onStop), "Incorrect signature for onStop");
static_assert(same_return_type_and_arguments(&Derived::onActiveSensing, &FineGrainedMIDI_Callbacks::onActiveSensing), "Incorrect signature for onActiveSensing");
static_assert(same_return_type_and_arguments(&Derived::onReset, &FineGrainedMIDI_Callbacks::onReset), "Incorrect signature for onReset");
static_assert(same_return_type_and_arguments(&Derived::onSystemReset, &FineGrainedMIDI_Callbacks::onSystemReset), "Incorrect signature for onSystemReset");
// clang-format on
}

Expand All @@ -248,7 +248,7 @@ template <class Derived> inline void FineGrainedMIDI_Callbacks<Derived>::onStart
template <class Derived> inline void FineGrainedMIDI_Callbacks<Derived>::onContinue(Cable) {}
template <class Derived> inline void FineGrainedMIDI_Callbacks<Derived>::onStop(Cable) {}
template <class Derived> inline void FineGrainedMIDI_Callbacks<Derived>::onActiveSensing(Cable) {}
template <class Derived> inline void FineGrainedMIDI_Callbacks<Derived>::onReset(Cable) {}
template <class Derived> inline void FineGrainedMIDI_Callbacks<Derived>::onSystemReset(Cable) {}
// clang-format on

END_CS_NAMESPACE
123 changes: 105 additions & 18 deletions src/MIDI_Interfaces/MIDI_Sender.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,14 @@ BEGIN_CS_NAMESPACE
template <class Derived>
class MIDI_Sender {
public:
/// @name Sending MIDI
/// @name Sending MIDI Channel Voice messages
/// @{

/// Send a MIDI %Channel Voice message.
void send(ChannelMessage message);

/**
* @brief Send a 3-byte MIDI Channel Voice message.
* @brief Send a 3-byte MIDI %Channel Voice message.
*
* @param m
* MIDI message type. [0x80, 0xE0]
Expand All @@ -25,13 +28,13 @@ class MIDI_Sender {
* @param d2
* The second data byte. [0, 127]
* @param cable
* The MIDI Cable Number. [1, 16]
* The MIDI Cable Number. [CABLE_1, CABLE_16]
*/
void send(MIDIMessageType m, Channel c, uint8_t d1, uint8_t d2,
Cable cable = CABLE_1);
void sendChannelMessage(MIDIMessageType m, Channel c, uint8_t d1,
uint8_t d2, Cable cable = CABLE_1);

/**
* @brief Send a 2-byte MIDI Channel Voice message.
* @brief Send a 2-byte MIDI %Channel Voice message.
*
* @param m
* MIDI message type. [0x80, 0xE0]
Expand All @@ -42,49 +45,133 @@ class MIDI_Sender {
* @param cable
* The MIDI Cable Number. [1, 16]
*/
void send(MIDIMessageType m, Channel c, uint8_t d1, Cable cable = CABLE_1);
void sendChannelMessage(MIDIMessageType m, Channel c, uint8_t d1,
Cable cable = CABLE_1);

/// Send a MIDI Note On event.
void sendNoteOn(MIDIAddress address, uint8_t velocity);
/// Send a MIDI Note Off event.
void sendNoteOff(MIDIAddress address, uint8_t velocity);
/// Send a MIDI Key Pressure event.
void sendKP(MIDIAddress address, uint8_t pressure);
void sendKeyPressure(MIDIAddress address, uint8_t pressure);
/// Send a MIDI Control Change event.
void sendCC(MIDIAddress address, uint8_t value);
void sendControlChange(MIDIAddress address, uint8_t value);
/// Send a MIDI Program Change event.
void sendPC(MIDIAddress address);
void sendProgramChange(MIDIAddress address);
/// Send a MIDI Program Change event.
void sendPC(MIDIChannelCable address, uint8_t value);
/// Send a MIDI Channel Pressure event.
void sendCP(MIDIChannelCable address, uint8_t pressure);
void sendProgramChange(MIDIChannelCable address, uint8_t value);
/// Send a MIDI %Channel Pressure event.
void sendChannelPressure(MIDIChannelCable address, uint8_t pressure);
/// Send a MIDI Pitch Bend event.
void sendPB(MIDIChannelCable address, uint16_t value);
/// Send a MIDI Channel Voice message.
void send(ChannelMessage message);
void sendPitchBend(MIDIChannelCable address, uint16_t value);

/// @}

/// @name Sending MIDI System Common messages
/// @{

/// Send a MIDI System Common message.
void send(SysCommonMessage message);
/// Send a MIDI System Common message.
void sendSysCommon(MIDIMessageType m, Cable cable = CABLE_1);
/// Send a MIDI System Common message.
void sendSysCommon(MIDIMessageType m, uint8_t data1, Cable cable = CABLE_1);
/// Send a MIDI System Common message.
void sendSysCommon(MIDIMessageType m, uint8_t data1, uint8_t data2,
Cable cable = CABLE_1);

/// Send a MIDI Time Code Quarter Frame.
void sendMTCQuarterFrame(uint8_t data, Cable cable = CABLE_1);
/// Send a MIDI Time Code Quarter Frame.
void sendMTCQuarterFrame(uint8_t messageType, uint8_t values,
Cable cable = CABLE_1);
/// Send a MIDI Song Position Pointer message.
void sendSongPositionPointer(uint16_t spp, Cable cable = CABLE_1);
/// Send a MIDI Song Select message.
void sendSongSelect(uint8_t song, Cable cable = CABLE_1);
/// Send a MIDI Tune Request.
void sendTuneRequest(Cable cable = CABLE_1);

/// @}

/// @name Sending MIDI System Exclusive messages
/// @{

/// Send a MIDI System Exclusive message.
void send(SysExMessage message);
/// Send a MIDI System Exclusive message.
template <uint16_t N>
void sendSysEx(const uint8_t (&sysexdata)[N], Cable cable = CABLE_1);
/// Send a MIDI System Exclusive message.
void sendSysEx(const uint8_t *data, uint16_t length, Cable cable = CABLE_1);

/// @}

/// @name Sending MIDI Real-Time messages
/// @{

/// Send a MIDI Real-Time message.
void send(RealTimeMessage message);
/// Send a MIDI Real-Time message.
void sendRealTime(MIDIMessageType rt, Cable cable = CABLE_1);
/// Send a MIDI Real-Time message.
void sendRealTime(uint8_t rt, Cable cable = CABLE_1);

/// Send a MIDI Timing Clock message.
void sendTimingClock(Cable cable = CABLE_1);
/// Send a MIDI Start message.
void sendStart(Cable cable = CABLE_1);
/// Send a MIDI Continue message.
void sendContinue(Cable cable = CABLE_1);
/// Send a MIDI Stop message.
void sendStop(Cable cable = CABLE_1);
/// Send a MIDI Active Sensing message.
void sendActiveSensing(Cable cable = CABLE_1);
/// Send a MIDI System Reset message.
void sendSystemReset(Cable cable = CABLE_1);

/// @}

/// @name Flusing the MIDI send buffer
/// @{

/// Causes all buffered messages to be sent immediately.
/// @note Doesn't necessarily wait until all data has been sent, it just
/// triggers the transmission, so everything will be transmitted as
/// @note Doesn't necessarily wait until all data has been sent, it just
/// triggers the transmission, so everything will be transmitted as
/// soon as possible.
void sendNow();

/// @}

/// @name Deprecated
/// @{

/// Send a MIDI Key Pressure event.
/// @deprecated Use @ref sendKeyPressure(MIDIAddress,uint8_t) instead
[[deprecated("Use sendKeyPressure() instead")]] void
sendKP(MIDIAddress address, uint8_t pressure);
/// Send a MIDI Control Change event.
/// @deprecated Use @ref sendControlChange(MIDIAddress,uint8_t) instead
[[deprecated("Use sendControlChange() instead")]] void
sendCC(MIDIAddress address, uint8_t value);
/// Send a MIDI Program Change event.
/// @deprecated Use @ref sendProgramChange(MIDIAddress) instead
[[deprecated("Use sendProgramChange() instead")]] void
sendPC(MIDIAddress address);
/// Send a MIDI Program Change event.
/// @deprecated Use @ref sendProgramChange(MIDIChannelCable,uint8_t) instead
[[deprecated("Use sendProgramChange() instead")]] void
sendPC(MIDIChannelCable address, uint8_t value);
/// Send a MIDI %Channel Pressure event.
/// @deprecated Use @ref sendChannelPressure(MIDIChannelCable,uint8_t) instead
[[deprecated("Use sendChannelPressure() instead")]] void
sendCP(MIDIChannelCable address, uint8_t pressure);
/// Send a MIDI Pitch Bend event.
/// @deprecated Use @ref sendPitchBend(MIDIChannelCable,uint16_t) instead
[[deprecated("Use sendPitchBend() instead")]] void
sendPB(MIDIChannelCable address, uint16_t value);

/// @}
};

END_CS_NAMESPACE
Expand Down
Loading

0 comments on commit bf8fb66

Please sign in to comment.