Skip to content

Commit 1a65c19

Browse files
committed
Fixed default channels enabling after reset when ABP activation is used.
Standardized the call to LoRaMacMlmeRequest API. From now on the same API is used to join the network in OTAA and ABP mode
1 parent 3c4a2f6 commit 1a65c19

File tree

4 files changed

+47
-30
lines changed

4 files changed

+47
-30
lines changed

src/apps/LoRaMac/common/LmHandler/LmHandler.c

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -369,36 +369,26 @@ TimerTime_t LmHandlerGetDutyCycleWaitTime( void )
369369
*/
370370
static void LmHandlerJoinRequest( bool isOtaa )
371371
{
372+
MlmeReq_t mlmeReq;
373+
374+
mlmeReq.Type = MLME_JOIN;
375+
mlmeReq.Req.Join.Datarate = LmHandlerParams->TxDatarate;
376+
372377
if( isOtaa == true )
373378
{
374-
MlmeReq_t mlmeReq;
375-
376-
mlmeReq.Type = MLME_JOIN;
377-
mlmeReq.Req.Join.Datarate = LmHandlerParams->TxDatarate;
379+
mlmeReq.Req.Join.NetworkActivation = ACTIVATION_TYPE_OTAA;
378380
// Update commissioning parameters activation type variable.
379381
CommissioningParams.IsOtaaActivation = true;
380-
381-
// Starts the OTAA join procedure
382-
LmHandlerCallbacks->OnMacMlmeRequest( LoRaMacMlmeRequest( &mlmeReq ), &mlmeReq, mlmeReq.ReqReturn.DutyCycleWaitTime );
383-
DutyCycleWaitTime = mlmeReq.ReqReturn.DutyCycleWaitTime;
384382
}
385383
else
386384
{
387-
MibRequestConfirm_t mibReq;
388-
LmHandlerJoinParams_t joinParams =
389-
{
390-
.CommissioningParams = &CommissioningParams,
391-
.Datarate = LmHandlerParams->TxDatarate,
392-
.Status = LORAMAC_HANDLER_SUCCESS,
393-
};
394-
395-
mibReq.Type = MIB_NETWORK_ACTIVATION;
396-
mibReq.Param.NetworkActivation = ACTIVATION_TYPE_ABP;
397-
LoRaMacMibSetRequestConfirm( &mibReq );
398-
399-
// Notify upper layer
400-
LmHandlerCallbacks->OnJoinRequest( &joinParams );
385+
mlmeReq.Req.Join.NetworkActivation = ACTIVATION_TYPE_ABP;
386+
// Update commissioning parameters activation type variable.
387+
CommissioningParams.IsOtaaActivation = false;
401388
}
389+
// Starts the join procedure
390+
LmHandlerCallbacks->OnMacMlmeRequest( LoRaMacMlmeRequest( &mlmeReq ), &mlmeReq, mlmeReq.ReqReturn.DutyCycleWaitTime );
391+
DutyCycleWaitTime = mlmeReq.ReqReturn.DutyCycleWaitTime;
402392
}
403393

404394
void LmHandlerJoin( void )

src/mac/LoRaMac.c

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4613,6 +4613,7 @@ LoRaMacStatus_t LoRaMacMlmeRequest( MlmeReq_t* mlmeRequest )
46134613
queueElement.Request = mlmeRequest->Type;
46144614
queueElement.Status = LORAMAC_EVENT_INFO_STATUS_ERROR;
46154615
queueElement.RestrictCommonReadyToHandle = false;
4616+
queueElement.ReadyToHandle = false;
46164617

46174618
switch( mlmeRequest->Type )
46184619
{
@@ -4623,18 +4624,38 @@ LoRaMacStatus_t LoRaMacMlmeRequest( MlmeReq_t* mlmeRequest )
46234624
return LORAMAC_STATUS_BUSY;
46244625
}
46254626

