|
| 1 | +import { DateTimeUtils } from '../DateTimeUtils'; |
| 2 | +import { DecoderPlugin } from '../DecoderPlugin'; |
| 3 | +import { DecodeResult, Message, Options } from '../DecoderPluginInterface'; |
| 4 | +import { CoordinateUtils } from '../utils/coordinate_utils'; |
| 5 | +import { ResultFormatter } from '../utils/result_formatter'; |
| 6 | + |
| 7 | +export class Label_H1_StarPOS extends DecoderPlugin { |
| 8 | + name = 'label-h1-star-pos'; |
| 9 | + qualifiers() { // eslint-disable-line class-methods-use-this |
| 10 | + return { |
| 11 | + labels: ['H1'], |
| 12 | + preambles: ['*POS'], |
| 13 | + }; |
| 14 | + } |
| 15 | + |
| 16 | + decode(message: Message, options: Options = {}) : DecodeResult { |
| 17 | + let decodeResult = this.defaultResult(); |
| 18 | + decodeResult.decoder.name = this.name; |
| 19 | + decodeResult.formatted.description = 'Position Report'; |
| 20 | + decodeResult.message = message; |
| 21 | + |
| 22 | + const msg = message.text; |
| 23 | + // assuming fixed length until other variants found |
| 24 | + if (msg.length !== 43 || !msg.startsWith('*POS')) { |
| 25 | + if (options.debug) { |
| 26 | + console.log(`Decoder: Unknown H1 message: ${msg}`); |
| 27 | + } |
| 28 | + ResultFormatter.unknown(decodeResult, msg); |
| 29 | + decodeResult.decoded = false; |
| 30 | + decodeResult.decoder.decodeLevel = 'none'; |
| 31 | + return decodeResult; |
| 32 | + } |
| 33 | + |
| 34 | + decodeResult.raw.month = Number(msg.substring(4, 6)); |
| 35 | + decodeResult.raw.day_of_month = Number(msg.substring(6, 8)); |
| 36 | + ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12) + '00')); |
| 37 | + ResultFormatter.position(decodeResult, { // Deg Min, no sec |
| 38 | + latitude: CoordinateUtils.getDirection(msg.substring(12,13)) * (Number(msg.substring(13, 15)) + Number(msg.substring(15, 17))/60), |
| 39 | + longitude: CoordinateUtils.getDirection(msg.substring(17,18)) * (Number(msg.substring(18, 21)) + Number(msg.substring(21, 23))/60) |
| 40 | + }); |
| 41 | + ResultFormatter.altitude(decodeResult, Number(msg.substring(23, 28))); |
| 42 | + ResultFormatter.unknown(decodeResult, msg.substring(28)); |
| 43 | + decodeResult.decoded = true; |
| 44 | + decodeResult.decoder.decodeLevel = 'partial'; |
| 45 | + return decodeResult; |
| 46 | + } |
| 47 | +} |
| 48 | + |
| 49 | +export default {}; |
0 commit comments