@airframes/acars-decoder 1.9.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +126 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +126 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -613,7 +613,7 @@ var ResultFormatter = class {
|
|
|
613
613
|
type: "message_checksum",
|
|
614
614
|
code: "CHECKSUM",
|
|
615
615
|
label: "Message Checksum",
|
|
616
|
-
value: "0x" + (
|
|
616
|
+
value: "0x" + (decodeResult.raw.checksum >>> 0).toString(16).padStart(4, "0")
|
|
617
617
|
});
|
|
618
618
|
}
|
|
619
619
|
static groundspeed(decodeResult, value) {
|
|
@@ -1273,7 +1273,11 @@ function addCompanyRoute(decodeResult, value) {
|
|
|
1273
1273
|
name = segments[0];
|
|
1274
1274
|
} else {
|
|
1275
1275
|
name = segments[0].slice(0, parens_idx);
|
|
1276
|
-
|
|
1276
|
+
const close_paren_idx = segments[0].indexOf(")");
|
|
1277
|
+
runway = segments[0].slice(
|
|
1278
|
+
parens_idx + 1,
|
|
1279
|
+
close_paren_idx === -1 ? void 0 : close_paren_idx
|
|
1280
|
+
);
|
|
1277
1281
|
}
|
|
1278
1282
|
let waypoints;
|
|
1279
1283
|
if (segments.length > 1) {
|
|
@@ -1941,6 +1945,12 @@ var Arinc702 = class extends DecoderPlugin {
|
|
|
1941
1945
|
}
|
|
1942
1946
|
};
|
|
1943
1947
|
|
|
1948
|
+
// lib/utils/acars_free_text.ts
|
|
1949
|
+
function formatAcarsFreeText(text) {
|
|
1950
|
+
if (!text) return "";
|
|
1951
|
+
return text.trim().replace(/\s+/g, " ");
|
|
1952
|
+
}
|
|
1953
|
+
|
|
1944
1954
|
// lib/plugins/Label_5Z_Slash.ts
|
|
1945
1955
|
var Label_5Z_Slash = class extends DecoderPlugin {
|
|
1946
1956
|
name = "label-5z-slash";
|
|
@@ -1982,7 +1992,10 @@ var Label_5Z_Slash = class extends DecoderPlugin {
|
|
|
1982
1992
|
decodeResult.formatted.description = "Airline Designated Downlink";
|
|
1983
1993
|
const lines = message.text.split("\r\n");
|
|
1984
1994
|
if (lines[0] === "/TXT") {
|
|
1985
|
-
ResultFormatter.text(
|
|
1995
|
+
ResultFormatter.text(
|
|
1996
|
+
decodeResult,
|
|
1997
|
+
formatAcarsFreeText(lines.slice(1).join("\r\n"))
|
|
1998
|
+
);
|
|
1986
1999
|
decodeResult.decoded = true;
|
|
1987
2000
|
decodeResult.decoder.decodeLevel = "full";
|
|
1988
2001
|
return decodeResult;
|
|
@@ -2524,6 +2537,111 @@ var Label_15_FST = class extends DecoderPlugin {
|
|
|
2524
2537
|
}
|
|
2525
2538
|
};
|
|
2526
2539
|
|
|
2540
|
+
// lib/plugins/Label_16_AUTPOS.ts
|
|
2541
|
+
var Label_16_AUTPOS = class extends DecoderPlugin {
|
|
2542
|
+
name = "label-16-autpos";
|
|
2543
|
+
qualifiers() {
|
|
2544
|
+
return {
|
|
2545
|
+
labels: ["16"],
|
|
2546
|
+
preambles: [""]
|
|
2547
|
+
};
|
|
2548
|
+
}
|
|
2549
|
+
decode(message) {
|
|
2550
|
+
let decodeResult = this.defaultResult();
|
|
2551
|
+
decodeResult.decoder.name = this.name;
|
|
2552
|
+
decodeResult.message = message;
|
|
2553
|
+
const regex = /^(\d{6})\/AUTPOS\/LLD (N|S)(\d{2})(\d{2})(\d{2}) (E|W)(\d{3})(\d{2})(\d{2})\s*\r?\n\/ALT (\d+)\/SAT ([*\-\d]{4})\r?\n\/WND ([*\d]{3})([\*\d]{3})\/TAT ([*\-\d]{4})\/TAS ([*\d]{3,4})\/CRZ ([*\d]{3,4})\r?\n\/FOB (\d{6})\r?\n\/DAT (\d{6})\/TIM (\d{6})/;
|
|
2554
|
+
const match = regex.exec(message.text);
|
|
2555
|
+
if (!match) {
|
|
2556
|
+
decodeResult.decoded = false;
|
|
2557
|
+
return decodeResult;
|
|
2558
|
+
}
|
|
2559
|
+
decodeResult.decoded = true;
|
|
2560
|
+
decodeResult.decoder.decodeLevel = "full";
|
|
2561
|
+
decodeResult.formatted.description = "Position Report";
|
|
2562
|
+
const [
|
|
2563
|
+
,
|
|
2564
|
+
flight,
|
|
2565
|
+
latHem,
|
|
2566
|
+
latDeg,
|
|
2567
|
+
latMin,
|
|
2568
|
+
latSec,
|
|
2569
|
+
lonHem,
|
|
2570
|
+
lonDeg,
|
|
2571
|
+
lonMin,
|
|
2572
|
+
lonSec,
|
|
2573
|
+
altitude,
|
|
2574
|
+
sat,
|
|
2575
|
+
windDir,
|
|
2576
|
+
windSpd,
|
|
2577
|
+
tat,
|
|
2578
|
+
tas,
|
|
2579
|
+
crz,
|
|
2580
|
+
fob,
|
|
2581
|
+
dat,
|
|
2582
|
+
tim
|
|
2583
|
+
] = match;
|
|
2584
|
+
ResultFormatter.day(decodeResult, parseInt(flight.slice(0, 2), 10));
|
|
2585
|
+
ResultFormatter.flightNumber(decodeResult, flight.slice(2));
|
|
2586
|
+
let latitude = CoordinateUtils.dmsToDecimalDegrees(
|
|
2587
|
+
parseInt(latDeg, 10),
|
|
2588
|
+
parseInt(latMin, 10),
|
|
2589
|
+
parseInt(latSec, 10)
|
|
2590
|
+
);
|
|
2591
|
+
if (latHem === "S") latitude = -latitude;
|
|
2592
|
+
let longitude = CoordinateUtils.dmsToDecimalDegrees(
|
|
2593
|
+
parseInt(lonDeg, 10),
|
|
2594
|
+
parseInt(lonMin, 10),
|
|
2595
|
+
parseInt(lonSec, 10)
|
|
2596
|
+
);
|
|
2597
|
+
if (lonHem === "W") longitude = -longitude;
|
|
2598
|
+
ResultFormatter.position(decodeResult, {
|
|
2599
|
+
latitude,
|
|
2600
|
+
longitude
|
|
2601
|
+
});
|
|
2602
|
+
const alt = parseInt(altitude, 10);
|
|
2603
|
+
ResultFormatter.altitude(decodeResult, alt);
|
|
2604
|
+
if (!windSpd.includes("*") && !windDir.includes("*")) {
|
|
2605
|
+
ResultFormatter.windData(decodeResult, [
|
|
2606
|
+
{
|
|
2607
|
+
waypoint: {
|
|
2608
|
+
name: "POSITION"
|
|
2609
|
+
},
|
|
2610
|
+
flightLevel: Math.round(alt / 100),
|
|
2611
|
+
windDirection: parseInt(windDir, 10),
|
|
2612
|
+
windSpeed: parseInt(windSpd, 10)
|
|
2613
|
+
}
|
|
2614
|
+
]);
|
|
2615
|
+
}
|
|
2616
|
+
if (!tat.includes("*")) {
|
|
2617
|
+
ResultFormatter.totalAirTemp(decodeResult, tat);
|
|
2618
|
+
}
|
|
2619
|
+
if (!tas.includes("*")) {
|
|
2620
|
+
ResultFormatter.airspeed(decodeResult, parseInt(tas, 10));
|
|
2621
|
+
}
|
|
2622
|
+
if (!sat.includes("*")) {
|
|
2623
|
+
ResultFormatter.temperature(decodeResult, sat);
|
|
2624
|
+
}
|
|
2625
|
+
if (!crz.includes("*")) {
|
|
2626
|
+
ResultFormatter.mach(decodeResult, parseInt(crz, 10) / 1e3);
|
|
2627
|
+
}
|
|
2628
|
+
if (!fob.includes("*")) {
|
|
2629
|
+
ResultFormatter.currentFuel(decodeResult, parseInt(fob, 10));
|
|
2630
|
+
}
|
|
2631
|
+
if (!dat.includes("*") && !tim.includes("*")) {
|
|
2632
|
+
const yy = dat.slice(0, 2);
|
|
2633
|
+
const mm = dat.slice(2, 4);
|
|
2634
|
+
const dd = dat.slice(4, 6);
|
|
2635
|
+
const ddmmyy = `${dd}${mm}${yy}`;
|
|
2636
|
+
ResultFormatter.timestamp(
|
|
2637
|
+
decodeResult,
|
|
2638
|
+
DateTimeUtils.convertDateTimeToEpoch(tim, ddmmyy)
|
|
2639
|
+
);
|
|
2640
|
+
}
|
|
2641
|
+
return decodeResult;
|
|
2642
|
+
}
|
|
2643
|
+
};
|
|
2644
|
+
|
|
2527
2645
|
// lib/plugins/Label_16_Honeywell.ts
|
|
2528
2646
|
var Label_16_Honeywell = class extends DecoderPlugin {
|
|
2529
2647
|
name = "label-16-honeywell";
|
|
@@ -3298,7 +3416,7 @@ var Label_2P_FM3 = class extends DecoderPlugin {
|
|
|
3298
3416
|
const parts = message.text.split(",");
|
|
3299
3417
|
if (parts.length === 7) {
|
|
3300
3418
|
const header = parts[0].split("FM3 ");
|
|
3301
|
-
if (header.length
|
|
3419
|
+
if (header.length < 2) {
|
|
3302
3420
|
ResultFormatter.unknown(decodeResult, message.text);
|
|
3303
3421
|
decodeResult.decoded = false;
|
|
3304
3422
|
decodeResult.decoder.decodeLevel = "none";
|
|
@@ -3369,7 +3487,7 @@ var Label_2P_FM4 = class extends DecoderPlugin {
|
|
|
3369
3487
|
const parts = message.text.split(",");
|
|
3370
3488
|
if (parts.length === 10) {
|
|
3371
3489
|
const header = parts[0].split("FM4");
|
|
3372
|
-
if (header.length
|
|
3490
|
+
if (header.length < 2) {
|
|
3373
3491
|
ResultFormatter.unknown(decodeResult, message.text);
|
|
3374
3492
|
decodeResult.decoded = false;
|
|
3375
3493
|
decodeResult.decoder.decodeLevel = "none";
|
|
@@ -3428,7 +3546,7 @@ var Label_2P_FM5 = class extends DecoderPlugin {
|
|
|
3428
3546
|
const parts = message.text.split(",");
|
|
3429
3547
|
if (parts.length === 12) {
|
|
3430
3548
|
const header = parts[0].split("FM5 ");
|
|
3431
|
-
if (header.length
|
|
3549
|
+
if (header.length < 2) {
|
|
3432
3550
|
ResultFormatter.unknown(decodeResult, message.text);
|
|
3433
3551
|
decodeResult.decoded = false;
|
|
3434
3552
|
decodeResult.decoder.decodeLevel = "none";
|
|
@@ -4685,6 +4803,7 @@ var Label_H1_ATIS = class extends DecoderPlugin {
|
|
|
4685
4803
|
const checksum = match[6];
|
|
4686
4804
|
ResultFormatter.flightNumber(decodeResult, flight);
|
|
4687
4805
|
ResultFormatter.arrivalAirport(decodeResult, facility);
|
|
4806
|
+
ResultFormatter.sequenceNumber(decodeResult, parseInt(seq, 10));
|
|
4688
4807
|
decodeResult.raw.atis_code = code;
|
|
4689
4808
|
decodeResult.formatted.items.push({
|
|
4690
4809
|
type: "atis",
|
|
@@ -6609,6 +6728,7 @@ var pluginClasses = [
|
|
|
6609
6728
|
Label_13Through18_Slash,
|
|
6610
6729
|
Label_15,
|
|
6611
6730
|
Label_15_FST,
|
|
6731
|
+
Label_16_AUTPOS,
|
|
6612
6732
|
Label_16_Honeywell,
|
|
6613
6733
|
Label_16_N_Space,
|
|
6614
6734
|
Label_16_POSA1,
|