A GPS disciplined clock
Dependencies: net lpc1768 crypto clock web log
web-this/nmea/web-nmea-script.inc@97:af023452967f, 2020-05-06 (annotated)
- Committer:
- andrewboyson
- Date:
- Wed May 06 18:40:02 2020 +0000
- Revision:
- 97:af023452967f
- Parent:
- 60:7cab896b0fd4
Changed PPS timeout to 8000ms (it was 1000ms)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andrewboyson | 60:7cab896b0fd4 | 1 | "//Nmea script\n" |
andrewboyson | 48:9f1ab7784067 | 2 | "'use strict';\n" |
andrewboyson | 48:9f1ab7784067 | 3 | "\n" |
andrewboyson | 49:115a5e4fac0c | 4 | "const NMEA_DEG_UNIT = 10000000;\n" |
andrewboyson | 49:115a5e4fac0c | 5 | "const NMEA_HGT_UNIT = 1000000;\n" |
andrewboyson | 49:115a5e4fac0c | 6 | "\n" |
andrewboyson | 60:7cab896b0fd4 | 7 | "let gpsTrace = false;\n" |
andrewboyson | 60:7cab896b0fd4 | 8 | "let gpsVerbose = false;\n" |
andrewboyson | 60:7cab896b0fd4 | 9 | "let msgTrace = false;\n" |
andrewboyson | 60:7cab896b0fd4 | 10 | "let cmdTrace = false;\n" |
andrewboyson | 60:7cab896b0fd4 | 11 | "let lat = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 12 | "let lng = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 13 | "let hgt = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 14 | "let hgtAboveMsl = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 15 | "let mslAboveWgs = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 16 | "let dop = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 17 | "let satCount = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 18 | "let fixQuality = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 19 | "let sensorHeight = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 20 | "let bucketCount = 0;\n" |
andrewboyson | 60:7cab896b0fd4 | 21 | "let buckets = '';\n" |
andrewboyson | 48:9f1ab7784067 | 22 | "\n" |
andrewboyson | 60:7cab896b0fd4 | 23 | "function parseVariables(text)\n" |
andrewboyson | 49:115a5e4fac0c | 24 | "{\n" |
andrewboyson | 60:7cab896b0fd4 | 25 | " let lines = text.split('\\n');\n" |
andrewboyson | 60:7cab896b0fd4 | 26 | " gpsTrace = Ajax.hexToBit (lines[0], 0);\n" |
andrewboyson | 60:7cab896b0fd4 | 27 | " gpsVerbose = Ajax.hexToBit (lines[0], 1);\n" |
andrewboyson | 60:7cab896b0fd4 | 28 | " msgTrace = Ajax.hexToBit (lines[0], 2);\n" |
andrewboyson | 60:7cab896b0fd4 | 29 | " cmdTrace = Ajax.hexToBit (lines[0], 3);\n" |
andrewboyson | 60:7cab896b0fd4 | 30 | " lat = Ajax.hexToSignedInt32(lines[1]);\n" |
andrewboyson | 60:7cab896b0fd4 | 31 | " lng = Ajax.hexToSignedInt32(lines[2]);\n" |
andrewboyson | 60:7cab896b0fd4 | 32 | " hgt = Ajax.hexToSignedInt32(lines[3]);\n" |
andrewboyson | 60:7cab896b0fd4 | 33 | " hgtAboveMsl = Ajax.hexToSignedInt32(lines[4]);\n" |
andrewboyson | 60:7cab896b0fd4 | 34 | " mslAboveWgs = Ajax.hexToSignedInt32(lines[5]);\n" |
andrewboyson | 60:7cab896b0fd4 | 35 | " dop = Ajax.hexToSignedInt32(lines[6]);\n" |
andrewboyson | 60:7cab896b0fd4 | 36 | " satCount = Ajax.hexToSignedInt32(lines[7]);\n" |
andrewboyson | 60:7cab896b0fd4 | 37 | " fixQuality = Ajax.hexToSignedInt32(lines[8]);\n" |
andrewboyson | 60:7cab896b0fd4 | 38 | " sensorHeight = Ajax.hexToSignedInt32(lines[9]);\n" |
andrewboyson | 49:115a5e4fac0c | 39 | "}\n" |
andrewboyson | 60:7cab896b0fd4 | 40 | "function parseBuckets(text)\n" |
andrewboyson | 48:9f1ab7784067 | 41 | "{\n" |
andrewboyson | 60:7cab896b0fd4 | 42 | " let lines = text.split('\\n');\n" |
andrewboyson | 60:7cab896b0fd4 | 43 | " bucketCount = Ajax.hexToSignedInt32(lines[0]);\n" |
andrewboyson | 49:115a5e4fac0c | 44 | " buckets = '';\n" |
andrewboyson | 60:7cab896b0fd4 | 45 | " for (let i = 0; i < bucketCount; i++)\n" |
andrewboyson | 49:115a5e4fac0c | 46 | " {\n" |
andrewboyson | 60:7cab896b0fd4 | 47 | " buckets += (i * 50).toString().padStart(3, '0') + ' ' + Ajax.hexToSignedInt32(lines[i + 1]) + '\\r\\n';\n" |
andrewboyson | 49:115a5e4fac0c | 48 | " }\n" |
andrewboyson | 49:115a5e4fac0c | 49 | "}\n" |
andrewboyson | 60:7cab896b0fd4 | 50 | "function parse()\n" |
andrewboyson | 60:7cab896b0fd4 | 51 | "{\n" |
andrewboyson | 60:7cab896b0fd4 | 52 | " let topics = Ajax.response.split('\\f');\n" |
andrewboyson | 60:7cab896b0fd4 | 53 | " parseVariables(topics[0]);\n" |
andrewboyson | 60:7cab896b0fd4 | 54 | " parseBuckets (topics[1]);\n" |
andrewboyson | 60:7cab896b0fd4 | 55 | "}\n" |
andrewboyson | 49:115a5e4fac0c | 56 | "function degToString(plus, minus, deg)\n" |
andrewboyson | 49:115a5e4fac0c | 57 | "{\n" |
andrewboyson | 49:115a5e4fac0c | 58 | " deg /= NMEA_DEG_UNIT;\n" |
andrewboyson | 49:115a5e4fac0c | 59 | " if (deg >= 0) return plus + deg.toFixed(5);\n" |
andrewboyson | 49:115a5e4fac0c | 60 | " else return minus + (-deg).toFixed(5);\n" |
andrewboyson | 49:115a5e4fac0c | 61 | "}\n" |
andrewboyson | 49:115a5e4fac0c | 62 | "function hgtToString(plus, minus, hgt)\n" |
andrewboyson | 49:115a5e4fac0c | 63 | "{\n" |
andrewboyson | 49:115a5e4fac0c | 64 | " hgt /= NMEA_HGT_UNIT;\n" |
andrewboyson | 49:115a5e4fac0c | 65 | " if (hgt >= 0) return plus + hgt.toFixed(1);\n" |
andrewboyson | 49:115a5e4fac0c | 66 | " else return minus + (-hgt).toFixed(1);\n" |
andrewboyson | 48:9f1ab7784067 | 67 | "}\n" |
andrewboyson | 60:7cab896b0fd4 | 68 | "function display()\n" |
andrewboyson | 48:9f1ab7784067 | 69 | "{\n" |
andrewboyson | 60:7cab896b0fd4 | 70 | " let elem;\n" |
andrewboyson | 60:7cab896b0fd4 | 71 | " elem = Ajax.getElementOrNull('ajax-trace-gps' ); if (elem) elem.setAttribute('dir', gpsTrace ? 'rtl' : 'ltr');\n" |
andrewboyson | 60:7cab896b0fd4 | 72 | " elem = Ajax.getElementOrNull('ajax-trace-verbose'); if (elem) elem.setAttribute('dir', gpsVerbose ? 'rtl' : 'ltr');\n" |
andrewboyson | 60:7cab896b0fd4 | 73 | " elem = Ajax.getElementOrNull('ajax-trace-msg' ); if (elem) elem.setAttribute('dir', msgTrace ? 'rtl' : 'ltr');\n" |
andrewboyson | 60:7cab896b0fd4 | 74 | " elem = Ajax.getElementOrNull('ajax-trace-cmd' ); if (elem) elem.setAttribute('dir', cmdTrace ? 'rtl' : 'ltr');\n" |
andrewboyson | 48:9f1ab7784067 | 75 | "\n" |
andrewboyson | 60:7cab896b0fd4 | 76 | " elem = Ajax.getElementOrNull('ajax-position' ); if (elem) elem.textContent = degToString('N', 'S', lat) + ' ' +\n" |
andrewboyson | 60:7cab896b0fd4 | 77 | " degToString('E', 'W', lng) + ' ' +\n" |
andrewboyson | 60:7cab896b0fd4 | 78 | " hgtToString('H', 'D', hgt);\n" |
andrewboyson | 60:7cab896b0fd4 | 79 | " elem = Ajax.getElementOrNull('ajax-msl-above-wgs'); if (elem) elem.textContent = hgtToString('H', 'D', mslAboveWgs);\n" |
andrewboyson | 60:7cab896b0fd4 | 80 | " elem = Ajax.getElementOrNull('ajax-hgt-above-msl'); if (elem) elem.textContent = hgtToString('H', 'D', hgtAboveMsl);\n" |
andrewboyson | 60:7cab896b0fd4 | 81 | " elem = Ajax.getElementOrNull('ajax-gnd-above-msl'); if (elem) elem.textContent = hgtToString('H', 'D', hgtAboveMsl - sensorHeight * NMEA_HGT_UNIT);\n" |
andrewboyson | 48:9f1ab7784067 | 82 | "\n" |
andrewboyson | 60:7cab896b0fd4 | 83 | " elem = Ajax.getElementOrNull('ajax-dop' ); if (elem) elem.textContent = dop / 100;\n" |
andrewboyson | 60:7cab896b0fd4 | 84 | " elem = Ajax.getElementOrNull('ajax-sat-count' ); if (elem) elem.textContent = satCount;\n" |
andrewboyson | 60:7cab896b0fd4 | 85 | " elem = Ajax.getElementOrNull('ajax-fix-quality' ); if (elem) elem.textContent = fixQuality;\n" |
andrewboyson | 48:9f1ab7784067 | 86 | " \n" |
andrewboyson | 60:7cab896b0fd4 | 87 | " elem = Ajax.getElementOrNull('ajax-sensor-hgt' ); if (elem) elem.value = sensorHeight;\n" |
andrewboyson | 60:7cab896b0fd4 | 88 | " \n" |
andrewboyson | 60:7cab896b0fd4 | 89 | " elem = Ajax.getElementOrNull('ajax-bucket-count' ); if (elem) elem.textContent = bucketCount;\n" |
andrewboyson | 60:7cab896b0fd4 | 90 | " elem = Ajax.getElementOrNull('ajax-buckets' ); if (elem) elem.textContent = buckets;\n" |
andrewboyson | 48:9f1ab7784067 | 91 | "}\n" |
andrewboyson | 48:9f1ab7784067 | 92 | "\n" |
andrewboyson | 60:7cab896b0fd4 | 93 | "Ajax.server = '/nmea-ajax';\n" |
andrewboyson | 60:7cab896b0fd4 | 94 | "Ajax.onResponse = function() { parse(); display(); };\n" |
andrewboyson | 60:7cab896b0fd4 | 95 | "Ajax.init();" |