From dcc7e47b197c153c59cfdecf23ebc595368b9b50 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 18 Jul 2022 21:30:12 +0200 Subject: [PATCH] Hoymiles: Introduce init method to have a clean init on beginning Constructor is not possible for obvious reasons --- lib/Hoymiles/src/Hoymiles.cpp | 1 + lib/Hoymiles/src/inverters/InverterAbstract.cpp | 15 +++++++++------ lib/Hoymiles/src/inverters/InverterAbstract.h | 1 + 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index db739c7..5b0d29e 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -56,6 +56,7 @@ std::shared_ptr HoymilesClass::addInverter(const char* name, u if (i) { i->setName(name); + i->init(); _inverters.push_back(std::move(i)); return _inverters.back(); } diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.cpp b/lib/Hoymiles/src/inverters/InverterAbstract.cpp index 8c7c93e..7e70891 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.cpp +++ b/lib/Hoymiles/src/inverters/InverterAbstract.cpp @@ -9,6 +9,15 @@ InverterAbstract::InverterAbstract(uint64_t serial) _statisticsParser.reset(new StatisticsParser()); } +void InverterAbstract::init() +{ + // This has to be done here because: + // Not possible in constructor --> virtual function + // Not possible in verifyAllFragments --> Because no data if nothing is ever received + // It has to be executed because otherwise the getChannelCount method in stats always returns 0 + _statisticsParser.get()->setByteAssignment(getByteAssignment(), getAssignmentCount()); +} + uint64_t InverterAbstract::serial() { return _serial.u64; @@ -45,12 +54,6 @@ void InverterAbstract::clearRxFragmentBuffer() _rxFragmentMaxPacketId = 0; _rxFragmentLastPacketId = 0; _rxFragmentRetransmitCnt = 0; - - // This has to be done here because: - // Not possible in constructor --> virtual function - // Not possible in verifyAllFragments --> Because no data if nothing is ever received - // It has to be executed because otherwise the getChannelCount method in stats always returns 0 - _statisticsParser.get()->setByteAssignment(getByteAssignment(), getAssignmentCount()); } void InverterAbstract::addRxFragment(uint8_t fragment[], uint8_t len) diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index 357ba4d..64f8aef 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -22,6 +22,7 @@ enum { class InverterAbstract { public: InverterAbstract(uint64_t serial); + void init(); uint64_t serial(); void setName(const char* name); const char* name();