diff --git a/Network.cpp b/Network.cpp index 5674cb2..3ce6995 100644 --- a/Network.cpp +++ b/Network.cpp @@ -56,53 +56,55 @@ void Network::setupDevice() } else { - if(hardwareDetect == 1) + Log->print(F("Network device: ")); + switch (hardwareDetect) { - Log->println(F("W5500 hardware is disabled, using Wifi.")); - _networkDeviceType = NetworkDeviceType::WiFi; - } - else if(hardwareDetect == 2) - { - Log->print(F("Using PIN ")); - Log->print(hardwareDetectGpio); - Log->println(F(" for network device selection")); + case 1: + Log->println(F("Wifi only")); + _networkDeviceType = NetworkDeviceType::WiFi; + break; + case 2: + Log->print(F("Using PIN ")); + Log->print(hardwareDetectGpio); + Log->println(F(" for network device selection")); - pinMode(hardwareDetectGpio, INPUT_PULLUP); - _networkDeviceType = digitalRead(hardwareDetectGpio) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500; - } - else if(hardwareDetect == 3) - { - Log->println(F("W5500 on M5Stack Atom POE")); - _networkDeviceType = NetworkDeviceType::W5500; - } - else if(hardwareDetect == 4) - { - Log->println(F("Olimex ESP32-POE / ESP-POE-ISO")); - _networkDeviceType = NetworkDeviceType::LAN8720; - } - else - { - Log->println(F("Unknown hardware selected, falling back to Wifi.")); - _networkDeviceType = NetworkDeviceType::WiFi; + pinMode(hardwareDetectGpio, INPUT_PULLUP); + _networkDeviceType = digitalRead(hardwareDetectGpio) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500; + break; + case 3: + Log->println(F("W5500 on M5Stack Atom POE")); + _networkDeviceType = NetworkDeviceType::W5500; + break; + case 4: + Log->println(F("Olimex ESP32-POE / ESP-POE-ISO")); + _networkDeviceType = NetworkDeviceType::Olimex_LAN8720; + break; + case 5: + Log->println(F("WT32-ETH01")); + _networkDeviceType = NetworkDeviceType::WT32_LAN8720; + break; + default: + Log->println(F("Unknown hardware selected, falling back to Wifi.")); + _networkDeviceType = NetworkDeviceType::WiFi; + break; } } - switch(_networkDeviceType) + switch (_networkDeviceType) { case NetworkDeviceType::W5500: - Log->println(F("Network device: W5500")); _device = new W5500Device(_hostname, _preferences, hardwareDetect); break; - case NetworkDeviceType::LAN8720: - Log->println(F("Network device: LAN8720")); - _device = new EthLan8720Device(_hostname, _preferences); + case NetworkDeviceType::Olimex_LAN8720: + _device = new EthLan8720Device(_hostname, _preferences, ETH_PHY_ADDR, 12, ETH_PHY_MDC, ETH_PHY_MDIO, ETH_PHY_TYPE, ETH_CLOCK_GPIO17_OUT); + break; + case NetworkDeviceType::WT32_LAN8720: + _device = new EthLan8720Device(_hostname, _preferences, 1, 16); break; case NetworkDeviceType::WiFi: - Log->println(F("Network device: Builtin WiFi")); _device = new WifiDevice(_hostname, _preferences); break; default: - Log->println(F("Unknown network device type, defaulting to WiFi")); _device = new WifiDevice(_hostname, _preferences); break; } diff --git a/Network.h b/Network.h index 7b99131..c30cc8b 100644 --- a/Network.h +++ b/Network.h @@ -10,7 +10,8 @@ enum class NetworkDeviceType { WiFi, W5500, - LAN8720 + Olimex_LAN8720, + WT32_LAN8720 }; #define JSON_BUFFER_SIZE 1024 diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index 17209d1..91de67a 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -1117,6 +1117,7 @@ const std::vector> WebCfgServer::getNetworkDetectionOp options.push_back(std::make_pair("2", "Detect W5500 (GPIO CS=5; SCK=18; MISO=19; MOSI=23; RST=33)")); options.push_back(std::make_pair("3", "M5Stack Atom POE (W5500)")); options.push_back(std::make_pair("4", "Olimex ESP32-POE / ESP-POE-ISO")); + options.push_back(std::make_pair("5", "WT32-ETH01")); return options; } diff --git a/networkDevices/EthLan8720Device.cpp b/networkDevices/EthLan8720Device.cpp index add2e49..fe9abc4 100644 --- a/networkDevices/EthLan8720Device.cpp +++ b/networkDevices/EthLan8720Device.cpp @@ -10,8 +10,15 @@ #include "espMqttClient.h" #include "../RestartReason.h" -EthLan8720Device::EthLan8720Device(const String& hostname, Preferences* _preferences) -: NetworkDevice(hostname) +EthLan8720Device::EthLan8720Device(const String& hostname, Preferences* _preferences, uint8_t phy_addr, int power, int mdc, int mdio, eth_phy_type_t ethtype, eth_clock_mode_t clock_mode, bool use_mac_from_efuse) +: NetworkDevice(hostname), + _phy_addr(phy_addr), + _power(power), + _mdc(mdc), + _mdio(mdio), + _type(ethtype), + _clock_mode(clock_mode), + _use_mac_from_efuse(use_mac_from_efuse) { _restartOnDisconnect = _preferences->getBool(preference_restart_on_disconnect); @@ -62,7 +69,7 @@ void EthLan8720Device::initialize() { delay(250); - _hardwareInitialized = ETH.begin(ETH_PHY_ADDR, 12, ETH_PHY_MDC, ETH_PHY_MDIO, ETH_PHY_TYPE, ETH_CLOCK_GPIO17_OUT); + _hardwareInitialized = ETH.begin(_phy_addr, _power, _mdc, _mdio, _type, _clock_mode, _use_mac_from_efuse); if(_restartOnDisconnect) { diff --git a/networkDevices/EthLan8720Device.h b/networkDevices/EthLan8720Device.h index ad60793..1a32c5b 100644 --- a/networkDevices/EthLan8720Device.h +++ b/networkDevices/EthLan8720Device.h @@ -5,11 +5,21 @@ #include #include "NetworkDevice.h" #include "espMqttClient.h" +#include class EthLan8720Device : public NetworkDevice { + public: - EthLan8720Device(const String& hostname, Preferences* _preferences); + EthLan8720Device(const String& hostname, + Preferences* _preferences, + uint8_t phy_addr = ETH_PHY_ADDR, + int power = ETH_PHY_POWER, + int mdc = ETH_PHY_MDC, + int mdio = ETH_PHY_MDIO, + eth_phy_type_t ethtype = ETH_PHY_TYPE, + eth_clock_mode_t clock_mode = ETH_CLK_MODE, + bool use_mac_from_efuse = false); const String deviceName() const override; @@ -63,6 +73,14 @@ private: bool _useEncryption = false; bool _hardwareInitialized = false; + uint8_t _phy_addr; + int _power; + int _mdc; + int _mdio; + eth_phy_type_t _type; + eth_clock_mode_t _clock_mode; + bool _use_mac_from_efuse; + char _ca[TLS_CA_MAX_SIZE] = {0}; char _cert[TLS_CERT_MAX_SIZE] = {0}; char _key[TLS_KEY_MAX_SIZE] = {0};