From 7ae6ff27f5eb24b684e329aba7461a3e9814b7c8 Mon Sep 17 00:00:00 2001 From: Harald Barth Date: Wed, 10 Jan 2024 15:09:22 +0100 Subject: [PATCH] Bugfix: Ethernet fixed IP start --- EthernetInterface.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/EthernetInterface.cpp b/EthernetInterface.cpp index 914dd8c..6c8e8fa 100644 --- a/EthernetInterface.cpp +++ b/EthernetInterface.cpp @@ -50,6 +50,10 @@ void EthernetInterface::setup() }; +#ifdef IP_ADDRESS +static IPAddress myIP(IP_ADDRESS); +#endif + /** * @brief Aquire IP Address from DHCP and start server * @@ -71,33 +75,32 @@ EthernetInterface::EthernetInterface() // Which seems more useful! We should propose the patch... so the following line actually works! netif_set_hostname(&gnetif, WIFI_HOSTNAME); // Should probably be passed in the contructor... #ifdef IP_ADDRESS - if (Ethernet.begin(IP_ADDRESS) == 0) + Ethernet.begin(myIP); #else if (Ethernet.begin() == 0) - #endif // IP_ADDRESS { DIAG(F("Ethernet.begin FAILED")); return; } + #endif // IP_ADDRESS #else // All other architectures byte mac[6]= { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; DIAG(F("Ethernet attempting to get MAC address")); DCCTimer::getSimulatedMacAddress(mac); DIAG(F("Ethernet got MAC address")); #ifdef IP_ADDRESS - if (Ethernet.begin(mac, IP_ADDRESS) == 0) + Ethernet.begin(mac, myIP); #else if (Ethernet.begin(mac) == 0) - #endif { DIAG(F("Ethernet.begin FAILED")); return; - } - + } + #endif // IP_ADDRESS if (Ethernet.hardwareStatus() == EthernetNoHardware) { DIAG(F("Ethernet shield not found or W5100")); } -#endif +#endif STM32_ETHERNET uint32_t startmilli = millis(); while ((millis() - startmilli) < 5500) { // Loop to give time to check for cable connection @@ -163,7 +166,7 @@ bool EthernetInterface::checkLink() { DIAG(F("Ethernet cable connected")); connected=true; #ifdef IP_ADDRESS - Ethernet.setLocalIP(IP_ADDRESS); // for static IP, set it again + Ethernet.setLocalIP(myIP); // for static IP, set it again #endif IPAddress ip = Ethernet.localIP(); // look what IP was obtained (dynamic or static) server = new EthernetServer(IP_PORT); // Ethernet Server listening on default port IP_PORT