From fe766e2b862e35fe731b2928298877ead13de720 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Sat, 10 Jan 2026 17:36:21 +0100 Subject: [PATCH 1/8] Removed virtual from overridden methods --- src/CatM1ConnectionHandler.h | 16 ++++++++-------- src/CellularConnectionHandler.h | 16 ++++++++-------- src/EthernetConnectionHandler.h | 16 ++++++++-------- src/GSMConnectionHandler.h | 16 ++++++++-------- src/LoRaConnectionHandler.h | 16 ++++++++-------- src/NBConnectionHandler.h | 16 ++++++++-------- src/WiFiConnectionHandler.h | 16 ++++++++-------- 7 files changed, 56 insertions(+), 56 deletions(-) diff --git a/src/CatM1ConnectionHandler.h b/src/CatM1ConnectionHandler.h index 2311589..ae0c2ca 100644 --- a/src/CatM1ConnectionHandler.h +++ b/src/CatM1ConnectionHandler.h @@ -37,18 +37,18 @@ class CatM1ConnectionHandler : public ConnectionHandler CatM1ConnectionHandler(const char * pin, const char * apn, const char * login, const char * pass, RadioAccessTechnologyType rat = CATM1, uint32_t band = BAND_3 | BAND_20 | BAND_19, bool const keep_alive = true); - virtual unsigned long getTime() override; - virtual Client & getClient() override { return _gsm_client; }; - virtual UDP & getUDP() override { return _gsm_udp; }; + unsigned long getTime() override; + Client & getClient() override { return _gsm_client; }; + UDP & getUDP() override { return _gsm_udp; }; protected: - virtual NetworkConnectionState update_handleInit () override; - virtual NetworkConnectionState update_handleConnecting () override; - virtual NetworkConnectionState update_handleConnected () override; - virtual NetworkConnectionState update_handleDisconnecting() override; - virtual NetworkConnectionState update_handleDisconnected () override; + NetworkConnectionState update_handleInit () override; + NetworkConnectionState update_handleConnecting () override; + NetworkConnectionState update_handleConnected () override; + NetworkConnectionState update_handleDisconnecting() override; + NetworkConnectionState update_handleDisconnected () override; private: diff --git a/src/CellularConnectionHandler.h b/src/CellularConnectionHandler.h index 7a5f00b..15fa28b 100644 --- a/src/CellularConnectionHandler.h +++ b/src/CellularConnectionHandler.h @@ -37,18 +37,18 @@ class CellularConnectionHandler : public ConnectionHandler CellularConnectionHandler(const char * pin, const char * apn, const char * login, const char * pass, bool const keep_alive = true); - virtual unsigned long getTime() override; - virtual Client & getClient() override { return _gsm_client; }; - virtual UDP & getUDP() override; + unsigned long getTime() override; + Client & getClient() override { return _gsm_client; }; + UDP & getUDP() override; protected: - virtual NetworkConnectionState update_handleInit () override; - virtual NetworkConnectionState update_handleConnecting () override; - virtual NetworkConnectionState update_handleConnected () override; - virtual NetworkConnectionState update_handleDisconnecting() override; - virtual NetworkConnectionState update_handleDisconnected () override; + NetworkConnectionState update_handleInit () override; + NetworkConnectionState update_handleConnecting () override; + NetworkConnectionState update_handleConnected () override; + NetworkConnectionState update_handleDisconnecting() override; + NetworkConnectionState update_handleDisconnected () override; private: diff --git a/src/EthernetConnectionHandler.h b/src/EthernetConnectionHandler.h index 82dc893..5a35ec7 100644 --- a/src/EthernetConnectionHandler.h +++ b/src/EthernetConnectionHandler.h @@ -54,17 +54,17 @@ class EthernetConnectionHandler : public ConnectionHandler unsigned long const responseTimeout = 4000, bool const keep_alive = true); - virtual unsigned long getTime() override { return 0; } - virtual Client & getClient() override{ return _eth_client; } - virtual UDP & getUDP() override { return _eth_udp; } + unsigned long getTime() override { return 0; } + Client & getClient() override{ return _eth_client; } + UDP & getUDP() override { return _eth_udp; } protected: - virtual NetworkConnectionState update_handleInit () override; - virtual NetworkConnectionState update_handleConnecting () override; - virtual NetworkConnectionState update_handleConnected () override; - virtual NetworkConnectionState update_handleDisconnecting() override; - virtual NetworkConnectionState update_handleDisconnected () override; + NetworkConnectionState update_handleInit () override; + NetworkConnectionState update_handleConnecting () override; + NetworkConnectionState update_handleConnected () override; + NetworkConnectionState update_handleDisconnecting() override; + NetworkConnectionState update_handleDisconnected () override; private: diff --git a/src/GSMConnectionHandler.h b/src/GSMConnectionHandler.h index 15e5047..f3ae086 100644 --- a/src/GSMConnectionHandler.h +++ b/src/GSMConnectionHandler.h @@ -36,18 +36,18 @@ class GSMConnectionHandler : public ConnectionHandler GSMConnectionHandler(const char * pin, const char * apn, const char * login, const char * pass, bool const keep_alive = true); - virtual unsigned long getTime() override; - virtual Client & getClient() override { return _gsm_client; }; - virtual UDP & getUDP() override { return _gsm_udp; }; + unsigned long getTime() override; + Client & getClient() override { return _gsm_client; }; + UDP & getUDP() override { return _gsm_udp; }; protected: - virtual NetworkConnectionState update_handleInit () override; - virtual NetworkConnectionState update_handleConnecting () override; - virtual NetworkConnectionState update_handleConnected () override; - virtual NetworkConnectionState update_handleDisconnecting() override; - virtual NetworkConnectionState update_handleDisconnected () override; + NetworkConnectionState update_handleInit () override; + NetworkConnectionState update_handleConnecting () override; + NetworkConnectionState update_handleConnected () override; + NetworkConnectionState update_handleDisconnecting() override; + NetworkConnectionState update_handleDisconnected () override; private: diff --git a/src/LoRaConnectionHandler.h b/src/LoRaConnectionHandler.h index b56505a..56e2ecf 100644 --- a/src/LoRaConnectionHandler.h +++ b/src/LoRaConnectionHandler.h @@ -36,9 +36,9 @@ class LoRaConnectionHandler : public ConnectionHandler LoRaConnectionHandler(char const * appeui, char const * appkey, _lora_band const band = _lora_band::EU868, char const * channelMask = NULL, _lora_class const device_class = _lora_class::CLASS_A); - virtual int write(const uint8_t *buf, size_t size) override; - virtual int read() override; - virtual bool available() override; + int write(const uint8_t *buf, size_t size) override; + int read() override; + bool available() override; inline String getVersion() { return _modem.version(); } inline String getDeviceEUI() { return _modem.deviceEUI(); } @@ -57,11 +57,11 @@ class LoRaConnectionHandler : public ConnectionHandler protected: - virtual NetworkConnectionState update_handleInit () override; - virtual NetworkConnectionState update_handleConnecting () override; - virtual NetworkConnectionState update_handleConnected () override; - virtual NetworkConnectionState update_handleDisconnecting() override; - virtual NetworkConnectionState update_handleDisconnected () override; + NetworkConnectionState update_handleInit () override; + NetworkConnectionState update_handleConnecting () override; + NetworkConnectionState update_handleConnected () override; + NetworkConnectionState update_handleDisconnecting() override; + NetworkConnectionState update_handleDisconnected () override; private: diff --git a/src/NBConnectionHandler.h b/src/NBConnectionHandler.h index a271199..f722fcb 100644 --- a/src/NBConnectionHandler.h +++ b/src/NBConnectionHandler.h @@ -38,18 +38,18 @@ class NBConnectionHandler : public ConnectionHandler NBConnectionHandler(char const * pin, char const * apn, char const * login, char const * pass, bool const keep_alive = true); - virtual unsigned long getTime() override; - virtual Client & getClient() override { return _nb_client; }; - virtual UDP & getUDP() override { return _nb_udp; }; + unsigned long getTime() override; + Client & getClient() override { return _nb_client; }; + UDP & getUDP() override { return _nb_udp; }; protected: - virtual NetworkConnectionState update_handleInit () override; - virtual NetworkConnectionState update_handleConnecting () override; - virtual NetworkConnectionState update_handleConnected () override; - virtual NetworkConnectionState update_handleDisconnecting() override; - virtual NetworkConnectionState update_handleDisconnected () override; + NetworkConnectionState update_handleInit () override; + NetworkConnectionState update_handleConnecting () override; + NetworkConnectionState update_handleConnected () override; + NetworkConnectionState update_handleDisconnecting() override; + NetworkConnectionState update_handleDisconnected () override; private: diff --git a/src/WiFiConnectionHandler.h b/src/WiFiConnectionHandler.h index 1c12c99..f614bc1 100644 --- a/src/WiFiConnectionHandler.h +++ b/src/WiFiConnectionHandler.h @@ -59,18 +59,18 @@ class WiFiConnectionHandler : public ConnectionHandler WiFiConnectionHandler(char const * ssid, char const * pass, bool const keep_alive = true); - virtual unsigned long getTime() override; - virtual Client & getClient() override { return _wifi_client; } - virtual UDP & getUDP() override { return _wifi_udp; } + unsigned long getTime() override; + Client & getClient() override { return _wifi_client; } + UDP & getUDP() override { return _wifi_udp; } protected: - virtual NetworkConnectionState update_handleInit () override; - virtual NetworkConnectionState update_handleConnecting () override; - virtual NetworkConnectionState update_handleConnected () override; - virtual NetworkConnectionState update_handleDisconnecting() override; - virtual NetworkConnectionState update_handleDisconnected () override; + NetworkConnectionState update_handleInit () override; + NetworkConnectionState update_handleConnecting () override; + NetworkConnectionState update_handleConnected () override; + NetworkConnectionState update_handleDisconnecting() override; + NetworkConnectionState update_handleDisconnected () override; private: WiFiUDP _wifi_udp; From 61a50f60358285b0448889a5e6fffd41584692ec Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Sat, 10 Jan 2026 17:57:10 +0100 Subject: [PATCH 2/8] unifying codestile --- src/GSMConnectionHandler.cpp | 2 +- src/WiFiConnectionHandler.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GSMConnectionHandler.cpp b/src/GSMConnectionHandler.cpp index 82362f8..bb16b31 100644 --- a/src/GSMConnectionHandler.cpp +++ b/src/GSMConnectionHandler.cpp @@ -144,7 +144,7 @@ NetworkConnectionState GSMConnectionHandler::update_handleDisconnected() } else { - return NetworkConnectionState::CLOSED; + return NetworkConnectionState::CLOSED; } } diff --git a/src/WiFiConnectionHandler.cpp b/src/WiFiConnectionHandler.cpp index 54dd61b..bccba6f 100644 --- a/src/WiFiConnectionHandler.cpp +++ b/src/WiFiConnectionHandler.cpp @@ -117,7 +117,7 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() DEBUG_INFO(F("Connected to \"%s\""), _settings.wifi.ssid); #endif #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) - configTime(0, 0, "time.arduino.cc", "pool.ntp.org", "time.nist.gov"); + configTime(0, 0, "time.arduino.cc", "pool.ntp.org", "time.nist.gov"); #endif return NetworkConnectionState::CONNECTING; } From 51abc43e9bac315fbba639f707fe35727721d211 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Sat, 10 Jan 2026 17:42:27 +0100 Subject: [PATCH 3/8] moved boolean flags into a C struct --- src/CatM1ConnectionHandler.cpp | 6 +++--- src/CellularConnectionHandler.cpp | 4 ++-- src/ConnectionHandlerInterface.cpp | 7 +++---- src/ConnectionHandlerInterface.h | 12 ++++++++---- src/EthernetConnectionHandler.cpp | 6 +++--- src/GSMConnectionHandler.cpp | 6 +++--- src/GenericConnectionHandler.cpp | 6 +++--- src/LoRaConnectionHandler.cpp | 6 +++--- src/NBConnectionHandler.cpp | 2 +- src/WiFiConnectionHandler.cpp | 6 +++--- 10 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/CatM1ConnectionHandler.cpp b/src/CatM1ConnectionHandler.cpp index 16f0db9..a49249f 100644 --- a/src/CatM1ConnectionHandler.cpp +++ b/src/CatM1ConnectionHandler.cpp @@ -31,7 +31,7 @@ CatM1ConnectionHandler::CatM1ConnectionHandler( { _settings.type = NetworkAdapter::CATM1; // To keep the backward compatibility, the user can call enableCheckInternetAvailability(false) for disabling the check - _check_internet_availability = true; + _flags.check_internet_availability = true; strncpy(_settings.catm1.pin, pin, sizeof(_settings.catm1.pin)-1); strncpy(_settings.catm1.apn, apn, sizeof(_settings.catm1.apn)-1); strncpy(_settings.catm1.login, login, sizeof(_settings.catm1.login)-1); @@ -90,7 +90,7 @@ NetworkConnectionState CatM1ConnectionHandler::update_handleConnecting() return NetworkConnectionState::DISCONNECTED; } - if(!_check_internet_availability){ + if(!_flags.check_internet_availability){ return NetworkConnectionState::CONNECTED; } @@ -130,7 +130,7 @@ NetworkConnectionState CatM1ConnectionHandler::update_handleDisconnecting() NetworkConnectionState CatM1ConnectionHandler::update_handleDisconnected() { GSM.end(); - if (_keep_alive) + if (_flags.keep_alive) { return NetworkConnectionState::INIT; } diff --git a/src/CellularConnectionHandler.cpp b/src/CellularConnectionHandler.cpp index b73f586..5e00b4b 100644 --- a/src/CellularConnectionHandler.cpp +++ b/src/CellularConnectionHandler.cpp @@ -77,7 +77,7 @@ NetworkConnectionState CellularConnectionHandler::update_handleConnecting() return NetworkConnectionState::INIT; } - if (!_check_internet_availability) { + if (!_flags.check_internet_availability) { return NetworkConnectionState::CONNECTED; } @@ -105,7 +105,7 @@ NetworkConnectionState CellularConnectionHandler::update_handleDisconnecting() NetworkConnectionState CellularConnectionHandler::update_handleDisconnected() { - if (_keep_alive) { + if (_flags.keep_alive) { return NetworkConnectionState::INIT; } return NetworkConnectionState::CLOSED; diff --git a/src/ConnectionHandlerInterface.cpp b/src/ConnectionHandlerInterface.cpp index e206b85..b307995 100644 --- a/src/ConnectionHandlerInterface.cpp +++ b/src/ConnectionHandlerInterface.cpp @@ -19,8 +19,7 @@ ******************************************************************************/ ConnectionHandler::ConnectionHandler(bool const keep_alive, NetworkAdapter interface) -: _keep_alive{keep_alive} -, _check_internet_availability{false} +: _flags{keep_alive, false} , _interface{interface} , _lastConnectionTickTime{millis()} , _current_net_connection_state{NetworkConnectionState::INIT} @@ -109,14 +108,14 @@ void ConnectionHandler::connect() { if (_current_net_connection_state != NetworkConnectionState::INIT && _current_net_connection_state != NetworkConnectionState::CONNECTING) { - _keep_alive = true; + _flags.keep_alive = true; _current_net_connection_state = NetworkConnectionState::INIT; } } void ConnectionHandler::disconnect() { - _keep_alive = false; + _flags.keep_alive = false; _current_net_connection_state = NetworkConnectionState::DISCONNECTING; } diff --git a/src/ConnectionHandlerInterface.h b/src/ConnectionHandlerInterface.h index cfdebd3..620f939 100644 --- a/src/ConnectionHandlerInterface.h +++ b/src/ConnectionHandlerInterface.h @@ -23,6 +23,7 @@ #include #include "ConnectionHandlerDefinitions.h" #include "connectionHandlerModels/settings.h" +#include #include @@ -72,7 +73,7 @@ class ConnectionHandler { virtual void connect(); virtual void disconnect(); void enableCheckInternetAvailability(bool enable) { - _check_internet_availability = enable; + _flags.check_internet_availability = enable; } virtual void addCallback(NetworkConnectionEvent const event, OnNetworkEventCallback callback); @@ -101,7 +102,7 @@ class ConnectionHandler { return; } - virtual void setKeepAlive(bool keep_alive=true) { this->_keep_alive = keep_alive; } + virtual void setKeepAlive(bool keep_alive=true) { this->_flags.keep_alive = keep_alive; } inline void updateTimeoutTable(const TimeoutTable& t) { _timeoutTable = t; } inline void updateTimeoutTable(TimeoutTable&& t) { _timeoutTable = std::move(t); } @@ -113,8 +114,11 @@ class ConnectionHandler { virtual NetworkConnectionState updateConnectionState(); virtual void updateCallback(NetworkConnectionState next_net_connection_state); - bool _keep_alive; - bool _check_internet_availability; + struct Flags { + bool keep_alive: 1; + bool check_internet_availability: 1; + } _flags; + NetworkAdapter _interface; virtual NetworkConnectionState update_handleInit () = 0; diff --git a/src/EthernetConnectionHandler.cpp b/src/EthernetConnectionHandler.cpp index 9ef06cf..f930dda 100644 --- a/src/EthernetConnectionHandler.cpp +++ b/src/EthernetConnectionHandler.cpp @@ -106,7 +106,7 @@ NetworkConnectionState EthernetConnectionHandler::update_handleConnecting() return NetworkConnectionState::INIT; } - if (!_check_internet_availability) { + if (!_flags.check_internet_availability) { return NetworkConnectionState::CONNECTED; } @@ -130,7 +130,7 @@ NetworkConnectionState EthernetConnectionHandler::update_handleConnected() { if (Ethernet.linkStatus() == LinkOFF) { DEBUG_ERROR(F("Ethernet link OFF, connection lost.")); - if (_keep_alive) + if (_flags.keep_alive) { DEBUG_ERROR(F("Attempting reconnection")); } @@ -147,7 +147,7 @@ NetworkConnectionState EthernetConnectionHandler::update_handleDisconnecting() NetworkConnectionState EthernetConnectionHandler::update_handleDisconnected() { - if (_keep_alive) + if (_flags.keep_alive) { return NetworkConnectionState::INIT; } diff --git a/src/GSMConnectionHandler.cpp b/src/GSMConnectionHandler.cpp index bb16b31..be3ef44 100644 --- a/src/GSMConnectionHandler.cpp +++ b/src/GSMConnectionHandler.cpp @@ -47,7 +47,7 @@ GSMConnectionHandler::GSMConnectionHandler(const char * pin, const char * apn, c { _settings.type = NetworkAdapter::GSM; // To keep the backward compatibility, the user can call enableCheckInternetAvailability(false) for disabling the check - _check_internet_availability = true; + _flags.check_internet_availability = true; strncpy(_settings.gsm.pin, pin, sizeof(_settings.gsm.pin)-1); strncpy(_settings.gsm.apn, apn, sizeof(_settings.gsm.apn)-1); strncpy(_settings.gsm.login, login, sizeof(_settings.gsm.login)-1); @@ -100,7 +100,7 @@ NetworkConnectionState GSMConnectionHandler::update_handleInit() NetworkConnectionState GSMConnectionHandler::update_handleConnecting() { - if(!_check_internet_availability){ + if(!_flags.check_internet_availability){ return NetworkConnectionState::CONNECTED; } @@ -138,7 +138,7 @@ NetworkConnectionState GSMConnectionHandler::update_handleDisconnecting() NetworkConnectionState GSMConnectionHandler::update_handleDisconnected() { - if (_keep_alive) + if (_flags.keep_alive) { return NetworkConnectionState::INIT; } diff --git a/src/GenericConnectionHandler.cpp b/src/GenericConnectionHandler.cpp index a607681..60b68e5 100644 --- a/src/GenericConnectionHandler.cpp +++ b/src/GenericConnectionHandler.cpp @@ -36,8 +36,8 @@ bool GenericConnectionHandler::updateSetting(const models::NetworkSetting& s) { if(_ch != nullptr) { _interface = s.type; - _ch->setKeepAlive(_keep_alive); - _ch->enableCheckInternetAvailability(_check_internet_availability); + _ch->setKeepAlive(_flags.keep_alive); + _ch->enableCheckInternetAvailability(_flags.check_internet_availability); // TODO update this->flags return _ch->updateSetting(s); } else { _interface = NetworkAdapter::NONE; @@ -108,7 +108,7 @@ void GenericConnectionHandler::disconnect() { } void GenericConnectionHandler::setKeepAlive(bool keep_alive) { - _keep_alive = keep_alive; + _flags.keep_alive = keep_alive; if(_ch!=nullptr) { _ch->setKeepAlive(keep_alive); diff --git a/src/LoRaConnectionHandler.cpp b/src/LoRaConnectionHandler.cpp index 19006bc..acfde54 100644 --- a/src/LoRaConnectionHandler.cpp +++ b/src/LoRaConnectionHandler.cpp @@ -153,7 +153,7 @@ NetworkConnectionState LoRaConnectionHandler::update_handleConnected() if (network_status != true) { DEBUG_ERROR(F("Connection to the network lost.")); - if (_keep_alive) + if (_flags.keep_alive) { DEBUG_ERROR(F("Attempting reconnection")); } @@ -165,7 +165,7 @@ NetworkConnectionState LoRaConnectionHandler::update_handleConnected() NetworkConnectionState LoRaConnectionHandler::update_handleDisconnecting() { DEBUG_ERROR(F("Connection to the network lost.")); - if (_keep_alive) + if (_flags.keep_alive) { DEBUG_ERROR(F("Attempting reconnection")); } @@ -174,7 +174,7 @@ NetworkConnectionState LoRaConnectionHandler::update_handleDisconnecting() NetworkConnectionState LoRaConnectionHandler::update_handleDisconnected() { - if (_keep_alive) + if (_flags.keep_alive) { return NetworkConnectionState::INIT; } diff --git a/src/NBConnectionHandler.cpp b/src/NBConnectionHandler.cpp index 4da9fd6..9431053 100644 --- a/src/NBConnectionHandler.cpp +++ b/src/NBConnectionHandler.cpp @@ -138,7 +138,7 @@ NetworkConnectionState NBConnectionHandler::update_handleDisconnecting() NetworkConnectionState NBConnectionHandler::update_handleDisconnected() { - if (_keep_alive) + if (_flags.keep_alive) { return NetworkConnectionState::INIT; } diff --git a/src/WiFiConnectionHandler.cpp b/src/WiFiConnectionHandler.cpp index bccba6f..f6ea09b 100644 --- a/src/WiFiConnectionHandler.cpp +++ b/src/WiFiConnectionHandler.cpp @@ -129,7 +129,7 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnecting() return NetworkConnectionState::INIT; } - if(!_check_internet_availability){ + if(!_flags.check_internet_availability){ return NetworkConnectionState::CONNECTED; } @@ -156,7 +156,7 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnected() DEBUG_VERBOSE(F("WiFi.status(): %d"), WiFi.status()); DEBUG_ERROR(F("Connection to \"%s\" lost."), _settings.wifi.ssid); #endif - if (_keep_alive) + if (_flags.keep_alive) { #if !defined(__AVR__) DEBUG_INFO(F("Attempting reconnection")); @@ -179,7 +179,7 @@ NetworkConnectionState WiFiConnectionHandler::update_handleDisconnected() #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) WiFi.end(); #endif /* #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) */ - if (_keep_alive) + if (_flags.keep_alive) { return NetworkConnectionState::INIT; } From 032d9aed7183aa5d0e706293f06e8c7ac46df38b Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Sat, 10 Jan 2026 17:46:58 +0100 Subject: [PATCH 4/8] Added flags to check for settings provisioning The objective of those flags is to verify that connection handlers that require settings to be provided before starting them properly configured. --- src/CatM1ConnectionHandler.cpp | 6 ++++-- src/CellularConnectionHandler.cpp | 5 +++-- src/ConnectionHandlerInterface.cpp | 5 +++-- src/ConnectionHandlerInterface.h | 6 +++++- src/EthernetConnectionHandler.cpp | 4 ++++ src/GSMConnectionHandler.cpp | 6 ++++-- src/GenericConnectionHandler.cpp | 6 ++++-- src/GenericConnectionHandler.h | 2 +- src/LoRaConnectionHandler.cpp | 4 +++- src/NBConnectionHandler.cpp | 8 +++++--- src/WiFiConnectionHandler.cpp | 10 +++++++--- 11 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/CatM1ConnectionHandler.cpp b/src/CatM1ConnectionHandler.cpp index a49249f..3b1531d 100644 --- a/src/CatM1ConnectionHandler.cpp +++ b/src/CatM1ConnectionHandler.cpp @@ -22,12 +22,12 @@ ******************************************************************************/ CatM1ConnectionHandler::CatM1ConnectionHandler() -: ConnectionHandler(true, NetworkAdapter::CATM1) { } +: ConnectionHandler(true, NetworkAdapter::CATM1, true) { } CatM1ConnectionHandler::CatM1ConnectionHandler( const char * pin, const char * apn, const char * login, const char * pass, RadioAccessTechnologyType rat, uint32_t band, bool const keep_alive) -: ConnectionHandler{keep_alive, NetworkAdapter::CATM1} +: ConnectionHandler{keep_alive, NetworkAdapter::CATM1, true} { _settings.type = NetworkAdapter::CATM1; // To keep the backward compatibility, the user can call enableCheckInternetAvailability(false) for disabling the check @@ -39,6 +39,8 @@ CatM1ConnectionHandler::CatM1ConnectionHandler( _settings.catm1.rat = static_cast(rat); _settings.catm1.band = band; _reset = false; + + _flags.settings_provided = true; } /****************************************************************************** diff --git a/src/CellularConnectionHandler.cpp b/src/CellularConnectionHandler.cpp index 5e00b4b..33ff83b 100644 --- a/src/CellularConnectionHandler.cpp +++ b/src/CellularConnectionHandler.cpp @@ -22,10 +22,10 @@ CTOR/DTOR ******************************************************************************/ CellularConnectionHandler::CellularConnectionHandler() -: ConnectionHandler(true, NetworkAdapter::CELL) {} +: ConnectionHandler(true, NetworkAdapter::CELL, true) { } CellularConnectionHandler::CellularConnectionHandler(const char * pin, const char * apn, const char * login, const char * pass, bool const keep_alive) -: ConnectionHandler{keep_alive, NetworkAdapter::CELL} +: ConnectionHandler{keep_alive, NetworkAdapter::CELL, true} { _settings.type = NetworkAdapter::CELL; strncpy(_settings.cell.pin, pin, sizeof(_settings.cell.pin)-1); @@ -33,6 +33,7 @@ CellularConnectionHandler::CellularConnectionHandler(const char * pin, const cha strncpy(_settings.cell.login, login, sizeof(_settings.cell.login)-1); strncpy(_settings.cell.pass, pass, sizeof(_settings.cell.pass)-1); + _flags.settings_provided = true; } /****************************************************************************** diff --git a/src/ConnectionHandlerInterface.cpp b/src/ConnectionHandlerInterface.cpp index b307995..a7489a6 100644 --- a/src/ConnectionHandlerInterface.cpp +++ b/src/ConnectionHandlerInterface.cpp @@ -18,8 +18,9 @@ CONSTRUCTOR/DESTRUCTOR ******************************************************************************/ -ConnectionHandler::ConnectionHandler(bool const keep_alive, NetworkAdapter interface) -: _flags{keep_alive, false} +ConnectionHandler::ConnectionHandler(bool const keep_alive, NetworkAdapter interface, + bool settings_required) +: _flags{keep_alive, false, settings_required, false} , _interface{interface} , _lastConnectionTickTime{millis()} , _current_net_connection_state{NetworkConnectionState::INIT} diff --git a/src/ConnectionHandlerInterface.h b/src/ConnectionHandlerInterface.h index 620f939..0eebef9 100644 --- a/src/ConnectionHandlerInterface.h +++ b/src/ConnectionHandlerInterface.h @@ -43,7 +43,8 @@ class GenericConnectionHandler; class ConnectionHandler { public: - ConnectionHandler(bool const keep_alive=true, NetworkAdapter interface=NetworkAdapter::NONE); + ConnectionHandler(bool const keep_alive=true, NetworkAdapter interface=NetworkAdapter::NONE, + bool settings_required = false); virtual ~ConnectionHandler() {} @@ -91,6 +92,7 @@ class ConnectionHandler { virtual bool updateSetting(const models::NetworkSetting& s) { if(_current_net_connection_state == NetworkConnectionState::INIT && s.type == _interface) { memcpy(&_settings, &s, sizeof(s)); + _flags.settings_provided = true; return true; } @@ -117,6 +119,8 @@ class ConnectionHandler { struct Flags { bool keep_alive: 1; bool check_internet_availability: 1; + bool settings_required: 1; + bool settings_provided: 1; } _flags; NetworkAdapter _interface; diff --git a/src/EthernetConnectionHandler.cpp b/src/EthernetConnectionHandler.cpp index f930dda..a10a3c9 100644 --- a/src/EthernetConnectionHandler.cpp +++ b/src/EthernetConnectionHandler.cpp @@ -44,6 +44,8 @@ EthernetConnectionHandler::EthernetConnectionHandler( memset(_settings.eth.netmask.dword, 0, sizeof(_settings.eth.netmask.dword)); _settings.eth.timeout = timeout; _settings.eth.response_timeout = responseTimeout; + + _flags.settings_provided = true; } EthernetConnectionHandler::EthernetConnectionHandler( @@ -58,6 +60,8 @@ EthernetConnectionHandler::EthernetConnectionHandler( fromIPAddress(netmask, _settings.eth.netmask); _settings.eth.timeout = timeout; _settings.eth.response_timeout = responseTimeout; + + _flags.settings_provided = true; } /****************************************************************************** diff --git a/src/GSMConnectionHandler.cpp b/src/GSMConnectionHandler.cpp index be3ef44..17c2f71 100644 --- a/src/GSMConnectionHandler.cpp +++ b/src/GSMConnectionHandler.cpp @@ -40,10 +40,10 @@ __attribute__((weak)) void mkr_gsm_feed_watchdog() CTOR/DTOR ******************************************************************************/ GSMConnectionHandler::GSMConnectionHandler() -: ConnectionHandler(true, NetworkAdapter::GSM) {} +: ConnectionHandler(true, NetworkAdapter::GSM, true) { } GSMConnectionHandler::GSMConnectionHandler(const char * pin, const char * apn, const char * login, const char * pass, bool const keep_alive) -: ConnectionHandler{keep_alive, NetworkAdapter::GSM} +: ConnectionHandler(keep_alive, NetworkAdapter::GSM, true) { _settings.type = NetworkAdapter::GSM; // To keep the backward compatibility, the user can call enableCheckInternetAvailability(false) for disabling the check @@ -52,6 +52,8 @@ GSMConnectionHandler::GSMConnectionHandler(const char * pin, const char * apn, c strncpy(_settings.gsm.apn, apn, sizeof(_settings.gsm.apn)-1); strncpy(_settings.gsm.login, login, sizeof(_settings.gsm.login)-1); strncpy(_settings.gsm.pass, pass, sizeof(_settings.gsm.pass)-1); + + _flags.settings_provided = true; } /****************************************************************************** diff --git a/src/GenericConnectionHandler.cpp b/src/GenericConnectionHandler.cpp index 60b68e5..d2e5904 100644 --- a/src/GenericConnectionHandler.cpp +++ b/src/GenericConnectionHandler.cpp @@ -17,6 +17,9 @@ static inline ConnectionHandler* instantiate_handler(NetworkAdapter adapter); +GenericConnectionHandler::GenericConnectionHandler(bool const keep_alive) +: ConnectionHandler(keep_alive, NetworkAdapter::NONE, true), _ch(nullptr) { } + bool GenericConnectionHandler::updateSetting(const models::NetworkSetting& s) { if(_ch != nullptr && _ch->_current_net_connection_state != NetworkConnectionState::INIT) { // If the internal connection handler is already being used and not in INIT phase we cannot update the settings @@ -36,8 +39,7 @@ bool GenericConnectionHandler::updateSetting(const models::NetworkSetting& s) { if(_ch != nullptr) { _interface = s.type; - _ch->setKeepAlive(_flags.keep_alive); - _ch->enableCheckInternetAvailability(_flags.check_internet_availability); // TODO update this->flags + _ch->_flags = _flags; return _ch->updateSetting(s); } else { _interface = NetworkAdapter::NONE; diff --git a/src/GenericConnectionHandler.h b/src/GenericConnectionHandler.h index 81df0f7..230a17d 100644 --- a/src/GenericConnectionHandler.h +++ b/src/GenericConnectionHandler.h @@ -29,7 +29,7 @@ class GenericConnectionHandler : public ConnectionHandler { public: - GenericConnectionHandler(bool const keep_alive=true): ConnectionHandler(keep_alive), _ch(nullptr) {} + GenericConnectionHandler(bool const keep_alive=true); #if defined(BOARD_HAS_NOTECARD) || defined(BOARD_HAS_LORA) virtual bool available() = 0; diff --git a/src/LoRaConnectionHandler.cpp b/src/LoRaConnectionHandler.cpp index acfde54..974a7b4 100644 --- a/src/LoRaConnectionHandler.cpp +++ b/src/LoRaConnectionHandler.cpp @@ -38,7 +38,7 @@ typedef enum CTOR/DTOR ******************************************************************************/ LoRaConnectionHandler::LoRaConnectionHandler(char const * appeui, char const * appkey, _lora_band const band, char const * channelMask, _lora_class const device_class) -: ConnectionHandler{false, NetworkAdapter::LORA} +: ConnectionHandler{false, NetworkAdapter::LORA, true} { _settings.type = NetworkAdapter::LORA; strncpy(_settings.lora.appeui, appeui, sizeof(_settings.lora.appeui)-1); @@ -46,6 +46,8 @@ LoRaConnectionHandler::LoRaConnectionHandler(char const * appeui, char const * a _settings.lora.band = band; strncpy(_settings.lora.channelMask, channelMask, sizeof(_settings.lora.channelMask)-1); _settings.lora.deviceClass = device_class; + + _flags.settings_provided = true; } /****************************************************************************** diff --git a/src/NBConnectionHandler.cpp b/src/NBConnectionHandler.cpp index 9431053..1e65361 100644 --- a/src/NBConnectionHandler.cpp +++ b/src/NBConnectionHandler.cpp @@ -40,12 +40,12 @@ __attribute__((weak)) void mkr_nb_feed_watchdog() ******************************************************************************/ NBConnectionHandler::NBConnectionHandler() -: ConnectionHandler(true, NetworkAdapter::NB) {} +: ConnectionHandler(true, NetworkAdapter::NB, true) {} NBConnectionHandler::NBConnectionHandler(char const * pin, bool const keep_alive) : NBConnectionHandler(pin, "", keep_alive) { - + _flags.settings_provided = true; } NBConnectionHandler::NBConnectionHandler(char const * pin, char const * apn, bool const keep_alive) @@ -55,13 +55,15 @@ NBConnectionHandler::NBConnectionHandler(char const * pin, char const * apn, boo } NBConnectionHandler::NBConnectionHandler(char const * pin, char const * apn, char const * login, char const * pass, bool const keep_alive) -: ConnectionHandler{keep_alive, NetworkAdapter::NB} +: ConnectionHandler{keep_alive, NetworkAdapter::NB, true} { _settings.type = NetworkAdapter::NB; strncpy(_settings.nb.pin, pin, sizeof(_settings.nb.pin)-1); strncpy(_settings.nb.apn, apn, sizeof(_settings.nb.apn)-1); strncpy(_settings.nb.login, login, sizeof(_settings.nb.login)-1); strncpy(_settings.nb.pass, pass, sizeof(_settings.nb.pass)-1); + + _flags.settings_provided = true; } /****************************************************************************** diff --git a/src/WiFiConnectionHandler.cpp b/src/WiFiConnectionHandler.cpp index f6ea09b..114cac4 100644 --- a/src/WiFiConnectionHandler.cpp +++ b/src/WiFiConnectionHandler.cpp @@ -29,15 +29,15 @@ static int const ESP_WIFI_CONNECTION_TIMEOUT = 3000; ******************************************************************************/ WiFiConnectionHandler::WiFiConnectionHandler() -: ConnectionHandler(true, NetworkAdapter::WIFI) { -} +: ConnectionHandler(true, NetworkAdapter::WIFI, true) { } WiFiConnectionHandler::WiFiConnectionHandler(char const * ssid, char const * pass, bool const keep_alive) -: ConnectionHandler{keep_alive, NetworkAdapter::WIFI} +: ConnectionHandler(keep_alive, NetworkAdapter::WIFI, true) { _settings.type = NetworkAdapter::WIFI; strncpy(_settings.wifi.ssid, ssid, sizeof(_settings.wifi.ssid)-1); strncpy(_settings.wifi.pwd, pass, sizeof(_settings.wifi.pwd)-1); + _flags.settings_provided = true; } /****************************************************************************** @@ -90,6 +90,10 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() WiFi.mode(WIFI_STA); #endif /* #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) */ + if(!_flags.settings_provided) { + return NetworkConnectionState::INIT; + } + if (WiFi.status() != WL_CONNECTED) { WiFi.begin(_settings.wifi.ssid, _settings.wifi.pwd); From 8bdd5f473d98b1d272b3d95149212cbf67fe50a7 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Sat, 10 Jan 2026 17:54:27 +0100 Subject: [PATCH 5/8] Improving readability of WifiConnectionHandler By providing stub empty definition of DEBUG_* macro utility for AVR platform we aim to remove all the ifdefs in WiFiConnectionHandler::update_handleInit() function thus improving itse readability --- src/ConnectionHandlerDefinitions.h | 22 ++++++++++++++++++++++ src/WiFiConnectionHandler.cpp | 20 ++------------------ 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/ConnectionHandlerDefinitions.h b/src/ConnectionHandlerDefinitions.h index 969ecd1..b360a04 100644 --- a/src/ConnectionHandlerDefinitions.h +++ b/src/ConnectionHandlerDefinitions.h @@ -136,6 +136,28 @@ #define NETWORK_CONNECTED WL_CONNECTED #endif +#if defined(__AVR__) +#ifndef DEBUG_ERROR +# define DEBUG_ERROR(fmt, ...) (void)0 +#endif + +#ifndef DEBUG_WARNING +# define DEBUG_WARNING(fmt, ...) (void)0 +#endif + +#ifndef DEBUG_INFO +# define DEBUG_INFO(fmt, ...) (void)0 +#endif + +#ifndef DEBUG_DEBUG +# define DEBUG_DEBUG(fmt, ...) (void)0 +#endif + +#ifndef DEBUG_VERBOSE +# define DEBUG_VERBOSE(fmt, ...) (void)0 +#endif +#endif // defined(__AVR__) + /****************************************************************************** TYPEDEFS ******************************************************************************/ diff --git a/src/WiFiConnectionHandler.cpp b/src/WiFiConnectionHandler.cpp index 114cac4..5d17a01 100644 --- a/src/WiFiConnectionHandler.cpp +++ b/src/WiFiConnectionHandler.cpp @@ -59,30 +59,20 @@ unsigned long WiFiConnectionHandler::getTime() NetworkConnectionState WiFiConnectionHandler::update_handleInit() { -#if !defined(__AVR__) - DEBUG_INFO(F("WiFi.status(): %d"), WiFi.status()); -#endif - #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) if (WiFi.status() == NETWORK_HARDWARE_ERROR) { -#if !defined(__AVR__) DEBUG_ERROR(F("WiFi Hardware failure.\nMake sure you are using a WiFi enabled board/shield.")); DEBUG_ERROR(F("Then reset and retry.")); -#endif return NetworkConnectionState::ERROR; } -#if !defined(__AVR__) DEBUG_INFO(F("Current WiFi Firmware: %s"), WiFi.firmwareVersion()); -#endif #if defined(WIFI_FIRMWARE_VERSION_REQUIRED) if (String(WiFi.firmwareVersion()) < String(WIFI_FIRMWARE_VERSION_REQUIRED)) { -#if !defined(__AVR__) DEBUG_ERROR(F("Latest WiFi Firmware: %s"), WIFI_FIRMWARE_VERSION_REQUIRED); DEBUG_ERROR(F("Please update to the latest version for best performance.")); -#endif delay(5000); } #endif @@ -94,6 +84,8 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() return NetworkConnectionState::INIT; } + DEBUG_INFO(F("WiFi.status(): %d"), WiFi.status()); + if (WiFi.status() != WL_CONNECTED) { WiFi.begin(_settings.wifi.ssid, _settings.wifi.pwd); @@ -109,17 +101,13 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() if (WiFi.status() != NETWORK_CONNECTED) { -#if !defined(__AVR__) DEBUG_ERROR(F("Connection to \"%s\" failed"), _settings.wifi.ssid); DEBUG_INFO(F("Retrying in \"%d\" milliseconds"), _timeoutTable.timeout.init); -#endif return NetworkConnectionState::INIT; } else { -#if !defined(__AVR__) DEBUG_INFO(F("Connected to \"%s\""), _settings.wifi.ssid); -#endif #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) configTime(0, 0, "time.arduino.cc", "pool.ntp.org", "time.nist.gov"); #endif @@ -156,15 +144,11 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnected() { if (WiFi.status() != WL_CONNECTED) { -#if !defined(__AVR__) DEBUG_VERBOSE(F("WiFi.status(): %d"), WiFi.status()); DEBUG_ERROR(F("Connection to \"%s\" lost."), _settings.wifi.ssid); -#endif if (_flags.keep_alive) { -#if !defined(__AVR__) DEBUG_INFO(F("Attempting reconnection")); -#endif } return NetworkConnectionState::DISCONNECTED; From 8d771dbccbdd857537487fb5106b72f78dd46e83 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Sat, 10 Jan 2026 17:57:29 +0100 Subject: [PATCH 6/8] Going into error state if wifi firmware version isn't up to date --- src/WiFiConnectionHandler.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/WiFiConnectionHandler.cpp b/src/WiFiConnectionHandler.cpp index 5d17a01..9c0fca0 100644 --- a/src/WiFiConnectionHandler.cpp +++ b/src/WiFiConnectionHandler.cpp @@ -74,6 +74,8 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() DEBUG_ERROR(F("Latest WiFi Firmware: %s"), WIFI_FIRMWARE_VERSION_REQUIRED); DEBUG_ERROR(F("Please update to the latest version for best performance.")); delay(5000); + + return NetworkConnectionState::ERROR; } #endif #else From 2a012ffcec13f075ba866b53260e9f6ffe67a3c5 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Sat, 10 Jan 2026 18:00:39 +0100 Subject: [PATCH 7/8] Added check state into ConnectionHandler the objective of the check state is to validate the configuration of the connection handler before going into the init state. For the time being the only valid check is to wait for settings to be provided if required. WiFiConnectionHandler splits the init state into check and init --- src/ConnectionHandlerDefinitions.h | 15 ++++++++------- src/ConnectionHandlerInterface.cpp | 11 ++++++++++- src/ConnectionHandlerInterface.h | 3 ++- src/GenericConnectionHandler.cpp | 20 ++++++++++++-------- src/GenericConnectionHandler.h | 1 + src/WiFiConnectionHandler.cpp | 7 ++++++- src/WiFiConnectionHandler.h | 1 + 7 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/ConnectionHandlerDefinitions.h b/src/ConnectionHandlerDefinitions.h index b360a04..53056db 100644 --- a/src/ConnectionHandlerDefinitions.h +++ b/src/ConnectionHandlerDefinitions.h @@ -163,13 +163,14 @@ ******************************************************************************/ enum class NetworkConnectionState : unsigned int { - INIT = 0, - CONNECTING = 1, - CONNECTED = 2, - DISCONNECTING = 3, - DISCONNECTED = 4, - CLOSED = 5, - ERROR = 6 + CHECK = 0, + INIT = 1, + CONNECTING = 2, + CONNECTED = 3, + DISCONNECTING = 4, + DISCONNECTED = 5, + CLOSED = 6, + ERROR = 7 }; enum class NetworkConnectionEvent { diff --git a/src/ConnectionHandlerInterface.cpp b/src/ConnectionHandlerInterface.cpp index a7489a6..b8a1a87 100644 --- a/src/ConnectionHandlerInterface.cpp +++ b/src/ConnectionHandlerInterface.cpp @@ -23,7 +23,7 @@ ConnectionHandler::ConnectionHandler(bool const keep_alive, NetworkAdapter inter : _flags{keep_alive, false, settings_required, false} , _interface{interface} , _lastConnectionTickTime{millis()} -, _current_net_connection_state{NetworkConnectionState::INIT} +, _current_net_connection_state{NetworkConnectionState::CHECK} , _timeoutTable(DefaultTimeoutTable) { @@ -73,6 +73,7 @@ NetworkConnectionState ConnectionHandler::updateConnectionState() { */ switch (_current_net_connection_state) { + case NetworkConnectionState::CHECK: next_net_connection_state = update_handleCheck (); break; case NetworkConnectionState::INIT: next_net_connection_state = update_handleInit (); break; case NetworkConnectionState::CONNECTING: next_net_connection_state = update_handleConnecting (); break; case NetworkConnectionState::CONNECTED: next_net_connection_state = update_handleConnected (); break; @@ -139,3 +140,11 @@ void ConnectionHandler::addDisconnectCallback(OnNetworkEventCallback callback) { void ConnectionHandler::addErrorCallback(OnNetworkEventCallback callback) { _on_error_event_callback = callback; } + +NetworkConnectionState ConnectionHandler::update_handleCheck() { + if(_flags.settings_required && !_flags.settings_provided) { + return NetworkConnectionState::CHECK; + } else { + return NetworkConnectionState::INIT; + } +} diff --git a/src/ConnectionHandlerInterface.h b/src/ConnectionHandlerInterface.h index 0eebef9..88eaf5c 100644 --- a/src/ConnectionHandlerInterface.h +++ b/src/ConnectionHandlerInterface.h @@ -90,7 +90,7 @@ class ConnectionHandler { * @return true if the update is successful, false otherwise */ virtual bool updateSetting(const models::NetworkSetting& s) { - if(_current_net_connection_state == NetworkConnectionState::INIT && s.type == _interface) { + if(_current_net_connection_state <= NetworkConnectionState::INIT && s.type == _interface) { memcpy(&_settings, &s, sizeof(s)); _flags.settings_provided = true; return true; @@ -125,6 +125,7 @@ class ConnectionHandler { NetworkAdapter _interface; + virtual NetworkConnectionState update_handleCheck (); virtual NetworkConnectionState update_handleInit () = 0; virtual NetworkConnectionState update_handleConnecting () = 0; virtual NetworkConnectionState update_handleConnected () = 0; diff --git a/src/GenericConnectionHandler.cpp b/src/GenericConnectionHandler.cpp index d2e5904..56feac3 100644 --- a/src/GenericConnectionHandler.cpp +++ b/src/GenericConnectionHandler.cpp @@ -21,10 +21,10 @@ GenericConnectionHandler::GenericConnectionHandler(bool const keep_alive) : ConnectionHandler(keep_alive, NetworkAdapter::NONE, true), _ch(nullptr) { } bool GenericConnectionHandler::updateSetting(const models::NetworkSetting& s) { - if(_ch != nullptr && _ch->_current_net_connection_state != NetworkConnectionState::INIT) { + if(_ch != nullptr && _ch->_current_net_connection_state > NetworkConnectionState::INIT) { // If the internal connection handler is already being used and not in INIT phase we cannot update the settings return false; - } else if(_ch != nullptr && _ch->_current_net_connection_state == NetworkConnectionState::INIT && _interface != s.type) { + } else if(_ch != nullptr && _ch->_current_net_connection_state <= NetworkConnectionState::INIT && _interface != s.type) { // If the internal connection handler is already being used and in INIT phase and the interface type is being changed // -> we need to deallocate the previously allocated handler @@ -57,27 +57,31 @@ void GenericConnectionHandler::getSetting(models::NetworkSetting& s) { } NetworkConnectionState GenericConnectionHandler::updateConnectionState() { - return _ch != nullptr ? _ch->updateConnectionState() : NetworkConnectionState::INIT; + return _ch != nullptr ? _ch->updateConnectionState() : NetworkConnectionState::CHECK; +} + +NetworkConnectionState GenericConnectionHandler::update_handleCheck() { + return _ch != nullptr ? _ch->update_handleCheck() : NetworkConnectionState::CHECK; } NetworkConnectionState GenericConnectionHandler::update_handleInit() { - return _ch != nullptr ? _ch->update_handleInit() : NetworkConnectionState::INIT; + return _ch != nullptr ? _ch->update_handleInit() : NetworkConnectionState::CHECK; } NetworkConnectionState GenericConnectionHandler::update_handleConnecting() { - return _ch != nullptr ? _ch->update_handleConnecting() : NetworkConnectionState::INIT; + return _ch != nullptr ? _ch->update_handleConnecting() : NetworkConnectionState::CHECK; } NetworkConnectionState GenericConnectionHandler::update_handleConnected() { - return _ch != nullptr ? _ch->update_handleConnected() : NetworkConnectionState::INIT; + return _ch != nullptr ? _ch->update_handleConnected() : NetworkConnectionState::CHECK; } NetworkConnectionState GenericConnectionHandler::update_handleDisconnecting() { - return _ch != nullptr ? _ch->update_handleDisconnecting() : NetworkConnectionState::INIT; + return _ch != nullptr ? _ch->update_handleDisconnecting() : NetworkConnectionState::CHECK; } NetworkConnectionState GenericConnectionHandler::update_handleDisconnected() { - return _ch != nullptr ? _ch->update_handleDisconnected() : NetworkConnectionState::INIT; + return _ch != nullptr ? _ch->update_handleDisconnected() : NetworkConnectionState::CHECK; } #if not (defined(BOARD_HAS_LORA) or defined(BOARD_HAS_NOTECARD)) diff --git a/src/GenericConnectionHandler.h b/src/GenericConnectionHandler.h index 230a17d..f338ad9 100644 --- a/src/GenericConnectionHandler.h +++ b/src/GenericConnectionHandler.h @@ -60,6 +60,7 @@ class GenericConnectionHandler : public ConnectionHandler NetworkConnectionState updateConnectionState() override; + NetworkConnectionState update_handleCheck () override; NetworkConnectionState update_handleInit () override; NetworkConnectionState update_handleConnecting () override; NetworkConnectionState update_handleConnected () override; diff --git a/src/WiFiConnectionHandler.cpp b/src/WiFiConnectionHandler.cpp index 9c0fca0..714f4e5 100644 --- a/src/WiFiConnectionHandler.cpp +++ b/src/WiFiConnectionHandler.cpp @@ -57,7 +57,7 @@ unsigned long WiFiConnectionHandler::getTime() PROTECTED MEMBER FUNCTIONS ******************************************************************************/ -NetworkConnectionState WiFiConnectionHandler::update_handleInit() +NetworkConnectionState WiFiConnectionHandler::update_handleCheck() { #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) if (WiFi.status() == NETWORK_HARDWARE_ERROR) @@ -82,6 +82,11 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() WiFi.mode(WIFI_STA); #endif /* #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) */ + return ConnectionHandler::update_handleCheck(); +} + +NetworkConnectionState WiFiConnectionHandler::update_handleInit() +{ if(!_flags.settings_provided) { return NetworkConnectionState::INIT; } diff --git a/src/WiFiConnectionHandler.h b/src/WiFiConnectionHandler.h index f614bc1..68d40f1 100644 --- a/src/WiFiConnectionHandler.h +++ b/src/WiFiConnectionHandler.h @@ -66,6 +66,7 @@ class WiFiConnectionHandler : public ConnectionHandler protected: + NetworkConnectionState update_handleCheck () override; NetworkConnectionState update_handleInit () override; NetworkConnectionState update_handleConnecting () override; NetworkConnectionState update_handleConnected () override; From 671669fed00adcd2a4feb4e9a752df910290609c Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Sat, 10 Jan 2026 19:36:20 +0100 Subject: [PATCH 8/8] Validate ssid to contain a valid string before begin --- src/WiFiConnectionHandler.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/WiFiConnectionHandler.cpp b/src/WiFiConnectionHandler.cpp index 714f4e5..7327506 100644 --- a/src/WiFiConnectionHandler.cpp +++ b/src/WiFiConnectionHandler.cpp @@ -95,6 +95,13 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() if (WiFi.status() != WL_CONNECTED) { + if (strlen(_settings.wifi.ssid) == 0) { + DEBUG_WARNING("Provided empty ssid, please provide a valid one"); + _flags.settings_provided = false; + + return NetworkConnectionState::INIT; + } + WiFi.begin(_settings.wifi.ssid, _settings.wifi.pwd); #if defined(ARDUINO_ARCH_ESP8266) /* Wait connection otherwise board won't connect */