- Use cv.SplitDefault for clock_speed (default only on ESP32)
- Use cv.only_on_esp32 for clock_speed and polling_interval validators
- Single SPI_SCHEMA works for both ESP32 and RP2040
- Add type annotations to _to_code_esp32 and _to_code_rp2040
These options are handled by arduino-pico internally on RP2040.
Use cv.only_on([Platform.ESP32]) in the schema validators instead
of rejecting them in _validate().
- Clean up eth_ on begin() failure to prevent leak and stale pointer
- Add LwIPLock around dns_getserver() in get_dns_address()
- Add LwIPLock around dns_setserver() in start_connect_()
- Add LwIPLock around dns_getserver() in dump_connect_params_()
- Reject clock_speed and polling_interval config options on RP2040
- Add CONFIG_ETH_SPI_ETHERNET_W5500, CONFIG_ETH_SPI_ETHERNET_DM9051,
CONFIG_ETH_USE_ESP32_EMAC to defines.h for clang-tidy visibility
- Fix %lu format to PRIu32 for polling_interval_
Add W5500 SPI Ethernet support for RP2040 boards using arduino-pico's
Wiznet5500lwIP class. Tested on WIZnet W5500-EVB-Pico hardware.
- Add ethernet_component_rp2040.cpp with W5500 implementation
- Add RP2040 members and setters to ethernet_component.h
- Enable RP2040 platform in SPI_SCHEMA and FILTER_SOURCE_FILES
- Add RP2040 validation, code generation, and lwIP_w5500 library
- Add W5500 RP2040 test YAML
Restructure the ethernet component from ESP32-only to multi-platform,
following the same pattern as the wifi component (FILTER_SOURCE_FILES
with platform-specific .cpp files).
- Split ethernet_component.cpp into common code + ethernet_component_esp32.cpp
- Remove DEPENDENCIES = ["esp32"], add platform validators per type
- Add FILTER_SOURCE_FILES to select platform-specific .cpp
- Move ESP32 imports inside platform-conditional functions
- Update ethernet_info guards from USE_ESP32 to USE_ETHERNET
- Add USE_ETHERNET_SPI/OPENETH/SPI_POLLING_SUPPORT to defines.h
- Guard ethernet_helpers.c with USE_ESP32
No behavioral changes for ESP32 — this is a pure restructuring to
enable adding non-ESP32 platform support.
Restructure the ethernet component from ESP32-only to multi-platform,
following the same pattern as the wifi component (FILTER_SOURCE_FILES
with platform-specific .cpp files).
- Split ethernet_component.cpp into common code + ethernet_component_esp32.cpp
- Remove DEPENDENCIES = ["esp32"], add platform validators per type
- Add FILTER_SOURCE_FILES to select platform-specific .cpp
- Move ESP32 imports inside platform-conditional functions
- Update ethernet_info guards from USE_ESP32 to USE_ETHERNET
- Add USE_ETHERNET_SPI/OPENETH/SPI_POLLING_SUPPORT to defines.h
- Guard ethernet_helpers.c with USE_ESP32
No behavioral changes for ESP32 — this is a pure restructuring to
enable adding non-ESP32 platform support.
Restructure the ethernet component from ESP32-only to multi-platform,
following the same pattern as the wifi component (FILTER_SOURCE_FILES
with platform-specific .cpp files).
- Split ethernet_component.cpp into common code + ethernet_component_esp32.cpp
- Remove DEPENDENCIES = ["esp32"], add platform validators per type
- Add FILTER_SOURCE_FILES to select platform-specific .cpp
- Move ESP32 imports inside platform-conditional functions
- Update ethernet_info guards from USE_ESP32 to USE_ETHERNET
- Add USE_ETHERNET_SPI/OPENETH/SPI_POLLING_SUPPORT to defines.h
- Guard ethernet_helpers.c with USE_ESP32
No behavioral changes for ESP32 — this is a pure restructuring to
enable adding non-ESP32 platform support.
Move FreeRTOS Mutex methods inline into helpers.h, eliminating
duplicate out-of-line definitions in esp32/helpers.cpp and
libretiny/helpers.cpp.
Hot path impact (disassembled from ELF):
| Platform | Before | After | Saved |
|--------------------|----------|----------|---------|
| ESP32 (Xtensa) | 1304 B | 1270 B | -34 B |
| BK72xx (ARM M4) | 1400 B | 1396 B | -4 B |
| RTL87xx (ARM M33) | 1248 B | 1246 B | -2 B |
| ESP32-C3 (RISC-V) | 1498 B | 1494 B | -4 B |
GCC generates ISRA clones that hoist the handle_ load into callers
and use tail calls to xQueueSemaphoreTake/xQueueGenericSend.
The fast path (millis + subtract + compare) is tiny and called once
per component per loop iteration. Moving it inline eliminates a
call8/retw pair per component, reducing main loop overhead.
The cold warning path (warn_if_blocking) and runtime stats recording
remain out-of-line in component.cpp.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The fast path (millis + subtract + compare) is tiny and called once
per component per loop iteration. Moving it inline eliminates a
call8/retw pair per component, reducing main loop overhead.
The cold warning path (warn_if_blocking) and runtime stats recording
remain out-of-line in component.cpp.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>