Commit Graph
24422 Commits
Author SHA1 Message Date
J. Nick Koston 04697ac223 rf_bridge: batch UART reads to reduce per-loop overhead 2026-02-07 00:36:27 +01:00
J. Nick Koston 3f3cf83aab rd03d: batch UART reads to reduce per-loop overhead 2026-02-07 00:32:33 +01:00
J. Nick Koston 39013388dd pipsolar: batch UART reads to reduce per-loop overhead 2026-02-07 00:26:33 +01:00
J. Nick Koston cfbeea9983 [dlms_meter] Batch UART reads to reduce per-loop overhead
Replace byte-at-a-time read_byte() calls with batched read_array()
in loop(). Each read_byte() internally chains through
read_array(data, 1) -> check_read_timeout_(1) -> available(),
resulting in ~3 UART driver calls per byte. Batching into a 64-byte
stack buffer reduces this to ~3 calls per loop iteration regardless
of how many bytes are available.

Also uses vector insert() for bulk append instead of per-byte
push_back(), and caps reads to remaining buffer capacity upfront
to avoid over-reading from UART.
2026-02-07 00:22:00 +01:00
J. Nick Koston 8f6e1abbce Check read_array return value in drain_rx_buffer_ 2026-02-07 00:18:51 +01:00
J. Nick Koston c77d70c093 [tuya] Batch UART reads to reduce per-loop overhead
Replace byte-at-a-time read_byte() calls with batched read_array()
in loop(). Each read_byte() internally chains through
read_array(data, 1) -> check_read_timeout_(1) -> available(),
resulting in ~3 UART driver calls per byte. Batching into a 64-byte
stack buffer reduces this to ~3 calls per loop iteration regardless
of how many bytes are available.
2026-02-07 00:17:26 +01:00
J. Nick Koston 25762c62f8 [dsmr] Batch UART reads to reduce per-loop overhead
Replace byte-at-a-time read() calls with batched read_array() in all
four UART read sites: receive_telegram_(), receive_encrypted_telegram_(),
and two drain loops. Each read() internally chains through
read_array(data, 1) -> check_read_timeout_(1) -> available(), resulting
in ~3 UART driver calls per byte. Batching into a 64-byte stack buffer
reduces this to ~3 calls per batch regardless of byte count.

Extract drain_rx_buffer_() helper to deduplicate the two drain sites
in ready_to_request_data_() and stop_requesting_data_().
2026-02-07 00:11:50 +01:00
J. Nick Koston 441ec35d9f [seeed_mr24hpc1/mr60fda2/mr60bha2] Batch UART reads to reduce per-loop overhead
Replace byte-at-a-time read_byte() calls with batched read_array()
in all three Seeed MR sensor components. Each read_byte() internally
chains through read_array(data, 1) -> check_read_timeout_(1) ->
available(), resulting in ~3 UART driver calls per byte. Batching
into a 64-byte stack buffer reduces this to ~3 calls per loop
iteration regardless of how many bytes are available.
2026-02-07 00:07:44 +01:00
J. Nick KostonandCopilot 33c831dbb8 Update esphome/components/nextion/nextion.cpp
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-07 00:07:05 +01:00
J. Nick Koston 38aeb9be37 [pylontech] Batch UART reads to reduce loop overhead 2026-02-07 00:04:22 +01:00
J. Nick Koston 6b7c52799d [nextion] Batch UART reads to reduce loop overhead 2026-02-07 00:02:10 +01:00
J. Nick Koston f19bb2cd0a [modbus] Batch UART reads to reduce loop overhead 2026-02-06 23:59:38 +01:00
J. Nick Koston 26c98a1e25 [ld2420] Batch UART reads to reduce loop overhead 2026-02-06 23:54:52 +01:00
J. Nick Koston 8a2c5407d8 Merge branch 'ld2450_batch_read' into integration 2026-02-06 23:40:24 +01:00
J. Nick Koston 52a039585d Merge branch 'ld2410_batch_read' into integration 2026-02-06 23:40:20 +01:00
J. Nick Koston fd6bd7fb67 Merge branch 'ld2412_batch_read' into integration 2026-02-06 23:40:15 +01:00
J. Nick Koston b544cf2ffe [ld2410] Batch UART reads to reduce loop overhead 2026-02-06 23:39:31 +01:00
J. Nick Koston 6d1281301f [ld2412] Batch UART reads to reduce loop overhead
Read all available bytes in batches via read_array() instead of
byte-at-a-time read() calls. Each read() internally chains through
read_byte -> read_array(1) -> check_read_timeout_ -> available(),
resulting in 3 UART calls per byte. Batching reduces this
significantly.
2026-02-06 23:36:01 +01:00
J. Nick Koston 901192cca1 [ld2450] Batch UART reads to reduce loop overhead
Read all available bytes in batches via read_array() instead of
byte-at-a-time read() calls. Each read() internally chains through
read_byte -> read_array(1) -> check_read_timeout_ -> available(),
resulting in 3 UART calls per byte. At 256000 baud with ~235 bytes
per loop iteration, this was ~706 UART operations per loop call.
Batching reduces this to ~12.

