diff --git a/src/WVR.cpp b/src/WVR.cpp index 2331c12..b4d0a47 100644 --- a/src/WVR.cpp +++ b/src/WVR.cpp @@ -4,6 +4,7 @@ #include "wav_player.h" #include "server.h" #include "file_system.h" +#include "encoder.h" WVR::WVR() { @@ -11,11 +12,12 @@ WVR::WVR() this->useFTDI = false; this->useUsbMidi = false; this->forceWifiOn = false; + this->checkRecoveryModePin = true; } void WVR::begin() { - wvr_init(useFTDI, useUsbMidi); + wvr_init(useFTDI, useUsbMidi, checkRecoveryModePin); } void WVR::play(uint8_t voice, uint8_t note, uint8_t velocity) @@ -60,4 +62,19 @@ void WVR::mute(void) void WVR::unmute(void) { set_mute(false); +} + +void WVR::setMidiHook(uint8_t*(*fn)(uint8_t *in)) +{ + set_midi_hook(fn); +} + +void WVR::encoderInit(int encA, int encB) +{ + encoder_init(encA, encB); +} + +void WVR::onEncoder(void (*handleEncoder)(bool up)) +{ + on_encoder = handleEncoder; } \ No newline at end of file diff --git a/src/WVR.h b/src/WVR.h index 779c243..b53c76a 100644 --- a/src/WVR.h +++ b/src/WVR.h @@ -20,6 +20,10 @@ class WVR { void setGlobalVolume(uint8_t volume); void mute(void); void unmute(void); + void setMidiHook(uint8_t*(*fn)(uint8_t *in)); + void encoderInit(int encA, int encB); + void onEncoder(void (*handleEncoder)(bool up)); + // int globalVolume; // bool mute; // bool autoConfigPins; @@ -27,6 +31,7 @@ class WVR { bool useFTDI; bool useUsbMidi; bool forceWifiOn; + bool checkRecoveryModePin; }; #endif \ No newline at end of file diff --git a/src/encoder.c b/src/encoder.c index d300755..01efd0d 100644 --- a/src/encoder.c +++ b/src/encoder.c @@ -17,7 +17,7 @@ static uint64_t GPIO_MASK = 0; static xQueueHandle encoder_event_queue = NULL; -void onEncoder_default(bool down) +void on_encoder_default(bool down) { ESP_LOGI(tag, "%s", down ? "down" : "up"); } @@ -43,7 +43,7 @@ static void emit(char dir){ // log_d("step %s",dir?"left":"right"); // out += (dir?-1:1); // log_i("%d",out); - onEncoder((bool)dir); + on_encoder((bool)dir); } static void encoder_task(void* arg) @@ -241,7 +241,7 @@ void encoder_init(int enc_a, int enc_b){ encoder_event_queue = xQueueCreate(10, sizeof(uint32_t)); xTaskCreatePinnedToCore(encoder_task, "encoder_task", 2048, NULL, 10, NULL, 0); - onEncoder = onEncoder_default; + on_encoder = on_encoder_default; attachInterrupt(enc_a, enc_a_handler, CHANGE); attachInterrupt(enc_b, enc_b_handler, CHANGE); diff --git a/src/encoder.h b/src/encoder.h index e7d9a12..136a69a 100644 --- a/src/encoder.h +++ b/src/encoder.h @@ -1,8 +1,15 @@ #ifndef ENCODER_H #define ENCODER_H -void (*onEncoder)(bool); -// void encoder_init(void); +#ifdef __cplusplus +extern "C" { +#endif + +void (*on_encoder)(bool); void encoder_init(int enc_a, int enc_b); +#ifdef __cplusplus +} +#endif + #endif \ No newline at end of file diff --git a/src/midi.cpp b/src/midi.cpp index 518452e..9b652fc 100644 --- a/src/midi.cpp +++ b/src/midi.cpp @@ -3,10 +3,12 @@ #include "esp32-hal-log.h" #include "midi_in.h" #include "ws_log.h" +#include "midi.h" midiXparser midiParser; uint8_t *msg; + void midi_parser_init(void) { midiParser.setMidiMsgFilter( midiXparser::channelVoiceMsgTypeMsk ); @@ -16,12 +18,16 @@ extern "C" uint8_t* midi_parse(uint8_t in) { if ( midiParser.parse( in ) ) // Do we received a channel voice msg ? { - if ( midiParser.isMidiStatus(midiXparser::noteOnStatus) || midiParser.isMidiStatus(midiXparser::noteOffStatus) || midiParser.isMidiStatus(midiXparser::programChangeStatus) || midiParser.isMidiStatus(midiXparser::controlChangeStatus) ) + if ( + midiParser.isMidiStatus(midiXparser::noteOnStatus) || + midiParser.isMidiStatus(midiXparser::noteOffStatus) || + midiParser.isMidiStatus(midiXparser::programChangeStatus) || + midiParser.isMidiStatus(midiXparser::controlChangeStatus) + ) { msg = midiParser.getMidiMsg(); return msg; } } return NULL; -} - +} \ No newline at end of file diff --git a/src/midi.h b/src/midi.h new file mode 100644 index 0000000..227ccdc --- /dev/null +++ b/src/midi.h @@ -0,0 +1,18 @@ +#ifndef MIDI_H +#define MIDI_H + +void midi_parser_init(void); + +#ifdef __cplusplus + +extern "C" { +#endif + + uint8_t* midi_parse(uint8_t in); + uint8_t* midi_hook_default(uint8_t *in); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/src/midi_in.c b/src/midi_in.c index e1961fc..5f8a725 100644 --- a/src/midi_in.c +++ b/src/midi_in.c @@ -9,6 +9,7 @@ #include "ws_log.h" #include "wav_player.h" #include "file_system.h" +#include "midi.h" #define MIDI_UART_NUM UART_NUM_2 #define BUF_SIZE (1024) @@ -22,7 +23,8 @@ static const char *TAG = "midi"; // from server.cpp void sendWSMsg(char* msg); // from midiXparser.cpp -uint8_t *midi_parse(uint8_t in); +// uint8_t *midi_parse(uint8_t in); +// uint8_t *midi_hook(uint8_t *in); esp_err_t ret; @@ -31,8 +33,11 @@ QueueHandle_t uart_queue; // uart Events queue struct wav_player_event_t wav_player_event; int bytes_read; +uint8_t *raw_msg; uint8_t *msg; +uint8_t*(*midi_hook)(uint8_t *in); + void init_gpio(bool useUsbMidi) { gpio_config_t io_conf; @@ -125,9 +130,14 @@ static void read_uart_task() // } for(int i=0;i> 4) & 0b00001111; @@ -245,6 +255,17 @@ void midi_init(bool useUsbMidi) { init_gpio(useUsbMidi); init_uart(useUsbMidi); + midi_hook = midi_hook_default; xTaskCreatePinnedToCore(read_uart_task, "read_uart_task", 4096, NULL, 3, NULL, 0); // xTaskCreatePinnedToCore(read_uart_task, "read_uart_task", 4096, NULL, 3, NULL, 1); +} + +uint8_t* midi_hook_default(uint8_t* in) +{ + return in; +} + +void set_midi_hook(uint8_t*(*fn)(uint8_t *in)) +{ + midi_hook = fn; } \ No newline at end of file diff --git a/src/midi_in.h b/src/midi_in.h index 7ec372c..b7c5138 100644 --- a/src/midi_in.h +++ b/src/midi_in.h @@ -21,6 +21,8 @@ struct midi_event_t { }; uint8_t *get_channel_lut(void); +uint8_t* midi_hook_default(uint8_t* in); +void set_midi_hook(uint8_t*(*fn)(uint8_t *in)); #ifdef __cplusplus } diff --git a/src/wvr_0.3.cpp b/src/wvr_0.3.cpp index b50be13..e68f823 100644 --- a/src/wvr_0.3.cpp +++ b/src/wvr_0.3.cpp @@ -73,7 +73,7 @@ void logRam(){ struct metadata_t metadata; -void wvr_init(bool useFTDI, bool useUsbMidi) { +void wvr_init(bool useFTDI, bool useUsbMidi, bool checkRecoveryModePin) { Serial.begin(115200); logRam(); log_i("arduino setup running on core %u",xPortGetCoreID()); @@ -92,7 +92,7 @@ void wvr_init(bool useFTDI, bool useUsbMidi) { logSize("file system"); int ret = check_for_recovery_mode(); - if(!ret) + if(!ret && checkRecoveryModePin) { boot_into_recovery_mode(); return; diff --git a/src/wvr_0.3.h b/src/wvr_0.3.h index 2619806..c6a8680 100644 --- a/src/wvr_0.3.h +++ b/src/wvr_0.3.h @@ -5,6 +5,6 @@ #define VERSION_CODE "1.0.1" -void wvr_init(bool useFTDI, bool useUsbMidi); +void wvr_init(bool useFTDI, bool useUsbMidi, bool checkRecoveryModePin); #endif \ No newline at end of file diff --git a/src/wvr_ui.h b/src/wvr_ui.h index 02134de..83aa2a2 100644 --- a/src/wvr_ui.h +++ b/src/wvr_ui.h @@ -1,3 +1,3 @@ const char MAIN_page[] PROGMEM = R"=====( -Waver UI
+Waver UI
)====="; \ No newline at end of file