From 392aa0fcbc4510b2db05ea6852f82b061f622493 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 3 Apr 2026 23:27:19 -1000 Subject: [PATCH] preen --- .../api/api_frame_helper_plaintext.cpp | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/esphome/components/api/api_frame_helper_plaintext.cpp b/esphome/components/api/api_frame_helper_plaintext.cpp index d263aac3f6..f7c77a494b 100644 --- a/esphome/components/api/api_frame_helper_plaintext.cpp +++ b/esphome/components/api/api_frame_helper_plaintext.cpp @@ -302,21 +302,18 @@ APIError APIPlaintextFrameHelper::write_protobuf_messages(ProtoWriteBuffer buffe assert(!messages.empty()); #endif uint8_t *buffer_data = buffer.get_buffer()->data(); + uint8_t *write_start = nullptr; + uint16_t total_len = 0; - // First message has max padding (HEADER_PADDING), may have unused leading bytes. - // Subsequent messages were encoded with exact header sizes, so they are contiguous. - const auto &first = messages[0]; - uint8_t header_len = - write_plaintext_header(buffer_data + first.offset, first.payload_size, first.message_type, HEADER_PADDING); - uint8_t *write_start = buffer_data + first.offset + HEADER_PADDING - header_len; - uint16_t total_len = header_len + first.payload_size; - - // Write headers for remaining messages — padding equals actual header size - // (stored in msg.header_size), so write_plaintext_header writes at offset 0 with no gap. - for (size_t i = 1; i < messages.size(); i++) { - const auto &msg = messages[i]; - write_plaintext_header(buffer_data + msg.offset, msg.payload_size, msg.message_type, msg.header_size); - total_len += msg.header_size + msg.payload_size; + // First message has max padding (header_size = HEADER_PADDING), may have unused leading bytes. + // Subsequent messages were encoded with exact header sizes (header_size = actual header len). + // write_plaintext_header right-justifies the header within header_size bytes of padding. + for (const auto &msg : messages) { + uint8_t header_len = + write_plaintext_header(buffer_data + msg.offset, msg.payload_size, msg.message_type, msg.header_size); + if (write_start == nullptr) + write_start = buffer_data + msg.offset + msg.header_size - header_len; + total_len += header_len + msg.payload_size; } return this->write_raw_fast_buf_(write_start, total_len);