LoRaWAN: Terminate RX when receiving uplink messages

This prevents RX2 window to be enabled at the same time when repeating
transmission, when QoS repeated TX is in effect. Failure to do so
seems to place the LoRaWAN stack in a state where send() always fails
with WOULD_BLOCK error.
pull/11308/head
Teijo Kinnunen 2019-08-16 12:56:58 +03:00 committed by adbridge
parent aabd531d58
commit 01a88ac4f7
1 changed files with 9 additions and 0 deletions

View File

@ -738,6 +738,15 @@ void LoRaMac::on_radio_rx_done(const uint8_t *const payload, uint16_t size,
break;
default:
// This can happen e.g. if we happen to receive uplink of another device
// during the receive window. Block RX2 window since it can overlap with
// QOS TX and cause a mess.
tr_debug("RX unexpected mtype %u", mac_hdr.bits.mtype);
if (get_current_slot() == RX_SLOT_WIN_1) {
_lora_time.stop(_params.timers.rx_window2_timer);
}
_mcps_indication.status = LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL;
_mcps_indication.pending = false;
break;
}
}