@airframes/acars-decoder 1.6.15 → 1.6.16
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 +327 -79
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +327 -79
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -4
package/dist/index.mjs
CHANGED
|
@@ -532,14 +532,24 @@ var ResultFormatter = class {
|
|
|
532
532
|
value: DateTimeUtils.timestampToString(time, "tod")
|
|
533
533
|
});
|
|
534
534
|
}
|
|
535
|
-
static off(decodeResult, time) {
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
535
|
+
static off(decodeResult, time, type = "tod") {
|
|
536
|
+
if (type === "tod") {
|
|
537
|
+
decodeResult.raw.off_time = time;
|
|
538
|
+
decodeResult.formatted.items.push({
|
|
539
|
+
type: "time_of_day",
|
|
540
|
+
code: "OFF",
|
|
541
|
+
label: "Takeoff Time",
|
|
542
|
+
value: DateTimeUtils.timestampToString(time, "tod")
|
|
543
|
+
});
|
|
544
|
+
} else {
|
|
545
|
+
decodeResult.raw.off_date = time;
|
|
546
|
+
decodeResult.formatted.items.push({
|
|
547
|
+
type: "epoch",
|
|
548
|
+
code: "OFF",
|
|
549
|
+
label: "Takeoff Time",
|
|
550
|
+
value: DateTimeUtils.timestampToString(time, "epoch")
|
|
551
|
+
});
|
|
552
|
+
}
|
|
543
553
|
}
|
|
544
554
|
static on(decodeResult, time) {
|
|
545
555
|
decodeResult.raw.on_time = time;
|
|
@@ -931,6 +941,51 @@ var Label_12_N_Space = class extends DecoderPlugin {
|
|
|
931
941
|
}
|
|
932
942
|
};
|
|
933
943
|
|
|
944
|
+
// lib/plugins/Label_12_POS.ts
|
|
945
|
+
var Label_12_POS = class extends DecoderPlugin {
|
|
946
|
+
name = "label-12-pos";
|
|
947
|
+
qualifiers() {
|
|
948
|
+
return {
|
|
949
|
+
labels: ["12"],
|
|
950
|
+
preambles: ["POS"]
|
|
951
|
+
};
|
|
952
|
+
}
|
|
953
|
+
decode(message, options = {}) {
|
|
954
|
+
const decodeResult = this.defaultResult();
|
|
955
|
+
decodeResult.decoder.name = this.name;
|
|
956
|
+
decodeResult.formatted.description = "Position Report";
|
|
957
|
+
decodeResult.message = message;
|
|
958
|
+
const data = message.text.substring(3).split(",");
|
|
959
|
+
if (!message.text.startsWith("POS") || data.length !== 12) {
|
|
960
|
+
if (options.debug) {
|
|
961
|
+
console.log(`Decoder: Unknown 12 message: ${message.text}`);
|
|
962
|
+
}
|
|
963
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
964
|
+
decodeResult.decoded = false;
|
|
965
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
966
|
+
return decodeResult;
|
|
967
|
+
}
|
|
968
|
+
const lat = data[0].substring(0, 8);
|
|
969
|
+
const lon = data[0].substring(8);
|
|
970
|
+
ResultFormatter.position(decodeResult, {
|
|
971
|
+
latitude: CoordinateUtils.getDirection(lat[0]) * CoordinateUtils.dmsToDecimalDegrees(Number(lat.substring(1, 4)), Number(lat.substring(4, 6)), Number(lat.substring(6, 8))),
|
|
972
|
+
longitude: CoordinateUtils.getDirection(lon[0]) * CoordinateUtils.dmsToDecimalDegrees(Number(lon.substring(1, 4)), Number(lon.substring(4, 6)), Number(lon.substring(6, 8)))
|
|
973
|
+
});
|
|
974
|
+
ResultFormatter.unknown(decodeResult, data[1]);
|
|
975
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[2]));
|
|
976
|
+
ResultFormatter.altitude(decodeResult, 10 * Number(data[3]));
|
|
977
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(4, 7));
|
|
978
|
+
ResultFormatter.currentFuel(decodeResult, Number(data[7].substring(3).trim()));
|
|
979
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[8].substring(3).trim()));
|
|
980
|
+
ResultFormatter.departureAirport(decodeResult, data[9]);
|
|
981
|
+
ResultFormatter.arrivalAirport(decodeResult, data[10]);
|
|
982
|
+
ResultFormatter.unknown(decodeResult, data[11]);
|
|
983
|
+
decodeResult.decoded = true;
|
|
984
|
+
decodeResult.decoder.decodeLevel = "partial";
|
|
985
|
+
return decodeResult;
|
|
986
|
+
}
|
|
987
|
+
};
|
|
988
|
+
|
|
934
989
|
// lib/plugins/Label_13Through18_Slash.ts
|
|
935
990
|
var Label_13Through18_Slash = class extends DecoderPlugin {
|
|
936
991
|
// eslint-disable-line camelcase
|
|
@@ -1042,9 +1097,19 @@ var Label_15 = class extends DecoderPlugin {
|
|
|
1042
1097
|
if (alt != "---") {
|
|
1043
1098
|
ResultFormatter.altitude(decodeResult, 100 * Number(alt));
|
|
1044
1099
|
}
|
|
1045
|
-
ResultFormatter.temperature(decodeResult, between.substring(22).
|
|
1100
|
+
ResultFormatter.temperature(decodeResult, between.substring(22).replaceAll(" ", "0"));
|
|
1101
|
+
} else if (between.substring(13, 16) === "OFF") {
|
|
1102
|
+
const ddmmyy = between.substring(16, 22);
|
|
1103
|
+
const hhmm = between.substring(22, 26);
|
|
1104
|
+
if (ddmmyy != "------") {
|
|
1105
|
+
const mmddyy = ddmmyy.substring(2, 4) + ddmmyy.substring(0, 2) + ddmmyy.substring(4);
|
|
1106
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertDateTimeToEpoch(hhmm + "00", mmddyy), "epoch");
|
|
1107
|
+
} else {
|
|
1108
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(hhmm), "tod");
|
|
1109
|
+
}
|
|
1110
|
+
ResultFormatter.unknown(decodeResult, between.substring(26));
|
|
1046
1111
|
} else {
|
|
1047
|
-
ResultFormatter.unknown(decodeResult, between.substring(
|
|
1112
|
+
ResultFormatter.unknown(decodeResult, between.substring(26));
|
|
1048
1113
|
}
|
|
1049
1114
|
} else {
|
|
1050
1115
|
if (options.debug) {
|
|
@@ -1413,7 +1478,6 @@ var Label_1L_Slash = class extends DecoderPlugin {
|
|
|
1413
1478
|
const part = parts[i].split(" ");
|
|
1414
1479
|
data.set(part[0], part.slice(1).join(" "));
|
|
1415
1480
|
}
|
|
1416
|
-
console.log(data);
|
|
1417
1481
|
const position = {
|
|
1418
1482
|
latitude: Number(data.get("LAT")),
|
|
1419
1483
|
longitude: Number(data.get("LON"))
|
|
@@ -2343,12 +2407,17 @@ function addCompanyRoute(decodeResult, value) {
|
|
|
2343
2407
|
}
|
|
2344
2408
|
|
|
2345
2409
|
// lib/utils/h1_helper.ts
|
|
2346
|
-
var H1Helper = class {
|
|
2410
|
+
var H1Helper = class _H1Helper {
|
|
2347
2411
|
static decodeH1Message(decodeResult, message) {
|
|
2348
2412
|
const checksum = message.slice(-4);
|
|
2349
2413
|
const data = message.slice(0, message.length - 4);
|
|
2350
2414
|
const fields = data.split("/");
|
|
2351
|
-
parseMessageType(decodeResult, fields[0]);
|
|
2415
|
+
const canDecode = parseMessageType(decodeResult, fields[0]);
|
|
2416
|
+
if (!canDecode) {
|
|
2417
|
+
decodeResult.decoded = false;
|
|
2418
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2419
|
+
return;
|
|
2420
|
+
}
|
|
2352
2421
|
for (let i = 1; i < fields.length; ++i) {
|
|
2353
2422
|
if (fields[i].startsWith("FN")) {
|
|
2354
2423
|
decodeResult.raw.flight_number = fields[i].substring(2);
|
|
@@ -2357,16 +2426,9 @@ var H1Helper = class {
|
|
|
2357
2426
|
} else if (fields[i].startsWith("DC")) {
|
|
2358
2427
|
processDC(decodeResult, fields[i].substring(2).split(","));
|
|
2359
2428
|
} else if (fields[i].startsWith("TS")) {
|
|
2360
|
-
|
|
2361
|
-
let time = DateTimeUtils.convertDateTimeToEpoch(ts[0], ts[1]);
|
|
2362
|
-
if (Number.isNaN(time)) {
|
|
2363
|
-
const date = ts[1].substring(2, 4) + ts[1].substring(0, 2) + ts[1].substring(4, 6);
|
|
2364
|
-
time = DateTimeUtils.convertDateTimeToEpoch(ts[0], date);
|
|
2365
|
-
}
|
|
2366
|
-
decodeResult.raw.message_date = ts[1];
|
|
2367
|
-
decodeResult.raw.message_timestamp = time;
|
|
2429
|
+
_H1Helper.processTS(decodeResult, fields[i].substring(2).split(","));
|
|
2368
2430
|
} else if (fields[i].startsWith("PS")) {
|
|
2369
|
-
|
|
2431
|
+
_H1Helper.processPS(decodeResult, fields[i].substring(2).split(","));
|
|
2370
2432
|
} else if (fields[i].startsWith("DT")) {
|
|
2371
2433
|
const data2 = fields[i].substring(2).split(",");
|
|
2372
2434
|
processDT(decodeResult, data2);
|
|
@@ -2404,6 +2466,56 @@ var H1Helper = class {
|
|
|
2404
2466
|
}
|
|
2405
2467
|
return true;
|
|
2406
2468
|
}
|
|
2469
|
+
static processPS(decodeResult, data) {
|
|
2470
|
+
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2471
|
+
if (position) {
|
|
2472
|
+
decodeResult.raw.position = position;
|
|
2473
|
+
decodeResult.formatted.items.push({
|
|
2474
|
+
type: "aircraft_position",
|
|
2475
|
+
code: "POS",
|
|
2476
|
+
label: "Aircraft Position",
|
|
2477
|
+
value: CoordinateUtils.coordinateString(position)
|
|
2478
|
+
});
|
|
2479
|
+
}
|
|
2480
|
+
if (data.length === 9) {
|
|
2481
|
+
processRoute(decodeResult, data[3], data[1], data[5], data[4], void 0);
|
|
2482
|
+
ResultFormatter.altitude(decodeResult, Number(data[2]) * 100);
|
|
2483
|
+
ResultFormatter.temperature(decodeResult, data[6]);
|
|
2484
|
+
ResultFormatter.unknown(decodeResult, data[7]);
|
|
2485
|
+
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2486
|
+
}
|
|
2487
|
+
if (data.length === 14) {
|
|
2488
|
+
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2489
|
+
processRoute(decodeResult, data[1], data[2], data[4], data[5], data[6]);
|
|
2490
|
+
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2491
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(8));
|
|
2492
|
+
}
|
|
2493
|
+
}
|
|
2494
|
+
static processPosition(decodeResult, data) {
|
|
2495
|
+
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2496
|
+
if (position) {
|
|
2497
|
+
ResultFormatter.position(decodeResult, position);
|
|
2498
|
+
}
|
|
2499
|
+
if (data.length >= 10) {
|
|
2500
|
+
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2501
|
+
processRoute(decodeResult, data[1], data[2], data[4], data[5], data[6]);
|
|
2502
|
+
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2503
|
+
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2504
|
+
ResultFormatter.unknown(decodeResult, data[9]);
|
|
2505
|
+
}
|
|
2506
|
+
if (data.length >= 14) {
|
|
2507
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(10));
|
|
2508
|
+
}
|
|
2509
|
+
}
|
|
2510
|
+
static processTS(decodeResult, data) {
|
|
2511
|
+
let time = DateTimeUtils.convertDateTimeToEpoch(data[0], data[1]);
|
|
2512
|
+
if (Number.isNaN(time)) {
|
|
2513
|
+
const date = data[1].substring(2, 4) + data[1].substring(0, 2) + data[1].substring(4, 6);
|
|
2514
|
+
time = DateTimeUtils.convertDateTimeToEpoch(data[0], date);
|
|
2515
|
+
}
|
|
2516
|
+
decodeResult.raw.message_date = data[1];
|
|
2517
|
+
decodeResult.raw.message_timestamp = time;
|
|
2518
|
+
}
|
|
2407
2519
|
};
|
|
2408
2520
|
function processAirField(decodeResult, data) {
|
|
2409
2521
|
if (data.length === 2) {
|
|
@@ -2481,7 +2593,7 @@ function parseMessageType(decodeResult, messageType) {
|
|
|
2481
2593
|
if (parts.length == 1) {
|
|
2482
2594
|
const type = parts[0].substring(0, 3);
|
|
2483
2595
|
if (type === "POS" && parts[0].length !== 3) {
|
|
2484
|
-
|
|
2596
|
+
H1Helper.processPosition(decodeResult, parts[0].substring(3).split(","));
|
|
2485
2597
|
}
|
|
2486
2598
|
return processMessageType(decodeResult, type);
|
|
2487
2599
|
} else if (parts.length == 2) {
|
|
@@ -2492,11 +2604,12 @@ function parseMessageType(decodeResult, messageType) {
|
|
|
2492
2604
|
}
|
|
2493
2605
|
const type = parts[1].length == 5 ? parts[1].substring(2, 5) : parts[1].substring(3, 6);
|
|
2494
2606
|
if (parts[1].substring(3, 6) === "POS" && parts[1].length > 6) {
|
|
2495
|
-
|
|
2607
|
+
H1Helper.processPosition(decodeResult, parts[1].substring(6).split(","));
|
|
2496
2608
|
}
|
|
2497
|
-
processMessageType(decodeResult, type);
|
|
2609
|
+
return processMessageType(decodeResult, type);
|
|
2498
2610
|
} else {
|
|
2499
2611
|
ResultFormatter.unknown(decodeResult, messageType);
|
|
2612
|
+
return false;
|
|
2500
2613
|
}
|
|
2501
2614
|
}
|
|
2502
2615
|
function processMessageType(decodeResult, type) {
|
|
@@ -2512,7 +2625,9 @@ function processMessageType(decodeResult, type) {
|
|
|
2512
2625
|
decodeResult.formatted.description = "Progress Report";
|
|
2513
2626
|
} else {
|
|
2514
2627
|
decodeResult.formatted.description = "Unknown H1 Message";
|
|
2628
|
+
return false;
|
|
2515
2629
|
}
|
|
2630
|
+
return true;
|
|
2516
2631
|
}
|
|
2517
2632
|
function processDC(decodeResult, data) {
|
|
2518
2633
|
decodeResult.raw.message_date = data[0];
|
|
@@ -2523,60 +2638,6 @@ function processDC(decodeResult, data) {
|
|
|
2523
2638
|
decodeResult.raw.message_timestamp = time;
|
|
2524
2639
|
}
|
|
2525
2640
|
}
|
|
2526
|
-
function processPS(decodeResult, data) {
|
|
2527
|
-
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2528
|
-
if (position) {
|
|
2529
|
-
decodeResult.raw.position = position;
|
|
2530
|
-
decodeResult.formatted.items.push({
|
|
2531
|
-
type: "aircraft_position",
|
|
2532
|
-
code: "POS",
|
|
2533
|
-
label: "Aircraft Position",
|
|
2534
|
-
value: CoordinateUtils.coordinateString(position)
|
|
2535
|
-
});
|
|
2536
|
-
}
|
|
2537
|
-
if (data.length === 9) {
|
|
2538
|
-
processRoute(decodeResult, data[3], data[1], data[5], data[4], void 0);
|
|
2539
|
-
ResultFormatter.altitude(decodeResult, Number(data[2]) * 100);
|
|
2540
|
-
ResultFormatter.temperature(decodeResult, data[6]);
|
|
2541
|
-
ResultFormatter.unknown(decodeResult, data[7]);
|
|
2542
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2543
|
-
}
|
|
2544
|
-
if (data.length === 14) {
|
|
2545
|
-
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2546
|
-
processRoute(decodeResult, data[4], data[2], data[6], data[5], void 0);
|
|
2547
|
-
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2548
|
-
ResultFormatter.groundspeed(decodeResult, Number(data[10]));
|
|
2549
|
-
ResultFormatter.unknown(decodeResult, data[1]);
|
|
2550
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2551
|
-
ResultFormatter.unknown(decodeResult, data[9]);
|
|
2552
|
-
ResultFormatter.unknown(decodeResult, data.slice(11).join(","));
|
|
2553
|
-
}
|
|
2554
|
-
}
|
|
2555
|
-
function processPosition2(decodeResult, data) {
|
|
2556
|
-
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2557
|
-
if (position) {
|
|
2558
|
-
decodeResult.raw.position = position;
|
|
2559
|
-
decodeResult.formatted.items.push({
|
|
2560
|
-
type: "aircraft_position",
|
|
2561
|
-
code: "POS",
|
|
2562
|
-
label: "Aircraft Position",
|
|
2563
|
-
value: CoordinateUtils.coordinateString(position)
|
|
2564
|
-
});
|
|
2565
|
-
}
|
|
2566
|
-
if (data.length >= 10) {
|
|
2567
|
-
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2568
|
-
processRoute(decodeResult, data[1], data[2], data[4], data[5], data[6]);
|
|
2569
|
-
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2570
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2571
|
-
ResultFormatter.unknown(decodeResult, data[9]);
|
|
2572
|
-
}
|
|
2573
|
-
if (data.length >= 14) {
|
|
2574
|
-
ResultFormatter.groundspeed(decodeResult, Number(data[10]));
|
|
2575
|
-
ResultFormatter.unknown(decodeResult, data[11]);
|
|
2576
|
-
ResultFormatter.unknown(decodeResult, data[12]);
|
|
2577
|
-
ResultFormatter.unknown(decodeResult, data[13]);
|
|
2578
|
-
}
|
|
2579
|
-
}
|
|
2580
2641
|
function processRoute(decodeResult, last, time, next, eta, then, date) {
|
|
2581
2642
|
const lastTime = date ? DateTimeUtils.convertDateTimeToEpoch(time, date) : DateTimeUtils.convertHHMMSSToTod(time);
|
|
2582
2643
|
const nextTime = date ? DateTimeUtils.convertDateTimeToEpoch(eta, date) : DateTimeUtils.convertHHMMSSToTod(eta);
|
|
@@ -2688,6 +2749,129 @@ var Label_4N = class extends DecoderPlugin {
|
|
|
2688
2749
|
}
|
|
2689
2750
|
};
|
|
2690
2751
|
|
|
2752
|
+
// lib/plugins/Label_4T_AGFSR.ts
|
|
2753
|
+
var Label_4T_AGFSR = class extends DecoderPlugin {
|
|
2754
|
+
name = "label-4t-agfsr";
|
|
2755
|
+
qualifiers() {
|
|
2756
|
+
return {
|
|
2757
|
+
labels: ["4T"],
|
|
2758
|
+
preambles: ["AGFSR"]
|
|
2759
|
+
};
|
|
2760
|
+
}
|
|
2761
|
+
decode(message, options = {}) {
|
|
2762
|
+
const decodeResult = this.defaultResult();
|
|
2763
|
+
decodeResult.decoder.name = this.name;
|
|
2764
|
+
decodeResult.formatted.description = "Position Report";
|
|
2765
|
+
decodeResult.message = message;
|
|
2766
|
+
const data = message.text.substring(5).split("/");
|
|
2767
|
+
if (!message.text.startsWith("AGFSR") || data.length !== 20) {
|
|
2768
|
+
if (options.debug) {
|
|
2769
|
+
console.log(`Decoder: Unknown 4T message: ${message.text}`);
|
|
2770
|
+
}
|
|
2771
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
2772
|
+
decodeResult.decoded = false;
|
|
2773
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2774
|
+
return decodeResult;
|
|
2775
|
+
}
|
|
2776
|
+
ResultFormatter.flightNumber(decodeResult, data[0].trim());
|
|
2777
|
+
ResultFormatter.departureDay(decodeResult, Number(data[1]));
|
|
2778
|
+
ResultFormatter.arrivalDay(decodeResult, Number(data[2]));
|
|
2779
|
+
ResultFormatter.departureAirport(decodeResult, data[3].substring(0, 3), "IATA");
|
|
2780
|
+
ResultFormatter.arrivalAirport(decodeResult, data[3].substring(3), "IATA");
|
|
2781
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[4].substring(0, 4)));
|
|
2782
|
+
ResultFormatter.unknown(decodeResult, data[5], "/");
|
|
2783
|
+
const lat = data[6].substring(0, 7);
|
|
2784
|
+
const lon = data[6].substring(7, 15);
|
|
2785
|
+
ResultFormatter.position(decodeResult, {
|
|
2786
|
+
latitude: CoordinateUtils.getDirection(lat[6]) * Number(lat.substring(0, 2)) + Number(lat.substring(2, 6)) / 60,
|
|
2787
|
+
longitude: CoordinateUtils.getDirection(lon[7]) * Number(lon.substring(0, 3)) + Number(lon.substring(3, 7)) / 60
|
|
2788
|
+
});
|
|
2789
|
+
ResultFormatter.altitude(decodeResult, 100 * Number(data[7]));
|
|
2790
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(8), "/");
|
|
2791
|
+
decodeResult.decoded = true;
|
|
2792
|
+
decodeResult.decoder.decodeLevel = "partial";
|
|
2793
|
+
return decodeResult;
|
|
2794
|
+
}
|
|
2795
|
+
};
|
|
2796
|
+
|
|
2797
|
+
// lib/plugins/Label_58.ts
|
|
2798
|
+
var Label_58 = class extends DecoderPlugin {
|
|
2799
|
+
name = "label-58";
|
|
2800
|
+
qualifiers() {
|
|
2801
|
+
return {
|
|
2802
|
+
labels: ["58"]
|
|
2803
|
+
};
|
|
2804
|
+
}
|
|
2805
|
+
decode(message, options = {}) {
|
|
2806
|
+
const decodeResult = this.defaultResult();
|
|
2807
|
+
decodeResult.decoder.name = this.name;
|
|
2808
|
+
decodeResult.formatted.description = "Position Report";
|
|
2809
|
+
decodeResult.message = message;
|
|
2810
|
+
const data = message.text.split("/");
|
|
2811
|
+
if (data.length === 8) {
|
|
2812
|
+
ResultFormatter.flightNumber(decodeResult, data[0]);
|
|
2813
|
+
ResultFormatter.day(decodeResult, Number(data[1]));
|
|
2814
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[2]));
|
|
2815
|
+
const lat = data[3];
|
|
2816
|
+
const lon = data[4];
|
|
2817
|
+
ResultFormatter.position(decodeResult, {
|
|
2818
|
+
latitude: CoordinateUtils.getDirection(lat[0]) * Number(lat.substring(1)),
|
|
2819
|
+
longitude: CoordinateUtils.getDirection(lon[0]) * Number(lon.substring(1))
|
|
2820
|
+
});
|
|
2821
|
+
ResultFormatter.altitude(decodeResult, Number(data[5]));
|
|
2822
|
+
ResultFormatter.unknown(decodeResult, data[6], "/");
|
|
2823
|
+
ResultFormatter.unknown(decodeResult, data[7], "/");
|
|
2824
|
+
} else {
|
|
2825
|
+
if (options.debug) {
|
|
2826
|
+
console.log(`Decoder: Unknown 58 message: ${message.text}`);
|
|
2827
|
+
}
|
|
2828
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
2829
|
+
decodeResult.decoded = false;
|
|
2830
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2831
|
+
return decodeResult;
|
|
2832
|
+
}
|
|
2833
|
+
decodeResult.decoded = true;
|
|
2834
|
+
decodeResult.decoder.decodeLevel = "partial";
|
|
2835
|
+
return decodeResult;
|
|
2836
|
+
}
|
|
2837
|
+
};
|
|
2838
|
+
|
|
2839
|
+
// lib/plugins/Label_4T_ETA.ts
|
|
2840
|
+
var Label_4T_ETA = class extends DecoderPlugin {
|
|
2841
|
+
name = "label-4t-eta";
|
|
2842
|
+
qualifiers() {
|
|
2843
|
+
return {
|
|
2844
|
+
labels: ["4T"],
|
|
2845
|
+
preambles: ["ETA"]
|
|
2846
|
+
};
|
|
2847
|
+
}
|
|
2848
|
+
decode(message, options = {}) {
|
|
2849
|
+
const decodeResult = this.defaultResult();
|
|
2850
|
+
decodeResult.decoder.name = this.name;
|
|
2851
|
+
decodeResult.formatted.description = "ETA Report";
|
|
2852
|
+
decodeResult.message = message;
|
|
2853
|
+
const data = message.text.substring(3).split("/");
|
|
2854
|
+
if (!message.text.startsWith("ETA") || data.length !== 3) {
|
|
2855
|
+
if (options.debug) {
|
|
2856
|
+
console.log(`Decoder: Unknown 4T message: ${message.text}`);
|
|
2857
|
+
}
|
|
2858
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
2859
|
+
decodeResult.decoded = false;
|
|
2860
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2861
|
+
return decodeResult;
|
|
2862
|
+
}
|
|
2863
|
+
ResultFormatter.flightNumber(decodeResult, data[0].trim());
|
|
2864
|
+
ResultFormatter.departureDay(decodeResult, Number(data[1]));
|
|
2865
|
+
const etaData = data[2].split(" ");
|
|
2866
|
+
ResultFormatter.arrivalDay(decodeResult, Number(etaData[0]));
|
|
2867
|
+
ResultFormatter.arrivalAirport(decodeResult, etaData[1], "IATA");
|
|
2868
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(etaData[2].substring(0, 4)));
|
|
2869
|
+
decodeResult.decoded = true;
|
|
2870
|
+
decodeResult.decoder.decodeLevel = "full";
|
|
2871
|
+
return decodeResult;
|
|
2872
|
+
}
|
|
2873
|
+
};
|
|
2874
|
+
|
|
2691
2875
|
// lib/plugins/Label_80.ts
|
|
2692
2876
|
var Label_80 = class extends DecoderPlugin {
|
|
2693
2877
|
name = "label-80";
|
|
@@ -3124,6 +3308,65 @@ var Label_H1_OHMA = class extends DecoderPlugin {
|
|
|
3124
3308
|
}
|
|
3125
3309
|
};
|
|
3126
3310
|
|
|
3311
|
+
// lib/plugins/Label_H1_Slash.ts
|
|
3312
|
+
var Label_H1_Slash = class extends DecoderPlugin {
|
|
3313
|
+
name = "label-h1-slash";
|
|
3314
|
+
qualifiers() {
|
|
3315
|
+
return {
|
|
3316
|
+
labels: ["H1"],
|
|
3317
|
+
preambles: ["/"]
|
|
3318
|
+
};
|
|
3319
|
+
}
|
|
3320
|
+
decode(message, options = {}) {
|
|
3321
|
+
let decodeResult = this.defaultResult();
|
|
3322
|
+
decodeResult.decoder.name = this.name;
|
|
3323
|
+
decodeResult.formatted.description = "Position Report";
|
|
3324
|
+
decodeResult.message = message;
|
|
3325
|
+
const checksum = message.text.slice(-4);
|
|
3326
|
+
const data = message.text.slice(0, message.text.length - 4);
|
|
3327
|
+
const fields = data.split("/");
|
|
3328
|
+
if (fields[0] !== "") {
|
|
3329
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
3330
|
+
decodeResult.decoded = false;
|
|
3331
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
3332
|
+
return decodeResult;
|
|
3333
|
+
}
|
|
3334
|
+
const headerData = fields[1].split(".");
|
|
3335
|
+
ResultFormatter.unknown(decodeResult, headerData[0]);
|
|
3336
|
+
if (headerData[1] === "POS" && fields[2].startsWith("TS") && fields[2].length > 15) {
|
|
3337
|
+
H1Helper.processPosition(decodeResult, fields[2].substring(15).split(","));
|
|
3338
|
+
} else if (headerData[1] === "POS") {
|
|
3339
|
+
} else if (headerData[1].startsWith("POS")) {
|
|
3340
|
+
H1Helper.processPosition(decodeResult, headerData[1].substring(3).split(","));
|
|
3341
|
+
} else {
|
|
3342
|
+
ResultFormatter.unknown(decodeResult, headerData[1], ".");
|
|
3343
|
+
}
|
|
3344
|
+
for (let i = 2; i < fields.length; i++) {
|
|
3345
|
+
const field = fields[i];
|
|
3346
|
+
if (field.startsWith("TS")) {
|
|
3347
|
+
H1Helper.processTS(decodeResult, field.substring(2, 15).split(","));
|
|
3348
|
+
} else if (field.startsWith("PS")) {
|
|
3349
|
+
H1Helper.processPS(decodeResult, field.substring(2).split(","));
|
|
3350
|
+
} else {
|
|
3351
|
+
ResultFormatter.unknown(decodeResult, field, "/");
|
|
3352
|
+
}
|
|
3353
|
+
}
|
|
3354
|
+
if (decodeResult.formatted.items.length === 0) {
|
|
3355
|
+
if (options.debug) {
|
|
3356
|
+
console.log(`Decoder: Unknown H1 message: ${message.text}`);
|
|
3357
|
+
}
|
|
3358
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
3359
|
+
decodeResult.decoded = false;
|
|
3360
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
3361
|
+
return decodeResult;
|
|
3362
|
+
}
|
|
3363
|
+
ResultFormatter.checksum(decodeResult, checksum);
|
|
3364
|
+
decodeResult.decoded = true;
|
|
3365
|
+
decodeResult.decoder.decodeLevel = !decodeResult.remaining.text ? "full" : "partial";
|
|
3366
|
+
return decodeResult;
|
|
3367
|
+
}
|
|
3368
|
+
};
|
|
3369
|
+
|
|
3127
3370
|
// lib/plugins/Label_H1_StarPOS.ts
|
|
3128
3371
|
var Label_H1_StarPOS = class extends DecoderPlugin {
|
|
3129
3372
|
name = "label-h1-star-pos";
|
|
@@ -4304,6 +4547,7 @@ var MessageDecoder = class {
|
|
|
4304
4547
|
this.registerPlugin(new Label_10_POS(this));
|
|
4305
4548
|
this.registerPlugin(new Label_10_Slash(this));
|
|
4306
4549
|
this.registerPlugin(new Label_12_N_Space(this));
|
|
4550
|
+
this.registerPlugin(new Label_12_POS(this));
|
|
4307
4551
|
this.registerPlugin(new Label_13Through18_Slash(this));
|
|
4308
4552
|
this.registerPlugin(new Label_15(this));
|
|
4309
4553
|
this.registerPlugin(new Label_15_FST(this));
|
|
@@ -4330,13 +4574,17 @@ var MessageDecoder = class {
|
|
|
4330
4574
|
this.registerPlugin(new Label_4A_Slash_01(this));
|
|
4331
4575
|
this.registerPlugin(new Label_4J_POS(this));
|
|
4332
4576
|
this.registerPlugin(new Label_4N(this));
|
|
4577
|
+
this.registerPlugin(new Label_4T_AGFSR(this));
|
|
4578
|
+
this.registerPlugin(new Label_4T_ETA(this));
|
|
4333
4579
|
this.registerPlugin(new Label_B6_Forwardslash(this));
|
|
4334
4580
|
this.registerPlugin(new Label_H1_FLR(this));
|
|
4335
4581
|
this.registerPlugin(new Label_H1_OHMA(this));
|
|
4336
4582
|
this.registerPlugin(new Label_H1_WRN(this));
|
|
4337
4583
|
this.registerPlugin(new Label_H1(this));
|
|
4584
|
+
this.registerPlugin(new Label_H1_Slash(this));
|
|
4338
4585
|
this.registerPlugin(new Label_H1_StarPOS(this));
|
|
4339
4586
|
this.registerPlugin(new Label_HX(this));
|
|
4587
|
+
this.registerPlugin(new Label_58(this));
|
|
4340
4588
|
this.registerPlugin(new Label_80(this));
|
|
4341
4589
|
this.registerPlugin(new Label_83(this));
|
|
4342
4590
|
this.registerPlugin(new Label_8E(this));
|