From 1343bbf6eab9b5883349ca2abbc97c9daf112fe8 Mon Sep 17 00:00:00 2001 From: pswid <78219494+pswid@users.noreply.github.com> Date: Fri, 3 Dec 2021 11:50:52 +0100 Subject: [PATCH 1/3] fix overlapping 0xC2 and overflow of offset --- CHANGELOG_LATEST.md | 2 ++ src/telegram.cpp | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 1e0d3f44d..4403b16b0 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -6,6 +6,8 @@ ## Fixed - lastcode broke MQTT JSON structure [#228] +- overlapping while reading 0xC2 from Boiler +- redundant telegram readings (because of offset overflow) ## Changed diff --git a/src/telegram.cpp b/src/telegram.cpp index f56ac0148..c15b6e730 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -613,7 +613,19 @@ uint16_t TxService::read_next_tx(uint8_t offset) { if (telegram_last_->offset != offset) { return 0; } - add(Telegram::Operation::TX_READ, telegram_last_->dest, telegram_last_->type_id, telegram_last_->offset + 25, message_data, 1, 0, true); + + uint8_t add_offset; + if (telegram_last_->dest == 0x08 && telegram_last_->type_id == 0xC2) { //fix for overlapping 0xC2 telegrams from Boiler. Are other telegrams also affected? + add_offset = 27; + } else { + add_offset = 25; + } + + if (UINT8_MAX - telegram_last_->offset < add_offset) { //stop if new offset would overflow + return 0; + } + + add(Telegram::Operation::TX_READ, telegram_last_->dest, telegram_last_->type_id, telegram_last_->offset + add_offset, message_data, 1, 0, true); return telegram_last_->type_id; } From 9cd20cfc05beb66b54f1210e60d3b9aeb9ca535e Mon Sep 17 00:00:00 2001 From: pswid <78219494+pswid@users.noreply.github.com> Date: Tue, 14 Dec 2021 10:29:15 +0100 Subject: [PATCH 2/3] fix overlaping while reading sequence of EMS1.0 telegrams --- CHANGELOG_LATEST.md | 2 +- src/emsesp.cpp | 2 +- src/telegram.cpp | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 4403b16b0..f29d2b944 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -6,7 +6,7 @@ ## Fixed - lastcode broke MQTT JSON structure [#228] -- overlapping while reading 0xC2 from Boiler +- overlapping while reading sequence of EMS1.0 telegrams - redundant telegram readings (because of offset overflow) ## Changed diff --git a/src/emsesp.cpp b/src/emsesp.cpp index bd7ce5cca..d31849933 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -1191,7 +1191,7 @@ void EMSESP::incoming_telegram(uint8_t * data, const uint8_t length) { txservice_.send_poll(); // close the bus txservice_.reset_retry_count(); tx_successful = true; - // if telegram is longer read next part with offset + 25 for ems+ + // if telegram is longer read next part with offset +25 for ems+ or +27 for ems1.0 if (length == 32) { if (txservice_.read_next_tx(data[3]) == read_id_) { read_next_ = true; diff --git a/src/telegram.cpp b/src/telegram.cpp index c15b6e730..ed58277d5 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -613,12 +613,19 @@ uint16_t TxService::read_next_tx(uint8_t offset) { if (telegram_last_->offset != offset) { return 0; } +<<<<<<< Updated upstream uint8_t add_offset; if (telegram_last_->dest == 0x08 && telegram_last_->type_id == 0xC2) { //fix for overlapping 0xC2 telegrams from Boiler. Are other telegrams also affected? add_offset = 27; } else { add_offset = 25; +======= + + uint8_t add_offset = 25; //for EMS+ telegram increase offset by 25 + if (telegram_last_->type_id < 0x100) { //but for EMS1.0 by 27 + add_offset = 27; +>>>>>>> Stashed changes } if (UINT8_MAX - telegram_last_->offset < add_offset) { //stop if new offset would overflow From 7f30e8dadc8742adf78a487243899a88909bb9ba Mon Sep 17 00:00:00 2001 From: pswid <78219494+pswid@users.noreply.github.com> Date: Tue, 14 Dec 2021 10:32:31 +0100 Subject: [PATCH 3/3] fix overlaping while reading sequence of EMS1.0 telegrams --- src/telegram.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/telegram.cpp b/src/telegram.cpp index ed58277d5..c4166db8b 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -613,19 +613,10 @@ uint16_t TxService::read_next_tx(uint8_t offset) { if (telegram_last_->offset != offset) { return 0; } -<<<<<<< Updated upstream - - uint8_t add_offset; - if (telegram_last_->dest == 0x08 && telegram_last_->type_id == 0xC2) { //fix for overlapping 0xC2 telegrams from Boiler. Are other telegrams also affected? - add_offset = 27; - } else { - add_offset = 25; -======= uint8_t add_offset = 25; //for EMS+ telegram increase offset by 25 if (telegram_last_->type_id < 0x100) { //but for EMS1.0 by 27 add_offset = 27; ->>>>>>> Stashed changes } if (UINT8_MAX - telegram_last_->offset < add_offset) { //stop if new offset would overflow