about summary refs log tree commit diff
path: root/Classes.h
diff options
context:
space:
mode:
authorJared DeCook <jared@shapingthesilence.com>2024-05-24 16:43:34 -0400
committerZach DeCook <zachdecook@librem.one>2024-05-24 16:43:51 -0400
commit9bd3f7d68479570614bbfc56d307486dc1ea29d4 (patch)
tree7b85d09aa44a96126a9a1a3eb421d2322ed6309a /Classes.h
parentfddb48de8044e62dda63046dff373b33e4b104a9 (diff)
downloadHexBoard-9bd3f7d68479570614bbfc56d307486dc1ea29d4.tar.gz
HexBoard Firmware Golden Master
I think that’s what they call it when the assumption is it’s ready to ship. Version 1.0.0 is ready!
Diffstat (limited to 'Classes.h')
-rw-r--r--Classes.h158
1 files changed, 0 insertions, 158 deletions
diff --git a/Classes.h b/Classes.h
deleted file mode 100644
index 133d3a5..0000000
--- a/Classes.h
+++ /dev/null
@@ -1,158 +0,0 @@
-// class definitions are in a header so that

-// they get read before compiling the main program.

-

-class tuningDef {

-public:

-  std::string name; // limit is 17 characters for GEM menu

-  byte cycleLength; // steps before period/cycle/octave repeats

-  float stepSize;   // in cents, 100 = "normal" semitone.

-  SelectOptionInt keyChoices[MAX_SCALE_DIVISIONS];

-  int spanCtoA() {

-    return (- keyChoices[0].val_int);

-  };

-};

-

-class layoutDef {

-public:

-  std::string name;    // limit is 17 characters for GEM menu

-  bool isPortrait;     // affects orientation of the GEM menu only.

-  byte hexMiddleC;     // instead of "what note is button 1", "what button is the middle"

-  int8_t acrossSteps;  // defined this way to be compatible with original v1.1 firmare

-  int8_t dnLeftSteps;  // defined this way to be compatible with original v1.1 firmare

-  byte tuning;         // index of the tuning that this layout is designed for

-};

-

-class colorDef {

-public:

-  float hue;

-  byte sat;

-  byte val;

-  colorDef mixWithWhite() {

-    colorDef temp;

-    temp.hue = this->hue;

-    temp.sat = ((this->sat > SAT_TINT) ? SAT_TINT : this->sat);

-    temp.val = VALUE_FULL;

-    return temp;

-  };

-};

-

-class paletteDef {

-public:

-  colorDef swatch[MAX_SCALE_DIVISIONS]; // the different colors used in this palette

-  byte colorNum[MAX_SCALE_DIVISIONS];   // map key (c,d...) to swatches

-  colorDef getColor(byte givenStepFromC) {

-    return swatch[colorNum[givenStepFromC] - 1];

-  };

-  float getHue(byte givenStepFromC) {

-    return getColor(givenStepFromC).hue;

-  };

-  byte getSat(byte givenStepFromC) {

-    return getColor(givenStepFromC).sat;

-  };

-  byte getVal(byte givenStepFromC) {

-    return getColor(givenStepFromC).val;

-  };

-};

-

