diff --git a/Network.cpp b/Network.cpp index 288fd02..f456928 100644 --- a/Network.cpp +++ b/Network.cpp @@ -60,7 +60,7 @@ void Network::setupDevice() _networkDeviceType = digitalRead(hardwareDetect) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500; } } - + _networkDeviceType = NetworkDeviceType::W5500; switch(_networkDeviceType) { case NetworkDeviceType::W5500: diff --git a/Pins.h b/Pins.h index 59a1d26..032a9da 100644 --- a/Pins.h +++ b/Pins.h @@ -1,7 +1,10 @@ #pragma once -#define ETHERNET_CS_PIN 5 -#define ETHERNET_RESET_PIN 33 +#define ETHERNET_SCK_PIN 22 +#define ETHERNET_MISO_PIN 23 +#define ETHERNET_MOSI_PIN 33 +#define ETHERNET_CS_PIN 19 +#define ETHERNET_RESET_PIN -1 #define TRIGGER_LOCK_PIN 32 #define TRIGGER_UNLOCK_PIN 33 #define TRIGGER_UNLATCH_PIN 27 diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index dfe5ed3..f74fe30 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -564,7 +564,7 @@ void WebCfgServer::buildOtaHtml(String &response) { buildHtmlHeader(response); - if(millis() < 60000) + if(millis() < 20000) { response.concat("OTA functionality not ready. Please wait a moment and reload."); response.concat(""); diff --git a/lib/Ethernet/src/Ethernet.cpp b/lib/Ethernet/src/Ethernet.cpp index 9257090..d502c13 100644 --- a/lib/Ethernet/src/Ethernet.cpp +++ b/lib/Ethernet/src/Ethernet.cpp @@ -100,9 +100,10 @@ void EthernetClass::begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress g _dnsServerAddress = dns; } -void EthernetClass::init(uint8_t sspin) +void EthernetClass::init(uint8_t sspin, uint8_t sckpin, uint8_t misopin, uint8_t mosipin) { W5100.setSS(sspin); + W5100.setSPI(sckpin, misopin, mosipin); } EthernetLinkStatus EthernetClass::linkStatus() diff --git a/lib/Ethernet/src/Ethernet.h b/lib/Ethernet/src/Ethernet.h index 0045de8..5a1e780 100644 --- a/lib/Ethernet/src/Ethernet.h +++ b/lib/Ethernet/src/Ethernet.h @@ -89,7 +89,7 @@ public: static void begin(uint8_t *mac, IPAddress ip, IPAddress dns); static void begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress gateway); static void begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); - static void init(uint8_t sspin = 10); + static void init(uint8_t sspin = 10, uint8_t sckpin = 255, uint8_t misopin = 255, uint8_t mosipin = 255); static void MACAddress(uint8_t *mac_address); static IPAddress localIP(); diff --git a/lib/Ethernet/src/utility/w5100.cpp b/lib/Ethernet/src/utility/w5100.cpp index 6e7dbd2..e7ec24d 100644 --- a/lib/Ethernet/src/utility/w5100.cpp +++ b/lib/Ethernet/src/utility/w5100.cpp @@ -53,6 +53,9 @@ uint8_t W5100Class::chip = 0; uint8_t W5100Class::CH_BASE_MSB; uint8_t W5100Class::ss_pin = SS_PIN_DEFAULT; +uint8_t W5100Class::sck_pin = 255; +uint8_t W5100Class::miso_pin = 255; +uint8_t W5100Class::mosi_pin = 255; #ifdef ETHERNET_LARGE_BUFFERS uint16_t W5100Class::SSIZE = 2048; uint16_t W5100Class::SMASK = 0x07FF; @@ -101,7 +104,11 @@ uint8_t W5100Class::init(void) delay(560); //Serial.println("w5100 init"); - SPI.begin(); + if(sck_pin != 255 && miso_pin != 255 && mosi_pin != 255) { + SPI.begin(sck_pin, miso_pin, mosi_pin, -1); + } else { + SPI.begin(); + } initSS(); resetSS(); SPI.beginTransaction(SPI_ETHERNET_SETTINGS); diff --git a/lib/Ethernet/src/utility/w5100.h b/lib/Ethernet/src/utility/w5100.h index b2e8ec8..210503a 100644 --- a/lib/Ethernet/src/utility/w5100.h +++ b/lib/Ethernet/src/utility/w5100.h @@ -298,6 +298,9 @@ public: private: static uint8_t chip; static uint8_t ss_pin; + static uint8_t sck_pin; + static uint8_t miso_pin; + static uint8_t mosi_pin; static uint8_t softReset(void); static uint8_t isW5100(void); static uint8_t isW5200(void); @@ -332,6 +335,11 @@ public: return false; } static void setSS(uint8_t pin) { ss_pin = pin; } + static void setSPI(uint8_t sckpin, uint8_t misopin, uint8_t mosipin) { + sck_pin = sckpin; + miso_pin = misopin; + mosi_pin = mosipin; + } private: #if defined(__AVR__) diff --git a/networkDevices/W5500Device.cpp b/networkDevices/W5500Device.cpp index 06afa8b..8f7ce1d 100644 --- a/networkDevices/W5500Device.cpp +++ b/networkDevices/W5500Device.cpp @@ -37,7 +37,7 @@ void W5500Device::initialize() resetDevice(); - Ethernet.init(ETHERNET_CS_PIN); + Ethernet.init(ETHERNET_CS_PIN, ETHERNET_SCK_PIN, ETHERNET_MISO_PIN, ETHERNET_MOSI_PIN); if(_preferences->getBool(preference_mqtt_log_enabled)) { @@ -123,6 +123,7 @@ void W5500Device::reconfigure() void W5500Device::resetDevice() { + if(ETHERNET_RESET_PIN == -1) return; Log->println(F("Resetting network hardware.")); pinMode(ETHERNET_RESET_PIN, OUTPUT); digitalWrite(ETHERNET_RESET_PIN, HIGH);