#include "MIDI_Sender.hpp" #include BEGIN_CS_NAMESPACE template void MIDI_Sender::sendChannelMessage(MIDIMessageType m, Channel c, uint8_t d1, uint8_t d2, Cable cable) { send(ChannelMessage(m, c, d1, d2, cable)); } template void MIDI_Sender::sendChannelMessage(MIDIMessageType m, Channel c, uint8_t d1, Cable cable) { send(ChannelMessage(m, c, d1, 0, cable)); } template void MIDI_Sender::sendNoteOn(MIDIAddress address, uint8_t velocity) { if (address) CRTP(Derived).sendChannelMessageImpl({ MIDIMessageType::NoteOn, address.getChannel(), address.getAddress(), uint8_t(velocity & 0x7F), address.getCableNumber(), }); } template void MIDI_Sender::sendNoteOff(MIDIAddress address, uint8_t velocity) { if (address) CRTP(Derived).sendChannelMessageImpl({ MIDIMessageType::NoteOff, address.getChannel(), address.getAddress(), uint8_t(velocity & 0x7F), address.getCableNumber(), }); } template void MIDI_Sender::sendKeyPressure(MIDIAddress address, uint8_t pressure) { if (address) CRTP(Derived).sendChannelMessageImpl({ MIDIMessageType::KeyPressure, address.getChannel(), address.getAddress(), uint8_t(pressure & 0x7F), address.getCableNumber(), }); } template void MIDI_Sender::sendControlChange(MIDIAddress address, uint8_t value) { if (address) CRTP(Derived).sendChannelMessageImpl({ MIDIMessageType::ControlChange, address.getChannel(), address.getAddress(), uint8_t(value & 0x7F), address.getCableNumber(), }); } template void MIDI_Sender::sendProgramChange(MIDIChannelCable address, uint8_t value) { if (address) CRTP(Derived).sendChannelMessageImpl({ MIDIMessageType::ProgramChange, address.getChannel(), uint8_t(value & 0x7F), uint8_t(0x00), address.getCableNumber(), }); } template void MIDI_Sender::sendProgramChange(MIDIAddress address) { if (address) CRTP(Derived).sendChannelMessageImpl({ MIDIMessageType::ProgramChange, address.getChannel(), address.getAddress(), uint8_t(0x00), address.getCableNumber(), }); } template void MIDI_Sender::sendChannelPressure(MIDIChannelCable address, uint8_t pressure) { if (address) CRTP(Derived).sendChannelMessageImpl({ MIDIMessageType::ChannelPressure, address.getChannel(), uint8_t(pressure & 0x7F), uint8_t(0x00), address.getCableNumber(), }); } template void MIDI_Sender::sendPitchBend(MIDIChannelCable address, uint16_t value) { if (address) CRTP(Derived).sendChannelMessageImpl({ MIDIMessageType::PitchBend, address.getChannel(), uint8_t((value >> 0) & 0x7F), uint8_t((value >> 7) & 0x7F), address.getCableNumber(), }); } template void MIDI_Sender::send(SysExMessage message) { if (message.length > 0) CRTP(Derived).sendSysExImpl(message); } template void MIDI_Sender::send(RealTimeMessage message) { if (message.isValid()) CRTP(Derived).sendRealTimeImpl(message); } template void MIDI_Sender::send(ChannelMessage message) { if (message.hasValidChannelMessageHeader()) { message.sanitize(); CRTP(Derived).sendChannelMessageImpl(message); } } template void MIDI_Sender::send(SysCommonMessage message) { if (message.hasValidSystemCommonHeader()) { message.sanitize(); CRTP(Derived).sendSysCommonImpl(message); } } template template void MIDI_Sender::sendSysEx(const uint8_t (&sysexdata)[N], Cable cable) { send(SysExMessage(sysexdata, N, cable)); } template void MIDI_Sender::sendSysEx(const uint8_t *data, uint16_t length, Cable cable) { send(SysExMessage(data, length, cable)); } template void MIDI_Sender::sendSysCommon(MIDIMessageType m, Cable cable) { send(SysCommonMessage(m, cable)); } template void MIDI_Sender::sendSysCommon(MIDIMessageType m, uint8_t data1, Cable cable) { send(SysCommonMessage(m, data1, cable)); } template void MIDI_Sender::sendSysCommon(MIDIMessageType m, uint8_t data1, uint8_t data2, Cable cable) { send(SysCommonMessage(m, data1, data2, cable)); } template void MIDI_Sender::sendMTCQuarterFrame(uint8_t data, Cable cable) { send(SysCommonMessage(MIDIMessageType::MTCQuarterFrame, data, cable)); } template void MIDI_Sender::sendMTCQuarterFrame(uint8_t messageType, uint8_t values, Cable cable) { sendMTCQuarterFrame((messageType << 4) | values, cable); } template void MIDI_Sender::sendSongPositionPointer(uint16_t spp, Cable cable) { SysCommonMessage msg(MIDIMessageType::SongPositionPointer, cable); msg.setData14bit(spp); send(msg); } template void MIDI_Sender::sendSongSelect(uint8_t song, Cable cable) { send(SysCommonMessage(MIDIMessageType::SongSelect, song, cable)); } template void MIDI_Sender::sendTuneRequest(Cable cable) { send(SysCommonMessage(MIDIMessageType::TuneRequest, cable)); } template void MIDI_Sender::sendRealTime(MIDIMessageType rt, Cable cable) { send(RealTimeMessage(rt, cable)); } template void MIDI_Sender::sendRealTime(uint8_t rt, Cable cable) { send(RealTimeMessage(rt, cable)); } template void MIDI_Sender::sendTimingClock(Cable cable) { sendRealTime(MIDIMessageType::TimingClock, cable); } template void MIDI_Sender::sendStart(Cable cable) { sendRealTime(MIDIMessageType::Start, cable); } template void MIDI_Sender::sendContinue(Cable cable) { sendRealTime(MIDIMessageType::Continue, cable); } template void MIDI_Sender::sendStop(Cable cable) { sendRealTime(MIDIMessageType::Stop, cable); } template void MIDI_Sender::sendActiveSensing(Cable cable) { sendRealTime(MIDIMessageType::ActiveSensing, cable); } template void MIDI_Sender::sendSystemReset(Cable cable) { sendRealTime(MIDIMessageType::SystemReset, cable); } template void MIDI_Sender::sendNow() { CRTP(Derived).sendNowImpl(); } template void MIDI_Sender::sendKP(MIDIAddress address, uint8_t pressure) { sendKeyPressure(address, pressure); } template void MIDI_Sender::sendCC(MIDIAddress address, uint8_t value) { sendControlChange(address, value); } template void MIDI_Sender::sendPC(MIDIAddress address) { sendProgramChange(address); } template void MIDI_Sender::sendPC(MIDIChannelCable address, uint8_t value) { sendProgramChange(address, value); } template void MIDI_Sender::sendCP(MIDIChannelCable address, uint8_t pressure) { sendChannelPressure(address, pressure); } template void MIDI_Sender::sendPB(MIDIChannelCable address, uint16_t value) { sendPitchBend(address, value); } END_CS_NAMESPACE