From 3d38f50d9883e268e450a069644273b43c094a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20St=C3=A4ck?= Date: Sun, 23 Jun 2019 14:30:32 +0200 Subject: [PATCH] Add deeper simulation of USB midi --- simulation/Makefile | 5 +-- simulation/include/Arduino.h | 20 ++++++++++++ simulation/src/nuevisim.cpp | 3 +- simulation/src/simmidi.cpp | 56 --------------------------------- simulation/src/simserial.cpp | 12 +++++++ simulation/src/simusbmidi.cpp | 59 +++++++++++++++++++++++++++++++++++ 6 files changed, 96 insertions(+), 59 deletions(-) delete mode 100644 simulation/src/simmidi.cpp create mode 100644 simulation/src/simusbmidi.cpp diff --git a/simulation/Makefile b/simulation/Makefile index b2983cd..2766a89 100644 --- a/simulation/Makefile +++ b/simulation/Makefile @@ -12,7 +12,7 @@ else endif -CXXFLAGS= $(CFLAGS) -std=c++14 +CXXFLAGS= $(CFLAGS) -std=c++14 -Wno-unused-parameter LIBS=-framework SDL2 -lc++ -lc -framework OpenGL LDFLAGS=-macosx_version_min 10.9 -rpath @executable_path/../Frameworks @@ -32,8 +32,9 @@ CXXFILES= ../NuEVI/menu.cpp \ src/Print.cpp \ src/simserial.cpp \ src/simwire.cpp \ - src/simmidi.cpp \ + src/simusbmidi.cpp \ src/filters.cpp \ + ../NuEVI/midi.cpp \ src/Adafruit_GFX_sim.cpp \ src/Adafruit_SSD1306_sim.cpp \ src/Adafruit_MPR121_sim.cpp \ diff --git a/simulation/include/Arduino.h b/simulation/include/Arduino.h index 6b63b2c..7212d25 100644 --- a/simulation/include/Arduino.h +++ b/simulation/include/Arduino.h @@ -67,9 +67,29 @@ public: void println(const char* str); void print(const char* str); void print(uint32_t intValue); + void write(const uint8_t str); + void flush(); + +}; + +class SimUsbMidi +{ +public: + void sendNoteOff(uint8_t note, uint8_t velocity, uint8_t channel, uint8_t cable=0); + void sendNoteOn(uint8_t note, uint8_t velocity, uint8_t channel, uint8_t cable=0); + void sendPolyPressure(uint8_t note, uint8_t pressure, uint8_t channel, uint8_t cable=0); + void sendAfterTouchPoly(uint8_t note, uint8_t pressure, uint8_t channel, uint8_t cable=0); + void sendControlChange(uint8_t control, uint8_t value, uint8_t channel, uint8_t cable=0); + void sendProgramChange(uint8_t program, uint8_t channel, uint8_t cable=0); + void sendAfterTouch(uint8_t pressure, uint8_t channel, uint8_t cable=0); + void sendPitchBend(int value, uint8_t channel, uint8_t cable=0); + void sendSysEx(uint16_t length, const uint8_t *data, bool hasTerm=false, uint8_t cable=0); + bool read(uint8_t channel=0); }; extern SimSerial Serial; +extern SimSerial Serial3; //Used for MIDI serial putput with default hardware +extern SimUsbMidi usbMIDI; //extern void putString(int row, int col, int color, const char* msg, const FONT_INFO fontInfo); diff --git a/simulation/src/nuevisim.cpp b/simulation/src/nuevisim.cpp index 8982c7c..13c2915 100644 --- a/simulation/src/nuevisim.cpp +++ b/simulation/src/nuevisim.cpp @@ -26,7 +26,8 @@ extern Adafruit_SSD1306 display; extern Adafruit_MPR121 touchSensor; SimWire Wire; SimSerial Serial; - +SimSerial Serial3; //Midi +SimUsbMidi usbMIDI; static const int scale = 3; diff --git a/simulation/src/simmidi.cpp b/simulation/src/simmidi.cpp deleted file mode 100644 index 74b45cb..0000000 --- a/simulation/src/simmidi.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include "midi.h" - -void midiSetChannel(byte __attribute__((unused)) channel){} - -byte midiGetChannel(){ return 1; } - -void midiSendProgramChange(int __attribute__((unused)) patch) -{ - -} - -void midiSendControlChange(int __attribute__((unused)) ccParam, int __attribute__((unused)) ccValue) -{ - -} - -void midiSendNoteOn(byte __attribute__((unused)) note, int __attribute__((unused)) velocity) -{ - -} - -void midiSendNoteOff(byte __attribute__((unused)) note) -{ - -} - -void midiSendAfterTouch(byte __attribute__((unused)) value) -{ - -} - -void midiSendPitchBend(int __attribute__((unused)) value) -{ - -} - -void midiDiscardInput() -{ - -} - -void midiReset() -{ - -} - -void midiPanic() -{ - // turn all notes off -} - -void midiInitialize(byte __attribute__((unused)) channel) -{ - -} \ No newline at end of file diff --git a/simulation/src/simserial.cpp b/simulation/src/simserial.cpp index 65e3bd7..0ffd36e 100644 --- a/simulation/src/simserial.cpp +++ b/simulation/src/simserial.cpp @@ -41,3 +41,15 @@ void SimSerial::println(const char *str) printf( "[Serial::println] %s\n", str ); } +//Used to send serial midi +void SimSerial::write(const uint8_t str) +{ + +} + + +void SimSerial::flush() +{ + +} + diff --git a/simulation/src/simusbmidi.cpp b/simulation/src/simusbmidi.cpp new file mode 100644 index 0000000..6de480e --- /dev/null +++ b/simulation/src/simusbmidi.cpp @@ -0,0 +1,59 @@ +#include +#include + + +#include "Arduino.h" + +/************************************* + * Stub simulation of Teensy usbMidi + */ + + +void SimUsbMidi::sendNoteOff(uint8_t note, uint8_t velocity, uint8_t channel, uint8_t cable) +{ + printf( "[usbMIDI::noteOff] note %03d vel %03d ch %02d\n", note, velocity, channel); +} + +void SimUsbMidi::sendNoteOn(uint8_t note, uint8_t velocity, uint8_t channel, uint8_t cable) +{ + printf( "[usbMIDI::noteOn] note %03d vel %03d ch %02d\n", note, velocity, channel); +} + +void SimUsbMidi::sendPolyPressure(uint8_t note, uint8_t pressure, uint8_t channel, uint8_t cable) +{ + printf( "[usbMIDI::polyPressure] note %03d p %03d ch %02d\n", note, pressure, channel); +} + +void SimUsbMidi::sendAfterTouchPoly(uint8_t note, uint8_t pressure, uint8_t channel, uint8_t cable) +{ + printf( "[usbMIDI::afterTouchPoly] note %03d p %03d ch %02d\n", note, pressure, channel); +} + +void SimUsbMidi::sendControlChange(uint8_t control, uint8_t value, uint8_t channel, uint8_t cable) +{ + printf( "[usbMIDI::controlChange] cc %03d val %03d ch %02d\n", control, value, channel); +} + +void SimUsbMidi::sendProgramChange(uint8_t program, uint8_t channel, uint8_t cable) +{ + printf( "[usbMIDI::programChange] prg %03d ch %02d\n", program, channel); +} + +void SimUsbMidi::sendAfterTouch(uint8_t pressure, uint8_t channel, uint8_t cable) +{ + printf( "[usbMIDI::afterTouch] p %03d ch %02d\n", pressure, channel); +} + +void SimUsbMidi::sendPitchBend(int value, uint8_t channel, uint8_t cable) +{ + printf( "[usbMIDI::pitchBend] pb %05d ch %02d\n", value, channel); +} + +void SimUsbMidi::sendSysEx(uint16_t length, const uint8_t *data, bool hasTerm, uint8_t cable) +{ +} + +bool SimUsbMidi::read(uint8_t channel) { + return false; +} +