185 lines
5.1 KiB
C++
185 lines
5.1 KiB
C++
#include "wled.h"
|
|
#include "fcn_declare.h"
|
|
#include "wled_ethernet.h"
|
|
|
|
|
|
#ifdef WLED_USE_ETHERNET
|
|
// The following six pins are neither configurable nor
|
|
// can they be re-assigned through IOMUX / GPIO matrix.
|
|
// See https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-ethernet-kit-v1.1.html#ip101gri-phy-interface
|
|
const managed_pin_type esp32_nonconfigurable_ethernet_pins[WLED_ETH_RSVD_PINS_COUNT] = {
|
|
{ 21, true }, // RMII EMAC TX EN == When high, clocks the data on TXD0 and TXD1 to transmitter
|
|
{ 19, true }, // RMII EMAC TXD0 == First bit of transmitted data
|
|
{ 22, true }, // RMII EMAC TXD1 == Second bit of transmitted data
|
|
{ 25, false }, // RMII EMAC RXD0 == First bit of received data
|
|
{ 26, false }, // RMII EMAC RXD1 == Second bit of received data
|
|
{ 27, true }, // RMII EMAC CRS_DV == Carrier Sense and RX Data Valid
|
|
};
|
|
|
|
const ethernet_settings ethernetBoards[] = {
|
|
// None
|
|
{
|
|
},
|
|
|
|
// WT32-EHT01
|
|
// Please note, from my testing only these pins work for LED outputs:
|
|
// IO2, IO4, IO12, IO14, IO15
|
|
// These pins do not appear to work from my testing:
|
|
// IO35, IO36, IO39
|
|
{
|
|
1, // eth_address,
|
|
16, // eth_power,
|
|
23, // eth_mdc,
|
|
18, // eth_mdio,
|
|
ETH_PHY_LAN8720, // eth_type,
|
|
ETH_CLOCK_GPIO0_IN // eth_clk_mode
|
|
},
|
|
|
|
// ESP32-POE
|
|
{
|
|
0, // eth_address,
|
|
12, // eth_power,
|
|
23, // eth_mdc,
|
|
18, // eth_mdio,
|
|
ETH_PHY_LAN8720, // eth_type,
|
|
ETH_CLOCK_GPIO17_OUT // eth_clk_mode
|
|
},
|
|
|
|
// WESP32
|
|
{
|
|
0, // eth_address,
|
|
-1, // eth_power,
|
|
16, // eth_mdc,
|
|
17, // eth_mdio,
|
|
ETH_PHY_LAN8720, // eth_type,
|
|
ETH_CLOCK_GPIO0_IN // eth_clk_mode
|
|
},
|
|
|
|
// QuinLed-ESP32-Ethernet
|
|
{
|
|
0, // eth_address,
|
|
5, // eth_power,
|
|
23, // eth_mdc,
|
|
18, // eth_mdio,
|
|
ETH_PHY_LAN8720, // eth_type,
|
|
ETH_CLOCK_GPIO17_OUT // eth_clk_mode
|
|
},
|
|
|
|
// TwilightLord-ESP32 Ethernet Shield
|
|
{
|
|
0, // eth_address,
|
|
5, // eth_power,
|
|
23, // eth_mdc,
|
|
18, // eth_mdio,
|
|
ETH_PHY_LAN8720, // eth_type,
|
|
ETH_CLOCK_GPIO17_OUT // eth_clk_mode
|
|
},
|
|
|
|
// ESP3DEUXQuattro
|
|
{
|
|
1, // eth_address,
|
|
-1, // eth_power,
|
|
23, // eth_mdc,
|
|
18, // eth_mdio,
|
|
ETH_PHY_LAN8720, // eth_type,
|
|
ETH_CLOCK_GPIO17_OUT // eth_clk_mode
|
|
},
|
|
|
|
// ESP32-ETHERNET-KIT-VE
|
|
{
|
|
0, // eth_address,
|
|
5, // eth_power,
|
|
23, // eth_mdc,
|
|
18, // eth_mdio,
|
|
ETH_PHY_IP101, // eth_type,
|
|
ETH_CLOCK_GPIO0_IN // eth_clk_mode
|
|
},
|
|
|
|
// QuinLed-Dig-Octa Brainboard-32-8L and LilyGO-T-ETH-POE
|
|
{
|
|
0, // eth_address,
|
|
-1, // eth_power,
|
|
23, // eth_mdc,
|
|
18, // eth_mdio,
|
|
ETH_PHY_LAN8720, // eth_type,
|
|
ETH_CLOCK_GPIO17_OUT // eth_clk_mode
|
|
},
|
|
|
|
// ABC! WLED Controller V43 + Ethernet Shield & compatible
|
|
{
|
|
1, // eth_address,
|
|
5, // eth_power,
|
|
23, // eth_mdc,
|
|
33, // eth_mdio,
|
|
ETH_PHY_LAN8720, // eth_type,
|
|
ETH_CLOCK_GPIO17_OUT // eth_clk_mode
|
|
},
|
|
|
|
};
|
|
#endif
|
|
|
|
|
|
//by https://github.com/tzapu/WiFiManager/blob/master/WiFiManager.cpp
|
|
int getSignalQuality(int rssi)
|
|
{
|
|
int quality = 0;
|
|
|
|
if (rssi <= -100)
|
|
{
|
|
quality = 0;
|
|
}
|
|
else if (rssi >= -50)
|
|
{
|
|
quality = 100;
|
|
}
|
|
else
|
|
{
|
|
quality = 2 * (rssi + 100);
|
|
}
|
|
return quality;
|
|
}
|
|
|
|
|
|
//handle Ethernet connection event
|
|
void WiFiEvent(WiFiEvent_t event)
|
|
{
|
|
#ifdef WLED_USE_ETHERNET
|
|
char hostname[25];
|
|
#endif
|
|
|
|
switch (event) {
|
|
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
|
|
case SYSTEM_EVENT_ETH_START:
|
|
DEBUG_PRINTLN(F("ETH Started"));
|
|
break;
|
|
case SYSTEM_EVENT_ETH_CONNECTED:
|
|
DEBUG_PRINTLN(F("ETH Connected"));
|
|
if (!apActive) {
|
|
WiFi.disconnect(true);
|
|
}
|
|
if (staticIP != (uint32_t)0x00000000 && staticGateway != (uint32_t)0x00000000) {
|
|
ETH.config(staticIP, staticGateway, staticSubnet, IPAddress(8, 8, 8, 8));
|
|
} else {
|
|
ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
|
|
}
|
|
// convert the "serverDescription" into a valid DNS hostname (alphanumeric)
|
|
prepareHostname(hostname);
|
|
ETH.setHostname(hostname);
|
|
showWelcomePage = false;
|
|
break;
|
|
case SYSTEM_EVENT_ETH_DISCONNECTED:
|
|
DEBUG_PRINTLN(F("ETH Disconnected"));
|
|
// This doesn't really affect ethernet per se,
|
|
// as it's only configured once. Rather, it
|
|
// may be necessary to reconnect the WiFi when
|
|
// ethernet disconnects, as a way to provide
|
|
// alternative access to the device.
|
|
forceReconnect = true;
|
|
break;
|
|
#endif
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|