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 : template <class Backend> 31 0 : void GenericUSBMIDI_Interface<Backend>::handleStall() { 32 0 : MIDI_Interface::handleStall(this); 33 0 : } 34 : 35 : // Retrieving the received messages 36 : // ----------------------------------------------------------------------------- 37 : 38 : template <class Backend> 39 3 : ChannelMessage GenericUSBMIDI_Interface<Backend>::getChannelMessage() const { 40 3 : return parser.getChannelMessage(); 41 : } 42 : 43 : template <class Backend> 44 : SysCommonMessage 45 3 : GenericUSBMIDI_Interface<Backend>::getSysCommonMessage() const { 46 3 : return parser.getSysCommonMessage(); 47 : } 48 : 49 : template <class Backend> 50 2 : RealTimeMessage GenericUSBMIDI_Interface<Backend>::getRealTimeMessage() const { 51 2 : return parser.getRealTimeMessage(); 52 : } 53 : 54 : template <class Backend> 55 4 : SysExMessage GenericUSBMIDI_Interface<Backend>::getSysExMessage() const { 56 4 : return parser.getSysExMessage(); 57 : } 58 : 59 : // Sending MIDI 60 : // ----------------------------------------------------------------------------- 61 : 62 : template <class Backend> 63 3 : void GenericUSBMIDI_Interface<Backend>::sendChannelMessageImpl( 64 : ChannelMessage msg) { 65 3 : sender.sendChannelMessage(msg, Sender {this}); 66 3 : if (alwaysSendImmediately_) 67 0 : backend.sendNow(); 68 3 : } 69 : 70 : template <class Backend> 71 0 : void GenericUSBMIDI_Interface<Backend>::sendSysCommonImpl( 72 : SysCommonMessage msg) { 73 0 : sender.sendSysCommonMessage(msg, Sender {this}); 74 0 : if (alwaysSendImmediately_) 75 0 : backend.sendNow(); 76 0 : } 77 : 78 : template <class Backend> 79 19 : void GenericUSBMIDI_Interface<Backend>::sendSysExImpl(const SysExMessage msg) { 80 19 : sender.sendSysEx(msg, Sender {this}); 81 19 : if (alwaysSendImmediately_) 82 0 : backend.sendNow(); 83 19 : } 84 : 85 : template <class Backend> 86 1 : void GenericUSBMIDI_Interface<Backend>::sendRealTimeImpl(RealTimeMessage msg) { 87 1 : sender.sendRealTimeMessage(msg, Sender {this}); 88 1 : if (alwaysSendImmediately_) 89 0 : backend.sendNow(); 90 1 : } 91 : 92 : END_CS_NAMESPACE