From aedf519ea4c86ee3d2bbb09a7ba3350821131569 Mon Sep 17 00:00:00 2001
From: StevenCellist <steven@boonstoppel.nu>
Date: Mon, 22 Jan 2024 12:53:18 +0100
Subject: [PATCH] [LoRaWAN] Fix rejoining during active session

---
 src/protocols/LoRaWAN/LoRaWAN.cpp | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/protocols/LoRaWAN/LoRaWAN.cpp b/src/protocols/LoRaWAN/LoRaWAN.cpp
index 02f5034d..5ad8bcc7 100644
--- a/src/protocols/LoRaWAN/LoRaWAN.cpp
+++ b/src/protocols/LoRaWAN/LoRaWAN.cpp
@@ -277,6 +277,11 @@ int16_t LoRaWANNode::restoreChannels() {
 #endif
 
 void LoRaWANNode::beginCommon(uint8_t joinDr) {
+  // in case a new session is started while there is an ongoing session
+  // clear the MAC queues completely
+  memset(&(this->commandsUp), 0, sizeof(LoRaWANMacCommandQueue_t));
+  memset(&(this->commandsDown), 0, sizeof(LoRaWANMacCommandQueue_t));
+
   LoRaWANMacCommand_t cmd = {
     .cid = RADIOLIB_LORAWAN_MAC_LINK_ADR,
     .payload = { 0 }, 
@@ -1733,6 +1738,11 @@ int16_t LoRaWANNode::setupChannelsDyn(bool joinRequest) {
       RADIOLIB_DEBUG_PRINTLN("Channel UL/DL %d frequency = %f MHz", this->availableChannels[RADIOLIB_LORAWAN_CHANNEL_DIR_UPLINK][num].idx, this->availableChannels[RADIOLIB_LORAWAN_CHANNEL_DIR_UPLINK][num].freq);
     }
   }
+
+  // clear all remaining channels
+  for(; num < RADIOLIB_LORAWAN_NUM_AVAILABLE_CHANNELS; num++) {
+    this->availableChannels[RADIOLIB_LORAWAN_CHANNEL_DIR_UPLINK][num] = RADIOLIB_LORAWAN_CHANNEL_NONE;
+  }
   
   return(RADIOLIB_ERR_NONE);
 }