Skip to content

Commit 7ba49c4

Browse files
committed
Pull-request #781 - Improved LmhpClockSync callback API.
1 parent 35bda48 commit 7ba49c4

File tree

14 files changed

+135
-0
lines changed

14 files changed

+135
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,12 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
728728

729729
if( mcpsIndication->DeviceTimeAnsReceived == true )
730730
{
731+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
732+
// Provide fix values. DeviceTimeAns is accurate
733+
LmHandlerCallbacks->OnSysTimeUpdate( true, 0 );
734+
#else
731735
LmHandlerCallbacks->OnSysTimeUpdate( );
736+
#endif
732737
}
733738
// Call packages RxProcess function
734739
LmHandlerPackagesNotify( PACKAGE_MCPS_INDICATION, mcpsIndication );

src/apps/LoRaMac/common/LmHandler/LmHandler.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,20 @@ typedef struct LmHandlerCallbacks_s
199199
* \param [IN] params notification parameters
200200
*/
201201
void ( *OnBeaconStatusChange )( LoRaMAcHandlerBeaconParams_t *params );
202+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
203+
/*!
204+
* Notifies the upper layer that the system time has been updated.
205+
*
206+
* \param [in] isSynchronized Indicates if the system time is synchronized in the range +/-1 second
207+
* \param [in] timeCorrection Received time correction value
208+
*/
209+
void ( *OnSysTimeUpdate )( bool isSynchronized, int32_t timeCorrection );
210+
#else
202211
/*!
203212
* Notifies the upper layer that the system time has been updated.
204213
*/
205214
void ( *OnSysTimeUpdate )( void );
215+
#endif
206216
}LmHandlerCallbacks_t;
207217

208218
/*!

src/apps/LoRaMac/common/LmHandler/LmHandlerTypes.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323

2424
#include "LoRaMac.h"
2525

26+
/*!
27+
* If set to 1 the new API defining \ref OnSysTimeUpdate callback is used.
28+
*/
29+
#define LMH_SYS_TIME_UPDATE_NEW_API 1
30+
2631
/*!
2732
*
2833
*/

src/apps/LoRaMac/common/LmHandler/packages/LmhPackage.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,20 @@ typedef struct LmhPackage_s
135135
* \retval status Returns \ref LORAMAC_HANDLER_SET if joined else \ref LORAMAC_HANDLER_RESET
136136
*/
137137
LmHandlerErrorStatus_t ( *OnDeviceTimeRequest )( void );
138+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
139+
/*!
140+
* Notifies the upper layer that the system time has been updated.
141+
*
142+
* \param [in] isSynchronized Indicates if the system time is synchronized in the range +/-1 second
143+
* \param [in] timeCorrection Received time correction value
144+
*/
145+
void ( *OnSysTimeUpdate )( bool isSynchronized, int32_t timeCorrection );
146+
#else
138147
/*!
139148
* Notifies the upper layer that the system time has been updated.
140149
*/
141150
void ( *OnSysTimeUpdate )( void );
151+
#endif
142152
}LmhPackage_t;
143153

144154
#endif // __LMH_PACKAGE_H__

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,16 @@ static void LmhpClockSyncOnMcpsIndication( McpsIndication_t *mcpsIndication )
250250
LmhpClockSyncState.TimeReqParam.Fields.TokenReq = ( LmhpClockSyncState.TimeReqParam.Fields.TokenReq + 1 ) & 0x0F;
251251
if( LmhpClockSyncPackage.OnSysTimeUpdate != NULL )
252252
{
253+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
254+
LmhpClockSyncPackage.OnSysTimeUpdate(
255+
( timeCorrection >= -1 ) && ( timeCorrection <= 1 ),
256+
timeCorrection );
257+
#else
253258
if( ( timeCorrection >= -1 ) && ( timeCorrection <= 1 ) )
254259
{
255260
LmhpClockSyncPackage.OnSysTimeUpdate( );
256261
}
262+
#endif
257263
}
258264
}
259265
break;

src/apps/LoRaMac/fuota-test-01/B-L072Z-LRWAN1/main.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,11 @@ static void OnTxData( LmHandlerTxParams_t* params );
138138
static void OnRxData( LmHandlerAppData_t* appData, LmHandlerRxParams_t* params );
139139
static void OnClassChange( DeviceClass_t deviceClass );
140140
static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params );
141+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
142+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection );
143+
#else
141144
static void OnSysTimeUpdate( void );
145+
#endif
142146
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
143147
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size );
144148
static uint8_t FragDecoderRead( uint32_t addr, uint8_t *data, uint32_t size );
@@ -476,10 +480,17 @@ static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params )
476480
DisplayBeaconUpdate( params );
477481
}
478482

