gnss-js 1.20.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.
@@ -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/index.ts
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 two = (n) => String(n).padStart(2, "0");
309
+ const two2 = (n) => String(n).padStart(2, "0");
202
310
  switch (gnssId) {
203
311
  case 0:
204
- return svId >= 1 && svId <= 32 ? `G${two(svId)}` : null;
312
+ return svId >= 1 && svId <= 32 ? `G${two2(svId)}` : null;
205
313
  case 1:
206
- return svId >= 120 && svId <= 158 ? `S${two(svId - 100)}` : null;
314
+ return svId >= 120 && svId <= 158 ? `S${two2(svId - 100)}` : null;
207
315
  case 2:
208
- return svId >= 1 && svId <= 36 ? `E${two(svId)}` : null;
316
+ return svId >= 1 && svId <= 36 ? `E${two2(svId)}` : null;
209
317
  case 3:
210
- return svId >= 1 && svId <= 63 ? `C${two(svId)}` : null;
318
+ return svId >= 1 && svId <= 63 ? `C${two2(svId)}` : null;
211
319
  case 5:
212
- return svId >= 1 && svId <= 10 ? `J${two(svId)}` : null;
320
+ return svId >= 1 && svId <= 10 ? `J${two2(svId)}` : null;
213
321
  case 6:
214
- return svId >= 1 && svId <= 32 ? `R${two(svId)}` : null;
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: GPS_EPOCH_MS + week * MS_PER_WEEK + Math.round(rcvTow * 1e3),
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
  };