Open FFBoard
Open source force feedback firmware
MidiHandler.cpp
Go to the documentation of this file.
1/*
2 * MidiHandler.cpp
3 *
4 * Created on: 23.02.2021
5 * Author: Yannick
6 */
7#include "MidiHandler.h"
8#ifdef MIDI
9
10uint8_t MidiHandler::buf[] = {0};
11
13 extern MidiHandler* midihandler; // Global pointer
14 midihandler = this;
15
16}
17
19 extern MidiHandler* midihandler; // Global pointer
20 midihandler = nullptr;
21}
22
23
24
25void MidiHandler::midiRx(uint8_t itf,uint8_t packet[4]){
26
28 uint8_t chan = packet[1] & 0xf;
29 uint8_t packettype = packet[1] & 0xf0;
30 uint8_t b1 = packet[2];
31 uint8_t b2 = packet[3];
32
33 switch(packet[1]){ // System packet
34
36 {
37 sysexState = true;
38 otherPacket(packet);
39 break;
40 }
42 sysexState = false;
43 otherPacket(packet);
44 break;
45
46 //------------- System Common -------------//
47// case MIDI_STATUS_SYSCOM_TIME_CODE_QUARTER_FRAME:
48// case MIDI_STATUS_SYSCOM_SONG_POSITION_POINTER:
49// case MIDI_STATUS_SYSCOM_SONG_SELECT:
50// // F4, F5 is undefined
51// case MIDI_STATUS_SYSCOM_TUNE_REQUEST:
52// sysexState = false;
53// break;
54
55 //------------- System RealTime -------------//
57 // tick
58 this->midiTick();
59 break;
60 // 0xF9 is undefined
61// case MIDI_STATUS_SYSREAL_START:
62// case MIDI_STATUS_SYSREAL_CONTINUE:
63// case MIDI_STATUS_SYSREAL_STOP:
64// // 0xFD is undefined
65// case MIDI_STATUS_SYSREAL_ACTIVE_SENSING:
66// case MIDI_STATUS_SYSREAL_SYSTEM_RESET:
67// sysexState = false;
68// break;
69
70 default:
71
72 switch (packettype) {
73 case 0x80:
74 // Noteoff
75 this->noteOff(chan, b1, b2);
76 break;
77 case 0x90:
78 // Noteon
79 if(b2 == 0){
80 this->noteOff(chan, b1, b2);
81 }else{
82 this->noteOn(chan, b1, b2);
83 }
84 break;
85 case 0xB0:
86 //cc
87 this->controlChange(chan, b1,b2);
88 break;
89 case 0xC0:
90 //pc
91 this->programChange(chan,b1);
92 break;
93 case 0xD0:
94
95 break;
96 case 0xE0:
97 {
98 //pb
99 int16_t pb = (b1 & 0x7f) | ((b2 & 0x7f) << 7);
100 this->pitchBend(chan, pb-8192);
101 break;
102 }
103
104 default:
105 otherPacket(packet);
106 break;
107 }
108 }
109
110
111}
112
113void MidiHandler::noteOn(uint8_t chan, uint8_t note,uint8_t velocity){
114
115}
116void MidiHandler::noteOff(uint8_t chan, uint8_t note,uint8_t velocity){
117
118}
119void MidiHandler::controlChange(uint8_t chan, uint8_t c, uint8_t val){
120
121}
122void MidiHandler::pitchBend(uint8_t chan, int16_t val){
123
124}
129
130}
131void MidiHandler::programChange(uint8_t chan, uint8_t val){
132
133}
134void MidiHandler::otherPacket(uint8_t packet[4]){
135
136}
137
138#endif
virtual ~MidiHandler()
Definition: MidiHandler.cpp:18
virtual void noteOn(uint8_t chan, uint8_t note, uint8_t velocity)=0
virtual void midiTick()
virtual void noteOff(uint8_t chan, uint8_t note, uint8_t velocity)=0
virtual void midiRx(uint8_t itf, uint8_t packet[4])
Definition: MidiHandler.cpp:25
virtual void pitchBend(uint8_t chan, int16_t val)
static uint8_t buf[4]
Definition: MidiHandler.h:27
virtual void otherPacket(uint8_t packet[4])
virtual void programChange(uint8_t chan, uint8_t val)
bool sysexState
Definition: MidiHandler.h:29
virtual void controlChange(uint8_t chan, uint8_t c, uint8_t val)
MidiHandler * midihandler
@ MIDI_STATUS_SYSREAL_TIMING_CLOCK
Definition: midi.h:99
@ MIDI_STATUS_SYSEX_END
Definition: midi.h:89
@ MIDI_STATUS_SYSEX_START
Definition: midi.h:88
void pulseSysLed()
Definition: ledEffects.cpp:39