From ee542c3b564cbb96d0c06c9aa6c84e2ddec517c0 Mon Sep 17 00:00:00 2001 From: StevenCellist Date: Mon, 22 Jan 2024 13:34:00 +0100 Subject: [PATCH] [LoRaWAN] Fix dynamic-band non-ADR session persistance --- src/protocols/LoRaWAN/LoRaWAN.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/protocols/LoRaWAN/LoRaWAN.cpp b/src/protocols/LoRaWAN/LoRaWAN.cpp index 5ad8bcc7..b0d92a49 100644 --- a/src/protocols/LoRaWAN/LoRaWAN.cpp +++ b/src/protocols/LoRaWAN/LoRaWAN.cpp @@ -2278,6 +2278,10 @@ bool LoRaWANNode::execMacCommand(LoRaWANMacCommand_t* cmd, bool saveToEeprom) { if((cmd->payload[3] >> 7) == 1) { mod->hal->readPersistentStorage(mod->hal->getPersistentAddr(RADIOLIB_EEPROM_LORAWAN_LINK_ADR_ID) + 1, &(cmd->payload[1]), 3); } + // if there was no channel mask (all zeroes), we should never apply that channel mask, so set RFU bit again + if(cmd->payload[1] == 0 && cmd->payload[2] == 0) { + cmd->payload[3] |= (1 << 7); + } // save to the single ADR MAC location mod->hal->writePersistentStorage(mod->hal->getPersistentAddr(RADIOLIB_EEPROM_LORAWAN_LINK_ADR_ID), &(cmd->payload[0]), payLen);