@@ -557,9 +557,14 @@ void LoRaWANStack::process_transmission_timeout()
557
557
// this is a fatal error and should not happen
558
558
tr_debug (" TX Timeout" );
559
559
_loramac.on_radio_tx_timeout ();
560
- _ctrl_flags |= TX_ONGOING_FLAG;
560
+ _ctrl_flags &= ~ TX_ONGOING_FLAG;
561
561
_ctrl_flags &= ~TX_DONE_FLAG;
562
- state_controller (DEVICE_STATE_STATUS_CHECK);
562
+ if (_device_current_state == DEVICE_STATE_JOINING) {
563
+ mlme_confirm_handler ();
564
+ } else {
565
+ state_controller (DEVICE_STATE_STATUS_CHECK);
566
+ }
567
+
563
568
state_machine_run_to_completion ();
564
569
}
565
570
@@ -888,21 +893,33 @@ void LoRaWANStack::mlme_confirm_handler()
888
893
}
889
894
}
890
895
}
891
- } else if (_loramac.get_mlme_confirmation ()->req_type == MLME_JOIN) {
892
- if (_loramac.get_mlme_confirmation ()->status == LORAMAC_EVENT_INFO_STATUS_OK) {
893
- state_controller (DEVICE_STATE_CONNECTED);
894
- } else {
895
- tr_error (" Joining error: %d" , _loramac.get_mlme_confirmation ()->status );
896
- if (_loramac.get_mlme_confirmation ()->status == LORAMAC_EVENT_INFO_STATUS_CRYPTO_FAIL) {
896
+ }
897
+
898
+ if (_loramac.get_mlme_confirmation ()->req_type == MLME_JOIN) {
899
+
900
+ switch (_loramac.get_mlme_confirmation ()->status ) {
901
+ case LORAMAC_EVENT_INFO_STATUS_OK:
902
+ state_controller (DEVICE_STATE_CONNECTED);
903
+ break ;
904
+
905
+ case LORAMAC_EVENT_INFO_STATUS_CRYPTO_FAIL:
897
906
// fatal error
898
907
_device_current_state = DEVICE_STATE_IDLE;
908
+ tr_error (" Joining abandoned: CRYPTO_ERROR" );
899
909
send_event_to_application (CRYPTO_ERROR);
900
- } else {
910
+ break ;
911
+
912
+ case LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT:
913
+ // fatal error
914
+ _device_current_state = DEVICE_STATE_IDLE;
915
+ tr_error (" Joining abandoned: Radio failed to transmit" );
916
+ send_event_to_application (TX_TIMEOUT);
917
+ break ;
918
+
919
+ default :
901
920
// non-fatal, retry if possible
902
921
_device_current_state = DEVICE_STATE_AWAITING_JOIN_ACCEPT;
903
922
state_controller (DEVICE_STATE_JOINING);
904
- }
905
-
906
923
}
907
924
}
908
925
}
@@ -917,9 +934,8 @@ void LoRaWANStack::mcps_confirm_handler()
917
934
}
918
935
919
936
// failure case
920
- tr_error (" mcps_confirmation: Error code = %d" , _loramac.get_mcps_confirmation ()->status );
921
-
922
937
if (_loramac.get_mcps_confirmation ()->status == LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT) {
938
+ tr_error (" Fatal Error, Radio failed to transmit" );
923
939
send_event_to_application (TX_TIMEOUT);
924
940
return ;
925
941
}
0 commit comments