UNPKG

@jbroll/nmea-simple

Version:

NMEA 0183 sentence parser and encoder

85 lines (84 loc) 3.26 kB
"use strict"; /* * === GSV - Satellites in view === * * ------------------------------------------------------------------------------ * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 * | | | | | | | | | | | | | | | | | | | | | | * $--GSV,x,x,xx,xx,xx,xx,xxx,xx,xx,xx,xxx,xx,xx,xx,xxx,xx,xx,xx,xxx,xx,s*hh<CR><LF> * ------------------------------------------------------------------------------ * * Field Number: * * 1. Number of sentences for full data * 2. Sentence number out of total * 3. Number of satellites in view * 4. PRN of satellite used for fix (may be blank) * * 5. Satellite PRN number \ * 6. Elevation, degrees +- Satellite 1 * 7. Azimuth, degrees | * 8. Signal to noise ratio / * * 9. Satellite PRN number \ * 10. Elevation, degrees +- Satellite 2 * 11. Azimuth, degrees | * 12. Signal to noise ratio / * * 13. Satellite PRN number \ * 14. Elevation, degrees +- Satellite 3 * 15. Azimuth, degrees | * 16. Signal to noise ratio / * * 17. Satellite PRN number \ * 18. Elevation, degrees +- Satellite 4 * 19. Azimuth, degrees | * 20. Signal to noise ratio / * * 21. Signal ID (u-blox specific field, optional): * For GPS (GP): * 0: All signals (default if field not present) * 1: L1 C/A * 6: L2 CL * 22. Checksum */ var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var helpers_1 = require("../helpers"); var prn_utils_1 = require("../prn-utils"); var PacketStub_1 = require("./PacketStub"); exports.sentenceId = "GSV"; exports.sentenceName = "Satellites in view"; function decodeSentence(stub, fields) { // Each satellite uses 4 fields var numRecords = Math.floor((fields.length - 4) / 4); var sats = []; var systemId = prn_utils_1.getTalkerSystemId(stub.talkerId || ""); // Process satellite records for (var i = 0; i < numRecords; i++) { var offset = i * 4 + 4; // Only add satellites with valid PRN numbers var rawPrn = helpers_1.parseIntSafe(fields[offset]); if (rawPrn > 0) { var adjustedPrn = prn_utils_1.adjustPRN(rawPrn, systemId); sats.push({ prnNumber: adjustedPrn, elevationDegrees: helpers_1.parseIntSafe(fields[offset + 1]), azimuthTrue: helpers_1.parseIntSafe(fields[offset + 2]), SNRdB: helpers_1.parseIntSafe(fields[offset + 3]) }); } } return __assign(__assign({}, PacketStub_1.initStubFields(stub, exports.sentenceId, exports.sentenceName)), { numberOfMessages: helpers_1.parseIntSafe(fields[1]), messageNumber: helpers_1.parseIntSafe(fields[2]), satellitesInView: helpers_1.parseIntSafe(fields[3]), satellites: sats }); } exports.decodeSentence = decodeSentence;