From 5b18a8353dccc8ca68dfde221daf64b2d266ac1a Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 14:43:53 +0700 Subject: [PATCH 1/2] Fix issue: LED bar button test pressed but WiFi connection still perform. --- examples/OneOpenAir/OneOpenAir.ino | 44 ++++++++++++++++-------------- src/AgApiClient.cpp | 3 +- src/AgConfigure.cpp | 6 +++- src/AgConfigure.h | 2 ++ 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index 876d667..ec099af 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -176,28 +176,32 @@ void setup() { ledBarEnabledUpdate(); } - /** Show message confirm offline mode. */ - oledDisplay.setText( - "Press now for", - configuration.isOfflineMode() ? "online mode" : "offline mode", ""); - uint32_t startTime = millis(); - while (true) { - if (ag->button.getState() == ag->button.BUTTON_PRESSED) { - configuration.setOfflineMode(!configuration.isOfflineMode()); + /** Show message confirm offline mode, should me perform if LED bar button + * test pressed */ + if (ledBarButtonTest == false) { + oledDisplay.setText( + "Press now for", + configuration.isOfflineMode() ? "online mode" : "offline mode", ""); + uint32_t startTime = 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 periodMs = (uint32_t)(millis() - startTime); - if (periodMs >= 3000) { - break; + oledDisplay.setText( + "Offline Mode", + configuration.isOfflineMode() ? " = True" : " = False", ""); + delay(1000); + break; + } + uint32_t periodMs = (uint32_t)(millis() - startTime); + if (periodMs >= 3000) { + break; + } } + connectToWifi = !configuration.isOfflineMode(); + } else { + configuration.setOfflineModeWithoutSave(true); } - connectToWifi = !configuration.isOfflineMode(); - } else { connectToWifi = true; } @@ -1099,7 +1103,7 @@ static void updatePm(void) { static void sendDataToServer(void) { /** Ignore send data to server if postToAirGradient disabled */ - if (configuration.isPostDataToAirGradient() == false) { + if (configuration.isPostDataToAirGradient() == false || configuration.isOfflineMode()) { return; } diff --git a/src/AgApiClient.cpp b/src/AgApiClient.cpp index 1a2a978..699d5ae 100644 --- a/src/AgApiClient.cpp +++ b/src/AgApiClient.cpp @@ -34,7 +34,8 @@ void AgApiClient::begin(void) { */ bool AgApiClient::fetchServerConfiguration(void) { if (config.getConfigurationControl() == - ConfigurationControl::ConfigurationControlLocal) { + ConfigurationControl::ConfigurationControlLocal || + config.isOfflineMode()) { logWarning("Ignore fetch server configuration"); // Clear server configuration failed flag, cause it's ignore but not diff --git a/src/AgConfigure.cpp b/src/AgConfigure.cpp index dfccdc6..97099f3 100644 --- a/src/AgConfigure.cpp +++ b/src/AgConfigure.cpp @@ -1193,7 +1193,7 @@ int Configuration::getDisplayBrightness(void) { bool Configuration::isOfflineMode(void) { bool offline = jconfig[jprop_offlineMode]; - return offline; + return (offline || _offlineMode); } void Configuration::setOfflineMode(bool offline) { @@ -1202,6 +1202,10 @@ void Configuration::setOfflineMode(bool offline) { saveConfig(); } +void Configuration::setOfflineModeWithoutSave(bool offline) { + _offlineMode = offline; +} + bool Configuration::isDisplayBrightnessChanged(void) { bool changed = displayBrightnessChanged; displayBrightnessChanged = false; diff --git a/src/AgConfigure.h b/src/AgConfigure.h index 3b859ee..8fc852c 100644 --- a/src/AgConfigure.h +++ b/src/AgConfigure.h @@ -17,6 +17,7 @@ private: bool ledBarBrightnessChanged = false; bool displayBrightnessChanged = false; String otaNewFirmwareVersion; + bool _offlineMode = false; AirGradient* ag; @@ -80,6 +81,7 @@ public: String newFirmwareVersion(void); bool isOfflineMode(void); void setOfflineMode(bool offline); + void setOfflineModeWithoutSave(bool offline); }; #endif /** _AG_CONFIG_H_ */ From f23c7e9e31e205c155adb47be782d9c75195633d Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 15:07:10 +0700 Subject: [PATCH 2/2] Set offline mode incase wifi is not configuraion or configuration ignored. --- examples/OneOpenAir/OneOpenAir.ino | 5 +++++ src/AgWiFiConnector.cpp | 13 +++++++++++++ src/AgWiFiConnector.h | 1 + 3 files changed, 19 insertions(+) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index ec099af..e60c1ed 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -238,6 +238,11 @@ void setup() { } } } + /** Set offline mode without saving, cause wifi is not configured */ + if (wifiConnector.hasConfigurated() == false) { + Serial.println("Set offline mode cause wifi is not configurated"); + configuration.setOfflineModeWithoutSave(true); + } /** Show display Warning up */ if (ag->isOne()) { diff --git a/src/AgWiFiConnector.cpp b/src/AgWiFiConnector.cpp index 8ac9495..669d526 100644 --- a/src/AgWiFiConnector.cpp +++ b/src/AgWiFiConnector.cpp @@ -345,3 +345,16 @@ int WifiConnector::RSSI(void) { return WiFi.RSSI(); } * @return String */ String WifiConnector::localIpStr(void) { return WiFi.localIP().toString(); } + +/** + * @brief Get status that wifi has configurated + * + * @return true Configurated + * @return false Not Configurated + */ +bool WifiConnector::hasConfigurated(void) { + if (WiFi.SSID().isEmpty()) { + return false; + } + return true; +} diff --git a/src/AgWiFiConnector.h b/src/AgWiFiConnector.h index 3856f62..090f0d2 100644 --- a/src/AgWiFiConnector.h +++ b/src/AgWiFiConnector.h @@ -50,6 +50,7 @@ public: void reset(void); int RSSI(void); String localIpStr(void); + bool hasConfigurated(void); }; #endif /** _AG_WIFI_CONNECTOR_H_ */