Commit Graph
24768 Commits
Author SHA1 Message Date
J. Nick Koston 3ae2d11281 Merge remote-tracking branch 'upstream/mark-leaf-classes-final' into integration 2026-03-15 10:11:06 -10:00
J. Nick KostonandClaude Opus 4.6 b256b68265 Mark leaf Component subclasses as final
Mark 12 leaf classes (no subclasses) as final to enable
compiler devirtualization of virtual calls, reducing code
size and improving performance on embedded targets.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 09:51:13 -10:00
J. Nick Koston 373dedefe1 Merge branch 'devirtualize-preferences' into integration 2026-03-15 09:32:43 -10:00
J. Nick Koston 9529adb049 [preferences] Devirtualize preference backend and manager classes
Eliminates virtual dispatch from ESPPreferenceBackend and ESPPreferences.
Only one implementation of each exists per platform build, so the
polymorphic design was unnecessary overhead — same pattern as OTA (#14473)
and socket (#14398) devirtualizations.

Each platform's backend class is now a standalone final class in its own
header (preference_backend.h). The preferences manager class is extracted
to the platform's preferences.h with a PreferencesMixin CRTP base for
shared template helpers. core/preference_backend.h provides the
PreferenceBackend alias, ESPPreferenceObject, and DECLARE_PREFERENCE_ALIASES
macro. core/preferences.h is a thin wrapper including the active platform.

ESPPreferenceBackend and ESPPreferences become backward-compatible type
aliases to the concrete types. Zero caller changes required.
2026-03-15 08:49:40 -10:00
Jonathan Swoboda fe9f19d9ed [mqtt] Fix ESP-IDF 6.0 compatibility for external MQTT component (#14822) 2026-03-15 09:30:12 -04:00
J. Nick Koston 2dd12de1dc [ethernet] Fix Starting/Stopped/Starting log on RP2040 boot
Don't set started_ = true in setup(). Let the link polling in
loop() set it when the W5500 PHY link is actually up. Previously,
setting it immediately caused a spurious state transition because
the W5500 needs time after begin() before the link is ready.
2026-03-14 17:16:49 -10:00
J. Nick Koston 50b0e163d5 Merge remote-tracking branch 'origin/ethernet-rp2040-w5500-impl' into integration 2026-03-14 17:14:57 -10:00
J. Nick Koston 51c61c354c [ethernet] Add LwIPLock to get_ip_addresses() on RP2040
localIP() reads netif->ip_addr which can be mutated by DHCP
callbacks from IRQ context. Lock for consistency since this is
called from API responses, not just hot-loop polling.
2026-03-14 17:13:52 -10:00
J. Nick Koston 65e4c752a7 Merge remote-tracking branch 'origin/ethernet-rp2040-w5500-impl' into integration 2026-03-14 17:09:04 -10:00
J. Nick Koston 90c10103b8 [ethernet] Throttle RP2040 link polling, fix defines.h warnings
- Throttle linkStatus()/connected() polling to 500ms intervals to
  avoid excessive SPI transactions on every loop iteration
- Guard USE_ETHERNET/USE_ETHERNET_SPI in RP2040 defines.h block
  with #ifndef to prevent macro redefinition warnings
2026-03-14 17:08:42 -10:00
J. Nick Koston 9bb28b198e Merge branch 'ethernet-rp2040-w5500-impl' into integration 2026-03-14 16:59:08 -10:00
J. Nick Koston f109473707 [ethernet] Document lock-free polling rationale in RP2040 loop
Explain why linkStatus() and connected() are called without
LwIPLock — linkStatus() only reads the W5500 PHY via SPI, and
connected() does a single atomic 32-bit read of netif->ip_addr.
2026-03-14 16:57:00 -10:00
J. Nick Koston 7fd801fe45 [ethernet] Fix lwIP locking races in RP2040 ethernet
- Copy dns_getserver() values (not pointers) under LwIPLock in
  dump_connect_params_() to avoid dereferencing stale pointers
- Read netif ip_addr/netmask/gw under LwIPLock to prevent races
  with DHCP callbacks from IRQ context
- Remove duplicate connect_begin_ assignment in start_connect_()
- Remove duplicate status_set_warning() call in start_connect_()
2026-03-14 16:55:01 -10:00
J. Nick Koston 6dd463f7db Merge branch 'status-set-warning-no-arg' into integration 2026-03-14 16:48:48 -10:00
J. Nick Koston 159485f8a9 [core] Add no-arg status_set_warning() overload, use LOG_STR for static strings
Add a separate no-argument status_set_warning() that delegates to the
LogString* overload, matching the existing status_set_error() pattern.
This allows the linker to garbage-collect the const char* overload in
firmware that only uses no-arg or LOG_STR() calls.

Migrate static string literal callers to LOG_STR() so the const char*
overload can be eliminated in most builds.
2026-03-14 16:42:54 -10:00
J. Nick Koston b24ca802be Merge branch 'ethernet-rp2040-w5500-impl' into integration 2026-03-14 16:28:07 -10:00
J. Nick Koston b457a28c53 [ethernet] Use SplitDefault for clock_speed, add typing to _to_code
- 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
2026-03-14 16:27:47 -10:00
J. Nick Koston 09d4b44ab4 Merge remote-tracking branch 'origin/integration' into integration 2026-03-14 16:21:38 -10:00
J. Nick Koston 4aae82b598 Merge branch 'ethernet-rp2040-w5500-impl' into integration 2026-03-14 16:21:23 -10:00
J. Nick Koston ad0eb6aad5 [ethernet] Make clock_speed and polling_interval ESP32-only
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().
2026-03-14 16:21:00 -10:00
J. Nick Koston 502728edc1 Merge branch 'ethernet-rp2040-w5500-impl' into integration 2026-03-14 16:18:18 -10:00
J. Nick Koston 54d4910795 [ethernet] Address review feedback for RP2040 W5500
- 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
2026-03-14 16:17:57 -10:00
J. Nick Koston 162835d6da Merge remote-tracking branch 'origin/integration' into integration 2026-03-14 15:45:18 -10:00
J. Nick Koston b285f640ac Merge remote-tracking branch 'origin/ethernet-rp2040-w5500-impl' into integration 2026-03-14 15:44:18 -10:00
J. Nick Koston e20b8a9fa1 adjust 2026-03-14 15:42:58 -10:00
J. Nick Koston 3e4cb84585 adjust 2026-03-14 15:41:09 -10:00
J. Nick Koston 90a8116cc1 Merge branch 'integration' of https://github.com/esphome/esphome into integration 2026-03-14 15:25:38 -10:00
J. Nick Koston fdfbcd03af Merge remote-tracking branch 'origin/ethernet-rp2040-w5500-impl' into integration 2026-03-14 15:18:59 -10:00
J. Nick Koston c9cba2b070 [ethernet] Fix clang-tidy errors in ESP32 ethernet
- 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_
2026-03-14 15:18:02 -10:00
J. Nick Koston 0acd4ef50b Merge branch 'ethernet-rp2040-w5500' into integration 2026-03-14 14:43:24 -10:00
J. Nick Koston 4c0ab1e38a Merge branch 'ethernet-rp2040-w5500' into ethernet-rp2040-w5500-impl 2026-03-14 14:41:46 -10:00
J. Nick Koston 31a787eae1 [ethernet] Restore SPI polling version comment and add return type
Add back the useful comment about which ESP-IDF versions
support SPI Ethernet without IRQ. Add return type annotation.
2026-03-14 14:41:33 -10:00
J. Nick Koston 8ab3e8fa89 [ethernet] Add RP2040 W5500 Ethernet support
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
2026-03-14 14:38:48 -10:00
J. Nick Koston 0cbd2a2009 [ethernet] Restructure for multi-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.
2026-03-14 14:37:34 -10:00
J. Nick Koston d7f4f2b4c5 [ethernet] Restructure for multi-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.
2026-03-14 14:37:34 -10:00
J. Nick Koston ea1b1913d9 [ethernet] Restructure for multi-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.
2026-03-14 14:37:18 -10:00
J. Nick Koston d37f8876d7 [bthome_mithermometer][xiaomi_ble] Migrate CCM to PSA AEAD API for ESP-IDF 6.0 (#14816) 2026-03-14 13:39:07 -10:00
J. Nick Koston d7c42bc9ec [debug] Fix ESP-IDF 6.0 compatibility for wakeup cause API (#14812) 2026-03-14 13:38:51 -10:00
J. Nick Koston efc508a82b [dlms_meter] Migrate GCM to PSA AEAD API for ESP-IDF 6.0 (#14817) 2026-03-14 13:18:40 -10:00
J. Nick Koston 0edc0fd9c8 [esp32_ble_tracker] Migrate to PSA Crypto API for ESP-IDF 6.0 (#14811) 2026-03-14 13:17:56 -10:00
J. Nick Koston cc4c13930f [hmac_sha256] Migrate to PSA Crypto MAC API for ESP-IDF 6.0 (#14814) 2026-03-14 13:17:43 -10:00
J. Nick Koston 234ca7c951 [debug] Fix shared buffer between reset reason and wakeup cause (#14813) 2026-03-14 13:17:32 -10:00
J. Nick Koston 610068e538 Merge remote-tracking branch 'upstream/dev' into integration 2026-03-14 12:33:57 -10:00
J. Nick Koston 447c4669b1 [esp32] Disable SHA-512 in mbedTLS on IDF 6.0+ and add idf_version() helper (#14810) 2026-03-14 11:26:20 -10:00
J. Nick Koston 27942f1973 [helpers] Replace deprecated std::is_trivial in FixedRingBuffer (#14808) 2026-03-14 11:05:39 -10:00
J. Nick Koston 158a119a5a [sha256] Migrate to PSA Crypto API for ESP-IDF 6.0 (#14809) 2026-03-14 10:43:04 -10:00
Jonathan SwobodaandClaude Opus 4.6 b126f3af3b [ledc] Fix ESP-IDF 6.0 compatibility for peripheral reset (#14790)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 15:02:13 -04:00
Jonathan SwobodaandClaude Opus 4.6 d4e1e32a30 [mipi_dsi] Fix ESP-IDF 6.0 compatibility for use_dma2d flag (#14792)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 15:02:06 -04:00
Jonathan SwobodaandClaude Opus 4.6 271b423b22 [psram] Fix ESP-IDF 6.0 compatibility for PSRAM sdkconfig options (#14794)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 15:01:58 -04:00
Jonathan SwobodaandClaude Opus 4.6 417858f098 [psram] Add ESP32-C61 PSRAM support (#14795)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 15:01:49 -04:00