gnss-js 2.10.1 → 2.11.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.
Files changed (42) hide show
  1. package/README.md +1 -1
  2. package/dist/binex.d.cts +1 -1
  3. package/dist/binex.d.ts +1 -1
  4. package/dist/{chunk-WQX354KD.js → chunk-H3AKFD25.js} +1 -1
  5. package/dist/{chunk-YUW33VXK.js → chunk-HUXQABJI.js} +2 -0
  6. package/dist/{chunk-GH7MYXON.js → chunk-IQHQHUOB.js} +3 -3
  7. package/dist/{chunk-56HM5B6T.js → chunk-MDO77CCC.js} +132 -9
  8. package/dist/chunk-NL2ORX75.js +319 -0
  9. package/dist/{chunk-74IVYOQV.js → chunk-RFPR4LKM.js} +110 -4
  10. package/dist/{chunk-3KSDL3CO.js → chunk-SSWFX3P3.js} +1 -1
  11. package/dist/{chunk-SEYH4BEN.js → chunk-SZP4TLYR.js} +2 -2
  12. package/dist/{chunk-K3GLUWZI.js → chunk-UMINQTMK.js} +1 -1
  13. package/dist/index.cjs +625 -109
  14. package/dist/index.d.cts +3 -3
  15. package/dist/index.d.ts +3 -3
  16. package/dist/index.js +11 -8
  17. package/dist/{nav-DImXUdbp.d.ts → nav-COp0Vmlw.d.cts} +83 -2
  18. package/dist/{nav-DImXUdbp.d.cts → nav-COp0Vmlw.d.ts} +83 -2
  19. package/dist/{nav-BYmYoh9A.d.cts → nav-CvZXmumD.d.cts} +1 -1
  20. package/dist/{nav-CN8rxL4h.d.ts → nav-D2DFlVpa.d.ts} +1 -1
  21. package/dist/novatel.d.cts +1 -1
  22. package/dist/novatel.d.ts +1 -1
  23. package/dist/novatel.js +3 -3
  24. package/dist/orbit.d.cts +2 -2
  25. package/dist/orbit.d.ts +2 -2
  26. package/dist/positioning.d.cts +2 -2
  27. package/dist/positioning.d.ts +2 -2
  28. package/dist/positioning.js +3 -3
  29. package/dist/rinex.cjs +140 -11
  30. package/dist/rinex.d.cts +9 -6
  31. package/dist/rinex.d.ts +9 -6
  32. package/dist/rinex.js +3 -2
  33. package/dist/sbf.cjs +420 -24
  34. package/dist/sbf.d.cts +46 -5
  35. package/dist/sbf.d.ts +46 -5
  36. package/dist/sbf.js +7 -4
  37. package/dist/trimble.d.cts +1 -1
  38. package/dist/trimble.d.ts +1 -1
  39. package/dist/ubx.d.cts +1 -1
  40. package/dist/ubx.d.ts +1 -1
  41. package/dist/ubx.js +4 -4
  42. package/package.json +1 -1
@@ -7,22 +7,31 @@ import {
7
7
  galFnavPageCrcOk,
8
8
  galInavPageCrcOk,
9
9
  testGloString
10
- } from "./chunk-3KSDL3CO.js";
10
+ } from "./chunk-SSWFX3P3.js";
11
11
  import {
12
12
  decodeSbasGeoNav,
13
13
  sbasCrcOk
14
- } from "./chunk-WQX354KD.js";
14
+ } from "./chunk-H3AKFD25.js";
15
15
  import {
16
16
  getGpsLeap
17
17
  } from "./chunk-HVXYFUCB.js";
18
18
  import {
19
19
  geodeticToEcef
20
20
  } from "./chunk-37QNKGTC.js";
