Remove C time API glue from driver
This commit is contained in:
parent
9303fbf5b5
commit
04af54e7c8
107
systime.cpp
107
systime.cpp
@ -1,107 +0,0 @@
|
||||
#include "systime.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// DST magic by Edgar Bonet
|
||||
int SysTime::euDST( const time_t *pTime, int32_t *pZ )
|
||||
{
|
||||
static_cast<void>( pZ );
|
||||
|
||||
uint32_t t = *pTime;
|
||||
|
||||
if( static_cast<uint8_t>( t >> 24 ) >= 194 )
|
||||
t -= 3029443200U;
|
||||
|
||||
t = ( t + 655513200 ) / 604800 * 28;
|
||||
|
||||
if( static_cast<uint16_t>( t % 1461 ) < 856 )
|
||||
return ONE_HOUR;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool SysTime::init()
|
||||
{
|
||||
twi_init_master();
|
||||
rtc_init();
|
||||
|
||||
if( !rtc_is_ds3231() )
|
||||
return false;
|
||||
|
||||
set_zone( 1 * ONE_HOUR );
|
||||
set_dst( euDST );
|
||||
|
||||
syncSysTime();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void SysTime::syncSysTime()
|
||||
{
|
||||
tm sTime = getTime();
|
||||
set_system_time( mk_gmtime( &sTime ) );
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool SysTime::checkSync()
|
||||
{
|
||||
time_t timeNow = time( nullptr );
|
||||
tm *ptmUTC = gmtime( &timeNow );
|
||||
|
||||
rtc_tm *ptmRtcTime = rtc_get_time();
|
||||
|
||||
if( ptmUTC->tm_sec != ptmRtcTime->sec || ptmUTC->tm_min != ptmRtcTime->min || ptmUTC->tm_hour != ptmRtcTime->hour )
|
||||
return false;
|
||||
|
||||
if( ptmUTC->tm_mday != ptmRtcTime->mday || ( ptmUTC->tm_mon + 1 ) != ptmRtcTime->mon || ( ptmUTC->tm_year + 1900 ) != ptmRtcTime->year )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void SysTime::tick()
|
||||
{
|
||||
system_tick();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
tm SysTime::getTime()
|
||||
{
|
||||
tm sTime;
|
||||
rtc_tm *ptmTime = rtc_get_time();
|
||||
|
||||
sTime.tm_sec = ptmTime->sec;
|
||||
sTime.tm_min = ptmTime->min;
|
||||
sTime.tm_hour = ptmTime->hour;
|
||||
sTime.tm_mday = ptmTime->mday;
|
||||
sTime.tm_mon = ptmTime->mon - 1;
|
||||
sTime.tm_year = ptmTime->year - 1900;
|
||||
sTime.tm_isdst = 0;
|
||||
|
||||
time_t timeUTC = mk_gmtime( &sTime );
|
||||
sTime = *( gmtime( &timeUTC ) );
|
||||
|
||||
return sTime;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void SysTime::setTime( const tm &sTime )
|
||||
{
|
||||
rtc_tm *pRtcTime = rtc_get_time();
|
||||
|
||||
pRtcTime->sec = sTime.tm_sec;
|
||||
pRtcTime->min = sTime.tm_min;
|
||||
pRtcTime->hour = sTime.tm_hour;
|
||||
pRtcTime->mday = sTime.tm_mday;
|
||||
pRtcTime->mon = sTime.tm_mon + 1;
|
||||
pRtcTime->year = sTime.tm_year + 1900;
|
||||
pRtcTime->wday = sTime.tm_wday + 1;
|
||||
pRtcTime->am = ( sTime.tm_hour < 12 ) ? true : false;
|
||||
pRtcTime->twelveHour = ( sTime.tm_hour == 0 ) ? 12 : ( ( sTime.tm_hour > 12 ) ? ( sTime.tm_hour - 12 ) : sTime.tm_hour );
|
||||
|
||||
rtc_set_time( pRtcTime );
|
||||
|
||||
syncSysTime();
|
||||
}
|
29
systime.h
29
systime.h
@ -1,29 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) by BlackMark 2017
|
||||
* Date 17/12/2016
|
||||
* Version 1.0
|
||||
*/
|
||||
|
||||
#ifndef SYSTIME_H
|
||||
#define SYSTIME_H
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include "twi.h"
|
||||
#include "rtc.h"
|
||||
|
||||
class SysTime
|
||||
{
|
||||
private:
|
||||
static int euDST( const time_t *pTime, int32_t *pZ );
|
||||
|
||||
public:
|
||||
static bool init();
|
||||
static void syncSysTime();
|
||||
static bool checkSync();
|
||||
static void tick();
|
||||
static tm getTime();
|
||||
static void setTime( const tm &sTime );
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user