diff --git a/NuEVI/NuEVI.ino b/NuEVI/NuEVI.ino index 23b5ba2..8228e21 100644 --- a/NuEVI/NuEVI.ino +++ b/NuEVI/NuEVI.ino @@ -260,120 +260,10 @@ void setup() { pinMode(biteJumperGndPin, OUTPUT); //PBITE digitalWrite(biteJumperGndPin, LOW); //PBITE - // if stored settings are not for current version, or Enter+Menu are pressed at startup, they are replaced by factory settings - uint16_t settingsVersion = readSetting(VERSION_ADDR); + //Read eeprom data into global vars + readEEPROM(factoryReset); - if (((settingsVersion != VERSION) && (settingsVersion < 24)) || (!digitalRead(ePin) && !digitalRead(mPin)) || (settingsVersion == 0xffffu)) { - writeSetting(VERSION_ADDR,VERSION); - writeSetting(BREATH_THR_ADDR,BREATH_THR_FACTORY); - writeSetting(BREATH_MAX_ADDR,BREATH_MAX_FACTORY); - if (digitalRead(biteJumperPin)){ //PBITE (if pulled low with jumper, pressure sensor is used instead of capacitive bite sensing) - writeSetting(PORTAM_THR_ADDR,PORTAM_THR_FACTORY); - writeSetting(PORTAM_MAX_ADDR,PORTAM_MAX_FACTORY); - } else { - writeSetting(PORTAM_THR_ADDR,PORTPR_THR_FACTORY); - writeSetting(PORTAM_MAX_ADDR,PORTPR_MAX_FACTORY); - } - writeSetting(PITCHB_THR_ADDR,PITCHB_THR_FACTORY); - writeSetting(PITCHB_MAX_ADDR,PITCHB_MAX_FACTORY); - writeSetting(EXTRAC_THR_ADDR,EXTRAC_THR_FACTORY); - writeSetting(EXTRAC_MAX_ADDR,EXTRAC_MAX_FACTORY); - writeSetting(CTOUCH_THR_ADDR,CTOUCH_THR_FACTORY); - } - - if ((settingsVersion != VERSION) || (!digitalRead(ePin) && !digitalRead(mPin))) { - writeSetting(VERSION_ADDR,VERSION); - - writeSetting(TRANSP_ADDR,TRANSP_FACTORY); - writeSetting(MIDI_ADDR,MIDI_FACTORY); - writeSetting(BREATH_CC_ADDR,BREATH_CC_FACTORY); - writeSetting(BREATH_AT_ADDR,BREATH_AT_FACTORY); - writeSetting(VELOCITY_ADDR,VELOCITY_FACTORY); - writeSetting(PORTAM_ADDR,PORTAM_FACTORY); - writeSetting(PB_ADDR,PB_FACTORY); - writeSetting(EXTRA_ADDR,EXTRA_FACTORY); - writeSetting(VIBRATO_ADDR,VIBRATO_FACTORY); - writeSetting(DEGLITCH_ADDR,DEGLITCH_FACTORY); - writeSetting(PATCH_ADDR,PATCH_FACTORY); - writeSetting(OCTAVE_ADDR,OCTAVE_FACTORY); - writeSetting(BREATHCURVE_ADDR,BREATHCURVE_FACTORY); - writeSetting(VEL_SMP_DL_ADDR,VEL_SMP_DL_FACTORY); - writeSetting(VEL_BIAS_ADDR,VEL_BIAS_FACTORY); - writeSetting(PINKY_KEY_ADDR,PINKY_KEY_FACTORY); - writeSetting(FP1_ADDR,0); - writeSetting(FP2_ADDR,0); - writeSetting(FP3_ADDR,0); - writeSetting(FP4_ADDR,0); - writeSetting(FP5_ADDR,0); - writeSetting(FP6_ADDR,0); - writeSetting(FP7_ADDR,0); - writeSetting(DIPSW_BITS_ADDR,DIPSW_BITS_FACTORY); - writeSetting(PARAL_ADDR,PARAL_FACTORY); - writeSetting(ROTN1_ADDR,ROTN1_FACTORY); - writeSetting(ROTN2_ADDR,ROTN2_FACTORY); - writeSetting(ROTN3_ADDR,ROTN3_FACTORY); - writeSetting(ROTN4_ADDR,ROTN4_FACTORY); - writeSetting(PRIO_ADDR,PRIO_FACTORY); - writeSetting(VIB_SENS_ADDR,VIB_SENS_FACTORY); - writeSetting(VIB_RETN_ADDR,VIB_RETN_FACTORY); - writeSetting(VIB_SQUELCH_ADDR,VIB_SQUELCH_FACTORY); - writeSetting(VIB_DIRECTION_ADDR,VIB_DIRECTION_FACTORY); - writeSetting(BREATH_CC2_ADDR,BREATH_CC2_FACTORY); - writeSetting(BREATH_CC2_RISE_ADDR,BREATH_CC2_RISE_FACTORY); - writeSetting(VIB_SENS_BITE_ADDR,VIB_SENS_BITE_FACTORY); - writeSetting(VIB_SQUELCH_BITE_ADDR,VIB_SQUELCH_BITE_FACTORY); - writeSetting(VIB_CONTROL_ADDR,VIB_CONTROL_FACTORY); - } - // read settings from EEPROM - breathThrVal = readSetting(BREATH_THR_ADDR); - breathMaxVal = readSetting(BREATH_MAX_ADDR); - portamThrVal = readSetting(PORTAM_THR_ADDR); - portamMaxVal = readSetting(PORTAM_MAX_ADDR); - pitchbThrVal = readSetting(PITCHB_THR_ADDR); - pitchbMaxVal = readSetting(PITCHB_MAX_ADDR); - transpose = readSetting(TRANSP_ADDR); - MIDIchannel = readSetting(MIDI_ADDR); - breathCC = readSetting(BREATH_CC_ADDR); - breathAT = readSetting(BREATH_AT_ADDR); - velocity = readSetting(VELOCITY_ADDR); - portamento = readSetting(PORTAM_ADDR); - PBdepth = readSetting(PB_ADDR); - extraCT = readSetting(EXTRA_ADDR); - vibrato = readSetting(VIBRATO_ADDR); - deglitch = readSetting(DEGLITCH_ADDR); - extracThrVal = readSetting(EXTRAC_THR_ADDR); - extracMaxVal = readSetting(EXTRAC_MAX_ADDR); - patch = readSetting(PATCH_ADDR); - octave = readSetting(OCTAVE_ADDR); - ctouchThrVal = readSetting(CTOUCH_THR_ADDR); - curve = readSetting(BREATHCURVE_ADDR); - velSmpDl = readSetting(VEL_SMP_DL_ADDR); - velBias = readSetting(VEL_BIAS_ADDR); - pinkySetting = readSetting(PINKY_KEY_ADDR); - fastPatch[0] = readSetting(FP1_ADDR); - fastPatch[1] = readSetting(FP2_ADDR); - fastPatch[2] = readSetting(FP3_ADDR); - fastPatch[3] = readSetting(FP4_ADDR); - fastPatch[4] = readSetting(FP5_ADDR); - fastPatch[5] = readSetting(FP6_ADDR); - fastPatch[6] = readSetting(FP7_ADDR); - dipSwBits = readSetting(DIPSW_BITS_ADDR); - parallel = readSetting(PARAL_ADDR); - rotations[0] = readSetting(ROTN1_ADDR); - rotations[1] = readSetting(ROTN2_ADDR); - rotations[2] = readSetting(ROTN3_ADDR); - rotations[3] = readSetting(ROTN4_ADDR); - priority = readSetting(PRIO_ADDR); - vibSens = readSetting(VIB_SENS_ADDR); - vibRetn = readSetting(VIB_RETN_ADDR); - vibSquelch = readSetting(VIB_SQUELCH_ADDR); - vibDirection = readSetting(VIB_DIRECTION_ADDR); - breathCC2 = readSetting(BREATH_CC2_ADDR); - breathCC2Rise = readSetting(BREATH_CC2_RISE_ADDR); - vibSensBite = readSetting(VIB_SENS_BITE_ADDR); - vibSquelchBite = readSetting(VIB_SQUELCH_BITE_ADDR); - vibControl = readSetting(VIB_CONTROL_ADDR); legacy = dipSwBits & (1<<1); legacyBrAct = dipSwBits & (1<<2); diff --git a/NuEVI/settings.cpp b/NuEVI/settings.cpp new file mode 100644 index 0000000..b924a8d --- /dev/null +++ b/NuEVI/settings.cpp @@ -0,0 +1,162 @@ +#include "settings.h" +#include "globals.h" +#include "menu.h" + +//Read settings from eeprom. Returns wether or not anything was written (due to factory reset or upgrade) +bool readEEPROM() { + bool factoryReset = !digitalRead(ePin) && !digitalRead(mPin); + bool hasWritten = false; + + // if stored settings are not for current version, or Enter+Menu are pressed at startup, they are replaced by factory settings + uint16_t settingsVersion = readSetting(VERSION_ADDR); + + // blank eeprom will be 0xFFFF. For a full reset, call it "version 0" so everything gets overwritten. + if (factoryReset || settingsVersion == 0xffffu) { + settingsVersion = 0; + } + + + if(settingsVersion != EEPROM_VERSION) { + + if(settingsVersion < 24) { //Oldest version from which any settings are recognized + writeSetting(BREATH_THR_ADDR, BREATH_THR_FACTORY); + writeSetting(BREATH_MAX_ADDR, BREATH_MAX_FACTORY); + if (digitalRead(biteJumperPin)){ //PBITE (if pulled low with jumper, pressure sensor is used instead of capacitive bite sensing) + writeSetting(PORTAM_THR_ADDR, PORTAM_THR_FACTORY); + writeSetting(PORTAM_MAX_ADDR, PORTAM_MAX_FACTORY); + } else { + writeSetting(PORTAM_THR_ADDR, PORTPR_THR_FACTORY); + writeSetting(PORTAM_MAX_ADDR, PORTPR_MAX_FACTORY); + } + writeSetting(PITCHB_THR_ADDR, PITCHB_THR_FACTORY); + writeSetting(PITCHB_MAX_ADDR, PITCHB_MAX_FACTORY); + writeSetting(EXTRAC_THR_ADDR, EXTRAC_THR_FACTORY); + writeSetting(EXTRAC_MAX_ADDR, EXTRAC_MAX_FACTORY); + writeSetting(CTOUCH_THR_ADDR, CTOUCH_THR_FACTORY); + + writeSetting(TRANSP_ADDR, TRANSP_FACTORY); + writeSetting(MIDI_ADDR, MIDI_FACTORY); + writeSetting(BREATH_CC_ADDR, BREATH_CC_FACTORY); + writeSetting(BREATH_AT_ADDR, BREATH_AT_FACTORY); + writeSetting(VELOCITY_ADDR, VELOCITY_FACTORY); + writeSetting(PORTAM_ADDR, PORTAM_FACTORY); + writeSetting(PB_ADDR, PB_FACTORY); + writeSetting(EXTRA_ADDR, EXTRA_FACTORY); + writeSetting(VIBRATO_ADDR, VIBRATO_FACTORY); + writeSetting(DEGLITCH_ADDR, DEGLITCH_FACTORY); + writeSetting(PATCH_ADDR, PATCH_FACTORY); + writeSetting(OCTAVE_ADDR, OCTAVE_FACTORY); + writeSetting(BREATHCURVE_ADDR, BREATHCURVE_FACTORY); + writeSetting(VEL_SMP_DL_ADDR, VEL_SMP_DL_FACTORY); + writeSetting(VEL_BIAS_ADDR, VEL_BIAS_FACTORY); + writeSetting(PINKY_KEY_ADDR, PINKY_KEY_FACTORY); + } + + if(settingsVersion < 26) { + writeSetting(FP1_ADDR, 0); + writeSetting(FP2_ADDR, 0); + writeSetting(FP3_ADDR, 0); + writeSetting(FP4_ADDR, 0); + writeSetting(FP5_ADDR, 0); + writeSetting(FP6_ADDR, 0); + writeSetting(FP7_ADDR, 0); + writeSetting(DIPSW_BITS_ADDR, DIPSW_BITS_FACTORY); + } + + if(settingsVersion < 28) { + writeSetting(PARAL_ADDR, PARAL_FACTORY); + writeSetting(ROTN1_ADDR, ROTN1_FACTORY); + writeSetting(ROTN2_ADDR, ROTN2_FACTORY); + writeSetting(ROTN3_ADDR, ROTN3_FACTORY); + writeSetting(ROTN4_ADDR, ROTN4_FACTORY); + writeSetting(PRIO_ADDR, PRIO_FACTORY); + } + + if(settingsVersion < 29) { + writeSetting(VIB_SENS_ADDR, VIB_SENS_FACTORY); + writeSetting(VIB_RETN_ADDR, VIB_RETN_FACTORY); + } + + if(settingsVersion < 31) { + writeSetting(VIB_SQUELCH_ADDR, VIB_SQUELCH_FACTORY); + writeSetting(VIB_DIRECTION_ADDR, VIB_DIRECTION_FACTORY); + } + + if(settingsVersion < 32) { + writeSetting(BREATH_CC2_ADDR, BREATH_CC2_FACTORY); + writeSetting(BREATH_CC2_RISE_ADDR, BREATH_CC2_RISE_FACTORY); + writeSetting(VIB_SENS_BITE_ADDR, VIB_SENS_BITE_FACTORY); + writeSetting(VIB_SQUELCH_BITE_ADDR, VIB_SQUELCH_BITE_FACTORY); + writeSetting(VIB_CONTROL_ADDR, VIB_CONTROL_FACTORY); + + writeSetting(TRILL3_INTERVAL_ADDR, TRILL3_INTERVAL_FACTORY); + writeSetting(BCAS_MODE_ADDR, BCAS_MODE_FACTORY); + writeSetting(DAC_MODE_ADDR, DAC_MODE_FACTORY); + writeSetting(FASTBOOT_ADDR, FASTBOOT_FACTORY); + } + + writeSetting(VERSION_ADDR, EEPROM_VERSION); + hasWritten = true; + } + + + // read all settings from EEPROM + breathThrVal = readSetting(BREATH_THR_ADDR); + breathMaxVal = readSetting(BREATH_MAX_ADDR); + portamThrVal = readSetting(PORTAM_THR_ADDR); + portamMaxVal = readSetting(PORTAM_MAX_ADDR); + pitchbThrVal = readSetting(PITCHB_THR_ADDR); + pitchbMaxVal = readSetting(PITCHB_MAX_ADDR); + transpose = readSetting(TRANSP_ADDR); + MIDIchannel = readSetting(MIDI_ADDR); + breathCC = readSetting(BREATH_CC_ADDR); + breathAT = readSetting(BREATH_AT_ADDR); + velocity = readSetting(VELOCITY_ADDR); + portamento = readSetting(PORTAM_ADDR); + PBdepth = readSetting(PB_ADDR); + extraCT = readSetting(EXTRA_ADDR); + vibrato = readSetting(VIBRATO_ADDR); + deglitch = readSetting(DEGLITCH_ADDR); + extracThrVal = readSetting(EXTRAC_THR_ADDR); + extracMaxVal = readSetting(EXTRAC_MAX_ADDR); + patch = readSetting(PATCH_ADDR); + octave = readSetting(OCTAVE_ADDR); + ctouchThrVal = readSetting(CTOUCH_THR_ADDR); + curve = readSetting(BREATHCURVE_ADDR); + velSmpDl = readSetting(VEL_SMP_DL_ADDR); + velBias = readSetting(VEL_BIAS_ADDR); + pinkySetting = readSetting(PINKY_KEY_ADDR); + fastPatch[0] = readSetting(FP1_ADDR); + fastPatch[1] = readSetting(FP2_ADDR); + fastPatch[2] = readSetting(FP3_ADDR); + fastPatch[3] = readSetting(FP4_ADDR); + fastPatch[4] = readSetting(FP5_ADDR); + fastPatch[5] = readSetting(FP6_ADDR); + fastPatch[6] = readSetting(FP7_ADDR); + dipSwBits = readSetting(DIPSW_BITS_ADDR); + parallel = readSetting(PARAL_ADDR); + rotations[0] = readSetting(ROTN1_ADDR); + rotations[1] = readSetting(ROTN2_ADDR); + rotations[2] = readSetting(ROTN3_ADDR); + rotations[3] = readSetting(ROTN4_ADDR); + priority = readSetting(PRIO_ADDR); + vibSens = readSetting(VIB_SENS_ADDR); + vibRetn = readSetting(VIB_RETN_ADDR); + vibSquelch = readSetting(VIB_SQUELCH_ADDR); + vibDirection = readSetting(VIB_DIRECTION_ADDR); + breathCC2 = readSetting(BREATH_CC2_ADDR); + breathCC2Rise = readSetting(BREATH_CC2_RISE_ADDR); + vibSensBite = readSetting(VIB_SENS_BITE_ADDR); + vibSquelchBite = readSetting(VIB_SQUELCH_BITE_ADDR); + vibControl = readSetting(VIB_CONTROL_ADDR); + + bcasMode = readSetting(BCAS_MODE_ADDR); + + trill3_interval = readSetting(TRILL3_INTERVAL_ADDR); + if(trill3_interval<3 || trill3_interval > 4) trill3_interval = TRILL3_INTERVAL_FACTORY; //Deal with possible bad values + + fastBoot = readSetting(FASTBOOT_ADDR); + dacMode = readSetting(DAC_MODE_ADDR); + + return hasWritten; +} \ No newline at end of file diff --git a/NuEVI/settings.h b/NuEVI/settings.h index bc155e8..06bea74 100644 --- a/NuEVI/settings.h +++ b/NuEVI/settings.h @@ -2,8 +2,6 @@ #ifndef __SETTINGS_H #define __SETTINGS_H - - // EEPROM addresses for settings #define VERSION_ADDR 0 #define BREATH_THR_ADDR 2 @@ -54,9 +52,19 @@ #define VIB_SENS_BITE_ADDR 92 #define VIB_SQUELCH_BITE_ADDR 94 #define VIB_CONTROL_ADDR 96 +#define TRILL3_INTERVAL_ADDR 98 +#define BCAS_MODE_ADDR 100 +#define DAC_MODE_ADDR 102 +#define FASTBOOT_ADDR 104 + + + +//DAC output modes +#define DAC_MODE_BREATH 0 +#define DAC_MODE_PITCH 1 //"factory" values for settings -#define VERSION 32 +#define EEPROM_VERSION 32 #define BREATH_THR_FACTORY 1400 #define BREATH_MAX_FACTORY 4000 #define PORTAM_THR_FACTORY 2600 @@ -101,4 +109,13 @@ #define VIB_SQUELCH_BITE_FACTORY 10 #define VIB_CONTROL_FACTORY 0 +#define TRILL3_INTERVAL_FACTORY 4 +#define BCAS_MODE_FACTORY 0 +#define DAC_MODE_FACTORY DAC_MODE_BREATH +#define FASTBOOT_FACTORY 0 + + +bool readEEPROM(); + + #endif