From 1d770ad6460161db2c1a362402f9316c100e7d7b Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 21 Apr 2021 15:12:16 +0200 Subject: [PATCH] Extend available callbacks by allowing to register a callback in case of failure to establish connection. --- src/Arduino_ConnectionHandler.cpp | 7 ++++--- src/Arduino_ConnectionHandler.h | 7 ++++++- src/Arduino_WiFiConnectionHandler.cpp | 2 ++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Arduino_ConnectionHandler.cpp b/src/Arduino_ConnectionHandler.cpp index 943fa1d9..818244f0 100644 --- a/src/Arduino_ConnectionHandler.cpp +++ b/src/Arduino_ConnectionHandler.cpp @@ -107,9 +107,10 @@ void ConnectionHandler::addCallback(NetworkConnectionEvent const event, OnNetwor { switch (event) { - case NetworkConnectionEvent::CONNECTED: _on_connect_event_callback = callback; break; - case NetworkConnectionEvent::DISCONNECTED: _on_disconnect_event_callback = callback; break; - case NetworkConnectionEvent::ERROR: _on_error_event_callback = callback; break; + case NetworkConnectionEvent::CONNECTED: _on_connect_event_callback = callback; break; + case NetworkConnectionEvent::DISCONNECTED: _on_disconnect_event_callback = callback; break; + case NetworkConnectionEvent::ERROR: _on_error_event_callback = callback; break; + case NetworkConnectionEvent::CONNECTION_FAILED: _on_connection_failed_event_callback = callback; break; } } diff --git a/src/Arduino_ConnectionHandler.h b/src/Arduino_ConnectionHandler.h index 6496b931..ca20ac5e 100644 --- a/src/Arduino_ConnectionHandler.h +++ b/src/Arduino_ConnectionHandler.h @@ -152,7 +152,8 @@ enum class NetworkConnectionState : unsigned int { enum class NetworkConnectionEvent { CONNECTED, DISCONNECTED, - ERROR + ERROR, + CONNECTION_FAILED, }; typedef void (*OnNetworkEventCallback)(); @@ -218,6 +219,10 @@ class ConnectionHandler { virtual NetworkConnectionState update_handleDisconnecting() = 0; virtual NetworkConnectionState update_handleDisconnected () = 0; + protected: + + OnNetworkEventCallback _on_connection_failed_event_callback = NULL; + private: diff --git a/src/Arduino_WiFiConnectionHandler.cpp b/src/Arduino_WiFiConnectionHandler.cpp index e1a1f12d..fee0875d 100644 --- a/src/Arduino_WiFiConnectionHandler.cpp +++ b/src/Arduino_WiFiConnectionHandler.cpp @@ -103,6 +103,8 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnecting() if (WiFi.status() != NETWORK_CONNECTED) { + if (_on_connection_failed_event_callback) + _on_connection_failed_event_callback(); #if !defined(__AVR__) Debug.print(DBG_ERROR, F("Connection to \"%s\" failed"), _ssid); Debug.print(DBG_INFO, F("Retrying in \"%d\" milliseconds"), CHECK_INTERVAL_TABLE[static_cast(NetworkConnectionState::CONNECTING)]);