Commit Graph
24722 Commits
Author SHA1 Message Date
J. Nick Koston 610068e538 Merge remote-tracking branch 'upstream/dev' into integration 2026-03-14 12:33:57 -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
Jonathan SwobodaandClaude Opus 4.6 c52042e023 [tinyusb][usb_cdc_acm] Bump esp_tinyusb to 2.1.1 (#14796)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 15:01:29 -04:00
Jonathan SwobodaandClaude Opus 4.6 f12531e7e0 [esp32_camera] Bump esp32-camera to 2.1.5 (#14806)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 08:32:17 -10:00
ca279110c9 [output] Inline trivial FloatOutput accessors (#14786)
Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-14 08:31:50 -10:00
J. Nick Koston f2968e0449 [api] Reduce API code size with buffer and nodelay optimizations (#14797) 2026-03-14 08:13:50 -10:00
J. Nick KostonandCopilot Autofix powered by AI 0043be6165 [core] Inline trivial EntityBase accessors (#14782)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-14 08:13:01 -10:00
J. Nick Koston 0716c9f722 [core] Inline LwIPLock as no-op on platforms without lwIP core locking (#14787) 2026-03-14 08:12:04 -10:00
leccelecce fcf5637aa5 [online_image] Log download duration in milliseconds instead of seconds (#14803) 2026-03-14 09:15:54 -04:00
J. Nick Koston 6239046c70 Merge remote-tracking branch 'origin/inline-mutex-single-threaded' into integration 2026-03-13 22:26:39 -10:00
J. Nick Koston 12d9841433 [core] Inline Mutex on FreeRTOS platforms (ESP32, LibreTiny)
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.
2026-03-13 22:23:30 -10:00
J. Nick Koston 301c23a588 Merge remote-tracking branch 'upstream/dev' into inline-mutex-single-threaded 2026-03-13 22:17:37 -10:00
J. Nick Koston 724a4e9769 Merge branch 'inline-finish-guard' into integration 2026-03-13 21:05:54 -10:00
J. Nick KostonandClaude Opus 4.6 39df2ab47f [core] Inline WarnIfComponentBlockingGuard::finish() into header
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>
2026-03-13 21:03:06 -10:00
J. Nick Koston 9980279875 Merge branch 'inline-finish-guard' into integration 2026-03-13 20:51:57 -10:00
J. Nick KostonandClaude Opus 4.6 ea1cfa9c1e [core] Inline WarnIfComponentBlockingGuard::finish() into header
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>
2026-03-13 20:50:15 -10:00
J. Nick Koston 032e9a8a90 Merge branch 'api-reduce-code-size' into integration 2026-03-13 19:42:48 -10:00
J. Nick Koston 24f380a67a [api] Reduce API code size with buffer and nodelay optimizations
Add APIBuffer::reserve_and_resize() to eliminate duplicate grow_()
capacity checks when reserve() is immediately followed by resize().
This saves one grow_() check per call site (~12 bytes each).

Simplify set_nodelay_for_message() Nagle batching state machine by
replacing the NODELAY_ON (-1) sentinel with a simple counter starting
at 0. Reduces branches from 5 to 3 with identical behavior verified
by exhaustive testing of all 2^N message sequences up to length 12.

Saves 32 bytes flash on ESP8266.
2026-03-13 19:41:03 -10:00
J. Nick Koston 676e668811 revert 2026-03-13 18:25:05 -10:00
J. Nick Koston 52680e99b8 Merge remote-tracking branch 'upstream/esp32-log-v2' into integration 2026-03-13 17:22:39 -10:00
J. Nick Koston d3055ea6ea [esp32] Drop :000 line number and shorten fallback tag 2026-03-13 17:06:45 -10:00
J. Nick Koston 99e0dcf563 [esp32] Use DRAM_ATTR for format strings in IRAM log override
ESP-IDF places log_format_text.c in IRAM/DRAM via linker fragment
(noflash) when CONFIG_LOG_IN_IRAM=y. Our override is in a different
compilation unit so string literals would default to flash. In
constrained environments where flash cache is disabled, reading
flash-resident format strings would fault.

Move all format string constants to DRAM_ATTR to match ESP-IDF's
own behavior.
2026-03-13 17:03:14 -10:00
J. Nick Koston 3a491722b2 [esp32] Use ESP-IDF Log V2 to reduce flash usage
Switch from ESP-IDF Log V1 to V2, which centralizes log formatting
inside esp_log() instead of expanding esp_log_timestamp(), color codes,
and LOG_FORMAT() at every ESP_LOGx macro call site.

This saves ~9KB of flash by eliminating ~500 per-site macro expansions
in ESP-IDF library code (gpio, ethernet, mdns, uart, wifi, etc.).

Override esp_log_format() to skip ESP-IDF's own formatting after the
ESPHome logger hook is installed, since ESPHome does its own formatting.
For early boot and constrained environments (ISR, cache disabled),
format messages in ESPHome style with colors using a stack buffer.
2026-03-13 15:38:43 -10:00
J. Nick Koston 415084d032 Merge remote-tracking branch 'upstream/dev' into integration 2026-03-13 13:42:55 -10:00
J. Nick KostonandCopilot Autofix powered by AI 5e3c44d48f [rp2040] Add CI check for boards.py freshness (#14754)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-13 13:28:55 -10:00
J. Nick Koston d6d3bbbad8 [scheduler] Use integer math for interval offset calculation (#14755) 2026-03-13 13:28:34 -10:00
J. Nick Koston 0082345c70 Merge remote-tracking branch 'origin/fix-lwiplock-inline-noop' into integration 2026-03-13 13:28:05 -10:00
J. Nick Koston 2a3c451fd3 tidy 2026-03-13 13:27:39 -10:00
Jonathan SwobodaandClaude Opus 4.6 86b7933081 [esp32_rmt_led_strip][remote_transmitter][remote_receiver] Fix ESP-IDF 6.0 RMT compatibility (#14783)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 19:24:41 -04:00
J. Nick Koston 7cceb72cc3 [api] Inline force-variant ProtoSize calc methods (#14781) 2026-03-13 13:23:41 -10:00
J. Nick Koston 56f7b3e61b [ci] Only run integration tests for changed components (#14776) 2026-03-13 13:20:35 -10:00
J. Nick Koston 22062d79a2 [analyze-memory] Add function call frequency analysis (#14779) 2026-03-13 13:20:17 -10:00
J. Nick Koston ebc315ea80 Merge remote-tracking branch 'origin/dev' into integration 2026-03-13 13:14:56 -10:00
J. Nick Koston 442329a139 Merge remote-tracking branch 'origin/entity-base-inline-accessors' into integration 2026-03-13 13:14:49 -10:00
J. Nick KostonandCopilot Autofix powered by AI 417fccaa87 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-13 13:14:16 -10:00
Jonathan SwobodaandClaude Opus 4.6 ab3b677113 [adc] Fix ESP-IDF 6.0 compatibility for ADC_ATTEN_DB_12 (#14784)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 23:11:18 +00:00
J. Nick Koston 1507752fa3 Merge remote-tracking branch 'origin/integration' into integration 2026-03-13 13:08:17 -10:00
J. Nick Koston 2f57f0c90f Merge branch 'fix-lwiplock-inline-noop' into integration 2026-03-13 13:07:54 -10:00
J. Nick Koston 303c6513ee [core] Inline LwIPLock as no-op on platforms without lwIP core locking
LwIPLock was introduced for RP2040 WiFi in #14679 to prevent race
conditions between lwip callbacks and the main loop. However, on
platforms without lwIP core locking (ESP8266, LibreTiny, Zephyr,
RP2040 without WiFi), the constructor/destructor were empty stubs
in .cpp files that the compiler could not see through, generating
unnecessary function calls at every call site.

Move the no-op implementation inline into helpers.h so the compiler
can eliminate all LwIPLock overhead on these platforms. ESP32 and
RP2040+WiFi retain their out-of-line implementations with real
locking.
2026-03-13 13:07:27 -10:00
J. Nick Koston ebc4c556e3 Merge remote-tracking branch 'upstream/fix-lwiplock-inline-noop' into integration 2026-03-13 13:06:42 -10:00
J. Nick Koston fb9e2b08e5 Merge remote-tracking branch 'upstream/fix-lwiplock-inline-noop' into integration 2026-03-13 13:04:36 -10:00
J. Nick Koston e918814530 [core] Inline LwIPLock as no-op on platforms without lwIP core locking
LwIPLock was introduced for RP2040 WiFi in #14679 to prevent race
conditions between lwip callbacks and the main loop. However, on
platforms without lwIP core locking (ESP8266, LibreTiny, Zephyr,
RP2040 without WiFi), the constructor/destructor were empty stubs
in .cpp files that the compiler could not see through, generating
unnecessary function calls at every call site.

Move the no-op implementation inline into helpers.h so the compiler
can eliminate all LwIPLock overhead on these platforms. ESP32 and
RP2040+WiFi retain their out-of-line implementations with real
locking.
2026-03-13 13:02:05 -10:00
Jonathan SwobodaandClaude Opus 4.6 cdb445f69d [mipi_dsi] Fix ESP-IDF 6.0 compatibility for LCD color format (#14785)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 23:00:28 +00:00
J. Nick Koston 7bb88267fe Merge branch 'entity-base-inline-accessors' into integration 2026-03-13 12:43:56 -10:00
J. Nick Koston 7709713fad Merge branch 'dev' into entity-base-inline-accessors 2026-03-13 12:39:52 -10:00
J. Nick Koston 742230e9ab [core] Inline trivial EntityBase accessors
Move get_name() and get_object_id_hash() definitions from
entity_base.cpp to entity_base.h so the compiler can inline
these trivial member accessors, eliminating call overhead at
every call site.
2026-03-13 12:38:49 -10:00