From da6326db0fded87110163d7fc93f200afe6e202d Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Thu, 9 May 2024 14:32:42 +0700 Subject: [PATCH] Add display ask for offline/online mode --- examples/OneOpenAir/OneOpenAir.ino | 35 +++++++++++++++++++++++------- src/AgConfigure.cpp | 22 +++++++++++++++++++ src/AgConfigure.h | 2 ++ 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index 2f29ee8..189b1ee 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -89,7 +89,6 @@ static LocalServer localServer(Serial, openMetrics, measurements, configuration, static int pmFailCount = 0; static uint32_t factoryBtnPressTime = 0; static int getCO2FailCount = 0; -static bool offlineMode = false; static AgFirmwareMode fwMode = FW_MODE_I_9PSL; static bool ledBarButtonTest = false; @@ -165,8 +164,30 @@ void setup() { stateMachine.executeLedBarPowerUpTest(); } else { ledBarEnabledUpdate(); - connectToWifi = true; } + + /** Show message confirm offline mode. */ + oledDisplay.setText( + "Press now for", + configuration.isOfflineMode() ? "online mode" : "offline mode", ""); + uint32_t stime = millis(); + while (true) { + if (ag->button.getState() == ag->button.BUTTON_PRESSED) { + configuration.setOfflineMode(!configuration.isOfflineMode()); + + oledDisplay.setText( + "Offline Mode", + configuration.isOfflineMode() ? " = True" : " = False", ""); + delay(1000); + break; + } + uint32_t ms = (uint32_t)(millis() - stime); + if (ms >= 3000) { + break; + } + } + connectToWifi = !configuration.isOfflineMode(); + } else { connectToWifi = true; } @@ -200,8 +221,6 @@ void setup() { } else { ledBarEnabledUpdate(); } - } else { - offlineMode = true; } } } @@ -249,9 +268,9 @@ void loop() { } } - /** Auto reset external watchdog timer on offline mode and - * postDataToAirGradient disabled. */ - if (offlineMode || (configuration.isPostDataToAirGradient() == false)) { + /** Auto reset watchdog timer if offline mode or postDataToAirGradient */ + if (configuration.isOfflineMode() || + (configuration.isPostDataToAirGradient() == false)) { watchdogFeedSchedule.run(); } @@ -528,7 +547,7 @@ static void oneIndoorInit(void) { } /** Run LED test on start up */ - oledDisplay.setText("Press now for", "LED test &", "offline mode"); + oledDisplay.setText("Press now for", "LED test", ""); ledBarButtonTest = false; uint32_t stime = millis(); while (true) { diff --git a/src/AgConfigure.cpp b/src/AgConfigure.cpp index 8b642fd..8ade2c3 100644 --- a/src/AgConfigure.cpp +++ b/src/AgConfigure.cpp @@ -40,6 +40,7 @@ JSON_PROP_DEF(ledbarBrightness); JSON_PROP_DEF(displayBrightness); JSON_PROP_DEF(co2CalibrationRequested); JSON_PROP_DEF(ledBarTestRequested); +JSON_PROP_DEF(offlineMode); JSONVar jconfig; static bool jsonTypeInvalid(JSONVar root, String validType) { @@ -145,6 +146,7 @@ void Configuration::defaultConfig(void) { jconfig[jprop_noxLearningOffset] = 12; jconfig[jprop_abcDays] = 8; jconfig[jprop_model] = ""; + jconfig[jprop_offlineMode] = false; saveConfig(); } @@ -1077,6 +1079,15 @@ void Configuration::toConfig(const char *buf) { logInfo("toConfig: displayBrightness changed"); } + if (JSON.typeof_(jconfig[jprop_offlineMode]) != "boolean") { + isInvalid = true; + } else { + isInvalid = false; + } + if (isInvalid) { + jconfig[jprop_offlineMode] = false; + } + if (changed) { saveConfig(); } @@ -1139,6 +1150,17 @@ int Configuration::getDisplayBrightness(void) { return value; } +bool Configuration::isOfflineMode(void) { + bool offline = jconfig[jprop_offlineMode]; + return offline; +} + +void Configuration::setOfflineMode(bool offline) { + logInfo("Set offline mode: " + String(offline ? "True" : "False")); + jconfig[jprop_offlineMode] = offline; + saveConfig(); +} + bool Configuration::isDisplayBrightnessChanged(void) { bool changed = displayBrightnessChanged; displayBrightnessChanged = false; diff --git a/src/AgConfigure.h b/src/AgConfigure.h index 1b254ad..bb57a67 100644 --- a/src/AgConfigure.h +++ b/src/AgConfigure.h @@ -74,6 +74,8 @@ public: int getLedBarBrightness(void); bool isDisplayBrightnessChanged(void); int getDisplayBrightness(void); + bool isOfflineMode(void); + void setOfflineMode(bool offline); }; #endif /** _AG_CONFIG_H_ */