From 22e6e28d539a4a6eb3b59c3afb1fa928557a7d5e Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Tue, 23 Jun 2026 20:57:24 +0200 Subject: [PATCH 01/15] Various bug fixes and connectovity-scoped refactor. - Fix reporting of saved Wi-Fi networks - Fix potential NVS handle memory leak - Refactored NVS logic - Updated code styling --- .../include/services/ConnectivityService.h | 8 +- firmware/src/services/ConnectivityService.cpp | 100 ++++++++---------- webapp/src/services/Connectivity.tsx | 2 +- 3 files changed, 48 insertions(+), 62 deletions(-) diff --git a/firmware/include/services/ConnectivityService.h b/firmware/include/services/ConnectivityService.h index 58bf746f..a3f36240 100644 --- a/firmware/include/services/ConnectivityService.h +++ b/firmware/include/services/ConnectivityService.h @@ -12,11 +12,11 @@ class ConnectivityService final : public ServiceModule private: explicit ConnectivityService() : ServiceModule("Connectivity") {}; - bool mDNS = false; - bool pending = false; - bool routable = false; + bool mdns{false}; + bool pending{false}; + bool routable{false}; - unsigned long lastMillis = 0; + unsigned long lastMillis{0UL}; std::unique_ptr dns{}; diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index df208a8a..006a3a12 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -31,17 +31,13 @@ void ConnectivityService::configure() nvs_handle_t handle{}; if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) { - std::array country{}; - size_t len{country.size()}; // NOLINT(cppcoreguidelines-init-variables) - if (nvs_get_str(handle, "country", country.data(), &len) == ESP_OK) + std::array country{}; + size_t length{country.size()}; + if (nvs_get_str(handle, "country", country.data(), &length) == ESP_OK && length == country.size()) { - nvs_close(handle); esp_wifi_set_country_code(country.data(), true); } - else - { - nvs_close(handle); - } + nvs_close(handle); } #endif // WIFI_COUNTRY #if defined(PIN_SW1) || defined(PIN_SW2) @@ -90,45 +86,41 @@ void ConnectivityService::initStation() nvs_handle_t handle{}; if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) { - size_t _len{0}; - if (nvs_get_blob(handle, "Wi-Fi", nullptr, &_len) == ESP_OK && _len > 0) + size_t _length{0U}; + if (nvs_get_blob(handle, "Wi-Fi", nullptr, &_length) == ESP_OK && _length != 0U) { - std::vector _buffer(_len); - if (nvs_get_blob(handle, "Wi-Fi", _buffer.data(), &_len) == ESP_OK) + std::vector _buffer(_length); + if (nvs_get_blob(handle, "Wi-Fi", _buffer.data(), &_length) == ESP_OK) { - nvs_close(handle); - deserializeJson(doc, _buffer.data(), _len); - } - else - { - nvs_close(handle); + deserializeJson(doc, _buffer.data(), _length); } } + nvs_close(handle); } wifi_config_t config; if (esp_wifi_get_config(wifi_interface_t::WIFI_IF_STA, &config) == ESP_OK) { // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - const char *const ssid_ptr = reinterpret_cast(config.sta.ssid); + const char *const ssid_ptr{reinterpret_cast(config.sta.ssid)}; const std::string_view ssid(ssid_ptr, strnlen(ssid_ptr, sizeof(config.sta.ssid))); if (!ssid.empty()) { // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - const char *const key_ptr = reinterpret_cast(config.sta.password); + const char *const key_ptr{reinterpret_cast(config.sta.password)}; const std::string_view key(key_ptr, strnlen(key_ptr, sizeof(config.sta.password))); - doc[ssid] = key.length() ? key : nullptr; + doc[ssid].set(key.length() ? key : nullptr); } } if (doc[WIFI_SSID].isUnbound()) { - doc[WIFI_SSID] = WIFI_KEY; + doc[WIFI_SSID].set(WIFI_KEY); } - const size_t len = measureJson(doc); - std::vector buffer(len + 1); - serializeJson(doc, reinterpret_cast(buffer.data()), len + 1); + const size_t length{measureJson(doc) + 1U}; + std::vector buffer(length); + serializeJson(doc, reinterpret_cast(buffer.data()), length); if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READWRITE, &handle) == ESP_OK) { - nvs_set_blob(handle, "Wi-Fi", buffer.data(), len + 1); + nvs_set_blob(handle, "Wi-Fi", buffer.data(), length); nvs_commit(handle); nvs_close(handle); } @@ -148,7 +140,7 @@ void ConnectivityService::initHotspot() { dns = std::make_unique(); dns->setErrorReplyCode(DNSReplyCode::NoError); - dns->start(53, "*", WiFi.softAPIP()); + dns->start(53U, "*", WiFi.softAPIP()); } #if EXTENSION_WEBAPP // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) @@ -178,12 +170,12 @@ void ConnectivityService::onConnected(WiFiEvent_t event, // NOLINT(misc-unuse ESP_LOGI("Wi-Fi", HOSTNAME ".local"); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) #ifndef WIFI_COUNTRY nvs_handle_t handle{}; - std::array country{}; + std::array country{}; if (esp_wifi_get_country_code(country.data()) == ESP_OK && - nvs_open(Connectivity.name.data(), nvs_open_mode_t::NVS_READWRITE, &handle) == ESP_OK) + nvs_open(std::string(Connectivity.name).c_str(), nvs_open_mode_t::NVS_READWRITE, &handle) == ESP_OK) { - if (strncmp(country.data(), "01", 2) == 0 ? nvs_erase_key(handle, "country") == ESP_OK - : nvs_set_str(handle, "country", country.data()) == ESP_OK) + if (strncmp(country.data(), "01", 2U) == 0 ? nvs_erase_key(handle, "country") == ESP_OK + : nvs_set_str(handle, "country", country.data()) == ESP_OK) { nvs_commit(handle); } @@ -196,10 +188,10 @@ void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unuse WiFiEventInfo_t info) { Connectivity.routable = false; - if (Connectivity.mDNS) + if (Connectivity.mdns) { MDNS.end(); - Connectivity.mDNS = false; + Connectivity.mdns = false; } ESP_LOGI("Wi-Fi", "disconnected"); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) @@ -221,7 +213,7 @@ void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-par void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parameters) WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) { - const char *const ipv6 = WiFi.globalIPv6().toString().c_str(); + const char *const ipv6{WiFi.globalIPv6().toString().c_str()}; if (strcmp(ipv6, "") != 0) { ESP_LOGI("Wi-Fi", "IPv6 %s", ipv6); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) @@ -244,18 +236,18 @@ void ConnectivityService::onRoutable() Connectivity.dns.reset(); WiFiClass::mode(wifi_mode_t::WIFI_MODE_STA); } - if (!Connectivity.mDNS && MDNS.begin(HOSTNAME)) + if (!Connectivity.mdns && MDNS.begin(HOSTNAME)) { - Connectivity.mDNS = true; + Connectivity.mdns = true; MDNS.setInstanceName(NAME); #if EXTENSION_ALEXA AlexaExtension::onMdns(); #endif // EXTENSION_ALEXA #if EXTENSION_RESTFUL || EXTENSION_WEBAPP - MDNS.addService("http", "tcp", 80); + MDNS.addService("http", "tcp", 80U); #endif #if EXTENSION_WEBSOCKET - MDNS.addService("ws", "tcp", 80); + MDNS.addService("ws", "tcp", 80U); #endif // EXTENSION_WEBSOCKET } timeval tv{}; @@ -265,12 +257,12 @@ void ConnectivityService::onRoutable() void ConnectivityService::onScan(WiFiEvent_t event, // NOLINT(misc-unused-parameters) WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) { - const int16_t count = WiFi.scanComplete(); + const int16_t count{WiFi.scanComplete()}; if (count > 0) { JsonDocument doc; // NOLINT(misc-const-correctness) JsonArray scan{doc["scan"].to()}; - for (int16_t i = 0; i < count; ++i) + for (int16_t i{0}; i < count; ++i) { JsonObject _scan{scan.add()}; _scan["encrypted"].set(WiFi.encryptionType(i) != wifi_auth_mode_t::WIFI_AUTH_OPEN); @@ -290,28 +282,22 @@ void ConnectivityService::transmit() nvs_handle_t handle{}; if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) { - size_t len{0}; - if (nvs_get_blob(handle, "saved", nullptr, &len) == ESP_OK && len > 0) + size_t length{0U}; + if (nvs_get_blob(handle, "Wi-Fi", nullptr, &length) == ESP_OK && length != 0U) { - std::vector buffer(len); - if (nvs_get_blob(handle, "Wi-Fi", &buffer, &len) == ESP_OK) + JsonDocument _saved; // NOLINT(misc-const-correctness) + std::vector buffer(length); + if (nvs_get_blob(handle, "Wi-Fi", buffer.data(), &length) == ESP_OK && + deserializeJson(_saved, buffer.data(), length) == DeserializationError::Code::Ok) { - nvs_close(handle); - JsonDocument _saved; // NOLINT(misc-const-correctness) - if (deserializeJson(_saved, buffer.data(), len) == DeserializationError::Code::Ok) + JsonArray saved{doc["saved"].to()}; + for (const JsonPairConst pair : _saved.as()) { - JsonArray saved{doc["saved"].to()}; - for (const JsonPairConst pair : _saved.as()) - { - saved.add(pair.key()); - } + saved.add(pair.key()); } } - else - { - nvs_close(handle); - } } + nvs_close(handle); } } doc["ssid"].set(WiFi.SSID()); @@ -365,4 +351,4 @@ ConnectivityService &ConnectivityService::getInstance() } // NOLINTNEXTLINE(bugprone-throwing-static-initialization,cert-err58-cpp,cppcoreguidelines-avoid-non-const-global-variables) -ConnectivityService &Connectivity = ConnectivityService::getInstance(); +ConnectivityService &Connectivity{ConnectivityService::getInstance()}; diff --git a/webapp/src/services/Connectivity.tsx b/webapp/src/services/Connectivity.tsx index e6552f00..8d773a5b 100644 --- a/webapp/src/services/Connectivity.tsx +++ b/webapp/src/services/Connectivity.tsx @@ -131,7 +131,7 @@ export const MainThird: Component = () => { export const SidebarThird: Component = () => { const handleSelect = (ssid: string) => { - if (window.innerWidth < 800) { + if (innerWidth < 800) { WebAppSidebarSet(false); } setCredentialSsid(ssid); From 10b7bea3566fcdc2fb8a7069f38b820b187120ab Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Tue, 23 Jun 2026 21:10:24 +0200 Subject: [PATCH 02/15] Re-add nolint comment --- firmware/src/services/ConnectivityService.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 006a3a12..9de33d0e 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -32,7 +32,7 @@ void ConnectivityService::configure() if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) { std::array country{}; - size_t length{country.size()}; + size_t length{country.size()}; // NOLINT(cppcoreguidelines-init-variables) if (nvs_get_str(handle, "country", country.data(), &length) == ESP_OK && length == country.size()) { esp_wifi_set_country_code(country.data(), true); From 2c2e843b8d1163768563d9e241e44afe4c10cf86 Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Tue, 23 Jun 2026 22:36:10 +0200 Subject: [PATCH 03/15] Refactor IP address terminal print --- firmware/src/services/ConnectivityService.cpp | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 9de33d0e..c2165889 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -202,21 +202,40 @@ void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unuse void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parameters) WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) - ESP_LOGI("Wi-Fi", "IPv4 %s", WiFi.localIP().toString().c_str()); // NOLINT(hicpp-vararg) - if (!Connectivity.routable) + if (WiFi.STA.hasIP()) { - onRoutable(); + const IPAddress ipv4 = WiFi.STA.localIP(); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) + ESP_LOGI("Wi-Fi", + "IPv4 %u.%u.%u.%u", + static_cast(ipv4[0]), + static_cast(ipv4[1]), + static_cast(ipv4[2]), + static_cast(ipv4[3])); + if (!Connectivity.routable) + { + onRoutable(); + } } } void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parameters) WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) { - const char *const ipv6{WiFi.globalIPv6().toString().c_str()}; - if (strcmp(ipv6, "") != 0) + if (WiFi.STA.hasGlobalIPv6()) { - ESP_LOGI("Wi-Fi", "IPv6 %s", ipv6); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + const IPAddress ipv6 = WiFi.STA.globalIPv6(); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) + ESP_LOGI("Wi-Fi", + "IPv6 %x:%x:%x:%x:%x:%x:%x:%x", + (static_cast(ipv6[0]) << 8U) | static_cast(ipv6[1]), + (static_cast(ipv6[2]) << 8U) | static_cast(ipv6[3]), + (static_cast(ipv6[4]) << 8U) | static_cast(ipv6[5]), + (static_cast(ipv6[6]) << 8U) | static_cast(ipv6[7]), + (static_cast(ipv6[8]) << 8U) | static_cast(ipv6[9]), + (static_cast(ipv6[10]) << 8U) | static_cast(ipv6[11]), + (static_cast(ipv6[12]) << 8U) | static_cast(ipv6[13]), + (static_cast(ipv6[14]) << 8U) | static_cast(ipv6[15])); if (!Connectivity.routable) { onRoutable(); From 6f521f5962138ca9019b137d0bba5b5f69286fbe Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Tue, 23 Jun 2026 23:28:58 +0200 Subject: [PATCH 04/15] Refactor IPv4 and IPv6 logging in ConnectivityService for improved clarity --- firmware/src/services/ConnectivityService.cpp | 32 +++++-------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index c2165889..85274d46 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -199,19 +199,13 @@ void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unuse "Wi-Fi", "%s", WiFi.disconnectReasonName(static_cast(info.wifi_sta_disconnected.reason))); } -void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) +void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parameters) + WiFiEventInfo_t info) { if (WiFi.STA.hasIP()) { - const IPAddress ipv4 = WiFi.STA.localIP(); - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) - ESP_LOGI("Wi-Fi", - "IPv4 %u.%u.%u.%u", - static_cast(ipv4[0]), - static_cast(ipv4[1]), - static_cast(ipv4[2]), - static_cast(ipv4[3])); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + ESP_LOGI("Wi-Fi", "IPv4 " IPSTR, IP2STR(&info.got_ip.ip_info.ip)); if (!Connectivity.routable) { onRoutable(); @@ -219,23 +213,13 @@ void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-par } } -void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) +void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parameters) + WiFiEventInfo_t info) { if (WiFi.STA.hasGlobalIPv6()) { - const IPAddress ipv6 = WiFi.STA.globalIPv6(); - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) - ESP_LOGI("Wi-Fi", - "IPv6 %x:%x:%x:%x:%x:%x:%x:%x", - (static_cast(ipv6[0]) << 8U) | static_cast(ipv6[1]), - (static_cast(ipv6[2]) << 8U) | static_cast(ipv6[3]), - (static_cast(ipv6[4]) << 8U) | static_cast(ipv6[5]), - (static_cast(ipv6[6]) << 8U) | static_cast(ipv6[7]), - (static_cast(ipv6[8]) << 8U) | static_cast(ipv6[9]), - (static_cast(ipv6[10]) << 8U) | static_cast(ipv6[11]), - (static_cast(ipv6[12]) << 8U) | static_cast(ipv6[13]), - (static_cast(ipv6[14]) << 8U) | static_cast(ipv6[15])); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + ESP_LOGI("Wi-Fi", "IPv6 " IPV6STR, IPV62STR(info.got_ip6.ip6_info)); if (!Connectivity.routable) { onRoutable(); From 9b2502c1ed4b4810c031ecd1bd89b5a0f167a446 Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Wed, 24 Jun 2026 17:43:48 +0200 Subject: [PATCH 05/15] Adjust clang nolint comments --- firmware/src/services/ConnectivityService.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 85274d46..0e9d4b74 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -204,7 +204,7 @@ void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parame { if (WiFi.STA.hasIP()) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic,cppcoreguidelines-pro-type-cstyle-cast) ESP_LOGI("Wi-Fi", "IPv4 " IPSTR, IP2STR(&info.got_ip.ip_info.ip)); if (!Connectivity.routable) { @@ -218,7 +218,6 @@ void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parame { if (WiFi.STA.hasGlobalIPv6()) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) ESP_LOGI("Wi-Fi", "IPv6 " IPV6STR, IPV62STR(info.got_ip6.ip6_info)); if (!Connectivity.routable) { From a28e0587312fd82ecb78f13e042471770bde36cf Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Wed, 24 Jun 2026 18:06:55 +0200 Subject: [PATCH 06/15] More clang nolint comment adjustments --- firmware/src/services/ConnectivityService.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 0e9d4b74..49d043c4 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -204,7 +204,7 @@ void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parame { if (WiFi.STA.hasIP()) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic,cppcoreguidelines-pro-type-cstyle-cast) + // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic,cppcoreguidelines-pro-type-cstyle-cast,cppcoreguidelines-pro-type-vararg) ESP_LOGI("Wi-Fi", "IPv4 " IPSTR, IP2STR(&info.got_ip.ip_info.ip)); if (!Connectivity.routable) { @@ -218,6 +218,7 @@ void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parame { if (WiFi.STA.hasGlobalIPv6()) { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) ESP_LOGI("Wi-Fi", "IPv6 " IPV6STR, IPV62STR(info.got_ip6.ip6_info)); if (!Connectivity.routable) { From 1b238de537fa3718184e326970a0c23feed9a3c5 Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Wed, 24 Jun 2026 18:16:24 +0200 Subject: [PATCH 07/15] Re-add hicpp-vararg --- firmware/src/services/ConnectivityService.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 49d043c4..8fd51444 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -204,7 +204,7 @@ void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parame { if (WiFi.STA.hasIP()) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic,cppcoreguidelines-pro-type-cstyle-cast,cppcoreguidelines-pro-type-vararg) + // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic,cppcoreguidelines-pro-type-cstyle-cast,cppcoreguidelines-pro-type-vararg,hicpp-vararg) ESP_LOGI("Wi-Fi", "IPv4 " IPSTR, IP2STR(&info.got_ip.ip_info.ip)); if (!Connectivity.routable) { @@ -218,7 +218,7 @@ void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parame { if (WiFi.STA.hasGlobalIPv6()) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) ESP_LOGI("Wi-Fi", "IPv6 " IPV6STR, IPV62STR(info.got_ip6.ip6_info)); if (!Connectivity.routable) { From bbe98c3f4b959b42a83784f2e9edaa6dc6797e7c Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Wed, 24 Jun 2026 18:27:54 +0200 Subject: [PATCH 08/15] Add nolint misc-unused-parameters comment to false positive --- firmware/src/services/ConnectivityService.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 8fd51444..2d6022f0 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -199,8 +199,7 @@ void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unuse "Wi-Fi", "%s", WiFi.disconnectReasonName(static_cast(info.wifi_sta_disconnected.reason))); } -void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) +void ConnectivityService::onIPv4(WiFiEvent_t event, WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) { if (WiFi.STA.hasIP()) { From eccc2080a02a44b431fafb1b8788d95103744ef5 Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Thu, 25 Jun 2026 00:20:18 +0200 Subject: [PATCH 09/15] Refactor NVS open calls to use data() for string handling and improve code clarity --- firmware/src/services/ConnectivityService.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 2d6022f0..cd01b816 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -29,7 +29,7 @@ void ConnectivityService::configure() esp_wifi_set_country_code(WIFI_COUNTRY, false); #else nvs_handle_t handle{}; - if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) + if (nvs_open(name.data(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) { std::array country{}; size_t length{country.size()}; // NOLINT(cppcoreguidelines-init-variables) @@ -84,7 +84,7 @@ void ConnectivityService::initStation() { JsonDocument doc; // NOLINT(misc-const-correctness) nvs_handle_t handle{}; - if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) + if (nvs_open(name.data(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) { size_t _length{0U}; if (nvs_get_blob(handle, "Wi-Fi", nullptr, &_length) == ESP_OK && _length != 0U) @@ -118,7 +118,7 @@ void ConnectivityService::initStation() const size_t length{measureJson(doc) + 1U}; std::vector buffer(length); serializeJson(doc, reinterpret_cast(buffer.data()), length); - if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READWRITE, &handle) == ESP_OK) + if (nvs_open(name.data(), nvs_open_mode_t::NVS_READWRITE, &handle) == ESP_OK) { nvs_set_blob(handle, "Wi-Fi", buffer.data(), length); nvs_commit(handle); @@ -172,7 +172,7 @@ void ConnectivityService::onConnected(WiFiEvent_t event, // NOLINT(misc-unuse nvs_handle_t handle{}; std::array country{}; if (esp_wifi_get_country_code(country.data()) == ESP_OK && - nvs_open(std::string(Connectivity.name).c_str(), nvs_open_mode_t::NVS_READWRITE, &handle) == ESP_OK) + nvs_open(Connectivity.name.data(), nvs_open_mode_t::NVS_READWRITE, &handle) == ESP_OK) { if (strncmp(country.data(), "01", 2U) == 0 ? nvs_erase_key(handle, "country") == ESP_OK : nvs_set_str(handle, "country", country.data()) == ESP_OK) @@ -199,7 +199,8 @@ void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unuse "Wi-Fi", "%s", WiFi.disconnectReasonName(static_cast(info.wifi_sta_disconnected.reason))); } -void ConnectivityService::onIPv4(WiFiEvent_t event, WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) +void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parameters) + WiFiEventInfo_t info) { if (WiFi.STA.hasIP()) { @@ -282,7 +283,7 @@ void ConnectivityService::transmit() doc["rssi"].set(WiFi.RSSI()); { nvs_handle_t handle{}; - if (nvs_open(std::string(name).c_str(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) + if (nvs_open(name.data(), nvs_open_mode_t::NVS_READONLY, &handle) == ESP_OK) { size_t length{0U}; if (nvs_get_blob(handle, "Wi-Fi", nullptr, &length) == ESP_OK && length != 0U) From 73ade3754d46684caf84fec994fe51edf4aed7ac Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Thu, 25 Jun 2026 00:55:45 +0200 Subject: [PATCH 10/15] Refactor ConnectivityService event handlers to simplify parameters and improve code clarity --- .../include/services/ConnectivityService.h | 10 +++++----- firmware/src/services/ConnectivityService.cpp | 18 ++++++------------ 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/firmware/include/services/ConnectivityService.h b/firmware/include/services/ConnectivityService.h index a3f36240..4c04db6a 100644 --- a/firmware/include/services/ConnectivityService.h +++ b/firmware/include/services/ConnectivityService.h @@ -27,12 +27,12 @@ class ConnectivityService final : public ServiceModule void connect(const char *ssid, const char *key); void transmit(); - static void onConnected(WiFiEvent_t event, WiFiEventInfo_t info); - static void onDisconnected(WiFiEvent_t event, WiFiEventInfo_t info); - static void onIPv4(WiFiEvent_t event, WiFiEventInfo_t info); - static void onIPv6(WiFiEvent_t event, WiFiEventInfo_t info); + static void onConnected(WiFiEvent_t event); + static void onDisconnected(WiFiEvent_t event, const WiFiEventInfo_t &info); + static void onIPv4(WiFiEvent_t, const WiFiEventInfo_t &info); + static void onIPv6(WiFiEvent_t, WiFiEventInfo_t info); static void onRoutable(); - static void onScan(WiFiEvent_t event, WiFiEventInfo_t info); + static void onScan(WiFiEvent_t event); public: void configure(); diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index cd01b816..d12a7637 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -162,8 +162,7 @@ void ConnectivityService::connect(const char *ssid, const char *key) // NOLINT(b multi.run(); } -void ConnectivityService::onConnected(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) +void ConnectivityService::onConnected(WiFiEvent_t) { ESP_LOGD("Wi-Fi", "connected"); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) ESP_LOGV("Wi-Fi", "%d dBm", WiFi.RSSI()); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) @@ -184,8 +183,7 @@ void ConnectivityService::onConnected(WiFiEvent_t event, // NOLINT(misc-unuse #endif // WIFI_COUNTRY } -void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) +void ConnectivityService::onDisconnected(WiFiEvent_t, const WiFiEventInfo_t &info) { Connectivity.routable = false; if (Connectivity.mdns) @@ -199,8 +197,7 @@ void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unuse "Wi-Fi", "%s", WiFi.disconnectReasonName(static_cast(info.wifi_sta_disconnected.reason))); } -void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) +void ConnectivityService::onIPv4(WiFiEvent_t, const WiFiEventInfo_t &info) { if (WiFi.STA.hasIP()) { @@ -213,8 +210,7 @@ void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parame } } -void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) +void ConnectivityService::onIPv6(WiFiEvent_t, WiFiEventInfo_t info) { if (WiFi.STA.hasGlobalIPv6()) { @@ -257,8 +253,7 @@ void ConnectivityService::onRoutable() sntp_sync_time(&tv); } -void ConnectivityService::onScan(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) // NOLINT(misc-unused-parameters) +void ConnectivityService::onScan(WiFiEvent_t) { const int16_t count{WiFi.scanComplete()}; if (count > 0) @@ -307,8 +302,7 @@ void ConnectivityService::transmit() Device.transmit(doc.as(), name); } -void ConnectivityService::onReceive(JsonObjectConst payload, - std::string_view source) // NOLINT(misc-unused-parameters) +void ConnectivityService::onReceive(JsonObjectConst payload, std::string_view) { // Connect if (payload["ssid"].is()) From 4b4fc5ee2761cc4aa650be43077c22698fcca23d Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Thu, 25 Jun 2026 22:54:09 +0200 Subject: [PATCH 11/15] Revert most recent changes --- firmware/include/services/ConnectivityService.h | 6 +++--- firmware/src/services/ConnectivityService.cpp | 16 ++++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/firmware/include/services/ConnectivityService.h b/firmware/include/services/ConnectivityService.h index 4c04db6a..96b7cf1a 100644 --- a/firmware/include/services/ConnectivityService.h +++ b/firmware/include/services/ConnectivityService.h @@ -28,9 +28,9 @@ class ConnectivityService final : public ServiceModule void transmit(); static void onConnected(WiFiEvent_t event); - static void onDisconnected(WiFiEvent_t event, const WiFiEventInfo_t &info); - static void onIPv4(WiFiEvent_t, const WiFiEventInfo_t &info); - static void onIPv6(WiFiEvent_t, WiFiEventInfo_t info); + static void onDisconnected(WiFiEvent_t event, WiFiEventInfo_t info); + static void onIPv4(WiFiEvent_t event, WiFiEventInfo_t info); + static void onIPv6(WiFiEvent_t event, WiFiEventInfo_t info); static void onRoutable(); static void onScan(WiFiEvent_t event); diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index d12a7637..ba3c98f3 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -162,7 +162,7 @@ void ConnectivityService::connect(const char *ssid, const char *key) // NOLINT(b multi.run(); } -void ConnectivityService::onConnected(WiFiEvent_t) +void ConnectivityService::onConnected(WiFiEvent_t event) // NOLINT(misc-unused-parameters) { ESP_LOGD("Wi-Fi", "connected"); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) ESP_LOGV("Wi-Fi", "%d dBm", WiFi.RSSI()); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) @@ -183,7 +183,8 @@ void ConnectivityService::onConnected(WiFiEvent_t) #endif // WIFI_COUNTRY } -void ConnectivityService::onDisconnected(WiFiEvent_t, const WiFiEventInfo_t &info) +void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unused-parameters) + WiFiEventInfo_t info) { Connectivity.routable = false; if (Connectivity.mdns) @@ -197,7 +198,8 @@ void ConnectivityService::onDisconnected(WiFiEvent_t, const WiFiEventInfo_t &inf "Wi-Fi", "%s", WiFi.disconnectReasonName(static_cast(info.wifi_sta_disconnected.reason))); } -void ConnectivityService::onIPv4(WiFiEvent_t, const WiFiEventInfo_t &info) +void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parameters) + WiFiEventInfo_t info) { if (WiFi.STA.hasIP()) { @@ -210,7 +212,8 @@ void ConnectivityService::onIPv4(WiFiEvent_t, const WiFiEventInfo_t &info) } } -void ConnectivityService::onIPv6(WiFiEvent_t, WiFiEventInfo_t info) +void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parameters) + WiFiEventInfo_t info) { if (WiFi.STA.hasGlobalIPv6()) { @@ -253,7 +256,7 @@ void ConnectivityService::onRoutable() sntp_sync_time(&tv); } -void ConnectivityService::onScan(WiFiEvent_t) +void ConnectivityService::onScan(WiFiEvent_t event) // NOLINT(misc-unused-parameters) { const int16_t count{WiFi.scanComplete()}; if (count > 0) @@ -302,7 +305,8 @@ void ConnectivityService::transmit() Device.transmit(doc.as(), name); } -void ConnectivityService::onReceive(JsonObjectConst payload, std::string_view) +void ConnectivityService::onReceive(JsonObjectConst payload, + std::string_view source) // NOLINT(misc-unused-parameters) { // Connect if (payload["ssid"].is()) From 9e586bedaad42809c905d679a60858034b9789d6 Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Fri, 26 Jun 2026 18:52:20 +0200 Subject: [PATCH 12/15] Refactored events --- .../include/services/ConnectivityService.h | 10 +++---- firmware/src/services/ConnectivityService.cpp | 28 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/firmware/include/services/ConnectivityService.h b/firmware/include/services/ConnectivityService.h index 96b7cf1a..45fb5609 100644 --- a/firmware/include/services/ConnectivityService.h +++ b/firmware/include/services/ConnectivityService.h @@ -27,12 +27,12 @@ class ConnectivityService final : public ServiceModule void connect(const char *ssid, const char *key); void transmit(); - static void onConnected(WiFiEvent_t event); - static void onDisconnected(WiFiEvent_t event, WiFiEventInfo_t info); - static void onIPv4(WiFiEvent_t event, WiFiEventInfo_t info); - static void onIPv6(WiFiEvent_t event, WiFiEventInfo_t info); + static void onConnected(arduino_event_id_t event); + static void onDisconnected(arduino_event_id_t event, arduino_event_info_t info); + static void onIPv4(arduino_event_id_t event, arduino_event_info_t info); + static void onIPv6(arduino_event_id_t event, arduino_event_info_t info); static void onRoutable(); - static void onScan(WiFiEvent_t event); + static void onScan(arduino_event_id_t event); public: void configure(); diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index ba3c98f3..fb0e6cb6 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -20,11 +20,11 @@ void ConnectivityService::configure() WiFiClass::setHostname(HOSTNAME); WiFiClass::mode(wifi_mode_t::WIFI_MODE_STA); WiFi.enableIPv6(); - WiFi.onEvent(&onConnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_CONNECTED); - WiFi.onEvent(&onDisconnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED); - WiFi.onEvent(&onIPv4, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP); - WiFi.onEvent(&onIPv6, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP6); - WiFi.onEvent(&onScan, WiFiEvent_t::ARDUINO_EVENT_WIFI_SCAN_DONE); + WiFi.onEvent(&onConnected, arduino_event_id_t::ARDUINO_EVENT_WIFI_STA_CONNECTED); + WiFi.onEvent(&onDisconnected, arduino_event_id_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED); + WiFi.onEvent(&onIPv4, arduino_event_id_t::ARDUINO_EVENT_WIFI_STA_GOT_IP); + WiFi.onEvent(&onIPv6, arduino_event_id_t::ARDUINO_EVENT_WIFI_STA_GOT_IP6); + WiFi.onEvent(&onScan, arduino_event_id_t::ARDUINO_EVENT_WIFI_SCAN_DONE); #ifdef WIFI_COUNTRY esp_wifi_set_country_code(WIFI_COUNTRY, false); #else @@ -162,7 +162,7 @@ void ConnectivityService::connect(const char *ssid, const char *key) // NOLINT(b multi.run(); } -void ConnectivityService::onConnected(WiFiEvent_t event) // NOLINT(misc-unused-parameters) +void ConnectivityService::onConnected(arduino_event_id_t event) // NOLINT(misc-unused-parameters) { ESP_LOGD("Wi-Fi", "connected"); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) ESP_LOGV("Wi-Fi", "%d dBm", WiFi.RSSI()); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) @@ -183,8 +183,8 @@ void ConnectivityService::onConnected(WiFiEvent_t event) // NOLINT(misc-unused-p #endif // WIFI_COUNTRY } -void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) +void ConnectivityService::onDisconnected(arduino_event_id_t event, // NOLINT(misc-unused-parameters) + arduino_event_info_t info) { Connectivity.routable = false; if (Connectivity.mdns) @@ -198,8 +198,8 @@ void ConnectivityService::onDisconnected(WiFiEvent_t event, // NOLINT(misc-unuse "Wi-Fi", "%s", WiFi.disconnectReasonName(static_cast(info.wifi_sta_disconnected.reason))); } -void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) +void ConnectivityService::onIPv4(arduino_event_id_t event, // NOLINT(misc-unused-parameters) + arduino_event_info_t info) { if (WiFi.STA.hasIP()) { @@ -212,13 +212,13 @@ void ConnectivityService::onIPv4(WiFiEvent_t event, // NOLINT(misc-unused-parame } } -void ConnectivityService::onIPv6(WiFiEvent_t event, // NOLINT(misc-unused-parameters) - WiFiEventInfo_t info) +void ConnectivityService::onIPv6(arduino_event_id_t event, // NOLINT(misc-unused-parameters) + arduino_event_info_t info) { if (WiFi.STA.hasGlobalIPv6()) { // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) - ESP_LOGI("Wi-Fi", "IPv6 " IPV6STR, IPV62STR(info.got_ip6.ip6_info)); + ESP_LOGI("Wi-Fi", "IPv6 " IPV6STR, IPV62STR(info.got_ip6.ip6_info.ip)); if (!Connectivity.routable) { onRoutable(); @@ -256,7 +256,7 @@ void ConnectivityService::onRoutable() sntp_sync_time(&tv); } -void ConnectivityService::onScan(WiFiEvent_t event) // NOLINT(misc-unused-parameters) +void ConnectivityService::onScan(arduino_event_id_t event) // NOLINT(misc-unused-parameters) { const int16_t count{WiFi.scanComplete()}; if (count > 0) From e8401b47a0737cd6453e27deefc411da9977019a Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Sat, 27 Jun 2026 00:24:45 +0200 Subject: [PATCH 13/15] Refactor IP assembly --- firmware/src/services/ConnectivityService.cpp | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index fb0e6cb6..0ac75a2a 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -203,8 +203,13 @@ void ConnectivityService::onIPv4(arduino_event_id_t event, // NOLINT(misc-unused { if (WiFi.STA.hasIP()) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic,cppcoreguidelines-pro-type-cstyle-cast,cppcoreguidelines-pro-type-vararg,hicpp-vararg) - ESP_LOGI("Wi-Fi", "IPv4 " IPSTR, IP2STR(&info.got_ip.ip_info.ip)); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + ESP_LOGI("Wi-Fi", + "IPv4 %u.%u.%u.%u", + static_cast(info.got_ip.ip_info.ip.addr & 0xFFU), + static_cast((info.got_ip.ip_info.ip.addr >> 8U) & 0xFFU), + static_cast((info.got_ip.ip_info.ip.addr >> 16U) & 0xFFU), + static_cast((info.got_ip.ip_info.ip.addr >> 24U) & 0xFFU)); if (!Connectivity.routable) { onRoutable(); @@ -218,7 +223,16 @@ void ConnectivityService::onIPv6(arduino_event_id_t event, // NOLINT(misc-unused if (WiFi.STA.hasGlobalIPv6()) { // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) - ESP_LOGI("Wi-Fi", "IPv6 " IPV6STR, IPV62STR(info.got_ip6.ip6_info.ip)); + ESP_LOGI("Wi-Fi", + "IPv6 %x:%x:%x:%x:%x:%x:%x:%x", + static_cast((__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[0]) >> 16U) & 0xFFFFU), + static_cast(__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[0]) & 0xFFFFU), + static_cast((__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[1]) >> 16U) & 0xFFFFU), + static_cast(__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[1]) & 0xFFFFU), + static_cast((__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[2]) >> 16U) & 0xFFFFU), + static_cast(__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[2]) & 0xFFFFU), + static_cast((__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[3]) >> 16U) & 0xFFFFU), + static_cast(__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[3]) & 0xFFFFU)); if (!Connectivity.routable) { onRoutable(); From faa4ff8a6e4fd7fa2bad677885fa4af9446ca00f Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Sat, 27 Jun 2026 01:27:45 +0200 Subject: [PATCH 14/15] Mechanical refactor of onRoutable() --- firmware/src/services/ConnectivityService.cpp | 49 +++++++++---------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 0ac75a2a..15b61283 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -210,10 +210,7 @@ void ConnectivityService::onIPv4(arduino_event_id_t event, // NOLINT(misc-unused static_cast((info.got_ip.ip_info.ip.addr >> 8U) & 0xFFU), static_cast((info.got_ip.ip_info.ip.addr >> 16U) & 0xFFU), static_cast((info.got_ip.ip_info.ip.addr >> 24U) & 0xFFU)); - if (!Connectivity.routable) - { - onRoutable(); - } + onRoutable(); } } @@ -233,41 +230,41 @@ void ConnectivityService::onIPv6(arduino_event_id_t event, // NOLINT(misc-unused static_cast(__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[2]) & 0xFFFFU), static_cast((__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[3]) >> 16U) & 0xFFFFU), static_cast(__builtin_bswap32(info.got_ip6.ip6_info.ip.addr[3]) & 0xFFFFU)); - if (!Connectivity.routable) - { - onRoutable(); - } + onRoutable(); } } void ConnectivityService::onRoutable() { - Connectivity.routable = true; - if (WiFiClass::getMode() != wifi_mode_t::WIFI_MODE_STA) - { - JsonDocument doc; // NOLINT(misc-const-correctness) - doc["event"].set("connected"); - Device.transmit(doc.as(), Connectivity.name, false); - ESP_LOGD("Wi-Fi", "terminating Wi-Fi hotspot"); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) - Connectivity.dns.reset(); - WiFiClass::mode(wifi_mode_t::WIFI_MODE_STA); - } - if (!Connectivity.mdns && MDNS.begin(HOSTNAME)) + if (!Connectivity.routable) { - Connectivity.mdns = true; - MDNS.setInstanceName(NAME); + Connectivity.routable = true; + if (WiFiClass::getMode() != wifi_mode_t::WIFI_MODE_STA) + { + JsonDocument doc; // NOLINT(misc-const-correctness) + doc["event"].set("connected"); + Device.transmit(doc.as(), Connectivity.name, false); + ESP_LOGD("Wi-Fi", "terminating Wi-Fi hotspot"); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + Connectivity.dns.reset(); + WiFiClass::mode(wifi_mode_t::WIFI_MODE_STA); + } + if (!Connectivity.mdns && MDNS.begin(HOSTNAME)) + { + Connectivity.mdns = true; + MDNS.setInstanceName(NAME); #if EXTENSION_ALEXA - AlexaExtension::onMdns(); + AlexaExtension::onMdns(); #endif // EXTENSION_ALEXA #if EXTENSION_RESTFUL || EXTENSION_WEBAPP - MDNS.addService("http", "tcp", 80U); + MDNS.addService("http", "tcp", 80U); #endif #if EXTENSION_WEBSOCKET - MDNS.addService("ws", "tcp", 80U); + MDNS.addService("ws", "tcp", 80U); #endif // EXTENSION_WEBSOCKET + } + timeval tv{}; + sntp_sync_time(&tv); } - timeval tv{}; - sntp_sync_time(&tv); } void ConnectivityService::onScan(arduino_event_id_t event) // NOLINT(misc-unused-parameters) From 419b138d75e3f4efd5cea11b5cc56c1ebc83740c Mon Sep 17 00:00:00 2001 From: Jan-Petter Gundersen Date: Sat, 27 Jun 2026 01:41:17 +0200 Subject: [PATCH 15/15] Add missing #endif comment --- firmware/src/services/ConnectivityService.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/src/services/ConnectivityService.cpp b/firmware/src/services/ConnectivityService.cpp index 15b61283..b6ffadc6 100644 --- a/firmware/src/services/ConnectivityService.cpp +++ b/firmware/src/services/ConnectivityService.cpp @@ -257,7 +257,7 @@ void ConnectivityService::onRoutable() #endif // EXTENSION_ALEXA #if EXTENSION_RESTFUL || EXTENSION_WEBAPP MDNS.addService("http", "tcp", 80U); -#endif +#endif // EXTENSION_RESTFUL || EXTENSION_WEBAPP #if EXTENSION_WEBSOCKET MDNS.addService("ws", "tcp", 80U); #endif // EXTENSION_WEBSOCKET