2828
2929#include " NTPUtils.h"
3030
31+ /* *************************************************************************************
32+ * GLOBAL VARIABLES
33+ **************************************************************************************/
34+
35+ #ifdef ARDUINO_ARCH_SAMD
36+ RTCZero rtc;
37+ #endif
38+
3139/* *************************************************************************************
3240 * INTERNAL FUNCTION DECLARATION
3341 **************************************************************************************/
@@ -46,6 +54,9 @@ static time_t const EPOCH_AT_COMPILE_TIME = cvt_time(__DATE__);
4654
4755TimeService::TimeService ()
4856: _con_hdl(nullptr )
57+ #ifdef ARDUINO_ARCH_SAMD
58+ , _is_rtc_configured(false )
59+ #endif
4960{
5061
5162}
@@ -57,9 +68,30 @@ TimeService::TimeService()
5768void TimeService::begin (ConnectionHandler * con_hdl)
5869{
5970 _con_hdl = con_hdl;
71+ #ifdef ARDUINO_ARCH_SAMD
72+ rtc.begin ();
73+ #endif
6074}
6175
6276unsigned long TimeService::getTime ()
77+ {
78+ #ifdef ARDUINO_ARCH_SAMD
79+ if (!_is_rtc_configured)
80+ {
81+ rtc.setEpoch (getRemoteTime ());
82+ _is_rtc_configured = true ;
83+ }
84+ return rtc.getEpoch ();
85+ #else
86+ return getRemoteTime ();
87+ #endif
88+ }
89+
90+ /* *************************************************************************************
91+ * PRIVATE MEMBER FUNCTIONS
92+ **************************************************************************************/
93+
94+ unsigned long TimeService::getRemoteTime ()
6395{
6496 if (_con_hdl == nullptr ) return 0 ;
6597
@@ -83,10 +115,6 @@ unsigned long TimeService::getTime()
83115 return 0 ;
84116}
85117
86- /* *************************************************************************************
87- * PRIVATE MEMBER FUNCTIONS
88- **************************************************************************************/
89-
90118bool TimeService::isTimeValid (unsigned long const time)
91119{
92120 return (time >= EPOCH_AT_COMPILE_TIME);
0 commit comments