From aa233777746b8b694dec58c8be197b63e17530a5 Mon Sep 17 00:00:00 2001 From: Rune Harlyk Date: Tue, 9 Jul 2024 20:01:49 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=AA=84=20Formats=20APSettingsService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/ESP32-sveltekit/APSettingsService.cpp | 78 +++++++------------ esp32/lib/ESP32-sveltekit/APSettingsService.h | 44 ++++------- 2 files changed, 43 insertions(+), 79 deletions(-) diff --git a/esp32/lib/ESP32-sveltekit/APSettingsService.cpp b/esp32/lib/ESP32-sveltekit/APSettingsService.cpp index fdf3c2d..0726f9c 100644 --- a/esp32/lib/ESP32-sveltekit/APSettingsService.cpp +++ b/esp32/lib/ESP32-sveltekit/APSettingsService.cpp @@ -14,86 +14,70 @@ #include -static const char* TAG = "APSettingsService"; +static const char *TAG = "APSettingsService"; -APSettingsService::APSettingsService(PsychicHttpServer *server, - FS *fs, - SecurityManager *securityManager) : _server(server), - _securityManager(securityManager), - _httpEndpoint(APSettings::read, APSettings::update, this, server, AP_SETTINGS_SERVICE_PATH, securityManager), - _fsPersistence(APSettings::read, APSettings::update, this, fs, AP_SETTINGS_FILE), - _dnsServer(nullptr), - _lastManaged(0), - _reconfigureAp(false) -{ - addUpdateHandler([&](const String &originId) - { reconfigureAP(); }, - false); +APSettingsService::APSettingsService(PsychicHttpServer *server, FS *fs, SecurityManager *securityManager) + : _server(server), + _securityManager(securityManager), + _httpEndpoint(APSettings::read, APSettings::update, this, server, AP_SETTINGS_SERVICE_PATH, securityManager), + _fsPersistence(APSettings::read, APSettings::update, this, fs, AP_SETTINGS_FILE), + _dnsServer(nullptr), + _lastManaged(0), + _reconfigureAp(false) { + addUpdateHandler([&](const String &originId) { reconfigureAP(); }, false); } -void APSettingsService::begin() -{ +void APSettingsService::begin() { _httpEndpoint.begin(); _fsPersistence.readFromFS(); reconfigureAP(); } -void APSettingsService::reconfigureAP() -{ +void APSettingsService::reconfigureAP() { _lastManaged = millis() - MANAGE_NETWORK_DELAY; _reconfigureAp = true; _recoveryMode = false; } -void APSettingsService::recoveryMode() -{ +void APSettingsService::recoveryMode() { ESP_LOGI(TAG, "Recovery Mode needed"); _lastManaged = millis() - MANAGE_NETWORK_DELAY; _recoveryMode = true; _reconfigureAp = true; } -void APSettingsService::loop() -{ +void APSettingsService::loop() { unsigned long currentMillis = millis(); unsigned long manageElapsed = (currentMillis - _lastManaged); - if (manageElapsed >= MANAGE_NETWORK_DELAY) - { + if (manageElapsed >= MANAGE_NETWORK_DELAY) { _lastManaged = currentMillis; manageAP(); } handleDNS(); } -void APSettingsService::manageAP() -{ +void APSettingsService::manageAP() { WiFiMode_t currentWiFiMode = WiFi.getMode(); if (_state.provisionMode == AP_MODE_ALWAYS || - (_state.provisionMode == AP_MODE_DISCONNECTED && WiFi.status() != WL_CONNECTED) || _recoveryMode) - { - if (_reconfigureAp || currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA) - { + (_state.provisionMode == AP_MODE_DISCONNECTED && WiFi.status() != WL_CONNECTED) || _recoveryMode) { + if (_reconfigureAp || currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA) { startAP(); } - } - else if ((currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA) && - (_reconfigureAp || !WiFi.softAPgetStationNum())) - { + } else if ((currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA) && + (_reconfigureAp || !WiFi.softAPgetStationNum())) { stopAP(); } _reconfigureAp = false; } -void APSettingsService::startAP() -{ +void APSettingsService::startAP() { ESP_LOGI(TAG, "Starting software access point"); WiFi.softAPConfig(_state.localIP, _state.gatewayIP, _state.subnetMask); WiFi.softAP(_state.ssid.c_str(), _state.password.c_str(), _state.channel, _state.ssidHidden, _state.maxClients); #if CONFIG_IDF_TARGET_ESP32C3 WiFi.setTxPower(WIFI_POWER_8_5dBm); // https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi #endif - if (!_dnsServer) - { + if (!_dnsServer) { IPAddress apIp = WiFi.softAPIP(); ESP_LOGI(TAG, "Starting captive portal on %s", apIp.toString().c_str()); _dnsServer = new DNSServer; @@ -101,10 +85,8 @@ void APSettingsService::startAP() } } -void APSettingsService::stopAP() -{ - if (_dnsServer) - { +void APSettingsService::stopAP() { + if (_dnsServer) { ESP_LOGI(TAG, "Stopping captive portal"); _dnsServer->stop(); delete _dnsServer; @@ -114,20 +96,16 @@ void APSettingsService::stopAP() WiFi.softAPdisconnect(true); } -void APSettingsService::handleDNS() -{ - if (_dnsServer) - { +void APSettingsService::handleDNS() { + if (_dnsServer) { _dnsServer->processNextRequest(); } } -APNetworkStatus APSettingsService::getAPNetworkStatus() -{ +APNetworkStatus APSettingsService::getAPNetworkStatus() { WiFiMode_t currentWiFiMode = WiFi.getMode(); bool apActive = currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA; - if (apActive && _state.provisionMode != AP_MODE_ALWAYS && WiFi.status() == WL_CONNECTED) - { + if (apActive && _state.provisionMode != AP_MODE_ALWAYS && WiFi.status() == WL_CONNECTED) { return APNetworkStatus::LINGERING; } return apActive ? APNetworkStatus::ACTIVE : APNetworkStatus::INACTIVE; diff --git a/esp32/lib/ESP32-sveltekit/APSettingsService.h b/esp32/lib/ESP32-sveltekit/APSettingsService.h index 6d46c03..d8e4e28 100644 --- a/esp32/lib/ESP32-sveltekit/APSettingsService.h +++ b/esp32/lib/ESP32-sveltekit/APSettingsService.h @@ -70,16 +70,10 @@ #define MANAGE_NETWORK_DELAY 10000 #define DNS_PORT 53 -enum APNetworkStatus -{ - ACTIVE = 0, - INACTIVE, - LINGERING -}; +enum APNetworkStatus { ACTIVE = 0, INACTIVE, LINGERING }; -class APSettings -{ -public: +class APSettings { + public: uint8_t provisionMode; String ssid; String password; @@ -91,15 +85,13 @@ public: IPAddress gatewayIP; IPAddress subnetMask; - bool operator==(const APSettings &settings) const - { + bool operator==(const APSettings &settings) const { return provisionMode == settings.provisionMode && ssid == settings.ssid && password == settings.password && channel == settings.channel && ssidHidden == settings.ssidHidden && maxClients == settings.maxClients && localIP == settings.localIP && gatewayIP == settings.gatewayIP && subnetMask == settings.subnetMask; } - static void read(APSettings &settings, JsonObject &root) - { + static void read(APSettings &settings, JsonObject &root) { root["provision_mode"] = settings.provisionMode; root["ssid"] = settings.ssid; root["password"] = settings.password; @@ -111,18 +103,14 @@ public: root["subnet_mask"] = settings.subnetMask.toString(); } - static StateUpdateResult update(JsonObject &root, APSettings &settings) - { + static StateUpdateResult update(JsonObject &root, APSettings &settings) { APSettings newSettings = {}; newSettings.provisionMode = root["provision_mode"] | FACTORY_AP_PROVISION_MODE; - switch (settings.provisionMode) - { - case AP_MODE_ALWAYS: - case AP_MODE_DISCONNECTED: - case AP_MODE_NEVER: - break; - default: - newSettings.provisionMode = AP_MODE_DISCONNECTED; + switch (settings.provisionMode) { + case AP_MODE_ALWAYS: + case AP_MODE_DISCONNECTED: + case AP_MODE_NEVER: break; + default: newSettings.provisionMode = AP_MODE_DISCONNECTED; } newSettings.ssid = root["ssid"] | SettingValue::format(FACTORY_AP_SSID); newSettings.password = root["password"] | FACTORY_AP_PASSWORD; @@ -134,8 +122,7 @@ public: JsonUtils::readIP(root, "gateway_ip", newSettings.gatewayIP, FACTORY_AP_GATEWAY_IP); JsonUtils::readIP(root, "subnet_mask", newSettings.subnetMask, FACTORY_AP_SUBNET_MASK); - if (newSettings == settings) - { + if (newSettings == settings) { return StateUpdateResult::UNCHANGED; } settings = newSettings; @@ -143,9 +130,8 @@ public: } }; -class APSettingsService : public StatefulService -{ -public: +class APSettingsService : public StatefulService { + public: APSettingsService(PsychicHttpServer *server, FS *fs, SecurityManager *securityManager); void begin(); @@ -153,7 +139,7 @@ public: APNetworkStatus getAPNetworkStatus(); void recoveryMode(); -private: + private: PsychicHttpServer *_server; SecurityManager *_securityManager; HttpEndpoint _httpEndpoint;