@@ -633,7 +633,7 @@ void CellularStateMachine::event()
633
633
break ;
634
634
}
635
635
636
- if ((_target_state == _state && _cb_data. error == NSAPI_ERROR_OK && !_is_retry) || _event_id == STM_STOPPED ) {
636
+ if (check_is_target_reached () ) {
637
637
_event_id = -1 ;
638
638
return ;
639
639
}
@@ -676,6 +676,18 @@ void CellularStateMachine::set_cellular_callback(mbed::Callback<void(nsapi_event
676
676
_event_status_cb = status_cb;
677
677
}
678
678
679
+ bool CellularStateMachine::check_is_target_reached ()
680
+ {
681
+ tr_debug (" check_is_target_reached(): target state %s, _state: %s, _cb_data.error: %d, _event_id: %d,_is_retry: %d" , get_state_string (_target_state), get_state_string (_state), _cb_data.error , _event_id, _is_retry);
682
+
683
+ if ((_target_state == _state && _cb_data.error == NSAPI_ERROR_OK && !_is_retry) || _event_id == STM_STOPPED) {
684
+ tr_debug (" Target state reached: %s, _cb_data.error: %d, _event_id: %d" , get_state_string (_target_state), _cb_data.error , _event_id);
685
+ _event_id = -1 ;
686
+ return true ;
687
+ }
688
+ return false ;
689
+ }
690
+
679
691
void CellularStateMachine::cellular_event_changed (nsapi_event_t ev, intptr_t ptr)
680
692
{
681
693
cell_callback_data_t *data = (cell_callback_data_t *)ptr;
@@ -688,12 +700,20 @@ void CellularStateMachine::cellular_event_changed(nsapi_event_t ev, intptr_t ptr
688
700
if (!_plmn_network_found) {
689
701
_plmn_network_found = true ;
690
702
_queue.cancel (_event_id);
691
- continue_from_state (STATE_ATTACHING_NETWORK);
703
+ _is_retry = false ;
704
+ _event_id = -1 ;
705
+ if (!check_is_target_reached ()) {
706
+ continue_from_state (STATE_ATTACHING_NETWORK);
707
+ }
692
708
}
693
709
}
694
710
} else {
695
711
_queue.cancel (_event_id);
696
- continue_from_state (STATE_ATTACHING_NETWORK);
712
+ _is_retry = false ;
713
+ _event_id = -1 ;
714
+ if (!check_is_target_reached ()) {
715
+ continue_from_state (STATE_ATTACHING_NETWORK);
716
+ }
697
717
}
698
718
}
699
719
}
@@ -705,8 +725,12 @@ void CellularStateMachine::ready_urc_cb()
705
725
if (_state == STATE_DEVICE_READY && _power->set_at_mode () == NSAPI_ERROR_OK) {
706
726
tr_debug (" State was STATE_DEVICE_READY and at mode ready, cancel state and move to next" );
707
727
_queue.cancel (_event_id);
728
+ _event_id = -1 ;
708
729
if (device_ready ()) {
709
- continue_from_state (STATE_SIM_PIN);
730
+ _is_retry = false ;
731
+ if (!check_is_target_reached ()) {
732
+ continue_from_state (STATE_SIM_PIN);
733
+ }
710
734
} else {
711
735
continue_from_state (STATE_DEVICE_READY);
712
736
}
0 commit comments