Refactored for teensy 4.0, xEvi hardware
- Switched to platformio, ino -> cpp - MPRLS for pressure sensor - Added basic ICM support - Removed widi, battery, other features not supported in xEvi - Removed legacy options/processing - Added LED strip support - Added encoder support - Reworked menu code to use encoders/be more flexible
This commit is contained in:
parent
c58c3f9e46
commit
01d193c9b3
92 changed files with 69119 additions and 73272 deletions
123
NuEVI/src/settings.h
Normal file
123
NuEVI/src/settings.h
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
#ifndef __SETTINGS_H
|
||||
#define __SETTINGS_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "globals.h"
|
||||
|
||||
|
||||
#define EEPROM_VERSION 1
|
||||
#define EEPROM_VERSION_ADDR 0
|
||||
#define SETTINGS_OFFSET 2
|
||||
#define PRESET_MAX_SIZE 128 // Leave extra space for future settings
|
||||
#define PRESET_COUNT 8
|
||||
#define CALIBRATION_MAX_SIZE 54 // Leave extra space for future settings
|
||||
#define EEPROM_SIZE 1080 // Cannot exceed this amount of EEPROM space
|
||||
|
||||
static_assert(SETTINGS_OFFSET + PRESET_MAX_SIZE * PRESET_COUNT + CALIBRATION_MAX_SIZE <= EEPROM_SIZE,
|
||||
"Not enough EEPROM");
|
||||
|
||||
/**
|
||||
* Sensor calibration is global across presets
|
||||
*/
|
||||
struct calibration_t {
|
||||
int16_t breathThrValOffset = 5;
|
||||
int16_t breathMaxValOffset = 1500;
|
||||
int16_t breathAltThrValOffset = 5;
|
||||
int16_t breathAltMaxValOffset = 1500;
|
||||
int16_t biteThrVal = 50;
|
||||
int16_t biteMaxVal = 150;
|
||||
int16_t pbDnThrVal = 50;
|
||||
int16_t pbDnMaxVal = 150;
|
||||
int16_t pbUpThrVal = 50;
|
||||
int16_t pbUpMaxVal = 150;
|
||||
int16_t leverThrVal = 50;
|
||||
int16_t leverMaxVal = 150;
|
||||
int16_t extraThrVal = 50;
|
||||
int16_t extraMaxVal = 150;
|
||||
int16_t ctouchThrVal = 80;
|
||||
uint8_t _reserved[24];
|
||||
};
|
||||
|
||||
static_assert(sizeof(calibration_t) == CALIBRATION_MAX_SIZE, "calibration data wrong size");
|
||||
|
||||
/**
|
||||
* Per-preset config
|
||||
*/
|
||||
struct preset_t {
|
||||
uint8_t MIDIchannel = 1; // Midi channel to send on
|
||||
uint8_t breathCC = 2; // breath CC selection
|
||||
uint8_t altBreathCC = 70; // breath CC selection
|
||||
uint8_t extraCC = 1; // extra CC selection
|
||||
uint8_t leverCC = 7; // "lever" CC selection
|
||||
uint8_t biteCC = 11; // bite CC selection
|
||||
uint8_t fixedVelocity = 0; // Zero = not fixed
|
||||
uint8_t portamentoLimit = 127; // 1-127 - max portamento level
|
||||
uint8_t PBdepth = 1; // OFF:1-12 divider
|
||||
uint8_t deglitch = 20; // debounes time for key/roller inputs
|
||||
uint8_t breathCurve = 4; // breath curve selection
|
||||
uint8_t velSmpDl = 20; // velocity sample delay
|
||||
uint8_t velBias = 0; // velocity bias
|
||||
uint8_t pinkySetting = 12; // 0 - 11 (QuickTranspose -12 to -1), 12 (pb/2), 13 - 24 (QuickTranspose +1 to +12), 25 (EC2), 26 (ECSW), 27 (LVL), 28 (LVLP)
|
||||
uint8_t breathInterval; // 3-15
|
||||
int8_t trill3_interval = 4;
|
||||
uint8_t vibSquelch = 12; // vibrato signal squelch
|
||||
uint8_t cvVibRate = 0; // OFF, 1 - 8 CV extra controller LFO vibrato rate 4.5Hz to 8Hz
|
||||
int8_t cvTune = 0;
|
||||
int8_t cvScale = 0;
|
||||
|
||||
PortamentoMode portamentoMode;
|
||||
BreathMode breathMode = BreathMode::BREATH_LSB_AT;
|
||||
FingeringMode fingering = FingeringMode::EVI;
|
||||
RollerMode rollerMode = RollerMode::HIGHEST;
|
||||
ExtraControl biteControl = ExtraControl::GLIDE;
|
||||
ExtraControl leverControl = ExtraControl::VIBRATO;
|
||||
ExtraControl extraControl = ExtraControl::CC;
|
||||
|
||||
VibratoMode vibratoMode = VSTART_DOWN; // direction of first vibrato wave UPWD or DNWD
|
||||
uint8_t vibratoDepth = 1; // OFF:1-9
|
||||
uint8_t vibSens = 2; // vibrato sensitivity
|
||||
uint8_t vibRetn = 2; // vibrato return speed
|
||||
|
||||
uint8_t knob1CC = 71;
|
||||
uint8_t knob2CC = 72;
|
||||
uint8_t knob3CC = 73;
|
||||
uint8_t knob4CC = 74;
|
||||
|
||||
uint8_t icmAccelMode;
|
||||
uint8_t icmAccelCC;
|
||||
uint8_t icmTiltMode;
|
||||
uint8_t icmTiltCC;
|
||||
uint8_t icmRotationMode;
|
||||
uint8_t icmRotationCC;
|
||||
|
||||
uint8_t _reserved[87];
|
||||
};
|
||||
|
||||
static_assert(sizeof(preset_t) == PRESET_MAX_SIZE, "preset_t must be 128 bytes");
|
||||
extern preset_t presets[PRESET_COUNT];
|
||||
extern calibration_t calibration;
|
||||
extern preset_t *currentPreset;
|
||||
|
||||
#define NO_CHECKSUM 0x7F007F00
|
||||
|
||||
void readEEPROM(const bool factoryReset);
|
||||
void writePreset(uint8_t preset);
|
||||
void writeCalibration();
|
||||
|
||||
//Functions for config management mode
|
||||
void sendSysexSettings();
|
||||
void sendSysexMessage(const char* messageCode);
|
||||
void sendSysexVersion();
|
||||
|
||||
void handleSysex(uint8_t *data, unsigned int length);
|
||||
void handleSysexChunk(const uint8_t *data, uint16_t length, bool last);
|
||||
|
||||
uint32_t crc32(const uint8_t *message, const size_t length);
|
||||
|
||||
void configInitScreen();
|
||||
void configShowMessage(const char* message);
|
||||
|
||||
void configModeSetup();
|
||||
void configModeLoop();
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue