@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.mjs
CHANGED
|
@@ -38,10 +38,13 @@ var DateTimeUtils = class {
|
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
*
|
|
41
|
-
* @param time HHMMSS
|
|
41
|
+
* @param time HHMMSS or HHMM
|
|
42
42
|
* @returns seconds since midnight
|
|
43
43
|
*/
|
|
44
44
|
static convertHHMMSSToTod(time) {
|
|
45
|
+
if (time.length === 4) {
|
|
46
|
+
time += "00";
|
|
47
|
+
}
|
|
45
48
|
const h = Number(time.substring(0, 2));
|
|
46
49
|
const m = Number(time.substring(2, 4));
|
|
47
50
|
const s = Number(time.substring(4, 6));
|
|
@@ -529,14 +532,24 @@ var ResultFormatter = class {
|
|
|
529
532
|
value: DateTimeUtils.timestampToString(time, "tod")
|
|
530
533
|
});
|
|
531
534
|
}
|
|
532
|
-
static off(decodeResult, time) {
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
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
|
+
}
|
|
540
553
|
}
|
|
541
554
|
static on(decodeResult, time) {
|
|
542
555
|
decodeResult.raw.on_time = time;
|
|
@@ -566,27 +579,36 @@ var ResultFormatter = class {
|
|
|
566
579
|
});
|
|
567
580
|
}
|
|
568
581
|
static day(decodeResult, day) {
|
|
569
|
-
decodeResult.raw.
|
|
582
|
+
decodeResult.raw.day = day;
|
|
570
583
|
decodeResult.formatted.items.push({
|
|
571
|
-
type: "
|
|
584
|
+
type: "day",
|
|
572
585
|
code: "MSG_DAY",
|
|
573
586
|
label: "Day of Month",
|
|
574
587
|
value: `${day}`
|
|
575
588
|
});
|
|
576
589
|
}
|
|
590
|
+
static month(decodeResult, month) {
|
|
591
|
+
decodeResult.raw.month = month;
|
|
592
|
+
decodeResult.formatted.items.push({
|
|
593
|
+
type: "month",
|
|
594
|
+
code: "MSG_MON",
|
|
595
|
+
label: "Month of Year",
|
|
596
|
+
value: `${month}`
|
|
597
|
+
});
|
|
598
|
+
}
|
|
577
599
|
static departureDay(decodeResult, day) {
|
|
578
|
-
decodeResult.raw.
|
|
600
|
+
decodeResult.raw.departure_day = day;
|
|
579
601
|
decodeResult.formatted.items.push({
|
|
580
|
-
type: "
|
|
602
|
+
type: "day",
|
|
581
603
|
code: "DEP_DAY",
|
|
582
604
|
label: "Departure Day",
|
|
583
605
|
value: `${day}`
|
|
584
606
|
});
|
|
585
607
|
}
|
|
586
608
|
static arrivalDay(decodeResult, day) {
|
|
587
|
-
decodeResult.raw.
|
|
609
|
+
decodeResult.raw.arrival_day = day;
|
|
588
610
|
decodeResult.formatted.items.push({
|
|
589
|
-
type: "
|
|
611
|
+
type: "day",
|
|
590
612
|
code: "ARR_DAY",
|
|
591
613
|
label: "Arrival Day",
|
|
592
614
|
value: `${day}`
|
|
@@ -681,14 +703,14 @@ var Label_5Z_Slash = class extends DecoderPlugin {
|
|
|
681
703
|
const info = data[2].split(" ");
|
|
682
704
|
ResultFormatter.departureAirport(decodeResult, info[1]);
|
|
683
705
|
ResultFormatter.arrivalAirport(decodeResult, info[2]);
|
|
684
|
-
decodeResult.raw.
|
|
706
|
+
decodeResult.raw.day = Number(info[3]);
|
|
685
707
|
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(info[4]));
|
|
686
708
|
ResultFormatter.arrivalRunway(decodeResult, info[5].slice(1));
|
|
687
709
|
ResultFormatter.unknownArr(decodeResult, data.slice(3), "/");
|
|
688
710
|
} else if (type === "B3") {
|
|
689
711
|
ResultFormatter.departureAirport(decodeResult, header[1].substring(0, 3), "IATA");
|
|
690
712
|
ResultFormatter.arrivalAirport(decodeResult, header[1].substring(3), "IATA");
|
|
691
|
-
decodeResult.raw.
|
|
713
|
+
decodeResult.raw.day = Number(header[2]);
|
|
692
714
|
ResultFormatter.arrivalRunway(decodeResult, header[3].slice(1));
|
|
693
715
|
if (header.length > 4) {
|
|
694
716
|
ResultFormatter.unknownArr(decodeResult, header.slice(4), "/");
|
|
@@ -697,7 +719,7 @@ var Label_5Z_Slash = class extends DecoderPlugin {
|
|
|
697
719
|
const info = data[2].split(" ");
|
|
698
720
|
ResultFormatter.departureAirport(decodeResult, info[1]);
|
|
699
721
|
ResultFormatter.arrivalAirport(decodeResult, info[2]);
|
|
700
|
-
decodeResult.raw.
|
|
722
|
+
decodeResult.raw.day = Number(info[3]);
|
|
701
723
|
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(info[4]));
|
|
702
724
|
ResultFormatter.unknownArr(decodeResult, info.slice(5), " ");
|
|
703
725
|
} else if (type === "C3") {
|
|
@@ -707,10 +729,10 @@ var Label_5Z_Slash = class extends DecoderPlugin {
|
|
|
707
729
|
const airports = data[2].split(" ");
|
|
708
730
|
ResultFormatter.departureAirport(decodeResult, airports[1]);
|
|
709
731
|
ResultFormatter.arrivalAirport(decodeResult, airports[2]);
|
|
710
|
-
decodeResult.raw.
|
|
732
|
+
decodeResult.raw.day = Number(airports[3]);
|
|
711
733
|
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(airports[4]));
|
|
712
734
|
const estimates = data[3].split(" ");
|
|
713
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(estimates[1]
|
|
735
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(estimates[1]));
|
|
714
736
|
ResultFormatter.unknown(decodeResult, estimates[2]);
|
|
715
737
|
} else {
|
|
716
738
|
if (options.debug) {
|
|
@@ -854,16 +876,16 @@ var Label_10_Slash = class extends DecoderPlugin {
|
|
|
854
876
|
ResultFormatter.heading(decodeResult, Number(parts[5]));
|
|
855
877
|
ResultFormatter.altitude(decodeResult, 100 * Number(parts[6]));
|
|
856
878
|
ResultFormatter.arrivalAirport(decodeResult, parts[7]);
|
|
857
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[8]
|
|
879
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[8]));
|
|
858
880
|
const waypoints = [{
|
|
859
881
|
name: parts[11]
|
|
860
882
|
}, {
|
|
861
883
|
name: parts[12],
|
|
862
|
-
time: DateTimeUtils.convertHHMMSSToTod(parts[13]
|
|
884
|
+
time: DateTimeUtils.convertHHMMSSToTod(parts[13]),
|
|
863
885
|
timeFormat: "tod"
|
|
864
886
|
}, {
|
|
865
887
|
name: parts[14],
|
|
866
|
-
time: DateTimeUtils.convertHHMMSSToTod(parts[15]
|
|
888
|
+
time: DateTimeUtils.convertHHMMSSToTod(parts[15]),
|
|
867
889
|
timeFormat: "tod"
|
|
868
890
|
}];
|
|
869
891
|
ResultFormatter.route(decodeResult, { waypoints });
|
|
@@ -883,7 +905,7 @@ var Label_12_N_Space = class extends DecoderPlugin {
|
|
|
883
905
|
qualifiers() {
|
|
884
906
|
return {
|
|
885
907
|
labels: ["12"],
|
|
886
|
-
preambles: ["N "]
|
|
908
|
+
preambles: ["N ", "S "]
|
|
887
909
|
};
|
|
888
910
|
}
|
|
889
911
|
decode(message, options = {}) {
|
|
@@ -919,6 +941,51 @@ var Label_12_N_Space = class extends DecoderPlugin {
|
|
|
919
941
|
}
|
|
920
942
|
};
|
|
921
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
|
+
|
|
922
989
|
// lib/plugins/Label_13Through18_Slash.ts
|
|
923
990
|
var Label_13Through18_Slash = class extends DecoderPlugin {
|
|
924
991
|
// eslint-disable-line camelcase
|
|
@@ -949,7 +1016,7 @@ var Label_13Through18_Slash = class extends DecoderPlugin {
|
|
|
949
1016
|
const data = parts[2].split(" ");
|
|
950
1017
|
ResultFormatter.departureAirport(decodeResult, data[1]);
|
|
951
1018
|
ResultFormatter.arrivalAirport(decodeResult, data[2]);
|
|
952
|
-
decodeResult.raw.
|
|
1019
|
+
decodeResult.raw.day = Number(data[3]);
|
|
953
1020
|
const time = DateTimeUtils.convertHHMMSSToTod(data[4]);
|
|
954
1021
|
if (labelNumber === 13) {
|
|
955
1022
|
ResultFormatter.out(decodeResult, time);
|
|
@@ -1009,7 +1076,7 @@ function getMsgType(labelNumber) {
|
|
|
1009
1076
|
|
|
1010
1077
|
// lib/plugins/Label_15.ts
|
|
1011
1078
|
var Label_15 = class extends DecoderPlugin {
|
|
1012
|
-
name = "label-
|
|
1079
|
+
name = "label-15";
|
|
1013
1080
|
qualifiers() {
|
|
1014
1081
|
return {
|
|
1015
1082
|
labels: ["15"],
|
|
@@ -1020,10 +1087,38 @@ var Label_15 = class extends DecoderPlugin {
|
|
|
1020
1087
|
const decodeResult = this.defaultResult();
|
|
1021
1088
|
decodeResult.decoder.name = this.name;
|
|
1022
1089
|
decodeResult.formatted.description = "Position Report";
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1090
|
+
decodeResult.message = message;
|
|
1091
|
+
if (message.text.startsWith("(2") && message.text.endsWith("(Z")) {
|
|
1092
|
+
const between = message.text.substring(2, message.text.length - 2);
|
|
1093
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(between.substring(0, 13)));
|
|
1094
|
+
if (between.length === 25) {
|
|
1095
|
+
ResultFormatter.unknown(decodeResult, between.substring(13, 19));
|
|
1096
|
+
const alt = between.substring(19, 22);
|
|
1097
|
+
if (alt != "---") {
|
|
1098
|
+
ResultFormatter.altitude(decodeResult, 100 * Number(alt));
|
|
1099
|
+
}
|
|
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));
|
|
1111
|
+
} else {
|
|
1112
|
+
ResultFormatter.unknown(decodeResult, between.substring(26));
|
|
1113
|
+
}
|
|
1114
|
+
} else {
|
|
1115
|
+
if (options.debug) {
|
|
1116
|
+
console.log(`Decoder: Unknown 15 message: ${message.text}`);
|
|
1117
|
+
}
|
|
1118
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1119
|
+
decodeResult.decoded = false;
|
|
1120
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1121
|
+
return decodeResult;
|
|
1027
1122
|
}
|
|
1028
1123
|
decodeResult.decoded = true;
|
|
1029
1124
|
decodeResult.decoder.decodeLevel = "partial";
|
|
@@ -1076,7 +1171,7 @@ var Label_16_N_Space = class extends DecoderPlugin {
|
|
|
1076
1171
|
qualifiers() {
|
|
1077
1172
|
return {
|
|
1078
1173
|
labels: ["16"],
|
|
1079
|
-
preambles: ["N "]
|
|
1174
|
+
preambles: ["N ", "S "]
|
|
1080
1175
|
};
|
|
1081
1176
|
}
|
|
1082
1177
|
decode(message, options = {}) {
|
|
@@ -1206,7 +1301,7 @@ var Label_1L_3Line = class extends DecoderPlugin {
|
|
|
1206
1301
|
}
|
|
1207
1302
|
const eta = data.get("ETA");
|
|
1208
1303
|
if (eta) {
|
|
1209
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta
|
|
1304
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta));
|
|
1210
1305
|
data.delete("ETA");
|
|
1211
1306
|
}
|
|
1212
1307
|
const alt = data.get("ALT");
|
|
@@ -1287,8 +1382,8 @@ var Label_1L_070 = class extends DecoderPlugin {
|
|
|
1287
1382
|
}
|
|
1288
1383
|
ResultFormatter.departureAirport(decodeResult, parts[0]);
|
|
1289
1384
|
ResultFormatter.arrivalAirport(decodeResult, parts[1]);
|
|
1290
|
-
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[2]
|
|
1291
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[3]
|
|
1385
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[2]));
|
|
1386
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[3]));
|
|
1292
1387
|
ResultFormatter.position(decodeResult, {
|
|
1293
1388
|
latitude: CoordinateUtils.getDirection(parts[4][0]) * Number(parts[4].substring(1)),
|
|
1294
1389
|
longitude: CoordinateUtils.getDirection(parts[5][0]) * Number(parts[5].substring(1))
|
|
@@ -1383,7 +1478,6 @@ var Label_1L_Slash = class extends DecoderPlugin {
|
|
|
1383
1478
|
const part = parts[i].split(" ");
|
|
1384
1479
|
data.set(part[0], part.slice(1).join(" "));
|
|
1385
1480
|
}
|
|
1386
|
-
console.log(data);
|
|
1387
1481
|
const position = {
|
|
1388
1482
|
latitude: Number(data.get("LAT")),
|
|
1389
1483
|
longitude: Number(data.get("LON"))
|
|
@@ -1408,7 +1502,7 @@ var Label_1L_Slash = class extends DecoderPlugin {
|
|
|
1408
1502
|
}
|
|
1409
1503
|
const eta = data.get("ETA");
|
|
1410
1504
|
if (eta) {
|
|
1411
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta
|
|
1505
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta));
|
|
1412
1506
|
data.delete("ETA");
|
|
1413
1507
|
}
|
|
1414
1508
|
let remaining = "";
|
|
@@ -1542,7 +1636,7 @@ var Label_22_OFF = class extends DecoderPlugin {
|
|
|
1542
1636
|
ResultFormatter.flightNumber(decodeResult, fields[0]);
|
|
1543
1637
|
ResultFormatter.departureDay(decodeResult, Number(fields[1].substring(0, 2)));
|
|
1544
1638
|
ResultFormatter.arrivalDay(decodeResult, Number(fields[1].substring(2, 4)));
|
|
1545
|
-
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(4, 8)
|
|
1639
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(4, 8)));
|
|
1546
1640
|
ResultFormatter.departureAirport(decodeResult, fields[1].substring(8, 12));
|
|
1547
1641
|
ResultFormatter.arrivalAirport(decodeResult, fields[1].substring(12, 16));
|
|
1548
1642
|
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 22)));
|
|
@@ -1558,7 +1652,7 @@ var Label_22_OFF = class extends DecoderPlugin {
|
|
|
1558
1652
|
}
|
|
1559
1653
|
ResultFormatter.departureAirport(decodeResult, fields[0]);
|
|
1560
1654
|
ResultFormatter.arrivalAirport(decodeResult, fields[1]);
|
|
1561
|
-
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[2]
|
|
1655
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[2]));
|
|
1562
1656
|
ResultFormatter.unknown(decodeResult, fields[3]);
|
|
1563
1657
|
decodeResult.decoded = true;
|
|
1564
1658
|
decodeResult.decoder.decodeLevel = "partial";
|
|
@@ -1575,12 +1669,12 @@ var Label_22_OFF = class extends DecoderPlugin {
|
|
|
1575
1669
|
ResultFormatter.position(decodeResult, position);
|
|
1576
1670
|
}
|
|
1577
1671
|
ResultFormatter.day(decodeResult, Number(fields[1].substring(14, 16)));
|
|
1578
|
-
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 20)
|
|
1672
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 20)));
|
|
1579
1673
|
ResultFormatter.departureAirport(decodeResult, fields[1].substring(20, 24));
|
|
1580
1674
|
ResultFormatter.arrivalAirport(decodeResult, fields[1].substring(24, 28));
|
|
1581
|
-
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(28, 32)
|
|
1675
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(28, 32)));
|
|
1582
1676
|
ResultFormatter.unknown(decodeResult, fields[1].substring(32, 36));
|
|
1583
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(36, 40)
|
|
1677
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(36, 40)));
|
|
1584
1678
|
decodeResult.decoded = true;
|
|
1585
1679
|
decodeResult.decoder.decodeLevel = "partial";
|
|
1586
1680
|
} else {
|
|
@@ -1662,7 +1756,7 @@ var Label_24_Slash = class extends DecoderPlugin {
|
|
|
1662
1756
|
longitude: (lon[0] === "E" ? 1 : -1) * Number(lon.substring(1))
|
|
1663
1757
|
};
|
|
1664
1758
|
ResultFormatter.position(decodeResult, position);
|
|
1665
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[8]
|
|
1759
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[8]));
|
|
1666
1760
|
ResultFormatter.unknown(decodeResult, fields[7]);
|
|
1667
1761
|
decodeResult.decoded = true;
|
|
1668
1762
|
decodeResult.decoder.decodeLevel = "partial";
|
|
@@ -1698,7 +1792,7 @@ var Label_30_Slash_EA = class extends DecoderPlugin {
|
|
|
1698
1792
|
console.log(results);
|
|
1699
1793
|
}
|
|
1700
1794
|
}
|
|
1701
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results[0].substr(2, 4)
|
|
1795
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results[0].substr(2, 4)));
|
|
1702
1796
|
if (results[1].substring(0, 2) === "DS") {
|
|
1703
1797
|
ResultFormatter.arrivalAirport(decodeResult, results[1].substring(2, 6));
|
|
1704
1798
|
ResultFormatter.unknown(decodeResult, "/".concat(results[2]));
|
|
@@ -1725,22 +1819,35 @@ var Label_44_ETA = class extends DecoderPlugin {
|
|
|
1725
1819
|
decodeResult.decoder.name = this.name;
|
|
1726
1820
|
decodeResult.formatted.description = "ETA Report";
|
|
1727
1821
|
decodeResult.message = message;
|
|
1728
|
-
const
|
|
1729
|
-
|
|
1730
|
-
if (results?.groups) {
|
|
1822
|
+
const data = message.text.split(",");
|
|
1823
|
+
if (data.length >= 9) {
|
|
1731
1824
|
if (options.debug) {
|
|
1732
1825
|
console.log(`Label 44 ETA Report: groups`);
|
|
1733
|
-
console.log(
|
|
1826
|
+
console.log(data);
|
|
1734
1827
|
}
|
|
1735
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1736
|
-
ResultFormatter.
|
|
1737
|
-
ResultFormatter.
|
|
1738
|
-
decodeResult
|
|
1739
|
-
|
|
1740
|
-
);
|
|
1741
|
-
|
|
1742
|
-
|
|
1828
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
|
|
1829
|
+
ResultFormatter.altitude(decodeResult, 100 * Number(data[2]));
|
|
1830
|
+
ResultFormatter.departureAirport(decodeResult, data[3]);
|
|
1831
|
+
ResultFormatter.arrivalAirport(decodeResult, data[4]);
|
|
1832
|
+
ResultFormatter.month(decodeResult, Number(data[5].substring(0, 2)));
|
|
1833
|
+
ResultFormatter.day(decodeResult, Number(data[5].substring(2, 4)));
|
|
1834
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[6]));
|
|
1835
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[7]));
|
|
1836
|
+
const fuel = Number(data[8]);
|
|
1837
|
+
if (!isNaN(fuel)) {
|
|
1838
|
+
ResultFormatter.remainingFuel(decodeResult, Number(fuel));
|
|
1839
|
+
}
|
|
1840
|
+
if (data.length > 9) {
|
|
1841
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(9));
|
|
1743
1842
|
}
|
|
1843
|
+
} else {
|
|
1844
|
+
if (options.debug) {
|
|
1845
|
+
console.log(`Decoder: Unknown 44 message: ${message.text}`);
|
|
1846
|
+
}
|
|
1847
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1848
|
+
decodeResult.decoded = false;
|
|
1849
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1850
|
+
return decodeResult;
|
|
1744
1851
|
}
|
|
1745
1852
|
decodeResult.decoded = true;
|
|
1746
1853
|
decodeResult.decoder.decodeLevel = "full";
|
|
@@ -1762,22 +1869,33 @@ var Label_44_IN = class extends DecoderPlugin {
|
|
|
1762
1869
|
decodeResult.decoder.name = this.name;
|
|
1763
1870
|
decodeResult.formatted.description = "In Air Report";
|
|
1764
1871
|
decodeResult.message = message;
|
|
1765
|
-
const
|
|
1766
|
-
|
|
1767
|
-
if (results?.groups) {
|
|
1872
|
+
const data = message.text.split(",");
|
|
1873
|
+
if (data.length >= 7) {
|
|
1768
1874
|
if (options.debug) {
|
|
1769
1875
|
console.log(`Label 44 In Air Report: groups`);
|
|
1770
|
-
console.log(
|
|
1876
|
+
console.log(data);
|
|
1771
1877
|
}
|
|
1772
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1773
|
-
ResultFormatter.departureAirport(decodeResult,
|
|
1774
|
-
ResultFormatter.arrivalAirport(decodeResult,
|
|
1775
|
-
decodeResult
|
|
1776
|
-
|
|
1777
|
-
);
|
|
1778
|
-
|
|
1779
|
-
|
|
1878
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
|
|
1879
|
+
ResultFormatter.departureAirport(decodeResult, data[2]);
|
|
1880
|
+
ResultFormatter.arrivalAirport(decodeResult, data[3]);
|
|
1881
|
+
ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
|
|
1882
|
+
ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
|
|
1883
|
+
ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
|
|
1884
|
+
const fuel = Number(data[6]);
|
|
1885
|
+
if (!isNaN(fuel)) {
|
|
1886
|
+
ResultFormatter.remainingFuel(decodeResult, Number(fuel));
|
|
1887
|
+
}
|
|
1888
|
+
if (data.length > 7) {
|
|
1889
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(7));
|
|
1780
1890
|
}
|
|
1891
|
+
} else {
|
|
1892
|
+
if (options.debug) {
|
|
1893
|
+
console.log(`Decoder: Unknown 44 message: ${message.text}`);
|
|
1894
|
+
}
|
|
1895
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1896
|
+
decodeResult.decoded = false;
|
|
1897
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1898
|
+
return decodeResult;
|
|
1781
1899
|
}
|
|
1782
1900
|
decodeResult.decoded = true;
|
|
1783
1901
|
decodeResult.decoder.decodeLevel = "full";
|
|
@@ -1799,25 +1917,34 @@ var Label_44_OFF = class extends DecoderPlugin {
|
|
|
1799
1917
|
decodeResult.decoder.name = this.name;
|
|
1800
1918
|
decodeResult.formatted.description = "Off Runway Report";
|
|
1801
1919
|
decodeResult.message = message;
|
|
1802
|
-
const
|
|
1803
|
-
|
|
1804
|
-
if (results?.groups) {
|
|
1920
|
+
const data = message.text.split(",");
|
|
1921
|
+
if (data.length >= 8) {
|
|
1805
1922
|
if (options.debug) {
|
|
1806
1923
|
console.log(`Label 44 Off Runway Report: groups`);
|
|
1807
|
-
console.log(
|
|
1924
|
+
console.log(data);
|
|
1808
1925
|
}
|
|
1809
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1810
|
-
ResultFormatter.departureAirport(decodeResult,
|
|
1811
|
-
ResultFormatter.arrivalAirport(decodeResult,
|
|
1812
|
-
decodeResult
|
|
1813
|
-
|
|
1814
|
-
);
|
|
1815
|
-
decodeResult
|
|
1816
|
-
|
|
1817
|
-
)
|
|
1818
|
-
|
|
1819
|
-
|
|
1926
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
|
|
1927
|
+
ResultFormatter.departureAirport(decodeResult, data[2]);
|
|
1928
|
+
ResultFormatter.arrivalAirport(decodeResult, data[3]);
|
|
1929
|
+
ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
|
|
1930
|
+
ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
|
|
1931
|
+
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
|
|
1932
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[6]));
|
|
1933
|
+
const fuel = Number(data[7]);
|
|
1934
|
+
if (!isNaN(fuel)) {
|
|
1935
|
+
ResultFormatter.remainingFuel(decodeResult, Number(fuel));
|
|
1936
|
+
}
|
|
1937
|
+
if (data.length > 8) {
|
|
1938
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(8));
|
|
1820
1939
|
}
|
|
1940
|
+
} else {
|
|
1941
|
+
if (options.debug) {
|
|
1942
|
+
console.log(`Decoder: Unknown 44 message: ${message.text}`);
|
|
1943
|
+
}
|
|
1944
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1945
|
+
decodeResult.decoded = false;
|
|
1946
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1947
|
+
return decodeResult;
|
|
1821
1948
|
}
|
|
1822
1949
|
decodeResult.decoded = true;
|
|
1823
1950
|
decodeResult.decoder.decodeLevel = "full";
|
|
@@ -1839,22 +1966,33 @@ var Label_44_ON = class extends DecoderPlugin {
|
|
|
1839
1966
|
decodeResult.decoder.name = this.name;
|
|
1840
1967
|
decodeResult.formatted.description = "On Runway Report";
|
|
1841
1968
|
decodeResult.message = message;
|
|
1842
|
-
const
|
|
1843
|
-
|
|
1844
|
-
if (results?.groups) {
|
|
1969
|
+
const data = message.text.split(",");
|
|
1970
|
+
if (data.length >= 7) {
|
|
1845
1971
|
if (options.debug) {
|
|
1846
1972
|
console.log(`Label 44 On Runway Report: groups`);
|
|
1847
|
-
console.log(
|
|
1973
|
+
console.log(data);
|
|
1848
1974
|
}
|
|
1849
|
-
ResultFormatter.position(decodeResult, CoordinateUtils.
|
|
1850
|
-
ResultFormatter.departureAirport(decodeResult,
|
|
1851
|
-
ResultFormatter.arrivalAirport(decodeResult,
|
|
1852
|
-
decodeResult
|
|
1853
|
-
|
|
1854
|
-
);
|
|
1855
|
-
|
|
1856
|
-
|
|
1975
|
+
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
|
|
1976
|
+
ResultFormatter.departureAirport(decodeResult, data[2]);
|
|
1977
|
+
ResultFormatter.arrivalAirport(decodeResult, data[3]);
|
|
1978
|
+
ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
|
|
1979
|
+
ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
|
|
1980
|
+
ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
|
|
1981
|
+
const fuel = Number(data[6]);
|
|
1982
|
+
if (!isNaN(fuel)) {
|
|
1983
|
+
ResultFormatter.remainingFuel(decodeResult, Number(fuel));
|
|
1984
|
+
}
|
|
1985
|
+
if (data.length > 7) {
|
|
1986
|
+
ResultFormatter.unknownArr(decodeResult, data.slice(7));
|
|
1987
|
+
}
|
|
1988
|
+
} else {
|
|
1989
|
+
if (options.debug) {
|
|
1990
|
+
console.log(`Decoder: Unknown 44 message: ${message.text}`);
|
|
1857
1991
|
}
|
|
1992
|
+
ResultFormatter.unknown(decodeResult, message.text);
|
|
1993
|
+
decodeResult.decoded = false;
|
|
1994
|
+
decodeResult.decoder.decodeLevel = "none";
|
|
1995
|
+
return decodeResult;
|
|
1858
1996
|
}
|
|
1859
1997
|
decodeResult.decoded = true;
|
|
1860
1998
|
decodeResult.decoder.decodeLevel = "full";
|
|
@@ -2269,12 +2407,17 @@ function addCompanyRoute(decodeResult, value) {
|
|
|
2269
2407
|
}
|
|
2270
2408
|
|
|
2271
2409
|
// lib/utils/h1_helper.ts
|
|
2272
|
-
var H1Helper = class {
|
|
2410
|
+
var H1Helper = class _H1Helper {
|
|
2273
2411
|
static decodeH1Message(decodeResult, message) {
|
|
2274
2412
|
const checksum = message.slice(-4);
|
|
2275
2413
|
const data = message.slice(0, message.length - 4);
|
|
2276
2414
|
const fields = data.split("/");
|
|
2277
|
-
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
|
+
}
|
|
2278
2421
|
for (let i = 1; i < fields.length; ++i) {
|
|
2279
2422
|
if (fields[i].startsWith("FN")) {
|
|
2280
2423
|
decodeResult.raw.flight_number = fields[i].substring(2);
|
|
@@ -2283,16 +2426,9 @@ var H1Helper = class {
|
|
|
2283
2426
|
} else if (fields[i].startsWith("DC")) {
|
|
2284
2427
|
processDC(decodeResult, fields[i].substring(2).split(","));
|
|
2285
2428
|
} else if (fields[i].startsWith("TS")) {
|
|
2286
|
-
|
|
2287
|
-
let time = DateTimeUtils.convertDateTimeToEpoch(ts[0], ts[1]);
|
|
2288
|
-
if (Number.isNaN(time)) {
|
|
2289
|
-
const date = ts[1].substring(2, 4) + ts[1].substring(0, 2) + ts[1].substring(4, 6);
|
|
2290
|
-
time = DateTimeUtils.convertDateTimeToEpoch(ts[0], date);
|
|
2291
|
-
}
|
|
2292
|
-
decodeResult.raw.message_date = ts[1];
|
|
2293
|
-
decodeResult.raw.message_timestamp = time;
|
|
2429
|
+
_H1Helper.processTS(decodeResult, fields[i].substring(2).split(","));
|
|
2294
2430
|
} else if (fields[i].startsWith("PS")) {
|
|
2295
|
-
|
|
2431
|
+
_H1Helper.processPS(decodeResult, fields[i].substring(2).split(","));
|
|
2296
2432
|
} else if (fields[i].startsWith("DT")) {
|
|
2297
2433
|
const data2 = fields[i].substring(2).split(",");
|
|
2298
2434
|
processDT(decodeResult, data2);
|
|
@@ -2313,9 +2449,11 @@ var H1Helper = class {
|
|
|
2313
2449
|
ResultFormatter.freetext(decodeResult, fields[i].substring(2));
|
|
2314
2450
|
} else if (fields[i].startsWith("ET")) {
|
|
2315
2451
|
if (fields[i].length === 7) {
|
|
2316
|
-
ResultFormatter.
|
|
2452
|
+
ResultFormatter.day(decodeResult, Number(fields[i].substring(2, 3)));
|
|
2453
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(3)));
|
|
2317
2454
|
} else if (fields[i].length === 8) {
|
|
2318
|
-
ResultFormatter.
|
|
2455
|
+
ResultFormatter.day(decodeResult, Number(fields[i].substring(2, 4)));
|
|
2456
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(4)));
|
|
2319
2457
|
} else {
|
|
2320
2458
|
ResultFormatter.unknown(decodeResult, fields[i], "/");
|
|
2321
2459
|
}
|
|
@@ -2328,6 +2466,56 @@ var H1Helper = class {
|
|
|
2328
2466
|
}
|
|
2329
2467
|
return true;
|
|
2330
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
|
+
}
|
|
2331
2519
|
};
|
|
2332
2520
|
function processAirField(decodeResult, data) {
|
|
2333
2521
|
if (data.length === 2) {
|
|
@@ -2405,7 +2593,7 @@ function parseMessageType(decodeResult, messageType) {
|
|
|
2405
2593
|
if (parts.length == 1) {
|
|
2406
2594
|
const type = parts[0].substring(0, 3);
|
|
2407
2595
|
if (type === "POS" && parts[0].length !== 3) {
|
|
2408
|
-
|
|
2596
|
+
H1Helper.processPosition(decodeResult, parts[0].substring(3).split(","));
|
|
2409
2597
|
}
|
|
2410
2598
|
return processMessageType(decodeResult, type);
|
|
2411
2599
|
} else if (parts.length == 2) {
|
|
@@ -2416,11 +2604,12 @@ function parseMessageType(decodeResult, messageType) {
|
|
|
2416
2604
|
}
|
|
2417
2605
|
const type = parts[1].length == 5 ? parts[1].substring(2, 5) : parts[1].substring(3, 6);
|
|
2418
2606
|
if (parts[1].substring(3, 6) === "POS" && parts[1].length > 6) {
|
|
2419
|
-
|
|
2607
|
+
H1Helper.processPosition(decodeResult, parts[1].substring(6).split(","));
|
|
2420
2608
|
}
|
|
2421
|
-
processMessageType(decodeResult, type);
|
|
2609
|
+
return processMessageType(decodeResult, type);
|
|
2422
2610
|
} else {
|
|
2423
2611
|
ResultFormatter.unknown(decodeResult, messageType);
|
|
2612
|
+
return false;
|
|
2424
2613
|
}
|
|
2425
2614
|
}
|
|
2426
2615
|
function processMessageType(decodeResult, type) {
|
|
@@ -2436,7 +2625,9 @@ function processMessageType(decodeResult, type) {
|
|
|
2436
2625
|
decodeResult.formatted.description = "Progress Report";
|
|
2437
2626
|
} else {
|
|
2438
2627
|
decodeResult.formatted.description = "Unknown H1 Message";
|
|
2628
|
+
return false;
|
|
2439
2629
|
}
|
|
2630
|
+
return true;
|
|
2440
2631
|
}
|
|
2441
2632
|
function processDC(decodeResult, data) {
|
|
2442
2633
|
decodeResult.raw.message_date = data[0];
|
|
@@ -2447,60 +2638,6 @@ function processDC(decodeResult, data) {
|
|
|
2447
2638
|
decodeResult.raw.message_timestamp = time;
|
|
2448
2639
|
}
|
|
2449
2640
|
}
|
|
2450
|
-
function processPS(decodeResult, data) {
|
|
2451
|
-
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2452
|
-
if (position) {
|
|
2453
|
-
decodeResult.raw.position = position;
|
|
2454
|
-
decodeResult.formatted.items.push({
|
|
2455
|
-
type: "aircraft_position",
|
|
2456
|
-
code: "POS",
|
|
2457
|
-
label: "Aircraft Position",
|
|
2458
|
-
value: CoordinateUtils.coordinateString(position)
|
|
2459
|
-
});
|
|
2460
|
-
}
|
|
2461
|
-
if (data.length === 9) {
|
|
2462
|
-
processRoute(decodeResult, data[3], data[1], data[5], data[4], void 0);
|
|
2463
|
-
ResultFormatter.altitude(decodeResult, Number(data[2]) * 100);
|
|
2464
|
-
ResultFormatter.temperature(decodeResult, data[6]);
|
|
2465
|
-
ResultFormatter.unknown(decodeResult, data[7]);
|
|
2466
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2467
|
-
}
|
|
2468
|
-
if (data.length === 14) {
|
|
2469
|
-
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2470
|
-
processRoute(decodeResult, data[4], data[2], data[6], data[5], void 0);
|
|
2471
|
-
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2472
|
-
ResultFormatter.groundspeed(decodeResult, Number(data[10]));
|
|
2473
|
-
ResultFormatter.unknown(decodeResult, data[1]);
|
|
2474
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2475
|
-
ResultFormatter.unknown(decodeResult, data[9]);
|
|
2476
|
-
ResultFormatter.unknown(decodeResult, data.slice(11).join(","));
|
|
2477
|
-
}
|
|
2478
|
-
}
|
|
2479
|
-
function processPosition2(decodeResult, data) {
|
|
2480
|
-
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[0]);
|
|
2481
|
-
if (position) {
|
|
2482
|
-
decodeResult.raw.position = position;
|
|
2483
|
-
decodeResult.formatted.items.push({
|
|
2484
|
-
type: "aircraft_position",
|
|
2485
|
-
code: "POS",
|
|
2486
|
-
label: "Aircraft Position",
|
|
2487
|
-
value: CoordinateUtils.coordinateString(position)
|
|
2488
|
-
});
|
|
2489
|
-
}
|
|
2490
|
-
if (data.length >= 10) {
|
|
2491
|
-
ResultFormatter.altitude(decodeResult, Number(data[3]) * 100);
|
|
2492
|
-
processRoute(decodeResult, data[1], data[2], data[4], data[5], data[6]);
|
|
2493
|
-
ResultFormatter.temperature(decodeResult, data[7]);
|
|
2494
|
-
ResultFormatter.unknown(decodeResult, data[8]);
|
|
2495
|
-
ResultFormatter.unknown(decodeResult, data[9]);
|
|
2496
|
-
}
|
|
2497
|
-
if (data.length >= 14) {
|
|
2498
|
-
ResultFormatter.groundspeed(decodeResult, Number(data[10]));
|
|
2499
|
-
ResultFormatter.unknown(decodeResult, data[11]);
|
|
2500
|
-
ResultFormatter.unknown(decodeResult, data[12]);
|
|
2501
|
-
ResultFormatter.unknown(decodeResult, data[13]);
|
|
2502
|
-
}
|
|
2503
|
-
}
|
|
2504
2641
|
function processRoute(decodeResult, last, time, next, eta, then, date) {
|
|
2505
2642
|
const lastTime = date ? DateTimeUtils.convertDateTimeToEpoch(time, date) : DateTimeUtils.convertHHMMSSToTod(time);
|
|
2506
2643
|
const nextTime = date ? DateTimeUtils.convertDateTimeToEpoch(eta, date) : DateTimeUtils.convertHHMMSSToTod(eta);
|
|
@@ -2575,7 +2712,7 @@ var Label_4N = class extends DecoderPlugin {
|
|
|
2575
2712
|
decodeResult.decoded = true;
|
|
2576
2713
|
const fields = text.split(",");
|
|
2577
2714
|
if (text.length === 51) {
|
|
2578
|
-
decodeResult.raw.
|
|
2715
|
+
decodeResult.raw.day = text.substring(0, 2);
|
|
2579
2716
|
ResultFormatter.departureAirport(decodeResult, text.substring(8, 11));
|
|
2580
2717
|
ResultFormatter.arrivalAirport(decodeResult, text.substring(13, 16));
|
|
2581
2718
|
ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(text.substring(30, 45).replace(/^(.)0/, "$1")));
|
|
@@ -2612,6 +2749,129 @@ var Label_4N = class extends DecoderPlugin {
|
|
|
2612
2749
|
}
|
|
2613
2750
|
};
|
|
2614
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
|
+
|
|
2615
2875
|
// lib/plugins/Label_80.ts
|
|
2616
2876
|
var Label_80 = class extends DecoderPlugin {
|
|
2617
2877
|
name = "label-80";
|
|
@@ -2789,7 +3049,7 @@ var Label_83 = class extends DecoderPlugin {
|
|
|
2789
3049
|
if (text.substring(0, 10) === "4DH3 ETAT2") {
|
|
2790
3050
|
const fields = text.split(/\s+/);
|
|
2791
3051
|
if (fields[2].length > 5) {
|
|
2792
|
-
decodeResult.raw.
|
|
3052
|
+
decodeResult.raw.day = fields[2].substring(5);
|
|
2793
3053
|
}
|
|
2794
3054
|
ResultFormatter.unknown(decodeResult, fields[2].substring(0, 4));
|
|
2795
3055
|
const subfields = fields[3].split("/");
|
|
@@ -2798,7 +3058,7 @@ var Label_83 = class extends DecoderPlugin {
|
|
|
2798
3058
|
ResultFormatter.tail(decodeResult, fields[4].replace(/\./g, ""));
|
|
2799
3059
|
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[6] + "00"));
|
|
2800
3060
|
} else if (text.substring(0, 5) === "001PR") {
|
|
2801
|
-
decodeResult.raw.
|
|
3061
|
+
decodeResult.raw.day = text.substring(5, 7);
|
|
2802
3062
|
const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(text.substring(13, 28).replace(/\./g, ""));
|
|
2803
3063
|
if (position) {
|
|
2804
3064
|
ResultFormatter.position(decodeResult, position);
|
|
@@ -2810,7 +3070,7 @@ var Label_83 = class extends DecoderPlugin {
|
|
|
2810
3070
|
if (fields.length === 9) {
|
|
2811
3071
|
ResultFormatter.departureAirport(decodeResult, fields[0]);
|
|
2812
3072
|
ResultFormatter.arrivalAirport(decodeResult, fields[1]);
|
|
2813
|
-
decodeResult.raw.
|
|
3073
|
+
decodeResult.raw.day = fields[2].substring(0, 2);
|
|
2814
3074
|
decodeResult.raw.time = fields[2].substring(2);
|
|
2815
3075
|
ResultFormatter.position(
|
|
2816
3076
|
decodeResult,
|
|
@@ -2860,7 +3120,7 @@ var Label_8E = class extends DecoderPlugin {
|
|
|
2860
3120
|
console.log(`Label 8E ETA: groups`);
|
|
2861
3121
|
console.log(results.groups);
|
|
2862
3122
|
}
|
|
2863
|
-
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results.groups.arrival_eta
|
|
3123
|
+
ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results.groups.arrival_eta));
|
|
2864
3124
|
ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
|
|
2865
3125
|
}
|
|
2866
3126
|
decodeResult.decoded = true;
|
|
@@ -3048,6 +3308,65 @@ var Label_H1_OHMA = class extends DecoderPlugin {
|
|
|
3048
3308
|
}
|
|
3049
3309
|
};
|
|
3050
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
|
+
|
|
3051
3370
|
// lib/plugins/Label_H1_StarPOS.ts
|
|
3052
3371
|
var Label_H1_StarPOS = class extends DecoderPlugin {
|
|
3053
3372
|
name = "label-h1-star-pos";
|
|
@@ -3072,9 +3391,9 @@ var Label_H1_StarPOS = class extends DecoderPlugin {
|
|
|
3072
3391
|
decodeResult.decoder.decodeLevel = "none";
|
|
3073
3392
|
return decodeResult;
|
|
3074
3393
|
}
|
|
3075
|
-
|
|
3076
|
-
decodeResult
|
|
3077
|
-
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12)
|
|
3394
|
+
ResultFormatter.month(decodeResult, Number(msg.substring(4, 6)));
|
|
3395
|
+
ResultFormatter.day(decodeResult, Number(msg.substring(6, 8)));
|
|
3396
|
+
ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12)));
|
|
3078
3397
|
ResultFormatter.position(decodeResult, {
|
|
3079
3398
|
// Deg Min, no sec
|
|
3080
3399
|
latitude: CoordinateUtils.getDirection(msg.substring(12, 13)) * (Number(msg.substring(13, 15)) + Number(msg.substring(15, 17)) / 60),
|
|
@@ -3301,7 +3620,7 @@ var Label_QR = class extends DecoderPlugin {
|
|
|
3301
3620
|
decodeResult.formatted.description = "ON Report";
|
|
3302
3621
|
ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
|
|
3303
3622
|
ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
|
|
3304
|
-
ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)
|
|
3623
|
+
ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
|
|
3305
3624
|
ResultFormatter.unknown(decodeResult, message.text.substring(12));
|
|
3306
3625
|
decodeResult.decoded = true;
|
|
3307
3626
|
if (!decodeResult.remaining.text)
|
|
@@ -3326,7 +3645,7 @@ var Label_QP = class extends DecoderPlugin {
|
|
|
3326
3645
|
decodeResult.formatted.description = "OUT Report";
|
|
3327
3646
|
ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
|
|
3328
3647
|
ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
|
|
3329
|
-
ResultFormatter.out(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)
|
|
3648
|
+
ResultFormatter.out(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
|
|
3330
3649
|
ResultFormatter.unknown(decodeResult, message.text.substring(12));
|
|
3331
3650
|
decodeResult.decoded = true;
|
|
3332
3651
|
if (!decodeResult.remaining.text)
|
|
@@ -3351,7 +3670,7 @@ var Label_QS = class extends DecoderPlugin {
|
|
|
3351
3670
|
decodeResult.formatted.description = "IN Report";
|
|
3352
3671
|
ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
|
|
3353
3672
|
ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
|
|
3354
|
-
ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)
|
|
3673
|
+
ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
|
|
3355
3674
|
ResultFormatter.unknown(decodeResult, message.text.substring(12));
|
|
3356
3675
|
decodeResult.decoded = true;
|
|
3357
3676
|
if (!decodeResult.remaining.text)
|
|
@@ -3378,7 +3697,7 @@ var Label_QQ = class extends DecoderPlugin {
|
|
|
3378
3697
|
ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
|
|
3379
3698
|
ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
|
|
3380
3699
|
if (message.text.substring(12, 19) === "\r\n001FE") {
|
|
3381
|
-
decodeResult.raw.
|
|
3700
|
+
decodeResult.raw.day = message.text.substring(19, 21);
|
|
3382
3701
|
ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(21, 27)));
|
|
3383
3702
|
let latdir = message.text.substring(27, 28);
|
|
3384
3703
|
let latdeg = Number(message.text.substring(28, 30));
|
|
@@ -4228,6 +4547,7 @@ var MessageDecoder = class {
|
|
|
4228
4547
|
this.registerPlugin(new Label_10_POS(this));
|
|
4229
4548
|
this.registerPlugin(new Label_10_Slash(this));
|
|
4230
4549
|
this.registerPlugin(new Label_12_N_Space(this));
|
|
4550
|
+
this.registerPlugin(new Label_12_POS(this));
|
|
4231
4551
|
this.registerPlugin(new Label_13Through18_Slash(this));
|
|
4232
4552
|
this.registerPlugin(new Label_15(this));
|
|
4233
4553
|
this.registerPlugin(new Label_15_FST(this));
|
|
@@ -4254,13 +4574,17 @@ var MessageDecoder = class {
|
|
|
4254
4574
|
this.registerPlugin(new Label_4A_Slash_01(this));
|
|
4255
4575
|
this.registerPlugin(new Label_4J_POS(this));
|
|
4256
4576
|
this.registerPlugin(new Label_4N(this));
|
|
4577
|
+
this.registerPlugin(new Label_4T_AGFSR(this));
|
|
4578
|
+
this.registerPlugin(new Label_4T_ETA(this));
|
|
4257
4579
|
this.registerPlugin(new Label_B6_Forwardslash(this));
|
|
4258
4580
|
this.registerPlugin(new Label_H1_FLR(this));
|
|
4259
4581
|
this.registerPlugin(new Label_H1_OHMA(this));
|
|
4260
4582
|
this.registerPlugin(new Label_H1_WRN(this));
|
|
4261
4583
|
this.registerPlugin(new Label_H1(this));
|
|
4584
|
+
this.registerPlugin(new Label_H1_Slash(this));
|
|
4262
4585
|
this.registerPlugin(new Label_H1_StarPOS(this));
|
|
4263
4586
|
this.registerPlugin(new Label_HX(this));
|
|
4587
|
+
this.registerPlugin(new Label_58(this));
|
|
4264
4588
|
this.registerPlugin(new Label_80(this));
|
|
4265
4589
|
this.registerPlugin(new Label_83(this));
|
|
4266
4590
|
this.registerPlugin(new Label_8E(this));
|