@jbroll/nmea-simple
Version:
NMEA 0183 sentence parser and encoder
61 lines (60 loc) • 2.45 kB
JavaScript
;
/*
* === GSA - Active satellites and dilution of precision ===
*
* ------------------------------------------------------------------------------
* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
* | | | | | | | | | | | | | | | | | |
* $--GSA,a,x,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,x.x,x.x,x.x*hh<CR><LF>
* ------------------------------------------------------------------------------
*
* Field Number:
*
* 1. Selection of 2D or 3D fix
* A - Automatic
* M - Manual, forced to operate in 2D or 3D
* 2. 3D fix
* 1 - no fix
* 2 - 2D fix
* 3 - 3D fix
* 3. PRN of satellite used for fix (may be blank)
* ...
* 14. PRN of satellite used for fix (may be blank)
* 15. Dilution of precision
* 16. Horizontal dilution of precision
* 17. Vertical dilution of precision
* 18. System ID - uBlox extension
* 18. 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 = "GSA";
exports.sentenceName = "Active satellites and dilution of precision";
var ThreeDFixTypes = ["unknown", "none", "2D", "3D"];
function decodeSentence(stub, fields) {
var sats = [];
var systemId = fields.length > 18 ? helpers_1.parseIntSafe(fields[18]) : 0;
for (var i = 3; i < 15; i++) {
if (fields[i]) {
var rawPrn = helpers_1.parseIntSafe(fields[i]);
if (rawPrn > 0) {
sats.push(prn_utils_1.adjustPRN(rawPrn, systemId));
}
}
}
return __assign(__assign({}, PacketStub_1.initStubFields(stub, exports.sentenceId, exports.sentenceName)), { selectionMode: fields[1] === "A" ? "automatic" : "manual", fixMode: ThreeDFixTypes[helpers_1.parseIntSafe(fields[2])], satellites: sats, PDOP: helpers_1.parseFloatSafe(fields[15]), HDOP: helpers_1.parseFloatSafe(fields[16]), VDOP: helpers_1.parseFloatSafe(fields[17]) });
}
exports.decodeSentence = decodeSentence;