From 0d7cef5f6040c3a4ba768ec26ca55eeac6f11e25 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 15 Jun 2022 20:03:23 +0200 Subject: [PATCH] Fixed issue of wrong detected byteAssignment length --- lib/Hoymiles/src/inverters/HM_1CH.cpp | 5 +++++ lib/Hoymiles/src/inverters/HM_1CH.h | 1 + lib/Hoymiles/src/inverters/HM_2CH.cpp | 5 +++++ lib/Hoymiles/src/inverters/HM_2CH.h | 1 + lib/Hoymiles/src/inverters/HM_4CH.cpp | 5 +++++ lib/Hoymiles/src/inverters/HM_4CH.h | 1 + lib/Hoymiles/src/inverters/InverterAbstract.cpp | 5 +++-- lib/Hoymiles/src/inverters/InverterAbstract.h | 1 + 8 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/Hoymiles/src/inverters/HM_1CH.cpp b/lib/Hoymiles/src/inverters/HM_1CH.cpp index 6a87ac4..80e8039 100644 --- a/lib/Hoymiles/src/inverters/HM_1CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_1CH.cpp @@ -13,4 +13,9 @@ String HM_1CH::typeName() const byteAssign_t* HM_1CH::getByteAssignment() { return byteAssignment; +} + +const uint8_t HM_1CH::getAssignmentCount() +{ + return sizeof(byteAssignment) / sizeof(byteAssign_t); } \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/HM_1CH.h b/lib/Hoymiles/src/inverters/HM_1CH.h index 144040c..a4c3a3e 100644 --- a/lib/Hoymiles/src/inverters/HM_1CH.h +++ b/lib/Hoymiles/src/inverters/HM_1CH.h @@ -7,6 +7,7 @@ public: static bool isValidSerial(uint64_t serial); String typeName(); const byteAssign_t* getByteAssignment(); + const uint8_t getAssignmentCount(); private: const byteAssign_t byteAssignment[13] = { diff --git a/lib/Hoymiles/src/inverters/HM_2CH.cpp b/lib/Hoymiles/src/inverters/HM_2CH.cpp index ba3e0ea..f02a0b2 100644 --- a/lib/Hoymiles/src/inverters/HM_2CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_2CH.cpp @@ -13,4 +13,9 @@ String HM_2CH::typeName() const byteAssign_t* HM_2CH::getByteAssignment() { return byteAssignment; +} + +const uint8_t HM_2CH::getAssignmentCount() +{ + return sizeof(byteAssignment) / sizeof(byteAssign_t); } \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/HM_2CH.h b/lib/Hoymiles/src/inverters/HM_2CH.h index b24948d..f80e831 100644 --- a/lib/Hoymiles/src/inverters/HM_2CH.h +++ b/lib/Hoymiles/src/inverters/HM_2CH.h @@ -7,6 +7,7 @@ public: static bool isValidSerial(uint64_t serial); String typeName(); const byteAssign_t* getByteAssignment(); + const uint8_t getAssignmentCount(); private: const byteAssign_t byteAssignment[21] = { diff --git a/lib/Hoymiles/src/inverters/HM_4CH.cpp b/lib/Hoymiles/src/inverters/HM_4CH.cpp index f5cd394..1638fde 100644 --- a/lib/Hoymiles/src/inverters/HM_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_4CH.cpp @@ -13,4 +13,9 @@ String HM_4CH::typeName() const byteAssign_t* HM_4CH::getByteAssignment() { return byteAssignment; +} + +const uint8_t HM_4CH::getAssignmentCount() +{ + return sizeof(byteAssignment) / sizeof(byteAssign_t); } \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/HM_4CH.h b/lib/Hoymiles/src/inverters/HM_4CH.h index 89de711..7833b60 100644 --- a/lib/Hoymiles/src/inverters/HM_4CH.h +++ b/lib/Hoymiles/src/inverters/HM_4CH.h @@ -7,6 +7,7 @@ public: static bool isValidSerial(uint64_t serial); String typeName(); const byteAssign_t* getByteAssignment(); + const uint8_t getAssignmentCount(); private: const byteAssign_t byteAssignment[34] = { diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.cpp b/lib/Hoymiles/src/inverters/InverterAbstract.cpp index a67d08b..f9689f4 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.cpp +++ b/lib/Hoymiles/src/inverters/InverterAbstract.cpp @@ -119,7 +119,8 @@ uint8_t InverterAbstract::getChannelCount() { const byteAssign_t* b = getByteAssignment(); uint8_t cnt = 0; - for (uint8_t pos = 0; pos < sizeof(b) / sizeof(byteAssign_t); pos++) { + for (uint8_t pos = 0; pos < getAssignmentCount(); pos++) { + Serial.println(b[pos].ch); if (b[pos].ch > cnt) { cnt = b[pos].ch; } @@ -139,7 +140,7 @@ uint8_t InverterAbstract::getAssignIdxByChannelField(uint8_t channel, uint8_t fi const byteAssign_t* b = getByteAssignment(); uint8_t pos; - for (pos = 0; pos < sizeof(b) / sizeof(byteAssign_t); pos++) { + for (pos = 0; pos < getAssignmentCount(); pos++) { if (b[pos].ch == channel && b[pos].fieldId == fieldId) { return pos; } diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index 1c8af3a..1a9b261 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -97,6 +97,7 @@ public: const char* name(); virtual String typeName() = 0; virtual const byteAssign_t* getByteAssignment() = 0; + virtual const uint8_t getAssignmentCount() = 0; uint8_t getChannelCount(); uint16_t getChannelMaxPower(uint8_t channel);