From b7f6ab899d3b1f2bb0216f2260d4966f34a7b066 Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan@faked.org>
Date: Sun, 4 Jun 2023 21:31:56 +0200
Subject: [PATCH] save brightness/interval to preferences

---
 src/display.cpp    |  2 --
 src/display.h      |  2 +-
 src/gameoflife.cpp |  1 +
 src/main.cpp       | 17 +++++++++++++----
 src/network.cpp    |  4 ++++
 src/network.h      |  1 +
 6 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/display.cpp b/src/display.cpp
index a523205..c30d059 100644
--- a/src/display.cpp
+++ b/src/display.cpp
@@ -14,8 +14,6 @@ const uint8_t kMatrixOptions = (SMARTMATRIX_OPTIONS_NONE);    // see http://docs
 const uint8_t kBackgroundLayerOptions = (SM_BACKGROUND_OPTIONS_NONE);
 const uint8_t kIndexedLayerOptions = (SM_INDEXED_OPTIONS_NONE);
 
-int defaultBrightness = (brightnessPercent * 255) / 100;
-
 rgb24 colorWhite = {0xff, 0xff, 0xff};
 
 SMARTMATRIX_ALLOCATE_BUFFERS(matrix, kMatrixWidth, kMatrixHeight, kRefreshDepth, kDmaBufferRows, kPanelType, kMatrixOptions);
diff --git a/src/display.h b/src/display.h
index be4764c..52ccbe3 100644
--- a/src/display.h
+++ b/src/display.h
@@ -6,7 +6,7 @@
 #include <SmartMatrix.h>
 
 extern bool runGame;
-extern int brightnessPercent;
+extern int defaultBrightness;
 extern int gameEra;
 
 void setupDisplay();
diff --git a/src/gameoflife.cpp b/src/gameoflife.cpp
index d5d57e2..58995c6 100644
--- a/src/gameoflife.cpp
+++ b/src/gameoflife.cpp
@@ -18,6 +18,7 @@ int finalTicks;
 int cellsAliveNow;
 int cellsAliveBefore;
 int noEvolutionTicks;
+int noEvolutionTicksLimit = 100;
 
 const uint scoreScreenTimeout = 5000;
 unsigned long currentMillis;
diff --git a/src/main.cpp b/src/main.cpp
index 5c4edae..2ed21b6 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,13 +1,14 @@
-#define CONFIG_HEAP_CORRUPTION_DETECTION HEAP_POISONING_LIGHT
 #include <Arduino.h>
+#include <Preferences.h>
 #include "utils.h"
 #include "network.h"
 #include "display.h"
 #include "gameoflife.h"
 
-int noEvolutionTicksLimit = 100;
-int brightnessPercent = 20;
-int gameInterval = 100;
+Preferences preferences;
+
+int defaultBrightness;
+int gameInterval;
 
 unsigned long lastTick;
 
@@ -18,10 +19,18 @@ void showTitle() {
   showMessage(msg);
 }
 
+void setupSettings() {
+  preferences.begin("settings", true); // true = readonly
+  defaultBrightness = preferences.getUInt("brightness", 50);
+  gameInterval = preferences.getUInt("interval", 100);
+  preferences.end();
+}
+
 void setup()
 {
   Serial.begin(115200);
   logLine("", true);
+  setupSettings();
   setupDisplay();
   showTitle();
   setupNetwork();
diff --git a/src/network.cpp b/src/network.cpp
index a13222b..272ad92 100644
--- a/src/network.cpp
+++ b/src/network.cpp
@@ -266,4 +266,8 @@ void updateConfig(StaticJsonDocument<200U> doc)
   gameInterval = doc["config"]["interval"];
   defaultBrightness = doc["config"]["brightness"];
   displayBrightness(defaultBrightness);
+  preferences.begin("settings", false);
+  preferences.putUInt("brightness", defaultBrightness);
+  preferences.putUInt("interval", gameInterval);
+  preferences.end();
 }
diff --git a/src/network.h b/src/network.h
index f83d916..c22f54a 100644
--- a/src/network.h
+++ b/src/network.h
@@ -15,6 +15,7 @@
 extern bool runGame;
 extern int defaultBrightness;
 extern int gameInterval;
+extern Preferences preferences;
 
 void setupNetwork();
 void setupMDNS();
-- 
GitLab