@@ -74,6 +74,7 @@ LoRaWANStack::LoRaWANStack()
74
74
_tx_msg(),
75
75
_rx_msg(),
76
76
_tx_metadata(),
77
+ _rx_metadata(),
77
78
_num_retry(1 ),
78
79
_ctrl_flags(IDLE_FLAG),
79
80
_app_port(INVALID_PORT),
@@ -83,6 +84,7 @@ LoRaWANStack::LoRaWANStack()
83
84
_queue(NULL )
84
85
{
85
86
_tx_metadata.stale = true ;
87
+ _rx_metadata.stale = true ;
86
88
87
89
#ifdef MBED_CONF_LORA_APP_PORT
88
90
if (is_port_valid (MBED_CONF_LORA_APP_PORT)) {
@@ -433,6 +435,17 @@ lorawan_status_t LoRaWANStack::acquire_tx_metadata(lorawan_tx_metadata& tx_meta
433
435
return LORAWAN_STATUS_METADATA_NOT_AVAILABLE;
434
436
}
435
437
438
+ lorawan_status_t LoRaWANStack::acquire_rx_metadata (lorawan_rx_metadata& metadata)
439
+ {
440
+ if (!_rx_metadata.stale ) {
441
+ metadata = _rx_metadata;
442
+ _rx_metadata.stale = true ;
443
+ return LORAWAN_STATUS_OK;
444
+ }
445
+
446
+ return LORAWAN_STATUS_METADATA_NOT_AVAILABLE;
447
+ }
448
+
436
449
/* ****************************************************************************
437
450
* Interrupt handlers *
438
451
****************************************************************************/
@@ -539,6 +552,8 @@ void LoRaWANStack::process_reception(const uint8_t* const payload, uint16_t size
539
552
540
553
_loramac.on_radio_rx_done (payload, size, rssi, snr);
541
554
555
+ make_rx_metadata_available ();
556
+
542
557
if (_loramac.get_mlme_confirmation ()->pending ) {
543
558
_loramac.post_process_mlme_request ();
544
559
mlme_confirm_handler ();
@@ -635,6 +650,15 @@ void LoRaWANStack::make_tx_metadata_available(void)
635
650
_tx_metadata.nb_retries = _loramac.get_mcps_confirmation ()->nb_retries ;
636
651
}
637
652
653
+ void LoRaWANStack::make_rx_metadata_available (void )
654
+ {
655
+ _rx_metadata.stale = false ;
656
+ _rx_metadata.fpending_status = _loramac.get_mcps_indication ()->fpending_status ;
657
+ _rx_metadata.rx_datarate = _loramac.get_mcps_indication ()->rx_datarate ;
658
+ _rx_metadata.rssi = _loramac.get_mcps_indication ()->rssi ;
659
+ _rx_metadata.snr = _loramac.get_mcps_indication ()->snr ;
660
+ }
661
+
638
662
bool LoRaWANStack::is_port_valid (const uint8_t port, bool allow_port_0)
639
663
{
640
664
// Application should not use reserved and illegal port numbers.
0 commit comments