483+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
484+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection )
485+
{
486+
IsClockSynched = isSynchronized;
487+
}
488+
#else
479489
static void OnSysTimeUpdate( void )
480490
{
481491
IsClockSynched = true;
482492
}
493+
#endif
483494

484495
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
485496
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size )

src/apps/LoRaMac/fuota-test-01/NAMote72/main.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,11 @@ static void OnTxData( LmHandlerTxParams_t* params );
136136
static void OnRxData( LmHandlerAppData_t* appData, LmHandlerRxParams_t* params );
137137
static void OnClassChange( DeviceClass_t deviceClass );
138138
static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params );
139+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
140+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection );
141+
#else
139142
static void OnSysTimeUpdate( void );
143+
#endif
140144
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
141145
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size );
142146
static uint8_t FragDecoderRead( uint32_t addr, uint8_t *data, uint32_t size );
@@ -465,10 +469,17 @@ static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params )
465469
DisplayBeaconUpdate( params );
466470
}
467471

472+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
473+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection )
474+
{
475+
IsClockSynched = isSynchronized;
476+
}
477+
#else
468478
static void OnSysTimeUpdate( void )
469479
{
470480
IsClockSynched = true;
471481
}
482+
#endif
472483

473484
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
474485
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size )

src/apps/LoRaMac/fuota-test-01/NucleoL073/main.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,11 @@ static void OnTxData( LmHandlerTxParams_t* params );
133133
static void OnRxData( LmHandlerAppData_t* appData, LmHandlerRxParams_t* params );
134134
static void OnClassChange( DeviceClass_t deviceClass );
135135
static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params );
136+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
137+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection );
138+
#else
136139
static void OnSysTimeUpdate( void );
140+
#endif
137141
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
138142
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size );
139143
static uint8_t FragDecoderRead( uint32_t addr, uint8_t *data, uint32_t size );
@@ -461,10 +465,17 @@ static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params )
461465
DisplayBeaconUpdate( params );
462466
}
463467

468+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
469+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection )
470+
{
471+
IsClockSynched = isSynchronized;
472+
}
473+
#else
464474
static void OnSysTimeUpdate( void )
465475
{
466476
IsClockSynched = true;
467477
}
478+
#endif
468479

469480
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
470481
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size )

src/apps/LoRaMac/fuota-test-01/NucleoL152/main.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,11 @@ static void OnTxData( LmHandlerTxParams_t* params );
133133
static void OnRxData( LmHandlerAppData_t* appData, LmHandlerRxParams_t* params );
134134
static void OnClassChange( DeviceClass_t deviceClass );
135135
static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params );
136+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
137+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection );
138+
#else
136139
static void OnSysTimeUpdate( void );
140+
#endif
137141
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
138142
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size );
139143
static uint8_t FragDecoderRead( uint32_t addr, uint8_t *data, uint32_t size );
@@ -461,10 +465,17 @@ static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params )
461465
DisplayBeaconUpdate( params );
462466
}
463467

468+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
469+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection )
470+
{
471+
IsClockSynched = isSynchronized;
472+
}
473+
#else
464474
static void OnSysTimeUpdate( void )
465475
{
466476
IsClockSynched = true;
467477
}
478+
#endif
468479

469480
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
470481
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size )

src/apps/LoRaMac/fuota-test-01/NucleoL476/main.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,11 @@ static void OnTxData( LmHandlerTxParams_t* params );
133133
static void OnRxData( LmHandlerAppData_t* appData, LmHandlerRxParams_t* params );
134134
static void OnClassChange( DeviceClass_t deviceClass );
135135
static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params );
136+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
137+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection );
138+
#else
136139
static void OnSysTimeUpdate( void );
140+
#endif
137141
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
138142
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size );
139143
static uint8_t FragDecoderRead( uint32_t addr, uint8_t *data, uint32_t size );
@@ -461,10 +465,17 @@ static void OnBeaconStatusChange( LoRaMAcHandlerBeaconParams_t* params )
461465
DisplayBeaconUpdate( params );
462466
}
463467

468+
#if( LMH_SYS_TIME_UPDATE_NEW_API == 1 )
469+
static void OnSysTimeUpdate( bool isSynchronized, int32_t timeCorrection )
470+
{
471+
IsClockSynched = isSynchronized;
472+
}
473+
#else
464474
static void OnSysTimeUpdate( void )
465475
{
466476
IsClockSynched = true;
467477
}
478+
#endif
468479

469480
#if( FRAG_DECODER_FILE_HANDLING_NEW_API == 1 )
470481
static uint8_t FragDecoderWrite( uint32_t addr, uint8_t *data, uint32_t size )

0 commit comments

Comments
 (0)