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
clock/http-clock-script.inc
- Committer:
- andrewboyson
- Date:
- 2019-04-16
- Revision:
- 94:d7226b2c14b6
- Parent:
- 77:4689596a2f3f
- Child:
- 95:8c9dda8a0caf
File content as of revision 94:d7226b2c14b6:
"//Clock script\n"
"'use strict';\n"
"\n"
"let pseudo = new Utc();\n"
"let rtc = new Utc();\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"
"let leapmonths1970 = 0;\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"
"const SERVER = '/clock-ajax';\n"
"\n"
"function parseDate()\n"
"{\n"
" let iDateStart = BaseHeaders.toLowerCase().indexOf('date:');\n"
" let iDateEnd = BaseHeaders.indexOf('\\r', iDateStart);\n"
" let rtcDate = new Date(BaseHeaders.slice(iDateStart + 5, iDateEnd));\n"
" rtc.ms = rtcDate.getTime();\n"
"}\n"
"\n"
"function parseLinesTime(text)\n"
"{\n"
" let lines = text.split('\\n');\n"
" rtc.ms += parseInt(lines[0], 16);\n"
" rtc.ms -= BaseMs;\n"
" diffMs = rtc.ms + BaseMs - Date.now();\n"
" rtcIsSet = hexToBit(lines[1], 0);\n"
" clockIsSet = hexToBit(lines[1], 1);\n"
" sourceIsOk = hexToBit(lines[1], 2);\n"
" rateIsLocked = hexToBit(lines[1], 3);\n"
" timeIsLocked = hexToBit(lines[1], 4);\n"
" rtc.leapEnable = hexToBit(lines[1], 5);\n"
" rtc.leapForward = hexToBit(lines[1], 6);\n"
" govTrace = hexToBit(lines[1], 7);\n"
" leapmonths1970 = parseInt(lines[2], 16);\n"
" rtc.leapMonth = leapmonths1970 % 12;\n"
" rtc.leapYear = (leapmonths1970 - rtc.leapMonth) / 12;\n"
" rtc.leapMonth += 1;\n"
" rtc.leapYear += 1970;\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 DerivedParse()\n"
"{\n"
" let topics = BaseResponse.split('\\f');\n"
" parseDate();\n"
" parseLinesTime(topics[0]);\n"
" parseLinesGov (topics[1]);\n"
" parseLinesNtp (topics[2]);\n"
" parseLinesScan(topics[3]);\n"
"}\n"
"function DerivedDisplay()\n"
"{\n"
" let elem;\n"
" elem = getElementOrNull('ajax-rtc-set' ); if (elem) elem.setAttribute('dir', rtcIsSet ? 'rtl' : 'ltr');\n"
" elem = getElementOrNull('ajax-clock-set' ); if (elem) elem.setAttribute('dir', clockIsSet ? 'rtl' : 'ltr');\n"
" elem = getElementOrNull('ajax-source-ok' ); if (elem) elem.setAttribute('dir', sourceIsOk ? 'rtl' : 'ltr');\n"
" elem = getElementOrNull('ajax-rate-locked' ); if (elem) elem.setAttribute('dir', rateIsLocked ? 'rtl' : 'ltr');\n"
" elem = getElementOrNull('ajax-time-locked' ); if (elem) elem.setAttribute('dir', timeIsLocked ? 'rtl' : 'ltr');\n"
" \n"
" elem = getElementOrNull('ajax-leap-enable' ); if (elem) elem.setAttribute('dir', rtc.leapEnable ? 'rtl' : 'ltr');\n"
" elem = getElementOrNull('ajax-leap-forward' ); if (elem) elem.setAttribute('dir', rtc.leapForward ? 'rtl' : 'ltr');\n"
" \n"
" elem = getElementOrNull('ajax-leap-year' ); if (elem) elem.value = leapmonths1970 ? rtc.leapYear : '';\n"
" elem = getElementOrNull('ajax-leap-month' ); if (elem) elem.value = leapmonths1970 ? rtc.leapMonth : '';\n"
" \n"
" elem = getElementOrNull('ajax-leap-count' ); if (elem) elem.value = rtc.leaps;\n"
" \n"
" elem = getElementOrNull('ajax-ppb' ); if (elem) elem.value = ppb;\n"
" elem = getElementOrNull('ajax-ppb-divisor' ); if (elem) elem.value = ppbdivisor;\n"
" elem = getElementOrNull('ajax-ppb-max-chg' ); if (elem) elem.value = ppbmaxchange;\n"
" elem = getElementOrNull('ajax-ppb-syn-lim' ); if (elem) elem.value = syncedlimitppb;\n"
" elem = getElementOrNull('ajax-ppb-syn-hys' ); if (elem) elem.value = syncedhysppb;\n"
" elem = getElementOrNull('ajax-off-divisor' ); if (elem) elem.value = slewdivisor;\n"
" elem = getElementOrNull('ajax-off-max' ); if (elem) elem.value = slewmax;\n"
" elem = getElementOrNull('ajax-off-syn-lim' ); if (elem) elem.value = syncedlimitns / 1000000;\n"
" elem = getElementOrNull('ajax-off-syn-hys' ); if (elem) elem.value = syncedhysns / 1000000;\n"
" elem = getElementOrNull('ajax-off-rst-lim' ); if (elem) elem.value = maxoffsetsecs;\n"
" elem = getElementOrNull('ajax-gov-trace' ); if (elem) elem.setAttribute('dir', govTrace ? 'rtl' : 'ltr');\n"
" \n"
" elem = getElementOrNull('ajax-ntp-server' ); if (elem) elem.value = ntpserver;\n"
" elem = getElementOrNull('ajax-ntp-initial' ); if (elem) elem.value = ntpinitial;\n"
" elem = getElementOrNull('ajax-ntp-normal' ); if (elem) elem.value = ntpnormal / 60;\n"
" elem = getElementOrNull('ajax-ntp-retry' ); if (elem) elem.value = ntpretry;\n"
" elem = getElementOrNull('ajax-ntp-offset' ); if (elem) elem.value = ntpoffset;\n"
" elem = getElementOrNull('ajax-ntp-max-delay'); if (elem) elem.value = ntpmaxdelay;\n"
" \n"
" elem = getElementOrNull('ajax-scan-avg' ); if (elem) elem.textContent = scanavg;\n"
" elem = getElementOrNull('ajax-scan-max' ); if (elem) elem.textContent = scanmax;\n"
" elem = getElementOrNull('ajax-scan-min' ); if (elem) elem.textContent = scanmin;\n"
" \n"
" elem = getElementOrNull('ajax-date-diff' ); if (elem) elem.textContent = diffMs;\n"
"}\n"
"\n"
"function DerivedTick() //This typically called every 100ms\n"
"{\n"
" if (pseudoDisplay)\n"
" {\n"
" pseudo.adjustLeap (BaseMs);\n"
" pseudo.displayTime(BaseMs);\n"
" if (BaseMs >= pseudoStartMs + DISPLAY_LEAP_MS + 500) pseudoDisplay = false;\n"
" }\n"
" else\n"
" {\n"
" rtc.adjustLeap (BaseMs);\n"
" rtc.displayTime(BaseMs);\n"
" }\n"
"}\n"
"\n"
"function DisplayLeap() //Called by display leap button in HTML\n"
"{\n"
" pseudoDisplay = true;\n"
" pseudoStartMs = BaseMs;\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 - BaseMs;\n"
"}\n"
""