don't count echos as errors also for remote thermostat emulation

This commit is contained in:
MichaelDvP
2024-10-31 16:29:36 +01:00
parent 13dfc87c57
commit e430ecf85c
3 changed files with 8 additions and 1 deletions

View File

@@ -148,7 +148,7 @@ void RxService::add(uint8_t * data, uint8_t length) {
// validate the CRC. if it fails then increment the number of corrupt/incomplete telegrams and only report to console/syslog // validate the CRC. if it fails then increment the number of corrupt/incomplete telegrams and only report to console/syslog
uint8_t crc = calculate_crc(data, length - 1); uint8_t crc = calculate_crc(data, length - 1);
if (data[length - 1] != crc) { if (data[length - 1] != crc) {
if ((data[0] & 0x7F) != ems_bus_id()) { // do not count echos as errors if (data[0] != EMSuart::last_tx_src()) { // do not count echos as errors
telegram_error_count_++; telegram_error_count_++;
LOG_WARNING("Incomplete Rx: %s", Helpers::data_to_hex(data, length).c_str()); // include CRC LOG_WARNING("Incomplete Rx: %s", Helpers::data_to_hex(data, length).c_str()); // include CRC
} else { } else {

View File

@@ -31,6 +31,7 @@
#include "emsesp.h" #include "emsesp.h"
namespace emsesp { namespace emsesp {
uint8_t EMSuart::last_tx_src_ = 0;
static QueueHandle_t uart_queue; static QueueHandle_t uart_queue;
uint8_t tx_mode_ = 0xFF; uint8_t tx_mode_ = 0xFF;
@@ -144,6 +145,8 @@ uint16_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) {
return EMS_TX_STATUS_OK; return EMS_TX_STATUS_OK;
} }
last_tx_src_ = len < 4 ? 0 : buf[0];
if (tx_mode_ == EMS_TXMODE_HW) { // hardware controlled mode if (tx_mode_ == EMS_TXMODE_HW) { // hardware controlled mode
uart_write_bytes_with_break(EMSUART_NUM, buf, len, 10); uart_write_bytes_with_break(EMSUART_NUM, buf, len, 10);
return EMS_TX_STATUS_OK; return EMS_TX_STATUS_OK;

View File

@@ -65,10 +65,14 @@ class EMSuart {
static void send_poll(const uint8_t data); static void send_poll(const uint8_t data);
static void stop(); static void stop();
static uint16_t transmit(const uint8_t * buf, const uint8_t len); static uint16_t transmit(const uint8_t * buf, const uint8_t len);
static uint8_t last_tx_src() {
return last_tx_src_;
}
private: private:
static void IRAM_ATTR uart_gen_break(uint32_t length_us); static void IRAM_ATTR uart_gen_break(uint32_t length_us);
static void uart_event_task(void * pvParameters); static void uart_event_task(void * pvParameters);
static uint8_t last_tx_src_;
}; };
} // namespace emsesp } // namespace emsesp