Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: oldheating gps motorhome heating
base/clock/web-clock-script.inc
- Committer:
- andrewboyson
- Date:
- 2019-07-31
- Revision:
- 127:bd6dd135009d
- Parent:
- 110:8ab752842d25
File content as of revision 127:bd6dd135009d:
"//Clock script\n" "'use strict';\n" "\n" "let pseudo = new Clock();\n" "let rtc = new Clock();\n" "\n" "let pseudoDisplay = false;\n" "let pseudoStartMs = 0;\n" "\n" "let diffMs = 0;\n" "let rtcIsSet = false;\n" "let clockIsSet = false;\n" "let sourceIsOk = false;\n" "let rateIsLocked = false;\n" "let timeIsLocked = false;\n" "\n" "let ppb = 0;\n" "let ppbdivisor = 0;\n" "let ppbmaxchange = 0;\n" "let syncedlimitppb = 0;\n" "let syncedhysppb = 0;\n" "let slewdivisor = 0;\n" "let slewmax = 0;\n" "let syncedlimitns = 0;\n" "let syncedhysns = 0;\n" "let maxoffsetsecs = 0;\n" "let govTrace = false;\n" "\n" "let ntpserver = '';\n" "let ntpinitial = 0;\n" "let ntpnormal = 0;\n" "let ntpretry = 0;\n" "let ntpoffset = 0;\n" "let ntpmaxdelay = 0;\n" "\n" "let scanavg = 0;\n" "let scanmax = 0;\n" "let scanmin = 0;\n" "\n" "const DISPLAY_LEAP_MS = 10000;\n" "\n" "function parseLinesTime(text)\n" "{\n" " let lines = text.split('\\n');\n" " rtc.ms = Ajax.date.getTime();\n" " rtc.ms += parseInt(lines[0], 16);\n" " rtc.ms -= Ajax.ms;\n" " diffMs = rtc.ms + Ajax.ms - Date.now();\n" " rtcIsSet = Ajax.hexToBit(lines[1], 0);\n" " clockIsSet = Ajax.hexToBit(lines[1], 1);\n" " sourceIsOk = Ajax.hexToBit(lines[1], 2);\n" " rateIsLocked = Ajax.hexToBit(lines[1], 3);\n" " timeIsLocked = Ajax.hexToBit(lines[1], 4);\n" " rtc.leapEnable = Ajax.hexToBit(lines[1], 5);\n" " rtc.leapForward = Ajax.hexToBit(lines[1], 6);\n" " govTrace = Ajax.hexToBit(lines[1], 7);\n" " rtc.months1970 = parseInt(lines[2], 16);\n" " rtc.leaps = parseInt(lines[3], 16);\n" "}\n" "function parseLinesGov(text)\n" "{\n" " let lines = text.split('\\n');\n" " ppb = parseInt(lines[0], 16);\n" " ppbdivisor = parseInt(lines[1], 16);\n" " ppbmaxchange = parseInt(lines[2], 16);\n" " syncedlimitppb = parseInt(lines[3], 16);\n" " syncedhysppb = parseInt(lines[4], 16);\n" " slewdivisor = parseInt(lines[5], 16);\n" " slewmax = parseInt(lines[6], 16);\n" " syncedlimitns = parseInt(lines[7], 16);\n" " syncedhysns = parseInt(lines[8], 16);\n" " maxoffsetsecs = parseInt(lines[9], 16);\n" "}\n" "function parseLinesNtp(text)\n" "{\n" " let lines = text.split('\\n');\n" " ntpserver = lines[0];\n" " ntpinitial = parseInt(lines[1], 16);\n" " ntpnormal = parseInt(lines[2], 16);\n" " ntpretry = parseInt(lines[3], 16);\n" " ntpoffset = parseInt(lines[4], 16);\n" " ntpmaxdelay = parseInt(lines[5], 16);\n" "}\n" "function parseLinesScan(text)\n" "{\n" " let lines = text.split('\\n');\n" " scanavg = parseInt(lines[0], 16);\n" " scanmax = parseInt(lines[1], 16);\n" " scanmin = parseInt(lines[2], 16);\n" "}\n" "function parse()\n" "{\n" " let topics = Ajax.response.split('\\f');\n" " parseLinesTime(topics[0]);\n" " parseLinesGov (topics[1]);\n" " parseLinesNtp (topics[2]);\n" " parseLinesScan(topics[3]);\n" "}\n" "function display()\n" "{\n" " let elem;\n" " elem = Ajax.getElementOrNull('ajax-rtc-set' ); if (elem) elem.setAttribute('dir', rtcIsSet ? 'rtl' : 'ltr');\n" " elem = Ajax.getElementOrNull('ajax-clock-set' ); if (elem) elem.setAttribute('dir', clockIsSet ? 'rtl' : 'ltr');\n" " elem = Ajax.getElementOrNull('ajax-source-ok' ); if (elem) elem.setAttribute('dir', sourceIsOk ? 'rtl' : 'ltr');\n" " elem = Ajax.getElementOrNull('ajax-rate-locked' ); if (elem) elem.setAttribute('dir', rateIsLocked ? 'rtl' : 'ltr');\n" " elem = Ajax.getElementOrNull('ajax-time-locked' ); if (elem) elem.setAttribute('dir', timeIsLocked ? 'rtl' : 'ltr');\n" " \n" " elem = Ajax.getElementOrNull('ajax-leap-enable' ); if (elem) elem.setAttribute('dir', rtc.leapEnable ? 'rtl' : 'ltr');\n" " elem = Ajax.getElementOrNull('ajax-leap-forward' ); if (elem) elem.setAttribute('dir', rtc.leapForward ? 'rtl' : 'ltr');\n" " \n" " elem = Ajax.getElementOrNull('ajax-leap-year' ); if (elem) elem.value = rtc.months1970 ? rtc.leapYear : '';\n" " elem = Ajax.getElementOrNull('ajax-leap-month' ); if (elem) elem.value = rtc.months1970 ? rtc.leapMonth : '';\n" " \n" " elem = Ajax.getElementOrNull('ajax-leap-count' ); if (elem) elem.value = rtc.leaps;\n" " \n" " elem = Ajax.getElementOrNull('ajax-ppb' ); if (elem) elem.value = ppb;\n" " elem = Ajax.getElementOrNull('ajax-ppb-divisor' ); if (elem) elem.value = ppbdivisor;\n" " elem = Ajax.getElementOrNull('ajax-ppb-max-chg' ); if (elem) elem.value = ppbmaxchange;\n" " elem = Ajax.getElementOrNull('ajax-ppb-syn-lim' ); if (elem) elem.value = syncedlimitppb;\n" " elem = Ajax.getElementOrNull('ajax-ppb-syn-hys' ); if (elem) elem.value = syncedhysppb;\n" " elem = Ajax.getElementOrNull('ajax-off-divisor' ); if (elem) elem.value = slewdivisor;\n" " elem = Ajax.getElementOrNull('ajax-off-max' ); if (elem) elem.value = slewmax;\n" " elem = Ajax.getElementOrNull('ajax-off-syn-lim' ); if (elem) elem.value = syncedlimitns / 1000000;\n" " elem = Ajax.getElementOrNull('ajax-off-syn-hys' ); if (elem) elem.value = syncedhysns / 1000000;\n" " elem = Ajax.getElementOrNull('ajax-off-rst-lim' ); if (elem) elem.value = maxoffsetsecs;\n" " elem = Ajax.getElementOrNull('ajax-gov-trace' ); if (elem) elem.setAttribute('dir', govTrace ? 'rtl' : 'ltr');\n" " \n" " elem = Ajax.getElementOrNull('ajax-ntp-server' ); if (elem) elem.value = ntpserver;\n" " elem = Ajax.getElementOrNull('ajax-ntp-initial' ); if (elem) elem.value = ntpinitial;\n" " elem = Ajax.getElementOrNull('ajax-ntp-normal' ); if (elem) elem.value = ntpnormal / 60;\n" " elem = Ajax.getElementOrNull('ajax-ntp-retry' ); if (elem) elem.value = ntpretry;\n" " elem = Ajax.getElementOrNull('ajax-ntp-offset' ); if (elem) elem.value = ntpoffset;\n" " elem = Ajax.getElementOrNull('ajax-ntp-max-delay'); if (elem) elem.value = ntpmaxdelay;\n" " \n" " elem = Ajax.getElementOrNull('ajax-scan-avg' ); if (elem) elem.textContent = scanavg;\n" " elem = Ajax.getElementOrNull('ajax-scan-max' ); if (elem) elem.textContent = scanmax;\n" " elem = Ajax.getElementOrNull('ajax-scan-min' ); if (elem) elem.textContent = scanmin;\n" " \n" " elem = Ajax.getElementOrNull('ajax-date-diff' ); if (elem) elem.textContent = diffMs;\n" "}\n" "\n" "function handleTick() //This typically called every 100ms\n" "{\n" " if (pseudoDisplay)\n" " {\n" " pseudo.adjustLeap (Ajax.ms);\n" " pseudo.displayTime(Ajax.ms);\n" " if (Ajax.ms >= pseudoStartMs + DISPLAY_LEAP_MS + 500) pseudoDisplay = false;\n" " }\n" " else\n" " {\n" " rtc.adjustLeap (Ajax.ms);\n" " rtc.displayTime(Ajax.ms);\n" " }\n" "}\n" "\n" "function displayLeap() //Called by display leap button in HTML\n" "{\n" " pseudoDisplay = true;\n" " pseudoStartMs = Ajax.ms;\n" " \n" " pseudo.leapEnable = true;\n" " pseudo.leapForward = rtc.leapForward;\n" " pseudo.leaps = rtc.leaps;\n" " pseudo.leapMonth = rtc.leapMonth;\n" " pseudo.leapYear = rtc.leapYear;\n" " pseudo.ms = Date.UTC(rtc.leapYear, rtc.leapMonth - 1, 1) - DISPLAY_LEAP_MS / 2 - Ajax.ms;\n" "}\n" "Ajax.server = '/clock-ajax';\n" "Ajax.onResponse = function() { parse(); display(); };\n" "Ajax.onTick = handleTick;\n" "Ajax.init();"