Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: oldheating gps motorhome heating
Diff: clock.cpp
- Revision:
- 17:927fc1eceb9d
- Parent:
- 16:933cbe190bb0
- Child:
- 18:207dd1474cd9
--- a/clock.cpp Sat Dec 16 14:51:41 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-#include "mbed.h"
-#include "io.h"
-#include "log.h"
-#include "tick.h"
-#include "sync.h"
-#include "time.h"
-#include "rtc.h"
-
-#define ONE_BILLION 1000000000
-
-
-void ClockNsToTmUtc (int64_t ns, struct tm* ptm)
-{
- time_t t = ns / ONE_BILLION;
- TimeToTmUtc(t, ptm);
-}
-int64_t ClockNsFromTmUtc(struct tm* ptm)
-{
- time_t t = TimeFromTmUtc(ptm);
- return t * ONE_BILLION;
-}
-
-int ClockSlewDivisor = 10;
-int ClockSlewMaxMs = 10;
-int ClockPpbDivisor = 10;
-int ClockPpbChangeMax = 1000;
-int ClockSyncedLimitNs = 10000000;
-int ClockSyncedHysterisNs = 1000000;
-int ClockSyncedLimitPpb = 1000;
-int ClockSyncedHysterisPpb = 100;
-int ClockMaxOffsetSecs = 3;
-
-
-static int64_t nowNs = 0;
-static time_t nowT = 0;
-static void calculateTimes()
-{
- int64_t nsInt;
- TickGetTimes(&nsInt, &nowNs);
- nowT = nowNs / ONE_BILLION;
-}
-
-static int64_t refNs = 0;
-int64_t ClockRefNs()
-{
- return refNs;
-}
-bool ClockIsSet()
-{
- return TickIsSet();
-}
-bool ClockIsSynced()
-{
- return SyncedRate && SyncedTime;
-}
-
-int64_t ClockNowNs()
-{
- return nowNs;
-}
-
-void ClockTmLocal(struct tm* ptm)
-{
- TimeToTmLocal(nowT, ptm);
-}
-void ClockTmUtc(struct tm* ptm)
-{
- TimeToTmUtc(nowT, ptm);
-}
-
-void ClockAscii(char* p)
-{
- struct tm tm;
- TimeToTmUtc(nowT, &tm);
- sprintf(p, "%d-%02d-%02d %02d:%02d:%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
-}
-int ClockInit()
-{
- RtcInit();
- TickInit();
- return 0;
-}
-
-bool ClockTicked = false; //Set to true for one scan each time the second changes
-
-
-int ClockMain()
-{
- //Calculate ns and time_t
- calculateTimes();
-
- static bool lastSyncedRate = false;
- static bool lastSyncedTime = false;
-
- if ( SyncedRate && !lastSyncedRate) LogTimeF("Rate sync acquired\r\n");
- if (!SyncedRate && lastSyncedRate) LogTimeF("Rate sync lost\r\n");
- if ( SyncedTime && !lastSyncedTime) LogTimeF("Time sync acquired\r\n");
- if (!SyncedTime && lastSyncedTime) LogTimeF("Time sync lost\r\n");
-
- lastSyncedRate = SyncedRate;
- lastSyncedTime = SyncedTime;
-
- //Record the time the clock started
- if (SyncedTime && SyncedRate) refNs = nowNs;
-
- //Set a one shot memory for having had a tick
- static time_t lastT = 0;
- ClockTicked = lastT > 0 && lastT != nowT;
- lastT = nowT;
-
-
- if (TickIsSet())
- {
- //Save the time to the RTC on the second
- if (ClockTicked)
- {
- struct tm tm;
- ClockTmUtc(&tm);
- RtcSetTm(&tm);
- }
- }
- else
- {
- //Start the clock from the RTC if not started
- if (RtcIsSet())
- {
- static int lastRtcSecond = -1;
- struct tm tm;
- RtcGetTm(&tm);
- if (lastRtcSecond > 0 && tm.tm_sec != lastRtcSecond)
- {
- time_t t = TimeFromTmUtc(&tm);
- TickSet(t * (int64_t)ONE_BILLION);
- calculateTimes();
- LogTimeF("Clock set from RTC\r\n");
- }
- lastRtcSecond = tm.tm_sec;
- }
- }
-
- return 0;
-}
\ No newline at end of file