Measured 33% reduction in loop time (2348ms -> 1577ms per 60s).
2026-02-06 23:33:21 +01:00
J. Nick Koston 3478c68af7 Merge branch 'cse7766_batch_read' into integration 2026-02-06 23:12:14 +01:00
J. Nick Koston 67e7ba4812 handle unlikely 2026-02-06 23:12:00 +01:00
J. Nick Koston 981c132cf4 Merge branch 'cse7766_batch_read' into integration 2026-02-06 23:07:21 +01:00
J. Nick Koston 572376091e loop 2026-02-06 23:07:02 +01:00
J. Nick Koston 803e73fdec Merge branch 'cse7766_batch_read' into integration 2026-02-06 22:59:59 +01:00
J. Nick Koston e7c9808b87 [cse7766] Batch UART reads to reduce loop overhead 2026-02-06 22:53:31 +01:00
J. Nick Koston 82eb8e3492 Merge branch 'ssd1306-progmem-tables' into integration 2026-02-06 21:39:50 +01:00
J. Nick Koston 21a5c2891e Merge branch 'i2c-arduino-cswtch' into integration 2026-02-06 21:39:46 +01:00
J. Nick Koston 96289775f2 [i2c] Replace switch with if-else to avoid CSWTCH table in RAM
Replace the Wire status-to-ErrorCode switch with if-else to prevent
the compiler from generating a 6-byte lookup table in DRAM on ESP8266.
2026-02-06 21:38:41 +01:00
J. Nick Koston 3e4269d32a Address review: add SSD1306_MODEL_COUNT sentinel and bounds checks
- Add SSD1306_MODEL_COUNT sentinel to enum for compile-time table size validation
- Replace 14 individual static_asserts with table size checks against SSD1306_MODEL_COUNT
- Add bounds checks in get_height_internal()/get_width_internal() to preserve default return 0
2026-02-06 21:37:51 +01:00
J. Nick Koston bd6d43de52 Merge branch 'ssd1306-progmem-tables' into integration 2026-02-06 21:28:11 +01:00
J. Nick Koston 8da986d41a [ssd1306_base] Move switch tables to PROGMEM with lookup tables
Replace three compiler-generated switch tables (CSWTCH) with PROGMEM
lookup tables, saving 84 bytes of DRAM on ESP8266.

- model_str_(): 56B string pointer table → PROGMEM_STRING_TABLE
- get_height_internal(): 14B byte table → PROGMEM struct array
- get_width_internal(): 14B byte table → PROGMEM struct array

Width and height use a single ModelDimensions struct array for
maintainability. All 14 enum values verified with static_assert.
2026-02-06 21:26:10 +01:00
tronikosandJ. Nick Koston eb7aa3420f Add target_temperature to the template water heater (#13661)
Co-authored-by: J. Nick Koston <nick@koston.org>
2026-02-06 21:23:42 +01:00
J. Nick Koston 4fb851954b Merge branch 'debug_progmem' into integration 2026-02-06 21:10:55 +01:00
J. Nick Koston d1399d9145 [debug] Move ESP8266 switch tables to flash with PROGMEM_STRING_TABLE 2026-02-06 21:10:23 +01:00
J. Nick Koston ba40fbc53d Merge remote-tracking branch 'origin/mqtt-custom-topic-no-alloc' into integration 2026-02-06 21:01:53 +01:00
J. Nick Koston c8d4d870e8 [mqtt] Use .c_str() for StringRef payloads to match non-allocating publish overload 2026-02-06 21:00:53 +01:00
J. Nick Koston fcb458e449 Merge branch 'mqtt-discovery-topic-no-alloc' into integration 2026-02-06 20:57:47 +01:00
J. Nick Koston 48a8f753f5 Merge branch 'mqtt-custom-topic-no-alloc' into integration 2026-02-06 20:57:40 +01:00
J. Nick Koston 6293f3110c Merge branch 'mqtt-friendly-name-const-ref' into integration 2026-02-06 20:57:35 +01:00
J. Nick Koston ce34b37e02 Merge branch 'mqtt-on-log-no-heap' into integration 2026-02-06 20:57:29 +01:00
J. Nick Koston b454cac1dc [mqtt] Use stack buffer for discovery topic to avoid heap allocation 2026-02-06 20:48:18 +01:00
J. Nick Koston a9a943b858 [mqtt] Add zero-allocation topic getters to MQTT_COMPONENT_CUSTOM_TOPIC macro
Add _to() variants that write into a stack buffer and return StringRef,
avoiding heap allocation on every publish. Update publish_state() in
climate (11 allocations eliminated), fan (3), cover (2), and valve (1)
to use the new stack-based getters.

The allocating getters are retained for setup-time paths (subscribe,
send_discovery, dump_config) where the allocation is one-time.
2026-02-06 20:41:51 +01:00
J. Nick Koston 85c1660edf [mqtt] Return friendly_name_() by const reference to avoid string copies 2026-02-06 20:38:33 +01:00
J. Nick Koston 664baac09e [mqtt] Avoid heap allocation in on_log by using const char* publish overload
The on_log callback was constructing a temporary MQTTMessage struct which
copied the log_message_ topic string and created a new std::string from
the message buffer on every log line. This is called frequently at runtime
and contributes to heap fragmentation.

Use the const char* publish overload directly to avoid both allocations.
2026-02-06 20:32:04 +01:00
J. Nick Koston b247e4a213 Merge remote-tracking branch 'upstream/dev' into integration 2026-02-06 20:12:59 +01:00
86f91eed2f [mqtt] Move switch string tables to PROGMEM_STRING_TABLE (#13802)
Co-authored-by: Copilot <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-02-06 19:30:05 +01:00
J. Nick Koston ea7aeb2507 Merge branch 'uart_partity' into integration 2026-02-06 19:25:08 +01:00
J. Nick Koston 61b2416a7c Merge branch 'bmp_progmem' into integration 2026-02-06 19:24:52 +01:00
J. Nick Koston 41cecbfb0f [template] Convert alarm sensor type to PROGMEM_STRING_TABLE and narrow enum to uint8_t (#13804) 2026-02-06 18:22:26 +00:00
J. Nick Koston e3b547b1b0 [bmp3xx_base/bmp581_base] Convert oversampling and IIR filter strings to PROGMEM_STRING_TABLE 2026-02-06 19:22:11 +01:00