A GPS disciplined clock

Dependencies:   net lpc1768 crypto clock web log

settings/settings.c

Committer:
andrewboyson
Date:
2018-11-18
Revision:
8:2ef0f459bc83
Child:
11:baa388c55583

File content as of revision 8:2ef0f459bc83:

#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;
}