@@ -1419,7 +1419,13 @@ void LoRaMac::set_device_class(const device_class_t &device_class,
1419
1419
_device_class = device_class;
1420
1420
_rx2_would_be_closure_for_class_c = rx2_would_be_closure_handler;
1421
1421
1422
- _lora_time.init (_rx2_closure_timer_for_class_c, _rx2_would_be_closure_for_class_c);
1422
+ _lora_time.init (_rx2_closure_timer_for_class_c, [this ] {
1423
+ {
1424
+ Lock lock (*this );
1425
+ _lora_time.clear (_rx2_closure_timer_for_class_c);
1426
+ }
1427
+ _rx2_would_be_closure_for_class_c ();
1428
+ });
1423
1429
1424
1430
if (CLASS_A == _device_class) {
1425
1431
tr_debug (" Changing device class to -> CLASS_A" );
@@ -1805,14 +1811,34 @@ lorawan_status_t LoRaMac::initialize(EventQueue *queue,
1805
1811
_lora_phy->setup_public_network_mode (_params.is_nwk_public );
1806
1812
_lora_phy->put_radio_to_sleep ();
1807
1813
1808
- _lora_time.init (_params.timers .backoff_timer ,
1809
- mbed::callback (this , &LoRaMac::on_backoff_timer_expiry));
1810
- _lora_time.init (_params.timers .rx_window1_timer ,
1811
- mbed::callback (this , &LoRaMac::open_rx1_window));
1812
- _lora_time.init (_params.timers .rx_window2_timer ,
1813
- mbed::callback (this , &LoRaMac::open_rx2_window));
1814
- _lora_time.init (_params.timers .ack_timeout_timer ,
1815
- mbed::callback (this , &LoRaMac::on_ack_timeout_timer_event));
1814
+ _lora_time.init (_params.timers .backoff_timer , [this ] {
1815
+ {
1816
+ Lock lock (*this );
1817
+ _lora_time.clear (_params.timers .backoff_timer );
1818
+ }
1819
+ on_backoff_timer_expiry ();
1820
+ });
1821
+ _lora_time.init (_params.timers .rx_window1_timer , [this ] {
1822
+ {
1823
+ Lock lock (*this );
1824
+ _lora_time.clear (_params.timers .rx_window1_timer );
1825
+ }
1826
+ open_rx1_window ();
1827
+ });
1828
+ _lora_time.init (_params.timers .rx_window2_timer , [this ] {
1829
+ {
1830
+ Lock lock (*this );
1831
+ _lora_time.clear (_params.timers .rx_window2_timer );
1832
+ }
1833
+ open_rx2_window ();
1834
+ });
1835
+ _lora_time.init (_params.timers .ack_timeout_timer , [this ] {
1836
+ {
1837
+ Lock lock (*this );
1838
+ _lora_time.clear (_params.timers .ack_timeout_timer );
1839
+ }
1840
+ on_ack_timeout_timer_event ();
1841
+ });
1816
1842
1817
1843
_params.timers .mac_init_time = _lora_time.get_current_time ();
1818
1844
0 commit comments