Commit Graph
18759 Commits
Author SHA1 Message Date
J. Nick Koston 77bbd70810 Merge remote-tracking branch 'origin/inline-ansi-reset' into integration 2026-03-15 20:42:27 -10:00
J. Nick Koston 712be2d2bc Merge branch 'dev' into inline-ansi-reset 2026-03-15 20:42:08 -10:00
J. Nick Koston 4d9b3b39a6 Merge branch 'inline-ansi-reset' into integration 2026-03-15 20:41:52 -10:00
J. Nick Koston d00c8ffe5c [logger] Inline write_() into write_body(), remove single-use helper 2026-03-15 20:41:38 -10:00
J. Nick Koston 62b6d93f1a Merge remote-tracking branch 'origin/ethernet-idf6-registry-components' into integration 2026-03-15 20:35:19 -10:00
J. Nick Koston 0cb5318e97 Merge remote-tracking branch 'upstream/inline-ansi-reset' into integration 2026-03-15 20:34:53 -10:00
J. Nick Koston 67386f0dd1 fix copilots manged suggestion 2026-03-15 20:34:25 -10:00
J. Nick KostonandCopilot Autofix powered by AI 968c0c2452 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-15 20:27:07 -10:00
J. Nick Koston d201cc5d64 [logger] Use constexpr for ANSI reset sequence length 2026-03-15 20:19:34 -10:00
J. Nick Koston 1244b2c25d [logger] Inline ANSI reset sequence in LogBuffer::finalize_()
Replace write_() call with direct char stores for the 4-byte
ANSI reset sequence ("\033[0m"). This eliminates function call
overhead (entry/retw, bounds check, memcpy setup) on every log
message and avoids a rodata string reference that consumes RAM
on ESP8266.
2026-03-15 20:18:03 -10:00
Jonathan Swoboda e1252e32d1 [deep_sleep] Fix ESP-IDF 6.0 GPIO wakeup API rename (#14846) 2026-03-15 19:10:30 -10:00
Jonathan Swoboda 1183ef825b [usb_host] Fix ESP-IDF 6.0 compatibility for external USB host component (#14844) 2026-03-15 19:09:55 -10:00
Keith Burzinski c09edb94c1 [tinyusb] Fix regression from bump to 2.x in #14796 (#14848) 2026-03-16 00:04:07 -05:00
J. Nick KostonCopilot Autofix powered by AIpre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
9948adc6a0 [runtime_image] Add esp-dsp dependency for JPEGDEC SIMD on ESP32 (#14840)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
2026-03-15 18:15:01 -10:00
J. Nick Koston ccb467b219 [fastled] Include esp_lcd IDF component for ESP32-S3 compatibility (#14839) 2026-03-15 18:14:41 -10:00
J. Nick Koston 97458f71d0 Merge remote-tracking branch 'origin/inline-finish-guard' into integration 2026-03-15 18:12:04 -10:00
J. Nick Koston 0c72491498 Merge branch 'dev' into inline-finish-guard 2026-03-15 18:10:38 -10:00
J. Nick Koston 422147c370 bot comments 2026-03-15 18:10:14 -10:00
J. Nick Koston b7960ee19b [ethernet] Keep CONFIG_ETH_SPI_ETHERNET_* in defines.h for static analysis
On IDF 5.x, the ESP-IDF headers use CONFIG_ETH_SPI_ETHERNET_W5500 and
CONFIG_ETH_SPI_ETHERNET_DM9051 to conditionally expose the W5500/DM9051
types. Static analysis (clang-tidy) needs both the new USE_ETHERNET_*
defines and the old CONFIG_* defines to resolve all symbols.
2026-03-15 17:57:52 -10:00
J. Nick Koston d4bce7f042 [ethernet] Guard per-chip PHY/MAC includes with IDF >= 6.0
On IDF 5.x these headers don't exist as standalone files — they are
included internally via esp_eth.h. On IDF 6.0 they moved to registry
components and need explicit includes.

LAN867x is unchanged (external component since IDF 5.3).
2026-03-15 17:16:21 -10:00
J. Nick Koston 63a2abf19c [ethernet] Fix JL1101 on IDF 6.0: pioarduino doesn't have it patched
pioarduino only patches esp_eth_phy_new_jl1101() into IDF 5.4.2-5.x,
not IDF 6.0. Update guards in both the .c driver and .h declaration
to also compile when IDF >= 6.0.

Guard logic: compile custom driver when JL1101 configured AND
(IDF >= 6.0 OR IDF < 5.4.2 OR not PlatformIO)
2026-03-15 17:13:00 -10:00
J. Nick Koston 0183d2ca61 [ethernet] Only compile JL1101 driver when needed
- Exclude esp_eth_phy_jl1101.c when JL1101 is not configured
- Exclude on IDF 5.4.2-5.x where pioarduino has it builtin
- Keep custom driver for IDF < 5.4.2 and IDF 6.0+ (pioarduino may
  not have patched JL1101 into their IDF 6.0 fork yet)
- Always use esp_eth_phy_new_jl1101() in C++ (no generic fallback)
- Namespace ethernet type in CORE.data[KEY_ETHERNET]
2026-03-15 17:09:59 -10:00
J. Nick Koston 6e8ef55381 [ethernet] Fix AttributeError: CORE has no using_platformio
Only exclude esp_eth_phy_jl1101.c at the Python level on IDF >= 6.0.
On IDF 5.4.2+ with PlatformIO, the file's own preprocessor guard
(checking the C-level PLATFORMIO define) compiles it to empty.
2026-03-15 17:03:21 -10:00
J. Nick Koston d27b3e8c0f [ethernet] Add explicit PHY/MAC includes and exclude JL1101 driver when unused
- Add explicit includes for per-chip PHY/MAC headers (required on IDF 6.0
  where they are no longer pulled in via esp_eth.h, also works on IDF 5.x)
- Exclude esp_eth_phy_jl1101.c from compilation on IDF >= 6.0 (uses
  generic PHY) and IDF >= 5.4.2 with PlatformIO (uses builtin driver)
2026-03-15 17:01:29 -10:00
J. Nick Koston b636f2613d [ethernet] Add IDF 6.0 registry component dependencies
ESP-IDF 6.0 moved individual ethernet PHY and SPI MAC/PHY drivers out
of the builtin esp_eth component into the Espressif Component Registry.

Changes:
- Add USE_ETHERNET_W5500/DM9051 defines, replacing CONFIG_ETH_SPI_ETHERNET_*
  Kconfig options that were removed in IDF 6.0
- Conditionally pull registry components (lan87xx, rtl8201, dp83848,
  ip101, ksz80xx, w5500, dm9051) via add_idf_component() on IDF >= 6.0
- Skip CONFIG_ETH_SPI_ETHERNET_{TYPE} sdkconfig on IDF >= 6.0
- Fix emac_rmii_clock_gpio_t cast using decltype (enum removed in IDF 6.0)
- Use esp_eth_phy_new_generic() for OPENETH and JL1101 on IDF >= 6.0
- Fix JL1101 to work on IDF 5.4.2+ with PlatformIO (was previously
  falling through to mark_failed due to overly restrictive guard)
- Exclude custom JL1101 driver on IDF >= 6.0
- Add registry components to idf_component.yml for static analysis
- Update defines.h for static analysis

All changes maintain backward compatibility with IDF 5.x.
2026-03-15 16:57:19 -10:00
J. Nick Koston 1377776d21 [ethernet] Restructure for multi-platform support (#14819) 2026-03-15 15:17:21 -10:00
J. Nick KostonandClaude Opus 4.6 29501ef4f8 [core] Mark leaf Component subclasses as final (#14833)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:13:34 -10:00
J. Nick Koston d97c23b8e3 [core] Add no-arg status_set_warning() to allow linker GC of const char* overload (#14821) 2026-03-15 15:13:10 -10:00
J. Nick Koston 2f02985813 Merge branch 'ethernet-mark-final' into integration 2026-03-15 14:46:08 -10:00
J. Nick Koston 0267dcc998 [ethernet] Mark EthernetComponent as final 2026-03-15 14:45:29 -10:00
J. Nick Koston 870f93d797 Merge remote-tracking branch 'upstream/dev' into integration 2026-03-15 14:30:46 -10:00
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
Jonathan Swoboda 33f9ad9cee [esp32] Support non-numeric version extras in IDF version string (#14826) 2026-03-15 14:58:12 -04:00
Jonathan Swoboda 7f418d969e [multiple] Fix implicit int-to-gpio_num_t conversions for GCC 15 (#14830) 2026-03-15 14:57:52 -04: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 bfb380d002 [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:17:02 -10: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