UNPKG

aprs-parser

Version:

JavaScript library for parsing APRS packets

62 lines (44 loc) 1.71 kB
'use strict'; const AbstractParser = require('../AbstractParser.js'); const Telemetry = require('./../MessageModels/Telemetry.js'); function TelemetryParser() { } TelemetryParser.constructor = TelemetryParser; TelemetryParser.prototype = Object.create(AbstractParser.prototype); TelemetryParser.prototype.isMatching = function (bodyContent) { return bodyContent[0] == 'T'; }; TelemetryParser.prototype.tryParse = function (bodyContent, aprsMessageHeader) { const commaSeparated = bodyContent.split(','); if (commaSeparated.length != 7 || !commaSeparated[0].match('T#[0-9]{3,3}')) { throw new Error('Wrong telemetry format'); } const id = parseInt(commaSeparated[0].substr(2)); const analogValues = commaSeparated.slice(1, 6).map((value) => { const numericValue = parseInt(value); if (!value.match('^[0-9]{3,3}$') || value > 255 || value < 0) throw new Error('Wrong analog value'); return numericValue; }); let digitalString = commaSeparated[6]; let comment; if (digitalString.length > 8) { //have comment, remove it comment = digitalString.substr(8); digitalString = digitalString.substr(0, 8); } const digitalValues = digitalString.split('').map((value) => { if (value != '0' && value != '1') throw new Error('Wrong digital value'); return value == '1'; }); const telemetry = new Telemetry(id, analogValues, digitalValues); if (comment) { telemetry.setComment(comment.trim()); } return telemetry; }; TelemetryParser.prototype.getParserName = function () { return 'TelemetryParser'; }; module.exports = TelemetryParser;