@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.mjs
CHANGED
|
@@ -576,7 +576,7 @@ var ResultFormatter = class {
|
|
|
576
576
|
type: "message_checksum",
|
|
577
577
|
code: "CHECKSUM",
|
|
578
578
|
label: "Message Checksum",
|
|
579
|
-
value: "0x" + (
|
|
579
|
+
value: "0x" + (decodeResult.raw.checksum >>> 0).toString(16).padStart(4, "0")
|
|
580
580
|
});
|
|
581
581
|
}
|
|
582
582
|
static groundspeed(decodeResult, value) {
|
|
@@ -1236,7 +1236,11 @@ function addCompanyRoute(decodeResult, value) {
|
|
|
1236
1236
|
name = segments[0];
|
|
1237
1237
|
} else {
|
|
1238
1238
|
name = segments[0].slice(0, parens_idx);
|
|
1239
|
-
|
|
1239
|
+
const close_paren_idx = segments[0].indexOf(")");
|
|
1240
|
+
runway = segments[0].slice(
|
|
1241
|
+
parens_idx + 1,
|
|
1242
|
+
close_paren_idx === -1 ? void 0 : close_paren_idx
|
|
1243
|
+
);
|
|
1240
1244
|
}
|
|
1241
1245
|
let waypoints;
|
|
1242
1246
|
if (segments.length > 1) {
|
|
@@ -1904,6 +1908,12 @@ var Arinc702 = class extends DecoderPlugin {
|
|
|
1904
1908
|
}
|
|
1905
1909
|
};
|
|
1906
1910
|
|
|
1911
|
+
// lib/utils/acars_free_text.ts
|
|
1912
|
+
function formatAcarsFreeText(text) {
|
|
1913
|
+
if (!text) return "";
|
|
1914
|
+
return text.trim().replace(/\s+/g, " ");
|
|
1915
|
+
}
|
|
1916
|
+
|
|
1907
1917
|
// lib/plugins/Label_5Z_Slash.ts
|
|
1908
1918
|
var Label_5Z_Slash = class extends DecoderPlugin {
|
|
1909
1919
|
name = "label-5z-slash";
|
|
@@ -1945,7 +1955,10 @@ var Label_5Z_Slash = class extends DecoderPlugin {
|
|
|
1945
1955
|
decodeResult.formatted.description = "Airline Designated Downlink";
|
|
1946
1956
|
const lines = message.text.split("\r\n");
|
|
1947
1957
|
if (lines[0] === "/TXT") {
|
|
1948
|
-
ResultFormatter.text(
|
|
1958
|
+
ResultFormatter.text(
|
|
1959
|
+
decodeResult,
|
|
1960
|
+
formatAcarsFreeText(lines.slice(1).join("\r\n"))
|
|
1961
|
+
);
|
|
1949
1962
|
decodeResult.decoded = true;
|
|
1950
1963
|
decodeResult.decoder.decodeLevel = "full";
|
|
1951
1964
|
return decodeResult;
|
|
@@ -2487,6 +2500,111 @@ var Label_15_FST = class extends DecoderPlugin {
|
|
|
2487
2500
|
}
|
|
2488
2501
|
};
|
|
2489
2502
|
|
|
2503
|
+
// lib/plugins/Label_16_AUTPOS.ts
|
|
2504
|
+
var Label_16_AUTPOS = class extends DecoderPlugin {
|
|
2505
|
+
name = "label-16-autpos";
|
|
2506
|
+
qualifiers() {
|
|
2507
|
+
return {
|
|
2508
|
+
labels: ["16"],
|
|
2509
|
+
preambles: [""]
|
|
2510
|
+
};
|
|
2511
|
+
}
|
|
2512
|
+
decode(message) {
|
|
2513
|
+
let decodeResult = this.defaultResult();
|
|
2514
|
+
decodeResult.decoder.name = this.name;
|
|
2515
|
+
decodeResult.message = message;
|
|
2516
|
+
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})/;
|
|
2517
|
+
const match = regex.exec(message.text);
|
|
2518
|
+
if (!match) {
|
|
2519
|
+
decodeResult.decoded = false;
|
|
2520
|
+
return decodeResult;
|
|
2521
|
+
}
|
|
2522
|
+
decodeResult.decoded = true;
|
|
2523
|
+
decodeResult.decoder.decodeLevel = "full";
|
|
2524
|
+
decodeResult.formatted.description = "Position Report";
|
|
2525
|
+
const [
|
|
2526
|
+
,
|
|
2527
|
+
flight,
|
|
2528
|
+
latHem,
|
|
2529
|
+
latDeg,
|
|
2530
|
+
latMin,
|
|
2531
|
+
latSec,
|
|
2532
|
+
lonHem,
|
|
2533
|
+
lonDeg,
|
|
2534
|
+
lonMin,
|
|
2535
|
+
lonSec,
|
|
2536
|
+
altitude,
|
|
2537
|
+
sat,
|
|
2538
|
+
windDir,
|
|
2539
|
+
windSpd,
|
|
2540
|
+
tat,
|
|
2541
|
+
tas,
|
|
2542
|
+
crz,
|
|
2543
|
+
fob,
|
|
2544
|
+
dat,
|
|
2545
|
+
tim
|
|
2546
|
+
] = match;
|
|
2547
|
+
ResultFormatter.day(decodeResult, parseInt(flight.slice(0, 2), 10));
|
|
2548
|
+
ResultFormatter.flightNumber(decodeResult, flight.slice(2));
|
|
2549
|
+
let latitude = CoordinateUtils.dmsToDecimalDegrees(
|
|
2550
|
+
parseInt(latDeg, 10),
|
|
2551
|
+
parseInt(latMin, 10),
|
|
2552
|
+
parseInt(latSec, 10)
|
|
2553
|
+
);
|
|
2554
|
+
if (latHem === "S") latitude = -latitude;
|
|
2555
|
+
let longitude = CoordinateUtils.dmsToDecimalDegrees(
|
|
2556
|
+
parseInt(lonDeg, 10),
|
|
2557
|
+
parseInt(lonMin, 10),
|
|
2558
|
+
parseInt(lonSec, 10)
|
|
2559
|
+
);
|
|
2560
|
+
if (lonHem === "W") longitude = -longitude;
|
|
2561
|
+
ResultFormatter.position(decodeResult, {
|
|
2562
|
+
latitude,
|
|
2563
|
+
longitude
|
|
2564
|
+
});
|
|
2565
|
+
const alt = parseInt(altitude, 10);
|
|
2566
|
+
ResultFormatter.altitude(decodeResult, alt);
|
|
2567
|
+
if (!windSpd.includes("*") && !windDir.includes("*")) {
|
|
2568
|
+
ResultFormatter.windData(decodeResult, [
|
|
2569
|
+
{
|
|
2570
|
+
waypoint: {
|
|
2571
|
+
name: "POSITION"
|
|
2572
|
+
},
|
|
2573
|
+
flightLevel: Math.round(alt / 100),
|
|
2574
|
+
windDirection: parseInt(windDir, 10),
|
|
2575
|
+
windSpeed: parseInt(windSpd, 10)
|
|
2576
|
+
}
|
|
2577
|
+
]);
|
|
2578
|
+
}
|
|
2579
|
+
if (!tat.includes("*")) {
|
|
2580
|
+
ResultFormatter.totalAirTemp(decodeResult, tat);
|
|
2581
|
+
}
|
|
2582
|
+
if (!tas.includes("*")) {
|
|
2583
|
+
ResultFormatter.airspeed(decodeResult, parseInt(tas, 10));
|
|
2584
|
+
}
|
|
2585
|
+
if (!sat.includes("*")) {
|
|
2586
|
+
ResultFormatter.temperature(decodeResult, sat);
|
|
2587
|
+
}
|
|
2588
|
+
if (!crz.includes("*")) {
|
|
2589
|
+
ResultFormatter.mach(decodeResult, parseInt(crz, 10) / 1e3);
|
|
2590
|
+
}
|
|
2591
|
+
if (!fob.includes("*")) {
|
|
2592
|
+
ResultFormatter.currentFuel(decodeResult, parseInt(fob, 10));
|
|
2593
|
+
}
|
|
2594
|
+
if (!dat.includes("*") && !tim.includes("*")) {
|
|
2595
|
+
const yy = dat.slice(0, 2);
|
|
2596
|
+
const mm = dat.slice(2, 4);
|
|
2597
|
+
const dd = dat.slice(4, 6);
|
|
2598
|
+
const ddmmyy = `${dd}${mm}${yy}`;
|
|
2599
|
+
ResultFormatter.timestamp(
|
|
2600
|
+
decodeResult,
|
|
2601
|
+
DateTimeUtils.convertDateTimeToEpoch(tim, ddmmyy)
|
|
2602
|
+
);
|
|
2603
|
+
}
|
|
2604
|
+
return decodeResult;
|
|
2605
|
+
}
|
|
2606
|
+
};
|
|
2607
|
+
|
|
2490
2608
|
// lib/plugins/Label_16_Honeywell.ts
|
|
2491
2609
|
var Label_16_Honeywell = class extends DecoderPlugin {
|
|
2492
2610
|
name = "label-16-honeywell";
|
|
@@ -3261,7 +3379,7 @@ var Label_2P_FM3 = class extends DecoderPlugin {
|
|
|
3261
3379
|
const parts = message.text.split(",");
|
|
3262
3380
|
if (parts.length === 7) {
|
|
3263
3381
|
const header = parts[0].split("FM3 ");
|
|
3264
|
-
if (header.length
|
|
3382
|
+
if (header.length < 2) {
|
|
3265
3383
|
ResultFormatter.unknown(decodeResult, message.text);
|
|
3266
3384
|
decodeResult.decoded = false;
|
|
3267
3385
|
decodeResult.decoder.decodeLevel = "none";
|
|
@@ -3332,7 +3450,7 @@ var Label_2P_FM4 = class extends DecoderPlugin {
|
|
|
3332
3450
|
const parts = message.text.split(",");
|
|
3333
3451
|
if (parts.length === 10) {
|
|
3334
3452
|
const header = parts[0].split("FM4");
|
|
3335
|
-
if (header.length
|
|
3453
|
+
if (header.length < 2) {
|
|
3336
3454
|
ResultFormatter.unknown(decodeResult, message.text);
|
|
3337
3455
|
decodeResult.decoded = false;
|
|
3338
3456
|
decodeResult.decoder.decodeLevel = "none";
|
|
@@ -3391,7 +3509,7 @@ var Label_2P_FM5 = class extends DecoderPlugin {
|
|
|
3391
3509
|
const parts = message.text.split(",");
|
|
3392
3510
|
if (parts.length === 12) {
|
|
3393
3511
|
const header = parts[0].split("FM5 ");
|
|
3394
|
-
if (header.length
|
|
3512
|
+
if (header.length < 2) {
|
|
3395
3513
|
ResultFormatter.unknown(decodeResult, message.text);
|
|
3396
3514
|
decodeResult.decoded = false;
|
|
3397
3515
|
decodeResult.decoder.decodeLevel = "none";
|
|
@@ -4648,6 +4766,7 @@ var Label_H1_ATIS = class extends DecoderPlugin {
|
|
|
4648
4766
|
const checksum = match[6];
|
|
4649
4767
|
ResultFormatter.flightNumber(decodeResult, flight);
|
|
4650
4768
|
ResultFormatter.arrivalAirport(decodeResult, facility);
|
|
4769
|
+
ResultFormatter.sequenceNumber(decodeResult, parseInt(seq, 10));
|
|
4651
4770
|
decodeResult.raw.atis_code = code;
|
|
4652
4771
|
decodeResult.formatted.items.push({
|
|
4653
4772
|
type: "atis",
|
|
@@ -6572,6 +6691,7 @@ var pluginClasses = [
|
|
|
6572
6691
|
Label_13Through18_Slash,
|
|
6573
6692
|
Label_15,
|
|
6574
6693
|
Label_15_FST,
|
|
6694
|
+
Label_16_AUTPOS,
|
|
6575
6695
|
Label_16_Honeywell,
|
|
6576
6696
|
Label_16_N_Space,
|
|
6577
6697
|
Label_16_POSA1,
|