From 5e096826c3d1b7ebad4e6cfd03ebf374fbfa6a85 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:27:42 -0600 Subject: [PATCH 1/3] Remove verbose available() comment --- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp | 2 -- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp | 2 -- 2 files changed, 4 deletions(-) diff --git a/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp b/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp index d96824f83d..ad8d066ff8 100644 --- a/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +++ b/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp @@ -30,8 +30,6 @@ void MR60BHA2Component::dump_config() { // main loop void MR60BHA2Component::loop() { - // All current UART available() implementations return >= 0, - // use <= 0 to future-proof against any that may return negative on error. int avail = this->available(); if (avail <= 0) { return; diff --git a/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp b/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp index de799fcfa8..2ae6e724ab 100644 --- a/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +++ b/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp @@ -49,8 +49,6 @@ void MR60FDA2Component::setup() { // main loop void MR60FDA2Component::loop() { - // All current UART available() implementations return >= 0, - // use <= 0 to future-proof against any that may return negative on error. int avail = this->available(); if (avail <= 0) { return; From 6013b473ca80bd04ce3372dcde3275de1a86b230 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:30:08 -0600 Subject: [PATCH 2/3] Add comment explaining early guard --- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp | 2 ++ esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp | 2 ++ esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp | 2 ++ 3 files changed, 6 insertions(+) diff --git a/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp b/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp index 949c220c3d..b567e02524 100644 --- a/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +++ b/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp @@ -106,6 +106,8 @@ void MR24HPC1Component::update_() { // main loop void MR24HPC1Component::loop() { + // Early return avoids stack adjustment for the batch buffer below. + // loop() runs ~7000/min so most calls have nothing to read. int avail = this->available(); if (avail > 0) { // Read all available bytes in batches to reduce UART call overhead. diff --git a/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp b/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp index ad8d066ff8..51e798f727 100644 --- a/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +++ b/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp @@ -30,6 +30,8 @@ void MR60BHA2Component::dump_config() { // main loop void MR60BHA2Component::loop() { + // Early return avoids stack adjustment for the batch buffer below. + // loop() runs ~7000/min so most calls have nothing to read. int avail = this->available(); if (avail <= 0) { return; diff --git a/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp b/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp index 2ae6e724ab..919185c0e3 100644 --- a/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +++ b/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp @@ -49,6 +49,8 @@ void MR60FDA2Component::setup() { // main loop void MR60FDA2Component::loop() { + // Early return avoids stack adjustment for the batch buffer below. + // loop() runs ~7000/min so most calls have nothing to read. int avail = this->available(); if (avail <= 0) { return; From 15904ab58338260f26b7e955a0694955bc751b41 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:39:30 -0600 Subject: [PATCH 3/3] Remove unnecessary early guard --- .../seeed_mr24hpc1/seeed_mr24hpc1.cpp | 24 ++++++++----------- .../seeed_mr60bha2/seeed_mr60bha2.cpp | 8 +------ .../seeed_mr60fda2/seeed_mr60fda2.cpp | 8 +------ 3 files changed, 12 insertions(+), 28 deletions(-) diff --git a/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp b/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp index b567e02524..3f2103b401 100644 --- a/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +++ b/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp @@ -106,22 +106,18 @@ void MR24HPC1Component::update_() { // main loop void MR24HPC1Component::loop() { - // Early return avoids stack adjustment for the batch buffer below. - // loop() runs ~7000/min so most calls have nothing to read. + // Read all available bytes in batches to reduce UART call overhead. int avail = this->available(); - if (avail > 0) { - // Read all available bytes in batches to reduce UART call overhead. - uint8_t buf[64]; - while (avail > 0) { - size_t to_read = std::min(static_cast(avail), sizeof(buf)); - if (!this->read_array(buf, to_read)) { - break; - } - avail -= to_read; + uint8_t buf[64]; + while (avail > 0) { + size_t to_read = std::min(static_cast(avail), sizeof(buf)); + if (!this->read_array(buf, to_read)) { + break; + } + avail -= to_read; - for (size_t i = 0; i < to_read; i++) { - this->r24_split_data_frame_(buf[i]); // split data frame - } + for (size_t i = 0; i < to_read; i++) { + this->r24_split_data_frame_(buf[i]); // split data frame } } diff --git a/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp b/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp index 51e798f727..d95e13241d 100644 --- a/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +++ b/esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp @@ -30,14 +30,8 @@ void MR60BHA2Component::dump_config() { // main loop void MR60BHA2Component::loop() { - // Early return avoids stack adjustment for the batch buffer below. - // loop() runs ~7000/min so most calls have nothing to read. - int avail = this->available(); - if (avail <= 0) { - return; - } - // Read all available bytes in batches to reduce UART call overhead. + int avail = this->available(); uint8_t buf[64]; while (avail > 0) { size_t to_read = std::min(static_cast(avail), sizeof(buf)); diff --git a/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp b/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp index 919185c0e3..441ee2b5c2 100644 --- a/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +++ b/esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp @@ -49,14 +49,8 @@ void MR60FDA2Component::setup() { // main loop void MR60FDA2Component::loop() { - // Early return avoids stack adjustment for the batch buffer below. - // loop() runs ~7000/min so most calls have nothing to read. - int avail = this->available(); - if (avail <= 0) { - return; - } - // Read all available bytes in batches to reduce UART call overhead. + int avail = this->available(); uint8_t buf[64]; while (avail > 0) { size_t to_read = std::min(static_cast(avail), sizeof(buf));