diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 1e0d3f44d..f29d2b944 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -6,6 +6,8 @@ ## Fixed - lastcode broke MQTT JSON structure [#228] +- 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 f56ac0148..c4166db8b 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -613,7 +613,17 @@ 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 = 25; //for EMS+ telegram increase offset by 25 + if (telegram_last_->type_id < 0x100) { //but for EMS1.0 by 27 + add_offset = 27; + } + + 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; }