A GPS disciplined clock
Dependencies: net lpc1768 crypto clock web log
Diff: settings/settings.c
- 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; +}