4626-
ResetMacParameters( );
4627+
if( mlmeRequest->Req.Join.NetworkActivation == ACTIVATION_TYPE_OTAA )
4628+
{
4629+
ResetMacParameters( );
46274630

4628-
MacCtx.NvmCtx->MacParams.ChannelsDatarate = RegionAlternateDr( MacCtx.NvmCtx->Region, mlmeRequest->Req.Join.Datarate, ALTERNATE_DR );
4631+
MacCtx.NvmCtx->MacParams.ChannelsDatarate = RegionAlternateDr( MacCtx.NvmCtx->Region, mlmeRequest->Req.Join.Datarate, ALTERNATE_DR );
46294632

4630-
queueElement.Status = LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL;
4633+
queueElement.Status = LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL;
46314634

4632-
status = SendReJoinReq( JOIN_REQ );
4635+
status = SendReJoinReq( JOIN_REQ );
46334636

4634-
if( status != LORAMAC_STATUS_OK )
4637+
if( status != LORAMAC_STATUS_OK )
4638+
{
4639+
// Revert back the previous datarate ( mainly used for US915 like regions )
4640+
MacCtx.NvmCtx->MacParams.ChannelsDatarate = RegionAlternateDr( MacCtx.NvmCtx->Region, mlmeRequest->Req.Join.Datarate, ALTERNATE_DR_RESTORE );
4641+
}
4642+
}
4643+
else if( mlmeRequest->Req.Join.NetworkActivation == ACTIVATION_TYPE_ABP )
46354644
{
4636-
// Revert back the previous datarate ( mainly used for US915 like regions )
4637-
MacCtx.NvmCtx->MacParams.ChannelsDatarate = RegionAlternateDr( MacCtx.NvmCtx->Region, mlmeRequest->Req.Join.Datarate, ALTERNATE_DR_RESTORE );
4645+
// Restore default value for ChannelsDatarateChangedLinkAdrReq
4646+
MacCtx.NvmCtx->ChannelsDatarateChangedLinkAdrReq = false;
4647+
4648+
//Activate the default channels
4649+
InitDefaultsParams_t params;
4650+
params.Type = INIT_TYPE_ACTIVATE_DEFAULT_CHANNELS;
4651+
RegionInitDefaults( MacCtx.NvmCtx->Region, &params );
4652+
4653+
MacCtx.NvmCtx->NetworkActivation = mlmeRequest->Req.Join.NetworkActivation;
4654+
queueElement.Status = LORAMAC_EVENT_INFO_STATUS_OK;
4655+
queueElement.ReadyToHandle = true;
4656+
MacCtx.MacCallbacks->MacProcessNotify( );
4657+
MacCtx.MacFlags.Bits.MacDone = 1;
4658+
status = LORAMAC_STATUS_OK;
46384659
}
46394660
break;
46404661
}

src/mac/LoRaMac.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,12 @@ typedef enum eMlme
975975
*/
976976
typedef struct sMlmeReqJoin
977977
{
978+
/*!
979+
* LoRaWAN Network End-Device Activation ( ACTIVATION_TYPE_NONE, ACTIVATION_TYPE_ABP or OTTA )
980+
*
981+
* Related MIB type: \ref MIB_NETWORK_ACTIVATION
982+
*/
983+
ActivationType_t NetworkActivation;
978984
/*!
979985
* Datarate used for join request.
980986
*/

src/mac/LoRaMacConfirmQueue.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ bool LoRaMacConfirmQueueAdd( MlmeConfirmQueue_t* mlmeConfirm )
207207
ConfirmQueueCtx.BufferEnd->Request = mlmeConfirm->Request;
208208
ConfirmQueueCtx.BufferEnd->Status = mlmeConfirm->Status;
209209
ConfirmQueueCtx.BufferEnd->RestrictCommonReadyToHandle = mlmeConfirm->RestrictCommonReadyToHandle;
210-
ConfirmQueueCtx.BufferEnd->ReadyToHandle = false;
210+
ConfirmQueueCtx.BufferEnd->ReadyToHandle = mlmeConfirm->ReadyToHandle;
211211
// Increase counter
212212
ConfirmQueueCtx.ConfirmQueueNvmCtx->MlmeConfirmQueueCnt++;
213213
// Update end pointer

0 commit comments

Comments
 (0)