A GPS disciplined clock

Dependencies:   net lpc1768 crypto clock web log

Revision:
8:2ef0f459bc83
Child:
11:baa388c55583
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/settings/settings.c	Sun Nov 18 15:49:05 2018 +0000
@@ -0,0 +1,157 @@
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include      "clock.h"
+#include        "log.h"
+#include        "net.h"
+#include       "link.h"
+#include        "dns.h"
+#include    "dnsname.h"
+#include   "dnsquery.h"
+#include   "dnsreply.h"
+#include  "dnsserver.h"
+#include        "ntp.h"
+#include       "dhcp.h"
+#include         "ns.h"
+#include        "nr4.h"
+#include        "nr6.h"
+#include       "sync.h"
+#include      "echo4.h"
+#include      "echo6.h"
+#include      "dest6.h"
+#include         "ra.h"
+#include         "rs.h"
+#include        "ar4.h"
+#include        "ar6.h"
+#include        "arp.h"
+#include        "ip4.h"
+#include        "ip6.h"
+#include        "udp.h"
+#include        "tcp.h"
+#include       "http.h"
+#include       "tftp.h"
+
+#define GPREG1 (*((volatile unsigned *) 0x40024048))
+#define GPREG2 (*((volatile unsigned *) 0x4002404C))
+#define GPREG3 (*((volatile unsigned *) 0x40024050))
+#define GPREG4 (*((volatile unsigned *) 0x40024054))
+#define ALMON  (*((volatile unsigned *) 0x40024078))
+#define ALYEAR (*((volatile unsigned *) 0x4002407C))
+
+enum { iLogUart, iNetStack, iNetNewLine, iNetVerbose, iLink, iDnsName, iDnsQuery, iDnsReply, iDnsServer,
+       iNtp, iDhcp, iNsRecvSol, iNsRecvAdv, iNsSendSol, iNr4, iNr6, iNtpClient, iSync, iEcho4, iEcho6,
+       iDest6, iRa, iRs, iAr4, iAr6, iArp, iIp4, iIp6, iUdp, iTcp, iHttp, iTftp };
+
+int GetGpsLat()   { return GPREG1; } void SetGpsLat  (int value) { GPREG1 = value; }
+int GetGpsLng()   { return GPREG2; } void SetGpsLng  (int value) { GPREG2 = value; }
+int GetGpsHgt()   { return GPREG3; } void SetGpsHgt  (int value) { GPREG3 = value; }
+
+static bool getBit(int bit)
+{
+    return GPREG4 & (1U << bit); 
+}
+static void setBit(int bit, bool value)
+{
+    if (value) GPREG4 |=   1U << bit ;
+    else       GPREG4 &= ~(1U << bit);
+}
+
+void SetTraceNetHost (char* text)
+{
+    int value = strtol(text, NULL, 16);
+    NetTraceHost[1] =  value       & 0xFF; //Little endian so low byte
+    NetTraceHost[0] = (value >> 8) & 0xFF; //high byte
+    ALMON  = value >> 12;    // 4 bits
+    ALYEAR = value & 0x3FFF; //12 bits
+}
+void ChgLogUart        () {       LogUart         =       !LogUart;         setBit(iLogUart,           LogUart       ); }
+void ChgTraceNetStack  () {       NetTraceStack   =       !NetTraceStack;   setBit(iNetStack,          NetTraceStack ); }
+void ChgTraceNetNewLine() {       NetTraceNewLine =       !NetTraceNewLine; setBit(iNetNewLine,       NetTraceNewLine); }
+void ChgTraceNetVerbose() {       NetTraceVerbose =       !NetTraceVerbose; setBit(iNetVerbose,       NetTraceVerbose); }
+void ChgTraceLink      () {      LinkTrace        =      !LinkTrace;        setBit(iLink,            LinkTrace       ); }
+void ChgTraceDnsName   () {   DnsNameTrace        =   !DnsNameTrace;        setBit(iDnsName,      DnsNameTrace       ); }
+void ChgTraceDnsQuery  () {  DnsQueryTrace        =  !DnsQueryTrace;        setBit(iDnsQuery,    DnsQueryTrace       ); }
+void ChgTraceDnsReply  () {  DnsReplyTrace        =  !DnsReplyTrace;        setBit(iDnsReply,    DnsReplyTrace       ); }
+void ChgTraceDnsServer () { DnsServerTrace        = !DnsServerTrace;        setBit(iDnsServer,  DnsServerTrace       ); }
+void ChgTraceNtp       () {       NtpTrace        =       !NtpTrace;        setBit(iNtp,              NtpTrace       ); }
+void ChgTraceDhcp      () {      DhcpTrace        =      !DhcpTrace;        setBit(iDhcp,            DhcpTrace       ); }
+void ChgTraceNsRecvSol () {        NsTraceRecvSol =        !NsTraceRecvSol; setBit(iNsRecvSol,         NsTraceRecvSol); }
+void ChgTraceNsRecvAdv () {        NsTraceRecvAdv =        !NsTraceRecvAdv; setBit(iNsRecvAdv,         NsTraceRecvAdv); }
+void ChgTraceNsSendSol () {        NsTraceSendSol =        !NsTraceSendSol; setBit(iNsSendSol,         NsTraceSendSol); }
+void ChgTraceNr4       () {       Nr4Trace        =       !Nr4Trace       ; setBit(iNr4,              Nr4Trace       ); }
+void ChgTraceNr6       () {       Nr6Trace        =       !Nr6Trace       ; setBit(iNr6,              Nr6Trace       ); }
+void ChgTraceNtpClient () { NtpClientTrace        = !NtpClientTrace       ; setBit(iNtpClient,  NtpClientTrace       ); }
+void ChgTraceSync      () {      SyncTrace        =      !SyncTrace       ; setBit(iSync,            SyncTrace       ); }
+void ChgTraceEcho4     () {     Echo4Trace        =     !Echo4Trace       ; setBit(iEcho4,          Echo4Trace       ); }
+void ChgTraceEcho6     () {     Echo6Trace        =     !Echo6Trace       ; setBit(iEcho6,          Echo6Trace       ); }
+void ChgTraceDest6     () {     Dest6Trace        =     !Dest6Trace       ; setBit(iDest6,          Dest6Trace       ); }
+void ChgTraceRa        () {        RaTrace        =        !RaTrace       ; setBit(iRa,                RaTrace       ); }
+void ChgTraceRs        () {        RsTrace        =        !RsTrace       ; setBit(iRs,                RsTrace       ); }
+void ChgTraceAr4       () {       Ar4Trace        =       !Ar4Trace       ; setBit(iAr4,              Ar4Trace       ); }
+void ChgTraceAr6       () {       Ar6Trace        =       !Ar6Trace       ; setBit(iAr6,              Ar6Trace       ); }
+void ChgTraceArp       () {       ArpTrace        =       !ArpTrace       ; setBit(iArp,              ArpTrace       ); }
+void ChgTraceIp4       () {       Ip4Trace        =       !Ip4Trace       ; setBit(iIp4,              Ip4Trace       ); }
+void ChgTraceIp6       () {       Ip6Trace        =       !Ip6Trace       ; setBit(iIp6,              Ip6Trace       ); }
+void ChgTraceUdp       () {       UdpTrace        =       !UdpTrace       ; setBit(iUdp,              UdpTrace       ); }
+void ChgTraceTcp       () {       TcpTrace        =       !TcpTrace       ; setBit(iTcp,              TcpTrace       ); }
+void ChgTraceHttp      () {      HttpTrace        =      !HttpTrace       ; setBit(iHttp,            HttpTrace       ); }
+void ChgTraceTftp      () {      TftpTrace        =      !TftpTrace       ; setBit(iTftp,            TftpTrace       ); }
+
+void ChgDnsSendRequestsViaIp4()  {  DnsSendRequestsViaIp4 =  !DnsSendRequestsViaIp4; }
+void ChgNtpSendRequestsViaIp4()  {  NtpSendRequestsViaIp4 =  !NtpSendRequestsViaIp4; }
+void ChgTftpSendRequestsViaIp4() { TftpSendRequestsViaIp4 = !TftpSendRequestsViaIp4; }
+
+int SettingsInit()
+{
+    ClockSlewDivisor       =       10;
+    ClockSlewMaxMs         =       20;
+    ClockPpbDivisor        =     1000;
+    ClockPpbChangeMax      = 10000000;
+    ClockSyncedLimitNs     =   100000;
+    ClockSyncedLimitPpb    =   100000;
+    ClockSyncedHysterisNs  =    10000;
+    ClockSyncedHysterisPpb =     1000;
+    ClockMaxOffsetSecs     =        3;
+    
+     DnsSendRequestsViaIp4 = false;
+     NtpSendRequestsViaIp4 = false;
+    TftpSendRequestsViaIp4 = true;
+    
+    NetTraceHost[1] =  ALYEAR & 0xFF;               //Little endian so low byte
+    NetTraceHost[0] = (ALMON << 4) + (ALYEAR >> 8); //high byte
+    
+          LogUart         = getBit(iLogUart);
+          NetTraceStack   = getBit(iNetStack);
+          NetTraceNewLine = getBit(iNetNewLine);
+          NetTraceVerbose = getBit(iNetVerbose);
+         LinkTrace        = getBit(iLink);
+      DnsNameTrace        = getBit(iDnsName);
+     DnsQueryTrace        = getBit(iDnsQuery);
+     DnsReplyTrace        = getBit(iDnsReply);
+    DnsServerTrace        = getBit(iDnsServer);
+          NtpTrace        = getBit(iNtp);
+         DhcpTrace        = getBit(iDhcp);
+           NsTraceRecvSol = getBit(iNsRecvSol);
+           NsTraceRecvAdv = getBit(iNsRecvAdv);
+           NsTraceSendSol = getBit(iNsSendSol);
+          Nr4Trace        = getBit(iNr4);
+          Nr6Trace        = getBit(iNr6);
+    NtpClientTrace        = getBit(iNtpClient);
+         SyncTrace        = getBit(iSync);
+        Echo4Trace        = getBit(iEcho4);
+        Echo6Trace        = getBit(iEcho6);
+        Dest6Trace        = getBit(iDest6);
+           RaTrace        = getBit(iRa);
+           RsTrace        = getBit(iRs);
+          Ar4Trace        = getBit(iAr4);
+          Ar6Trace        = getBit(iAr6);
+          ArpTrace        = getBit(iArp);
+          Ip4Trace        = getBit(iIp4);
+          Ip6Trace        = getBit(iIp6);
+          UdpTrace        = getBit(iUdp);
+          TcpTrace        = getBit(iTcp);
+         HttpTrace        = getBit(iHttp);
+         TftpTrace        = getBit(iTftp);
+
+    return 0;
+}