implement fallback to wifi if W5500 hardware not present

This commit is contained in:
technyon
2023-01-01 17:09:26 +01:00
parent e202db236e
commit 6f58ebd382
9 changed files with 54 additions and 14 deletions

View File

@@ -2,6 +2,13 @@
#include "PubSubClient.h"
enum class ReconnectStatus
{
Failure = 0,
Success = 1,
CriticalFailure = 2
};
class NetworkDevice
{
public:
@@ -12,7 +19,7 @@ public:
virtual PubSubClient* mqttClient() = 0;
virtual void initialize() = 0;
virtual bool reconnect() = 0;
virtual ReconnectStatus reconnect() = 0;
virtual void reconfigure() = 0;
virtual void printError() = 0;

View File

@@ -57,8 +57,7 @@ void W5500Device::initialize()
reconnect();
}
bool W5500Device::reconnect()
ReconnectStatus W5500Device::reconnect()
{
_hasDHCPAddress = false;
@@ -66,6 +65,7 @@ bool W5500Device::reconnect()
Log->println(F("Initialize Ethernet with DHCP:"));
int dhcpRetryCnt = 0;
bool hardwareFound = false;
while(dhcpRetryCnt < 3)
{
@@ -81,12 +81,15 @@ bool W5500Device::reconnect()
if (Ethernet.hardwareStatus() == EthernetNoHardware)
{
Log->println(F("Ethernet module not found"));
continue;
}
if (Ethernet.linkStatus() == LinkOFF)
{
Log->println(F("Ethernet cable is not connected."));
}
hardwareFound = true;
IPAddress ip;
ip.fromString("192.168.4.1");
@@ -108,7 +111,12 @@ bool W5500Device::reconnect()
}
}
return _hasDHCPAddress;
if(!hardwareFound)
{
return ReconnectStatus::CriticalFailure;
}
return _hasDHCPAddress ? ReconnectStatus::Success : ReconnectStatus::Failure;
}

View File

@@ -11,7 +11,7 @@ public:
~W5500Device();
virtual void initialize();
virtual bool reconnect();
virtual ReconnectStatus reconnect();
virtual void reconfigure();
virtual void printError();

View File

@@ -126,10 +126,10 @@ bool WifiDevice::isConnected()
return WiFi.isConnected();
}
bool WifiDevice::reconnect()
ReconnectStatus WifiDevice::reconnect()
{
delay(3000);
return isConnected();
return isConnected() ? ReconnectStatus::Success : ReconnectStatus::Failure;
}
void WifiDevice::update()

View File

@@ -13,7 +13,7 @@ public:
virtual void initialize();
virtual void reconfigure();
virtual bool reconnect();
virtual ReconnectStatus reconnect();
virtual void printError();
virtual void update();