gnss-js 2.10.1 → 2.12.0
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/README.md +16 -1
- package/dist/analysis.cjs +24 -25
- package/dist/analysis.js +2 -2
- package/dist/{clk-DGVBGRzA.d.cts → bias-sinex-OGMw9xEZ.d.cts} +66 -1
- package/dist/{clk-DGVBGRzA.d.ts → bias-sinex-OGMw9xEZ.d.ts} +66 -1
- package/dist/binex.d.cts +1 -1
- package/dist/binex.d.ts +1 -1
- package/dist/{chunk-56HM5B6T.js → chunk-2DJ4XENO.js} +177 -9
- package/dist/{chunk-GH7MYXON.js → chunk-2KQMCJ5Z.js} +7 -5
- package/dist/chunk-E3Y6YKQM.js +65 -0
- package/dist/{chunk-3U5AX7PY.js → chunk-FEABDV5P.js} +24 -25
- package/dist/{chunk-WQX354KD.js → chunk-H3AKFD25.js} +1 -1
- package/dist/{chunk-YUW33VXK.js → chunk-HUXQABJI.js} +2 -0
- package/dist/{chunk-74IVYOQV.js → chunk-HWHD5E6V.js} +128 -78
- package/dist/{chunk-KUSUN7DP.js → chunk-MFCPYUEI.js} +1 -1
- package/dist/{chunk-3KSDL3CO.js → chunk-NIJ6WFQJ.js} +6 -321
- package/dist/chunk-NL2ORX75.js +319 -0
- package/dist/{chunk-K3GLUWZI.js → chunk-RWFJEVLJ.js} +590 -296
- package/dist/{chunk-SEYH4BEN.js → chunk-SZP4TLYR.js} +2 -2
- package/dist/chunk-TWGZTRBL.js +323 -0
- package/dist/index.cjs +1315 -460
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +20 -12
- package/dist/{nav-DImXUdbp.d.cts → nav-COp0Vmlw.d.cts} +83 -2
- package/dist/{nav-DImXUdbp.d.ts → nav-COp0Vmlw.d.ts} +83 -2
- package/dist/{nav-BYmYoh9A.d.cts → nav-CvZXmumD.d.cts} +1 -1
- package/dist/{nav-CN8rxL4h.d.ts → nav-D2DFlVpa.d.ts} +1 -1
- package/dist/novatel.d.cts +1 -1
- package/dist/novatel.d.ts +1 -1
- package/dist/novatel.js +3 -3
- package/dist/orbit.d.cts +2 -2
- package/dist/orbit.d.ts +2 -2
- package/dist/osnma.cjs +1336 -0
- package/dist/osnma.d.cts +273 -0
- package/dist/osnma.d.ts +273 -0
- package/dist/osnma.js +1216 -0
- package/dist/positioning.cjs +585 -291
- package/dist/positioning.d.cts +116 -6
- package/dist/positioning.d.ts +116 -6
- package/dist/positioning.js +3 -3
- package/dist/rinex.cjs +210 -36
- package/dist/rinex.d.cts +10 -55
- package/dist/rinex.d.ts +10 -55
- package/dist/rinex.js +6 -3
- package/dist/sbf.cjs +420 -24
- package/dist/sbf.d.cts +46 -5
- package/dist/sbf.d.ts +46 -5
- package/dist/sbf.js +12 -6
- package/dist/trimble.d.cts +1 -1
- package/dist/trimble.d.ts +1 -1
- package/dist/ubx.d.cts +1 -1
- package/dist/ubx.d.ts +1 -1
- package/dist/ubx.js +5 -4
- package/package.json +6 -1
|
@@ -5,20 +5,14 @@ import {
|
|
|
5
5
|
// src/rinex/crx.ts
|
|
6
6
|
function crxRepair(old, diff) {
|
|
7
7
|
const chars = old.split("");
|
|
8
|
-
|
|
8
|
+
const n = Math.min(old.length, diff.length);
|
|
9
|
+
for (let i = 0; i < n; i++) {
|
|
9
10
|
const dc = diff[i];
|
|
10
|
-
if (dc === " ")
|
|
11
|
-
|
|
12
|
-
chars[i] = " ";
|
|
13
|
-
} else {
|
|
14
|
-
chars[i] = dc;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
if (diff.length > chars.length) {
|
|
18
|
-
for (let i = chars.length; i < diff.length; i++) {
|
|
19
|
-
chars[i] = diff[i] === "&" ? " " : diff[i];
|
|
20
|
-
}
|
|
11
|
+
if (dc === " ") continue;
|
|
12
|
+
chars[i] = dc === "&" ? " " : dc;
|
|
21
13
|
}
|
|
14
|
+
for (let i = old.length; i < diff.length; i++)
|
|
15
|
+
chars[i] = diff[i] === "&" ? " " : diff[i];
|
|
22
16
|
return chars.join("");
|
|
23
17
|
}
|
|
24
18
|
function parseCrxDataLine(line, ntype) {
|
|
@@ -266,6 +260,15 @@ function readObsValue(line, index) {
|
|
|
266
260
|
const v = parseFloat(raw);
|
|
267
261
|
return isNaN(v) ? null : v;
|
|
268
262
|
}
|
|
263
|
+
function normalizePrn(id) {
|
|
264
|
+
let sys = id[0];
|
|
265
|
+
let num = id.substring(1);
|
|
266
|
+
if (sys === " " || /\d/.test(sys)) {
|
|
267
|
+
num = id;
|
|
268
|
+
sys = "G";
|
|
269
|
+
}
|
|
270
|
+
return sys + num.replace(/\s/g, "").padStart(2, "0");
|
|
271
|
+
}
|
|
269
272
|
function parseEpochLine3(line) {
|
|
270
273
|
if (line[0] !== ">") return null;
|
|
271
274
|
const yr = parseInt(line.substring(2, 6));
|
|
@@ -415,7 +418,7 @@ async function parseRinexStream(file, onProgress, signal, onSatObs, workerMode)
|
|
|
415
418
|
function processSatLineV3(line) {
|
|
416
419
|
if (!header || line.length < 3) return;
|
|
417
420
|
const sys = line[0];
|
|
418
|
-
const prn = line.substring(0, 3);
|
|
421
|
+
const prn = normalizePrn(line.substring(0, 3));
|
|
419
422
|
trackSat(sys, prn);
|
|
420
423
|
const obsLine = line.substring(3);
|
|
421
424
|
const codes = header.obsTypes[sys] ?? [];
|
|
@@ -440,10 +443,8 @@ async function parseRinexStream(file, onProgress, signal, onSatObs, workerMode)
|
|
|
440
443
|
let v2ObsAccum = [];
|
|
441
444
|
function processSatLineV2(line) {
|
|
442
445
|
if (!header || v2SatIndex >= v2SatIds.length) return;
|
|
443
|
-
const
|
|
444
|
-
|
|
445
|
-
if (sys === " " || /\d/.test(sys)) sys = "G";
|
|
446
|
-
const prn = sys + satId.substring(1).padStart(2, "0");
|
|
446
|
+
const prn = normalizePrn(v2SatIds[v2SatIndex]);
|
|
447
|
+
const sys = prn[0];
|
|
447
448
|
if (v2CurrentSatLine === 0) {
|
|
448
449
|
trackSat(sys, prn);
|
|
449
450
|
if (onSatObs) v2ObsAccum = [];
|
|
@@ -534,6 +535,7 @@ async function parseRinexStream(file, onProgress, signal, onSatObs, workerMode)
|
|
|
534
535
|
} else {
|
|
535
536
|
epochLine = crxRepair(crxPrevEpochLine, line);
|
|
536
537
|
}
|
|
538
|
+
epochLine = epochLine.replace(/ +$/, "");
|
|
537
539
|
if (isV3) {
|
|
538
540
|
if (epochLine[0] !== ">") return;
|
|
539
541
|
const info = parseEpochLine3(epochLine);
|
|
@@ -551,10 +553,11 @@ async function parseRinexStream(file, onProgress, signal, onSatObs, workerMode)
|
|
|
551
553
|
return;
|
|
552
554
|
}
|
|
553
555
|
resetEpochAccum(info);
|
|
554
|
-
const satPart = epochLine.substring(41).replace(/\s+$/, "");
|
|
555
556
|
crxSatList = [];
|
|
556
|
-
for (let
|
|
557
|
-
crxSatList.push(
|
|
557
|
+
for (let k = 0; k < info.numSats; k++) {
|
|
558
|
+
crxSatList.push(
|
|
559
|
+
normalizePrn(epochLine.substring(41 + 3 * k, 44 + 3 * k))
|
|
560
|
+
);
|
|
558
561
|
}
|
|
559
562
|
crxSatIndex = 0;
|
|
560
563
|
crxPrevEpochLine = epochLine;
|
|
@@ -575,11 +578,7 @@ async function parseRinexStream(file, onProgress, signal, onSatObs, workerMode)
|
|
|
575
578
|
return;
|
|
576
579
|
}
|
|
577
580
|
resetEpochAccum(info);
|
|
578
|
-
crxSatList = (info.satIds ?? []).map(
|
|
579
|
-
let sys = id[0];
|
|
580
|
-
if (sys === " " || /\d/.test(sys)) sys = "G";
|
|
581
|
-
return sys + id.substring(1).padStart(2, "0");
|
|
582
|
-
});
|
|
581
|
+
crxSatList = (info.satIds ?? []).slice(0, info.numSats).map(normalizePrn);
|
|
583
582
|
crxSatIndex = 0;
|
|
584
583
|
crxPrevEpochLine = epochLine;
|
|
585
584
|
crxPhase = "clock";
|
|
@@ -1,28 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
scanSbfFrames,
|
|
3
|
+
svidToPrn
|
|
4
|
+
} from "./chunk-E3Y6YKQM.js";
|
|
1
5
|
import {
|
|
2
6
|
BdsAssembler,
|
|
3
|
-
GalFnavAssembler,
|
|
4
|
-
GalInavAssembler,
|
|
5
7
|
GloStringAssembler,
|
|
6
8
|
bdsSubframeParityOk,
|
|
7
|
-
galFnavPageCrcOk,
|
|
8
|
-
galInavPageCrcOk,
|
|
9
9
|
testGloString
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-NIJ6WFQJ.js";
|
|
11
|
+
import {
|
|
12
|
+
GalFnavAssembler,
|
|
13
|
+
GalInavAssembler,
|
|
14
|
+
galFnavPageCrcOk,
|
|
15
|
+
galInavPageCrcOk
|
|
16
|
+
} from "./chunk-TWGZTRBL.js";
|
|
11
17
|
import {
|
|
12
18
|
decodeSbasGeoNav,
|
|
13
19
|
sbasCrcOk
|
|
14
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-H3AKFD25.js";
|
|
15
21
|
import {
|
|
16
22
|
getGpsLeap
|
|
17
23
|
} from "./chunk-HVXYFUCB.js";
|
|
18
24
|
import {
|
|
19
25
|
geodeticToEcef
|
|
20
26
|
} from "./chunk-37QNKGTC.js";
|
|
27
|
+
import {
|
|
28
|
+
BdsCnav1Assembler,
|
|
29
|
+
BdsCnav2Assembler,
|
|
30
|
+
BdsCnav3Assembler,
|
|
31
|
+
bdsCnav1Sf2CrcOk,
|
|
32
|
+
bdsCnav1Sf3CrcOk,
|
|
33
|
+
bdsCnav2CrcOk,
|
|
34
|
+
bdsCnav3CrcOk
|
|
35
|
+
} from "./chunk-NL2ORX75.js";
|
|
21
36
|
import {
|
|
22
37
|
CnavAssembler,
|
|
23
38
|
cnavCrcOk,
|
|
24
39
|
crc24q
|
|
25
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-HUXQABJI.js";
|
|
26
41
|
import {
|
|
27
42
|
GPS_PI,
|
|
28
43
|
GpsLnavAssembler,
|
|
@@ -31,66 +46,6 @@ import {
|
|
|
31
46
|
setBitU
|
|
32
47
|
} from "./chunk-V2D5KUKH.js";
|
|
33
48
|
|
|
34
|
-
// src/sbf/frame.ts
|
|
35
|
-
var CRC_TABLE = (() => {
|
|
36
|
-
const t = new Uint16Array(256);
|
|
37
|
-
for (let n = 0; n < 256; n++) {
|
|
38
|
-
let c = n << 8;
|
|
39
|
-
for (let k = 0; k < 8; k++)
|
|
40
|
-
c = c & 32768 ? (c << 1 ^ 4129) & 65535 : c << 1 & 65535;
|
|
41
|
-
t[n] = c;
|
|
42
|
-
}
|
|
43
|
-
return t;
|
|
44
|
-
})();
|
|
45
|
-
function crc16(data, start, end) {
|
|
46
|
-
let crc = 0;
|
|
47
|
-
for (let i = start; i < end; i++)
|
|
48
|
-
crc = (crc << 8 ^ CRC_TABLE[(crc >> 8 ^ data[i]) & 255]) & 65535;
|
|
49
|
-
return crc;
|
|
50
|
-
}
|
|
51
|
-
function scanSbfFrames(data, view, onBlock) {
|
|
52
|
-
let badCrc = 0;
|
|
53
|
-
let i = 0;
|
|
54
|
-
while (i + 8 <= data.length) {
|
|
55
|
-
if (data[i] !== 36 || data[i + 1] !== 64) {
|
|
56
|
-
i++;
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
const len = view.getUint16(i + 6, true);
|
|
60
|
-
if (len < 8 || len % 4 !== 0) {
|
|
61
|
-
i++;
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
if (i + len > data.length) break;
|
|
65
|
-
if (crc16(data, i + 4, i + len) !== view.getUint16(i + 2, true)) {
|
|
66
|
-
badCrc++;
|
|
67
|
-
i++;
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
onBlock(view.getUint16(i + 4, true) & 8191, i, len);
|
|
71
|
-
i += len;
|
|
72
|
-
}
|
|
73
|
-
return badCrc;
|
|
74
|
-
}
|
|
75
|
-
var two = (n) => String(n).padStart(2, "0");
|
|
76
|
-
function svidToPrn(svid) {
|
|
77
|
-
if (svid >= 1 && svid <= 37) return svid <= 32 ? `G${two(svid)}` : null;
|
|
78
|
-
if (svid <= 61) return svid - 37 <= 27 ? `R${two(svid - 37)}` : null;
|
|
79
|
-
if (svid <= 62) return null;
|
|
80
|
-
if (svid <= 68) return svid - 38 <= 27 ? `R${two(svid - 38)}` : null;
|
|
81
|
-
if (svid <= 70) return null;
|
|
82
|
-
if (svid <= 106) return svid - 70 <= 36 ? `E${two(svid - 70)}` : null;
|
|
83
|
-
if (svid <= 119) return null;
|
|
84
|
-
if (svid <= 140) return `S${two(svid - 100)}`;
|
|
85
|
-
if (svid <= 180) return svid - 140 <= 50 ? `C${two(svid - 140)}` : null;
|
|
86
|
-
if (svid <= 190) return `J${two(svid - 180)}`;
|
|
87
|
-
if (svid <= 197) return svid - 190 <= 14 ? `I${two(svid - 190)}` : null;
|
|
88
|
-
if (svid <= 215) return `S${two(svid - 157)}`;
|
|
89
|
-
if (svid <= 222) return svid - 208 <= 14 ? `I${two(svid - 208)}` : null;
|
|
90
|
-
if (svid <= 245) return svid - 182 <= 50 ? `C${two(svid - 182)}` : null;
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
49
|
// src/sbf/nav.ts
|
|
95
50
|
var PI = Math.PI;
|
|
96
51
|
var GPS_EPOCH_MS = Date.UTC(1980, 0, 6);
|
|
@@ -924,6 +879,80 @@ function parseSbfGloNav(data) {
|
|
|
924
879
|
return { ephemerides, badCrc, messages };
|
|
925
880
|
}
|
|
926
881
|
|
|
882
|
+
// src/sbf/rawnav-bds-cnav.ts
|
|
883
|
+
var GPS_BDT_OFFSET = 14;
|
|
884
|
+
var B1C_FRAME_S = 18;
|
|
885
|
+
var TOW_DNU2 = 4294967295;
|
|
886
|
+
function newBdsCnavAssemblers() {
|
|
887
|
+
return {
|
|
888
|
+
b1c: new BdsCnav1Assembler(),
|
|
889
|
+
b2a: new BdsCnav2Assembler(),
|
|
890
|
+
b2b: new BdsCnav3Assembler()
|
|
891
|
+
};
|
|
892
|
+
}
|
|
893
|
+
function navBits(view, wordsAt, start, nBits) {
|
|
894
|
+
const out = new Uint8Array(Math.ceil(nBits / 8));
|
|
895
|
+
for (let i = 0; i < nBits; i++) {
|
|
896
|
+
const p = start + i;
|
|
897
|
+
const w = view.getUint32(wordsAt + 4 * (p >>> 5), true);
|
|
898
|
+
if (w >>> 31 - (p & 31) & 1) out[i >> 3] |= 128 >> (i & 7);
|
|
899
|
+
}
|
|
900
|
+
return out;
|
|
901
|
+
}
|
|
902
|
+
var MIN_LEN = { 4218: 248, 4219: 92, 4242: 144 };
|
|
903
|
+
function feedBdsCnavBlock(view, b, id, len, asm) {
|
|
904
|
+
if (len < (MIN_LEN[id] ?? Infinity)) return {};
|
|
905
|
+
const prnStr = svidToPrn(view.getUint8(b + 14));
|
|
906
|
+
if (!prnStr || prnStr[0] !== "C") return {};
|
|
907
|
+
const prn = Number(prnStr.slice(1));
|
|
908
|
+
const words = b + 20;
|
|
909
|
+
if (id === 4218) {
|
|
910
|
+
const towMs = view.getUint32(b + 8, true);
|
|
911
|
+
if (towMs === TOW_DNU2) return {};
|
|
912
|
+
const sf2 = navBits(view, words, 72, 600);
|
|
913
|
+
const sf3 = navBits(view, words, 1272, 264);
|
|
914
|
+
const sf2Ok = bdsCnav1Sf2CrcOk(sf2);
|
|
915
|
+
const bdt = (towMs / 1e3 - GPS_BDT_OFFSET + 604800) % 604800;
|
|
916
|
+
const tTm = (Math.floor(bdt) - B1C_FRAME_S + 604800) % 604800;
|
|
917
|
+
const eph = asm.b1c.push(
|
|
918
|
+
prn,
|
|
919
|
+
sf2Ok ? sf2 : null,
|
|
920
|
+
bdsCnav1Sf3CrcOk(sf3) ? sf3 : null,
|
|
921
|
+
tTm
|
|
922
|
+
);
|
|
923
|
+
if (!sf2Ok) return { badCrc: true };
|
|
924
|
+
return eph ? { eph } : {};
|
|
925
|
+
}
|
|
926
|
+
if (id === 4219) {
|
|
927
|
+
const msg = navBits(view, words, 0, 288);
|
|
928
|
+
if (!bdsCnav2CrcOk(msg)) return { badCrc: true };
|
|
929
|
+
const eph = asm.b2a.push(msg);
|
|
930
|
+
return eph ? { eph } : {};
|
|
931
|
+
}
|
|
932
|
+
if (id === 4242) {
|
|
933
|
+
const msg = navBits(view, words, 12, 486);
|
|
934
|
+
if (!bdsCnav3CrcOk(msg)) return { badCrc: true };
|
|
935
|
+
const eph = asm.b2b.push(prn, msg);
|
|
936
|
+
return eph ? { eph } : {};
|
|
937
|
+
}
|
|
938
|
+
return {};
|
|
939
|
+
}
|
|
940
|
+
function parseSbfBdsCnav(data) {
|
|
941
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
942
|
+
const asm = newBdsCnavAssemblers();
|
|
943
|
+
const ephemerides = [];
|
|
944
|
+
let badCrc = 0;
|
|
945
|
+
let messages = 0;
|
|
946
|
+
scanSbfFrames(data, view, (id, b, len) => {
|
|
947
|
+
if (id !== 4218 && id !== 4219 && id !== 4242) return;
|
|
948
|
+
messages++;
|
|
949
|
+
const r = feedBdsCnavBlock(view, b, id, len, asm);
|
|
950
|
+
if (r.eph) ephemerides.push(r.eph);
|
|
951
|
+
else if (r.badCrc) badCrc++;
|
|
952
|
+
});
|
|
953
|
+
return { ephemerides, badCrc, messages };
|
|
954
|
+
}
|
|
955
|
+
|
|
927
956
|
// src/navbits/sbas-l5.ts
|
|
928
957
|
var SBAS_L5_PREAMBLE_UW = 6056250;
|
|
929
958
|
function isSbasL1Preamble(msg) {
|
|
@@ -1066,6 +1095,7 @@ function decodeSbfNavigation(data, opts = {}) {
|
|
|
1066
1095
|
const ephemerides = [];
|
|
1067
1096
|
const seen = /* @__PURE__ */ new Set();
|
|
1068
1097
|
const cnav = [];
|
|
1098
|
+
const bdsCnav = [];
|
|
1069
1099
|
const ionoCorrections = {};
|
|
1070
1100
|
let leapSeconds = null;
|
|
1071
1101
|
const counts = {
|
|
@@ -1075,6 +1105,7 @@ function decodeSbfNavigation(data, opts = {}) {
|
|
|
1075
1105
|
galRaw: 0,
|
|
1076
1106
|
gloRaw: 0,
|
|
1077
1107
|
bdsRaw: 0,
|
|
1108
|
+
bdsCnavRaw: 0,
|
|
1078
1109
|
sbasRaw: 0,
|
|
1079
1110
|
sbasL5Raw: 0,
|
|
1080
1111
|
navicRaw: 0,
|
|
@@ -1086,6 +1117,7 @@ function decodeSbfNavigation(data, opts = {}) {
|
|
|
1086
1117
|
const galAsm = newGalAssemblers();
|
|
1087
1118
|
const gloAsm = new GloStringAssembler();
|
|
1088
1119
|
const bdsAsm = new BdsAssembler();
|
|
1120
|
+
const bdsCnavAsm = newBdsCnavAssemblers();
|
|
1089
1121
|
const lnavAsm = new GpsLnavAssembler();
|
|
1090
1122
|
const navicAsm = new NavicAssembler();
|
|
1091
1123
|
const addEph = (e) => {
|
|
@@ -1192,6 +1224,17 @@ function decodeSbfNavigation(data, opts = {}) {
|
|
|
1192
1224
|
else if (r.badCrc) counts.badFrames++;
|
|
1193
1225
|
return;
|
|
1194
1226
|
}
|
|
1227
|
+
case 4218:
|
|
1228
|
+
// BDSRawB1C
|
|
1229
|
+
case 4219:
|
|
1230
|
+
// BDSRawB2a
|
|
1231
|
+
case 4242: {
|
|
1232
|
+
counts.bdsCnavRaw++;
|
|
1233
|
+
const r = feedBdsCnavBlock(view, b, id, len, bdsCnavAsm);
|
|
1234
|
+
if (r.eph) bdsCnav.push(r.eph);
|
|
1235
|
+
else if (r.badCrc) counts.badFrames++;
|
|
1236
|
+
return;
|
|
1237
|
+
}
|
|
1195
1238
|
case 4020: {
|
|
1196
1239
|
if (len < 52) return;
|
|
1197
1240
|
counts.sbasRaw++;
|
|
@@ -1248,7 +1291,15 @@ function decodeSbfNavigation(data, opts = {}) {
|
|
|
1248
1291
|
prns: [...dfmcPrns].sort(),
|
|
1249
1292
|
messages: Object.values(dfmcByType).reduce((a, v) => a + v, 0)
|
|
1250
1293
|
};
|
|
1251
|
-
return {
|
|
1294
|
+
return {
|
|
1295
|
+
ephemerides,
|
|
1296
|
+
cnav,
|
|
1297
|
+
bdsCnav,
|
|
1298
|
+
ionoCorrections,
|
|
1299
|
+
leapSeconds,
|
|
1300
|
+
dfmc,
|
|
1301
|
+
counts
|
|
1302
|
+
};
|
|
1252
1303
|
}
|
|
1253
1304
|
|
|
1254
1305
|
// src/navbits/rs255.ts
|
|
@@ -1876,23 +1927,23 @@ var MEAS2_SIG = [
|
|
|
1876
1927
|
["J", "1E"],
|
|
1877
1928
|
["J", "5P"]
|
|
1878
1929
|
];
|
|
1879
|
-
var
|
|
1930
|
+
var two = (n) => String(n).padStart(2, "0");
|
|
1880
1931
|
function m3Prn(navsys, svid) {
|
|
1881
1932
|
switch (navsys) {
|
|
1882
1933
|
case 0:
|
|
1883
|
-
return svid < 32 ? `G${
|
|
1934
|
+
return svid < 32 ? `G${two(svid + 1)}` : null;
|
|
1884
1935
|
case 1:
|
|
1885
|
-
return svid < 27 ? `R${
|
|
1936
|
+
return svid < 27 ? `R${two(svid + 1)}` : null;
|
|
1886
1937
|
case 2:
|
|
1887
|
-
return svid < 36 ? `E${
|
|
1938
|
+
return svid < 36 ? `E${two(svid + 1)}` : null;
|
|
1888
1939
|
case 3:
|
|
1889
|
-
return svid < 50 ? `C${
|
|
1940
|
+
return svid < 50 ? `C${two(svid + 1)}` : null;
|
|
1890
1941
|
case 4:
|
|
1891
|
-
return svid <= 38 ? `S${
|
|
1942
|
+
return svid <= 38 ? `S${two(svid + 20)}` : null;
|
|
1892
1943
|
case 5:
|
|
1893
|
-
return svid < 10 ? `J${
|
|
1944
|
+
return svid < 10 ? `J${two(svid + 1)}` : null;
|
|
1894
1945
|
case 6:
|
|
1895
|
-
return svid < 14 ? `I${
|
|
1946
|
+
return svid < 14 ? `I${two(svid + 1)}` : null;
|
|
1896
1947
|
default:
|
|
1897
1948
|
return null;
|
|
1898
1949
|
}
|
|
@@ -2443,8 +2494,6 @@ function parseSbfMeas(data) {
|
|
|
2443
2494
|
}
|
|
2444
2495
|
|
|
2445
2496
|
export {
|
|
2446
|
-
crc16,
|
|
2447
|
-
scanSbfFrames,
|
|
2448
2497
|
parseSbfNav,
|
|
2449
2498
|
parseSbfAlmanac,
|
|
2450
2499
|
parseSbfIonoUtc,
|
|
@@ -2458,6 +2507,7 @@ export {
|
|
|
2458
2507
|
parseSbfGalNav,
|
|
2459
2508
|
parseSbfBdsNav,
|
|
2460
2509
|
parseSbfGloNav,
|
|
2510
|
+
parseSbfBdsCnav,
|
|
2461
2511
|
SBAS_L5_PREAMBLE_UW,
|
|
2462
2512
|
isSbasL1Preamble,
|
|
2463
2513
|
sbasL5MessageType,
|