Line data Source code
1 : #include <Def/TypeTraits.hpp> 2 : #include <MIDI_Parsers/LambdaPuller.hpp> 3 : 4 : BEGIN_CS_NAMESPACE 5 : 6 : // Reading MIDI 7 : // ----------------------------------------------------------------------------- 8 : 9 : template <class Backend> 10 18 : MIDIReadEvent GenericUSBMIDI_Interface<Backend>::read() { 11 44 : auto pullpacket = [this](typename Backend::MIDIUSBPacket_t &packet) { 12 26 : packet = backend.read(); 13 26 : return packet[0] != 0x00; 14 : }; 15 36 : return parser.pull(LambdaPuller(std::move(pullpacket))); 16 : } 17 : 18 : template <class Backend> 19 0 : void GenericUSBMIDI_Interface<Backend>::begin() { 20 : #ifndef __SAM3X8E__ // Due compiler too old, doesn't support begin_if_possible() 21 0 : begin_if_possible(backend); 22 : #endif 23 0 : } 24 : 25 : template <class Backend> 26 6 : void GenericUSBMIDI_Interface<Backend>::update() { 27 6 : MIDI_Interface::updateIncoming(this); 28 6 : } 29 : 30 : // Retrieving the received messages 31 : // ----------------------------------------------------------------------------- 32 : 33 : template <class Backend> 34 3 : ChannelMessage GenericUSBMIDI_Interface<Backend>::getChannelMessage() const { 35 3 : return parser.getChannelMessage(); 36 : } 37 : 38 : template <class Backend> 39 : SysCommonMessage 40 3 : GenericUSBMIDI_Interface<Backend>::getSysCommonMessage() const { 41 3 : return parser.getSysCommonMessage(); 42 : } 43 : 44 : template <class Backend> 45 2 : RealTimeMessage GenericUSBMIDI_Interface<Backend>::getRealTimeMessage() const { 46 2 : return parser.getRealTimeMessage(); 47 : } 48 : 49 : template <class Backend> 50 7 : SysExMessage GenericUSBMIDI_Interface<Backend>::getSysExMessage() const { 51 7 : return parser.getSysExMessage(); 52 : } 53 : 54 : // Sending MIDI 55 : // ----------------------------------------------------------------------------- 56 : 57 : template <class Backend> 58 3 : void GenericUSBMIDI_Interface<Backend>::sendChannelMessageImpl( 59 : ChannelMessage msg) { 60 3 : sender.sendChannelMessage(msg, Sender {this}); 61 3 : if (alwaysSendImmediately_) 62 0 : backend.sendNow(); 63 3 : } 64 : 65 : template <class Backend> 66 0 : void GenericUSBMIDI_Interface<Backend>::sendSysCommonImpl( 67 : SysCommonMessage msg) { 68 0 : sender.sendSysCommonMessage(msg, Sender {this}); 69 0 : if (alwaysSendImmediately_) 70 0 : backend.sendNow(); 71 0 : } 72 : 73 : template <class Backend> 74 19 : void GenericUSBMIDI_Interface<Backend>::sendSysExImpl(const SysExMessage msg) { 75 19 : sender.sendSysEx(msg, Sender {this}); 76 19 : if (alwaysSendImmediately_) 77 0 : backend.sendNow(); 78 19 : } 79 : 80 : template <class Backend> 81 1 : void GenericUSBMIDI_Interface<Backend>::sendRealTimeImpl(RealTimeMessage msg) { 82 1 : sender.sendRealTimeMessage(msg, Sender {this}); 83 1 : if (alwaysSendImmediately_) 84 0 : backend.sendNow(); 85 1 : } 86 : 87 : END_CS_NAMESPACE