Fix crash if radio settings where changed while the radio was not initialized

This commit is contained in:
Thomas Basler 2023-03-09 18:57:22 +01:00
parent de2b7ab2d2
commit 83c623708f
3 changed files with 25 additions and 9 deletions

View File

@ -40,13 +40,8 @@ void HoymilesClass::initCMT(int8_t pin_sdio, int8_t pin_clk, int8_t pin_cs, int8
void HoymilesClass::loop() void HoymilesClass::loop()
{ {
HOY_SEMAPHORE_TAKE(); HOY_SEMAPHORE_TAKE();
if (_radioNrf->isInitialized()) {
_radioNrf->loop(); _radioNrf->loop();
}
if (_radioCmt->isInitialized()) {
_radioCmt->loop(); _radioCmt->loop();
}
if (getNumInverters() > 0) { if (getNumInverters() > 0) {
if (millis() - _lastPoll > (_pollInterval * 1000)) { if (millis() - _lastPoll > (_pollInterval * 1000)) {

View File

@ -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() void HoymilesRadio_CMT::loop()
{ {
if (!_isInitialized) {
return;
}
enumCMTresult mCMTstate = cmtProcess(); enumCMTresult mCMTstate = cmtProcess();
if (mCMTstate != CMT_RX_DONE) { // Perform package parsing only if no packages are received 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() bool HoymilesRadio_CMT::isConnected()
{ {
if (!_isInitialized) {
return false;
}
return _ChipConnected; return _ChipConnected;
} }

View File

@ -38,6 +38,10 @@ void HoymilesRadio_NRF::init(SPIClass* initialisedSpiBus, uint8_t pinCE, uint8_t
void HoymilesRadio_NRF::loop() void HoymilesRadio_NRF::loop()
{ {
if (!_isInitialized) {
return;
}
EVERY_N_MILLIS(4) EVERY_N_MILLIS(4)
{ {
switchRxCh(); switchRxCh();
@ -151,22 +155,35 @@ void HoymilesRadio_NRF::loop()
void HoymilesRadio_NRF::setPALevel(rf24_pa_dbm_e paLevel) void HoymilesRadio_NRF::setPALevel(rf24_pa_dbm_e paLevel)
{ {
if (!_isInitialized) {
return;
}
_radio->setPALevel(paLevel); _radio->setPALevel(paLevel);
} }
void HoymilesRadio_NRF::setDtuSerial(uint64_t serial) void HoymilesRadio_NRF::setDtuSerial(uint64_t serial)
{ {
HoymilesRadio::setDtuSerial(serial); HoymilesRadio::setDtuSerial(serial);
if (!_isInitialized) {
return;
}
openReadingPipe(); openReadingPipe();
} }
bool HoymilesRadio_NRF::isConnected() bool HoymilesRadio_NRF::isConnected()
{ {
if (!_isInitialized) {
return false;
}
return _radio->isChipConnected(); return _radio->isChipConnected();
} }
bool HoymilesRadio_NRF::isPVariant() bool HoymilesRadio_NRF::isPVariant()
{ {
if (!_isInitialized) {
return false;
}
return _radio->isPVariant(); return _radio->isPVariant();
} }
@ -210,8 +227,6 @@ void HoymilesRadio_NRF::switchRxCh()
_radio->startListening(); _radio->startListening();
} }
void HoymilesRadio_NRF::sendEsbPacket(CommandAbstract* cmd) void HoymilesRadio_NRF::sendEsbPacket(CommandAbstract* cmd)
{ {
cmd->incrementSendCount(); cmd->incrementSendCount();