@aeroswarm/codec 0.1.12 → 0.1.13
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 +121 -35
- package/dist/surveillance/asterix/descriptor-fields.test.d.ts +2 -0
- package/dist/surveillance/asterix/descriptor-fields.test.d.ts.map +1 -0
- package/dist/surveillance/asterix/fields.d.ts.map +1 -1
- package/dist/surveillance/asterix/types.d.ts +19 -0
- package/dist/surveillance/asterix/types.d.ts.map +1 -1
- package/dist/surveillance/asterix/xml-loader.d.ts +2 -0
- package/dist/surveillance/asterix/xml-loader.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -87,7 +87,11 @@ function parseFormat(s) {
|
|
|
87
87
|
function parseVariable(s) {
|
|
88
88
|
const inner = firstContent(s, "Variable");
|
|
89
89
|
const m = inner.match(/<Fixed\s+length="(\d+)"/);
|
|
90
|
-
|
|
90
|
+
const chunks = [];
|
|
91
|
+
const re = /<Fixed\s+length="\d+"[^>]*>([\s\S]*?)<\/Fixed>/g;
|
|
92
|
+
let c;
|
|
93
|
+
while ((c = re.exec(inner)) !== null) chunks.push(parseBits(c[1]));
|
|
94
|
+
return { type: "variable", chunkBytes: m ? parseInt(m[1]) : 1, bits: chunks[0] ?? parseBits(firstContent(inner, "Fixed")), chunks };
|
|
91
95
|
}
|
|
92
96
|
function parseBits(s) {
|
|
93
97
|
const out = [];
|
|
@@ -297,6 +301,60 @@ function trdFlags(raw, out) {
|
|
|
297
301
|
if (num(raw, "TST") === 1) out.testTarget = true;
|
|
298
302
|
if (num(raw, "RAB") === 1) out.fixedTransponder = true;
|
|
299
303
|
if (num(raw, "SIM") === 1) out.simulated = true;
|
|
304
|
+
const gbs = num(raw, "GBS");
|
|
305
|
+
if (gbs !== void 0) out.onGround = gbs === 1;
|
|
306
|
+
}
|
|
307
|
+
function compoundSubfields(d, sizeOf) {
|
|
308
|
+
const present = [];
|
|
309
|
+
let at = 0;
|
|
310
|
+
let sub = 0;
|
|
311
|
+
while (at < d.length) {
|
|
312
|
+
const b = d[at++];
|
|
313
|
+
for (let bit = 7; bit >= 1; bit--) {
|
|
314
|
+
if (b >> bit & 1) present.push(sub);
|
|
315
|
+
sub++;
|
|
316
|
+
}
|
|
317
|
+
if ((b & 1) === 0) break;
|
|
318
|
+
}
|
|
319
|
+
const offsets = /* @__PURE__ */ new Map();
|
|
320
|
+
let off = at;
|
|
321
|
+
for (const index of present) {
|
|
322
|
+
const size = sizeOf(index, d, off);
|
|
323
|
+
if (size === void 0) break;
|
|
324
|
+
offsets.set(index, off);
|
|
325
|
+
off += size;
|
|
326
|
+
}
|
|
327
|
+
return offsets;
|
|
328
|
+
}
|
|
329
|
+
function derivedDataSize(index, d, off) {
|
|
330
|
+
if (index < 7) return [3, 6, 2, 2, 2, 2, 2][index];
|
|
331
|
+
if (index === 7) {
|
|
332
|
+
let n = 1;
|
|
333
|
+
while (off + n - 1 < d.length && (d[off + n - 1] & 1) === 1) n++;
|
|
334
|
+
return n;
|
|
335
|
+
}
|
|
336
|
+
if (index === 8) return off < d.length ? 1 + 15 * d[off] : void 0;
|
|
337
|
+
if (index === 9 || index === 10) return 2;
|
|
338
|
+
return void 0;
|
|
339
|
+
}
|
|
340
|
+
function flightPlanSize(index) {
|
|
341
|
+
return [2, 7, 4, 1, 4, 1, 4, 4][index];
|
|
342
|
+
}
|
|
343
|
+
function asciiAt(d, off, len) {
|
|
344
|
+
if (off === void 0 || d.length < off + len) return void 0;
|
|
345
|
+
const text = d.subarray(off, off + len).toString("latin1").trim();
|
|
346
|
+
return text.length > 0 && /^[A-Z0-9 ]+$/.test(text) ? text : void 0;
|
|
347
|
+
}
|
|
348
|
+
function targetSize(raw, out) {
|
|
349
|
+
const lengthM = num(raw, "Len", "Length");
|
|
350
|
+
const widthM = num(raw, "WIDTH", "Width");
|
|
351
|
+
const orientationDeg = num(raw, "ORI", "Ori");
|
|
352
|
+
if (lengthM === void 0 && widthM === void 0 && orientationDeg === void 0) return;
|
|
353
|
+
out.targetSize = {
|
|
354
|
+
...lengthM !== void 0 && { lengthM },
|
|
355
|
+
...widthM !== void 0 && { widthM },
|
|
356
|
+
...orientationDeg !== void 0 && { orientationDeg }
|
|
357
|
+
};
|
|
300
358
|
}
|
|
301
359
|
function decodeKnownField(cat, id, data, out, raw = {}) {
|
|
302
360
|
try {
|
|
@@ -333,6 +391,21 @@ function cat021(id, d, out, raw) {
|
|
|
333
391
|
trdFlags(raw, out);
|
|
334
392
|
break;
|
|
335
393
|
// I021/040 TRD
|
|
394
|
+
case "020": {
|
|
395
|
+
const ecat = num(raw, "ECAT");
|
|
396
|
+
if (ecat !== void 0) out.emitterCategory = ecat;
|
|
397
|
+
break;
|
|
398
|
+
}
|
|
399
|
+
case "155": {
|
|
400
|
+
const v = num(raw, "BVR");
|
|
401
|
+
if (v !== void 0) out.verticalRateFpm = v;
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
404
|
+
case "157": {
|
|
405
|
+
const v = num(raw, "GVR");
|
|
406
|
+
if (v !== void 0 && out.verticalRateFpm === void 0) out.verticalRateFpm = v;
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
336
409
|
case "010": {
|
|
337
410
|
const sac = num(raw, "SAC"), sic = num(raw, "SIC");
|
|
338
411
|
if (sac !== void 0 && sic !== void 0) out.dataSource = { sac, sic };
|
|
@@ -574,6 +647,10 @@ function cat010(id, d, out, raw) {
|
|
|
574
647
|
trdFlags(raw, out);
|
|
575
648
|
break;
|
|
576
649
|
// I010/020 TRD
|
|
650
|
+
case "270":
|
|
651
|
+
targetSize(raw, out);
|
|
652
|
+
break;
|
|
653
|
+
// I010/270 Target Size and Orientation
|
|
577
654
|
case "010": {
|
|
578
655
|
const sac = num(raw, "SAC"), sic = num(raw, "SIC");
|
|
579
656
|
if (sac !== void 0 && sic !== void 0) out.dataSource = { sac, sic };
|
|
@@ -641,19 +718,6 @@ function cat010(id, d, out, raw) {
|
|
|
641
718
|
}
|
|
642
719
|
}
|
|
643
720
|
var MS_TO_KT = 1 / 0.514444;
|
|
644
|
-
function flightPlanCallsign(d) {
|
|
645
|
-
let indicators = 0;
|
|
646
|
-
while (indicators < d.length) {
|
|
647
|
-
indicators++;
|
|
648
|
-
if ((d[indicators - 1] & 1) === 0) break;
|
|
649
|
-
}
|
|
650
|
-
const first = d[0] ?? 0;
|
|
651
|
-
if ((first & 64) === 0) return void 0;
|
|
652
|
-
const at = indicators + ((first & 128) !== 0 ? 2 : 0);
|
|
653
|
-
if (d.length < at + 7) return void 0;
|
|
654
|
-
const text = d.subarray(at, at + 7).toString("latin1").trim();
|
|
655
|
-
return text.length > 0 && /^[A-Z0-9 ]+$/.test(text) ? text : void 0;
|
|
656
|
-
}
|
|
657
721
|
function cat062(id, d, out, raw) {
|
|
658
722
|
switch (id) {
|
|
659
723
|
case "080":
|
|
@@ -699,6 +763,15 @@ function cat062(id, d, out, raw) {
|
|
|
699
763
|
else if (d.length >= 2) out.trackNumber = d.readUIntBE(0, 2);
|
|
700
764
|
break;
|
|
701
765
|
}
|
|
766
|
+
case "220": {
|
|
767
|
+
const roc = num(raw, "RoC");
|
|
768
|
+
if (roc !== void 0) out.verticalRateFpm = roc;
|
|
769
|
+
break;
|
|
770
|
+
}
|
|
771
|
+
case "270":
|
|
772
|
+
targetSize(raw, out);
|
|
773
|
+
break;
|
|
774
|
+
// Target Size and Orientation
|
|
702
775
|
case "300": {
|
|
703
776
|
const vfi = num(raw, "VFI");
|
|
704
777
|
out.vehicleFleet = vfi ?? (d.length >= 1 ? d[0] : void 0);
|
|
@@ -712,27 +785,30 @@ function cat062(id, d, out, raw) {
|
|
|
712
785
|
break;
|
|
713
786
|
}
|
|
714
787
|
case "390": {
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
788
|
+
const at = compoundSubfields(d, flightPlanSize);
|
|
789
|
+
const csn = asciiAt(d, at.get(1), 7);
|
|
790
|
+
if (csn && out.callsign === void 0) out.callsign = csn;
|
|
791
|
+
const tac = asciiAt(d, at.get(4), 4);
|
|
792
|
+
if (tac) out.aircraftType = tac;
|
|
793
|
+
const wtc = asciiAt(d, at.get(5), 1);
|
|
794
|
+
if (wtc) out.wakeTurbulence = wtc;
|
|
795
|
+
const dep = asciiAt(d, at.get(6), 4);
|
|
796
|
+
if (dep) out.departureAirport = dep;
|
|
797
|
+
const dst = asciiAt(d, at.get(7), 4);
|
|
798
|
+
if (dst) out.destinationAirport = dst;
|
|
719
799
|
break;
|
|
720
800
|
}
|
|
721
801
|
case "380": {
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
out.icao24 = d.readUIntBE(at, 3).toString(16).padStart(6, "0");
|
|
730
|
-
at += 3;
|
|
731
|
-
}
|
|
732
|
-
if (fsLen < d.length && (d[0] & 64) !== 0 && d.length >= at + 6 && out.callsign === void 0) {
|
|
733
|
-
const id2 = readCallsign(d.subarray(at, at + 6));
|
|
734
|
-
if (id2) out.callsign = id2;
|
|
802
|
+
const at = compoundSubfields(d, derivedDataSize);
|
|
803
|
+
const adr = at.get(0);
|
|
804
|
+
if (adr !== void 0 && d.length >= adr + 3) out.icao24 = d.readUIntBE(adr, 3).toString(16).padStart(6, "0");
|
|
805
|
+
const id2 = at.get(1);
|
|
806
|
+
if (id2 !== void 0 && d.length >= id2 + 6 && out.callsign === void 0) {
|
|
807
|
+
const name = readCallsign(d.subarray(id2, id2 + 6));
|
|
808
|
+
if (name) out.callsign = name;
|
|
735
809
|
}
|
|
810
|
+
const sab = at.get(10);
|
|
811
|
+
if (sab !== void 0 && sab < d.length) out.onGround = (d[sab] >> 1 & 1) === 1;
|
|
736
812
|
break;
|
|
737
813
|
}
|
|
738
814
|
case "070": {
|
|
@@ -968,10 +1044,7 @@ function decodeRecords(block, def, cat) {
|
|
|
968
1044
|
let result;
|
|
969
1045
|
try {
|
|
970
1046
|
result = decodeBlock(block.subarray(pos), def, (id, data, itemDef) => {
|
|
971
|
-
|
|
972
|
-
const bitData = itemDef.type === "variable" ? data.subarray(0, itemDef.chunkBytes) : data;
|
|
973
|
-
const raw = bits?.length ? extractBitFields(bitData, bits) : {};
|
|
974
|
-
decodeKnownField(cat, id, data, fields, raw);
|
|
1047
|
+
decodeKnownField(cat, id, data, fields, extractItemBits(itemDef, data));
|
|
975
1048
|
});
|
|
976
1049
|
} catch {
|
|
977
1050
|
break;
|
|
@@ -991,6 +1064,19 @@ function decodeRecords(block, def, cat) {
|
|
|
991
1064
|
const usable = firstEmpty === -1 ? records : records.slice(0, firstEmpty);
|
|
992
1065
|
return { all: usable.map((r) => r.fields), consumed: usable.length > 0 ? usable[usable.length - 1].end : 0, full: false };
|
|
993
1066
|
}
|
|
1067
|
+
function extractItemBits(itemDef, data) {
|
|
1068
|
+
if (itemDef.type === "fixed") return itemDef.bits?.length ? extractBitFields(data, itemDef.bits) : {};
|
|
1069
|
+
if (itemDef.type !== "variable") return {};
|
|
1070
|
+
const chunks = itemDef.chunks?.length ? itemDef.chunks : itemDef.bits ? [itemDef.bits] : [];
|
|
1071
|
+
const out = {};
|
|
1072
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
1073
|
+
const start = i * itemDef.chunkBytes;
|
|
1074
|
+
if (start + itemDef.chunkBytes > data.length) break;
|
|
1075
|
+
const part = extractBitFields(data.subarray(start, start + itemDef.chunkBytes), chunks[i]);
|
|
1076
|
+
for (const [name, value] of Object.entries(part)) if (!(name in out)) out[name] = value;
|
|
1077
|
+
}
|
|
1078
|
+
return out;
|
|
1079
|
+
}
|
|
994
1080
|
function isPlausible(f) {
|
|
995
1081
|
if (f.lat !== void 0 && (f.lat < -90 || f.lat > 90)) return false;
|
|
996
1082
|
if (f.lon !== void 0 && (f.lon < -180 || f.lon > 180)) return false;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor-fields.test.d.ts","sourceRoot":"","sources":["../../../src/surveillance/asterix/descriptor-fields.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/surveillance/asterix/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/surveillance/asterix/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAwI7C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,GAAE,SAAc,GAAG,IAAI,CAWrH"}
|
|
@@ -41,6 +41,25 @@ export interface AsterixFields {
|
|
|
41
41
|
vehicleFleet?: number;
|
|
42
42
|
/** Sensor-assigned local track number */
|
|
43
43
|
trackNumber?: number;
|
|
44
|
+
/** Ground bit: true = the target reports being on the ground, false = not. Undefined = not reported (CAT010/020/021 descriptor, CAT062 I062/380 SAB). */
|
|
45
|
+
onGround?: boolean;
|
|
46
|
+
/** ICAO aircraft type designator, e.g. "A320" (CAT062 I062/390 TAC) */
|
|
47
|
+
aircraftType?: string;
|
|
48
|
+
/** Wake turbulence category: L, M, H or J (CAT062 I062/390 WTC) */
|
|
49
|
+
wakeTurbulence?: string;
|
|
50
|
+
/** Departure and destination aerodrome, ICAO (CAT062 I062/390 DEP, DST) */
|
|
51
|
+
departureAirport?: string;
|
|
52
|
+
destinationAirport?: string;
|
|
53
|
+
/** Rate of climb (+) or descent (-), ft/min (CAT062 I062/220, CAT021 I021/155 baro, else I021/157 geometric) */
|
|
54
|
+
verticalRateFpm?: number;
|
|
55
|
+
/** Size and heading of the target on the surface (CAT062 I062/270, CAT010 I010/270) */
|
|
56
|
+
targetSize?: {
|
|
57
|
+
lengthM?: number;
|
|
58
|
+
widthM?: number;
|
|
59
|
+
orientationDeg?: number;
|
|
60
|
+
};
|
|
61
|
+
/** Emitter category of an ADS-B target (CAT021 I021/020 ECAT) */
|
|
62
|
+
emitterCategory?: number;
|
|
44
63
|
/** TST bit — test target */
|
|
45
64
|
testTarget?: boolean;
|
|
46
65
|
/** RAB bit — report from a fixed field-monitor transponder (MLAT RPU etc.) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/surveillance/asterix/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,iBAAiB,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,gBAAgB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAE1C,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IACnG,4CAA4C;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAChD,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/surveillance/asterix/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,iBAAiB,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,gBAAgB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAE1C,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IACnG,4CAA4C;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAChD,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yJAAyJ;IACzJ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gHAAgH;IAChH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uFAAuF;IACvF,UAAU,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5E,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;CACvB"}
|
|
@@ -13,10 +13,12 @@ export type FixedDef = {
|
|
|
13
13
|
bytes: number;
|
|
14
14
|
bits?: BitFieldDef[];
|
|
15
15
|
};
|
|
16
|
+
/** `bits` = the first octet's fields; `chunks` = the fields of every octet in order (the first extension re-numbers from bit 1). */
|
|
16
17
|
export type VariableDef = {
|
|
17
18
|
type: 'variable';
|
|
18
19
|
chunkBytes: number;
|
|
19
20
|
bits?: BitFieldDef[];
|
|
21
|
+
chunks?: BitFieldDef[][];
|
|
20
22
|
};
|
|
21
23
|
export type RepDef = {
|
|
22
24
|
type: 'repetitive';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml-loader.d.ts","sourceRoot":"","sources":["../../../src/surveillance/asterix/xml-loader.ts"],"names":[],"mappings":"AAgBA;kEACkE;AAClE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;IACxE,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAQ;IAAE,IAAI,EAAE,OAAO,CAAC;IAAM,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AACxF,MAAM,MAAM,WAAW,GAAK;IAAE,IAAI,EAAE,UAAU,CAAC;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"xml-loader.d.ts","sourceRoot":"","sources":["../../../src/surveillance/asterix/xml-loader.ts"],"names":[],"mappings":"AAgBA;kEACkE;AAClE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;IACxE,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAQ;IAAE,IAAI,EAAE,OAAO,CAAC;IAAM,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AACxF,oIAAoI;AACpI,MAAM,MAAM,WAAW,GAAK;IAAE,IAAI,EAAE,UAAU,CAAC;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,CAAA;CAAE,CAAC;AACvH,MAAM,MAAM,MAAM,GAAU;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AACxF,MAAM,MAAM,WAAW,GAAK;IAAE,IAAI,EAAE,UAAU,CAAC;IAAG,cAAc,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAC/F,MAAM,MAAM,WAAW,GAAK;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AACjD,MAAM,MAAM,UAAU,GAAM,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC;AAC1E,MAAM,MAAM,OAAO,GAAS,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAExF,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,QAAQ,EAAE,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B;AAgCD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAgBlE"}
|