From c35f12c7befcae659f86fe6d7ad148b34bc79ce0 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sat, 30 Jul 2022 12:50:07 +0200 Subject: [PATCH] Fixed CRC calculation --- lib/Hoymiles/src/commands/MultiDataCommand.cpp | 13 ++++++++++--- lib/Hoymiles/src/commands/MultiDataCommand.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/Hoymiles/src/commands/MultiDataCommand.cpp b/lib/Hoymiles/src/commands/MultiDataCommand.cpp index 03995115..563e36d8 100644 --- a/lib/Hoymiles/src/commands/MultiDataCommand.cpp +++ b/lib/Hoymiles/src/commands/MultiDataCommand.cpp @@ -18,9 +18,7 @@ MultiDataCommand::MultiDataCommand(uint64_t target_address, uint64_t router_addr _payload[22] = 0x00; // Password _payload[23] = 0x00; // Password - uint16_t crc = crc16(&_payload[10], 14); // From data_type till password - _payload[24] = (uint8_t)(crc >> 8); - _payload[25] = (uint8_t)(crc); + udpateCRC(); _payload_size = 26; } @@ -28,6 +26,7 @@ MultiDataCommand::MultiDataCommand(uint64_t target_address, uint64_t router_addr void MultiDataCommand::setDataType(uint8_t data_type) { _payload[10] = data_type; + udpateCRC(); } uint8_t MultiDataCommand::getDataType() { @@ -40,6 +39,7 @@ void MultiDataCommand::setTime(time_t time) _payload[13] = (uint8_t)(time >> 16); _payload[14] = (uint8_t)(time >> 8); _payload[15] = (uint8_t)(time); + udpateCRC(); } time_t MultiDataCommand::getTime() @@ -48,4 +48,11 @@ time_t MultiDataCommand::getTime() | (time_t)(_payload[13] << 16) | (time_t)(_payload[14] << 8) | (time_t)(_payload[15]); +} + +void MultiDataCommand::udpateCRC() +{ + uint16_t crc = crc16(&_payload[10], 14); // From data_type till password + _payload[24] = (uint8_t)(crc >> 8); + _payload[25] = (uint8_t)(crc); } \ No newline at end of file diff --git a/lib/Hoymiles/src/commands/MultiDataCommand.h b/lib/Hoymiles/src/commands/MultiDataCommand.h index f57c9b1d..5d68abb3 100644 --- a/lib/Hoymiles/src/commands/MultiDataCommand.h +++ b/lib/Hoymiles/src/commands/MultiDataCommand.h @@ -13,4 +13,5 @@ public: protected: void setDataType(uint8_t data_type); uint8_t getDataType(); + void udpateCRC(); }; \ No newline at end of file