Commit Graph

22607 Commits

Author SHA1 Message Date
J. Nick Koston
f42ca69bf2 Merge branch 'conditionally-compile-setup-priority-override' into integration 2026-02-18 13:29:56 -06:00
J. Nick Koston
e4af9efa4e [core] Keep declarations unconditional to fix clang-tidy
component.h is included before defines.h in application.h,
so the #ifdef guards on declarations were evaluated before the
define was visible. Keep declarations always visible (harmless
unused declarations cost nothing) and only guard the definitions.
2026-02-18 13:28:53 -06:00
J. Nick Koston
6b7258c828 [core] Conditionally compile setup_priority override infrastructure
The setup_priority override mechanism (struct, vector, linear scan,
allocation, and cleanup) is only needed when a user explicitly sets
setup_priority: in their YAML config. In practice this is almost
never used - components define their priorities via C++ virtual
methods instead.

Gate the entire mechanism behind USE_SETUP_PRIORITY_OVERRIDE, which
is only defined when the codegen encounters a setup_priority: config
entry. This eliminates dead code (struct, std::vector with reserve,
new/delete, linear scan in get_actual_setup_priority) from nearly
all builds.

Also removes the unnecessary reserve(10) call since the override
count is always very small.
2026-02-18 13:17:22 -06:00
J. Nick Koston
e5267b3ebf Merge remote-tracking branch 'origin/app-placement-new' into integration 2026-02-18 12:43:14 -06:00
J. Nick Koston
f7f48abdf0 Fix #include <new> generating trailing semicolon 2026-02-18 12:42:52 -06:00
J. Nick Koston
2d9e214879 Merge branch 'app-dump-config-uint16' into integration 2026-02-18 12:41:59 -06:00
J. Nick Koston
103c234196 Add static_assert for Application default-constructibility 2026-02-18 12:31:31 -06:00
J. Nick Koston
386bd16fc4 [core] Shrink Application::dump_config_at_ from size_t to uint16_t
Components are indexed by ESPHOME_COMPONENT_COUNT which is a uint16_t-sized
StaticVector. Using size_t for the dump_config index wastes 2 bytes of storage
and adds padding. Move it to the uint16_t group for better struct packing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 12:28:26 -06:00
J. Nick Koston
c6792c980c Merge remote-tracking branch 'origin/app-placement-new' into integration 2026-02-18 12:24:26 -06:00
J. Nick Koston
0ba752e947 [core] Use placement new for global Application instance
Replace the global `Application App` with placement-new construction
in aligned .bss storage. This eliminates the global constructor and
destructor chain that were:

- Calling xSemaphoreCreateMutex() at static init time (via Scheduler's
  Mutex member) before app_main() runs
- Redundantly zero-initializing all members that .bss already zeroes
- Registering __cxa_atexit for ~Application() destructor chain
  (~Application, ~vector, ~Mutex) that never runs on embedded

The storage is a char[] with a GCC asm label matching the mangled name
of esphome::App. Other translation units see a typed extern Application
(identical codegen, no indirection), while the defining TU sees a
trivially-destructible char array — so the compiler never emits
__cxa_atexit or the destructor chain.

