From 83c623708f246475fb0a2c8b0555dd53ea49b83e Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 9 Mar 2023 18:57:22 +0100 Subject: [PATCH] Fix crash if radio settings where changed while the radio was not initialized --- lib/Hoymiles/src/Hoymiles.cpp | 9 ++------- lib/Hoymiles/src/HoymilesRadio_CMT.cpp | 6 ++++++ lib/Hoymiles/src/HoymilesRadio_NRF.cpp | 19 +++++++++++++++++-- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index c4641ecc..68ce7970 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -40,13 +40,8 @@ void HoymilesClass::initCMT(int8_t pin_sdio, int8_t pin_clk, int8_t pin_cs, int8 void HoymilesClass::loop() { HOY_SEMAPHORE_TAKE(); - if (_radioNrf->isInitialized()) { - _radioNrf->loop(); - } - - if (_radioCmt->isInitialized()) { - _radioCmt->loop(); - } + _radioNrf->loop(); + _radioCmt->loop(); if (getNumInverters() > 0) { if (millis() - _lastPoll > (_pollInterval * 1000)) { diff --git a/lib/Hoymiles/src/HoymilesRadio_CMT.cpp b/lib/Hoymiles/src/HoymilesRadio_CMT.cpp index 8db734de..e7b245cf 100644 --- a/lib/Hoymiles/src/HoymilesRadio_CMT.cpp +++ b/lib/Hoymiles/src/HoymilesRadio_CMT.cpp @@ -357,6 +357,9 @@ void HoymilesRadio_CMT::init(int8_t pin_sdio, int8_t pin_clk, int8_t pin_cs, int void HoymilesRadio_CMT::loop() { + if (!_isInitialized) { + return; + } enumCMTresult mCMTstate = cmtProcess(); if (mCMTstate != CMT_RX_DONE) { // Perform package parsing only if no packages are received @@ -450,6 +453,9 @@ void HoymilesRadio_CMT::loop() bool HoymilesRadio_CMT::isConnected() { + if (!_isInitialized) { + return false; + } return _ChipConnected; } diff --git a/lib/Hoymiles/src/HoymilesRadio_NRF.cpp b/lib/Hoymiles/src/HoymilesRadio_NRF.cpp index 088acbeb..03a1d6cd 100644 --- a/lib/Hoymiles/src/HoymilesRadio_NRF.cpp +++ b/lib/Hoymiles/src/HoymilesRadio_NRF.cpp @@ -38,6 +38,10 @@ void HoymilesRadio_NRF::init(SPIClass* initialisedSpiBus, uint8_t pinCE, uint8_t void HoymilesRadio_NRF::loop() { + if (!_isInitialized) { + return; + } + EVERY_N_MILLIS(4) { switchRxCh(); @@ -151,22 +155,35 @@ void HoymilesRadio_NRF::loop() void HoymilesRadio_NRF::setPALevel(rf24_pa_dbm_e paLevel) { + if (!_isInitialized) { + return; + } _radio->setPALevel(paLevel); } void HoymilesRadio_NRF::setDtuSerial(uint64_t serial) { HoymilesRadio::setDtuSerial(serial); + + if (!_isInitialized) { + return; + } openReadingPipe(); } bool HoymilesRadio_NRF::isConnected() { + if (!_isInitialized) { + return false; + } return _radio->isChipConnected(); } bool HoymilesRadio_NRF::isPVariant() { + if (!_isInitialized) { + return false; + } return _radio->isPVariant(); } @@ -210,8 +227,6 @@ void HoymilesRadio_NRF::switchRxCh() _radio->startListening(); } - - void HoymilesRadio_NRF::sendEsbPacket(CommandAbstract* cmd) { cmd->incrementSendCount();