21
+ import {
22
+ BdsCnav1Assembler,
23
+ BdsCnav2Assembler,
24
+ BdsCnav3Assembler,
25
+ bdsCnav1Sf2CrcOk,
26
+ bdsCnav1Sf3CrcOk,
27
+ bdsCnav2CrcOk,
28
+ bdsCnav3CrcOk
29
+ } from "./chunk-NL2ORX75.js";
21
30
  import {
22
31
  CnavAssembler,
23
32
  cnavCrcOk,
24
33
  crc24q
25
- } from "./chunk-YUW33VXK.js";
34
+ } from "./chunk-HUXQABJI.js";
26
35
  import {
27
36
  GPS_PI,
28
37
  GpsLnavAssembler,
@@ -924,6 +933,80 @@ function parseSbfGloNav(data) {
924
933
  return { ephemerides, badCrc, messages };
925
934
  }
926
935
 
936
+ // src/sbf/rawnav-bds-cnav.ts
937
+ var GPS_BDT_OFFSET = 14;
938
+ var B1C_FRAME_S = 18;
939
+ var TOW_DNU2 = 4294967295;
940
+ function newBdsCnavAssemblers() {
941
+ return {
942
+ b1c: new BdsCnav1Assembler(),
943
+ b2a: new BdsCnav2Assembler(),
944
+ b2b: new BdsCnav3Assembler()
945
+ };
946
+ }
947
+ function navBits(view, wordsAt, start, nBits) {
948
+ const out = new Uint8Array(Math.ceil(nBits / 8));
949
+ for (let i = 0; i < nBits; i++) {
950
+ const p = start + i;
951
+ const w = view.getUint32(wordsAt + 4 * (p >>> 5), true);
952
+ if (w >>> 31 - (p & 31) & 1) out[i >> 3] |= 128 >> (i & 7);
953
+ }
954
+ return out;
955
+ }
956
+ var MIN_LEN = { 4218: 248, 4219: 92, 4242: 144 };
957
+ function feedBdsCnavBlock(view, b, id, len, asm) {
958
+ if (len < (MIN_LEN[id] ?? Infinity)) return {};
959
+ const prnStr = svidToPrn(view.getUint8(b + 14));
960
+ if (!prnStr || prnStr[0] !== "C") return {};
961
+ const prn = Number(prnStr.slice(1));
962
+ const words = b + 20;
963
+ if (id === 4218) {
964
+ const towMs = view.getUint32(b + 8, true);
965
+ if (towMs === TOW_DNU2) return {};
966
+ const sf2 = navBits(view, words, 72, 600);
967
+ const sf3 = navBits(view, words, 1272, 264);
968
+ const sf2Ok = bdsCnav1Sf2CrcOk(sf2);
969
+ const bdt = (towMs / 1e3 - GPS_BDT_OFFSET + 604800) % 604800;
970
+ const tTm = (Math.floor(bdt) - B1C_FRAME_S + 604800) % 604800;
971
+ const eph = asm.b1c.push(
972
+ prn,
973
+ sf2Ok ? sf2 : null,
974
+ bdsCnav1Sf3CrcOk(sf3) ? sf3 : null,
975
+ tTm
976
+ );
977
+ if (!sf2Ok) return { badCrc: true };
978
+ return eph ? { eph } : {};
979
+ }
980
+ if (id === 4219) {
981
+ const msg = navBits(view, words, 0, 288);
982
+ if (!bdsCnav2CrcOk(msg)) return { badCrc: true };
983
+ const eph = asm.b2a.push(msg);
984
+ return eph ? { eph } : {};
985
+ }
986
+ if (id === 4242) {
987
+ const msg = navBits(view, words, 12, 486);
988
+ if (!bdsCnav3CrcOk(msg)) return { badCrc: true };
989
+ const eph = asm.b2b.push(prn, msg);
990
+ return eph ? { eph } : {};
991
+ }
992
+ return {};
993
+ }
994
+ function parseSbfBdsCnav(data) {
995
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
996
+ const asm = newBdsCnavAssemblers();
997
+ const ephemerides = [];
998
+ let badCrc = 0;
999
+ let messages = 0;
1000
+ scanSbfFrames(data, view, (id, b, len) => {
1001
+ if (id !== 4218 && id !== 4219 && id !== 4242) return;
1002
+ messages++;
1003
+ const r = feedBdsCnavBlock(view, b, id, len, asm);
1004
+ if (r.eph) ephemerides.push(r.eph);
1005
+ else if (r.badCrc) badCrc++;
1006
+ });
1007
+ return { ephemerides, badCrc, messages };
1008
+ }
1009
+
927
1010
  // src/navbits/sbas-l5.ts
928
1011
  var SBAS_L5_PREAMBLE_UW = 6056250;
929
1012
  function isSbasL1Preamble(msg) {
@@ -1066,6 +1149,7 @@ function decodeSbfNavigation(data, opts = {}) {
1066
1149
  const ephemerides = [];
1067
1150
  const seen = /* @__PURE__ */ new Set();
1068
1151
  const cnav = [];
1152
+ const bdsCnav = [];
1069
1153
  const ionoCorrections = {};
1070
1154
  let leapSeconds = null;
1071
1155
  const counts = {
@@ -1075,6 +1159,7 @@ function decodeSbfNavigation(data, opts = {}) {
1075
1159
  galRaw: 0,
1076
1160
  gloRaw: 0,
1077
1161
  bdsRaw: 0,
1162
+ bdsCnavRaw: 0,
1078
1163
  sbasRaw: 0,
1079
1164
  sbasL5Raw: 0,
1080
1165
  navicRaw: 0,
@@ -1086,6 +1171,7 @@ function decodeSbfNavigation(data, opts = {}) {
1086
1171
  const galAsm = newGalAssemblers();
1087
1172
  const gloAsm = new GloStringAssembler();
1088
1173
  const bdsAsm = new BdsAssembler();
1174
+ const bdsCnavAsm = newBdsCnavAssemblers();
1089
1175
  const lnavAsm = new GpsLnavAssembler();
1090
1176
  const navicAsm = new NavicAssembler();
1091
1177
  const addEph = (e) => {
@@ -1192,6 +1278,17 @@ function decodeSbfNavigation(data, opts = {}) {
1192
1278
  else if (r.badCrc) counts.badFrames++;
1193
1279
  return;
1194
1280
  }
1281
+ case 4218:
1282
+ // BDSRawB1C
1283
+ case 4219:
1284
+ // BDSRawB2a
1285
+ case 4242: {
1286
+ counts.bdsCnavRaw++;
1287
+ const r = feedBdsCnavBlock(view, b, id, len, bdsCnavAsm);
1288
+ if (r.eph) bdsCnav.push(r.eph);
1289
+ else if (r.badCrc) counts.badFrames++;
1290
+ return;
1291
+ }
1195
1292
  case 4020: {
1196
1293
  if (len < 52) return;
1197
1294
  counts.sbasRaw++;
@@ -1248,7 +1345,15 @@ function decodeSbfNavigation(data, opts = {}) {
1248
1345
  prns: [...dfmcPrns].sort(),
1249
1346
  messages: Object.values(dfmcByType).reduce((a, v) => a + v, 0)
1250
1347
  };
1251
- return { ephemerides, cnav, ionoCorrections, leapSeconds, dfmc, counts };
1348
+ return {
1349
+ ephemerides,
1350
+ cnav,
1351
+ bdsCnav,
1352
+ ionoCorrections,
1353
+ leapSeconds,
1354
+ dfmc,
1355
+ counts
1356
+ };
1252
1357
  }
1253
1358
 
1254
1359
  // src/navbits/rs255.ts
@@ -2458,6 +2563,7 @@ export {
2458
2563
  parseSbfGalNav,
2459
2564
  parseSbfBdsNav,
2460
2565
  parseSbfGloNav,
2566
+ parseSbfBdsCnav,
2461
2567
  SBAS_L5_PREAMBLE_UW,
2462
2568
  isSbasL1Preamble,
2463
2569
  sbasL5MessageType,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-HVXYFUCB.js";
4
4
  import {
5
5
  crc24q
6
- } from "./chunk-YUW33VXK.js";
6
+ } from "./chunk-HUXQABJI.js";
7
7
  import {
8
8
  GPS_PI,
9
9
  getBitS,
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  decodeSbasGeoNav
3
- } from "./chunk-WQX354KD.js";
3
+ } from "./chunk-H3AKFD25.js";
4
4
  import {
5
5
  getUtcDate
6
6
  } from "./chunk-HVXYFUCB.js";
7
7
  import {
8
8
  CnavAssembler,
9
9
  cnavCrcOk
10
- } from "./chunk-YUW33VXK.js";
10
+ } from "./chunk-HUXQABJI.js";
11
11
  import {
12
12
  decodeGpsLnavFrame
13
13
  } from "./chunk-V2D5KUKH.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sbasMessageType
3
- } from "./chunk-WQX354KD.js";
3
+ } from "./chunk-H3AKFD25.js";
4
4
  import {
5
5
  computeDop,
6
6
  computeSatPosition,