Construction happens in pre_setup() via placement new, which is always
the first method called on App in the generated setup() function.
2026-02-18 12:10:44 -06:00
Jonathan Swoboda
9cd7b0b32b [external_components] Clean up incomplete clone on failed ref fetch (#14051)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 18:09:33 +00:00
J. Nick Koston
2873f7f8f3 Merge branch 'api_varint_split_32_64' into integration 2026-02-18 10:23:08 -06:00
J. Nick Koston
65ef81656e Merge remote-tracking branch 'origin/integration' into integration 2026-02-18 10:21:35 -06:00
J. Nick Koston
960f83555d Merge remote-tracking branch 'origin/api-handshake-timeout' into integration 2026-02-18 10:21:24 -06:00
J. Nick Koston
5bc5ec921f [api] Add handshake timeout to prevent connection slot exhaustion
Add a 15-second timeout for completing the API handshake (Noise
transport + HelloRequest). Previously, a client could connect and
stall mid-handshake, holding a connection slot for up to 150 seconds
(the keepalive disconnect timeout). With max_connections defaulting
to 8 on ESP32, this allowed all slots to be blocked with minimal
effort.

Normal clients complete the full handshake in milliseconds, so 15
seconds is generous. The check short-circuits for authenticated
connections (single bitfield compare) so there is no overhead for
established sessions.
2026-02-18 10:20:34 -06:00
J. Nick Koston
f1d027262c Merge branch 'api-handshake-timeout' into integration 2026-02-18 10:05:07 -06:00
J. Nick Koston
473b7af9f0 [api] Add handshake timeout to prevent connection slot exhaustion
Add a 15-second timeout for completing the API handshake (Noise
transport + HelloRequest). Previously, a client could connect and
stall mid-handshake, holding a connection slot for up to 150 seconds
(the keepalive disconnect timeout). With max_connections defaulting
to 8 on ESP32, this allowed all slots to be blocked with minimal
effort.

Normal clients complete the full handshake in milliseconds, so 15
seconds is generous. The check short-circuits for authenticated
connections (single bitfield compare) so there is no overhead for
established sessions.
2026-02-18 10:04:09 -06:00
dependabot[bot]
f73bcc0e7b Bump cryptography from 45.0.1 to 46.0.5 (#14049)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 09:08:12 -06:00
dependabot[bot]
652c669777 Bump pillow from 11.3.0 to 12.1.1 (#14048)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 09:08:02 -06:00
J. Nick Koston
f267b1fe0f Merge remote-tracking branch 'upstream/dev' into integration
# Conflicts:
#	esphome/core/component.cpp
2026-02-18 08:54:39 -06:00
J. Nick Koston
99a77e9549 Add single-byte fast path to ProtoVarInt::parse
Single-byte varints (0-127) are the most common case in protobuf
messages (booleans, small enums, field tags). Skip the loop entirely
for these values by checking the first byte before entering the
multi-byte parsing loop.
2026-02-18 08:44:13 -06:00
J. Nick Koston
bc2dbd3cf5 Add integration test for 5-byte varint device_id parsing
Device IDs are FNV hashes (uint32) that frequently exceed 2^28,
requiring 5 varint bytes. This test verifies the firmware correctly
decodes these values in incoming SwitchCommandRequest messages and
encodes them in state responses.
2026-02-18 08:35:00 -06:00
J. Nick Koston
bd78b546c8 fix 2026-02-18 08:26:04 -06:00
J. Nick Koston
fb89900c64 [core] Make setup_priority and component state constants constexpr (#14041) 2026-02-18 08:22:36 -06:00
J. Nick Koston
fb35ddebb9 [display] Make COLOR_OFF and COLOR_ON inline constexpr (#14044) 2026-02-18 08:22:07 -06:00
J. Nick Koston
4d2051ad8f no widen 2026-02-18 08:16:55 -06:00
J. Nick Koston
67034c966d no widen 2026-02-18 08:14:37 -06:00
J. Nick Koston
3e08cb595d no widen 2026-02-18 07:58:14 -06:00
J. Nick Koston
bf6aef4006 Merge branch 'constexpr-display-color' into integration 2026-02-17 21:56:20 -06:00
J. Nick Koston
8975ff8e1b Merge branch 'constexpr-tlc59208f' into integration 2026-02-17 21:56:15 -06:00
J. Nick Koston
c7cf98d3e8 Merge branch 'constexpr-pca9685' into integration 2026-02-17 21:56:09 -06:00
J. Nick Koston
686ed76402 [display] Make COLOR_OFF and COLOR_ON inline constexpr
Convert COLOR_OFF and COLOR_ON from extern const to inline constexpr.
The Color class already has constexpr constructors so these can be
compile-time constants, allowing the compiler to optimize default
parameter values and eliminate the runtime storage.
2026-02-17 21:50:24 -06:00
J. Nick Koston
68647fcdbe [tlc59208f] Make mode constants inline constexpr
Convert TLC59208F_MODE2_* constants from extern const to inline
constexpr so the compiler can use immediate values instead of memory
loads.
2026-02-17 21:49:49 -06:00
J. Nick Koston
8080aa4a34 [pca9685] Make mode constants inline constexpr
Convert PCA9685_MODE_* constants from extern const to inline constexpr
so the compiler can use immediate values instead of memory loads.
2026-02-17 21:49:11 -06:00
J. Nick Koston
ae5aebf80f Merge branch 'constexpr-constants' into integration 2026-02-17 21:34:40 -06:00
J. Nick Koston
cae80add8e Merge remote-tracking branch 'origin/optimize-warn-blocking-guard' into integration 2026-02-17 21:34:33 -06:00
J. Nick Koston
2a5ae59c20 [core] Optimize WarnIfComponentBlockingGuard::finish() hot path
Split the rarely-taken warning path into a separate noinline cold
function so the hot path (called every component every loop iteration)
is minimal. Also make WARN_IF_BLOCKING_OVER_MS constexpr so the
compiler uses an immediate compare instead of a memory load, and
merge the two ESP_LOGW calls into one.

finish() shrinks from 108 to 30 bytes. Total flash savings: -116 bytes.
2026-02-17 21:29:20 -06:00
J. Nick Koston
2d61d442cf [core] Make setup_priority and component state constants constexpr
Convert setup_priority floats, component state uint8_t constants, and
status LED constants from extern const (defined in component.cpp) to
inline constexpr in the header. This lets the compiler use immediate
values instead of memory loads across all translation units.

Also removes the dead HARDWARE_LATE declaration (declared extern but
never defined).

Saves ~364 bytes flash on ESP32-S3.
2026-02-17 21:27:03 -06:00
J. Nick Koston
9457e54e5d Rename parse_wide_ to parse_wide per clang-tidy naming convention 2026-02-17 19:00:55 -06:00
J. Nick Koston
bd6048faf8 Merge origin/dev into api_varint_split_32_64 2026-02-17 18:56:11 -06:00
J. Nick Koston
3989236154 [api] Split ProtoVarInt::parse into 32-bit and 64-bit phases
On 32-bit platforms (ESP32 Xtensa), 64-bit shifts in varint parsing
compile to __ashldi3 library calls. Since the vast majority of protobuf
varint fields (message types, sizes, enum values, sensor readings) fit
in 4 bytes, the 64-bit arithmetic is unnecessary overhead on the common
path.

Split parse() into two phases:
- Bytes 0-3: uint32_t loop with native 32-bit shifts (0, 7, 14, 21)
- Bytes 4-9: noinline parse_wide_() with uint64_t, only for BLE
  addresses and other 64-bit fields

The code generator auto-detects which proto messages use int64/uint64/
sint64 fields and emits USE_API_VARINT64 conditionally. On non-BLE
configs, parse_wide_() and the 64-bit accessors (as_uint64, as_int64,
as_sint64) are compiled out entirely.

Saves ~40 bytes flash on non-BLE configs. Benchmark shows 25-50%
faster parsing for 1-4 byte varints (the common case).
2026-02-17 18:54:25 -06:00
Jesse Hills
a3d7e76992 Merge branch 'beta' into dev 2026-02-18 13:29:11 +13:00
Jesse Hills
973656191b Merge pull request #14038 from esphome/bump-2026.2.0b4
2026.2.0b4
2026.2.0b4
2026-02-18 13:28:37 +13:00
Jesse Hills
d9f493ab7a Bump version to 2026.2.0b4 2026-02-18 10:13:41 +13:00
schrob
a0c4fa6496 [openthread] Fix compiler format warning (#14030) 2026-02-18 10:13:41 +13:00
J. Nick Koston
18b4818fb1 Merge branch 'web_server_reduce_set_json_id' into integration 2026-02-17 14:52:00 -06:00
dependabot[bot]
5bb863f7da Bump actions/stale from 10.1.1 to 10.2.0 (#14036)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 13:24:39 -06:00
J. Nick Koston
75e5ba93cd Merge remote-tracking branch 'upstream/dev' into integration 2026-02-17 13:21:13 -06:00
Rodrigo Martín
81ed70325c [esp32_ble_server] fix infinitely large characteristic value (#14011) 2026-02-17 07:45:21 -10:00
schrob
e826d71bd8 [openthread] Fix compiler format warning (#14030) 2026-02-17 10:16:57 -05:00