Commit Graph

24389 Commits

Author SHA1 Message Date
J. Nick Koston bc6691da9a Merge remote-tracking branch 'origin/rp2040-upload-improvements' into integration 2026-03-09 17:49:47 -10:00
J. Nick Koston 4b83de10e5 make linux error reporting more helpful 2026-03-09 17:45:03 -10:00
J. Nick Koston 399d695a39 Merge remote-tracking branch 'upstream/dev' into rp2040-upload-improvements 2026-03-09 17:45:00 -10:00
Javier Peletier e82f0f4432 [cpptests] support testing platform components (#13075)
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
Co-authored-by: J. Nick Koston <nick@koston.org>
2026-03-10 02:41:02 +00:00
Tobias Stanzel 00f809f5f0 [sen6x] fix memory leak issue (#14623)
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
Co-authored-by: J. Nick Koston <nick+github@koston.org>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-09 21:45:20 -04:00
Jonathan Swoboda c31ac662bd [multiple] Fix crashes from malformed external input (#14643)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
2026-03-09 20:39:58 -04:00
J. Nick Koston d6ce5dda81 [ci] Skip YAML anchor keys in integration fixture component extraction (#14670) 2026-03-09 22:54:56 +00:00
J. Nick Koston dadbdd0f7b [ci] Make codeowner label update non-fatal for fork PRs (#14668) 2026-03-09 12:34:31 -10:00
Jonathan Swoboda d96be88ff5 [multiple] Fix reliability issues in 5 components (#14655)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
2026-03-09 18:32:57 -04:00
Jonathan Swoboda d2686b49be [canbus] Fix multiple MCP component bugs (#14461)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 18:15:33 -04:00
Keith Burzinski 468ce74c8e [api][serial_proxy] Fix dangling pointer (#14640) 2026-03-09 17:04:47 -05:00
Jonathan Swoboda b3fc43c13c [multiple] Fix wrong behavior in sensor calculations and drivers (#14644)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 18:00:17 -04:00
Jonathan Swoboda 308e8e78cd [ble_scanner] Escape special characters in JSON output (#14664)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:59:36 -04:00
Jonathan Swoboda 470d9160a5 [demo] Fix alarm control panel auth bypass when code is omitted (#14645)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:57:02 -04:00
Jonathan Swoboda 9902447834 [multiple] Fix minor bugs in 8 components (#14650)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:51:50 -04:00
Jonathan Swoboda 7c1b9f0cb4 [multiple] Fix wrong behavior in 5 components (#14647)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:22:06 -04:00
Jonathan Swoboda fecedeb018 [multiple] Fix crashes from malformed external input (batch 2) (#14651)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:20:09 -04:00
Jonathan Swoboda 9418f35cc3 [multiple] Remove unnecessary heap allocations in 4 components (#14656)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:18:44 -04:00
Jonathan Swoboda 08a0608a48 [wifi][captive_portal][heatpumpir][es8388] Fix wrong behavior in 4 components (#14657)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:18:21 -04:00
Jonathan Swoboda b721cd48e5 [hmc5883l][mmc5603][honeywellabp2][xgzp68xx][max9611] Fix uninitialized members (#14659)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:18:07 -04:00
Jonathan Swoboda 75f55adbfa [api][at581x][vl53l0x] Fix bounds check issues in 3 components (#14660)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:17:31 -04:00
Jonathan Swoboda a379e5a635 [runtime_image][st7701s] Fix BMP decoder and LCD init bugs (#14663)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:16:29 -04:00
dependabot[bot] 019db74582 Bump setuptools from 82.0.0 to 82.0.1 (#14665)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 20:44:27 +00:00
Jonathan Swoboda 31f4b4d00d [multiple] Fix undefined behavior across components (#14639)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 07:33:08 -04:00
J. Nick Koston 1b4de89d02 Merge remote-tracking branch 'upstream/proto-byte-buffer' into integration 2026-03-08 22:08:11 -10:00
J. Nick Koston 7ac8b790fc Remove redundant rx_buf_ size checks before resize
APIBuffer::resize() is already just a capacity check + store,
making the outer size-equality guard redundant. Saves ~8 bytes
of code size across both frame helpers.
2026-03-08 22:07:23 -10:00
J. Nick Koston 6f89428333 Merge branch 'inline-varint-parse-fast-path' into integration 2026-03-08 21:06:43 -10:00
J. Nick Koston 765bb3298e [api] Use PROTO_VARINT_PARSE_FAILED constant in parse failure returns
Replace magic {0, 0} with {0, PROTO_VARINT_PARSE_FAILED} in parse_slow()
and parse_wide() for consistency with the named sentinel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:06:22 -10:00
J. Nick Koston e7ce2703e8 [api] Add explicit static_cast<uint32_t> in decode_zigzag32 calls
On BLE builds where proto_varint_value_t is uint64_t, decode_zigzag32()
takes uint32_t — make the narrowing explicit to match the static_cast
pattern used for other type conversions in generated code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:05:07 -10:00
J. Nick Koston 972d0978bd [api] Add explicit static_cast<uint32_t> in decode_zigzag32 calls
On BLE builds where proto_varint_value_t is uint64_t, decode_zigzag32()
takes uint32_t — make the narrowing explicit to match the static_cast
pattern used for other type conversions in generated code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:04:55 -10:00
J. Nick Koston 6a0539b3d6 Merge branch 'inline-varint-parse-fast-path' into integration 2026-03-08 21:00:55 -10:00
J. Nick Koston 5dbf35051a [api] Add explicit static_cast<uint32_t> for tag/field_length narrowing
Consistency with frame helper code — makes the uint64→uint32 narrowing
explicit on BLE builds where proto_varint_value_t is uint64_t.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:58:13 -10:00
J. Nick Koston 9f57c2a9b6 [api] Fix HELPER_LOG format mismatch and remove unused is_varint64 codegen field
- Cast msg_size/type_varint.value to uint32_t in HELPER_LOG to match PRIu32
  format (proto_varint_value_t is uint64_t on BLE builds)
- Remove unused is_varint64 field from api_protobuf.py TypeInfo classes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:52:26 -10:00
J. Nick Koston ce70c955c4 [api] Remove as_uint16/as_uint32 accessors from ProtoVarIntResult, use .value directly
Address code review feedback:
- Remove as_uint16() and as_uint32() accessors from ProtoVarIntResult
- Use .value directly with static_cast where narrowing is needed
- Fix ESP_LOGV truncation: use PRIu64 with static_cast<uint64_t> for BLE builds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:52:03 -10:00
J. Nick Koston fab59c86a7 Merge remote-tracking branch 'upstream/dev' into inline-varint-parse-fast-path 2026-03-08 19:07:58 -10:00
J. Nick Koston a9ad0cc3f3 [api] Remove unused ProtoVarInt instance members and ProtoVarIntResult accessors
After moving decode_varint to raw proto_varint_value_t, the type-
conversion accessors (as_bool, as_int32, as_sint32, as_uint64, etc.)
on ProtoVarIntResult are dead code. ProtoVarInt itself is now only
used as a static method container for parse(), so remove its
constructors, instance accessors, and value_ member.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 18:58:54 -10:00
J. Nick Koston b838085e41 [api] Use proto_varint_value_t type alias instead of #ifdef blocks
Replace per-override #ifdef USE_API_VARINT64 conditionals with a
single type alias proto_varint_value_t, eliminating preprocessor
blocks from every decode_varint signature in api_pb2.cpp/h.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 18:56:15 -10:00
J. Nick Koston fcd72336f0 [api] Change decode_varint parameter from ProtoVarIntResult to raw value type
Pass uint32_t (or uint64_t when USE_API_VARINT64 is defined) directly
to decode_varint() instead of the ProtoVarIntResult struct. This
eliminates accessor method overhead in each of the 51 overrides,
replacing value.as_uint32() with direct value usage, value.as_bool()
with value != 0, etc. No vtable growth - single virtual method with
conditionally-typed parameter.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 18:39:59 -10:00
J. Nick Koston f4724d7797 Split parse() into parse() and parse_non_empty()
parse_non_empty() has no len==0 check (with debug assert) for callers
that guarantee len >= 1 (e.g. after while (ptr < end)).

parse() adds the len==0 guard and delegates to parse_non_empty() for
callers where the buffer may be empty (e.g. value parse after tag
advance in decode(), frame helper header parsing).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 18:18:19 -10:00
Jonathan Swoboda 0db9137d91 [multiple] Add division by zero guards (#14634)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: J. Nick Koston <nick+github@koston.org>
2026-03-09 00:10:48 -04:00
Clyde Stubbs f3ca86b670 [ci-custom] Directions on constant hoisting (#14637) 2026-03-08 23:48:03 -04:00
J. Nick Koston 7185c66779 Remove len==0 guard from parse(), add debug assert
All callers guarantee len > 0 (decode loop checks ptr < end,
header parse checks minimum bytes). Replace runtime check with
ESPHOME_DEBUG_API assert. This removes the len check from the
inline entirely, saving one branch per call site.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 17:42:37 -10:00
J. Nick Koston 8b9c4d050d Reduce parse() inline size by folding len==0 into slow path
Move the len==0 check from the inlined fast path into parse_slow(),
saving one branch + one return-value setup per inline site (~6-8
bytes per call site on Xtensa/xtensa-lx106).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 17:38:12 -10:00
J. Nick Koston 3653e0cf9f Merge branch 'dev' into inline-varint-parse-fast-path 2026-03-08 17:24:17 -10:00
J. Nick Koston 088a8a4338 [ci] Match symbols with changed signatures in memory impact analysis (#14600)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 17:23:58 -10:00
J. Nick Koston c90eb90ff6 Fix clang-tidy naming and add PROTO_VARINT_PARSE_FAILED constant
- Rename parse_slow_ -> parse_slow and parse_wide_ -> parse_wide
  (static methods should not have trailing underscore per clang-tidy)
- Add PROTO_VARINT_PARSE_FAILED constant for consumed field sentinel

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 17:23:36 -10:00
Jonathan Swoboda 5d3893368d [multiple] Add array bounds checks (#14635)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 23:16:32 -04:00
J. Nick Koston e285fd6815 [api] Inline ProtoVarInt::parse fast path and return consumed in struct
Replace optional<ProtoVarInt> + consumed pointer with ProtoVarIntResult
struct that returns value + consumed count directly. This eliminates
memory stores through a pointer on the fast path (single-byte varints
< 128), keeping everything in registers.

The parse() method is now ESPHOME_ALWAYS_INLINE with the multi-byte
slow path outlined to parse_slow_(). The common case for protobuf
field tags, small enums, booleans, and typical message sizes/types
is a simple high-bit check + register return with no function call.

Measured on ESP32 (Xtensa): try_read_frame_ grows only +12 bytes
(320 → 332) for two inlined parse sites, while eliminating two
function calls per message on the hot path.
2026-03-08 17:13:03 -10:00
J. Nick Koston 4081f490d6 Merge remote-tracking branch 'upstream/dev' into integration
# Conflicts:
#	esphome/components/api/api_frame_helper.h
#	esphome/core/application.h
2026-03-08 16:44:41 -10:00
Jonathan Swoboda 5b9cab02be [multiple] Add default initializers to uninitialized member variables (#14636)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 22:37:54 -04:00