gnss-js 1.21.0 → 1.22.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-DLXTTHRK.js → chunk-MCAVU3XL.js} +118 -9
- package/dist/{chunk-K3V3NHWL.js → chunk-PZNVFCKJ.js} +25 -766
- package/dist/chunk-VTX3VCL4.js +769 -0
- package/dist/index.cjs +1397 -1295
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -2
- package/dist/sbf.js +2 -1
- package/dist/ubx.cjs +809 -10
- package/dist/ubx.d.cts +111 -1
- package/dist/ubx.d.ts +111 -1
- package/dist/ubx.js +6 -1
- package/package.json +1 -1
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BdsAssembler,
|
|
3
|
+
GalInavAssembler,
|
|
4
|
+
GloStringAssembler,
|
|
5
|
+
bdsSubframeParityOk,
|
|
6
|
+
galInavPageCrcOk,
|
|
7
|
+
testGloString
|
|
8
|
+
} from "./chunk-VTX3VCL4.js";
|
|
1
9
|
import {
|
|
2
10
|
CnavAssembler,
|
|
3
11
|
cnavCrcOk,
|
|
@@ -180,8 +188,108 @@ function parseUbxCnav(data) {
|
|
|
180
188
|
return { ephemerides, badCrc, messages };
|
|
181
189
|
}
|
|
182
190
|
|
|
183
|
-
// src/ubx/
|
|
191
|
+
// src/ubx/rawnav.ts
|
|
184
192
|
var GPS_EPOCH_MS = Date.UTC(1980, 0, 6);
|
|
193
|
+
var SEC_PER_WEEK = 7 * 86400;
|
|
194
|
+
var two = (n) => String(n).padStart(2, "0");
|
|
195
|
+
function parseUbxRawNav(data, opts = {}) {
|
|
196
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
197
|
+
const ephemerides = [];
|
|
198
|
+
const counts = { gal: 0, bds: 0, glo: 0 };
|
|
199
|
+
let badParity = 0;
|
|
200
|
+
const inav = new GalInavAssembler();
|
|
201
|
+
const bds = new BdsAssembler();
|
|
202
|
+
const glo = new GloStringAssembler();
|
|
203
|
+
let refDate = null;
|
|
204
|
+
for (const f of ubxFrames(data)) {
|
|
205
|
+
if (f.msgClass !== 2) continue;
|
|
206
|
+
if (f.msgId === 21 && f.payload.length >= 16) {
|
|
207
|
+
const rcvTow = view.getFloat64(f.payloadStart, true);
|
|
208
|
+
let week = view.getUint16(f.payloadStart + 8, true);
|
|
209
|
+
if (week === 0 && opts.refWeek !== void 0) week = opts.refWeek;
|
|
210
|
+
if (week > 0) {
|
|
211
|
+
refDate = new Date(
|
|
212
|
+
GPS_EPOCH_MS + (week * SEC_PER_WEEK + rcvTow) * 1e3
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if (f.msgId !== 19) continue;
|
|
218
|
+
const p = f.payload;
|
|
219
|
+
if (p.length < 8) continue;
|
|
220
|
+
const gnssId = p[0];
|
|
221
|
+
const svId = p[1];
|
|
222
|
+
const sigId = p[2];
|
|
223
|
+
const base = f.payloadStart + 8;
|
|
224
|
+
if (gnssId === 2) {
|
|
225
|
+
if (sigId === 3 || sigId === 8) continue;
|
|
226
|
+
if (p.length < 8 + 32) continue;
|
|
227
|
+
counts.gal++;
|
|
228
|
+
if (svId < 1 || svId > 36) continue;
|
|
229
|
+
const buff = new Uint8Array(32);
|
|
230
|
+
for (let k = 0; k < 8; k++) {
|
|
231
|
+
const w = view.getUint32(base + 4 * k, true);
|
|
232
|
+
buff[4 * k] = w >>> 24;
|
|
233
|
+
buff[4 * k + 1] = w >>> 16 & 255;
|
|
234
|
+
buff[4 * k + 2] = w >>> 8 & 255;
|
|
235
|
+
buff[4 * k + 3] = w & 255;
|
|
236
|
+
}
|
|
237
|
+
const page = new Uint8Array(30);
|
|
238
|
+
for (let k = 0; k < 14; k++) page[k] = buff[k];
|
|
239
|
+
setBitU(page, 112, 2, getBitU(buff, 112, 2));
|
|
240
|
+
for (let k = 0; k < 15; k++) {
|
|
241
|
+
setBitU(page, 114 + 8 * k, 8, getBitU(buff, 128 + 8 * k, 8));
|
|
242
|
+
}
|
|
243
|
+
if (getBitU(page, 0, 1) !== 0 || getBitU(page, 114, 1) !== 1) continue;
|
|
244
|
+
if (getBitU(page, 1, 1) === 1 || getBitU(page, 115, 1) === 1) continue;
|
|
245
|
+
if (!galInavPageCrcOk(page)) {
|
|
246
|
+
badParity++;
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const eph = inav.push(svId, page);
|
|
250
|
+
if (eph) ephemerides.push(eph);
|
|
251
|
+
} else if (gnssId === 3) {
|
|
252
|
+
if (sigId === 6 || sigId === 8) continue;
|
|
253
|
+
if (p.length < 8 + 40) continue;
|
|
254
|
+
counts.bds++;
|
|
255
|
+
if (svId < 1 || svId > 63) continue;
|
|
256
|
+
const sf = new Uint8Array(38);
|
|
257
|
+
for (let k = 0; k < 10; k++) {
|
|
258
|
+
const w = view.getUint32(base + 4 * k, true);
|
|
259
|
+
setBitU(sf, 30 * k, 30, w & 1073741823);
|
|
260
|
+
}
|
|
261
|
+
if (!bdsSubframeParityOk(sf)) {
|
|
262
|
+
badParity++;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const eph = bds.push(`C${two(svId)}`, sf);
|
|
266
|
+
if (eph) ephemerides.push(eph);
|
|
267
|
+
} else if (gnssId === 6) {
|
|
268
|
+
if (p.length < 8 + 16) continue;
|
|
269
|
+
counts.glo++;
|
|
270
|
+
if (svId < 1 || svId > 32) continue;
|
|
271
|
+
const str = new Uint8Array(16);
|
|
272
|
+
for (let k = 0; k < 4; k++) {
|
|
273
|
+
const w = view.getUint32(base + 4 * k, true);
|
|
274
|
+
str[4 * k] = w >>> 24;
|
|
275
|
+
str[4 * k + 1] = w >>> 16 & 255;
|
|
276
|
+
str[4 * k + 2] = w >>> 8 & 255;
|
|
277
|
+
str[4 * k + 3] = w & 255;
|
|
278
|
+
}
|
|
279
|
+
if (!testGloString(str)) {
|
|
280
|
+
badParity++;
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
if (!refDate) continue;
|
|
284
|
+
const eph = glo.push(`R${two(svId)}`, str, refDate, p[3] - 7);
|
|
285
|
+
if (eph) ephemerides.push(eph);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return { ephemerides, counts, badParity };
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// src/ubx/index.ts
|
|
292
|
+
var GPS_EPOCH_MS2 = Date.UTC(1980, 0, 6);
|
|
185
293
|
var MS_PER_WEEK = 7 * 864e5;
|
|
186
294
|
var SIGNALS = {
|
|
187
295
|
0: { 0: ["G", "1C"], 3: ["G", "2X"], 4: ["G", "2X"] },
|
|
@@ -198,20 +306,20 @@ var SIGNALS = {
|
|
|
198
306
|
// GLONASS L1OF, L2OF
|
|
199
307
|
};
|
|
200
308
|
function prnFor(gnssId, svId) {
|
|
201
|
-
const
|
|
309
|
+
const two2 = (n) => String(n).padStart(2, "0");
|
|
202
310
|
switch (gnssId) {
|
|
203
311
|
case 0:
|
|
204
|
-
return svId >= 1 && svId <= 32 ? `G${
|
|
312
|
+
return svId >= 1 && svId <= 32 ? `G${two2(svId)}` : null;
|
|
205
313
|
case 1:
|
|
206
|
-
return svId >= 120 && svId <= 158 ? `S${
|
|
314
|
+
return svId >= 120 && svId <= 158 ? `S${two2(svId - 100)}` : null;
|
|
207
315
|
case 2:
|
|
208
|
-
return svId >= 1 && svId <= 36 ? `E${
|
|
316
|
+
return svId >= 1 && svId <= 36 ? `E${two2(svId)}` : null;
|
|
209
317
|
case 3:
|
|
210
|
-
return svId >= 1 && svId <= 63 ? `C${
|
|
318
|
+
return svId >= 1 && svId <= 63 ? `C${two2(svId)}` : null;
|
|
211
319
|
case 5:
|
|
212
|
-
return svId >= 1 && svId <= 10 ? `J${
|
|
320
|
+
return svId >= 1 && svId <= 10 ? `J${two2(svId)}` : null;
|
|
213
321
|
case 6:
|
|
214
|
-
return svId >= 1 && svId <= 32 ? `R${
|
|
322
|
+
return svId >= 1 && svId <= 32 ? `R${two2(svId)}` : null;
|
|
215
323
|
default:
|
|
216
324
|
return null;
|
|
217
325
|
}
|
|
@@ -264,7 +372,7 @@ function parseUbxRawx(data) {
|
|
|
264
372
|
if (!codes.includes(sig[1])) codes.push(sig[1]);
|
|
265
373
|
}
|
|
266
374
|
epochs.push({
|
|
267
|
-
timeMs:
|
|
375
|
+
timeMs: GPS_EPOCH_MS2 + week * MS_PER_WEEK + Math.round(rcvTow * 1e3),
|
|
268
376
|
leapS: leapValid ? leapS : null,
|
|
269
377
|
meas
|
|
270
378
|
});
|
|
@@ -278,5 +386,6 @@ export {
|
|
|
278
386
|
parseUbxNav,
|
|
279
387
|
parseUbxIonoUtc,
|
|
280
388
|
parseUbxCnav,
|
|
389
|
+
parseUbxRawNav,
|
|
281
390
|
parseUbxRawx
|
|
282
391
|
};
|