From 675ab202675998038914735ed2c8d3da7828b0ed Mon Sep 17 00:00:00 2001 From: Adam Wonak Date: Sat, 9 Aug 2025 19:42:53 -0700 Subject: [PATCH] roll back text const. remove bootsplash. add rotate disp to metadata. --- firmware/Gravity/Gravity.ino | 7 +-- firmware/Gravity/display.h | 86 ++++++++++----------------------- firmware/Gravity/save_state.cpp | 3 +- firmware/Gravity/save_state.h | 5 +- 4 files changed, 32 insertions(+), 69 deletions(-) diff --git a/firmware/Gravity/Gravity.ino b/firmware/Gravity/Gravity.ino index 2d6c54c..aef4ab8 100644 --- a/firmware/Gravity/Gravity.ino +++ b/firmware/Gravity/Gravity.ino @@ -66,10 +66,6 @@ void setup() { // Start Gravity. gravity.Init(); - // Show bootsplash when initializing firmware. - Bootsplash(); - delay(2000); - // Initialize the state manager. This will load settings from EEPROM stateManager.initialize(app); InitGravity(app); @@ -237,8 +233,6 @@ void HandleEncoderPressed() { break; case PARAM_MAIN_FACTORY_RESET: if (app.selected_sub_param == 0) { // Erase - // Show bootsplash during slow erase operation. - Bootsplash(); stateManager.factoryReset(app); InitGravity(app); } @@ -387,6 +381,7 @@ void InitGravity(AppState& app) { gravity.clock.SetTempo(app.tempo); gravity.clock.SetSource(app.selected_source); gravity.encoder.SetReverseDirection(app.encoder_reversed); + gravity.display.setFlipMode(app.rotate_display ? 1 : 0); } void ResetOutputs() { diff --git a/firmware/Gravity/display.h b/firmware/Gravity/display.h index 6f15d4d..7c4abfa 100644 --- a/firmware/Gravity/display.h +++ b/firmware/Gravity/display.h @@ -125,22 +125,6 @@ enum ParamsChannelPage : uint8_t { PARAM_CH_LAST, }; -// Common/resused strings stored as const to save on flash memory. -const char* const STR_24_PPQN = "24 PPQN"; -const char* const STR_4_PPQN = "4 PPQN"; -const char* const STR_1_PPQN = "1 PPQN"; -const char* const STR_CV_1 = "CV 1"; -const char* const STR_CV_2 = "CV 2"; -const char* const STR_NONE = "NONE"; -const char* const STR_EXT = "EXT"; -const char* const STR_X = "X"; -const char* const STR_DEFAULT = "DEFAULT"; -const char* const STR_REVERSED = "REVERSED"; -const char* const STR_FLIPPED = "FLIPPED"; -const char* const STR_BACK = "BACK TO MAIN"; -const char* const STR_EUC_STEPS = "EUCLID STEPS"; -const char* const STR_EUC_HITS = "EUCLID HITS"; - // Helper function to draw centered text void drawCenteredText(const char* text, int y, const uint8_t* font) { gravity.display.setFont(font); @@ -254,27 +238,27 @@ void DisplayMainPage() { case PARAM_MAIN_TEMPO: // Serial MIDI is too unstable to display bpm in real time. if (app.selected_source == Clock::SOURCE_EXTERNAL_MIDI) { - mainText = STR_EXT; + mainText = F("EXT"); } else { mainText = String(gravity.clock.Tempo()); } subText = F("BPM"); break; case PARAM_MAIN_SOURCE: - mainText = STR_EXT; + mainText = F("EXT"); switch (app.selected_source) { case Clock::SOURCE_INTERNAL: mainText = F("INT"); subText = F("CLOCK"); break; case Clock::SOURCE_EXTERNAL_PPQN_24: - subText = STR_24_PPQN; + subText = F("24 PPQN"); break; case Clock::SOURCE_EXTERNAL_PPQN_4: - subText = STR_4_PPQN; + subText = F("4 PPQN"); break; case Clock::SOURCE_EXTERNAL_PPQN_1: - subText = STR_1_PPQN; + subText = F("1 PPQN"); break; case Clock::SOURCE_EXTERNAL_MIDI: subText = F("MIDI"); @@ -285,13 +269,13 @@ void DisplayMainPage() { mainText = F("RUN"); switch (app.cv_run) { case 0: - subText = STR_NONE; + subText = F("NONE"); break; case 1: - subText = STR_CV_1; + subText = F("CV 1"); break; case 2: - subText = STR_CV_2; + subText = F("CV 2"); break; } break; @@ -299,13 +283,13 @@ void DisplayMainPage() { mainText = F("RST"); switch (app.cv_reset) { case 0: - subText = STR_NONE; + subText = F("NONE"); break; case 1: - subText = STR_CV_1; + subText = F("CV 1"); break; case 2: - subText = STR_CV_2; + subText = F("CV 2"); break; } break; @@ -316,29 +300,29 @@ void DisplayMainPage() { subText = F("PULSE OFF"); break; case Clock::PULSE_PPQN_24: - subText = STR_24_PPQN; + subText = F("24 PPQN PULSE"); break; case Clock::PULSE_PPQN_4: - subText = STR_4_PPQN; + subText = F("4 PPQN PULSE"); break; case Clock::PULSE_PPQN_1: - subText = STR_1_PPQN; + subText = F("1 PPQN PULSE"); break; } break; case PARAM_MAIN_ENCODER_DIR: mainText = F("DIR"); - subText = app.selected_sub_param == 0 ? STR_DEFAULT : STR_REVERSED; + subText = app.selected_sub_param == 0 ? F("DEFAULT") : F("REVERSED"); break; case PARAM_MAIN_ROTATE_DISP: mainText = F("ROT"); - subText = app.selected_sub_param == 0 ? STR_DEFAULT : STR_FLIPPED; + subText = app.selected_sub_param == 0 ? F("DEFAULT") : F("FLIPPED"); break; case PARAM_MAIN_SAVE_DATA: case PARAM_MAIN_LOAD_DATA: if (app.selected_sub_param == StateManager::MAX_SAVE_SLOTS) { - mainText = STR_X; - subText = STR_BACK; + mainText = F("x"); + subText = F("BACK TO MAIN"); } else { // Indicate currently active slot. if (app.selected_sub_param == app.selected_save_slot) { @@ -355,8 +339,8 @@ void DisplayMainPage() { mainText = F("DEL"); subText = F("FACTORY RESET"); } else { - mainText = STR_X; - subText = STR_BACK; + mainText = F("x"); + subText = F("BACK TO MAIN"); } break; } @@ -387,7 +371,7 @@ void DisplayChannelPage() { switch (app.selected_param) { case PARAM_CH_MOD: { - int mod_value = withCvMod ? ch.getClockModWithMod(cv1, cv2): ch.getClockMod(); + int mod_value = withCvMod ? ch.getClockModWithMod(cv1, cv2) : ch.getClockMod(); if (mod_value > 1) { mainText = F("/"); mainText += String(mod_value); @@ -415,16 +399,16 @@ void DisplayChannelPage() { ch.getSwing() == 50 ? mainText = F("OFF") : mainText = String(withCvMod ? ch.getSwingWithMod(cv1, cv2) : ch.getSwing()) + F("%"); - subText = F("DOWN BEAT"); + subText = "DOWN BEAT"; swingDivisionMark(); break; case PARAM_CH_EUC_STEPS: mainText = String(withCvMod ? ch.getStepsWithMod(cv1, cv2) : ch.getSteps()); - subText = STR_EUC_STEPS; + subText = "EUCLID STEPS"; break; case PARAM_CH_EUC_HITS: mainText = String(withCvMod ? ch.getHitsWithMod(cv1, cv2) : ch.getHits()); - subText = STR_EUC_HITS; + subText = "EUCLID HITS"; break; case PARAM_CH_CV1_DEST: case PARAM_CH_CV2_DEST: { @@ -449,10 +433,10 @@ void DisplayChannelPage() { subText = F("SWING"); break; case CV_DEST_EUC_STEPS: - subText = STR_EUC_STEPS; + subText = F("EUCLID STEPS"); break; case CV_DEST_EUC_HITS: - subText = STR_EUC_HITS; + subText = F("EUCLID HITS"); break; } break; @@ -515,22 +499,4 @@ void UpdateDisplay() { } while (gravity.display.nextPage()); } -void Bootsplash() { - gravity.display.firstPage(); - do { - int textWidth; - String loadingText = F("LOADING...."); - gravity.display.setFont(TEXT_FONT); - - textWidth = gravity.display.getStrWidth(StateManager::SKETCH_NAME); - gravity.display.drawStr(16 + (textWidth / 2), 20, StateManager::SKETCH_NAME); - - textWidth = gravity.display.getStrWidth(StateManager::SEMANTIC_VERSION); - gravity.display.drawStr(16 + (textWidth / 2), 32, StateManager::SEMANTIC_VERSION); - - textWidth = gravity.display.getStrWidth(loadingText.c_str()); - gravity.display.drawStr(26 + (textWidth / 2), 44, loadingText.c_str()); - } while (gravity.display.nextPage()); -} - #endif // DISPLAY_H diff --git a/firmware/Gravity/save_state.cpp b/firmware/Gravity/save_state.cpp index 4950d7e..f5f1f4d 100644 --- a/firmware/Gravity/save_state.cpp +++ b/firmware/Gravity/save_state.cpp @@ -17,7 +17,7 @@ // Define the constants for the current firmware. const char StateManager::SKETCH_NAME[] = "ALT GRAVITY"; -const char StateManager::SEMANTIC_VERSION[] = "V2.0.0BETA4"; // NOTE: This should match the version in the library.properties file. +const char StateManager::SEMANTIC_VERSION[] = "2.0.1"; // NOTE: This should match the version in the library.properties file. // Number of available save slots. const byte StateManager::MAX_SAVE_SLOTS = 10; @@ -212,6 +212,7 @@ void StateManager::_saveMetadata(const AppState& app) { // Global user settings current_meta.selected_save_slot = app.selected_save_slot; current_meta.encoder_reversed = app.encoder_reversed; + current_meta.rotate_display = app.rotate_display; EEPROM.put(METADATA_START_ADDR, current_meta); interrupts(); diff --git a/firmware/Gravity/save_state.h b/firmware/Gravity/save_state.h index 34bfffe..29226e7 100644 --- a/firmware/Gravity/save_state.h +++ b/firmware/Gravity/save_state.h @@ -52,11 +52,12 @@ class StateManager { // This struct holds the data that identifies the firmware version. struct Metadata { - char sketch_name[16]; - char version[16]; + char sketch_name[12]; + char version[5]; // Additional global/hardware settings byte selected_save_slot; bool encoder_reversed; + bool rotate_display; }; struct ChannelState { byte base_clock_mod_index;