14#ifdef USE_ETHERNET_SPI
15#include "hal/spi_types.h"
17#include "esp_eth_mac.h"
18#include "esp_eth_mac_esp.h"
21#include "esp_idf_version.h"
23#if CONFIG_ETH_USE_ESP32_EMAC
29#if defined(USE_ETHERNET_W5500)
31#elif defined(USE_ETHERNET_W5100)
33#elif defined(USE_ETHERNET_W6100)
35#elif defined(USE_ETHERNET_W6300)
43 using Wiznet6300::Wiznet6300;
44 constexpr bool needsSPI()
const {
return false; }
47#elif defined(USE_ETHERNET_ENC28J60)
48#include <ENC28J60lwIP.h>
50#error "Unsupported RP2040 SPI Ethernet type"
56#ifdef USE_ETHERNET_IP_STATE_LISTENERS
120 void setup()
override;
121 void loop()
override;
128#ifdef USE_ETHERNET_MANUAL_IP
139 ESPDEPRECATED(
"Use get_eth_mac_address_pretty_into_buffer() instead. Removed in 2026.9.0",
"2026.3.0")
140 std::
string get_eth_mac_address_pretty();
149#ifdef USE_ETHERNET_SPI
158#ifdef USE_ETHERNET_SPI_POLLING_SUPPORT
181#ifdef USE_ETHERNET_IP_STATE_LISTENERS
185#ifdef USE_ETHERNET_CONNECT_TRIGGER
188#ifdef USE_ETHERNET_DISCONNECT_TRIGGER
197#ifdef USE_ETHERNET_IP_STATE_LISTENERS
208#ifdef USE_ETHERNET_KSZ8081
215#ifdef USE_ETHERNET_SPI
225#ifdef USE_ETHERNET_SPI_POLLING_SUPPORT
249#if defined(USE_ETHERNET_W5100)
251#elif defined(USE_ETHERNET_W6300)
256#if defined(USE_ETHERNET_W5500)
258#elif defined(USE_ETHERNET_W5100)
260#elif defined(USE_ETHERNET_W6100)
262#elif defined(USE_ETHERNET_W6300)
264#elif defined(USE_ETHERNET_ENC28J60)
267#error "Unsupported RP2040 SPI Ethernet type"
279#ifdef USE_ETHERNET_MANUAL_IP
297#ifdef USE_ETHERNET_IP_STATE_LISTENERS
301#ifdef USE_ETHERNET_CONNECT_TRIGGER
304#ifdef USE_ETHERNET_DISCONNECT_TRIGGER
310 const char *use_address_{
""};
317#if defined(USE_ETHERNET_JL1101) && (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(6, 0, 0) || \
318 ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 4, 2) || !defined(PLATFORMIO))
constexpr bool needsSPI() const
ESPDEPRECATED("Use mark_failed(LOG_STR(\"static string literal\")) instead. Do NOT use .c_str() from temporary " "strings. Will stop working in 2026.6.0", "2025.12.0") void mark_failed(const char *message)
Minimal static vector - saves memory by avoiding std::vector overhead.
void set_interface(spi_host_device_t interface)
Trigger disconnect_trigger_
void set_clk_pin(uint8_t clk_pin)
std::vector< PHYRegister > phy_registers_
void get_eth_mac_address_raw(uint8_t *mac)
esp_eth_handle_t eth_handle_
static void got_ip_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
void set_clock_speed(int clock_speed)
void set_polling_interval(uint32_t polling_interval)
float get_setup_priority() const override
eth_duplex_t get_duplex_mode()
void notify_ip_state_listeners_()
void set_manual_ip(const ManualIP &manual_ip)
static constexpr uint32_t LINK_CHECK_INTERVAL
network::IPAddresses get_ip_addresses()
void write_phy_register_(esp_eth_mac_t *mac, PHYRegister register_data)
Set arbitratry PHY registers from config.
void dump_connect_params_()
static void got_ip6_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
void log_error_and_mark_failed_(esp_err_t err, const char *message)
EthernetComponentState state_
void set_phy_addr(uint8_t phy_addr)
void add_ip_state_listener(EthernetIPStateListener *listener)
network::IPAddress get_dns_address(uint8_t num)
void set_reset_pin(uint8_t reset_pin)
void set_type(EthernetType type)
void add_phy_register(PHYRegister register_value)
void ksz8081_set_clock_reference_(esp_eth_mac_t *mac)
Set RMII Reference Clock Select bit for KSZ8081.
optional< ManualIP > manual_ip_
eth_speed_t get_link_speed()
StaticVector< EthernetIPStateListener *, ESPHOME_ETHERNET_IP_STATE_LISTENERS > ip_state_listeners_
void set_fixed_mac(const std::array< uint8_t, 6 > &mac)
void dump_config() override
uint32_t last_link_check_
Trigger * get_disconnect_trigger()
emac_rmii_clock_mode_t clk_mode_
void set_interrupt_pin(uint8_t interrupt_pin)
static constexpr uint32_t RESET_DELAY_MS
static void eth_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
const char * get_use_address() const
void set_miso_pin(uint8_t miso_pin)
optional< std::array< uint8_t, 6 > > fixed_mac_
spi_host_device_t interface_
void set_cs_pin(uint8_t cs_pin)
void set_mdc_pin(uint8_t mdc_pin)
Trigger * get_connect_trigger()
void set_power_pin(int power_pin)
void on_powerdown() override
esp_eth_handle_t get_eth_handle() const
void set_use_address(const char *use_address)
uint32_t polling_interval_
void set_mdio_pin(uint8_t mdio_pin)
void set_mosi_pin(uint8_t mosi_pin)
void set_clk_mode(emac_rmii_clock_mode_t clk_mode)
ESPDEPRECATED("Use get_eth_mac_address_pretty_into_buffer() instead. Removed in 2026.9.0", "2026.3.0") std const char * get_eth_mac_address_pretty_into_buffer(std::span< char, MAC_ADDRESS_PRETTY_BUFFER_SIZE > buf)
Listener interface for Ethernet IP state changes.
virtual void on_ip_state(const network::IPAddresses &ips, const network::IPAddress &dns1, const network::IPAddress &dns2)=0
eth_esp32_emac_config_t eth_esp32_emac_default_config(void)
LwipIntfDev< Wiznet6300NoSPI > Wiznet6300lwIPFixed
esp_eth_phy_t * esp_eth_phy_new_jl1101(const eth_phy_config_t *config)
EthernetComponent * global_eth_component
@ ETHERNET_TYPE_KSZ8081RNA
std::array< IPAddress, 5 > IPAddresses
network::IPAddress subnet
network::IPAddress static_ip
network::IPAddress gateway
network::IPAddress dns1
The first DNS server. 0.0.0.0 for default.
network::IPAddress dns2
The second DNS server. 0.0.0.0 for default.