Skip to content

Commit

Permalink
Adding OAT to label 15 (#192)
Browse files Browse the repository at this point in the history
Adding code for missing alt
adding code for long variant
  • Loading branch information
makrsmark authored Nov 13, 2024
1 parent ffb54ee commit 4e14089
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 15 deletions.
42 changes: 36 additions & 6 deletions lib/plugins/Label_15.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,32 +19,62 @@ describe('Label_15', () => {
});
});

test('decodes variant 1', () => {
test('decodes short variant missing ???', () => {
const text = '(2N39413W 73354--- 66349-43(Z'
const decodeResult = plugin.decode({ text: text });

expect(decodeResult.decoded).toBe(true);
expect(decodeResult.decoder.decodeLevel).toBe('partial');
expect(decodeResult.formatted.items.length).toBe(2);
expect(decodeResult.formatted.items.length).toBe(3);
expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position');
expect(decodeResult.formatted.items[0].value).toBe('39.688 N, 73.590 W');
expect(decodeResult.formatted.items[1].label).toBe('Altitude');
expect(decodeResult.formatted.items[1].value).toBe('34900 feet');
expect(decodeResult.remaining.text).toBe('--- 66-43');
expect(decodeResult.formatted.items[2].label).toBe('Outside Air Temperature (C)');
expect(decodeResult.formatted.items[2].value).toBe('-43 degrees');
expect(decodeResult.remaining.text).toBe('--- 66');
});

test('decodes variant 2', () => {
test('decodes short variant all fields', () => {
const text = '(2N40492W 77179248 99380-53(Z'
const decodeResult = plugin.decode({ text: text });

expect(decodeResult.decoded).toBe(true);
expect(decodeResult.decoder.decodeLevel).toBe('partial');
expect(decodeResult.formatted.items.length).toBe(2);
expect(decodeResult.formatted.items.length).toBe(3);
expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position');
expect(decodeResult.formatted.items[0].value).toBe('40.820 N, 77.298 W');
expect(decodeResult.formatted.items[1].label).toBe('Altitude');
expect(decodeResult.formatted.items[1].value).toBe('38000 feet');
expect(decodeResult.remaining.text).toBe('248 99-53');
expect(decodeResult.formatted.items[2].label).toBe('Outside Air Temperature (C)');
expect(decodeResult.formatted.items[2].value).toBe('-53 degrees');
expect(decodeResult.remaining.text).toBe('248 99');
});

test('decodes short variant missing alt', () => {
const text = '(2N39269W 77374--- 42---- 5(Z'
const decodeResult = plugin.decode({ text: text });

expect(decodeResult.decoded).toBe(true);
expect(decodeResult.decoder.decodeLevel).toBe('partial');
expect(decodeResult.formatted.items.length).toBe(2);
expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position');
expect(decodeResult.formatted.items[0].value).toBe('39.448 N, 77.623 W');
expect(decodeResult.formatted.items[1].label).toBe('Outside Air Temperature (C)');
expect(decodeResult.formatted.items[1].value).toBe('-5 degrees');
expect(decodeResult.remaining.text).toBe('--- 42');
});

test('decodes long variant', () => {
const text = '(2N39018W 77284OFF11112418101313--------(Z'
const decodeResult = plugin.decode({ text: text });

expect(decodeResult.decoded).toBe(true);
expect(decodeResult.decoder.decodeLevel).toBe('partial');
expect(decodeResult.formatted.items.length).toBe(1);
expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position');
expect(decodeResult.formatted.items[0].value).toBe('39.030 N, 77.473 W');
expect(decodeResult.remaining.text).toBe('OFF11112418101313--------');
});

test('does not decode Label 15 <invalid>', () => {
Expand Down
23 changes: 14 additions & 9 deletions lib/plugins/Label_15.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,25 @@ export class Label_15 extends DecoderPlugin {
};
}

decode(message: Message, options: Options = {}) : DecodeResult {
decode(message: Message, options: Options = {}): DecodeResult {
const decodeResult = this.defaultResult();
decodeResult.decoder.name = this.name;
decodeResult.formatted.description = 'Position Report';
decodeResult.message = message;

const twoZeeRegex = /^\(2(?<between>.+)\(Z$/;
const results = message.text.match(twoZeeRegex);
if (results?.groups) {
// Style: (2N38111W 82211266 76400-64(Z
const between = results.groups.between
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(between.substring(0,13)));
ResultFormatter.altitude(decodeResult, 100 * Number(between.substring(19, 22)));
ResultFormatter.unknown(decodeResult, between.substring(13,19) + between.substring(22));
if (message.text.startsWith('(2') && message.text.endsWith('(Z')) {
const between = message.text.substring(2, message.text.length - 2);
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(between.substring(0, 13)));
if (between.length === 25) { // short variant
ResultFormatter.unknown(decodeResult, between.substring(13, 19));
const alt = between.substring(19, 22);
if (alt != '---') {
ResultFormatter.altitude(decodeResult, 100 * Number(alt));
}
ResultFormatter.temperature(decodeResult, between.substring(22).replace(" ", "0"));
} else { // long variant
ResultFormatter.unknown(decodeResult, between.substring(13));
}
} else {
if (options.debug) {
console.log(`Decoder: Unknown 15 message: ${message.text}`);
Expand Down

0 comments on commit 4e14089

Please sign in to comment.