Skip to content

Commit 38bfdc8

Browse files
authored
Decoding another H1 POS variant (#107)
1 parent b4acf45 commit 38bfdc8

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

lib/plugins/Label_H1_POS.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,31 @@ test('decodes Label H1 Preamble POS variant 1 with offset', () => {
435435
expect(decodeResult.remaining.text).toBe(',30628,320');
436436
});
437437

438+
test('decodes Label H1 Preamble POS variant 9', () => {
439+
const decoder = new MessageDecoder();
440+
const decoderPlugin = new Label_H1_POS(decoder);
441+
442+
// https://app.airframes.io/messages/3110992692
443+
const text = 'POSN39164W077259,FORKL,231828,51,THRET,231917,TOOPR,P16,1726,167,/TS231828,2807244841';
444+
const decodeResult = decoderPlugin.decode({ text: text });
445+
console.log(JSON.stringify(decodeResult, null, 2));
446+
447+
expect(decodeResult.decoded).toBe(true);
448+
expect(decodeResult.decoder.decodeLevel).toBe('partial');
449+
expect(decodeResult.decoder.name).toBe('label-h1-pos');
450+
expect(decodeResult.formatted.description).toBe('Position Report');
451+
expect(decodeResult.formatted.items.length).toBe(4);
452+
expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position');
453+
expect(decodeResult.formatted.items[0].value).toBe('39.164 N, 77.259 W');
454+
expect(decodeResult.formatted.items[1].label).toBe('Aircraft Route');
455+
expect(decodeResult.formatted.items[1].value).toBe('FORKL@2024-07-28T23:18:28Z > THRET@2024-07-28T23:19:17Z > TOOPR');
456+
expect(decodeResult.formatted.items[2].label).toBe('Outside Air Temperature (C)');
457+
expect(decodeResult.formatted.items[2].value).toBe('16');
458+
expect(decodeResult.formatted.items[3].label).toBe('Message Checksum');
459+
expect(decodeResult.formatted.items[3].value).toBe('0x4841');
460+
expect(decodeResult.remaining.text).toBe(',51,1726,167,/TS231828');
461+
});
462+
438463
test('decodes Label H1 Preamble /.POS variant 2', () => {
439464
const decoder = new MessageDecoder();
440465
const decoderPlugin = new Label_H1_POS(decoder);

lib/plugins/Label_H1_POS.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,20 @@ export class Label_H1_POS extends DecoderPlugin {
6060
processUnknown(decodeResult, parts[9]);
6161
processChecksum(decodeResult, checksum);
6262

63+
decodeResult.decoded = true;
64+
decodeResult.decoder.decodeLevel = 'partial';
65+
} else if(parts.length === 12) { // variant 9
66+
67+
// convert DDMMYY to MMDDYY as that's what processRoute expects
68+
const date = parts[11].substring(2,4) + parts[11].substring(0,2) + parts[11].substring(4,6);
69+
processUnknown(decodeResult, parts[3]);
70+
processRoute(decodeResult, parts[1], parts[2], parts[4], parts[5], parts[6], date);
71+
processTemp(decodeResult, parts[7]);
72+
processUnknown(decodeResult, parts[8]);
73+
processUnknown(decodeResult, parts[9]);
74+
processUnknown(decodeResult, parts[10]); //message timestamp?
75+
processChecksum(decodeResult, checksum);
76+
6377
decodeResult.decoded = true;
6478
decodeResult.decoder.decodeLevel = 'partial';
6579
} else if(parts.length === 14) { // variant 2

0 commit comments

Comments
 (0)