A GPS disciplined clock

Dependencies:   net lpc1768 crypto clock web log

Committer:
andrewboyson
Date:
Sun Nov 18 15:49:05 2018 +0000
Revision:
8:2ef0f459bc83
Child:
11:baa388c55583
New net library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 8:2ef0f459bc83 1 #include <stdlib.h>
andrewboyson 8:2ef0f459bc83 2 #include <stdbool.h>
andrewboyson 8:2ef0f459bc83 3
andrewboyson 8:2ef0f459bc83 4 #include "clock.h"
andrewboyson 8:2ef0f459bc83 5 #include "log.h"
andrewboyson 8:2ef0f459bc83 6 #include "net.h"
andrewboyson 8:2ef0f459bc83 7 #include "link.h"
andrewboyson 8:2ef0f459bc83 8 #include "dns.h"
andrewboyson 8:2ef0f459bc83 9 #include "dnsname.h"
andrewboyson 8:2ef0f459bc83 10 #include "dnsquery.h"
andrewboyson 8:2ef0f459bc83 11 #include "dnsreply.h"
andrewboyson 8:2ef0f459bc83 12 #include "dnsserver.h"
andrewboyson 8:2ef0f459bc83 13 #include "ntp.h"
andrewboyson 8:2ef0f459bc83 14 #include "dhcp.h"
andrewboyson 8:2ef0f459bc83 15 #include "ns.h"
andrewboyson 8:2ef0f459bc83 16 #include "nr4.h"
andrewboyson 8:2ef0f459bc83 17 #include "nr6.h"
andrewboyson 8:2ef0f459bc83 18 #include "sync.h"
andrewboyson 8:2ef0f459bc83 19 #include "echo4.h"
andrewboyson 8:2ef0f459bc83 20 #include "echo6.h"
andrewboyson 8:2ef0f459bc83 21 #include "dest6.h"
andrewboyson 8:2ef0f459bc83 22 #include "ra.h"
andrewboyson 8:2ef0f459bc83 23 #include "rs.h"
andrewboyson 8:2ef0f459bc83 24 #include "ar4.h"
andrewboyson 8:2ef0f459bc83 25 #include "ar6.h"
andrewboyson 8:2ef0f459bc83 26 #include "arp.h"
andrewboyson 8:2ef0f459bc83 27 #include "ip4.h"
andrewboyson 8:2ef0f459bc83 28 #include "ip6.h"
andrewboyson 8:2ef0f459bc83 29 #include "udp.h"
andrewboyson 8:2ef0f459bc83 30 #include "tcp.h"
andrewboyson 8:2ef0f459bc83 31 #include "http.h"
andrewboyson 8:2ef0f459bc83 32 #include "tftp.h"
andrewboyson 8:2ef0f459bc83 33
andrewboyson 8:2ef0f459bc83 34 #define GPREG1 (*((volatile unsigned *) 0x40024048))
andrewboyson 8:2ef0f459bc83 35 #define GPREG2 (*((volatile unsigned *) 0x4002404C))
andrewboyson 8:2ef0f459bc83 36 #define GPREG3 (*((volatile unsigned *) 0x40024050))
andrewboyson 8:2ef0f459bc83 37 #define GPREG4 (*((volatile unsigned *) 0x40024054))
andrewboyson 8:2ef0f459bc83 38 #define ALMON (*((volatile unsigned *) 0x40024078))
andrewboyson 8:2ef0f459bc83 39 #define ALYEAR (*((volatile unsigned *) 0x4002407C))
andrewboyson 8:2ef0f459bc83 40
andrewboyson 8:2ef0f459bc83 41 enum { iLogUart, iNetStack, iNetNewLine, iNetVerbose, iLink, iDnsName, iDnsQuery, iDnsReply, iDnsServer,
andrewboyson 8:2ef0f459bc83 42 iNtp, iDhcp, iNsRecvSol, iNsRecvAdv, iNsSendSol, iNr4, iNr6, iNtpClient, iSync, iEcho4, iEcho6,
andrewboyson 8:2ef0f459bc83 43 iDest6, iRa, iRs, iAr4, iAr6, iArp, iIp4, iIp6, iUdp, iTcp, iHttp, iTftp };
andrewboyson 8:2ef0f459bc83 44
andrewboyson 8:2ef0f459bc83 45 int GetGpsLat() { return GPREG1; } void SetGpsLat (int value) { GPREG1 = value; }
andrewboyson 8:2ef0f459bc83 46 int GetGpsLng() { return GPREG2; } void SetGpsLng (int value) { GPREG2 = value; }
andrewboyson 8:2ef0f459bc83 47 int GetGpsHgt() { return GPREG3; } void SetGpsHgt (int value) { GPREG3 = value; }
andrewboyson 8:2ef0f459bc83 48
andrewboyson 8:2ef0f459bc83 49 static bool getBit(int bit)
andrewboyson 8:2ef0f459bc83 50 {
andrewboyson 8:2ef0f459bc83 51 return GPREG4 & (1U << bit);
andrewboyson 8:2ef0f459bc83 52 }
andrewboyson 8:2ef0f459bc83 53 static void setBit(int bit, bool value)
andrewboyson 8:2ef0f459bc83 54 {
andrewboyson 8:2ef0f459bc83 55 if (value) GPREG4 |= 1U << bit ;
andrewboyson 8:2ef0f459bc83 56 else GPREG4 &= ~(1U << bit);
andrewboyson 8:2ef0f459bc83 57 }
andrewboyson 8:2ef0f459bc83 58
andrewboyson 8:2ef0f459bc83 59 void SetTraceNetHost (char* text)
andrewboyson 8:2ef0f459bc83 60 {
andrewboyson 8:2ef0f459bc83 61 int value = strtol(text, NULL, 16);
andrewboyson 8:2ef0f459bc83 62 NetTraceHost[1] = value & 0xFF; //Little endian so low byte
andrewboyson 8:2ef0f459bc83 63 NetTraceHost[0] = (value >> 8) & 0xFF; //high byte
andrewboyson 8:2ef0f459bc83 64 ALMON = value >> 12; // 4 bits
andrewboyson 8:2ef0f459bc83 65 ALYEAR = value & 0x3FFF; //12 bits
andrewboyson 8:2ef0f459bc83 66 }
andrewboyson 8:2ef0f459bc83 67 void ChgLogUart () { LogUart = !LogUart; setBit(iLogUart, LogUart ); }
andrewboyson 8:2ef0f459bc83 68 void ChgTraceNetStack () { NetTraceStack = !NetTraceStack; setBit(iNetStack, NetTraceStack ); }
andrewboyson 8:2ef0f459bc83 69 void ChgTraceNetNewLine() { NetTraceNewLine = !NetTraceNewLine; setBit(iNetNewLine, NetTraceNewLine); }
andrewboyson 8:2ef0f459bc83 70 void ChgTraceNetVerbose() { NetTraceVerbose = !NetTraceVerbose; setBit(iNetVerbose, NetTraceVerbose); }
andrewboyson 8:2ef0f459bc83 71 void ChgTraceLink () { LinkTrace = !LinkTrace; setBit(iLink, LinkTrace ); }
andrewboyson 8:2ef0f459bc83 72 void ChgTraceDnsName () { DnsNameTrace = !DnsNameTrace; setBit(iDnsName, DnsNameTrace ); }
andrewboyson 8:2ef0f459bc83 73 void ChgTraceDnsQuery () { DnsQueryTrace = !DnsQueryTrace; setBit(iDnsQuery, DnsQueryTrace ); }
andrewboyson 8:2ef0f459bc83 74 void ChgTraceDnsReply () { DnsReplyTrace = !DnsReplyTrace; setBit(iDnsReply, DnsReplyTrace ); }
andrewboyson 8:2ef0f459bc83 75 void ChgTraceDnsServer () { DnsServerTrace = !DnsServerTrace; setBit(iDnsServer, DnsServerTrace ); }
andrewboyson 8:2ef0f459bc83 76 void ChgTraceNtp () { NtpTrace = !NtpTrace; setBit(iNtp, NtpTrace ); }
andrewboyson 8:2ef0f459bc83 77 void ChgTraceDhcp () { DhcpTrace = !DhcpTrace; setBit(iDhcp, DhcpTrace ); }
andrewboyson 8:2ef0f459bc83 78 void ChgTraceNsRecvSol () { NsTraceRecvSol = !NsTraceRecvSol; setBit(iNsRecvSol, NsTraceRecvSol); }
andrewboyson 8:2ef0f459bc83 79 void ChgTraceNsRecvAdv () { NsTraceRecvAdv = !NsTraceRecvAdv; setBit(iNsRecvAdv, NsTraceRecvAdv); }
andrewboyson 8:2ef0f459bc83 80 void ChgTraceNsSendSol () { NsTraceSendSol = !NsTraceSendSol; setBit(iNsSendSol, NsTraceSendSol); }
andrewboyson 8:2ef0f459bc83 81 void ChgTraceNr4 () { Nr4Trace = !Nr4Trace ; setBit(iNr4, Nr4Trace ); }
andrewboyson 8:2ef0f459bc83 82 void ChgTraceNr6 () { Nr6Trace = !Nr6Trace ; setBit(iNr6, Nr6Trace ); }
andrewboyson 8:2ef0f459bc83 83 void ChgTraceNtpClient () { NtpClientTrace = !NtpClientTrace ; setBit(iNtpClient, NtpClientTrace ); }
andrewboyson 8:2ef0f459bc83 84 void ChgTraceSync () { SyncTrace = !SyncTrace ; setBit(iSync, SyncTrace ); }
andrewboyson 8:2ef0f459bc83 85 void ChgTraceEcho4 () { Echo4Trace = !Echo4Trace ; setBit(iEcho4, Echo4Trace ); }
andrewboyson 8:2ef0f459bc83 86 void ChgTraceEcho6 () { Echo6Trace = !Echo6Trace ; setBit(iEcho6, Echo6Trace ); }
andrewboyson 8:2ef0f459bc83 87 void ChgTraceDest6 () { Dest6Trace = !Dest6Trace ; setBit(iDest6, Dest6Trace ); }
andrewboyson 8:2ef0f459bc83 88 void ChgTraceRa () { RaTrace = !RaTrace ; setBit(iRa, RaTrace ); }
andrewboyson 8:2ef0f459bc83 89 void ChgTraceRs () { RsTrace = !RsTrace ; setBit(iRs, RsTrace ); }
andrewboyson 8:2ef0f459bc83 90 void ChgTraceAr4 () { Ar4Trace = !Ar4Trace ; setBit(iAr4, Ar4Trace ); }
andrewboyson 8:2ef0f459bc83 91 void ChgTraceAr6 () { Ar6Trace = !Ar6Trace ; setBit(iAr6, Ar6Trace ); }
andrewboyson 8:2ef0f459bc83 92 void ChgTraceArp () { ArpTrace = !ArpTrace ; setBit(iArp, ArpTrace ); }
andrewboyson 8:2ef0f459bc83 93 void ChgTraceIp4 () { Ip4Trace = !Ip4Trace ; setBit(iIp4, Ip4Trace ); }
andrewboyson 8:2ef0f459bc83 94 void ChgTraceIp6 () { Ip6Trace = !Ip6Trace ; setBit(iIp6, Ip6Trace ); }
andrewboyson 8:2ef0f459bc83 95 void ChgTraceUdp () { UdpTrace = !UdpTrace ; setBit(iUdp, UdpTrace ); }
andrewboyson 8:2ef0f459bc83 96 void ChgTraceTcp () { TcpTrace = !TcpTrace ; setBit(iTcp, TcpTrace ); }
andrewboyson 8:2ef0f459bc83 97 void ChgTraceHttp () { HttpTrace = !HttpTrace ; setBit(iHttp, HttpTrace ); }
andrewboyson 8:2ef0f459bc83 98 void ChgTraceTftp () { TftpTrace = !TftpTrace ; setBit(iTftp, TftpTrace ); }
andrewboyson 8:2ef0f459bc83 99
andrewboyson 8:2ef0f459bc83 100 void ChgDnsSendRequestsViaIp4() { DnsSendRequestsViaIp4 = !DnsSendRequestsViaIp4; }
andrewboyson 8:2ef0f459bc83 101 void ChgNtpSendRequestsViaIp4() { NtpSendRequestsViaIp4 = !NtpSendRequestsViaIp4; }
andrewboyson 8:2ef0f459bc83 102 void ChgTftpSendRequestsViaIp4() { TftpSendRequestsViaIp4 = !TftpSendRequestsViaIp4; }
andrewboyson 8:2ef0f459bc83 103
andrewboyson 8:2ef0f459bc83 104 int SettingsInit()
andrewboyson 8:2ef0f459bc83 105 {
andrewboyson 8:2ef0f459bc83 106 ClockSlewDivisor = 10;
andrewboyson 8:2ef0f459bc83 107 ClockSlewMaxMs = 20;
andrewboyson 8:2ef0f459bc83 108 ClockPpbDivisor = 1000;
andrewboyson 8:2ef0f459bc83 109 ClockPpbChangeMax = 10000000;
andrewboyson 8:2ef0f459bc83 110 ClockSyncedLimitNs = 100000;
andrewboyson 8:2ef0f459bc83 111 ClockSyncedLimitPpb = 100000;
andrewboyson 8:2ef0f459bc83 112 ClockSyncedHysterisNs = 10000;
andrewboyson 8:2ef0f459bc83 113 ClockSyncedHysterisPpb = 1000;
andrewboyson 8:2ef0f459bc83 114 ClockMaxOffsetSecs = 3;
andrewboyson 8:2ef0f459bc83 115
andrewboyson 8:2ef0f459bc83 116 DnsSendRequestsViaIp4 = false;
andrewboyson 8:2ef0f459bc83 117 NtpSendRequestsViaIp4 = false;
andrewboyson 8:2ef0f459bc83 118 TftpSendRequestsViaIp4 = true;
andrewboyson 8:2ef0f459bc83 119
andrewboyson 8:2ef0f459bc83 120 NetTraceHost[1] = ALYEAR & 0xFF; //Little endian so low byte
andrewboyson 8:2ef0f459bc83 121 NetTraceHost[0] = (ALMON << 4) + (ALYEAR >> 8); //high byte
andrewboyson 8:2ef0f459bc83 122
andrewboyson 8:2ef0f459bc83 123 LogUart = getBit(iLogUart);
andrewboyson 8:2ef0f459bc83 124 NetTraceStack = getBit(iNetStack);
andrewboyson 8:2ef0f459bc83 125 NetTraceNewLine = getBit(iNetNewLine);
andrewboyson 8:2ef0f459bc83 126 NetTraceVerbose = getBit(iNetVerbose);
andrewboyson 8:2ef0f459bc83 127 LinkTrace = getBit(iLink);
andrewboyson 8:2ef0f459bc83 128 DnsNameTrace = getBit(iDnsName);
andrewboyson 8:2ef0f459bc83 129 DnsQueryTrace = getBit(iDnsQuery);
andrewboyson 8:2ef0f459bc83 130 DnsReplyTrace = getBit(iDnsReply);
andrewboyson 8:2ef0f459bc83 131 DnsServerTrace = getBit(iDnsServer);
andrewboyson 8:2ef0f459bc83 132 NtpTrace = getBit(iNtp);
andrewboyson 8:2ef0f459bc83 133 DhcpTrace = getBit(iDhcp);
andrewboyson 8:2ef0f459bc83 134 NsTraceRecvSol = getBit(iNsRecvSol);
andrewboyson 8:2ef0f459bc83 135 NsTraceRecvAdv = getBit(iNsRecvAdv);
andrewboyson 8:2ef0f459bc83 136 NsTraceSendSol = getBit(iNsSendSol);
andrewboyson 8:2ef0f459bc83 137 Nr4Trace = getBit(iNr4);
andrewboyson 8:2ef0f459bc83 138 Nr6Trace = getBit(iNr6);
andrewboyson 8:2ef0f459bc83 139 NtpClientTrace = getBit(iNtpClient);
andrewboyson 8:2ef0f459bc83 140 SyncTrace = getBit(iSync);
andrewboyson 8:2ef0f459bc83 141 Echo4Trace = getBit(iEcho4);
andrewboyson 8:2ef0f459bc83 142 Echo6Trace = getBit(iEcho6);
andrewboyson 8:2ef0f459bc83 143 Dest6Trace = getBit(iDest6);
andrewboyson 8:2ef0f459bc83 144 RaTrace = getBit(iRa);
andrewboyson 8:2ef0f459bc83 145 RsTrace = getBit(iRs);
andrewboyson 8:2ef0f459bc83 146 Ar4Trace = getBit(iAr4);
andrewboyson 8:2ef0f459bc83 147 Ar6Trace = getBit(iAr6);
andrewboyson 8:2ef0f459bc83 148 ArpTrace = getBit(iArp);
andrewboyson 8:2ef0f459bc83 149 Ip4Trace = getBit(iIp4);
andrewboyson 8:2ef0f459bc83 150 Ip6Trace = getBit(iIp6);
andrewboyson 8:2ef0f459bc83 151 UdpTrace = getBit(iUdp);
andrewboyson 8:2ef0f459bc83 152 TcpTrace = getBit(iTcp);
andrewboyson 8:2ef0f459bc83 153 HttpTrace = getBit(iHttp);
andrewboyson 8:2ef0f459bc83 154 TftpTrace = getBit(iTftp);
andrewboyson 8:2ef0f459bc83 155
andrewboyson 8:2ef0f459bc83 156 return 0;
andrewboyson 8:2ef0f459bc83 157 }