@@ -1419,7 +1419,13 @@ void LoRaMac::set_device_class(const device_class_t &device_class,
14191419 _device_class = device_class;
14201420 _rx2_would_be_closure_for_class_c = rx2_would_be_closure_handler;
14211421
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+ });
14231429
14241430 if (CLASS_A == _device_class) {
14251431 tr_debug (" Changing device class to -> CLASS_A" );
@@ -1805,14 +1811,34 @@ lorawan_status_t LoRaMac::initialize(EventQueue *queue,
18051811 _lora_phy->setup_public_network_mode (_params.is_nwk_public );
18061812 _lora_phy->put_radio_to_sleep ();
18071813
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+ });
18161842
18171843 _params.timers .mac_init_time = _lora_time.get_current_time ();
18181844
0 commit comments