@@ -186,6 +186,32 @@ static void MlmeConfirm( MlmeConfirm_t *mlmeConfirm );
186186 */
187187static void MlmeIndication ( MlmeIndication_t * mlmeIndication );
188188
189+ /*!
190+ * Calls the OnClassChange callback to indicate the new active device class
191+ *
192+ * \param [in] deviceClass Active device class
193+ */
194+ static void OnClassChangeNotify ( DeviceClass_t deviceClass )
195+ {
196+ if ( LmHandlerCallbacks -> OnClassChange != NULL )
197+ {
198+ LmHandlerCallbacks -> OnClassChange ( deviceClass );
199+ }
200+ }
201+
202+ /*!
203+ * Calls the OnBeaconStatusChange callback to indicate current beacon status
204+ *
205+ * \param [in] params Current beacon parameters
206+ */
207+ static void OnBeaconStatusChangeNotify ( LoRaMacHandlerBeaconParams_t * params )
208+ {
209+ if ( LmHandlerCallbacks -> OnBeaconStatusChange != NULL )
210+ {
211+ LmHandlerCallbacks -> OnBeaconStatusChange ( params );
212+ }
213+ }
214+
189215/*!
190216 * Starts the beacon search
191217 *
@@ -252,7 +278,7 @@ LmHandlerErrorStatus_t LmHandlerInit( LmHandlerCallbacks_t *handlerCallbacks,
252278 nbNvmData = NvmDataMgmtRestore ( );
253279
254280 // Try to restore from NVM and query the mac if possible.
255- if ( nbNvmData > 0 )
281+ if ( ( LmHandlerCallbacks -> OnNvmDataChange != NULL ) && ( nbNvmData > 0 ) )
256282 {
257283 LmHandlerCallbacks -> OnNvmDataChange ( LORAMAC_HANDLER_NVM_RESTORE , nbNvmData );
258284 }
@@ -278,8 +304,12 @@ LmHandlerErrorStatus_t LmHandlerInit( LmHandlerCallbacks_t *handlerCallbacks,
278304 LoRaMacMibSetRequestConfirm ( & mibReq );
279305
280306#if ( STATIC_DEVICE_ADDRESS != 1 )
307+ // TODO: Remove STATIC_DEVICE_ADDRESS = 0. Up to the application to decide what to do
281308 // Random seed initialization
282- srand1 ( LmHandlerCallbacks -> GetRandomSeed ( ) );
309+ if ( LmHandlerCallbacks -> GetRandomSeed != NULL )
310+ {
311+ srand1 ( LmHandlerCallbacks -> GetRandomSeed ( ) );
312+ }
283313 // Choose a random device address
284314 CommissioningParams .DevAddr = randr ( 0 , 0x01FFFFFF );
285315#endif
@@ -320,7 +350,10 @@ LmHandlerErrorStatus_t LmHandlerInit( LmHandlerCallbacks_t *handlerCallbacks,
320350 {
321351 if ( mibReq .Param .NetworkActivation == ACTIVATION_TYPE_NONE )
322352 {
323- LmHandlerCallbacks -> OnNetworkParametersChange ( & CommissioningParams );
353+ if ( LmHandlerCallbacks -> OnNetworkParametersChange != NULL )
354+ {
355+ LmHandlerCallbacks -> OnNetworkParametersChange ( & CommissioningParams );
356+ }
324357 }
325358 }
326359 return LORAMAC_HANDLER_SUCCESS ;
@@ -365,7 +398,10 @@ void LmHandlerProcess( void )
365398
366399 if ( size > 0 )
367400 {
368- LmHandlerCallbacks -> OnNvmDataChange ( LORAMAC_HANDLER_NVM_STORE , size );
401+ if ( LmHandlerCallbacks -> OnNvmDataChange != NULL )
402+ {
403+ LmHandlerCallbacks -> OnNvmDataChange ( LORAMAC_HANDLER_NVM_STORE , size );
404+ }
369405 }
370406
371407 // Call all packages process functions
@@ -428,7 +464,11 @@ static void LmHandlerJoinRequest( bool isOtaa )
428464 CommissioningParams .IsOtaaActivation = false;
429465 }
430466 // Starts the join procedure
431- LmHandlerCallbacks -> OnMacMlmeRequest ( LoRaMacMlmeRequest ( & mlmeReq ), & mlmeReq , mlmeReq .ReqReturn .DutyCycleWaitTime );
467+ LoRaMacStatus_t status = LoRaMacMlmeRequest ( & mlmeReq );
468+ if ( LmHandlerCallbacks -> OnMacMlmeRequest != NULL )
469+ {
470+ LmHandlerCallbacks -> OnMacMlmeRequest ( status , & mlmeReq , mlmeReq .ReqReturn .DutyCycleWaitTime );
471+ }
432472 DutyCycleWaitTime = mlmeReq .ReqReturn .DutyCycleWaitTime ;
433473}
434474
@@ -496,7 +536,10 @@ LmHandlerErrorStatus_t LmHandlerSend( LmHandlerAppData_t *appData, LmHandlerMsgT
496536 TxParams .Datarate = LmHandlerParams -> TxDatarate ;
497537
498538 status = LoRaMacMcpsRequest ( & mcpsReq );
499- LmHandlerCallbacks -> OnMacMcpsRequest ( status , & mcpsReq , mcpsReq .ReqReturn .DutyCycleWaitTime );
539+ if ( LmHandlerCallbacks -> OnMacMcpsRequest != NULL )
540+ {
541+ LmHandlerCallbacks -> OnMacMcpsRequest ( status , & mcpsReq , mcpsReq .ReqReturn .DutyCycleWaitTime );
542+ }
500543 DutyCycleWaitTime = mcpsReq .ReqReturn .DutyCycleWaitTime ;
501544
502545 if ( status == LORAMAC_STATUS_OK )
@@ -518,7 +561,10 @@ LmHandlerErrorStatus_t LmHandlerDeviceTimeReq( void )
518561 mlmeReq .Type = MLME_DEVICE_TIME ;
519562
520563 status = LoRaMacMlmeRequest ( & mlmeReq );
521- LmHandlerCallbacks -> OnMacMlmeRequest ( status , & mlmeReq , mlmeReq .ReqReturn .DutyCycleWaitTime );
564+ if ( LmHandlerCallbacks -> OnMacMlmeRequest != NULL )
565+ {
566+ LmHandlerCallbacks -> OnMacMlmeRequest ( status , & mlmeReq , mlmeReq .ReqReturn .DutyCycleWaitTime );
567+ }
522568 DutyCycleWaitTime = mlmeReq .ReqReturn .DutyCycleWaitTime ;
523569
524570 if ( status == LORAMAC_STATUS_OK )
@@ -539,7 +585,10 @@ static LmHandlerErrorStatus_t LmHandlerBeaconReq( void )
539585 mlmeReq .Type = MLME_BEACON_ACQUISITION ;
540586
541587 status = LoRaMacMlmeRequest ( & mlmeReq );
542- LmHandlerCallbacks -> OnMacMlmeRequest ( status , & mlmeReq , mlmeReq .ReqReturn .DutyCycleWaitTime );
588+ if ( LmHandlerCallbacks -> OnMacMlmeRequest != NULL )
589+ {
590+ LmHandlerCallbacks -> OnMacMlmeRequest ( status , & mlmeReq , mlmeReq .ReqReturn .DutyCycleWaitTime );
591+ }
543592 DutyCycleWaitTime = mlmeReq .ReqReturn .DutyCycleWaitTime ;
544593
545594 if ( status == LORAMAC_STATUS_OK )
@@ -562,7 +611,10 @@ LmHandlerErrorStatus_t LmHandlerPingSlotReq( uint8_t periodicity )
562611 mlmeReq .Req .PingSlotInfo .PingSlot .Fields .RFU = 0 ;
563612
564613 status = LoRaMacMlmeRequest ( & mlmeReq );
565- LmHandlerCallbacks -> OnMacMlmeRequest ( status , & mlmeReq , mlmeReq .ReqReturn .DutyCycleWaitTime );
614+ if ( LmHandlerCallbacks -> OnMacMlmeRequest != NULL )
615+ {
616+ LmHandlerCallbacks -> OnMacMlmeRequest ( status , & mlmeReq , mlmeReq .ReqReturn .DutyCycleWaitTime );
617+ }
566618 DutyCycleWaitTime = mlmeReq .ReqReturn .DutyCycleWaitTime ;
567619
568620 if ( status == LORAMAC_STATUS_OK )
@@ -605,7 +657,7 @@ LmHandlerErrorStatus_t LmHandlerRequestClass( DeviceClass_t newClass )
605657 if ( LoRaMacMibSetRequestConfirm ( & mibReq ) == LORAMAC_STATUS_OK )
606658 {
607659 // Switch is instantaneous
608- LmHandlerCallbacks -> OnClassChange ( CLASS_A );
660+ OnClassChangeNotify ( CLASS_A );
609661 }
610662 else
611663 {
@@ -635,7 +687,7 @@ LmHandlerErrorStatus_t LmHandlerRequestClass( DeviceClass_t newClass )
635687 mibReq .Param .Class = CLASS_C ;
636688 if ( LoRaMacMibSetRequestConfirm ( & mibReq ) == LORAMAC_STATUS_OK )
637689 {
638- LmHandlerCallbacks -> OnClassChange ( CLASS_C );
690+ OnClassChangeNotify ( CLASS_C );
639691 }
640692 else
641693 {
@@ -704,7 +756,10 @@ static void McpsConfirm( McpsConfirm_t *mcpsConfirm )
704756 TxParams .Channel = mcpsConfirm -> Channel ;
705757 TxParams .AckReceived = mcpsConfirm -> AckReceived ;
706758
707- LmHandlerCallbacks -> OnTxData ( & TxParams );
759+ if ( LmHandlerCallbacks -> OnTxData != NULL )
760+ {
761+ LmHandlerCallbacks -> OnTxData ( & TxParams );
762+ }
708763
709764 LmHandlerPackagesNotify ( PACKAGE_MCPS_CONFIRM , mcpsConfirm );
710765}
@@ -731,16 +786,22 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
731786 appData .BufferSize = mcpsIndication -> BufferSize ;
732787 appData .Buffer = mcpsIndication -> Buffer ;
733788
734- LmHandlerCallbacks -> OnRxData ( & appData , & RxParams );
789+ if ( LmHandlerCallbacks -> OnRxData != NULL )
790+ {
791+ LmHandlerCallbacks -> OnRxData ( & appData , & RxParams );
792+ }
735793
736794 if ( mcpsIndication -> DeviceTimeAnsReceived == true )
737795 {
796+ if ( LmHandlerCallbacks -> OnSysTimeUpdate != NULL )
797+ {
738798#if ( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
739- // Provide fix values. DeviceTimeAns is accurate
740- LmHandlerCallbacks -> OnSysTimeUpdate ( true, 0 );
799+ // Provide fix values. DeviceTimeAns is accurate
800+ LmHandlerCallbacks -> OnSysTimeUpdate ( true, 0 );
741801#else
742- LmHandlerCallbacks -> OnSysTimeUpdate ( );
802+ LmHandlerCallbacks -> OnSysTimeUpdate ( );
743803#endif
804+ }
744805 }
745806 // Call packages RxProcess function
746807 LmHandlerPackagesNotify ( PACKAGE_MCPS_INDICATION , mcpsIndication );
@@ -757,7 +818,10 @@ static void MlmeConfirm( MlmeConfirm_t *mlmeConfirm )
757818{
758819 TxParams .IsMcpsConfirm = 0 ;
759820 TxParams .Status = mlmeConfirm -> Status ;
760- LmHandlerCallbacks -> OnTxData ( & TxParams );
821+ if ( LmHandlerCallbacks -> OnTxData != NULL )
822+ {
823+ LmHandlerCallbacks -> OnTxData ( & TxParams );
824+ }
761825
762826 LmHandlerPackagesNotify ( PACKAGE_MLME_CONFIRM , mlmeConfirm );
763827
@@ -782,7 +846,10 @@ static void MlmeConfirm( MlmeConfirm_t *mlmeConfirm )
782846 JoinParams .Status = LORAMAC_HANDLER_ERROR ;
783847 }
784848 // Notify upper layer
785- LmHandlerCallbacks -> OnJoinRequest ( & JoinParams );
849+ if ( LmHandlerCallbacks -> OnJoinRequest != NULL )
850+ {
851+ LmHandlerCallbacks -> OnJoinRequest ( & JoinParams );
852+ }
786853 }
787854 break ;
788855 case MLME_LINK_CHECK :
@@ -826,7 +893,7 @@ static void MlmeConfirm( MlmeConfirm_t *mlmeConfirm )
826893 mibReq .Param .Class = CLASS_B ;
827894 LoRaMacMibSetRequestConfirm ( & mibReq );
828895 // Notify upper layer
829- LmHandlerCallbacks -> OnClassChange ( CLASS_B );
896+ OnClassChangeNotify ( CLASS_B );
830897 IsClassBSwitchPending = false;
831898 }
832899 else
@@ -846,7 +913,10 @@ static void MlmeIndication( MlmeIndication_t *mlmeIndication )
846913 RxParams .Status = mlmeIndication -> Status ;
847914 if ( RxParams .Status != LORAMAC_EVENT_INFO_STATUS_BEACON_LOCKED )
848915 {
849- LmHandlerCallbacks -> OnRxData ( NULL , & RxParams );
916+ if ( LmHandlerCallbacks -> OnRxData != NULL )
917+ {
918+ LmHandlerCallbacks -> OnRxData ( NULL , & RxParams );
919+ }
850920 }
851921
852922 // Call packages RxProcess function
@@ -867,8 +937,8 @@ static void MlmeIndication( MlmeIndication_t *mlmeIndication )
867937 BeaconParams .Info .GwSpecific .InfoDesc = 0 ;
868938 memset1 ( BeaconParams .Info .GwSpecific .Info , 0 , 6 );
869939
870- LmHandlerCallbacks -> OnClassChange ( CLASS_A );
871- LmHandlerCallbacks -> OnBeaconStatusChange ( & BeaconParams );
940+ OnClassChangeNotify ( CLASS_A );
941+ OnBeaconStatusChangeNotify ( & BeaconParams );
872942
873943 LmHandlerDeviceTimeReq ( );
874944 }
@@ -880,14 +950,14 @@ static void MlmeIndication( MlmeIndication_t *mlmeIndication )
880950 BeaconParams .State = LORAMAC_HANDLER_BEACON_RX ;
881951 BeaconParams .Info = mlmeIndication -> BeaconInfo ;
882952
883- LmHandlerCallbacks -> OnBeaconStatusChange ( & BeaconParams );
953+ OnBeaconStatusChangeNotify ( & BeaconParams );
884954 }
885955 else
886956 {
887957 BeaconParams .State = LORAMAC_HANDLER_BEACON_NRX ;
888958 BeaconParams .Info = mlmeIndication -> BeaconInfo ;
889959
890- LmHandlerCallbacks -> OnBeaconStatusChange ( & BeaconParams );
960+ OnBeaconStatusChangeNotify ( & BeaconParams );
891961 }
892962 break ;
893963 }
0 commit comments