Deluge Firmware
Loading...
Searching...
No Matches
midiengine.h
Go to the documentation of this file.
1/*
2 * Copyright © 2014-2023 Synthstrom Audible Limited
3 *
4 * This file is part of The Synthstrom Audible Deluge Firmware.
5 *
6 * The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7 * terms of the GNU General Public License as published by the Free Software Foundation,
8 * either version 3 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along with this program.
15 * If not, see <https://www.gnu.org/licenses/>.
16 */
17
18#ifndef MIDIENGINE_H
19#define MIDIENGINE_H
20
21#include "playbackhandler.h"
22#include "definitions.h"
23#include "LearnedMIDI.h"
24
25class MIDIDevice;
26
28{
29public:
30 MidiEngine();
31
32 void sendNote(bool on, int note, uint8_t velocity, uint8_t channel, int filter);
33 void sendCC(int channel, int cc, int value, int filter);
36 void sendMidi(uint8_t statusType, uint8_t channel, uint8_t data1 = 0, uint8_t data2 = 0, int filter = MIDI_OUTPUT_FILTER_NO_MPE, bool sendUSB = true);
37 void sendClock(bool sendUSB = true, int howMany = 1);
38 void sendStart();
39 void sendStop();
40 void sendPositionPointer(uint16_t positionPointer);
41 void sendContinue();
42 void flushMIDI();
43 void sendUsbMidi(uint8_t statusType, uint8_t channel, uint8_t data1, uint8_t data2, int filter);
44 void sendSerialMidi(uint8_t statusType, uint8_t channel, uint8_t data1, uint8_t data2);
45 void sendPGMChange(int channel, int pgm, int filter);
46 void sendAllNotesOff(int channel, int filter);
47 void sendBank(int channel, int num, int filter);
48 void sendSubBank(int channel, int num, int filter);
49 void sendPitchBend(int channel, uint8_t lsbs, uint8_t msbs, int filter);
50 void sendChannelAftertouch(int channel, uint8_t value, int filter);
51 void sendPolyphonicAftertouch(int channel, uint8_t value, uint8_t noteCode, int filter);
53 void setupUSBHostReceiveTransfer(int ip, int midiDeviceNum);
54 void flushUSBMIDIOutput();
55
56
57 LearnedMIDI globalMIDICommands[NUM_GLOBAL_MIDI_COMMANDS]; // If bit "16" (actually bit 4) is 1, this is a program change. (Wait, still?)
58
60
61private:
62 uint8_t serialMidiInput[3];
63 uint8_t numSerialMidiInput;
64 uint8_t lastStatusByteSent;
65
66 bool currentlyReceivingSysEx;
67
68 int getMidiMessageLength(uint8_t statusuint8_t);
69 void midiMessageReceived(MIDIDevice* fromDevice, uint8_t statusType, uint8_t channel, uint8_t data1, uint8_t data2, uint32_t* timer = NULL);
70 int getPotentialNumConnectedUSBMIDIDevices(int ip);
71
72};
73
74
75uint32_t setupUSBMessage(uint8_t statusType, uint8_t channel, uint8_t data1, uint8_t data2);
76
79
80#endif // MIDIENGINE_H
Definition: LearnedMIDI.h:30
Definition: MIDIDevice.h:74
Definition: midiengine.h:28
void sendChannelAftertouch(int channel, uint8_t value, int filter)
Definition: midiengine.cpp:399
void sendMidi(uint8_t statusType, uint8_t channel, uint8_t data1=0, uint8_t data2=0, int filter=MIDI_OUTPUT_FILTER_NO_MPE, bool sendUSB=true)
Definition: midiengine.cpp:407
void flushUSBMIDIOutput()
Definition: midiengine.cpp:241
bool anythingInOutputBuffer()
Definition: midiengine.cpp:333
void sendPGMChange(int channel, int pgm, int filter)
Definition: midiengine.cpp:391
bool checkIncomingSerialMidi()
Definition: midiengine.cpp:492
void setupUSBHostReceiveTransfer(int ip, int midiDeviceNum)
Definition: midiengine.cpp:562
void sendUsbMidi(uint8_t statusType, uint8_t channel, uint8_t data1, uint8_t data2, int filter)
Definition: midiengine.cpp:438
void sendContinue()
Definition: midiengine.cpp:368
void sendSerialMidi(uint8_t statusType, uint8_t channel, uint8_t data1, uint8_t data2)
Definition: midiengine.cpp:465
void flushMIDI()
Definition: midiengine.cpp:459
void sendNote(bool on, int note, uint8_t velocity, uint8_t channel, int filter)
Definition: midiengine.cpp:338
void sendCC(int channel, int cc, int value, int filter)
Definition: midiengine.cpp:352
void sendPitchBend(int channel, uint8_t lsbs, uint8_t msbs, int filter)
Definition: midiengine.cpp:395
void sendClock(bool sendUSB=true, int howMany=1)
Definition: midiengine.cpp:357
void checkIncomingUsbMidi()
Definition: midiengine.cpp:587
void sendBank(int channel, int num, int filter)
Definition: midiengine.cpp:383
void sendPositionPointer(uint16_t positionPointer)
Definition: midiengine.cpp:377
bool midiThru
Definition: midiengine.h:59
void sendSubBank(int channel, int num, int filter)
Definition: midiengine.cpp:387
MidiEngine()
Definition: midiengine.cpp:176
void sendStop()
Definition: midiengine.cpp:373
void sendStart()
Definition: midiengine.cpp:363
LearnedMIDI globalMIDICommands[NUM_GLOBAL_MIDI_COMMANDS]
Definition: midiengine.h:57
void sendAllNotesOff(int channel, int filter)
Definition: midiengine.cpp:348
void sendPolyphonicAftertouch(int channel, uint8_t value, uint8_t noteCode, int filter)
Definition: midiengine.cpp:403
#define MIDI_OUTPUT_FILTER_NO_MPE
Definition: definitions.h:929
#define NUM_GLOBAL_MIDI_COMMANDS
Definition: definitions.h:657
bool anythingInUSBOutputBuffer
Definition: midiengine.cpp:174
MidiEngine midiEngine
Definition: midiengine.cpp:172
uint32_t setupUSBMessage(uint8_t statusType, uint8_t channel, uint8_t data1, uint8_t data2)
Definition: midiengine.cpp:418