-class buttonDef {

-public:

-  byte     btnState = 0;        // binary 00 = off, 01 = just pressed, 10 = just released, 11 = held

-  void interpBtnPress(bool isPress) {

-    btnState = (((btnState << 1) + isPress) & 3);

-  };

-  int8_t   coordRow = 0;        // hex coordinates

-  int8_t   coordCol = 0;        // hex coordinates

-  uint32_t timePressed = 0;     // timecode of last press

-  uint32_t LEDcolorAnim = 0;    // calculate it once and store value, to make LED playback snappier 

-  uint32_t LEDcolorPlay = 0;    // calculate it once and store value, to make LED playback snappier

-  uint32_t LEDcolorOn = 0;      // calculate it once and store value, to make LED playback snappier

-  uint32_t LEDcolorOff = 0;     // calculate it once and store value, to make LED playback snappier

-  bool     animate = 0;         // hex is flagged as part of the animation in this frame, helps make animations smoother

-  int16_t  stepsFromC = 0;      // number of steps from C4 (semitones in 12EDO; microtones if >12EDO)

-  bool     isCmd = 0;           // 0 if it's a MIDI note; 1 if it's a MIDI control cmd

-  bool     inScale = 0;         // 0 if it's not in the selected scale; 1 if it is

-  byte     note = UNUSED_NOTE;  // MIDI note or control parameter corresponding to this hex

-  int16_t  bend = 0;            // in microtonal mode, the pitch bend for this note needed to be tuned correctly

-  byte     channel = 0;         // what MIDI channel this note is playing on

-  float    frequency = 0.0;     // what frequency to ring on the buzzer

-};

-

-class wheelDef {

-public:

-  bool alternateMode; // two ways to control

-  bool isSticky;      // TRUE if you leave value unchanged when no buttons pressed

-  byte* topBtn;       // pointer to the key Status of the button you use as this button

-  byte* midBtn;

-  byte* botBtn;

-  int16_t minValue;

-  int16_t maxValue;

-  int* stepValue; // this can be changed via GEM menu

-  int16_t defValue; // snapback value

-  int16_t curValue;

-  int16_t targetValue;

-  uint32_t timeLastChanged;

-  void setTargetValue() {

-    if (alternateMode) {

-      if (*midBtn >> 1) { // middle button toggles target (0) vs. step (1) mode

-        int16_t temp = curValue;

-            if (*topBtn == 1)     {temp += *stepValue;}; // tap button

-            if (*botBtn == 1)     {temp -= *stepValue;}; // tap button

-            if (temp > maxValue)  {temp  = maxValue;} 

-        else if (temp <= minValue) {temp  = minValue;};

-        targetValue = temp;

-      } else {

-        switch (((*topBtn >> 1) << 1) + (*botBtn >> 1)) {

-          case 0b10:   targetValue = maxValue;     break;

-          case 0b11:   targetValue = defValue;     break;

-          case 0b01:   targetValue = minValue;     break;

-          default:     targetValue = curValue;     break;

-        };

-      };

-    } else {

-      switch (((*topBtn >> 1) << 2) + ((*midBtn >> 1) << 1) + (*botBtn >> 1)) {

-        case 0b100:  targetValue = maxValue;                         break;

-        case 0b110:  targetValue = (3 * maxValue + minValue) / 4;    break;

-        case 0b010:

-        case 0b111:

-        case 0b101:  targetValue = (maxValue + minValue) / 2;        break;

-        case 0b011:  targetValue = (maxValue + 3 * minValue) / 4;    break;

-        case 0b001:  targetValue = minValue;                         break;

-        case 0b000:  targetValue = (isSticky ? curValue : defValue); break;

-        default: break;

-      };

-    }

-  };

-  bool updateValue(uint32_t givenTime) {

-    int16_t temp = targetValue - curValue;

-    if (temp != 0) {

-      if ((givenTime - timeLastChanged) >= CC_MSG_COOLDOWN_MICROSECONDS ) {

-        timeLastChanged = givenTime;

-        if (abs(temp) < *stepValue) {

-          curValue = targetValue;

-        } else {

-          curValue = curValue + (*stepValue * (temp / abs(temp)));

-        };

-        return 1;

-      } else {

-        return 0;

-      };

-    } else {

-      return 0;

-    };

-  };   

-};

-// back button

-

-class scaleDef {

-public:

-  std::string name;

-  byte tuning;

-  byte pattern[MAX_SCALE_DIVISIONS];

-};

-

-// this class should only be touched by the 2nd core

-class oscillator {

-public:

-  uint16_t increment = 0;

-  uint16_t counter = 0;

-};
\ No newline at end of file