diff --git a/Middlewares/Third_Party/LoRaWAN/LmHandler/LmHandler.c b/Middlewares/Third_Party/LoRaWAN/LmHandler/LmHandler.c index 82652e0c..a2637cbf 100644 --- a/Middlewares/Third_Party/LoRaWAN/LmHandler/LmHandler.c +++ b/Middlewares/Third_Party/LoRaWAN/LmHandler/LmHandler.c @@ -595,8 +595,10 @@ TimerTime_t LmHandlerGetDutyCycleWaitTime( void ) return DutyCycleWaitTime; } -void LmHandlerJoin( ActivationType_t mode, bool forceRejoin ) +LmHandlerErrorStatus_t LmHandlerJoin( ActivationType_t mode, bool forceRejoin ) { + LmHandlerErrorStatus_t lmhStatus = LORAMAC_HANDLER_ERROR; + LoRaMacStatus_t status; MlmeReq_t mlmeReq; mlmeReq.Type = MLME_JOIN; @@ -611,7 +613,12 @@ void LmHandlerJoin( ActivationType_t mode, bool forceRejoin ) LoRaMacStart(); #if (defined( LORAMAC_VERSION ) && ( LORAMAC_VERSION == 0x01000300 )) /* Starts the OTAA join procedure */ - LoRaMacMlmeRequest( &mlmeReq ); + status = LoRaMacMlmeRequest( &mlmeReq ); + + if( status == LORAMAC_STATUS_OK ) + { + lmhStatus = LORAMAC_STATUS_OK; + } #endif /* LORAMAC_VERSION */ } else @@ -661,7 +668,7 @@ void LmHandlerJoin( ActivationType_t mode, bool forceRejoin ) { LmHandlerCallbacks->OnJoinRequest( &JoinParams ); } - LmHandlerRequestClass( LmHandlerParams.DefaultClass ); + lmhStatus = LmHandlerRequestClass( LmHandlerParams.DefaultClass ); #endif /* LORAMAC_VERSION */ } @@ -669,10 +676,17 @@ void LmHandlerJoin( ActivationType_t mode, bool forceRejoin ) if( ( CtxRestoreDone == false ) || ( forceRejoin == true ) ) { /* Starts the join procedure */ - LoRaMacMlmeRequest( &mlmeReq ); + status = LoRaMacMlmeRequest( &mlmeReq ); + + if( status == LORAMAC_STATUS_OK ) + { + lmhStatus = LORAMAC_STATUS_OK; + } } DutyCycleWaitTime = mlmeReq.ReqReturn.DutyCycleWaitTime; #endif /* LORAMAC_VERSION */ + + return lmhStatus; } LmHandlerFlagStatus_t LmHandlerJoinStatus( void ) diff --git a/Middlewares/Third_Party/LoRaWAN/LmHandler/LmHandler.h b/Middlewares/Third_Party/LoRaWAN/LmHandler/LmHandler.h index 31885118..27bc6be7 100644 --- a/Middlewares/Third_Party/LoRaWAN/LmHandler/LmHandler.h +++ b/Middlewares/Third_Party/LoRaWAN/LmHandler/LmHandler.h @@ -363,8 +363,12 @@ TimerTime_t LmHandlerGetDutyCycleWaitTime( void ); * * \param [in] mode Activation mode (OTAA or ABP) * \param [in] forceRejoin Flag to force the rejoin even if LoRaWAN context can be restored + * + * \retval status Returns \ref LORAMAC_HANDLER_SUCCESS if request has been + * processed else if device not yet joined a network \ref LORAMAC_HANDLER_NO_NETWORK_JOINED + * else \ref LORAMAC_HANDLER_ERROR */ -void LmHandlerJoin( ActivationType_t mode, bool forceRejoin ); +LmHandlerErrorStatus_t LmHandlerJoin( ActivationType_t mode, bool forceRejoin ); /*! * Check whether the Device is joined to the network @@ -394,7 +398,7 @@ LmHandlerErrorStatus_t LmHandlerPingSlotReq( uint8_t periodicity ); * * \retval status Returns \ref LORAMAC_HANDLER_SUCCESS if request has been * processed else if device not yet joined a network \ref LORAMAC_HANDLER_NO_NETWORK_JOINED - else \ref LORAMAC_HANDLER_ERROR + * else \ref LORAMAC_HANDLER_ERROR */ LmHandlerErrorStatus_t LmHandlerRequestClass( DeviceClass_t newClass );