@@ -80,7 +80,8 @@ LoRaMac::LoRaMac()
80
80
_can_cancel_tx(true ),
81
81
_continuous_rx2_window_open(false ),
82
82
_device_class(CLASS_A),
83
- _prev_qos_level(LORAWAN_DEFAULT_QOS)
83
+ _prev_qos_level(LORAWAN_DEFAULT_QOS),
84
+ _demod_ongoing(false )
84
85
{
85
86
memset (&_params, 0 , sizeof (_params));
86
87
_params.keys .dev_eui = NULL ;
@@ -99,7 +100,6 @@ LoRaMac::LoRaMac()
99
100
_params.rx_buffer_len = 0 ;
100
101
_params.ul_frame_counter = 0 ;
101
102
_params.dl_frame_counter = 0 ;
102
- _params.is_ul_frame_counter_fixed = false ;
103
103
_params.is_rx_window_enabled = true ;
104
104
_params.adr_ack_counter = 0 ;
105
105
_params.is_node_ack_requested = false ;
@@ -166,21 +166,17 @@ void LoRaMac::post_process_mcps_req()
166
166
_params.is_node_ack_requested = false ;
167
167
_mcps_confirmation.ack_received = false ;
168
168
_mcps_indication.is_ack_recvd = false ;
169
- if (_params.is_ul_frame_counter_fixed == false ) {
170
- _params.ul_frame_counter ++;
171
- _params.adr_ack_counter ++;
172
- }
169
+ _params.ul_frame_counter ++;
170
+ _params.adr_ack_counter ++;
173
171
} else {
174
172
_mcps_confirmation.status = LORAMAC_EVENT_INFO_STATUS_ERROR;
175
173
}
176
174
} else {
177
175
// UNCONFIRMED or PROPRIETARY
178
- if (_params.is_ul_frame_counter_fixed == false ) {
179
- _params.ul_frame_counter ++;
180
- _params.adr_ack_counter ++;
181
- if (_params.sys_params .nb_trans > 1 ) {
182
- _mcps_confirmation.nb_retries = _params.ul_nb_rep_counter ;
183
- }
176
+ _params.ul_frame_counter ++;
177
+ _params.adr_ack_counter ++;
178
+ if (_params.sys_params .nb_trans > 1 ) {
179
+ _mcps_confirmation.nb_retries = _params.ul_nb_rep_counter ;
184
180
}
185
181
}
186
182
}
@@ -650,8 +646,8 @@ void LoRaMac::on_radio_tx_done(lorawan_time_t timestamp)
650
646
651
647
if ((_mcps_confirmation.req_type == MCPS_UNCONFIRMED)
652
648
&& (_params.sys_params .nb_trans > 1 )) {
649
+ // MBED_ASSERT(_params.ul_nb_rep_counter <= _params.sys_params.nb_trans);
653
650
_params.ul_nb_rep_counter ++;
654
- MBED_ASSERT (_params.ul_nb_rep_counter <= _params.sys_params .nb_trans );
655
651
}
656
652
657
653
if (_params.is_rx_window_enabled == true ) {
@@ -696,6 +692,7 @@ void LoRaMac::on_radio_tx_done(lorawan_time_t timestamp)
696
692
void LoRaMac::on_radio_rx_done (const uint8_t *const payload, uint16_t size,
697
693
int16_t rssi, int8_t snr)
698
694
{
695
+ _demod_ongoing = false ;
699
696
if (_device_class == CLASS_C && !_continuous_rx2_window_open) {
700
697
_lora_time.stop (_rx2_closure_timer_for_class_c);
701
698
open_rx2_window ();
@@ -765,6 +762,7 @@ void LoRaMac::on_radio_tx_timeout(void)
765
762
766
763
void LoRaMac::on_radio_rx_timeout (bool is_timeout)
767
764
{
765
+ _demod_ongoing = false ;
768
766
if (_device_class == CLASS_A) {
769
767
_lora_phy->put_radio_to_sleep ();
770
768
}
@@ -887,6 +885,7 @@ void LoRaMac::on_backoff_timer_expiry(void)
887
885
void LoRaMac::open_rx1_window (void )
888
886
{
889
887
Lock lock (*this );
888
+ _demod_ongoing = true ;
890
889
_continuous_rx2_window_open = false ;
891
890
_lora_time.stop (_params.timers .rx_window1_timer );
892
891
_params.rx_slot = RX_SLOT_WIN_1;
@@ -912,6 +911,10 @@ void LoRaMac::open_rx1_window(void)
912
911
913
912
void LoRaMac::open_rx2_window ()
914
913
{
914
+ if (_demod_ongoing) {
915
+ tr_info (" RX1 Demodulation ongoing, skip RX2 window opening" );
916
+ return ;
917
+ }
915
918
Lock lock (*this );
916
919
_continuous_rx2_window_open = true ;
917
920
_lora_time.stop (_params.timers .rx_window2_timer );
@@ -1243,6 +1246,8 @@ void LoRaMac::reset_mac_parameters(void)
1243
1246
}
1244
1247
_params.channel = 0 ;
1245
1248
_params.last_channel_idx = _params.channel ;
1249
+
1250
+ _demod_ongoing = false ;
1246
1251
}
1247
1252
1248
1253
uint8_t LoRaMac::get_default_tx_datarate ()
0 commit comments