gnss-js 1.15.0 → 1.17.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/dist/{chunk-I4UV45NT.js → chunk-7QR2KPDU.js} +197 -148
- package/dist/chunk-IG5CDNDS.js +245 -0
- package/dist/chunk-REYOYF7O.js +147 -0
- package/dist/{chunk-BEQSEJMU.js → chunk-ZNCQNHNI.js} +36 -0
- package/dist/index.cjs +532 -181
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -5
- package/dist/novatel.cjs +187 -11
- package/dist/novatel.d.cts +36 -13
- package/dist/novatel.d.ts +36 -13
- package/dist/novatel.js +2 -1
- package/dist/sbf.cjs +41 -2
- package/dist/sbf.d.cts +58 -1
- package/dist/sbf.d.ts +58 -1
- package/dist/sbf.js +9 -3
- package/dist/ubx.cjs +297 -29
- package/dist/ubx.d.cts +121 -1
- package/dist/ubx.d.ts +121 -1
- package/dist/ubx.js +10 -3
- package/package.json +1 -1
- package/dist/chunk-5IXK25MX.js +0 -116
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// src/navbits/index.ts
|
|
2
|
+
var GPS_PI = 3.1415926535898;
|
|
3
|
+
var GPS_EPOCH_MS = Date.UTC(1980, 0, 6);
|
|
4
|
+
var SEC_PER_WEEK = 7 * 86400;
|
|
5
|
+
function getBitU(buff, pos, len) {
|
|
6
|
+
let bits = 0;
|
|
7
|
+
for (let i = pos; i < pos + len; i++) {
|
|
8
|
+
bits = bits * 2 + (buff[i >> 3] >> 7 - (i & 7) & 1);
|
|
9
|
+
}
|
|
10
|
+
return bits;
|
|
11
|
+
}
|
|
12
|
+
function getBitS(buff, pos, len) {
|
|
13
|
+
const bits = getBitU(buff, pos, len);
|
|
14
|
+
if (len <= 0 || bits < 2 ** (len - 1)) return bits;
|
|
15
|
+
return bits - 2 ** len;
|
|
16
|
+
}
|
|
17
|
+
function setBitU(buff, pos, len, data) {
|
|
18
|
+
let mask = 2 ** (len - 1);
|
|
19
|
+
for (let i = pos; i < pos + len; i++, mask /= 2) {
|
|
20
|
+
if (data >= mask) {
|
|
21
|
+
buff[i >> 3] |= 1 << 7 - (i & 7);
|
|
22
|
+
data -= mask;
|
|
23
|
+
} else {
|
|
24
|
+
buff[i >> 3] &= ~(1 << 7 - (i & 7));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function decodeGpsLnavFrame(subframes, opts = {}) {
|
|
29
|
+
if (subframes.length < 90) return null;
|
|
30
|
+
const b = subframes;
|
|
31
|
+
let i = 24;
|
|
32
|
+
const tow1 = getBitU(b, i, 17) * 6;
|
|
33
|
+
i += 17 + 2;
|
|
34
|
+
const id1 = getBitU(b, i, 3);
|
|
35
|
+
i += 3 + 2;
|
|
36
|
+
const week10 = getBitU(b, i, 10);
|
|
37
|
+
i += 10;
|
|
38
|
+
i += 2;
|
|
39
|
+
i += 4;
|
|
40
|
+
const svHealth = getBitU(b, i, 6);
|
|
41
|
+
i += 6;
|
|
42
|
+
const iodc0 = getBitU(b, i, 2);
|
|
43
|
+
i += 2;
|
|
44
|
+
i += 1 + 87;
|
|
45
|
+
const tgdRaw = getBitS(b, i, 8);
|
|
46
|
+
i += 8;
|
|
47
|
+
const iodc1 = getBitU(b, i, 8);
|
|
48
|
+
i += 8;
|
|
49
|
+
const tocSec = getBitU(b, i, 16) * 16;
|
|
50
|
+
i += 16;
|
|
51
|
+
const af2 = getBitS(b, i, 8) * 2 ** -55;
|
|
52
|
+
i += 8;
|
|
53
|
+
const af1 = getBitS(b, i, 16) * 2 ** -43;
|
|
54
|
+
i += 16;
|
|
55
|
+
const af0 = getBitS(b, i, 22) * 2 ** -31;
|
|
56
|
+
i = 240 + 24;
|
|
57
|
+
i += 17 + 2;
|
|
58
|
+
const id2 = getBitU(b, i, 3);
|
|
59
|
+
i += 3 + 2;
|
|
60
|
+
const iode = getBitU(b, i, 8);
|
|
61
|
+
i += 8;
|
|
62
|
+
const crs = getBitS(b, i, 16) * 2 ** -5;
|
|
63
|
+
i += 16;
|
|
64
|
+
const deltaN = getBitS(b, i, 16) * 2 ** -43 * GPS_PI;
|
|
65
|
+
i += 16;
|
|
66
|
+
const m0 = getBitS(b, i, 32) * 2 ** -31 * GPS_PI;
|
|
67
|
+
i += 32;
|
|
68
|
+
const cuc = getBitS(b, i, 16) * 2 ** -29;
|
|
69
|
+
i += 16;
|
|
70
|
+
const e = getBitU(b, i, 32) * 2 ** -33;
|
|
71
|
+
i += 32;
|
|
72
|
+
const cus = getBitS(b, i, 16) * 2 ** -29;
|
|
73
|
+
i += 16;
|
|
74
|
+
const sqrtA = getBitU(b, i, 32) * 2 ** -19;
|
|
75
|
+
i += 32;
|
|
76
|
+
const toes = getBitU(b, i, 16) * 16;
|
|
77
|
+
i = 480 + 24;
|
|
78
|
+
i += 17 + 2;
|
|
79
|
+
const id3 = getBitU(b, i, 3);
|
|
80
|
+
i += 3 + 2;
|
|
81
|
+
const cic = getBitS(b, i, 16) * 2 ** -29;
|
|
82
|
+
i += 16;
|
|
83
|
+
const omega0 = getBitS(b, i, 32) * 2 ** -31 * GPS_PI;
|
|
84
|
+
i += 32;
|
|
85
|
+
const cis = getBitS(b, i, 16) * 2 ** -29;
|
|
86
|
+
i += 16;
|
|
87
|
+
const i0 = getBitS(b, i, 32) * 2 ** -31 * GPS_PI;
|
|
88
|
+
i += 32;
|
|
89
|
+
const crc = getBitS(b, i, 16) * 2 ** -5;
|
|
90
|
+
i += 16;
|
|
91
|
+
const omega = getBitS(b, i, 32) * 2 ** -31 * GPS_PI;
|
|
92
|
+
i += 32;
|
|
93
|
+
const omegaDot = getBitS(b, i, 24) * 2 ** -43 * GPS_PI;
|
|
94
|
+
i += 24;
|
|
95
|
+
const iode3 = getBitU(b, i, 8);
|
|
96
|
+
i += 8;
|
|
97
|
+
const idot = getBitS(b, i, 14) * 2 ** -43 * GPS_PI;
|
|
98
|
+
const iodc = iodc0 * 256 + iodc1;
|
|
99
|
+
if (id1 !== 1 || id2 !== 2 || id3 !== 3) return null;
|
|
100
|
+
if (iode3 !== iode || iode !== (iodc & 255)) return null;
|
|
101
|
+
const ref = opts.refWeek ?? Math.floor((Date.now() - GPS_EPOCH_MS) / 1e3 / SEC_PER_WEEK);
|
|
102
|
+
let week = week10 + 1024 * Math.round((ref - week10) / 1024);
|
|
103
|
+
if (toes < tow1 - 302400) week++;
|
|
104
|
+
else if (toes > tow1 + 302400) week--;
|
|
105
|
+
const prn = opts.prn ?? "G00";
|
|
106
|
+
const tocDate = new Date(
|
|
107
|
+
GPS_EPOCH_MS + (week * SEC_PER_WEEK + tocSec) * 1e3
|
|
108
|
+
);
|
|
109
|
+
return {
|
|
110
|
+
system: prn[0] === "J" ? "J" : "G",
|
|
111
|
+
prn,
|
|
112
|
+
tocDate,
|
|
113
|
+
// Same seconds-of-week convention as parseNavFile (rinex/nav.ts).
|
|
114
|
+
toc: tocDate.getTime() / 1e3 % SEC_PER_WEEK,
|
|
115
|
+
af0,
|
|
116
|
+
af1,
|
|
117
|
+
af2,
|
|
118
|
+
iode,
|
|
119
|
+
crs,
|
|
120
|
+
deltaN,
|
|
121
|
+
m0,
|
|
122
|
+
cuc,
|
|
123
|
+
e,
|
|
124
|
+
cus,
|
|
125
|
+
sqrtA,
|
|
126
|
+
toe: toes,
|
|
127
|
+
cic,
|
|
128
|
+
omega0,
|
|
129
|
+
cis,
|
|
130
|
+
i0,
|
|
131
|
+
crc,
|
|
132
|
+
omega,
|
|
133
|
+
omegaDot,
|
|
134
|
+
idot,
|
|
135
|
+
week,
|
|
136
|
+
svHealth,
|
|
137
|
+
tgd: tgdRaw === -128 ? 0 : tgdRaw * 2 ** -31
|
|
138
|
+
// IS-GPS-200: -128 reserved
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export {
|
|
143
|
+
getBitU,
|
|
144
|
+
getBitS,
|
|
145
|
+
setBitU,
|
|
146
|
+
decodeGpsLnavFrame
|
|
147
|
+
};
|
|
@@ -371,6 +371,39 @@ function parseSbfAlmanac(data) {
|
|
|
371
371
|
return { almanacs, badCrc };
|
|
372
372
|
}
|
|
373
373
|
|
|
374
|
+
// src/sbf/iono.ts
|
|
375
|
+
var F4_DNU2 = -2e10;
|
|
376
|
+
function parseSbfIonoUtc(data) {
|
|
377
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
378
|
+
const ionoCorrections = {};
|
|
379
|
+
let leapSeconds = null;
|
|
380
|
+
const f4s = (b, n) => {
|
|
381
|
+
const out = [];
|
|
382
|
+
for (let k = 0; k < n; k++) {
|
|
383
|
+
const v = view.getFloat32(b + 4 * k, true);
|
|
384
|
+
if (v === F4_DNU2) return null;
|
|
385
|
+
out.push(v);
|
|
386
|
+
}
|
|
387
|
+
return out;
|
|
388
|
+
};
|
|
389
|
+
scanSbfFrames(data, view, (id, b, len) => {
|
|
390
|
+
if ((id === 5893 || id === 4120) && len >= 48) {
|
|
391
|
+
const alpha = f4s(b + 16, 4);
|
|
392
|
+
const beta = f4s(b + 32, 4);
|
|
393
|
+
if (!alpha || !beta) return;
|
|
394
|
+
const sys = id === 5893 ? "GPS" : "BDS";
|
|
395
|
+
ionoCorrections[`${sys}A`] = alpha;
|
|
396
|
+
ionoCorrections[`${sys}B`] = beta;
|
|
397
|
+
} else if (id === 4030 && len >= 28) {
|
|
398
|
+
const ai = f4s(b + 16, 3);
|
|
399
|
+
if (ai) ionoCorrections["GAL"] = ai;
|
|
400
|
+
} else if (id === 5894 && len >= 37) {
|
|
401
|
+
leapSeconds = view.getInt8(b + 33);
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
return { ionoCorrections, leapSeconds };
|
|
405
|
+
}
|
|
406
|
+
|
|
374
407
|
// src/sbf/index.ts
|
|
375
408
|
var CLIGHT = 299792458;
|
|
376
409
|
var GPS_EPOCH_MS2 = Date.UTC(1980, 0, 6);
|
|
@@ -1040,7 +1073,10 @@ function parseSbfMeas(data) {
|
|
|
1040
1073
|
}
|
|
1041
1074
|
|
|
1042
1075
|
export {
|
|
1076
|
+
crc16,
|
|
1077
|
+
scanSbfFrames,
|
|
1043
1078
|
parseSbfNav,
|
|
1044
1079
|
parseSbfAlmanac,
|
|
1080
|
+
parseSbfIonoUtc,
|
|
1045
1081
|
parseSbfMeas
|
|
1046
1082
|
};
|