Line data Source code
1 : #include "SerialMIDI_Interface.hpp" 2 : #include <MIDI_Parsers/StreamPuller.hpp> 3 : 4 : #include "PicoUSBInit.hpp" 5 : 6 : BEGIN_CS_NAMESPACE 7 : 8 : // -------------------------------------------------------------------------- // 9 : 10 : // Reading MIDI 11 : 12 15 : MIDIReadEvent StreamMIDI_Interface::read() { 13 15 : if (!ensure_usb_init(stream)) 14 0 : return MIDIReadEvent::NO_MESSAGE; 15 15 : return parser.pull(StreamPuller(stream)); 16 : } 17 : 18 5 : void StreamMIDI_Interface::update() { MIDI_Interface::updateIncoming(this); } 19 : 20 : // -------------------------------------------------------------------------- // 21 : 22 : // Retrieving the received messages 23 : 24 3 : ChannelMessage StreamMIDI_Interface::getChannelMessage() const { 25 3 : return parser.getChannelMessage(); 26 : } 27 : 28 0 : SysCommonMessage StreamMIDI_Interface::getSysCommonMessage() const { 29 0 : return parser.getSysCommonMessage(); 30 : } 31 : 32 2 : RealTimeMessage StreamMIDI_Interface::getRealTimeMessage() const { 33 2 : return parser.getRealTimeMessage(); 34 : } 35 : 36 7 : SysExMessage StreamMIDI_Interface::getSysExMessage() const { 37 7 : return parser.getSysExMessage(); 38 : } 39 : 40 : // -------------------------------------------------------------------------- // 41 : 42 : // Sending MIDI 43 : 44 10 : void StreamMIDI_Interface::sendChannelMessageImpl(ChannelMessage msg) { 45 10 : if (!ensure_usb_init(stream)) 46 0 : return; 47 10 : stream.write(msg.header); 48 10 : stream.write(msg.data1); 49 10 : if (msg.hasTwoDataBytes()) 50 6 : stream.write(msg.data2); 51 : } 52 : 53 0 : void StreamMIDI_Interface::sendSysCommonImpl(SysCommonMessage msg) { 54 0 : if (!ensure_usb_init(stream)) 55 0 : return; 56 0 : stream.write(msg.header); 57 0 : if (msg.getNumberOfDataBytes() >= 1) 58 0 : stream.write(msg.data1); 59 0 : if (msg.getNumberOfDataBytes() >= 2) 60 0 : stream.write(msg.data2); 61 : } 62 : 63 1 : void StreamMIDI_Interface::sendSysExImpl(SysExMessage msg) { 64 1 : if (!ensure_usb_init(stream)) 65 0 : return; 66 1 : stream.write(msg.data, msg.length); 67 : } 68 : 69 1 : void StreamMIDI_Interface::sendRealTimeImpl(RealTimeMessage msg) { 70 1 : if (!ensure_usb_init(stream)) 71 0 : return; 72 1 : stream.write(msg.message); 73 : } 74 : 75 : END_CS_NAMESPACE