@airframes/acars-decoder 1.6.14 → 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 +500 -176
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +500 -176
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -4
package/dist/index.js
CHANGED
|
@@ -75,10 +75,13 @@ var DateTimeUtils = class {
|
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
77
|
*
|
|
78
|
-
* @param time HHMMSS
|
|
78
|
+
* @param time HHMMSS or HHMM
|
|
79
79
|
* @returns seconds since midnight
|
|
80
80
|
*/
|
|
81
81
|
static convertHHMMSSToTod(time) {
|
|
82
|
+
if (time.length === 4) {
|
|
83
|
+
time += "00";
|
|
84
|
+
}
|
|
82
85
|
const h = Number(time.substring(0, 2));
|
|
83
86
|
const m = Number(time.substring(2, 4));
|
|
84
87
|
const s = Number(time.substring(4, 6));
|
|
@@ -566,14 +569,24 @@ var ResultFormatter = class {
|
|
|
566
569
|
value: DateTimeUtils.timestampToString(time, "tod")
|
|
567
570
|
});
|
|
568
571
|
}
|
|
569
|
-
static off(decodeResult, time) {
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
572
|
+
static off(decodeResult, time, type = "tod") {
|
|
573
|
+
if (type === "tod") {
|
|
574
|
+
decodeResult.raw.off_time = time;
|
|
575
|
+
decodeResult.formatted.items.push({
|
|
576
|
+
type: "time_of_day",
|
|
577
|
+
code: "OFF",
|
|
578
|
+
label: "Takeoff Time",
|
|
579
|
+
value: DateTimeUtils.timestampToString(time, "tod")
|
|
580
|
+
});
|
|
581
|
+
} else {
|
|
582
|
+
decodeResult.raw.off_date = time;
|
|
583
|
+
decodeResult.formatted.items.push({
|
|
584
|
+
type: "epoch",
|
|
585
|
+
code: "OFF",
|
|
586
|
+
label: "Takeoff Time",
|
|
587
|
+
value: DateTimeUtils.timestampToString(time, "epoch")
|
|
588
|
+
});
|
|
589
|
+
}
|
|
577
590
|
}
|
|
578
591
|
static on(decodeResult, time) {
|
|
579
592
|
decodeResult.raw.on_time = time;
|
|
@@ -603,27 +616,36 @@ var ResultFormatter = class {
|
|
|
603
616
|
});
|
|
604
617
|
}
|
|
605
618
|
static day(decodeResult, day) {
|
|
606
|
-
decodeResult.raw.
|
|
619
|
+
decodeResult.raw.day = day;
|
|
607
620
|
decodeResult.formatted.items.push({
|
|
608
|
-
type: "
|
|
621
|
+
type: "day",
|
|
609
622
|
code: "MSG_DAY",
|
|
610
623
|
label: "Day of Month",
|
|
611
624
|
value: `${day}`
|
|
612
625
|
});
|
|
613
626
|
}
|
|
627
|
+
static month(decodeResult, month) {
|
|
628
|
+
decodeResult.raw.month = month;
|
|
629
|
+
decodeResult.formatted.items.push({
|
|
630
|
+
type: "month",
|
|
631
|
+
code: "MSG_MON",
|
|
632
|
+
label: "Month of Year",
|
|
633
|
+
value: `${month}`
|
|
634
|
+
});
|
|
635
|
+
}
|
|
614
636
|
static departureDay(decodeResult, day) {
|
|
615
|
-
decodeResult.raw.
|
|
637
|
+
decodeResult.raw.departure_day = day;
|
|
616
638
|
decodeResult.formatted.items.push({
|
|
617
|
-
type: "
|
|
639
|
+
type: "day",
|
|
618
640
|
code: "DEP_DAY",
|
|
619
641
|
label: "Departure Day",
|
|
620
642
|
value: `${day}`
|
|
621
643
|
});
|
|
622
644
|
}
|
|
623
645
|
static arrivalDay(decodeResult, day) {
|
|
624
|
-
decodeResult.raw.
|
|
646
|
+
decodeResult.raw.arrival_day = day;
|
|
625
647
|
decodeResult.formatted.items.push({
|
|
626
|
-
type: "
|
|
648
|
+
type: "day",
|
|
627
649
|
code: "ARR_DAY",
|
|
628
650
|
label: "Arrival Day",
|
|
629
651
|
value: `${day}`
|
|
@@ -718,14 +740,14 @@ var Label_5Z_Slash = class extends DecoderPlugin {
|
|
|
718
740
|
const info = data[2].split(" ");
|
|
719
741
|
ResultFormatter.departureAirport(decodeResult, info[1]);
|
|
720
742
|
ResultFormatter.arrivalAirport(decodeResult, info[2]);
|
|
721
|
-
decodeResult.raw.
|
|
743
|
+
decodeResult.raw.day = Number(info[3]);
|
|
722
744
|
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(info[4]));
|
|
723
745
|
ResultFormatter.arrivalRunway(decodeResult, info[5].slice(1));
|
|
724
746
|
ResultFormatter.unknownArr(decodeResult, data.slice(3), "/");
|
|
725
747
|
} else if (type === "B3") {
|
|
726
748
|
ResultFormatter.departureAirport(decodeResult, header[1].substring(0, 3), "IATA");
|
|
727
749
|
ResultFormatter.arrivalAirport(decodeResult, header[1].substring(3), "IATA");
|
|
728
|
-
decodeResult.raw.
|
|
750
|
+
decodeResult.raw.day = Number(header[2]);
|
|
729
751
|
ResultFormatter.arrivalRunway(decodeResult, header[3].slice(1));
|
|
730
752
|
if (header.length > 4) {
|
|
731
753
|
ResultFormatter.unknownArr(decodeResult, header.slice(4), "/");
|
|
@@ -734,7 +756,7 @@ var Label_5Z_Slash = class extends DecoderPlugin {
|
|
|
734
756
|
const info = data[2].split(" ");
|
|
735
757
|
ResultFormatter.departureAirport(decodeResult, info[1]);
|
|
736
758
|
ResultFormatter.arrivalAirport(decodeResult, info[2]);
|
|
737
|
-
decodeResult.raw.
|
|
759
|
+
decodeResult.raw.day = Number(info[3]);
|
|
738
760
|
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(info[4]));
|
|
739
761
|
ResultFormatter.unknownArr(decodeResult, info.slice(5), " ");
|
|
740
762
|
} else if (type === "C3") {
|
|
@@ -744,10 +766,10 @@ var Label_5Z_Slash = class extends DecoderPlugin {
|
|
|
744
766
|
const airports = data[2].split(" ");
|
|
745
767
|
ResultFormatter.departureAirport(decodeResult, airports[1]);
|
|
746
768
|
ResultFormatter.arrivalAirport(decodeResult, airports[2]);
|
|
747
|
-
decodeResult.raw.
|
|
769
|
+
decodeResult.raw.day = Number(airports[3]);
|
|
748
770
|
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(airports[4]));
|
|
749
771
|
const estimates = data[3].split(" ");
|
|
750
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(estimates[1]
|
|
772
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(estimates[1]));
|
|
751
773
|
ResultFormatter.unknown(decodeResult, estimates[2]);
|
|
752
774
|
} else {
|
|
753
775
|
if (options.debug) {
|
|
@@ -891,16 +913,16 @@ var Label_10_Slash = class extends DecoderPlugin {
|
|
|
891
913
|
ResultFormatter.heading(decodeResult, Number(parts[5]));
|
|
892
914
|
ResultFormatter.altitude(decodeResult, 100 * Number(parts[6]));
|
|
893
915
|
ResultFormatter.arrivalAirport(decodeResult, parts[7]);
|
|
894
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[8]
|
|
916
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[8]));
|
|
895
917
|
const waypoints = [{
|
|
896
918
|
name: parts[11]
|
|
897
919
|
}, {
|
|
898
920
|
name: parts[12],
|
|
899
|
-
time: DateTimeUtils.convertHHMMSSToTod(parts[13]
|
|
921
|
+
time: DateTimeUtils.convertHHMMSSToTod(parts[13]),
|
|
900
922
|
timeFormat: "tod"
|
|
901
923
|
}, {
|
|
902
924
|
name: parts[14],
|
|
903
|
-
time: DateTimeUtils.convertHHMMSSToTod(parts[15]
|
|
925
|
+
time: DateTimeUtils.convertHHMMSSToTod(parts[15]),
|
|
904
926
|
timeFormat: "tod"
|
|
905
927
|
}];
|
|
906
928
|
ResultFormatter.route(decodeResult, { waypoints });
|
|
@@ -920,7 +942,7 @@ var Label_12_N_Space = class extends DecoderPlugin {
|
|
|
920
942
|
qualifiers() {
|
|
921
943
|
return {
|
|
922
944
|
labels: ["12"],
|
|
923
|
-
preambles: ["N "]
|
|
945
|
+
preambles: ["N ", "S "]
|
|
924
946
|
};
|
|
925
947
|
}
|
|
926
948
|
decode(message, options = {}) {
|
|
@@ -956,6 +978,51 @@ var Label_12_N_Space = class extends DecoderPlugin {
|
|
|
956
978
|
}
|
|
957
979
|
};
|
|
958
980
|
|
|
981
|
+
// lib/plugins/Label_12_POS.ts
|
|
982
|
+
var Label_12_POS = class extends DecoderPlugin {
|
|
983
|
+
name = "label-12-pos";
|
|
984
|
+
qualifiers() {
|
|
985
|
+
return {
|
|
986
|
+
labels: ["12"],
|
|
987
|
+
preambles: ["POS"]
|
|
988
|
+
};
|
|
989
|
+
}
|
|
990
|
+
decode(message, options = {}) {
|
|
991
|
+
const decodeResult = this.defaultResult();
|
|
992
|
+
decodeResult.decoder.name = this.name;
|
|
993
|
+
decodeResult.formatted.description = "Position Report";
|
|
994
|
+
decodeResult.message = message;
|
|
995
|
+
const data = message.text.substring(3).split(",");
|
|
996
|
+
if (!message.text.startsWith("POS") || data.length !== 12) {
|
|
997
|
+
if (options.debug) {
|
|
998
|
+
console.log(`Decoder: Unknown 12 message: ${message.text}`);
|
|
999
|
+
}
|
|
1000
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1001
|
+
decodeResult.decoded = false;
|
|
1002
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1003
|
+
return decodeResult;
|
|
1004
|
+
}
|
|
1005
|
+
const lat = data[0].substring(0, 8);
|
|
1006
|
+
const lon = data[0].substring(8);
|
|
1007
|
+
ResultFormatter.position(decodeResult, {
|
|
1008
|
+
latitude: CoordinateUtils.getDirection(lat[0]) * CoordinateUtils.dmsToDecimalDegrees(Number(lat.substring(1, 4)), Number(lat.substring(4, 6)), Number(lat.substring(6, 8))),
|
|
1009
|
+
longitude: CoordinateUtils.getDirection(lon[0]) * CoordinateUtils.dmsToDecimalDegrees(Number(lon.substring(1, 4)), Number(lon.substring(4, 6)), Number(lon.substring(6, 8)))
|
|
1010
|
+
});
|
|
1011
|
+
ResultFormatter.unknown(decodeResult, data[1]);
|
|
1012
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[2]));
|
|
1013
|
+
ResultFormatter.altitude(decodeResult, 10 * Number(data[3]));
|
|
1014
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(4, 7));
|
|
1015
|
+
ResultFormatter.currentFuel(decodeResult, Number(data[7].substring(3).trim()));
|
|
1016
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[8].substring(3).trim()));
|
|
1017
|
+
ResultFormatter.departureAirport(decodeResult, data[9]);
|
|
1018
|
+
ResultFormatter.arrivalAirport(decodeResult, data[10]);
|
|
1019
|
+
ResultFormatter.unknown(decodeResult, data[11]);
|
|
1020
|
+
decodeResult.decoded = true;
|
|
1021
|
+
decodeResult.decoder.decodeLevel = "partial";
|
|
1022
|
+
return decodeResult;
|
|
1023
|
+
}
|
|
1024
|
+
};
|
|
1025
|
+
|
|
959
1026
|
// lib/plugins/Label_13Through18_Slash.ts
|
|
960
1027
|
var Label_13Through18_Slash = class extends DecoderPlugin {
|
|
961
1028
|
// eslint-disable-line camelcase
|
|
@@ -986,7 +1053,7 @@ var Label_13Through18_Slash = class extends DecoderPlugin {
|
|
|
986
1053
|
const data = parts[2].split(" ");
|
|
987
1054
|
ResultFormatter.departureAirport(decodeResult, data[1]);
|
|
988
1055
|
ResultFormatter.arrivalAirport(decodeResult, data[2]);
|
|
989
|
-
decodeResult.raw.
|
|
1056
|
+
decodeResult.raw.day = Number(data[3]);
|
|
990
1057
|
const time = DateTimeUtils.convertHHMMSSToTod(data[4]);
|
|
991
1058
|
if (labelNumber === 13) {
|
|
992
1059
|
ResultFormatter.out(decodeResult, time);
|
|
@@ -1046,7 +1113,7 @@ function getMsgType(labelNumber) {
|
|
|
1046
1113
|
|
|
1047
1114
|
// lib/plugins/Label_15.ts
|
|
1048
1115
|
var Label_15 = class extends DecoderPlugin {
|
|
1049
|
-
name = "label-
|
|
1116
|
+
name = "label-15";
|
|
1050
1117
|
qualifiers() {
|
|
1051
1118
|
return {
|
|
1052
1119
|
labels: ["15"],
|
|
@@ -1057,10 +1124,38 @@ var Label_15 = class extends DecoderPlugin {
|
|
|
1057
1124
|
const decodeResult = this.defaultResult();
|
|
1058
1125
|
decodeResult.decoder.name = this.name;
|
|
1059
1126
|
decodeResult.formatted.description = "Position Report";
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1127
|
+
decodeResult.message = message;
|
|
1128
|
+
if (message.text.startsWith("(2") && message.text.endsWith("(Z")) {
|
|
1129
|
+
const between = message.text.substring(2, message.text.length - 2);
|
|
1130
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(between.substring(0, 13)));
|
|
1131
|
+
if (between.length === 25) {
|
|
1132
|
+
ResultFormatter.unknown(decodeResult, between.substring(13, 19));
|
|
1133
|
+
const alt = between.substring(19, 22);
|
|
1134
|
+
if (alt != "---") {
|
|
1135
|
+
ResultFormatter.altitude(decodeResult, 100 * Number(alt));
|
|
1136
|
+
}
|
|
1137
|
+
ResultFormatter.temperature(decodeResult, between.substring(22).replaceAll(" ", "0"));
|
|
1138
|
+
} else if (between.substring(13, 16) === "OFF") {
|
|
1139
|
+
const ddmmyy = between.substring(16, 22);
|
|
1140
|
+
const hhmm = between.substring(22, 26);
|
|
1141
|
+
if (ddmmyy != "------") {
|
|
1142
|
+
const mmddyy = ddmmyy.substring(2, 4) + ddmmyy.substring(0, 2) + ddmmyy.substring(4);
|
|
1143
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertDateTimeToEpoch(hhmm + "00", mmddyy), "epoch");
|
|
1144
|
+
} else {
|
|
1145
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(hhmm), "tod");
|
|
1146
|
+
}
|
|
1147
|
+
ResultFormatter.unknown(decodeResult, between.substring(26));
|
|
1148
|
+
} else {
|
|
1149
|
+
ResultFormatter.unknown(decodeResult, between.substring(26));
|
|
1150
|
+
}
|
|
1151
|
+
} else {
|
|
1152
|
+
if (options.debug) {
|
|
1153
|
+
console.log(`Decoder: Unknown 15 message: ${message.text}`);
|
|
1154
|
+
}
|
|
1155
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1156
|
+
decodeResult.decoded = false;
|
|
1157
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1158
|
+
return decodeResult;
|
|
1064
1159
|
}
|
|
1065
1160
|
decodeResult.decoded = true;
|
|
1066
1161
|
decodeResult.decoder.decodeLevel = "partial";
|
|
@@ -1113,7 +1208,7 @@ var Label_16_N_Space = class extends DecoderPlugin {
|
|
|
1113
1208
|
qualifiers() {
|
|
1114
1209
|
return {
|
|
1115
1210
|
labels: ["16"],
|
|
1116
|
-
preambles: ["N "]
|
|
1211
|
+
preambles: ["N ", "S "]
|
|
1117
1212
|
};
|
|
1118
1213
|
}
|
|
1119
1214
|
decode(message, options = {}) {
|
|
@@ -1243,7 +1338,7 @@ var Label_1L_3Line = class extends DecoderPlugin {
|
|
|
1243
1338
|
}
|
|
1244
1339
|
const eta = data.get("ETA");
|
|
1245
1340
|
if (eta) {
|
|
1246
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta
|
|
1341
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta));
|
|
1247
1342
|
data.delete("ETA");
|
|
1248
1343
|
}
|
|
1249
1344
|
const alt = data.get("ALT");
|
|
@@ -1324,8 +1419,8 @@ var Label_1L_070 = class extends DecoderPlugin {
|
|
|
1324
1419
|
}
|
|
1325
1420
|
ResultFormatter.departureAirport(decodeResult, parts[0]);
|
|
1326
1421
|
ResultFormatter.arrivalAirport(decodeResult, parts[1]);
|
|
1327
|
-
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[2]
|
|
1328
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[3]
|
|
1422
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[2]));
|
|
1423
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[3]));
|
|
1329
1424
|
ResultFormatter.position(decodeResult, {
|
|
1330
1425
|
latitude: CoordinateUtils.getDirection(parts[4][0]) * Number(parts[4].substring(1)),
|
|
1331
1426
|
longitude: CoordinateUtils.getDirection(parts[5][0]) * Number(parts[5].substring(1))
|
|
@@ -1420,7 +1515,6 @@ var Label_1L_Slash = class extends DecoderPlugin {
|
|
|
1420
1515
|
const part = parts[i].split(" ");
|
|
1421
1516
|
data.set(part[0], part.slice(1).join(" "));
|
|
1422
1517
|
}
|
|
1423
|
-
console.log(data);
|
|
1424
1518
|
const position = {
|
|
1425
1519
|
latitude: Number(data.get("LAT")),
|
|
1426
1520
|
longitude: Number(data.get("LON"))
|
|
@@ -1445,7 +1539,7 @@ var Label_1L_Slash = class extends DecoderPlugin {
|
|
|
1445
1539
|
}
|
|
1446
1540
|
const eta = data.get("ETA");
|
|
1447
1541
|
if (eta) {
|
|
1448
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta
|
|
1542
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta));
|
|
1449
1543
|
data.delete("ETA");
|
|
1450
1544
|
}
|
|
1451
1545
|
let remaining = "";
|
|
@@ -1579,7 +1673,7 @@ var Label_22_OFF = class extends DecoderPlugin {
|
|
|
1579
1673
|
ResultFormatter.flightNumber(decodeResult, fields[0]);
|
|
1580
1674
|
ResultFormatter.departureDay(decodeResult, Number(fields[1].substring(0, 2)));
|
|
1581
1675
|
ResultFormatter.arrivalDay(decodeResult, Number(fields[1].substring(2, 4)));
|
|
1582
|
-
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(4, 8)
|
|
1676
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(4, 8)));
|
|
1583
1677
|
ResultFormatter.departureAirport(decodeResult, fields[1].substring(8, 12));
|
|
1584
1678
|
ResultFormatter.arrivalAirport(decodeResult, fields[1].substring(12, 16));
|
|
1585
1679
|
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 22)));
|
|
@@ -1595,7 +1689,7 @@ var Label_22_OFF = class extends DecoderPlugin {
|
|
|
1595
1689
|
}
|
|
1596
1690
|
ResultFormatter.departureAirport(decodeResult, fields[0]);
|
|
1597
1691
|
ResultFormatter.arrivalAirport(decodeResult, fields[1]);
|
|
1598
|
-
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[2]
|
|
1692
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[2]));
|
|
1599
1693
|
ResultFormatter.unknown(decodeResult, fields[3]);
|
|
1600
1694
|
decodeResult.decoded = true;
|
|
1601
1695
|
decodeResult.decoder.decodeLevel = "partial";
|
|
@@ -1612,12 +1706,12 @@ var Label_22_OFF = class extends DecoderPlugin {
|
|
|
1612
1706
|
ResultFormatter.position(decodeResult, position);
|
|
1613
1707
|
}
|
|
1614
1708
|
ResultFormatter.day(decodeResult, Number(fields[1].substring(14, 16)));
|
|
1615
|
-
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 20)
|
|
1709
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 20)));
|
|
1616
1710
|
ResultFormatter.departureAirport(decodeResult, fields[1].substring(20, 24));
|
|
1617
1711
|
ResultFormatter.arrivalAirport(decodeResult, fields[1].substring(24, 28));
|
|
1618
|
-
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(28, 32)
|
|
1712
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(28, 32)));
|
|
1619
1713
|
ResultFormatter.unknown(decodeResult, fields[1].substring(32, 36));
|
|
1620
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(36, 40)
|
|
1714
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(36, 40)));
|
|
1621
1715
|
decodeResult.decoded = true;
|
|
1622
1716
|
decodeResult.decoder.decodeLevel = "partial";
|
|
1623
1717
|
} else {
|
|
@@ -1699,7 +1793,7 @@ var Label_24_Slash = class extends DecoderPlugin {
|
|
|
1699
1793
|
longitude: (lon[0] === "E" ? 1 : -1) * Number(lon.substring(1))
|
|
1700
1794
|
};
|
|
1701
1795
|
ResultFormatter.position(decodeResult, position);
|
|
1702
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[8]
|
|
1796
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[8]));
|
|
1703
1797
|
ResultFormatter.unknown(decodeResult, fields[7]);
|
|
1704
1798
|
decodeResult.decoded = true;
|
|
1705
1799
|
decodeResult.decoder.decodeLevel = "partial";
|
|
@@ -1735,7 +1829,7 @@ var Label_30_Slash_EA = class extends DecoderPlugin {
|
|
|
1735
1829
|
console.log(results);
|
|
1736
1830
|
}
|
|
1737
1831
|
}
|
|
1738
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results[0].substr(2, 4)
|
|
1832
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results[0].substr(2, 4)));
|
|
1739
1833
|
if (results[1].substring(0, 2) === "DS") {
|
|
1740
1834
|
ResultFormatter.arrivalAirport(decodeResult, results[1].substring(2, 6));
|
|
1741
1835
|
ResultFormatter.unknown(decodeResult, "/".concat(results[2]));
|
|
@@ -1762,22 +1856,35 @@ var Label_44_ETA = class extends DecoderPlugin {
|
|
|
1762
1856
|
decodeResult.decoder.name = this.name;
|
|
1763
1857
|
decodeResult.formatted.description = "ETA Report";
|
|
1764
1858
|
decodeResult.message = message;
|
|
1765
|
-
const
|
|
1766
|
-
|
|
1767
|
-
if (results?.groups) {
|
|
1859
|
+
const data = message.text.split(",");
|
|
1860
|
+
if (data.length >= 9) {
|
|
1768
1861
|
if (options.debug) {
|
|
1769
1862
|
console.log(`Label 44 ETA Report: groups`);
|
|
1770
|
-
console.log(
|
|
1863
|
+
console.log(data);
|
|
1771
1864
|
}
|
|
1772
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1773
|
-
ResultFormatter.
|
|
1774
|
-
ResultFormatter.
|
|
1775
|
-
decodeResult
|
|
1776
|
-
|
|
1777
|
-
);
|
|
1778
|
-
|
|
1779
|
-
|
|
1865
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
|
|
1866
|
+
ResultFormatter.altitude(decodeResult, 100 * Number(data[2]));
|
|
1867
|
+
ResultFormatter.departureAirport(decodeResult, data[3]);
|
|
1868
|
+
ResultFormatter.arrivalAirport(decodeResult, data[4]);
|
|
1869
|
+
ResultFormatter.month(decodeResult, Number(data[5].substring(0, 2)));
|
|
1870
|
+
ResultFormatter.day(decodeResult, Number(data[5].substring(2, 4)));
|
|
1871
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[6]));
|
|
1872
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[7]));
|
|
1873
|
+
const fuel = Number(data[8]);
|
|
1874
|
+
if (!isNaN(fuel)) {
|
|
1875
|
+
ResultFormatter.remainingFuel(decodeResult, Number(fuel));
|
|
1876
|
+
}
|
|
1877
|
+
if (data.length > 9) {
|
|
1878
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(9));
|
|
1780
1879
|
}
|
|
1880
|
+
} else {
|
|
1881
|
+
if (options.debug) {
|
|
1882
|
+
console.log(`Decoder: Unknown 44 message: ${message.text}`);
|
|
1883
|
+
}
|
|
1884
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1885
|
+
decodeResult.decoded = false;
|
|
1886
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1887
|
+
return decodeResult;
|
|
1781
1888
|
}
|
|
1782
1889
|
decodeResult.decoded = true;
|
|
1783
1890
|
decodeResult.decoder.decodeLevel = "full";
|
|
@@ -1799,22 +1906,33 @@ var Label_44_IN = class extends DecoderPlugin {
|
|
|
1799
1906
|
decodeResult.decoder.name = this.name;
|
|
1800
1907
|
decodeResult.formatted.description = "In Air Report";
|
|
1801
1908
|
decodeResult.message = message;
|
|
1802
|
-
const
|
|
1803
|
-
|
|
1804
|
-
if (results?.groups) {
|
|
1909
|
+
const data = message.text.split(",");
|
|
1910
|
+
if (data.length >= 7) {
|
|
1805
1911
|
if (options.debug) {
|
|
1806
1912
|
console.log(`Label 44 In Air Report: groups`);
|
|
1807
|
-
console.log(
|
|
1913
|
+
console.log(data);
|
|
1808
1914
|
}
|
|
1809
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1810
|
-
ResultFormatter.departureAirport(decodeResult,
|
|
1811
|
-
ResultFormatter.arrivalAirport(decodeResult,
|
|
1812
|
-
decodeResult
|
|
1813
|
-
|
|
1814
|
-
);
|
|
1815
|
-
|
|
1816
|
-
|
|
1915
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
|
|
1916
|
+
ResultFormatter.departureAirport(decodeResult, data[2]);
|
|
1917
|
+
ResultFormatter.arrivalAirport(decodeResult, data[3]);
|
|
1918
|
+
ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
|
|
1919
|
+
ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
|
|
1920
|
+
ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
|
|
1921
|
+
const fuel = Number(data[6]);
|
|
1922
|
+
if (!isNaN(fuel)) {
|
|
1923
|
+
ResultFormatter.remainingFuel(decodeResult, Number(fuel));
|
|
1924
|
+
}
|
|
1925
|
+
if (data.length > 7) {
|
|
1926
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(7));
|
|
1817
1927
|
}
|
|
1928
|
+
} else {
|
|
1929
|
+
if (options.debug) {
|
|
1930
|
+
console.log(`Decoder: Unknown 44 message: ${message.text}`);
|
|
1931
|
+
}
|
|
1932
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1933
|
+
decodeResult.decoded = false;
|
|
1934
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1935
|
+
return decodeResult;
|
|
1818
1936
|
}
|
|
1819
1937
|
decodeResult.decoded = true;
|
|
1820
1938
|
decodeResult.decoder.decodeLevel = "full";
|
|
@@ -1836,25 +1954,34 @@ var Label_44_OFF = class extends DecoderPlugin {
|
|
|
1836
1954
|
decodeResult.decoder.name = this.name;
|
|
1837
1955
|
decodeResult.formatted.description = "Off Runway Report";
|
|
1838
1956
|
decodeResult.message = message;
|
|
1839
|
-
const
|
|
1840
|
-
|
|
1841
|
-
if (results?.groups) {
|
|
1957
|
+
const data = message.text.split(",");
|
|
1958
|
+
if (data.length >= 8) {
|
|
1842
1959
|
if (options.debug) {
|
|
1843
1960
|
console.log(`Label 44 Off Runway Report: groups`);
|
|
1844
|
-
console.log(
|
|
1961
|
+
console.log(data);
|
|
1845
1962
|
}
|
|
1846
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1847
|
-
ResultFormatter.departureAirport(decodeResult,
|
|
1848
|
-
ResultFormatter.arrivalAirport(decodeResult,
|
|
1849
|
-
decodeResult
|
|
1850
|
-
|
|
1851
|
-
);
|
|
1852
|
-
decodeResult
|
|
1853
|
-
|
|
1854
|
-
)
|
|
1855
|
-
|
|
1856
|
-
|
|
1963
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
|
|
1964
|
+
ResultFormatter.departureAirport(decodeResult, data[2]);
|
|
1965
|
+
ResultFormatter.arrivalAirport(decodeResult, data[3]);
|
|
1966
|
+
ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
|
|
1967
|
+
ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
|
|
1968
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
|
|
1969
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[6]));
|
|
1970
|
+
const fuel = Number(data[7]);
|
|
1971
|
+
if (!isNaN(fuel)) {
|
|
1972
|
+
ResultFormatter.remainingFuel(decodeResult, Number(fuel));
|
|
1973
|
+
}
|
|
1974
|
+
if (data.length > 8) {
|
|
1975
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(8));
|
|
1857
1976
|
}
|
|
1977
|
+
} else {
|
|
1978
|
+
if (options.debug) {
|
|
1979
|
+
console.log(`Decoder: Unknown 44 message: ${message.text}`);
|
|
1980
|
+
}
|
|
1981
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1982
|
+
decodeResult.decoded = false;
|
|
1983
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1984
|
+
return decodeResult;
|
|
1858
1985
|
}
|
|
1859
1986
|
decodeResult.decoded = true;
|
|
1860
1987
|
decodeResult.decoder.decodeLevel = "full";
|
|
@@ -1876,22 +2003,33 @@ var Label_44_ON = class extends DecoderPlugin {
|
|
|
1876
2003
|
decodeResult.decoder.name = this.name;
|
|
1877
2004
|
decodeResult.formatted.description = "On Runway Report";
|
|
1878
2005
|
decodeResult.message = message;
|
|
1879
|
-
const
|
|
1880
|
-
|
|
1881
|
-
if (results?.groups) {
|
|
2006
|
+
const data = message.text.split(",");
|
|
2007
|
+
if (data.length >= 7) {
|
|
1882
2008
|
if (options.debug) {
|
|
1883
2009
|
console.log(`Label 44 On Runway Report: groups`);
|
|
1884
|
-
console.log(
|
|
2010
|
+
console.log(data);
|
|
1885
2011
|
}
|
|
1886
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1887
|
-
ResultFormatter.departureAirport(decodeResult,
|
|
1888
|
-
ResultFormatter.arrivalAirport(decodeResult,
|
|
1889
|
-
decodeResult
|
|
1890
|
-
|
|
1891
|
-
);
|
|
1892
|
-
|
|
1893
|
-
|
|
2012
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
|
|
2013
|
+
ResultFormatter.departureAirport(decodeResult, data[2]);
|
|
2014
|
+
ResultFormatter.arrivalAirport(decodeResult, data[3]);
|
|
2015
|
+
ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
|
|
2016
|
+
ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
|
|
2017
|
+
ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
|
|
2018
|
+
const fuel = Number(data[6]);
|
|
2019
|
+
if (!isNaN(fuel)) {
|
|
2020
|
+
ResultFormatter.remainingFuel(decodeResult, Number(fuel));
|
|
2021
|
+
}
|
|
2022
|
+
if (data.length > 7) {
|
|
2023
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(7));
|
|
2024
|
+
}
|
|
2025
|
+
} else {
|
|
2026
|
+
if (options.debug) {
|
|
2027
|
+
console.log(`Decoder: Unknown 44 message: ${message.text}`);
|
|
1894
2028
|
}
|
|
2029
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
2030
|
+
decodeResult.decoded = false;
|
|
2031
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2032
|
+
return decodeResult;
|
|
1895
2033
|
}
|
|
1896
2034
|
decodeResult.decoded = true;
|
|
1897
2035
|
decodeResult.decoder.decodeLevel = "full";
|
|
@@ -2306,12 +2444,17 @@ function addCompanyRoute(decodeResult, value) {
|
|
|
2306
2444
|
}
|
|
2307
2445
|
|
|
2308
2446
|
// lib/utils/h1_helper.ts
|
|
2309
|
-
var H1Helper = class {
|
|
2447
|
+
var H1Helper = class _H1Helper {
|
|
2310
2448
|
static decodeH1Message(decodeResult, message) {
|
|
2311
2449
|
const checksum = message.slice(-4);
|
|
2312
2450
|
const data = message.slice(0, message.length - 4);
|
|
2313
2451
|
const fields = data.split("/");
|
|
2314
|
-
parseMessageType(decodeResult, fields[0]);
|
|
2452
|
+
const canDecode = parseMessageType(decodeResult, fields[0]);
|
|
2453
|
+
if (!canDecode) {
|
|
2454
|
+
decodeResult.decoded = false;
|
|
2455
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2456
|
+
return;
|
|
2457
|
+
}
|
|
2315
2458
|
for (let i = 1; i < fields.length; ++i) {
|
|
2316
2459
|
if (fields[i].startsWith("FN")) {
|
|
2317
2460
|
decodeResult.raw.flight_number = fields[i].substring(2);
|
|
@@ -2320,16 +2463,9 @@ var H1Helper = class {
|
|
|
2320
2463
|
} else if (fields[i].startsWith("DC")) {
|
|
2321
2464
|
processDC(decodeResult, fields[i].substring(2).split(","));
|
|
2322
2465
|
} else if (fields[i].startsWith("TS")) {
|
|
2323
|
-
|
|
2324
|
-
let time = DateTimeUtils.convertDateTimeToEpoch(ts[0], ts[1]);
|
|
2325
|
-
if (Number.isNaN(time)) {
|
|
2326
|
-
const date = ts[1].substring(2, 4) + ts[1].substring(0, 2) + ts[1].substring(4, 6);
|
|
2327
|
-
time = DateTimeUtils.convertDateTimeToEpoch(ts[0], date);
|
|
2328
|
-
}
|
|
2329
|
-
decodeResult.raw.message_date = ts[1];
|
|
2330
|
-
decodeResult.raw.message_timestamp = time;
|
|
2466
|
+
_H1Helper.processTS(decodeResult, fields[i].substring(2).split(","));
|
|
2331
2467
|
} else if (fields[i].startsWith("PS")) {
|
|
2332
|
-
|
|
2468
|
+
_H1Helper.processPS(decodeResult, fields[i].substring(2).split(","));
|
|
2333
2469
|
} else if (fields[i].startsWith("DT")) {
|
|
2334
2470
|
const data2 = fields[i].substring(2).split(",");
|
|
2335
2471
|
processDT(decodeResult, data2);
|
|
@@ -2350,9 +2486,11 @@ var H1Helper = class {
|
|
|
2350
2486
|
ResultFormatter.freetext(decodeResult, fields[i].substring(2));
|
|
2351
2487
|
} else if (fields[i].startsWith("ET")) {
|
|
2352
2488
|
if (fields[i].length === 7) {
|
|
2353
|
-
ResultFormatter.
|
|
2489
|
+
ResultFormatter.day(decodeResult, Number(fields[i].substring(2, 3)));
|
|
2490
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(3)));
|
|
2354
2491
|
} else if (fields[i].length === 8) {
|
|
2355
|
-
ResultFormatter.
|
|
2492
|
+
ResultFormatter.day(decodeResult, Number(fields[i].substring(2, 4)));
|
|
2493
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(4)));
|
|
2356
2494
|
} else {
|
|
2357
2495
|
ResultFormatter.unknown(decodeResult, fields[i], "/");
|
|
2358
2496
|
}
|
|
@@ -2365,6 +2503,56 @@ var H1Helper = class {
|
|
|
2365
2503
|
}
|
|
2366
2504
|
return true;
|
|
2367
2505
|
}
|
|
2506
|
+
static processPS(decodeResult, data) {
|
|
2507
|
+
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2508
|
+
if (position) {
|
|
2509
|
+
decodeResult.raw.position = position;
|
|
2510
|
+
decodeResult.formatted.items.push({
|
|
2511
|
+
type: "aircraft_position",
|
|
2512
|
+
code: "POS",
|
|
2513
|
+
label: "Aircraft Position",
|
|
2514
|
+
value: CoordinateUtils.coordinateString(position)
|
|
2515
|
+
});
|
|
2516
|
+
}
|
|
2517
|
+
if (data.length === 9) {
|
|
2518
|
+
processRoute(decodeResult, data[3], data[1], data[5], data[4], void 0);
|
|
2519
|
+
ResultFormatter.altitude(decodeResult, Number(data[2]) * 100);
|
|
2520
|
+
ResultFormatter.temperature(decodeResult, data[6]);
|
|
2521
|
+
ResultFormatter.unknown(decodeResult, data[7]);
|
|
2522
|
+
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2523
|
+
}
|
|
2524
|
+
if (data.length === 14) {
|
|
2525
|
+
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2526
|
+
processRoute(decodeResult, data[1], data[2], data[4], data[5], data[6]);
|
|
2527
|
+
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2528
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(8));
|
|
2529
|
+
}
|
|
2530
|
+
}
|
|
2531
|
+
static processPosition(decodeResult, data) {
|
|
2532
|
+
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2533
|
+
if (position) {
|
|
2534
|
+
ResultFormatter.position(decodeResult, position);
|
|
2535
|
+
}
|
|
2536
|
+
if (data.length >= 10) {
|
|
2537
|
+
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2538
|
+
processRoute(decodeResult, data[1], data[2], data[4], data[5], data[6]);
|
|
2539
|
+
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2540
|
+
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2541
|
+
ResultFormatter.unknown(decodeResult, data[9]);
|
|
2542
|
+
}
|
|
2543
|
+
if (data.length >= 14) {
|
|
2544
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(10));
|
|
2545
|
+
}
|
|
2546
|
+
}
|
|
2547
|
+
static processTS(decodeResult, data) {
|
|
2548
|
+
let time = DateTimeUtils.convertDateTimeToEpoch(data[0], data[1]);
|
|
2549
|
+
if (Number.isNaN(time)) {
|
|
2550
|
+
const date = data[1].substring(2, 4) + data[1].substring(0, 2) + data[1].substring(4, 6);
|
|
2551
|
+
time = DateTimeUtils.convertDateTimeToEpoch(data[0], date);
|
|
2552
|
+
}
|
|
2553
|
+
decodeResult.raw.message_date = data[1];
|
|
2554
|
+
decodeResult.raw.message_timestamp = time;
|
|
2555
|
+
}
|
|
2368
2556
|
};
|
|
2369
2557
|
function processAirField(decodeResult, data) {
|
|
2370
2558
|
if (data.length === 2) {
|
|
@@ -2442,7 +2630,7 @@ function parseMessageType(decodeResult, messageType) {
|
|
|
2442
2630
|
if (parts.length == 1) {
|
|
2443
2631
|
const type = parts[0].substring(0, 3);
|
|
2444
2632
|
if (type === "POS" && parts[0].length !== 3) {
|
|
2445
|
-
|
|
2633
|
+
H1Helper.processPosition(decodeResult, parts[0].substring(3).split(","));
|
|
2446
2634
|
}
|
|
2447
2635
|
return processMessageType(decodeResult, type);
|
|
2448
2636
|
} else if (parts.length == 2) {
|
|
@@ -2453,11 +2641,12 @@ function parseMessageType(decodeResult, messageType) {
|
|
|
2453
2641
|
}
|
|
2454
2642
|
const type = parts[1].length == 5 ? parts[1].substring(2, 5) : parts[1].substring(3, 6);
|
|
2455
2643
|
if (parts[1].substring(3, 6) === "POS" && parts[1].length > 6) {
|
|
2456
|
-
|
|
2644
|
+
H1Helper.processPosition(decodeResult, parts[1].substring(6).split(","));
|
|
2457
2645
|
}
|
|
2458
|
-
processMessageType(decodeResult, type);
|
|
2646
|
+
return processMessageType(decodeResult, type);
|
|
2459
2647
|
} else {
|
|
2460
2648
|
ResultFormatter.unknown(decodeResult, messageType);
|
|
2649
|
+
return false;
|
|
2461
2650
|
}
|
|
2462
2651
|
}
|
|
2463
2652
|
function processMessageType(decodeResult, type) {
|
|
@@ -2473,7 +2662,9 @@ function processMessageType(decodeResult, type) {
|
|
|
2473
2662
|
decodeResult.formatted.description = "Progress Report";
|
|
2474
2663
|
} else {
|
|
2475
2664
|
decodeResult.formatted.description = "Unknown H1 Message";
|
|
2665
|
+
return false;
|
|
2476
2666
|
}
|
|
2667
|
+
return true;
|
|
2477
2668
|
}
|
|
2478
2669
|
function processDC(decodeResult, data) {
|
|
2479
2670
|
decodeResult.raw.message_date = data[0];
|
|
@@ -2484,60 +2675,6 @@ function processDC(decodeResult, data) {
|
|
|
2484
2675
|
decodeResult.raw.message_timestamp = time;
|
|
2485
2676
|
}
|
|
2486
2677
|
}
|
|
2487
|
-
function processPS(decodeResult, data) {
|
|
2488
|
-
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2489
|
-
if (position) {
|
|
2490
|
-
decodeResult.raw.position = position;
|
|
2491
|
-
decodeResult.formatted.items.push({
|
|
2492
|
-
type: "aircraft_position",
|
|
2493
|
-
code: "POS",
|
|
2494
|
-
label: "Aircraft Position",
|
|
2495
|
-
value: CoordinateUtils.coordinateString(position)
|
|
2496
|
-
});
|
|
2497
|
-
}
|
|
2498
|
-
if (data.length === 9) {
|
|
2499
|
-
processRoute(decodeResult, data[3], data[1], data[5], data[4], void 0);
|
|
2500
|
-
ResultFormatter.altitude(decodeResult, Number(data[2]) * 100);
|
|
2501
|
-
ResultFormatter.temperature(decodeResult, data[6]);
|
|
2502
|
-
ResultFormatter.unknown(decodeResult, data[7]);
|
|
2503
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2504
|
-
}
|
|
2505
|
-
if (data.length === 14) {
|
|
2506
|
-
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2507
|
-
processRoute(decodeResult, data[4], data[2], data[6], data[5], void 0);
|
|
2508
|
-
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2509
|
-
ResultFormatter.groundspeed(decodeResult, Number(data[10]));
|
|
2510
|
-
ResultFormatter.unknown(decodeResult, data[1]);
|
|
2511
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2512
|
-
ResultFormatter.unknown(decodeResult, data[9]);
|
|
2513
|
-
ResultFormatter.unknown(decodeResult, data.slice(11).join(","));
|
|
2514
|
-
}
|
|
2515
|
-
}
|
|
2516
|
-
function processPosition2(decodeResult, data) {
|
|
2517
|
-
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2518
|
-
if (position) {
|
|
2519
|
-
decodeResult.raw.position = position;
|
|
2520
|
-
decodeResult.formatted.items.push({
|
|
2521
|
-
type: "aircraft_position",
|
|
2522
|
-
code: "POS",
|
|
2523
|
-
label: "Aircraft Position",
|
|
2524
|
-
value: CoordinateUtils.coordinateString(position)
|
|
2525
|
-
});
|
|
2526
|
-
}
|
|
2527
|
-
if (data.length >= 10) {
|
|
2528
|
-
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2529
|
-
processRoute(decodeResult, data[1], data[2], data[4], data[5], data[6]);
|
|
2530
|
-
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2531
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2532
|
-
ResultFormatter.unknown(decodeResult, data[9]);
|
|
2533
|
-
}
|
|
2534
|
-
if (data.length >= 14) {
|
|
2535
|
-
ResultFormatter.groundspeed(decodeResult, Number(data[10]));
|
|
2536
|
-
ResultFormatter.unknown(decodeResult, data[11]);
|
|
2537
|
-
ResultFormatter.unknown(decodeResult, data[12]);
|
|
2538
|
-
ResultFormatter.unknown(decodeResult, data[13]);
|
|
2539
|
-
}
|
|
2540
|
-
}
|
|
2541
2678
|
function processRoute(decodeResult, last, time, next, eta, then, date) {
|
|
2542
2679
|
const lastTime = date ? DateTimeUtils.convertDateTimeToEpoch(time, date) : DateTimeUtils.convertHHMMSSToTod(time);
|
|
2543
2680
|
const nextTime = date ? DateTimeUtils.convertDateTimeToEpoch(eta, date) : DateTimeUtils.convertHHMMSSToTod(eta);
|
|
@@ -2612,7 +2749,7 @@ var Label_4N = class extends DecoderPlugin {
|
|
|
2612
2749
|
decodeResult.decoded = true;
|
|
2613
2750
|
const fields = text.split(",");
|
|
2614
2751
|
if (text.length === 51) {
|
|
2615
|
-
decodeResult.raw.
|
|
2752
|
+
decodeResult.raw.day = text.substring(0, 2);
|
|
2616
2753
|
ResultFormatter.departureAirport(decodeResult, text.substring(8, 11));
|
|
2617
2754
|
ResultFormatter.arrivalAirport(decodeResult, text.substring(13, 16));
|
|
2618
2755
|
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(text.substring(30, 45).replace(/^(.)0/, "$1")));
|
|
@@ -2649,6 +2786,129 @@ var Label_4N = class extends DecoderPlugin {
|
|
|
2649
2786
|
}
|
|
2650
2787
|
};
|
|
2651
2788
|
|
|
2789
|
+
// lib/plugins/Label_4T_AGFSR.ts
|
|
2790
|
+
var Label_4T_AGFSR = class extends DecoderPlugin {
|
|
2791
|
+
name = "label-4t-agfsr";
|
|
2792
|
+
qualifiers() {
|
|
2793
|
+
return {
|
|
2794
|
+
labels: ["4T"],
|
|
2795
|
+
preambles: ["AGFSR"]
|
|
2796
|
+
};
|
|
2797
|
+
}
|
|
2798
|
+
decode(message, options = {}) {
|
|
2799
|
+
const decodeResult = this.defaultResult();
|
|
2800
|
+
decodeResult.decoder.name = this.name;
|
|
2801
|
+
decodeResult.formatted.description = "Position Report";
|
|
2802
|
+
decodeResult.message = message;
|
|
2803
|
+
const data = message.text.substring(5).split("/");
|
|
2804
|
+
if (!message.text.startsWith("AGFSR") || data.length !== 20) {
|
|
2805
|
+
if (options.debug) {
|
|
2806
|
+
console.log(`Decoder: Unknown 4T message: ${message.text}`);
|
|
2807
|
+
}
|
|
2808
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
2809
|
+
decodeResult.decoded = false;
|
|
2810
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2811
|
+
return decodeResult;
|
|
2812
|
+
}
|
|
2813
|
+
ResultFormatter.flightNumber(decodeResult, data[0].trim());
|
|
2814
|
+
ResultFormatter.departureDay(decodeResult, Number(data[1]));
|
|
2815
|
+
ResultFormatter.arrivalDay(decodeResult, Number(data[2]));
|
|
2816
|
+
ResultFormatter.departureAirport(decodeResult, data[3].substring(0, 3), "IATA");
|
|
2817
|
+
ResultFormatter.arrivalAirport(decodeResult, data[3].substring(3), "IATA");
|
|
2818
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[4].substring(0, 4)));
|
|
2819
|
+
ResultFormatter.unknown(decodeResult, data[5], "/");
|
|
2820
|
+
const lat = data[6].substring(0, 7);
|
|
2821
|
+
const lon = data[6].substring(7, 15);
|
|
2822
|
+
ResultFormatter.position(decodeResult, {
|
|
2823
|
+
latitude: CoordinateUtils.getDirection(lat[6]) * Number(lat.substring(0, 2)) + Number(lat.substring(2, 6)) / 60,
|
|
2824
|
+
longitude: CoordinateUtils.getDirection(lon[7]) * Number(lon.substring(0, 3)) + Number(lon.substring(3, 7)) / 60
|
|
2825
|
+
});
|
|
2826
|
+
ResultFormatter.altitude(decodeResult, 100 * Number(data[7]));
|
|
2827
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(8), "/");
|
|
2828
|
+
decodeResult.decoded = true;
|
|
2829
|
+
decodeResult.decoder.decodeLevel = "partial";
|
|
2830
|
+
return decodeResult;
|
|
2831
|
+
}
|
|
2832
|
+
};
|
|
2833
|
+
|
|
2834
|
+
// lib/plugins/Label_58.ts
|
|
2835
|
+
var Label_58 = class extends DecoderPlugin {
|
|
2836
|
+
name = "label-58";
|
|
2837
|
+
qualifiers() {
|
|
2838
|
+
return {
|
|
2839
|
+
labels: ["58"]
|
|
2840
|
+
};
|
|
2841
|
+
}
|
|
2842
|
+
decode(message, options = {}) {
|
|
2843
|
+
const decodeResult = this.defaultResult();
|
|
2844
|
+
decodeResult.decoder.name = this.name;
|
|
2845
|
+
decodeResult.formatted.description = "Position Report";
|
|
2846
|
+
decodeResult.message = message;
|
|
2847
|
+
const data = message.text.split("/");
|
|
2848
|
+
if (data.length === 8) {
|
|
2849
|
+
ResultFormatter.flightNumber(decodeResult, data[0]);
|
|
2850
|
+
ResultFormatter.day(decodeResult, Number(data[1]));
|
|
2851
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[2]));
|
|
2852
|
+
const lat = data[3];
|
|
2853
|
+
const lon = data[4];
|
|
2854
|
+
ResultFormatter.position(decodeResult, {
|
|
2855
|
+
latitude: CoordinateUtils.getDirection(lat[0]) * Number(lat.substring(1)),
|
|
2856
|
+
longitude: CoordinateUtils.getDirection(lon[0]) * Number(lon.substring(1))
|
|
2857
|
+
});
|
|
2858
|
+
ResultFormatter.altitude(decodeResult, Number(data[5]));
|
|
2859
|
+
ResultFormatter.unknown(decodeResult, data[6], "/");
|
|
2860
|
+
ResultFormatter.unknown(decodeResult, data[7], "/");
|
|
2861
|
+
} else {
|
|
2862
|
+
if (options.debug) {
|
|
2863
|
+
console.log(`Decoder: Unknown 58 message: ${message.text}`);
|
|
2864
|
+
}
|
|
2865
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
2866
|
+
decodeResult.decoded = false;
|
|
2867
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2868
|
+
return decodeResult;
|
|
2869
|
+
}
|
|
2870
|
+
decodeResult.decoded = true;
|
|
2871
|
+
decodeResult.decoder.decodeLevel = "partial";
|
|
2872
|
+
return decodeResult;
|
|
2873
|
+
}
|
|
2874
|
+
};
|
|
2875
|
+
|
|
2876
|
+
// lib/plugins/Label_4T_ETA.ts
|
|
2877
|
+
var Label_4T_ETA = class extends DecoderPlugin {
|
|
2878
|
+
name = "label-4t-eta";
|
|
2879
|
+
qualifiers() {
|
|
2880
|
+
return {
|
|
2881
|
+
labels: ["4T"],
|
|
2882
|
+
preambles: ["ETA"]
|
|
2883
|
+
};
|
|
2884
|
+
}
|
|
2885
|
+
decode(message, options = {}) {
|
|
2886
|
+
const decodeResult = this.defaultResult();
|
|
2887
|
+
decodeResult.decoder.name = this.name;
|
|
2888
|
+
decodeResult.formatted.description = "ETA Report";
|
|
2889
|
+
decodeResult.message = message;
|
|
2890
|
+
const data = message.text.substring(3).split("/");
|
|
2891
|
+
if (!message.text.startsWith("ETA") || data.length !== 3) {
|
|
2892
|
+
if (options.debug) {
|
|
2893
|
+
console.log(`Decoder: Unknown 4T message: ${message.text}`);
|
|
2894
|
+
}
|
|
2895
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
2896
|
+
decodeResult.decoded = false;
|
|
2897
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
2898
|
+
return decodeResult;
|
|
2899
|
+
}
|
|
2900
|
+
ResultFormatter.flightNumber(decodeResult, data[0].trim());
|
|
2901
|
+
ResultFormatter.departureDay(decodeResult, Number(data[1]));
|
|
2902
|
+
const etaData = data[2].split(" ");
|
|
2903
|
+
ResultFormatter.arrivalDay(decodeResult, Number(etaData[0]));
|
|
2904
|
+
ResultFormatter.arrivalAirport(decodeResult, etaData[1], "IATA");
|
|
2905
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(etaData[2].substring(0, 4)));
|
|
2906
|
+
decodeResult.decoded = true;
|
|
2907
|
+
decodeResult.decoder.decodeLevel = "full";
|
|
2908
|
+
return decodeResult;
|
|
2909
|
+
}
|
|
2910
|
+
};
|
|
2911
|
+
|
|
2652
2912
|
// lib/plugins/Label_80.ts
|
|
2653
2913
|
var Label_80 = class extends DecoderPlugin {
|
|
2654
2914
|
name = "label-80";
|
|
@@ -2826,7 +3086,7 @@ var Label_83 = class extends DecoderPlugin {
|
|
|
2826
3086
|
if (text.substring(0, 10) === "4DH3 ETAT2") {
|
|
2827
3087
|
const fields = text.split(/\s+/);
|
|
2828
3088
|
if (fields[2].length > 5) {
|
|
2829
|
-
decodeResult.raw.
|
|
3089
|
+
decodeResult.raw.day = fields[2].substring(5);
|
|
2830
3090
|
}
|
|
2831
3091
|
ResultFormatter.unknown(decodeResult, fields[2].substring(0, 4));
|
|
2832
3092
|
const subfields = fields[3].split("/");
|
|
@@ -2835,7 +3095,7 @@ var Label_83 = class extends DecoderPlugin {
|
|
|
2835
3095
|
ResultFormatter.tail(decodeResult, fields[4].replace(/\./g, ""));
|
|
2836
3096
|
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[6] + "00"));
|
|
2837
3097
|
} else if (text.substring(0, 5) === "001PR") {
|
|
2838
|
-
decodeResult.raw.
|
|
3098
|
+
decodeResult.raw.day = text.substring(5, 7);
|
|
2839
3099
|
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(text.substring(13, 28).replace(/\./g, ""));
|
|
2840
3100
|
if (position) {
|
|
2841
3101
|
ResultFormatter.position(decodeResult, position);
|
|
@@ -2847,7 +3107,7 @@ var Label_83 = class extends DecoderPlugin {
|
|
|
2847
3107
|
if (fields.length === 9) {
|
|
2848
3108
|
ResultFormatter.departureAirport(decodeResult, fields[0]);
|
|
2849
3109
|
ResultFormatter.arrivalAirport(decodeResult, fields[1]);
|
|
2850
|
-
decodeResult.raw.
|
|
3110
|
+
decodeResult.raw.day = fields[2].substring(0, 2);
|
|
2851
3111
|
decodeResult.raw.time = fields[2].substring(2);
|
|
2852
3112
|
ResultFormatter.position(
|
|
2853
3113
|
decodeResult,
|
|
@@ -2897,7 +3157,7 @@ var Label_8E = class extends DecoderPlugin {
|
|
|
2897
3157
|
console.log(`Label 8E ETA: groups`);
|
|
2898
3158
|
console.log(results.groups);
|
|
2899
3159
|
}
|
|
2900
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results.groups.arrival_eta
|
|
3160
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results.groups.arrival_eta));
|
|
2901
3161
|
ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
|
|
2902
3162
|
}
|
|
2903
3163
|
decodeResult.decoded = true;
|
|
@@ -3085,6 +3345,65 @@ var Label_H1_OHMA = class extends DecoderPlugin {
|
|
|
3085
3345
|
}
|
|
3086
3346
|
};
|
|
3087
3347
|
|
|
3348
|
+
// lib/plugins/Label_H1_Slash.ts
|
|
3349
|
+
var Label_H1_Slash = class extends DecoderPlugin {
|
|
3350
|
+
name = "label-h1-slash";
|
|
3351
|
+
qualifiers() {
|
|
3352
|
+
return {
|
|
3353
|
+
labels: ["H1"],
|
|
3354
|
+
preambles: ["/"]
|
|
3355
|
+
};
|
|
3356
|
+
}
|
|
3357
|
+
decode(message, options = {}) {
|
|
3358
|
+
let decodeResult = this.defaultResult();
|
|
3359
|
+
decodeResult.decoder.name = this.name;
|
|
3360
|
+
decodeResult.formatted.description = "Position Report";
|
|
3361
|
+
decodeResult.message = message;
|
|
3362
|
+
const checksum = message.text.slice(-4);
|
|
3363
|
+
const data = message.text.slice(0, message.text.length - 4);
|
|
3364
|
+
const fields = data.split("/");
|
|
3365
|
+
if (fields[0] !== "") {
|
|
3366
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
3367
|
+
decodeResult.decoded = false;
|
|
3368
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
3369
|
+
return decodeResult;
|
|
3370
|
+
}
|
|
3371
|
+
const headerData = fields[1].split(".");
|
|
3372
|
+
ResultFormatter.unknown(decodeResult, headerData[0]);
|
|
3373
|
+
if (headerData[1] === "POS" && fields[2].startsWith("TS") && fields[2].length > 15) {
|
|
3374
|
+
H1Helper.processPosition(decodeResult, fields[2].substring(15).split(","));
|
|
3375
|
+
} else if (headerData[1] === "POS") {
|
|
3376
|
+
} else if (headerData[1].startsWith("POS")) {
|
|
3377
|
+
H1Helper.processPosition(decodeResult, headerData[1].substring(3).split(","));
|
|
3378
|
+
} else {
|
|
3379
|
+
ResultFormatter.unknown(decodeResult, headerData[1], ".");
|
|
3380
|
+
}
|
|
3381
|
+
for (let i = 2; i < fields.length; i++) {
|
|
3382
|
+
const field = fields[i];
|
|
3383
|
+
if (field.startsWith("TS")) {
|
|
3384
|
+
H1Helper.processTS(decodeResult, field.substring(2, 15).split(","));
|
|
3385
|
+
} else if (field.startsWith("PS")) {
|
|
3386
|
+
H1Helper.processPS(decodeResult, field.substring(2).split(","));
|
|
3387
|
+
} else {
|
|
3388
|
+
ResultFormatter.unknown(decodeResult, field, "/");
|
|
3389
|
+
}
|
|
3390
|
+
}
|
|
3391
|
+
if (decodeResult.formatted.items.length === 0) {
|
|
3392
|
+
if (options.debug) {
|
|
3393
|
+
console.log(`Decoder: Unknown H1 message: ${message.text}`);
|
|
3394
|
+
}
|
|
3395
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
3396
|
+
decodeResult.decoded = false;
|
|
3397
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
3398
|
+
return decodeResult;
|
|
3399
|
+
}
|
|
3400
|
+
ResultFormatter.checksum(decodeResult, checksum);
|
|
3401
|
+
decodeResult.decoded = true;
|
|
3402
|
+
decodeResult.decoder.decodeLevel = !decodeResult.remaining.text ? "full" : "partial";
|
|
3403
|
+
return decodeResult;
|
|
3404
|
+
}
|
|
3405
|
+
};
|
|
3406
|
+
|
|
3088
3407
|
// lib/plugins/Label_H1_StarPOS.ts
|
|
3089
3408
|
var Label_H1_StarPOS = class extends DecoderPlugin {
|
|
3090
3409
|
name = "label-h1-star-pos";
|
|
@@ -3109,9 +3428,9 @@ var Label_H1_StarPOS = class extends DecoderPlugin {
|
|
|
3109
3428
|
decodeResult.decoder.decodeLevel = "none";
|
|
3110
3429
|
return decodeResult;
|
|
3111
3430
|
}
|
|
3112
|
-
|
|
3113
|
-
decodeResult
|
|
3114
|
-
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12)
|
|
3431
|
+
ResultFormatter.month(decodeResult, Number(msg.substring(4, 6)));
|
|
3432
|
+
ResultFormatter.day(decodeResult, Number(msg.substring(6, 8)));
|
|
3433
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12)));
|
|
3115
3434
|
ResultFormatter.position(decodeResult, {
|
|
3116
3435
|
// Deg Min, no sec
|
|
3117
3436
|
latitude: CoordinateUtils.getDirection(msg.substring(12, 13)) * (Number(msg.substring(13, 15)) + Number(msg.substring(15, 17)) / 60),
|
|
@@ -3338,7 +3657,7 @@ var Label_QR = class extends DecoderPlugin {
|
|
|
3338
3657
|
decodeResult.formatted.description = "ON Report";
|
|
3339
3658
|
ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
|
|
3340
3659
|
ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
|
|
3341
|
-
ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)
|
|
3660
|
+
ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
|
|
3342
3661
|
ResultFormatter.unknown(decodeResult, message.text.substring(12));
|
|
3343
3662
|
decodeResult.decoded = true;
|
|
3344
3663
|
if (!decodeResult.remaining.text)
|
|
@@ -3363,7 +3682,7 @@ var Label_QP = class extends DecoderPlugin {
|
|
|
3363
3682
|
decodeResult.formatted.description = "OUT Report";
|
|
3364
3683
|
ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
|
|
3365
3684
|
ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
|
|
3366
|
-
ResultFormatter.out(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)
|
|
3685
|
+
ResultFormatter.out(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
|
|
3367
3686
|
ResultFormatter.unknown(decodeResult, message.text.substring(12));
|
|
3368
3687
|
decodeResult.decoded = true;
|
|
3369
3688
|
if (!decodeResult.remaining.text)
|
|
@@ -3388,7 +3707,7 @@ var Label_QS = class extends DecoderPlugin {
|
|
|
3388
3707
|
decodeResult.formatted.description = "IN Report";
|
|
3389
3708
|
ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
|
|
3390
3709
|
ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
|
|
3391
|
-
ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)
|
|
3710
|
+
ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
|
|
3392
3711
|
ResultFormatter.unknown(decodeResult, message.text.substring(12));
|
|
3393
3712
|
decodeResult.decoded = true;
|
|
3394
3713
|
if (!decodeResult.remaining.text)
|
|
@@ -3415,7 +3734,7 @@ var Label_QQ = class extends DecoderPlugin {
|
|
|
3415
3734
|
ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
|
|
3416
3735
|
ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
|
|
3417
3736
|
if (message.text.substring(12, 19) === "\r\n001FE") {
|
|
3418
|
-
decodeResult.raw.
|
|
3737
|
+
decodeResult.raw.day = message.text.substring(19, 21);
|
|
3419
3738
|
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(21, 27)));
|
|
3420
3739
|
let latdir = message.text.substring(27, 28);
|
|
3421
3740
|
let latdeg = Number(message.text.substring(28, 30));
|
|
@@ -4265,6 +4584,7 @@ var MessageDecoder = class {
|
|
|
4265
4584
|
this.registerPlugin(new Label_10_POS(this));
|
|
4266
4585
|
this.registerPlugin(new Label_10_Slash(this));
|
|
4267
4586
|
this.registerPlugin(new Label_12_N_Space(this));
|
|
4587
|
+
this.registerPlugin(new Label_12_POS(this));
|
|
4268
4588
|
this.registerPlugin(new Label_13Through18_Slash(this));
|
|
4269
4589
|
this.registerPlugin(new Label_15(this));
|
|
4270
4590
|
this.registerPlugin(new Label_15_FST(this));
|
|
@@ -4291,13 +4611,17 @@ var MessageDecoder = class {
|
|
|
4291
4611
|
this.registerPlugin(new Label_4A_Slash_01(this));
|
|
4292
4612
|
this.registerPlugin(new Label_4J_POS(this));
|
|
4293
4613
|
this.registerPlugin(new Label_4N(this));
|
|
4614
|
+
this.registerPlugin(new Label_4T_AGFSR(this));
|
|
4615
|
+
this.registerPlugin(new Label_4T_ETA(this));
|
|
4294
4616
|
this.registerPlugin(new Label_B6_Forwardslash(this));
|
|
4295
4617
|
this.registerPlugin(new Label_H1_FLR(this));
|
|
4296
4618
|
this.registerPlugin(new Label_H1_OHMA(this));
|
|
4297
4619
|
this.registerPlugin(new Label_H1_WRN(this));
|
|
4298
4620
|
this.registerPlugin(new Label_H1(this));
|
|
4621
|
+
this.registerPlugin(new Label_H1_Slash(this));
|
|
4299
4622
|
this.registerPlugin(new Label_H1_StarPOS(this));
|
|
4300
4623
|
this.registerPlugin(new Label_HX(this));
|
|
4624
|
+
this.registerPlugin(new Label_58(this));
|
|
4301
4625
|
this.registerPlugin(new Label_80(this));
|
|
4302
4626
|
this.registerPlugin(new Label_83(this));
|
|
4303
4627
|
this.registerPlugin(new Label_8E(this));
|