Andrew Boyson / gps

Dependencies:   net lpc1768 crypto clock web log

web-derived/nmea/web-nmea-script.inc

Committer:
andrewboyson
Date:
2019-04-28
Revision:
55:a1bd0572c8b6
Parent:
http-derived/nmea/http-nmea-script.inc@ 49:115a5e4fac0c

File content as of revision 55:a1bd0572c8b6:

"'use strict';\n"
"\n"
"const NMEA_DEG_UNIT = 10000000;\n"
"const NMEA_HGT_UNIT =  1000000;\n"
"\n"
"var response     = '';\n"
"var headers      = '';\n"
"var gpsTrace     = false;\n"
"var gpsVerbose   = false;\n"
"var msgTrace     = false;\n"
"var cmdTrace     = false;\n"
"var lat          = 0;\n"
"var lng          = 0;\n"
"var hgt          = 0;\n"
"var hgtAboveMsl  = 0;\n"
"var mslAboveWgs  = 0;\n"
"var dop          = 0;\n"
"var satCount     = 0;\n"
"var fixQuality   = 0;\n"
"var sensorHeight = 0;\n"
"var bucketCount  = 0;\n"
"var buckets      = '';\n"
"\n"
"function hexToBit(iChar, iBit)\n"
"{\n"
"   var value = parseInt(response.charAt(iChar), 16);\n"
"   value >>= iBit;\n"
"   return value & 1;\n"
"}\n"
"function parseSint32fromHex(value)\n"
"{\n"
"    value = parseInt(value, 16);\n"
"    if (value > 0x7FFFFFFF) value -= 0xFFFFFFFF;\n"
"    return value;\n"
"}\n"
"function parseAjax()\n"
"{\n"
"    gpsTrace     = hexToBit(0, 0);\n"
"    gpsVerbose   = hexToBit(0, 1);\n"
"    msgTrace     = hexToBit(0, 2);\n"
"    cmdTrace     = hexToBit(0, 3);\n"
"    lat          = parseSint32fromHex(response.substr( 1, 8));\n"
"    lng          = parseSint32fromHex(response.substr( 9, 8));\n"
"    hgt          = parseSint32fromHex(response.substr(17, 8));\n"
"    hgtAboveMsl  = parseSint32fromHex(response.substr(25, 8));\n"
"    mslAboveWgs  = parseSint32fromHex(response.substr(33, 8));\n"
"    dop          = parseSint32fromHex(response.substr(41, 8));\n"
"    satCount     = parseSint32fromHex(response.substr(49, 8));\n"
"    fixQuality   = parseSint32fromHex(response.substr(57, 8));\n"
"    sensorHeight = parseSint32fromHex(response.substr(65, 8));\n"
"    bucketCount  = parseSint32fromHex(response.substr(73, 8));\n"
"    buckets      = '';\n"
"    for (var i = 0; i < bucketCount; i++)\n"
"    {\n"
"        buckets += (i * 50).toString().padStart(3, '0') + ' ' + parseInt(response.substr(81 + i * 8, 8), 16) + '\\r\\n';\n"
"    }\n"
"}\n"
"function degToString(plus, minus, deg)\n"
"{\n"
"    deg /= NMEA_DEG_UNIT;\n"
"    if (deg >= 0) return plus  +    deg.toFixed(5);\n"
"    else          return minus + (-deg).toFixed(5);\n"
"}\n"
"function hgtToString(plus, minus, hgt)\n"
"{\n"
"    hgt /= NMEA_HGT_UNIT;\n"
"    if (hgt >= 0) return plus  +    hgt.toFixed(1);\n"
"    else          return minus + (-hgt).toFixed(1);\n"
"}\n"
"function displayGeneral()\n"
"{\n"
"   var elem;\n"
"   elem = document.getElementById('ajax-trace-gps'    ); if (elem) elem.setAttribute('dir', gpsTrace   ? 'rtl' : 'ltr');\n"
"   elem = document.getElementById('ajax-trace-verbose'); if (elem) elem.setAttribute('dir', gpsVerbose ? 'rtl' : 'ltr');\n"
"   elem = document.getElementById('ajax-trace-msg'    ); if (elem) elem.setAttribute('dir', msgTrace   ? 'rtl' : 'ltr');\n"
"   elem = document.getElementById('ajax-trace-cmd'    ); if (elem) elem.setAttribute('dir', cmdTrace   ? 'rtl' : 'ltr');\n"
"\n"
"   elem = document.getElementById('ajax-position'     ); if (elem) elem.textContent = degToString('N', 'S', lat) + ' ' +\n"
"                                                                                      degToString('E', 'W', lng) + ' ' +\n"
"                                                                                      hgtToString('H', 'D', hgt);\n"
"   elem = document.getElementById('ajax-msl-above-wgs'); if (elem) elem.textContent = hgtToString('H', 'D', mslAboveWgs);\n"
"   elem = document.getElementById('ajax-hgt-above-msl'); if (elem) elem.textContent = hgtToString('H', 'D', hgtAboveMsl);\n"
"   elem = document.getElementById('ajax-gnd-above-msl'); if (elem) elem.textContent = hgtToString('H', 'D', hgtAboveMsl - sensorHeight * NMEA_HGT_UNIT);\n"
"\n"
"   elem = document.getElementById('ajax-dop'          ); if (elem) elem.textContent = dop / 100;\n"
"   elem = document.getElementById('ajax-sat-count'    ); if (elem) elem.textContent = satCount;\n"
"   elem = document.getElementById('ajax-fix-quality'  ); if (elem) elem.textContent = fixQuality;\n"
"   \n"
"   elem = document.getElementById('ajax-sensor-hgt'   ); if (elem) elem.value       = sensorHeight;\n"
"   \n"
"   elem = document.getElementById('ajax-bucket-count' ); if (elem) elem.textContent = bucketCount;\n"
"   elem = document.getElementById('ajax-buckets' );      if (elem) elem.textContent = buckets;\n"
"\n"
"   elem = document.getElementById('ajax-response'     ); if (elem) elem.textContent = response;\n"
"   elem = document.getElementById('ajax-headers'      ); if (elem) elem.textContent = headers;\n"
"}\n"
"\n"
"var ajax;\n"
"function AjaxRequest(request) //Used by this script and from HTML page\n"
"{\n"
"   ajax=new XMLHttpRequest();\n"
"   ajax.onreadystatechange=handleAjaxResponse;\n"
"   if (request) ajax.open('GET', '/nmea-ajax' + '?' + request, true);\n"
"   else         ajax.open('GET', '/nmea-ajax'                , true);\n"
"   ajax.send();\n"
"}\n"
"function requestAjax() //Used in this script\n"
"{\n"
"   AjaxRequest('');\n"
"}\n"
"\n"
"function handleAjaxResponse()\n"
"{\n"
"   if (ajax.readyState==4 && ajax.status==200)\n"
"   {\n"
"       response = ajax.responseText;\n"
"       headers  = ajax.getAllResponseHeaders();\n"
"       parseAjax();\n"
"       displayGeneral();\n"
"   }\n"
"}\n"
"\n"
"function init()\n"
"{\n"
"    setInterval(requestAjax, 10000);\n"
"    requestAjax();\n"
"}\n"
"if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init ); // Loading hasn't finished yet\n"
"else                                                                                 init(); //`DOMContentLoaded` has already fired\n"
""