Andrew Boyson / clock

Dependents:   oldheating gps motorhome heating

Files at this revision

API Documentation at this revision

Comitter:
andrewboyson
Date:
Wed Apr 08 18:24:23 2020 +0000
Parent:
73:286a739f7c05
Child:
75:09d473b1a67f
Commit message:
Added 'CLK' in front of log messages. Gave some internal functions better names.

Changed in this revision

clk/clkgov.c Show annotated file Show diff for this revision Revisions of this file
--- a/clk/clkgov.c	Thu Feb 27 13:02:18 2020 +0000
+++ b/clk/clkgov.c	Wed Apr 08 18:24:23 2020 +0000
@@ -25,15 +25,15 @@
 }
 
 //Clock limits
-int ClkGovFreqDivisor       = 10;
-int ClkGovFreqChangeMaxPpb  = 1000;
-int ClkGovFreqSyncedLimPpb  = 1000;
-int ClkGovFreqSyncedHysPpb  =  100;
-int ClkGovSlewDivisor       = 10;
-int ClkGovSlewChangeMaxMs   = 10;
-int ClkGovSlewSyncedLimNs   = 10000000;
-int ClkGovSlewSyncedHysNs   =  1000000;
-int ClkGovSlewOffsetMaxSecs = 3;
+int ClkGovFreqDivisor         = 10;
+int ClkGovFreqChangeMaxPpb    = 1000;
+int ClkGovFreqSyncedLimPpb    = 1000;
+int ClkGovFreqSyncedHysPpb    =  100;
+int ClkGovSlewDivisor         = 10;
+int ClkGovSlewChangeMaxMs     = 10;
+int ClkGovSlewSyncedLimNs     = 10000000;
+int ClkGovSlewSyncedHysNs     =  1000000;
+int ClkGovSlewOffsetMaxSecs   = 3;
 
 bool ClkGovTrace = false;
 
@@ -42,7 +42,7 @@
 bool ClkGovRateIsSynced = false;
 bool ClkGovIsSynced() { return ClkGovRateIsSynced && ClkGovTimeIsSynced; }
 
-static void setSyncedTime(clktime diff)
+static void setTimeIsSyncedFlag(clktime diff)
 {
     clktime absDiff = llabs(diff);
     clktime limit      = ClkGovSlewSyncedLimNs;
@@ -50,16 +50,16 @@
 
     if (absDiff < limit - hysterisis)
     {
-        if (!ClkGovTimeIsSynced) LogTimeF("Time sync acquired\r\n");
+        if (!ClkGovTimeIsSynced) LogTimeF("CLK Time sync acquired\r\n");
         ClkGovTimeIsSynced = true;
     }
     if (absDiff > limit + hysterisis)
     {
-        if (ClkGovTimeIsSynced) LogTimeF("Time sync lost (difference = %+lld)\r\n", diff);
+        if (ClkGovTimeIsSynced) LogTimeF("CLK Time sync lost (difference = %+lld)\r\n", diff);
         ClkGovTimeIsSynced = false;
     }
 }
-static void setSyncedRate(clktime diff)
+static void setRateIsSyncedFlag(clktime diff)
 {
 
     clktime absDiff = llabs(diff);
@@ -68,12 +68,12 @@
 
     if (absDiff < limit - hysteresis)
     {
-        if (!ClkGovRateIsSynced) LogTimeF("Rate sync acquired\r\n");
+        if (!ClkGovRateIsSynced) LogTimeF("CLK Rate sync acquired\r\n");
         ClkGovRateIsSynced = true;
     }
     if (absDiff > limit + hysteresis)
     {
-        if ( ClkGovRateIsSynced) LogTimeF("Rate sync lost\r\n");
+        if ( ClkGovRateIsSynced) LogTimeF("CLK Rate sync lost\r\n");
         ClkGovRateIsSynced = false;
     }
 }
@@ -88,7 +88,7 @@
 
     slew = toAdd;
 
-    if (ClkGovTrace) LogTimeF("Sync setSlew diff %lld gives slew %lld gives TickSlew %ld\r\n", diff, toAdd, slew);
+    if (ClkGovTrace) LogTimeF("CLK setSlew diff %lld gives slew %lld gives TickSlew %ld\r\n", diff, toAdd, slew);
 }
 static void adjustPpb(clktime diff)
 {
@@ -100,7 +100,7 @@
 
     ClkGovSetPpb(ppb - toAdd);
 
-    if (ClkGovTrace) LogTimeF("Sync setPpb diff %lld gives toAdd %lld gives TickPpb %ld\r\n", diff, toAdd, ppb);
+    if (ClkGovTrace) LogTimeF("CLK setPpb diff %lld gives toAdd %lld gives TickPpb %ld\r\n", diff, toAdd, ppb);
 }
 
 static clktime lastIntClock = -1; //-1 indicates invalid value. 0 is a valid value.
@@ -118,7 +118,7 @@
 
     if (!ClkTimeIsSet() && thisExtClockIsComplete) //Cold start - only ever true if the RTC was not set.
     {
-        LogTimeF("Sync - cold start of clock so resetting\r\n");
+        LogTimeF("CLK cold start of clock so resetting\r\n");
         reset(thisExtClock);
         return;
     }
@@ -130,14 +130,20 @@
 
     //Calulate the time error
     clktime absDiff = thisAbsClock - thisExtClock;
+    if (llabs(absDiff) > ((clktime)1 << (CLK_TIME_ONE_SECOND_SHIFT - 1)))
+    {
+        LogTimeF("CLK offset %lld (this - ext) is greater than half a second\r\n", absDiff);
+        reset(thisExtClock);
+        return;
+    }
     if (llabs(absDiff) > ((clktime)ClkGovSlewOffsetMaxSecs << CLK_TIME_ONE_SECOND_SHIFT))
     {
-        LogTimeF("Sync - offset is greater than %d seconds so resetting\r\n", ClkGovSlewOffsetMaxSecs);
+        LogTimeF("CLK offset is greater than %d seconds so resetting\r\n", ClkGovSlewOffsetMaxSecs);
         reset(thisExtClock);
         return;
     }
     setSlew(absDiff);
-    setSyncedTime(absDiff);
+    setTimeIsSyncedFlag(absDiff);
 
     //Calculate the rate error
     if (lastExtClock > -1)
@@ -152,7 +158,7 @@
         else                                  ppbDiff = (periodDiff << CLK_TIME_ONE_SECOND_SHIFT) / extPeriod;
 
         adjustPpb(ppbDiff);
-        setSyncedRate(ppbDiff);
+        setRateIsSyncedFlag(ppbDiff);
     }
 
     //Save last values