gnss-js 2.4.0 → 2.5.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/index.cjs CHANGED
@@ -169,9 +169,11 @@ __export(src_exports, {
169
169
  estimateNetworkFcbs: () => estimateNetworkFcbs,
170
170
  estimateWidelaneFcb: () => estimateWidelaneFcb,
171
171
  euclidean3D: () => euclidean3D,
172
+ extractSbfNavicSubframe: () => extractSbfNavicSubframe,
172
173
  extractWidelaneArcs: () => extractWidelaneArcs,
173
174
  feedGeoBlock: () => feedGeoBlock,
174
175
  feedGeoL5Block: () => feedGeoL5Block,
176
+ feedNavicBlock: () => feedNavicBlock,
175
177
  fetchSourcetable: () => fetchSourcetable,
176
178
  findSatBias: () => findSatBias,
177
179
  fixPppPosition: () => fixPppPosition,
@@ -291,6 +293,7 @@ __export(src_exports, {
291
293
  parseSbfIonoUtc: () => parseSbfIonoUtc,
292
294
  parseSbfMeas: () => parseSbfMeas,
293
295
  parseSbfNav: () => parseSbfNav,
296
+ parseSbfNavic: () => parseSbfNavic,
294
297
  parseSbfPvt: () => parseSbfPvt,
295
298
  parseSbfReceiverSetup: () => parseSbfReceiverSetup,
296
299
  parseSinexBiasDcb: () => parseSinexBiasDcb,
@@ -5270,6 +5273,70 @@ function decodeQzssEphemeris(payload) {
5270
5273
  fitInterval
5271
5274
  };
5272
5275
  }
5276
+ function decodeNavicEphemeris(payload) {
5277
+ if (payload.length < 60) return null;
5278
+ const r = new BitReader(payload);
5279
+ r.skip(12);
5280
+ const svId = r.readU(6);
5281
+ const week = r.readU(10);
5282
+ const af0 = r.readS(22) * 2 ** -31;
5283
+ const af1 = r.readS(16) * 2 ** -43;
5284
+ const af2 = r.readS(8) * 2 ** -55;
5285
+ const ura = r.readU(4);
5286
+ const toc = r.readU(16) * 16;
5287
+ const tgd = r.readS(8) * 2 ** -31;
5288
+ const deltaN = r.readS(22) * 2 ** -41 * PI;
5289
+ const iode = r.readU(8);
5290
+ r.skip(10);
5291
+ const l5Health = r.readU(1);
5292
+ const sHealth = r.readU(1);
5293
+ const cuc = r.readS(15) * 2 ** -28;
5294
+ const cus = r.readS(15) * 2 ** -28;
5295
+ const cic = r.readS(15) * 2 ** -28;
5296
+ const cis = r.readS(15) * 2 ** -28;
5297
+ const crc = r.readS(15) * 2 ** -4;
5298
+ const crs = r.readS(15) * 2 ** -4;
5299
+ const idot = r.readS(14) * 2 ** -43 * PI;
5300
+ const m0 = r.readS(32) * 2 ** -31 * PI;
5301
+ const toe = r.readU(16) * 16;
5302
+ const e = r.readU(32) * 2 ** -33;
5303
+ const sqrtA = r.readU(32) * 2 ** -19;
5304
+ const omega0 = r.readS(32) * 2 ** -31 * PI;
5305
+ const argPerigee = r.readS(32) * 2 ** -31 * PI;
5306
+ const omegaDot = r.readS(22) * 2 ** -41 * PI;
5307
+ const i0 = r.readS(32) * 2 ** -31 * PI;
5308
+ return {
5309
+ prn: `I${String(svId).padStart(2, "0")}`,
5310
+ constellation: "NavIC",
5311
+ health: l5Health << 1 | sHealth,
5312
+ lastReceived: Date.now(),
5313
+ messageType: 1041,
5314
+ week,
5315
+ ura,
5316
+ toc,
5317
+ toe,
5318
+ sqrtA,
5319
+ eccentricity: e,
5320
+ inclination: i0,
5321
+ omega0,
5322
+ omegaDot,
5323
+ argPerigee,
5324
+ meanAnomaly: m0,
5325
+ deltaN,
5326
+ idot,
5327
+ crs,
5328
+ crc,
5329
+ cuc,
5330
+ cus,
5331
+ cic,
5332
+ cis,
5333
+ af0,
5334
+ af1,
5335
+ af2,
5336
+ iode,
5337
+ tgd
5338
+ };
5339
+ }
5273
5340
  function decodeEphemeris(frame) {
5274
5341
  try {
5275
5342
  switch (frame.messageType) {
@@ -5277,6 +5344,8 @@ function decodeEphemeris(frame) {
5277
5344
  return decodeGpsEphemeris(frame.payload);
5278
5345
  case 1020:
5279
5346
  return decodeGlonassEphemeris(frame.payload);
5347
+ case 1041:
5348
+ return decodeNavicEphemeris(frame.payload);
5280
5349
  case 1042:
5281
5350
  return decodeBdsEphemeris(frame.payload);
5282
5351
  case 1043:
@@ -8379,6 +8448,173 @@ function parseSbfGpsNav(data) {
8379
8448
  return { ephemerides, badParity, messages };
8380
8449
  }
8381
8450
 
8451
+ // src/navbits/navic.ts
8452
+ var GPS_EPOCH_MS13 = Date.UTC(1980, 0, 6);
8453
+ var SEC_PER_WEEK9 = 604800;
8454
+ var DATA = 30;
8455
+ function navicSubframeCrcOk(sf) {
8456
+ return crc24q(sf, 262) === getBitU(sf, 262, 24);
8457
+ }
8458
+ function navicSubframeId(sf) {
8459
+ return getBitU(sf, 27, 2) + 1;
8460
+ }
8461
+ function decodeNavicSubframes(sf1, sf2, opts = {}) {
8462
+ let i = DATA;
8463
+ getBitU(sf1, i, 10);
8464
+ i += 10;
8465
+ const af0 = getBitS(sf1, i, 22) * 2 ** -31;
8466
+ i += 22;
8467
+ const af1 = getBitS(sf1, i, 16) * 2 ** -43;
8468
+ i += 16;
8469
+ const af2 = getBitS(sf1, i, 8) * 2 ** -55;
8470
+ i += 8;
8471
+ i += 4;
8472
+ const tocSec = getBitU(sf1, i, 16) * 16;
8473
+ i += 16;
8474
+ const tgd = getBitS(sf1, i, 8) * 2 ** -31;
8475
+ i += 8;
8476
+ const deltaN = getBitS(sf1, i, 22) * 2 ** -41 * GPS_PI;
8477
+ i += 22;
8478
+ const iode = getBitU(sf1, i, 8);
8479
+ i += 8;
8480
+ i += 10;
8481
+ const l5Health = getBitU(sf1, i, 1);
8482
+ i += 1;
8483
+ const sHealth = getBitU(sf1, i, 1);
8484
+ i += 1;
8485
+ const cuc = getBitS(sf1, i, 15) * 2 ** -28;
8486
+ i += 15;
8487
+ const cus = getBitS(sf1, i, 15) * 2 ** -28;
8488
+ i += 15;
8489
+ const cic = getBitS(sf1, i, 15) * 2 ** -28;
8490
+ i += 15;
8491
+ const cis = getBitS(sf1, i, 15) * 2 ** -28;
8492
+ i += 15;
8493
+ const crc = getBitS(sf1, i, 15) * 2 ** -4;
8494
+ i += 15;
8495
+ const crs = getBitS(sf1, i, 15) * 2 ** -4;
8496
+ i += 15;
8497
+ const idot = getBitS(sf1, i, 14) * 2 ** -43 * GPS_PI;
8498
+ let j = DATA;
8499
+ const m0 = getBitS(sf2, j, 32) * 2 ** -31 * GPS_PI;
8500
+ j += 32;
8501
+ const toeSec = getBitU(sf2, j, 16) * 16;
8502
+ j += 16;
8503
+ const e = getBitU(sf2, j, 32) * 2 ** -33;
8504
+ j += 32;
8505
+ const sqrtA = getBitU(sf2, j, 32) * 2 ** -19;
8506
+ j += 32;
8507
+ const omega0 = getBitS(sf2, j, 32) * 2 ** -31 * GPS_PI;
8508
+ j += 32;
8509
+ const omega = getBitS(sf2, j, 32) * 2 ** -31 * GPS_PI;
8510
+ j += 32;
8511
+ const omegaDot = getBitS(sf2, j, 22) * 2 ** -41 * GPS_PI;
8512
+ j += 22;
8513
+ const i0 = getBitS(sf2, j, 32) * 2 ** -31 * GPS_PI;
8514
+ if (sqrtA <= 0 || e >= 1) return null;
8515
+ const week = opts.refWeek ?? Math.floor((Date.now() - GPS_EPOCH_MS13) / 1e3 / SEC_PER_WEEK9);
8516
+ const prn = opts.prn ?? "I00";
8517
+ const tocDate = new Date(
8518
+ GPS_EPOCH_MS13 + (week * SEC_PER_WEEK9 + tocSec) * 1e3
8519
+ );
8520
+ return {
8521
+ system: "I",
8522
+ prn,
8523
+ tocDate,
8524
+ toc: tocDate.getTime() / 1e3 % SEC_PER_WEEK9,
8525
+ af0,
8526
+ af1,
8527
+ af2,
8528
+ iode,
8529
+ crs,
8530
+ deltaN,
8531
+ m0,
8532
+ cuc,
8533
+ e,
8534
+ cus,
8535
+ sqrtA,
8536
+ toe: toeSec,
8537
+ cic,
8538
+ omega0,
8539
+ cis,
8540
+ i0,
8541
+ crc,
8542
+ omega,
8543
+ omegaDot,
8544
+ idot,
8545
+ week,
8546
+ svHealth: l5Health << 1 | sHealth,
8547
+ tgd
8548
+ };
8549
+ }
8550
+ var NavicAssembler = class {
8551
+ sf1 = /* @__PURE__ */ new Map();
8552
+ last = /* @__PURE__ */ new Map();
8553
+ /**
8554
+ * Push one CRC-valid subframe. Subframe 1 opens a master frame (subframe 2
8555
+ * immediately follows it in the NavIC frame order), so an ephemeris is only
8556
+ * emitted when a subframe 2 pairs with the subframe 1 that opened the *same*
8557
+ * frame — never a stale subframe 1 left over across CRC drops.
8558
+ */
8559
+ push(prn, subframe, refWeek) {
8560
+ if (getBitU(subframe, 25, 1)) return null;
8561
+ const id = navicSubframeId(subframe);
8562
+ if (id === 1) {
8563
+ this.sf1.set(prn, subframe);
8564
+ return null;
8565
+ }
8566
+ if (id !== 2) return null;
8567
+ const a = this.sf1.get(prn);
8568
+ if (!a) return null;
8569
+ this.sf1.delete(prn);
8570
+ const eph = decodeNavicSubframes(a, subframe, { prn, refWeek });
8571
+ if (!eph) return null;
8572
+ const key = `${eph.toc}|${eph.iode}`;
8573
+ if (this.last.get(prn) === key) return null;
8574
+ this.last.set(prn, key);
8575
+ return eph;
8576
+ }
8577
+ };
8578
+
8579
+ // src/sbf/rawnav-navic.ts
8580
+ var WNC_DNU2 = 65535;
8581
+ function extractSbfNavicSubframe(view, b) {
8582
+ const sf = new Uint8Array(40);
8583
+ for (let k = 0; k < 10; k++) {
8584
+ const w = view.getUint32(b + 20 + 4 * k, true);
8585
+ sf[4 * k] = w >>> 24;
8586
+ sf[4 * k + 1] = w >>> 16 & 255;
8587
+ sf[4 * k + 2] = w >>> 8 & 255;
8588
+ sf[4 * k + 3] = w & 255;
8589
+ }
8590
+ return sf;
8591
+ }
8592
+ function feedNavicBlock(view, b, assembler) {
8593
+ const prn = svidToPrn(view.getUint8(b + 14));
8594
+ if (!prn || prn[0] !== "I") return {};
8595
+ const wnc = view.getUint16(b + 12, true);
8596
+ if (wnc === WNC_DNU2) return {};
8597
+ const sf = extractSbfNavicSubframe(view, b);
8598
+ if (!navicSubframeCrcOk(sf)) return { badCrc: true };
8599
+ const eph = assembler.push(prn, sf, wnc);
8600
+ return eph ? { eph } : {};
8601
+ }
8602
+ function parseSbfNavic(data) {
8603
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
8604
+ const ephemerides = [];
8605
+ const assembler = new NavicAssembler();
8606
+ let badCrc = 0;
8607
+ let messages = 0;
8608
+ scanSbfFrames(data, view, (id, b, len) => {
8609
+ if (id !== 4093 || len < 60) return;
8610
+ messages++;
8611
+ const r = feedNavicBlock(view, b, assembler);
8612
+ if (r.eph) ephemerides.push(r.eph);
8613
+ else if (r.badCrc) badCrc++;
8614
+ });
8615
+ return { ephemerides, badCrc, messages };
8616
+ }
8617
+
8382
8618
  // src/sbf/rawnav.ts
8383
8619
  var CNAV_SIGNAL_OF_BLOCK = {
8384
8620
  4018: "L2C",
@@ -8477,10 +8713,10 @@ function isFnavDummy(page) {
8477
8713
  }
8478
8714
 
8479
8715
  // src/sbf/rawnav-bds.ts
8480
- var GPS_EPOCH_MS13 = Date.UTC(1980, 0, 6);
8716
+ var GPS_EPOCH_MS14 = Date.UTC(1980, 0, 6);
8481
8717
  var MS_PER_WEEK6 = 7 * 86400 * 1e3;
8482
8718
  var TOW_DNU = 4294967295;
8483
- var WNC_DNU2 = 65535;
8719
+ var WNC_DNU3 = 65535;
8484
8720
  function feedBdsBlock(view, b, assembler) {
8485
8721
  const prn = svidToPrn(view.getUint8(b + 14));
8486
8722
  if (!prn || prn[0] !== "C") return {};
@@ -8520,7 +8756,7 @@ function feedGloBlock(view, b, assembler) {
8520
8756
  if (!prn || prn[0] !== "R") return {};
8521
8757
  const towMs = view.getUint32(b + 8, true);
8522
8758
  const wnc = view.getUint16(b + 12, true);
8523
- if (towMs === TOW_DNU || wnc === WNC_DNU2) return {};
8759
+ if (towMs === TOW_DNU || wnc === WNC_DNU3) return {};
8524
8760
  const str2 = new Uint8Array(11);
8525
8761
  for (let k = 0; k < 3; k++) {
8526
8762
  const w = view.getUint32(b + 20 + 4 * k, true);
@@ -8538,7 +8774,7 @@ function feedGloBlock(view, b, assembler) {
8538
8774
  const eph = assembler.push(
8539
8775
  prn,
8540
8776
  str2,
8541
- new Date(GPS_EPOCH_MS13 + wnc * MS_PER_WEEK6 + towMs),
8777
+ new Date(GPS_EPOCH_MS14 + wnc * MS_PER_WEEK6 + towMs),
8542
8778
  view.getUint8(b + 18) - 8
8543
8779
  // FreqNr, offset by 8
8544
8780
  );
@@ -8713,6 +8949,7 @@ function decodeSbfNavigation(data, opts = {}) {
8713
8949
  bdsRaw: 0,
8714
8950
  sbasRaw: 0,
8715
8951
  sbasL5Raw: 0,
8952
+ navicRaw: 0,
8716
8953
  badFrames: 0
8717
8954
  };
8718
8955
  const dfmcByType = {};
@@ -8722,6 +8959,7 @@ function decodeSbfNavigation(data, opts = {}) {
8722
8959
  const gloAsm = new GloStringAssembler();
8723
8960
  const bdsAsm = new BdsAssembler();
8724
8961
  const lnavAsm = new GpsLnavAssembler();
8962
+ const navicAsm = new NavicAssembler();
8725
8963
  const addEph = (e) => {
8726
8964
  if (!e) return;
8727
8965
  const key = ephKey(e);
@@ -8782,6 +9020,14 @@ function decodeSbfNavigation(data, opts = {}) {
8782
9020
  else if (r.badParity) counts.badFrames++;
8783
9021
  return;
8784
9022
  }
9023
+ case 4093: {
9024
+ if (len < 60) return;
9025
+ counts.navicRaw++;
9026
+ const r = feedNavicBlock(view, b, navicAsm);
9027
+ if (r.eph) addEph(r.eph);
9028
+ else if (r.badCrc) counts.badFrames++;
9029
+ return;
9030
+ }
8785
9031
  case 4018:
8786
9032
  // GPSRawL2C
8787
9033
  case 4019: {
@@ -9402,7 +9648,7 @@ function parseSbfHas(data) {
9402
9648
 
9403
9649
  // src/sbf/index.ts
9404
9650
  var CLIGHT = 299792458;
9405
- var GPS_EPOCH_MS14 = Date.UTC(1980, 0, 6);
9651
+ var GPS_EPOCH_MS15 = Date.UTC(1980, 0, 6);
9406
9652
  var MS_PER_WEEK7 = 7 * 864e5;
9407
9653
  var M3_SYS = ["G", "R", "E", "C", "S", "J", "I"];
9408
9654
  var M3_PR_BASE = [19e6, 19e6, 22e6, 2e7, 34e6, 34e6, 34e6];
@@ -10056,7 +10302,7 @@ function parseSbfMeas(data) {
10056
10302
  const tow = view.getUint32(i + 8, true);
10057
10303
  const wnc = view.getUint16(i + 12, true);
10058
10304
  if (tow !== 4294967295 && wnc !== 65535) {
10059
- ensureEpoch(GPS_EPOCH_MS14 + wnc * MS_PER_WEEK7 + tow);
10305
+ ensureEpoch(GPS_EPOCH_MS15 + wnc * MS_PER_WEEK7 + tow);
10060
10306
  if (id === 4109) decodeMeas3Ranges(i, tow);
10061
10307
  else if (id === 4110) decodeMeas3CN0(i, len);
10062
10308
  else if (id === 4111) decodeMeas3Doppler(i, len);
@@ -10123,15 +10369,15 @@ var ID_GPSEPHEM = 7;
10123
10369
  var ID_BDSEPHEMERIS = 1696;
10124
10370
  var ID_RAWWAASFRAME = 287;
10125
10371
  var ID_RAWSBASFRAME = 973;
10126
- var GPS_EPOCH_MS15 = Date.UTC(1980, 0, 6);
10372
+ var GPS_EPOCH_MS16 = Date.UTC(1980, 0, 6);
10127
10373
  var BDT_EPOCH_MS3 = Date.UTC(2006, 0, 1);
10128
- var SEC_PER_WEEK9 = 7 * 86400;
10374
+ var SEC_PER_WEEK10 = 7 * 86400;
10129
10375
  var SEC_PER_DAY2 = 86400;
10130
- var MS_PER_WEEK8 = SEC_PER_WEEK9 * 1e3;
10131
- var gpsMs2 = (week, sec) => GPS_EPOCH_MS15 + week * MS_PER_WEEK8 + sec * 1e3;
10132
- var sowOf3 = (dateMs) => dateMs / 1e3 % SEC_PER_WEEK9;
10376
+ var MS_PER_WEEK8 = SEC_PER_WEEK10 * 1e3;
10377
+ var gpsMs2 = (week, sec) => GPS_EPOCH_MS16 + week * MS_PER_WEEK8 + sec * 1e3;
10378
+ var sowOf3 = (dateMs) => dateMs / 1e3 % SEC_PER_WEEK10;
10133
10379
  function nearWeekMs(refMs, sow) {
10134
- const refWeek = Math.floor((refMs - GPS_EPOCH_MS15) / MS_PER_WEEK8);
10380
+ const refWeek = Math.floor((refMs - GPS_EPOCH_MS16) / MS_PER_WEEK8);
10135
10381
  let ms = gpsMs2(refWeek, sow);
10136
10382
  if (ms < refMs - MS_PER_WEEK8 / 2) ms += MS_PER_WEEK8;
10137
10383
  else if (ms > refMs + MS_PER_WEEK8 / 2) ms -= MS_PER_WEEK8;
@@ -10158,9 +10404,9 @@ function decodeGloEphemeris(view, p) {
10158
10404
  tof += Math.floor(tow / SEC_PER_DAY2) * SEC_PER_DAY2;
10159
10405
  if (tof < tow - 43200) tof += SEC_PER_DAY2;
10160
10406
  else if (tof > tow + 43200) tof -= SEC_PER_DAY2;
10161
- const toeGpsMs = GPS_EPOCH_MS15 + (week * SEC_PER_WEEK9 + tow) * 1e3;
10162
- const tofGpsMs = GPS_EPOCH_MS15 + (week * SEC_PER_WEEK9 + tof) * 1e3;
10163
- const tofUtcSec = (getUtcDate(new Date(tofGpsMs)).getTime() - GPS_EPOCH_MS15) / 1e3;
10407
+ const toeGpsMs = GPS_EPOCH_MS16 + (week * SEC_PER_WEEK10 + tow) * 1e3;
10408
+ const tofGpsMs = GPS_EPOCH_MS16 + (week * SEC_PER_WEEK10 + tof) * 1e3;
10409
+ const tofUtcSec = (getUtcDate(new Date(tofGpsMs)).getTime() - GPS_EPOCH_MS16) / 1e3;
10164
10410
  return {
10165
10411
  system: "R",
10166
10412
  prn: `R${String(slot).padStart(2, "0")}`,
@@ -10168,7 +10414,7 @@ function decodeGloEphemeris(view, p) {
10168
10414
  tauN: -view.getFloat64(p + 100, true),
10169
10415
  // RINEX stores −τ_n
10170
10416
  gammaN: view.getFloat64(p + 116, true),
10171
- messageFrameTime: (tofUtcSec % SEC_PER_WEEK9 + SEC_PER_WEEK9) % SEC_PER_WEEK9,
10417
+ messageFrameTime: (tofUtcSec % SEC_PER_WEEK10 + SEC_PER_WEEK10) % SEC_PER_WEEK10,
10172
10418
  x: view.getFloat64(p + 28, true) / 1e3,
10173
10419
  y: view.getFloat64(p + 36, true) / 1e3,
10174
10420
  z: view.getFloat64(p + 44, true) / 1e3,
@@ -10225,7 +10471,7 @@ function decodeGalEphemeris(view, p, headerMs) {
10225
10471
  omega: view.getFloat64(p + 60, true),
10226
10472
  omegaDot: view.getFloat64(p + 140, true),
10227
10473
  idot: view.getFloat64(p + 124, true),
10228
- week: Math.floor((toeMs - GPS_EPOCH_MS15) / MS_PER_WEEK8),
10474
+ week: Math.floor((toeMs - GPS_EPOCH_MS16) / MS_PER_WEEK8),
10229
10475
  // RINEX Galileo SVH bit layout (E1B DVS/HS in bits 0-2, E5a in
10230
10476
  // 3-5, E5b in 6-8) — same packing as RTKLIB.
10231
10477
  svHealth: svhE5b << 7 | dvsE5b << 6 | svhE5a << 4 | dvsE5a << 3 | svhE1b << 1 | dvsE1b,
@@ -10412,7 +10658,7 @@ function parseNovatelNav(data, opts = {}) {
10412
10658
  }
10413
10659
 
10414
10660
  // src/novatel/pvt.ts
10415
- var GPS_EPOCH_MS16 = Date.UTC(1980, 0, 6);
10661
+ var GPS_EPOCH_MS17 = Date.UTC(1980, 0, 6);
10416
10662
  var BESTPOS = 42;
10417
10663
  function posTypeToMode(t) {
10418
10664
  if (t === 0) return "no-pvt";
@@ -10444,7 +10690,7 @@ function parseNovatelPvt(data) {
10444
10690
  const nrSV = view.getUint8(p + 65);
10445
10691
  const hasFix = posType !== 0 && Number.isFinite(lat) && Number.isFinite(lon);
10446
10692
  records.push({
10447
- timeMs: GPS_EPOCH_MS16 + f.week * 6048e5 + f.towMs,
10693
+ timeMs: GPS_EPOCH_MS17 + f.week * 6048e5 + f.towMs,
10448
10694
  week: f.week,
10449
10695
  tow: f.towMs / 1e3,
10450
10696
  mode: posTypeToMode(posType),
@@ -10461,7 +10707,7 @@ function parseNovatelPvt(data) {
10461
10707
  }
10462
10708
 
10463
10709
  // src/novatel/index.ts
10464
- var GPS_EPOCH_MS17 = Date.UTC(1980, 0, 6);
10710
+ var GPS_EPOCH_MS18 = Date.UTC(1980, 0, 6);
10465
10711
  var MS_PER_WEEK9 = 7 * 864e5;
10466
10712
  var HDR = 28;
10467
10713
  var ID_RANGE = 43;
@@ -10631,7 +10877,7 @@ function parseNovatelRange(data) {
10631
10877
  if (!codes.includes(code)) codes.push(code);
10632
10878
  }
10633
10879
  epochs.push({
10634
- timeMs: GPS_EPOCH_MS17 + week * MS_PER_WEEK9 + towMs,
10880
+ timeMs: GPS_EPOCH_MS18 + week * MS_PER_WEEK9 + towMs,
10635
10881
  meas
10636
10882
  });
10637
10883
  }
@@ -10683,7 +10929,7 @@ function parseNovatelRange(data) {
10683
10929
  if (!codes.includes(code)) codes.push(code);
10684
10930
  }
10685
10931
  epochs.push({
10686
- timeMs: GPS_EPOCH_MS17 + week * MS_PER_WEEK9 + towMs,
10932
+ timeMs: GPS_EPOCH_MS18 + week * MS_PER_WEEK9 + towMs,
10687
10933
  meas
10688
10934
  });
10689
10935
  }
@@ -10734,15 +10980,15 @@ function* trimbleFrames(data, stats) {
10734
10980
  }
10735
10981
 
10736
10982
  // src/trimble/nav.ts
10737
- var GPS_EPOCH_MS18 = Date.UTC(1980, 0, 6);
10983
+ var GPS_EPOCH_MS19 = Date.UTC(1980, 0, 6);
10738
10984
  var BDT_EPOCH_MS4 = Date.UTC(2006, 0, 1);
10739
- var SEC_PER_WEEK10 = 7 * 86400;
10740
- var MS_PER_WEEK10 = SEC_PER_WEEK10 * 1e3;
10985
+ var SEC_PER_WEEK11 = 7 * 86400;
10986
+ var MS_PER_WEEK10 = SEC_PER_WEEK11 * 1e3;
10741
10987
  var GPS_PI2 = 3.1415926535898;
10742
10988
  var BDS_WEEK_OFFSET = 1356;
10743
10989
  var BDS_LEAP_SEC = 14;
10744
- var gpsMs3 = (week, sec) => GPS_EPOCH_MS18 + week * MS_PER_WEEK10 + sec * 1e3;
10745
- var sowOf4 = (dateMs) => dateMs / 1e3 % SEC_PER_WEEK10;
10990
+ var gpsMs3 = (week, sec) => GPS_EPOCH_MS19 + week * MS_PER_WEEK10 + sec * 1e3;
10991
+ var sowOf4 = (dateMs) => dateMs / 1e3 % SEC_PER_WEEK11;
10746
10992
  var SUB_GPS_EPHEMERIS = 1;
10747
10993
  var SUB_ION_UTC = 3;
10748
10994
  var SUB_GLO_EPHEMERIS = 9;
@@ -10894,7 +11140,7 @@ function decodeGloEphemeris2(view, base) {
10894
11140
  // RINEX stores −τn as the clock bias; the record carries τn (ICD sign).
10895
11141
  tauN: -view.getFloat64(base + 113, false),
10896
11142
  gammaN: view.getFloat64(base + 121, false),
10897
- messageFrameTime: (tocMs - GPS_EPOCH_MS18) / 1e3 % SEC_PER_WEEK10,
11143
+ messageFrameTime: (tocMs - GPS_EPOCH_MS19) / 1e3 % SEC_PER_WEEK11,
10898
11144
  // State vector: metres / m·s⁻¹ / m·s⁻² → km / km·s⁻¹ / km·s⁻².
10899
11145
  x: view.getFloat64(base + 33, false) / 1e3,
10900
11146
  xDot: view.getFloat64(base + 41, false) / 1e3,
@@ -10965,7 +11211,7 @@ function parseTrimbleNav(data) {
10965
11211
  }
10966
11212
 
10967
11213
  // src/trimble/index.ts
10968
- var GPS_EPOCH_MS19 = Date.UTC(1980, 0, 6);
11214
+ var GPS_EPOCH_MS20 = Date.UTC(1980, 0, 6);
10969
11215
  var MS_PER_WEEK11 = 7 * 864e5;
10970
11216
  var REC_TYPE_27 = 6;
10971
11217
  var SYS = {
@@ -11163,7 +11409,7 @@ function decodeEpoch(epoch, epochs, obsCodes) {
11163
11409
  o += c.length;
11164
11410
  }
11165
11411
  const dv = new DataView(M.buffer, M.byteOffset, M.byteLength);
11166
- const timeMs = GPS_EPOCH_MS19 + epoch.week * MS_PER_WEEK11 + epoch.towMs;
11412
+ const timeMs = GPS_EPOCH_MS20 + epoch.week * MS_PER_WEEK11 + epoch.towMs;
11167
11413
  const meas = [];
11168
11414
  let q = 0;
11169
11415
  for (let sv = 0; sv < epoch.nsv && q + 8 <= M.length; sv++) {
@@ -11344,14 +11590,14 @@ function* binexRecords(data, view, stats) {
11344
11590
  }
11345
11591
 
11346
11592
  // src/binex/nav.ts
11347
- var GPS_EPOCH_MS20 = Date.UTC(1980, 0, 6);
11593
+ var GPS_EPOCH_MS21 = Date.UTC(1980, 0, 6);
11348
11594
  var GLO_DAY0_MS = Date.UTC(1980, 0, 1);
11349
11595
  var BDT_EPOCH_MS5 = Date.UTC(2006, 0, 1);
11350
- var SEC_PER_WEEK11 = 7 * 86400;
11351
- var MS_PER_WEEK12 = SEC_PER_WEEK11 * 1e3;
11596
+ var SEC_PER_WEEK12 = 7 * 86400;
11597
+ var MS_PER_WEEK12 = SEC_PER_WEEK12 * 1e3;
11352
11598
  var SC2RAD = GPS_PI;
11353
- var gpsMs4 = (week, sec) => GPS_EPOCH_MS20 + week * MS_PER_WEEK12 + sec * 1e3;
11354
- var sowOf5 = (dateMs) => (dateMs / 1e3 % SEC_PER_WEEK11 + SEC_PER_WEEK11) % SEC_PER_WEEK11;
11599
+ var gpsMs4 = (week, sec) => GPS_EPOCH_MS21 + week * MS_PER_WEEK12 + sec * 1e3;
11600
+ var sowOf5 = (dateMs) => (dateMs / 1e3 % SEC_PER_WEEK12 + SEC_PER_WEEK12) % SEC_PER_WEEK12;
11355
11601
  var two9 = (n) => String(n).padStart(2, "0");
11356
11602
  var Reader = class {
11357
11603
  constructor(view, start, le) {
@@ -11638,7 +11884,7 @@ function decodeBinexEph(view, body, len, le) {
11638
11884
  }
11639
11885
 
11640
11886
  // src/binex/index.ts
11641
- var GPS_EPOCH_MS21 = Date.UTC(1980, 0, 6);
11887
+ var GPS_EPOCH_MS22 = Date.UTC(1980, 0, 6);
11642
11888
  var CLIGHT2 = 299792458;
11643
11889
  var OBS_CODES = {
11644
11890
  0: [
@@ -11896,7 +12142,7 @@ function decodeObsRecord(data, view, body, len, obsCodes) {
11896
12142
  p += 4;
11897
12143
  const msec = view.getUint16(p);
11898
12144
  p += 2;
11899
- const timeMs = GPS_EPOCH_MS21 + min * 6e4 + msec;
12145
+ const timeMs = GPS_EPOCH_MS22 + min * 6e4 + msec;
11900
12146
  const flag = data[p++];
11901
12147
  const nsat = (flag & 63) + 1;
11902
12148
  if (flag & 128) p += 3;
@@ -11982,7 +12228,7 @@ function parseBinex(data) {
11982
12228
  var GM_GPS = 3986005e8;
11983
12229
  var GM_GAL = 3986004418e5;
11984
12230
  var GM_BDS = 3986004418e5;
11985
- var GPS_EPOCH_MS22 = Date.UTC(1980, 0, 6);
12231
+ var GPS_EPOCH_MS23 = Date.UTC(1980, 0, 6);
11986
12232
  var BDT_EPOCH_MS6 = Date.UTC(2006, 0, 1);
11987
12233
  var WEEK_MS = 6048e5;
11988
12234
  var BDT_MINUS_GPST_MS = 14e3;
@@ -11991,7 +12237,7 @@ function almanacEpochMs(alm) {
11991
12237
  if (alm.system === "C") {
11992
12238
  return BDT_EPOCH_MS6 + alm.weekAlm * WEEK_MS + alm.toaSec * 1e3 + BDT_MINUS_GPST_MS;
11993
12239
  }
11994
- return GPS_EPOCH_MS22 + alm.weekAlm * WEEK_MS + alm.toaSec * 1e3;
12240
+ return GPS_EPOCH_MS23 + alm.weekAlm * WEEK_MS + alm.toaSec * 1e3;
11995
12241
  }
11996
12242
  function almanacSatPosition(alm, timeMs) {
11997
12243
  const GM = alm.system === "E" ? GM_GAL : alm.system === "C" ? GM_BDS : GM_GPS;
@@ -12500,10 +12746,10 @@ function selectBest(ephs, timeMs) {
12500
12746
  }
12501
12747
  return best;
12502
12748
  }
12503
- var GPS_EPOCH_MS23 = START_GPS_TIME.getTime();
12749
+ var GPS_EPOCH_MS24 = START_GPS_TIME.getTime();
12504
12750
  var MS_PER_WEEK13 = 7 * 864e5;
12505
12751
  var BDS_EPOCH_MS = START_BDS_TIME.getTime();
12506
- var GAL_EPOCH_MS = GPS_EPOCH_MS23 + 1024 * MS_PER_WEEK13;
12752
+ var GAL_EPOCH_MS = GPS_EPOCH_MS24 + 1024 * MS_PER_WEEK13;
12507
12753
  function ephInfoToEphemeris(info) {
12508
12754
  const sys = info.prn.charAt(0);
12509
12755
  if (sys === "R") {
@@ -12554,8 +12800,8 @@ function ephInfoToEphemeris(info) {
12554
12800
  } else if (sys === "E") {
12555
12801
  epochMs = GAL_EPOCH_MS;
12556
12802
  } else {
12557
- epochMs = GPS_EPOCH_MS23;
12558
- const weeksNow = (info.lastReceived - GPS_EPOCH_MS23) / MS_PER_WEEK13;
12803
+ epochMs = GPS_EPOCH_MS24;
12804
+ const weeksNow = (info.lastReceived - GPS_EPOCH_MS24) / MS_PER_WEEK13;
12559
12805
  week += 1024 * Math.round((weeksNow - week) / 1024);
12560
12806
  }
12561
12807
  const tocDate = new Date(epochMs + week * MS_PER_WEEK13 + tocSec * 1e3);
@@ -14396,7 +14642,7 @@ var P2_31 = 2 ** -31;
14396
14642
  var P2_39 = 2 ** -39;
14397
14643
  var D2R = Math.PI / 180;
14398
14644
  var R2D = 180 / Math.PI;
14399
- var SEC_PER_WEEK12 = 604800;
14645
+ var SEC_PER_WEEK13 = 604800;
14400
14646
  var MAXSBSAGEF = 30;
14401
14647
  var MAXSBSAGEL = 360;
14402
14648
  var MAXBAND = 10;
@@ -14544,7 +14790,7 @@ var igpband2 = [
14544
14790
  [{ coord: 60, arr: x5, bits: 1, bite: 72 }, { coord: 65, arr: x6, bits: 73, bite: 108 }, { coord: 70, arr: x6, bits: 109, bite: 144 }, { coord: 75, arr: x6, bits: 145, bite: 180 }, { coord: 85, arr: x7, bits: 181, bite: 192 }],
14545
14791
  [{ coord: -60, arr: x5, bits: 1, bite: 72 }, { coord: -65, arr: x6, bits: 73, bite: 108 }, { coord: -70, arr: x6, bits: 109, bite: 144 }, { coord: -75, arr: x6, bits: 145, bite: 180 }, { coord: -85, arr: x8, bits: 181, bite: 192 }]
14546
14792
  ];
14547
- var gpsSeconds = (week, tow) => week * SEC_PER_WEEK12 + tow;
14793
+ var gpsSeconds = (week, tow) => week * SEC_PER_WEEK13 + tow;
14548
14794
  function maskPrn(i) {
14549
14795
  if (i >= 1 && i <= 37) return `G${two11(i)}`;
14550
14796
  if (i >= 38 && i <= 61) return `R${two11(i - 37)}`;
@@ -19197,9 +19443,11 @@ function computePsdDb(centerMHz, halfSpanChips, numPoints, psdFn, f0 = 1023e3, f
19197
19443
  estimateNetworkFcbs,
19198
19444
  estimateWidelaneFcb,
19199
19445
  euclidean3D,
19446
+ extractSbfNavicSubframe,
19200
19447
  extractWidelaneArcs,
19201
19448
  feedGeoBlock,
19202
19449
  feedGeoL5Block,
19450
+ feedNavicBlock,
19203
19451
  fetchSourcetable,
19204
19452
  findSatBias,
19205
19453
  fixPppPosition,
@@ -19319,6 +19567,7 @@ function computePsdDb(centerMHz, halfSpanChips, numPoints, psdFn, f0 = 1023e3, f
19319
19567
  parseSbfIonoUtc,
19320
19568
  parseSbfMeas,
19321
19569
  parseSbfNav,
19570
+ parseSbfNavic,
19322
19571
  parseSbfPvt,
19323
19572
  parseSbfReceiverSetup,
19324
19573
  parseSinexBiasDcb,
package/dist/index.d.cts CHANGED
@@ -13,7 +13,7 @@ export { RTCM2_MESSAGE_NAMES, Rtcm2Correction, Rtcm2Decoder, Rtcm2Frame, Rtcm2Ob
13
13
  export { B as BitReader, E as EphemerisInfo, R as Rtcm3DebugHandler, a as Rtcm3Decoder, b as Rtcm3Frame, d as decodeEphemeris, r as readString, c as reportDecodeError, s as setRtcm3DebugHandler } from './ephemeris-BAnBLLB9.cjs';
14
14
  export { IgsSsrIonoLayer, IgsSsrMessage, MessageTypeStats, ObsEpoch, ObsSatObs, ObsSignal, RTCM3_MESSAGE_NAMES, SatCn0, SignalCn0, SsrCodeBias, SsrKind, SsrMessage, SsrPhaseBias, SsrSatCorrection, StationMeta, StreamStats, SystemParams, SystemParamsMessage, createStationMeta, createStreamStats, decodeIgsSsr, decodeLegacyObs, decodeMsmFull, decodeObs, decodeSsr, decodeSystemParams, isSsrMessage, obsEpochToDate, resetGloFreqCache, rtcm3Constellation, setGloFreqNumber, updateStationMeta, updateStreamStats } from './rtcm3.cjs';
15
15
  export { UbxCnavResult, UbxFrame, UbxIonoUtcResult, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxPvtResult, UbxRawNavOptions, UbxRawNavResult, UbxRawxEpoch, parseUbxCnav, parseUbxIonoUtc, parseUbxNav, parseUbxPvt, parseUbxRawNav, parseUbxRawx, ubxFrames } from './ubx.cjs';
16
- export { DfmcCensus, DfmcMessageCb, GeoL5Result, SBAS_L5_MT_NAMES, SBAS_L5_PREAMBLE_UW, SbasMessageCb, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEphemeris, SbfGalNavResult, SbfGeoL5Result, SbfGeoNavResult, SbfGloNavResult, SbfGpsNavResult, SbfHasMessage, SbfHasResult, SbfIonoUtcResult, SbfMeasEpoch, SbfMeasurement, SbfNavCounts, SbfNavigation, SbfParseResult, SbfPvt, SbfPvtResult, SbfReceiverSetup, decodeSbfNavigation, feedGeoBlock, feedGeoL5Block, isSbasL1Preamble, isSbasL5Correction, parseSbfBdsNav, parseSbfCnav, parseSbfGalNav, parseSbfGeoL5, parseSbfGeoNav, parseSbfGloNav, parseSbfGpsNav, parseSbfHas, parseSbfIonoUtc, parseSbfMeas, parseSbfPvt, parseSbfReceiverSetup, sbasL5MessageName, sbasL5MessageType, sbfCrc16, scanSbfFrames } from './sbf.cjs';
16
+ export { DfmcCensus, DfmcMessageCb, GeoL5Result, SBAS_L5_MT_NAMES, SBAS_L5_PREAMBLE_UW, SbasMessageCb, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEphemeris, SbfGalNavResult, SbfGeoL5Result, SbfGeoNavResult, SbfGloNavResult, SbfGpsNavResult, SbfHasMessage, SbfHasResult, SbfIonoUtcResult, SbfMeasEpoch, SbfMeasurement, SbfNavCounts, SbfNavicResult, SbfNavigation, SbfParseResult, SbfPvt, SbfPvtResult, SbfReceiverSetup, decodeSbfNavigation, extractSbfNavicSubframe, feedGeoBlock, feedGeoL5Block, feedNavicBlock, isSbasL1Preamble, isSbasL5Correction, parseSbfBdsNav, parseSbfCnav, parseSbfGalNav, parseSbfGeoL5, parseSbfGeoNav, parseSbfGloNav, parseSbfGpsNav, parseSbfHas, parseSbfIonoUtc, parseSbfMeas, parseSbfNavic, parseSbfPvt, parseSbfReceiverSetup, sbasL5MessageName, sbasL5MessageType, sbfCrc16, scanSbfFrames } from './sbf.cjs';
17
17
  export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, NovatelPvtResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelPvt, parseNovatelRange } from './novatel.cjs';
18
18
  export { TrimbleEpoch, TrimbleFrame, TrimbleMeasurement, TrimbleNavResult, TrimbleParseResult, parseTrimble, parseTrimbleNav, trimbleFrames } from './trimble.cjs';
19
19
  export { BinexEpoch, BinexMeasurement, BinexParseResult, BinexRecord, binexCrc16, binexCrc32, binexCsum8, binexRecords, decodeBinexEph, getBnxi, parseBinex } from './binex.cjs';
package/dist/index.d.ts CHANGED
@@ -13,7 +13,7 @@ export { RTCM2_MESSAGE_NAMES, Rtcm2Correction, Rtcm2Decoder, Rtcm2Frame, Rtcm2Ob
13
13
  export { B as BitReader, E as EphemerisInfo, R as Rtcm3DebugHandler, a as Rtcm3Decoder, b as Rtcm3Frame, d as decodeEphemeris, r as readString, c as reportDecodeError, s as setRtcm3DebugHandler } from './ephemeris-BAnBLLB9.js';
14
14
  export { IgsSsrIonoLayer, IgsSsrMessage, MessageTypeStats, ObsEpoch, ObsSatObs, ObsSignal, RTCM3_MESSAGE_NAMES, SatCn0, SignalCn0, SsrCodeBias, SsrKind, SsrMessage, SsrPhaseBias, SsrSatCorrection, StationMeta, StreamStats, SystemParams, SystemParamsMessage, createStationMeta, createStreamStats, decodeIgsSsr, decodeLegacyObs, decodeMsmFull, decodeObs, decodeSsr, decodeSystemParams, isSsrMessage, obsEpochToDate, resetGloFreqCache, rtcm3Constellation, setGloFreqNumber, updateStationMeta, updateStreamStats } from './rtcm3.js';
15
15
  export { UbxCnavResult, UbxFrame, UbxIonoUtcResult, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxPvtResult, UbxRawNavOptions, UbxRawNavResult, UbxRawxEpoch, parseUbxCnav, parseUbxIonoUtc, parseUbxNav, parseUbxPvt, parseUbxRawNav, parseUbxRawx, ubxFrames } from './ubx.js';
16
- export { DfmcCensus, DfmcMessageCb, GeoL5Result, SBAS_L5_MT_NAMES, SBAS_L5_PREAMBLE_UW, SbasMessageCb, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEphemeris, SbfGalNavResult, SbfGeoL5Result, SbfGeoNavResult, SbfGloNavResult, SbfGpsNavResult, SbfHasMessage, SbfHasResult, SbfIonoUtcResult, SbfMeasEpoch, SbfMeasurement, SbfNavCounts, SbfNavigation, SbfParseResult, SbfPvt, SbfPvtResult, SbfReceiverSetup, decodeSbfNavigation, feedGeoBlock, feedGeoL5Block, isSbasL1Preamble, isSbasL5Correction, parseSbfBdsNav, parseSbfCnav, parseSbfGalNav, parseSbfGeoL5, parseSbfGeoNav, parseSbfGloNav, parseSbfGpsNav, parseSbfHas, parseSbfIonoUtc, parseSbfMeas, parseSbfPvt, parseSbfReceiverSetup, sbasL5MessageName, sbasL5MessageType, sbfCrc16, scanSbfFrames } from './sbf.js';
16
+ export { DfmcCensus, DfmcMessageCb, GeoL5Result, SBAS_L5_MT_NAMES, SBAS_L5_PREAMBLE_UW, SbasMessageCb, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEphemeris, SbfGalNavResult, SbfGeoL5Result, SbfGeoNavResult, SbfGloNavResult, SbfGpsNavResult, SbfHasMessage, SbfHasResult, SbfIonoUtcResult, SbfMeasEpoch, SbfMeasurement, SbfNavCounts, SbfNavicResult, SbfNavigation, SbfParseResult, SbfPvt, SbfPvtResult, SbfReceiverSetup, decodeSbfNavigation, extractSbfNavicSubframe, feedGeoBlock, feedGeoL5Block, feedNavicBlock, isSbasL1Preamble, isSbasL5Correction, parseSbfBdsNav, parseSbfCnav, parseSbfGalNav, parseSbfGeoL5, parseSbfGeoNav, parseSbfGloNav, parseSbfGpsNav, parseSbfHas, parseSbfIonoUtc, parseSbfMeas, parseSbfNavic, parseSbfPvt, parseSbfReceiverSetup, sbasL5MessageName, sbasL5MessageType, sbfCrc16, scanSbfFrames } from './sbf.js';
17
17
  export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, NovatelPvtResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelPvt, parseNovatelRange } from './novatel.js';
18
18
  export { TrimbleEpoch, TrimbleFrame, TrimbleMeasurement, TrimbleNavResult, TrimbleParseResult, parseTrimble, parseTrimbleNav, trimbleFrames } from './trimble.js';
19
19
  export { BinexEpoch, BinexMeasurement, BinexParseResult, BinexRecord, binexCrc16, binexCrc32, binexCsum8, binexRecords, decodeBinexEph, getBnxi, parseBinex } from './binex.js';
package/dist/index.js CHANGED
@@ -77,7 +77,7 @@ import {
77
77
  setRtcm3DebugHandler,
78
78
  updateStationMeta,
79
79
  updateStreamStats
80
- } from "./chunk-XPQ4BU6W.js";
80
+ } from "./chunk-7GNRNKBR.js";
81
81
  import {
82
82
  parseUbxCnav,
83
83
  parseUbxIonoUtc,
@@ -92,8 +92,10 @@ import {
92
92
  SBAS_L5_PREAMBLE_UW,
93
93
  crc16,
94
94
  decodeSbfNavigation,
95
+ extractSbfNavicSubframe,
95
96
  feedGeoBlock,
96
97
  feedGeoL5Block,
98
+ feedNavicBlock,
97
99
  isSbasL1Preamble,
98
100
  isSbasL5Correction,
99
101
  parseSbfAlmanac,
@@ -108,12 +110,13 @@ import {
108
110
  parseSbfIonoUtc,
109
111
  parseSbfMeas,
110
112
  parseSbfNav,
113
+ parseSbfNavic,
111
114
  parseSbfPvt,
112
115
  parseSbfReceiverSetup,
113
116
  sbasL5MessageName,
114
117
  sbasL5MessageType,
115
118
  scanSbfFrames
116
- } from "./chunk-WW3DKCDN.js";
119
+ } from "./chunk-74IVYOQV.js";
117
120
  import "./chunk-3KSDL3CO.js";
118
121
  import {
119
122
  OEM4_HLEN,
@@ -542,9 +545,11 @@ export {
542
545
  estimateNetworkFcbs,
543
546
  estimateWidelaneFcb,
544
547
  euclidean3D,
548
+ extractSbfNavicSubframe,
545
549
  extractWidelaneArcs,
546
550
  feedGeoBlock,
547
551
  feedGeoL5Block,
552
+ feedNavicBlock,
548
553
  fetchSourcetable,
549
554
  findSatBias,
550
555
  fixPppPosition,
@@ -664,6 +669,7 @@ export {
664
669
  parseSbfIonoUtc,
665
670
  parseSbfMeas,
666
671
  parseSbfNav,
672
+ parseSbfNavic,
667
673
  parseSbfPvt,
668
674
  parseSbfReceiverSetup,
669
675
  parseSinexBiasDcb,