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
|