From db4b746743f39622a909363f59e865eb32b33e44 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Thu, 11 Jun 2020 14:47:13 +0200 Subject: [PATCH] Introduced settings for time intervals --- src/main.cpp | 27 +++++++++++---------------- src/presets.h | 11 ++++++++++- src/settings.h | 13 +++++++++++++ src/settingsaccessors.h | 5 +++++ 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 2810c7e..a8c5f32 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -32,12 +32,8 @@ ModeInterface *lastMode{}; millis_t lastPotiRead{}; millis_t lastModeUpdate{}; millis_t lastStatsUpdate{}; +millis_t lastDisplayUpdate{}; millis_t lastDisplayRedraw{}; - -constexpr auto potiReadRate = 50; -constexpr auto modeUpdateRate = 50; -constexpr auto statsUpdateRate = 50; -constexpr auto displayRedrawRate = 50; } void setup() @@ -150,18 +146,14 @@ void loop() dpad3wire::update(); #endif - if (!lastPotiRead) - lastPotiRead = now; - else if (now - lastPotiRead >= 1000/potiReadRate) + if (!lastPotiRead || now - lastPotiRead >= 1000/settings.boardcomputerHardware.timersSettings.potiReadRate) { readPotis(); lastPotiRead = now; } - if (!lastModeUpdate) - lastModeUpdate = now; - else if (now - lastModeUpdate >= 1000/modeUpdateRate) + if (!lastModeUpdate || now - lastModeUpdate >= 1000/settings.boardcomputerHardware.timersSettings.modeUpdateRate) { if (lastMode != currentMode) { @@ -180,18 +172,21 @@ void loop() performance.current++; } - if (!lastStatsUpdate) - lastStatsUpdate = now; - else if (now - lastStatsUpdate >= 1000/statsUpdateRate) + if (!lastStatsUpdate || now - lastStatsUpdate >= 1000/settings.boardcomputerHardware.timersSettings.statsUpdateRate) { updateAccumulators(); pushStats(); lastStatsUpdate = now; } - updateDisplay(); + if (!lastDisplayUpdate || now - lastDisplayUpdate >= 1000/settings.boardcomputerHardware.timersSettings.displayUpdateRate) + { + updateDisplay(); - if (!lastDisplayRedraw || now - lastDisplayRedraw >= 1000/displayRedrawRate) + lastDisplayUpdate = now; + } + + if (!lastDisplayRedraw || now - lastDisplayRedraw >= 1000/settings.boardcomputerHardware.timersSettings.displayRedrawRate) { redrawDisplay(); diff --git a/src/presets.h b/src/presets.h index 04bb7e5..a37da5f 100644 --- a/src/presets.h +++ b/src/presets.h @@ -76,6 +76,14 @@ constexpr Settings::ControllerHardware spinnerControllerHardware { .swapFrontBack = false }; +constexpr Settings::BoardcomputerHardware::TimersSettings defaultTimersSettings { + .potiReadRate = 50, + .modeUpdateRate = 50, + .statsUpdateRate = 50, + .displayUpdateRate = 50, + .displayRedrawRate = 50 +}; + constexpr Settings::BoardcomputerHardware defaultBoardcomputerHardware { .sampleCount = 100, .gasMin = DEFAULT_GASMIN, @@ -93,7 +101,8 @@ constexpr Settings::BoardcomputerHardware defaultBoardcomputerHardware { .gametrakDistMin = DEFAULT_GAMETRAKDISTMIN, .gametrakDistMax = DEFAULT_GAMETRAKDISTMAX, #endif - .swapScreenBytes = DEFAULT_SWAPSCREENBYTES + .swapScreenBytes = DEFAULT_SWAPSCREENBYTES, + .timersSettings = defaultTimersSettings }; constexpr Settings::DefaultMode defaultDefaultMode { diff --git a/src/settings.h b/src/settings.h index b99653b..b26902b 100644 --- a/src/settings.h +++ b/src/settings.h @@ -60,6 +60,14 @@ struct Settings int16_t gametrakXMin, gametrakXMax, gametrakYMin, gametrakYMax, gametrakDistMin, gametrakDistMax; #endif bool swapScreenBytes; + + struct TimersSettings { + int16_t potiReadRate; + int16_t modeUpdateRate; + int16_t statsUpdateRate; + int16_t displayUpdateRate; + int16_t displayRedrawRate; + } timersSettings; } boardcomputerHardware; struct DefaultMode { @@ -143,6 +151,11 @@ void Settings::executeForEverySetting(T &&callable) callable("gametrakDistMax", boardcomputerHardware.gametrakDistMax); #endif callable("swapScreenBytes", boardcomputerHardware.swapScreenBytes); + callable("potiReadRate", boardcomputerHardware.timersSettings.potiReadRate); + callable("modeUpdateRate", boardcomputerHardware.timersSettings.modeUpdateRate); + callable("statsUpdateRate", boardcomputerHardware.timersSettings.statsUpdateRate); + callable("displayUpdateRa", boardcomputerHardware.timersSettings.displayUpdateRate); + callable("displayRedrawRa", boardcomputerHardware.timersSettings.displayRedrawRate); callable("default.modelMo", defaultMode.modelMode); callable("default.enableS", defaultMode.enableSmoothing); diff --git a/src/settingsaccessors.h b/src/settingsaccessors.h index 86134b9..a619c6f 100644 --- a/src/settingsaccessors.h +++ b/src/settingsaccessors.h @@ -76,6 +76,11 @@ struct GametrakDistMinAccessor : public RefAccessorSaveSettings { int16 struct GametrakDistMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakDistMax; } }; #endif struct SwapScreenBytesAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.boardcomputerHardware.swapScreenBytes; } }; +struct PotiReadRateAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.timersSettings.potiReadRate; } }; +struct ModeUpdateRateAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.timersSettings.modeUpdateRate; } }; +struct StatsUpdateRateAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.timersSettings.statsUpdateRate; } }; +struct DisplayUpdateRateAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.timersSettings.displayUpdateRate; } }; +struct DisplayRedrawRateAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.timersSettings.displayRedrawRate; } }; struct DefaultModeModelModeAccessor : public RefAccessorSaveSettings { UnifiedModelMode &getRef() const override { return settings.defaultMode.modelMode; } }; struct DefaultModeEnableSmoothingAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.defaultMode.enableSmoothing; } };