PNBBDSD1NavDataFactory.cpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 
26 //==============================================================================
27 //
28 // This software was developed by Applied Research Laboratories at the
29 // University of Texas at Austin, under contract to an agency or agencies
30 // within the U.S. Department of Defense. The U.S. Government retains all
31 // rights to use, duplicate, distribute, disclose, or release this software.
32 //
33 // Pursuant to DoD Directive 523024
34 //
35 // DISTRIBUTION STATEMENT A: This software has been approved for public
36 // release, distribution is unlimited.
37 //
38 //==============================================================================
40 #include "BDSD1NavEph.hpp"
41 #include "BDSD1NavTimeOffset.hpp"
42 #include "BDSD1NavHealth.hpp"
43 #include "BDSD1NavIono.hpp"
44 #include "BDSD1NavISC.hpp"
45 #include "TimeCorrection.hpp"
46 #include "TimeString.hpp"
47 #include "BDSD1Bits.hpp"
48 
49 using namespace std;
50 using namespace gnsstk::bds;
51 
52 namespace gnsstk
53 {
54  // x sf 1 eph, iono, ISC
55  // x sf 2-3 eph
56  // x sf 4 pg 1-24 alm (orbit)
57  // x sf 5 pg 1-6 alm (orbit)
58  // x sf 5 pg 7 health
59  // x sf 5 pg 8 health + alm (ref time)
60  // p sf 5 pg 9 time offset (gps, gal, glo)
61  // p sf 5 pg 10 time offset (utc)
62  // - sf 5 pg 11-24 reserved
63  bool PNBBDSD1NavDataFactory ::
64  addData(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut,
65  double cadence)
66  {
67  if ((navIn->getNavID().navType != NavType::BeiDou_D1) ||
68  (navIn->getNumBits() != 300))
69  {
70  // This class only processes BeiDou D1 NAV.
71  return false;
72  }
73  bool rv = true;
74  try
75  {
76  unsigned long sfid = navIn->asUnsignedLong(
78  // cerr << "sfid=" << sfid;
79  unsigned long pnum;
80  // double TOA;
81  bool checkParity = false, expParity = false;
82  switch (navValidity)
83  {
84  case NavValidityType::ValidOnly:
85  checkParity = true;
86  expParity = true;
87  break;
88  case NavValidityType::InvalidOnly:
89  checkParity = true;
90  expParity = false;
91  break;
92  }
93  if (checkParity)
94  {
96  }
97  switch (sfid)
98  {
99  case 1:
100  case 2:
101  case 3:
102  rv = processEph(sfid, navIn, navOut);
103  break;
104  case 4:
105  pnum = navIn->asUnsignedLong(fsbPnum,fnbPnum,fscPnum);
106  // cerr << " pnum=" << pnum;
107  // TOA = navIn->asUnsignedDouble(asbtoa,anbtoa,asctoa);
108  // cerr << " FAKETOA=" << TOA;
109  if ((pnum >= 1) && (pnum <= 24))
110  {
111  rv = processAlm(sfid, pnum, navIn, navOut);
112  }
113  break;
114  case 5:
115  pnum = navIn->asUnsignedLong(fsbPnum,fnbPnum,fscPnum);
116  // cerr << " pnum=" << pnum;
117  // TOA = navIn->asUnsignedDouble(asbtoa,anbtoa,asctoa);
118  // cerr << " FAKETOA=" << TOA;
119  if (((pnum >= 1) && (pnum <= 6)) ||
120  ((pnum >= 11) && (pnum <= 23)))
121  {
122  rv = processAlm(sfid, pnum, navIn, navOut);
123  }
124  else if (pnum == 7)
125  {
126  rv = processSF5Pg7(navIn, navOut);
127  }
128  else if (pnum == 8)
129  {
130  rv = processSF5Pg8(navIn, navOut);
131  }
132  else if (pnum == 9)
133  {
134  rv = processSF5Pg9(navIn, navOut);
135  }
136  else if (pnum == 10)
137  {
138  rv = processSF5Pg10(navIn, navOut);
139  }
140  else if (pnum == 24)
141  {
142  rv = processSF5Pg24(navIn, navOut);
143  }
144  break;
145  default:
146  rv = true;
147  break;
148  }
149  // cerr << endl;
150  }
151  catch (Exception& exc)
152  {
153  rv = false;
154  cerr << exc << endl;
155  }
156  catch (std::exception& exc)
157  {
158  rv = false;
159  cerr << exc.what() << endl;
160  }
161  catch (...)
162  {
163  rv = false;
164  cerr << "Unknown exception" << endl;
165  }
166  return rv;
167  }
168 
169 
170  bool PNBBDSD1NavDataFactory ::
171  processAlm(unsigned long sfid, unsigned pnum, const PackedNavBitsPtr& navIn,
172  NavDataPtrList& navOut)
173  {
174  SatID xmitSat(navIn->getsatSys());
175  // Key used for data accumulating, which we don't separate by
176  // subject satellite.
177  NavSatelliteID key(0, xmitSat, navIn->getobsID(), navIn->getNavID());
178  if (PNBNavDataFactory::processAlm || PNBNavDataFactory::processHea)
179  {
180  // We need to store AmEpID for almanacs (pages 1-23)
181  // and/or health (page 24).
182  if ((sfid == 4) && (pnum >= 11) && (pnum <= 24))
183  {
184  amEpIDMap[key].t = navIn->getTransmitTime();
185  amEpIDMap[key].amEpID = navIn->asUnsignedLong(asbAmEpID,anbAmEpID,
186  ascAmEpID);
187  // cerr << printTime(amEpIDMap[key].t,
188  // " SET t:%04Y/%02m/%02d-%02H:%02M:%02S %D/%06g")
189  // << " key:" << key << " expanded:"
190  // << amEpIDMap[key].isExpanded() << "("
191  // << (unsigned)amEpIDMap[key].amEpID << ")";
192  }
193  }
194  if (!PNBNavDataFactory::processAlm)
195  {
196  // User doesn't want almanacs so don't do any processing.
197  return true;
198  }
199  // Only sf 5 pg 11-23 have almanacs in the expanded almanac.
200  if ((sfid == 5) && (pnum >= 11) && (pnum <= 23))
201  {
202  // Make sure that the stored AmEpID is in the same frame
203  // as the subframe 5 (6 seconds between subframes), and
204  // that the AmEpID indicates an expanded subframe.
205  // cerr << printTime(navIn->getTransmitTime(),
206  // " xmit:%04Y/%02m/%02d-%02H:%02M:%02S %D/%06g")
207  // << printTime(amEpIDMap[key].t,
208  // " t:%04Y/%02m/%02d-%02H:%02M:%02S %D/%06g")
209  // << " diff:" << (navIn->getTransmitTime() - amEpIDMap[key].t)
210  // << " key:" << key << " expanded:"
211  // << amEpIDMap[key].isExpanded();
212  if (((navIn->getTransmitTime() - amEpIDMap[key].t) != 6.0) ||
213  !amEpIDMap[key].isExpanded())
214  {
215  // This is not an expanded almanac, it is either a
216  // reserved page or we simply don't know, so skip it.
217  // cerr << " not expanded";
218  return true;
219  }
220  // cerr << " EXPANDED";
221  }
222  // Actual satellite ID (subject and transmit)
223  unsigned long svid = pnum; // svid is the same as page num for sf4
224  if (sfid == 5)
225  {
226  if ((pnum >= 1) && (pnum <= 6))
227  {
228  svid = pnum+24;
229  }
230  else if ((pnum >= 11) && (pnum <= 23))
231  {
232  // AmID is in the same position as AmEpID, it's just a
233  // different subframe/page.
234  uint8_t amID = navIn->asUnsignedLong(asbAmEpID,anbAmEpID,ascAmEpID);
235  // cerr << " AmID = " << (unsigned)amID << endl;
236  // see Table 5-13 in ICD-B1I
237  switch (amID)
238  {
239  case 0x00:
240  return true; // reserved values, ignore
241  case 0x01:
242  svid = pnum+20;
243  break;
244  case 0x02:
245  svid = pnum+33;
246  break;
247  case 0x03:
248  if (pnum < 18)
249  svid = pnum + 46;
250  else
251  return true; // reserved values, ignore
252  break;
253  default:
254  GNSSTK_THROW(Exception("Invalid AmID value " +
255  StringUtils::asString((unsigned)amID)));
256  break;
257  }
258  }
259  else
260  {
261  gnsstk::Exception exc("Invalid pnum " + StringUtils::asString(pnum));
262  GNSSTK_THROW(exc);
263  }
264  }
265  NavSatelliteID sat(svid, xmitSat, navIn->getobsID(), navIn->getNavID());
266  auto alm = std::make_shared<BDSD1NavAlm>();
267  alm->isDefault = isAlmDefault(navIn);
268  // cerr << " svid=" << svid << " default=" << alm->isDefault;
269  // NavData
270  alm->timeStamp = navIn->getTransmitTime();
271  alm->signal = NavMessageID(sat, NavMessageType::Almanac);
272  // OrbitData
273  // OrbitDataKepler
274  alm->xmitTime = alm->timeStamp;
275  //alm->health is set below
276  alm->M0 = navIn->asSignedDouble(asbM0m,anbM0m,asbM0l,anbM0l,ascM0);
277  alm->ecc = navIn->asUnsignedDouble(asbEcc,anbEcc,ascEcc);
278  alm->Ahalf = navIn->asUnsignedDouble(asbAhalfm,anbAhalfm,
280  alm->A = alm->Ahalf * alm->Ahalf;
281  alm->OMEGA0 = navIn->asSignedDouble(asbOMEGA0m,anbOMEGA0m,
283  // alm->i0 is set below
284  alm->w = navIn->asSignedDouble(asbwm,anbwm,asbwl,anbwl,ascw);
285  alm->OMEGAdot = navIn->asSignedDouble(asbOMEGAdotm,anbOMEGAdotm,
287  ascOMEGAdot);
288  alm->af0 = navIn->asSignedDouble(asbA0,anbA0,ascA0);
289  alm->af1 = navIn->asSignedDouble(asbA1,anbA1,ascA1);
290  // BDSD1NavData
291  alm->pre = navIn->asUnsignedLong(fsbPre,fnbPre,fscPre);
292  alm->rev = navIn->asUnsignedLong(fsbRev,fnbRev,fscRev);
293  alm->fraID = sfid;
294  alm->sow = navIn->asSignedDouble(fsbSOWm,fnbSOWm,fsbSOWl,fnbSOWl,fscSOW);
295  // BDSD1NavAlm
296  alm->pnum = pnum;
297  alm->toa = navIn->asUnsignedDouble(asbtoa,anbtoa,asctoa);
298  unsigned long toaab = navIn->asUnsignedLong(asbtoa,anbtoa,1);
299  // cerr << "sfid=" << sfid << " pnum=" << pnum << " xmit=" << xmitSat.id
300  // << " subj=" << sat.sat.id << " toa=" << alm->toa << "=" << toaab
301  // << endl;
302  alm->deltai = navIn->asSignedDouble(asbdim,anbdim,asbdil,anbdil,ascdi);
303  if ((sat.sat.id >= MIN_MEO_BDS) && (sat.sat.id <= MAX_MEO_BDS))
304  {
305  // MEO/IGSO satellite. GEO satellites have 0 inclination offset.
306  alm->i0 = BDSD1NavData::refioffset + alm->deltai;
307  }
308  if (!finishAlm(alm, false, key, navOut))
309  almAcc[key].push_back(alm);
310  return true;
311  }
312 
313 
314  bool PNBBDSD1NavDataFactory ::
315  processEph(unsigned long sfid,
316  const PackedNavBitsPtr& navIn, NavDataPtrList& navOut)
317  {
318  if ((sfid < 1) || (sfid > 3))
319  return false;
320  // Tgd are scaled by 0.1 to get nanoseconds, then x10^-9 to get seconds
321  constexpr double sf = 0.1e-9;
322  NavSatelliteID key(navIn->getsatSys().id, navIn->getsatSys(),
323  navIn->getobsID(), navIn->getNavID());
324  if (sfid == 1)
325  {
326  if (processHea)
327  {
328  std::shared_ptr<BDSD1NavHealth> hea =
329  std::make_shared<BDSD1NavHealth>();
330  hea->timeStamp = navIn->getTransmitTime();
331  hea->signal = NavMessageID(key, NavMessageType::Health);
332  hea->isAlmHealth = false;
333  hea->satH1 = navIn->asBool(esbSatH1);
334  // cerr << "add D1NAV eph health" << endl;
335  navOut.push_back(hea);
336  }
337  if (PNBNavDataFactory::processIono)
338  {
339  std::shared_ptr<BDSD1NavIono> iono =
340  std::make_shared<BDSD1NavIono>();
341  iono->timeStamp = navIn->getTransmitTime();
342  iono->signal = NavMessageID(
343  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
344  navIn->getobsID(), navIn->getNavID()),
345  NavMessageType::Iono);
346  iono->pre = navIn->asUnsignedLong(fsbPre,fnbPre,fscPre);
347  iono->rev = navIn->asUnsignedLong(fsbRev,fnbRev,fscRev);
348  iono->fraID = sfid;
349  iono->sow = navIn->asSignedDouble(fsbSOWm,fnbSOWm,fsbSOWl,fnbSOWl,
350  fscSOW);
351  iono->alpha[0] = navIn->asSignedDouble(esbAlpha0,enbAlpha0,
352  escAlpha0);
353  iono->alpha[1] = navIn->asSignedDouble(esbAlpha1,enbAlpha1,
354  escAlpha1);
355  iono->alpha[2] = navIn->asSignedDouble(esbAlpha2,enbAlpha2,
356  escAlpha2);
357  iono->alpha[3] = navIn->asSignedDouble(esbAlpha3,enbAlpha3,
358  escAlpha3);
359  iono->beta[0] = navIn->asSignedDouble(esbBeta0m,enbBeta0m,
361  iono->beta[1] = navIn->asSignedDouble(esbBeta1,enbBeta1,escBeta1);
362  iono->beta[2] = navIn->asSignedDouble(esbBeta2,enbBeta2,escBeta2);
363  iono->beta[3] = navIn->asSignedDouble(esbBeta3m,enbBeta3m,
365  navOut.push_back(iono);
366  }
367  if (PNBNavDataFactory::processISC)
368  {
369  std::shared_ptr<BDSD1NavISC> isc = std::make_shared<BDSD1NavISC>();
370  isc->timeStamp = navIn->getTransmitTime();
371  isc->signal = NavMessageID(
372  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
373  navIn->getobsID(), navIn->getNavID()),
374  NavMessageType::ISC);
375  isc->pre = navIn->asUnsignedLong(fsbPre,fnbPre,fscPre);
376  isc->rev = navIn->asUnsignedLong(fsbRev,fnbRev,fscRev);
377  isc->fraID = sfid;
378  isc->sow = navIn->asSignedDouble(fsbSOWm,fnbSOWm,fsbSOWl,fnbSOWl,
379  fscSOW);
380  isc->tgd1 = sf*navIn->asSignedDouble(esbTGD1,enbTGD1,escTGD1);
381  isc->tgd2 = sf*navIn->asSignedDouble(esbTGD2m,enbTGD2m,
383  navOut.push_back(isc);
384  }
385  } // if (sfid == 1)
386  if (!PNBNavDataFactory::processEph)
387  {
388  // User doesn't want ephemerides so don't do any processing.
389  return true;
390  }
391  if (ephAcc.find(key) == ephAcc.end())
392  {
393  // cerr << "ephAcc is empty for signal " << key << endl;
394  // set up a new ephemeris
395  ephAcc[key].resize(3);
396  ephAcc[key][sfid-1] = navIn;
397  // nothing in navOut yet and no further processing because
398  // we only have one of three subframes at this point.
399  return true;
400  }
401  std::vector<PackedNavBitsPtr> &ephSF(ephAcc[key]);
402  ephSF[sfid-1] = navIn;
403  // stop processing if we don't have three full subframes
404  if (!ephSF[sf1] || !ephSF[sf2] || !ephSF[sf3] ||
405  (ephSF[sf1]->getNumBits() != 300) ||
406  (ephSF[sf2]->getNumBits() != 300) ||
407  (ephSF[sf3]->getNumBits() != 300))
408  {
409  // cerr << "Not ready for full D1NAV eph processing" << endl
410  // << " sf1: " << (bool)ephSF[sf1] << " "
411  // << (ephSF[sf1] ? ephSF[sf1]->getNumBits() : -1) << endl
412  // << " sf2: " << (bool)ephSF[sf2] << " "
413  // << (ephSF[sf2] ? ephSF[sf2]->getNumBits() : -1) << endl
414  // << " sf3: " << (bool)ephSF[sf3] << " "
415  // << (ephSF[sf3] ? ephSF[sf3]->getNumBits() : -1) << endl;
416  return true;
417  }
418  // Stop processing if we don't have consecutive subframes.
419  // BeiDou doesn't have anything like IODC/IODE to match
420  // subframes.
421  uint32_t sow1, sow2, sow3;
422  sow1 = ephSF[sf1]->asSignedDouble(fsbSOWm,fnbSOWm,fsbSOWl,fnbSOWl,fscSOW);
423  sow2 = ephSF[sf2]->asSignedDouble(fsbSOWm,fnbSOWm,fsbSOWl,fnbSOWl,fscSOW);
424  sow3 = ephSF[sf3]->asSignedDouble(fsbSOWm,fnbSOWm,fsbSOWl,fnbSOWl,fscSOW);
425  // 6 seconds per subframe
426  if (((sow3 - sow2) != 6) || ((sow2 - sow1) != 6))
427  {
428  // Even though the mismatch might be considered an error,
429  // we don't really want to mark it as such and rather
430  // consider it as a "valid" but unprocessable data set.
431  return true;
432  }
433  std::shared_ptr<BDSD1NavEph> eph = std::make_shared<BDSD1NavEph>();
434  // NavData
435  eph->timeStamp = ephSF[sf1]->getTransmitTime();
436  eph->signal = NavMessageID(key, NavMessageType::Ephemeris);
437  // cerr << "Ready for full D1NAV eph processing for " << (NavSignalID)key << endl;
438  // OrbitData = empty
439  // OrbitDataKepler
440  eph->xmitTime = eph->timeStamp;
441  // toe is split across two PackedNavBits objects so we have
442  // to do some extra work.
443  uint32_t toeI = ephSF[esitoeh]->asUnsignedLong(esbtoeh,enbtoeh,1);
444  toeI <<= enbtoem;
445  toeI += ephSF[esitoem]->asUnsignedLong(esbtoem,enbtoem,1);
446  toeI <<= enbtoel;
447  toeI += ephSF[esitoel]->asUnsignedLong(esbtoel,enbtoel,1);
448  double toe = ldexp((double)toeI, esctoe);
449  double toc = ephSF[esitocm]->asUnsignedDouble(esbtocm,enbtocm,
451  unsigned wn = ephSF[esiWN]->asUnsignedLong(esbWN,enbWN,escWN);
452  eph->Toe = BDSWeekSecond(wn,toe);
453  eph->Toc = BDSWeekSecond(wn,toc);
454  // health is set below
455  eph->Cuc = ephSF[esiCucm]->asSignedDouble(esbCucm,enbCucm,esbCucl,enbCucl,
456  escCuc);
457  // cout << "Cuc bits: " << hex
458  // << ephSF[esiCucm]->asUnsignedLong(esbCucm,enbCucm,esbCucl,enbCucl,
459  // escCuc)
460  // << dec << " " << eph->Cuc << endl;
461  eph->Cus = ephSF[esiCus]->asSignedDouble(esbCus,enbCus,escCus);
462  // cout << "Cus bits: " << hex
463  // << ephSF[esiCus]->asUnsignedLong(esbCus,enbCus,escCus)
464  // << dec << " " << eph->Cus << endl;
465  eph->Crc = ephSF[esiCrcm]->asSignedDouble(esbCrcm,enbCrcm,
467  eph->Crs = ephSF[esiCrsm]->asSignedDouble(esbCrsm,enbCrsm,
469  eph->Cic = ephSF[esiCicm]->asSignedDouble(esbCicm,enbCicm,
471  eph->Cis = ephSF[esiCism]->asSignedDouble(esbCism,enbCism,
473  eph->M0 = ephSF[esiM0m]->asDoubleSemiCircles(esbM0m,enbM0m,esbM0l,enbM0l,
474  escM0);
475  eph->dn = ephSF[esidnm]->asDoubleSemiCircles(esbdnm,enbdnm,esbdnl,enbdnl,
476  escdn);
477  // no dndot in BDS D1NAV
478  eph->ecc = ephSF[esiEccm]->asUnsignedDouble(esbEccm,enbEccm,
480  eph->Ahalf = ephSF[esiAhalfm]->asUnsignedDouble(esbAhalfm,enbAhalfm,
482  escAhalf);
483  eph->A = eph->Ahalf * eph->Ahalf;
484  // no Adot in BDS D1NAV
485  eph->OMEGA0=ephSF[esiOMEGA0m]->asDoubleSemiCircles(esbOMEGA0m,enbOMEGA0m,
487  escOMEGA0);
488  eph->i0 = ephSF[esii0m]->asDoubleSemiCircles(esbi0m,enbi0m,esbi0l,enbi0l,
489  esci0);
490  eph->w = ephSF[esiwm]->asDoubleSemiCircles(esbwm,enbwm,esbwl,enbwl,escw);
491  eph->OMEGAdot = ephSF[esiOMEGAdotm]->asDoubleSemiCircles(
493  eph->idot = ephSF[esiidotm]->asDoubleSemiCircles(esbidotm,enbidotm,
495  escidot);
496  eph->af0 = ephSF[esia0m]->asSignedDouble(esba0m,enba0m,esba0l,enba0l,
497  esca0);
498  eph->af1 = ephSF[esia1m]->asSignedDouble(esba1m,enba1m,esba1l,enba1l,
499  esca1);
500  eph->af2 = ephSF[esia2]->asSignedDouble(esba2,enba2,esca2);
501  // BDSD1NavData
502  eph->pre = ephSF[sf1]->asUnsignedLong(fsbPre,fnbPre,fscPre);
503  eph->rev = ephSF[sf1]->asUnsignedLong(fsbRev,fnbRev,fscRev);
504  eph->fraID = ephSF[sf1]->asUnsignedLong(fsbFraID,fnbFraID,fscFraID);
505  eph->sow = sow1;
506  // BDSD1NavEph
507  eph->pre2 = ephSF[sf2]->asUnsignedLong(fsbPre,fnbPre,fscPre);
508  eph->pre3 = ephSF[sf3]->asUnsignedLong(fsbPre,fnbPre,fscPre);
509  eph->rev2 = ephSF[sf2]->asUnsignedLong(fsbRev,fnbRev,fscRev);
510  eph->rev3 = ephSF[sf3]->asUnsignedLong(fsbRev,fnbRev,fscRev);
511  eph->sow2 = sow2;
512  eph->sow3 = sow3;
513  eph->satH1 = ephSF[esiSatH1]->asBool(esbSatH1);
514  eph->health = ((eph->satH1 == false) ? SVHealth::Healthy :
515  SVHealth::Unhealthy); // actually in OrbitDataKepler
516  eph->uraIndex = ephSF[esiURAI]->asUnsignedLong(esbURAI,enbURAI,escURAI);
517  eph->tgd1 = sf*ephSF[esiTGD1]->asSignedDouble(esbTGD1,enbTGD1,escTGD1);
518  eph->tgd2 = sf*ephSF[esiTGD2m]->asSignedDouble(esbTGD2m,enbTGD2m,
520  eph->aodc = ephSF[esiAODC]->asUnsignedLong(esbAODC,enbAODC,escAODC);
521  eph->aode = ephSF[esiAODE]->asUnsignedLong(esbAODE,enbAODE,escAODE);
522  eph->xmit2 = ephSF[sf2]->getTransmitTime();
523  eph->xmit3 = ephSF[sf3]->getTransmitTime();
524  eph->fixFit();
525  // cerr << "add D1NAV eph" << endl;
526  navOut.push_back(eph);
527  // Clear out the broadcast ephemeris that's been processed.
528  ephAcc.erase(key);
529  return true;
530  }
531 
532 
533  bool PNBBDSD1NavDataFactory ::
534  processSF5Pg7(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut)
535  {
536  if (PNBNavDataFactory::processHea || PNBNavDataFactory::processAlm)
537  {
538  makeHealth(navIn,navOut,1,h1sbHea1m,h1nbHea1m,h1sbHea1l,
539  h1nbHea1l);
540  makeHealth(navIn,navOut,2,h1sbHea2,h1nbHea2);
541  makeHealth(navIn,navOut,3,h1sbHea3m,h1nbHea3m,h1sbHea3l,
542  h1nbHea3l);
543  makeHealth(navIn,navOut,4,h1sbHea4,h1nbHea4);
544  makeHealth(navIn,navOut,5,h1sbHea5,h1nbHea5);
545  makeHealth(navIn,navOut,6,h1sbHea6m,h1nbHea6m,h1sbHea6l,
546  h1nbHea6l);
547  makeHealth(navIn,navOut,7,h1sbHea7,h1nbHea7);
548  makeHealth(navIn,navOut,8,h1sbHea8m,h1nbHea8m,h1sbHea8l,
549  h1nbHea8l);
550  makeHealth(navIn,navOut,9,h1sbHea9,h1nbHea9);
551  makeHealth(navIn,navOut,10,h1sbHea10,h1nbHea10);
552  makeHealth(navIn,navOut,11,h1sbHea11,h1nbHea11);
553  makeHealth(navIn,navOut,12,h1sbHea12,h1nbHea12);
554  makeHealth(navIn,navOut,13,h1sbHea13m,h1nbHea13m,h1sbHea13l,
555  h1nbHea13l);
556  makeHealth(navIn,navOut,14,h1sbHea14,h1nbHea14);
557  makeHealth(navIn,navOut,15,h1sbHea15m,h1nbHea15m,h1sbHea15l,
558  h1nbHea15l);
559  makeHealth(navIn,navOut,16,h1sbHea16,h1nbHea16);
560  makeHealth(navIn,navOut,17,h1sbHea17,h1nbHea17);
561  makeHealth(navIn,navOut,18,h1sbHea18m,h1nbHea18m,h1sbHea18l,
562  h1nbHea18l);
563  makeHealth(navIn,navOut,19,h1sbHea19,h1nbHea19);
564  SatID xmitSat(navIn->getsatSys());
565  NavSatelliteID key(0, xmitSat, navIn->getobsID(), navIn->getNavID());
566  finishAlm(false, key, navOut);
567  }
568  return true;
569  }
570 
571 
572  bool PNBBDSD1NavDataFactory ::
573  processSF5Pg8(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut)
574  {
575  if (PNBNavDataFactory::processHea || PNBNavDataFactory::processAlm)
576  {
577  makeHealth(navIn,navOut,20,h2sbHea20m,h2nbHea20m,h2sbHea20l,
578  h2nbHea20l);
579  makeHealth(navIn,navOut,21,h2sbHea21,h2nbHea21);
580  makeHealth(navIn,navOut,22,h2sbHea22m,h2nbHea22m,h2sbHea22l,
581  h2nbHea22l);
582  makeHealth(navIn,navOut,23,h2sbHea23,h2nbHea23);
583  makeHealth(navIn,navOut,24,h2sbHea24,h2nbHea24);
584  makeHealth(navIn,navOut,25,h2sbHea25m,h2nbHea25m,h2sbHea25l,
585  h2nbHea25l);
586  makeHealth(navIn,navOut,26,h2sbHea26,h2nbHea26);
587  makeHealth(navIn,navOut,27,h2sbHea27m,h2nbHea27m,h2sbHea27l,
588  h2nbHea27l);
589  makeHealth(navIn,navOut,28,h2sbHea28,h2nbHea28);
590  makeHealth(navIn,navOut,29,h2sbHea29,h2nbHea29);
591  makeHealth(navIn,navOut,30,h2sbHea30,h2nbHea30);
592  }
593  if (PNBNavDataFactory::processAlm)
594  {
595  // No checks for correct svid, just assume that the input
596  // data has already been checked (it will have been by
597  // addData).
598  SatID xmitSat(navIn->getsatSys());
599  ObsID oid(navIn->getobsID());
600  NavID navid(navIn->getNavID());
601  // Key used for data accumulating, which we don't separate by
602  // subject satellite.
603  NavSatelliteID key(0, xmitSat, oid, navid);
604  // Set the fullWNa now that we have something to go on,
605  // but only if we're processing almanac data, which is the
606  // only situation where it's used.
607  double toa = navIn->asUnsignedDouble(h2sbtoam,h2nbtoam,
609  unsigned long toamsb = navIn->asUnsignedLong(h2sbtoam,h2nbtoam,1);
610  unsigned long toalsb = navIn->asUnsignedLong(h2sbtoal,h2nbtoal,1);
611  unsigned long toaab = navIn->asUnsignedLong(h2sbtoam,h2nbtoam,
612  h2sbtoal,h2nbtoal,1);
613  unsigned shortWNa = navIn->asUnsignedLong(h2sbWNa,h2nbWNa,h2scWNa);
614  BDSWeekSecond ws(navIn->getTransmitTime());
615  long refWeek = ws.week;
616  unsigned fullWNa = timeAdjust8BitWeekRollover(shortWNa, refWeek);
617  fullWNaMap[xmitSat.id] = BDSWeekSecond(fullWNa, toa);
618  // cerr << "sfid=5 pnum=8 xmit=" << xmitSat.id << " toa=" << toa
619  // << "=" << toaab << " toa-msb=" << toamsb << " ("
620  // << std::bitset<h2nbtoam>(toamsb) << ") toa-lsb=" << toalsb
621  // << " (" << std::bitset<h2nbtoal>(toalsb) << ") fullWNa="
622  // << fullWNa << endl;
623  // cerr << " wna = " << fullWNa << " (" << shortWNa << ") refWeek = "
624  // << refWeek << " toa = " << toa << " key = " << key;
625  finishAlm(true, key, navOut);
626  }
627  return true;
628  }
629 
630 
631  bool PNBBDSD1NavDataFactory ::
632  processSF5Pg9(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut)
633  {
634  if (PNBNavDataFactory::processTim)
635  {
636  constexpr double sf = 0.1; // A0/A1 are scaled by 0.1
637  // This is my best guess at what is an appropriate
638  // reference time. The documentation is unclear.
642  BDSWeekSecond ref(navIn->getTransmitTime());
643  ref.sow = 0;
644  // BDT-GPS time offset
645  std::shared_ptr<BDSD1NavTimeOffset> gps =
646  std::make_shared<BDSD1NavTimeOffset>();
647  gps->timeStamp = navIn->getTransmitTime();
648  gps->signal = NavMessageID(
649  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
650  navIn->getobsID(), navIn->getNavID()),
651  NavMessageType::TimeOffset);
652  gps->tgt = TimeSystem::GPS; // by definition
653  gps->a0 = sf*navIn->asSignedDouble(csbA0GPS,cnbA0GPS,cscA0GPS);
654  gps->a1 = sf*navIn->asSignedDouble(csbA1GPSm,cnbA1GPSm,csbA1GPSl,
656  gps->refTime = ref;
657  // cerr << "add D1NAV time offset" << endl;
658  if (!factControl.bdsTimeZZfilt || (gps->a0 != 0.0) || (gps->a1 != 0.0))
659  {
660  navOut.push_back(gps);
661  }
662 
663  // BDT-Galileo time offset
664  std::shared_ptr<BDSD1NavTimeOffset> gal =
665  std::make_shared<BDSD1NavTimeOffset>();
666  gal->timeStamp = navIn->getTransmitTime();
667  gal->signal = NavMessageID(
668  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
669  navIn->getobsID(), navIn->getNavID()),
670  NavMessageType::TimeOffset);
671  gal->tgt = TimeSystem::GAL; // by definition
672  gal->a0 = sf*navIn->asSignedDouble(csbA0GALm,cnbA0GALm,csbA0GALl,
674  gal->a1 = sf*navIn->asSignedDouble(csbA1GAL,cnbA1GAL,cscA1GAL);
675  gal->refTime = ref;
676  // cerr << "add D1NAV time offset" << endl;
677  if (!factControl.bdsTimeZZfilt || (gal->a0 != 0.0) || (gal->a1 != 0.0))
678  {
679  navOut.push_back(gal);
680  }
681 
682  // BDT-GLONASS time offset
683  std::shared_ptr<BDSD1NavTimeOffset> glo =
684  std::make_shared<BDSD1NavTimeOffset>();
685  glo->timeStamp = navIn->getTransmitTime();
686  glo->signal = NavMessageID(
687  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
688  navIn->getobsID(), navIn->getNavID()),
689  NavMessageType::TimeOffset);
690  glo->tgt = TimeSystem::GLO; // by definition
691  glo->a0 = sf*navIn->asSignedDouble(csbA0GLO,cnbA0GLO,cscA0GLO);
692  glo->a1 = sf*navIn->asSignedDouble(csbA1GLOm,cnbA1GLOm,csbA1GLOl,
694  glo->refTime = ref;
695  // cerr << "add D1NAV time offset" << endl;
696  if (!factControl.bdsTimeZZfilt || (glo->a0 != 0.0) || (glo->a1 != 0.0))
697  {
698  navOut.push_back(glo);
699  }
700  }
701  return true;
702  }
703 
704 
705  bool PNBBDSD1NavDataFactory ::
706  processSF5Pg10(const PackedNavBitsPtr& navIn,NavDataPtrList& navOut)
707  {
708  if (PNBNavDataFactory::processTim)
709  {
710  std::shared_ptr<BDSD1NavTimeOffset> to =
711  std::make_shared<BDSD1NavTimeOffset>();
712  to->timeStamp = navIn->getTransmitTime();
713  to->signal = NavMessageID(
714  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
715  navIn->getobsID(), navIn->getNavID()),
716  NavMessageType::TimeOffset);
717  to->tgt = TimeSystem::UTC; // by definition
718  to->a0 = navIn->asSignedDouble(csbA0UTCm,cnbA0UTCm,csbA0UTCl,cnbA0UTCl,
719  cscA0UTC);
720  to->a1 = navIn->asSignedDouble(csbA1UTCm,cnbA1UTCm,csbA1UTCl,cnbA1UTCl,
721  cscA1UTC);
722  to->deltatLS = navIn->asLong(csbdtLSm,cnbdtLSm,csbdtLSl,cnbdtLSl,
723  cscdtLS);
724  // BDS D1 doesn't use tot or wnot
725  to->wnLSF = navIn->asUnsignedLong(csbWNlsf,cnbWNlsf,cscWNlsf);
726  to->dn = navIn->asUnsignedLong(csbDN,cnbDN,cscDN);
727  // adjust week numbers to full week
728  BDSWeekSecond ref(to->timeStamp);
729  long refWeek = ref.week;
730  to->wnLSF = timeAdjust8BitWeekRollover(to->wnLSF, refWeek);
731  // This is my best guess at what is an appropriate
732  // reference time. The documentation is unclear.
733  ref.sow = 0;
734  to->refTime = ref;
735  // DN appears to be intended to be in the range of 0-6,
736  // but that's just a guess as dumping the data over a
737  // couple of weeks in 2020 and 2021, it was always 6.
738  to->effTime = BDSWeekSecond(to->wnLSF,to->dn * 86400);
739  // cerr << "wnLSF=" << to->wnLSF << " dn=" << to->dn << " refTime=" << to->refTime << endl;
740  to->deltatLSF = navIn->asLong(csbdtLSF,cnbdtLSF,cscdtLSF);
741  // cerr << "add D1NAV time offset" << endl;
742  if (!factControl.bdsTimeZZfilt || (to->a0 != 0.0) || (to->a1 != 0.0))
743  {
744  navOut.push_back(to);
745  }
746  }
747  return true;
748  }
749 
750 
751  bool PNBBDSD1NavDataFactory ::
752  processSF5Pg24(const PackedNavBitsPtr& navIn,NavDataPtrList& navOut)
753  {
754  if (PNBNavDataFactory::processHea || PNBNavDataFactory::processAlm)
755  {
756  unsigned o = 0;
757  uint8_t amID = navIn->asUnsignedLong(h3sbAmID,h3nbAmID,h3scAmID);
758  // cerr << " AmID = " << (unsigned)amID << endl;
759  switch (amID)
760  {
761  case 0x00:
762  return true; // reserved values, ignore
763  case 0x01:
764  // already set to 0
765  break;
766  case 0x02:
767  o = 13;
768  break;
769  case 0x03:
770  o = 26;
771  break;
772  default:
773  GNSSTK_THROW(Exception("Invalid AmID value " +
774  StringUtils::asString((unsigned)amID)));
775  break;
776  }
777  makeHealth(navIn,navOut,o+31,h3sbHea31m,h3nbHea31m,h3sbHea31l,
778  h3nbHea31l);
779  makeHealth(navIn,navOut,o+32,h3sbHea32,h3nbHea32);
780  makeHealth(navIn,navOut,o+33,h3sbHea33m,h3nbHea33m,h3sbHea33l,
781  h3nbHea33l);
782  makeHealth(navIn,navOut,o+34,h3sbHea34,h3nbHea34);
783  makeHealth(navIn,navOut,o+35,h3sbHea35,h3nbHea35);
784  makeHealth(navIn,navOut,o+36,h3sbHea36m,h3nbHea36m,h3sbHea36l,
785  h3nbHea36l);
786  makeHealth(navIn,navOut,o+37,h3sbHea37,h3nbHea37);
787  // AmID b11 only uses 31-37
788  if (amID != 0x03)
789  {
790  makeHealth(navIn,navOut,o+38,h3sbHea38m,h3nbHea38m,h3sbHea38l,
791  h3nbHea38l);
792  makeHealth(navIn,navOut,o+39,h3sbHea39,h3nbHea39);
793  makeHealth(navIn,navOut,o+40,h3sbHea40,h3nbHea40);
794  makeHealth(navIn,navOut,o+41,h3sbHea41,h3nbHea41);
795  makeHealth(navIn,navOut,o+42,h3sbHea42,h3nbHea42);
796  makeHealth(navIn,navOut,o+43,h3sbHea43m,h3nbHea43m,h3sbHea43l,
797  h3nbHea43l);
798  }
799  SatID xmitSat(navIn->getsatSys());
800  NavSatelliteID key(0, xmitSat, navIn->getobsID(), navIn->getNavID());
801  finishAlm(false, key, navOut);
802  }
803  return true;
804  }
805 
806 
807  void PNBBDSD1NavDataFactory ::
808  makeHealth(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut,
809  unsigned long subjID,
810  unsigned startBit1, unsigned numBits1,
811  unsigned startBit2, unsigned numBits2)
812  {
813  std::shared_ptr<BDSD1NavHealth> hea = std::make_shared<BDSD1NavHealth>();
814  hea->timeStamp = navIn->getTransmitTime();
815  hea->signal = NavMessageID(
816  NavSatelliteID(subjID, navIn->getsatSys(), navIn->getobsID(),
817  navIn->getNavID()),
818  NavMessageType::Health);
819  // health is all "scaled" by 1, so just use the same constant.
820  if (numBits2 > 0)
821  {
822  hea->svHealth = navIn->asUnsignedLong(startBit1, numBits1, startBit2,
823  numBits2, h2scHea20);
824  }
825  else
826  {
827  hea->svHealth = navIn->asUnsignedLong(startBit1, numBits1, h2scHea20);
828  }
829  heaAcc[hea->signal] = hea->svHealth;
830  // cerr << "heaAcc[" << hea->signal << "]=" << hex << hea->svHealth << dec << endl;
831  if (PNBNavDataFactory::processHea)
832  {
833  navOut.push_back(hea);
834  }
835  }
836 
837 
838  bool PNBBDSD1NavDataFactory ::
839  isAlmDefault(const PackedNavBitsPtr& navIn)
840  {
841  // Create a PNB with the same metadata, but all 0s, which is
842  // how the BeiDou default pages appear (except words 1-2
843  // which we ignore).
844  static const PackedNavBits defPage(navIn->getsatSys(), navIn->getobsID(),
845  navIn->getNavID(), navIn->getRxID(),
846  navIn->getTransmitTime(),
847  navIn->getNumBits(), false);
848  // Start match at bit 90 which is the first bit of word 3,
849  // and end at bit 289 which excludes the AmEpID bits and
850  // parity in word 10.
851  return defPage.matchBits(*navIn, 90, 289);
852  }
853 
854 
855  void PNBBDSD1NavDataFactory ::
856  resetState()
857  {
858  fullWNaMap.clear();
859  almAcc.clear();
860  ephAcc.clear();
861  }
862 
863 
864  void PNBBDSD1NavDataFactory ::
865  finishAlm(bool fromWNa, const NavSatelliteID& key, NavDataPtrList& navOut)
866  {
867  AlmPtrList& ndpl(almAcc[key]);
868  // cerr << "almAcc[key] size before = " << ndpl.size() << endl;
869  for (auto i = ndpl.begin(); i != ndpl.end();)
870  {
871  if (finishAlm(*i, fromWNa, key, navOut))
872  {
873  i = ndpl.erase(i);
874  }
875  else
876  {
877  ++i;
878  }
879  }
880  // cerr << "almAcc[key] size after = " << ndpl.size() << endl;
881  }
882 
883 
884  bool PNBBDSD1NavDataFactory ::
885  finishAlm(PNBBDSD1NavDataFactory::AlmPtr& alm, bool fromWNa,
886  const NavSatelliteID& key, NavDataPtrList& navOut)
887  {
888  if (alm->isDefault && (heaAcc.find(alm->signal) != heaAcc.end()))
889  {
890  // Don't produce this almanac if the user only wants valid data.
891  if (navValidity != NavValidityType::ValidOnly)
892  {
893  alm->Toe = alm->Toc = gnsstk::BDSWeekSecond(0,0);
894  alm->healthBits = heaAcc[alm->signal];
896  alm->health = ((alm->healthBits == 0) ? SVHealth::Healthy :
897  SVHealth::Unhealthy);
898  alm->fixFit();
899  // cerr << "add D1NAV alm (2a) " << alm->signal << " toa=" << alm->toa << endl;
900  navOut.push_back(alm);
901  }
902  // Always return true so that the default data will be
903  // handled as if it were produced, even if it wasn't.
904  // IOW, don't accumulate default pages needlessly.
905  return true;
906  }
907  else if ((fullWNaMap.find(key.xmitSat.id) != fullWNaMap.end()) &&
908  (fullWNaMap[key.xmitSat.id].sow == alm->toa) &&
909  (heaAcc.find(alm->signal) != heaAcc.end()))
910  {
911  // Produce a complete almanac when WNa and health are available.
912  alm->Toe = alm->Toc = fullWNaMap[key.xmitSat.id];
913  alm->healthBits = heaAcc[alm->signal];
915  alm->health = ((alm->healthBits == 0) ? SVHealth::Healthy :
916  SVHealth::Unhealthy);
917  alm->fixFit();
918  // cerr << "add D1NAV alm (2b) " << alm->signal << " toa=" << alm->toa << endl;
919  navOut.push_back(alm);
920  return true;
921  }
922  else if (fromWNa &&
923  (fullWNaMap.find(key.xmitSat.id) != fullWNaMap.end()) &&
924  (fullWNaMap[key.xmitSat.id].sow != alm->toa))
925  {
926  // We do NOT produce an almanac in this case because the
927  // lack of a proper time stamp breaks the NavStore by
928  // causing an exception to be thrown in CommonTime.
929  // Always return true so that the default data will be
930  // handled as if it were produced, even though it wasn't.
931  // cerr << "discard D1NAV alm (2c) " << alm->signal << " toa=" << alm->toa << endl;
932  return true;
933  }
934  else
935  {
936  // if (alm->isDefault)
937  // cerr << "default alm" << endl;
938  // if (fromWNa)
939  // cerr << "updating from SF5p8" << endl;
940  // if (fullWNaMap.find(key.xmitSat.id) == fullWNaMap.end())
941  // cerr << "alm missing WNa for " << key.xmitSat.id << endl;
942  // else if (fullWNaMap[key.xmitSat.id].sow != alm->toa)
943  // cerr << "alm toa mismatch " << fullWNaMap[key.xmitSat.id].sow << " != " << alm->toa << endl;
944  // if (heaAcc.find(alm->signal) == heaAcc.end())
945  // cerr << "alm missing health" << endl;
946  return false;
947  }
948  }
949 
950 
951  void PNBBDSD1NavDataFactory ::
952  dumpState(std::ostream& s)
953  const
954  {
955  unsigned long total = 0;
956  s << "fullWNaMap.size() = " << fullWNaMap.size() << endl
957  << "almAcc.size() = " << almAcc.size() << endl;
958  for (const auto& i : almAcc)
959  {
960  total += i.second.size();
961  for (const auto& p : i.second)
962  {
963  s << p->signal << " toa=" << p->toa << endl;
964  }
965  // s << " almAcc[" << i.first << "].size() = " << i.second.size()
966  // << endl;
967  }
968  s << "almAcc total size = " << total << endl
969  << "ephAcc.size() = " << ephAcc.size() << endl;
970  for (const auto& i : ephAcc)
971  {
972  s << " ephAcc[" << i.first << "].size() = " << i.second.size()
973  << endl;
974  for (unsigned j = 0; j < i.second.size(); j++)
975  {
976  s << " ephAcc[" << i.first << "][" << j << "] = ";
977  if (!i.second[j])
978  s << "unset";
979  else
980  s << i.second[j]->getNumBits() << " bits";
981  s << endl;
982  }
983  }
984  }
985 
986 } // namespace gnsstk
gnsstk::bds::ascw
@ ascw
Definition: BDSD1Bits.hpp:162
gnsstk::bds::cscDN
@ cscDN
Definition: BDSD1Bits.hpp:1041
gnsstk::bds::ascAmEpID
@ ascAmEpID
Definition: BDSD1Bits.hpp:184
gnsstk::bds::esbwm
@ esbwm
Definition: BDSD1Bits.hpp:577
gnsstk::bds::esbTGD1
@ esbTGD1
Definition: BDSD1Bits.hpp:245
gnsstk::bds::esiCrcm
@ esiCrcm
Definition: BDSD1Bits.hpp:431
gnsstk::bds::enbtoeh
@ enbtoeh
Definition: BDSD1Bits.hpp:475
gnsstk::bds::h3nbHea35
@ h3nbHea35
Definition: BDSD1Bits.hpp:866
example3.svid
svid
Definition: example3.py:19
gnsstk::bds::csbA0GALm
@ csbA0GALm
Gal A0 time offset term MSB.
Definition: BDSD1Bits.hpp:974
gnsstk::bds::escM0
@ escM0
Definition: BDSD1Bits.hpp:396
gnsstk::bds::h3nbHea38m
@ h3nbHea38m
Definition: BDSD1Bits.hpp:885
gnsstk::bds::h1sbHea1l
@ h1sbHea1l
Definition: BDSD1Bits.hpp:606
gnsstk::bds::h3nbHea33l
@ h3nbHea33l
Definition: BDSD1Bits.hpp:859
gnsstk::NavMessageID
Class used to identify/categorize navigation message data.
Definition: NavMessageID.hpp:52
gnsstk::bds::esbtoeh
@ esbtoeh
Definition: BDSD1Bits.hpp:474
gnsstk::bds::h2sbHea27l
@ h2sbHea27l
PRN 27 health LSBs.
Definition: BDSD1Bits.hpp:793
gnsstk::bds::h1sbHea19
@ h1sbHea19
Definition: BDSD1Bits.hpp:723
gnsstk::bds::h2sbHea24
@ h2sbHea24
PRN 24 health.
Definition: BDSD1Bits.hpp:766
gnsstk::bds::h1nbHea19
@ h1nbHea19
Definition: BDSD1Bits.hpp:724
gnsstk::bds::esbCrcl
@ esbCrcl
Definition: BDSD1Bits.hpp:442
gnsstk::bds::anbAmEpID
@ anbAmEpID
Definition: BDSD1Bits.hpp:183
gnsstk::bds::h2sbHea21
@ h2sbHea21
PRN 21 health.
Definition: BDSD1Bits.hpp:747
gnsstk::bds::escAhalf
@ escAhalf
Definition: BDSD1Bits.hpp:462
gnsstk::bds::h1nbHea17
@ h1nbHea17
Definition: BDSD1Bits.hpp:709
gnsstk::bds::h1nbHea5
@ h1nbHea5
Definition: BDSD1Bits.hpp:629
gnsstk::bds::fnbFraID
@ fnbFraID
Frame ID number of bits.
Definition: BDSD1Bits.hpp:61
gnsstk::bds::h1sbHea9
@ h1sbHea9
Definition: BDSD1Bits.hpp:658
gnsstk::bds::esbtocm
@ esbtocm
Definition: BDSD1Bits.hpp:231
gnsstk::SatID::id
int id
Satellite identifier, e.g. PRN.
Definition: SatID.hpp:154
gnsstk::bds::fsbPre
@ fsbPre
Preamble start bit.
Definition: BDSD1Bits.hpp:52
gnsstk::bds::escAlpha1
@ escAlpha1
Definition: BDSD1Bits.hpp:271
gnsstk::PackedNavBitsPtr
std::shared_ptr< PackedNavBits > PackedNavBitsPtr
Managed pointer for passing PackedNavBits around.
Definition: PackedNavBits.hpp:66
gnsstk::bds::h1sbHea6m
@ h1sbHea6m
Definition: BDSD1Bits.hpp:632
gnsstk::bds::h2nbHea22m
@ h2nbHea22m
Definition: BDSD1Bits.hpp:752
gnsstk::MIN_MEO_BDS
const long MIN_MEO_BDS
The first ranging code number for BeiDou MEO/IGSO satellites.
Definition: GNSSconstants.hpp:213
gnsstk::bds::esiwm
@ esiwm
Definition: BDSD1Bits.hpp:576
gnsstk::bds::h1nbHea18l
@ h1nbHea18l
Definition: BDSD1Bits.hpp:721
BDSD1Bits.hpp
gnsstk::bds::escCus
@ escCus
Definition: BDSD1Bits.hpp:429
gnsstk::bds::escCuc
@ escCuc
Definition: BDSD1Bits.hpp:382
gnsstk::bds::esbAhalfl
@ esbAhalfl
Definition: BDSD1Bits.hpp:470
gnsstk::bds::esbM0l
@ esbM0l
Definition: BDSD1Bits.hpp:404
gnsstk::bds::cnbA1GLOm
@ cnbA1GLOm
Definition: BDSD1Bits.hpp:998
gnsstk::bds::enba1m
@ enba1m
Definition: BDSD1Bits.hpp:347
gnsstk::bds::h3sbHea33l
@ h3sbHea33l
Definition: BDSD1Bits.hpp:858
gnsstk::bds::h2scHea20
@ h2scHea20
Definition: BDSD1Bits.hpp:738
gnsstk::bds::ascEcc
@ ascEcc
Definition: BDSD1Bits.hpp:132
gnsstk::bds::esbCrcm
@ esbCrcm
Definition: BDSD1Bits.hpp:432
gnsstk::bds::esiURAI
@ esiURAI
User range accuracy index.
Definition: BDSD1Bits.hpp:215
gnsstk::bds::esbEccm
@ esbEccm
Definition: BDSD1Bits.hpp:408
gnsstk::bds::esca1
@ esca1
Definition: BDSD1Bits.hpp:348
gnsstk::bds::h3sbHea39
@ h3sbHea39
Definition: BDSD1Bits.hpp:895
gnsstk::bds::anbA0
@ anbA0
Definition: BDSD1Bits.hpp:112
gnsstk::bds::h3sbHea40
@ h3sbHea40
Definition: BDSD1Bits.hpp:899
gnsstk::bds::h2nbHea25l
@ h2nbHea25l
Definition: BDSD1Bits.hpp:779
gnsstk::bds::h2sbWNa
@ h2sbWNa
Almanac week.
Definition: BDSD1Bits.hpp:812
gnsstk::bds::esbCucl
@ esbCucl
Definition: BDSD1Bits.hpp:390
gnsstk::bds::h1sbHea14
@ h1sbHea14
Definition: BDSD1Bits.hpp:689
gnsstk::bds::csbA1GLOm
@ csbA1GLOm
GLO A0 time offset term MSB.
Definition: BDSD1Bits.hpp:997
gnsstk::bds::asbwm
@ asbwm
little omega MSBs
Definition: BDSD1Bits.hpp:160
gnsstk::bds::escBeta2
@ escBeta2
Definition: BDSD1Bits.hpp:310
gnsstk::PNBBDSD1NavDataFactory::AlmPtr
std::shared_ptr< BDSD1NavAlm > AlmPtr
Alias for almanac objects.
Definition: PNBBDSD1NavDataFactory.hpp:208
gnsstk::bds::h1nbHea18m
@ h1nbHea18m
Definition: BDSD1Bits.hpp:713
gnsstk::bds::h3sbHea43l
@ h3sbHea43l
Definition: BDSD1Bits.hpp:923
gnsstk::bds::esia0m
@ esia0m
Clock correction 0th order term MSB.
Definition: BDSD1Bits.hpp:331
gnsstk::bds::h2sbHea25l
@ h2sbHea25l
PRN 25 health LSBs.
Definition: BDSD1Bits.hpp:778
gnsstk::bds::enbtocm
@ enbtocm
Definition: BDSD1Bits.hpp:232
gnsstk::bds::h3sbHea36l
@ h3sbHea36l
Definition: BDSD1Bits.hpp:877
gnsstk::bds::cnbA1GPSm
@ cnbA1GPSm
Definition: BDSD1Bits.hpp:964
gnsstk::bds::asbA0
@ asbA0
Clock correction.
Definition: BDSD1Bits.hpp:111
gnsstk::bds::cnbA0GALm
@ cnbA0GALm
Definition: BDSD1Bits.hpp:975
gnsstk::bds::esba2
@ esba2
Definition: BDSD1Bits.hpp:327
gnsstk::bds::esiCicm
@ esiCicm
Definition: BDSD1Bits.hpp:506
gnsstk::bds::h3nbHea43l
@ h3nbHea43l
Definition: BDSD1Bits.hpp:924
gnsstk::bds::asbOMEGA0m
@ asbOMEGA0m
OMEGA0 MSBs.
Definition: BDSD1Bits.hpp:119
gnsstk::bds::h3sbHea41
@ h3sbHea41
Definition: BDSD1Bits.hpp:907
gnsstk::bds::asbAhalfm
@ asbAhalfm
Semi-major axis**0.5 MSBs.
Definition: BDSD1Bits.hpp:92
gnsstk::bds::esba1l
@ esba1l
Definition: BDSD1Bits.hpp:356
gnsstk::bds::esbCism
@ esbCism
Definition: BDSD1Bits.hpp:535
gnsstk::bds::h3sbAmID
@ h3sbAmID
Definition: BDSD1Bits.hpp:926
gnsstk::bds::cnbA1UTCm
@ cnbA1UTCm
Definition: BDSD1Bits.hpp:1033
gnsstk::bds::anbEcc
@ anbEcc
Definition: BDSD1Bits.hpp:131
gnsstk::bds::h3sbHea38l
@ h3sbHea38l
Definition: BDSD1Bits.hpp:892
gnsstk::bds::h3sbHea34
@ h3sbHea34
Definition: BDSD1Bits.hpp:861
gnsstk::bds::h2nbHea23
@ h2nbHea23
Definition: BDSD1Bits.hpp:763
gnsstk::bds::enbCus
@ enbCus
Definition: BDSD1Bits.hpp:428
gnsstk::bds::enbOMEGA0l
@ enbOMEGA0l
Definition: BDSD1Bits.hpp:574
gnsstk::NavSatelliteID
Definition: NavSatelliteID.hpp:57
gnsstk::bds::h1nbHea4
@ h1nbHea4
Definition: BDSD1Bits.hpp:625
BDSD1NavIono.hpp
gnsstk::bds::esbidotl
@ esbidotl
Definition: BDSD1Bits.hpp:559
gnsstk::bds::h2nbHea28
@ h2nbHea28
Definition: BDSD1Bits.hpp:797
gnsstk::bds::escw
@ escw
Definition: BDSD1Bits.hpp:579
gnsstk::bds::h1nbHea6m
@ h1nbHea6m
Definition: BDSD1Bits.hpp:633
gnsstk::bds::cscA1GLO
@ cscA1GLO
Scale factor is actually .1.
Definition: BDSD1Bits.hpp:999
gnsstk::bds::h3nbHea36l
@ h3nbHea36l
Definition: BDSD1Bits.hpp:878
gnsstk::bds::escCic
@ escCic
Definition: BDSD1Bits.hpp:509
gnsstk::bds::enbBeta0m
@ enbBeta0m
Definition: BDSD1Bits.hpp:290
gnsstk::bds::asbA1
@ asbA1
Clock drift correction.
Definition: BDSD1Bits.hpp:107
gnsstk::bds::esiAhalfm
@ esiAhalfm
Definition: BDSD1Bits.hpp:459
gnsstk::bds::escAODC
@ escAODC
Definition: BDSD1Bits.hpp:213
gnsstk::bds::fsbFraID
@ fsbFraID
Frame ID start bit.
Definition: BDSD1Bits.hpp:60
gnsstk::bds::h2nbHea20m
@ h2nbHea20m
Definition: BDSD1Bits.hpp:737
gnsstk::Exception::what
std::string what() const
Dump to a string.
Definition: Exception.cpp:193
gnsstk::bds::cscA1GAL
@ cscA1GAL
Scale factor is actually .1.
Definition: BDSD1Bits.hpp:987
gnsstk::bds::esia2
@ esia2
Clock correction 2nd order term.
Definition: BDSD1Bits.hpp:326
gnsstk::bds::esiWN
@ esiWN
Reference week number.
Definition: BDSD1Bits.hpp:225
example5.oid
oid
Definition: example5.py:29
gnsstk::bds::asbOMEGAdotl
@ asbOMEGAdotl
OMEGA dot LSBs.
Definition: BDSD1Bits.hpp:157
gnsstk::SatID
Definition: SatID.hpp:89
gnsstk::NavDataPtrList
std::list< NavDataPtr > NavDataPtrList
Definition: NavData.hpp:75
gnsstk::bds::esbTGD2l
@ esbTGD2l
Definition: BDSD1Bits.hpp:260
gnsstk::bds::h2sbtoam
@ h2sbtoam
Almanac ref SOW MSBs.
Definition: BDSD1Bits.hpp:816
gnsstk::bds::enbM0m
@ enbM0m
Definition: BDSD1Bits.hpp:395
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::bds::enbEccm
@ enbEccm
Definition: BDSD1Bits.hpp:409
gnsstk::bds::h1nbHea3l
@ h1nbHea3l
Definition: BDSD1Bits.hpp:622
gnsstk::bds::enbBeta3l
@ enbBeta3l
Definition: BDSD1Bits.hpp:324
gnsstk::bds::h1sbHea7
@ h1sbHea7
Definition: BDSD1Bits.hpp:643
gnsstk::bds::esia1m
@ esia1m
Clock correction 1st order term MSB.
Definition: BDSD1Bits.hpp:345
gnsstk::bds::enbOMEGA0m
@ enbOMEGA0m
Definition: BDSD1Bits.hpp:564
gnsstk::bds::esbtocl
@ esbtocl
Definition: BDSD1Bits.hpp:241
gnsstk::bds::cscA0GPS
@ cscA0GPS
Scale factor is actually .1.
Definition: BDSD1Bits.hpp:961
gnsstk::bds::h1sbHea5
@ h1sbHea5
Definition: BDSD1Bits.hpp:628
gnsstk::bds::h1sbHea16
@ h1sbHea16
Definition: BDSD1Bits.hpp:704
gnsstk::bds::h3nbHea37
@ h3nbHea37
Definition: BDSD1Bits.hpp:881
gnsstk::bds::anbOMEGA0m
@ anbOMEGA0m
Definition: BDSD1Bits.hpp:120
gnsstk::bds::esbCicm
@ esbCicm
Definition: BDSD1Bits.hpp:507
gnsstk::bds::esiTGD1
@ esiTGD1
Group delay differential #1.
Definition: BDSD1Bits.hpp:244
gnsstk::bds::enbAhalfm
@ enbAhalfm
Definition: BDSD1Bits.hpp:461
gnsstk::bds::esbtoel
@ esbtoel
Definition: BDSD1Bits.hpp:489
gnsstk::bds::enbOMEGAdotm
@ enbOMEGAdotm
Definition: BDSD1Bits.hpp:522
gnsstk::bds::enbAODE
@ enbAODE
Definition: BDSD1Bits.hpp:361
gnsstk::bds::cnbA0UTCl
@ cnbA0UTCl
Definition: BDSD1Bits.hpp:1030
gnsstk::bds::h1nbHea14
@ h1nbHea14
Definition: BDSD1Bits.hpp:690
gnsstk::bds::h3nbHea38l
@ h3nbHea38l
Definition: BDSD1Bits.hpp:893
gnsstk::bds::h2nbHea30
@ h2nbHea30
Definition: BDSD1Bits.hpp:809
gnsstk::bds::h3nbHea41
@ h3nbHea41
Definition: BDSD1Bits.hpp:908
gnsstk::bds::esci0
@ esci0
Definition: BDSD1Bits.hpp:495
gnsstk::bds::cscA1UTC
@ cscA1UTC
Definition: BDSD1Bits.hpp:1034
gnsstk::bds::enbdnm
@ enbdnm
Definition: BDSD1Bits.hpp:367
gnsstk::bds::escTGD2
@ escTGD2
Actual scale is 0.1 per 5.2.4.8.
Definition: BDSD1Bits.hpp:252
gnsstk::bds::esba0l
@ esba0l
Definition: BDSD1Bits.hpp:342
gnsstk::bds::esbCisl
@ esbCisl
Definition: BDSD1Bits.hpp:545
gnsstk::bds::esidnm
@ esidnm
Definition: BDSD1Bits.hpp:365
gnsstk::bds::esbBeta0m
@ esbBeta0m
Definition: BDSD1Bits.hpp:289
gnsstk::bds::h3sbHea38m
@ h3sbHea38m
Definition: BDSD1Bits.hpp:884
gnsstk::bds::esbCus
@ esbCus
Definition: BDSD1Bits.hpp:427
gnsstk::bds::h2sbHea20m
@ h2sbHea20m
PRN 20 health MSBs.
Definition: BDSD1Bits.hpp:736
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::bds::fscPre
@ fscPre
Preamble scale factor.
Definition: BDSD1Bits.hpp:54
gnsstk::bds::h2nbHea29
@ h2nbHea29
Definition: BDSD1Bits.hpp:801
gnsstk::bds::csbdtLSm
@ csbdtLSm
dtLS MSBs
Definition: BDSD1Bits.hpp:1010
gnsstk::bds::esbAODE
@ esbAODE
Definition: BDSD1Bits.hpp:360
gnsstk::bds::asbOMEGA0l
@ asbOMEGA0l
OMEGA0 LSBs.
Definition: BDSD1Bits.hpp:127
gnsstk::bds::csbA0GALl
@ csbA0GALl
Gal A0 time offset term LSB.
Definition: BDSD1Bits.hpp:982
gnsstk::bds::anbAhalfl
@ anbAhalfl
Definition: BDSD1Bits.hpp:101
gnsstk::bds::esbOMEGA0l
@ esbOMEGA0l
Definition: BDSD1Bits.hpp:573
gnsstk::bds::h2nbHea26
@ h2nbHea26
Definition: BDSD1Bits.hpp:782
gnsstk::bds::enbAlpha3
@ enbAlpha3
Definition: BDSD1Bits.hpp:285
gnsstk::bds::escTGD1
@ escTGD1
Actual scale is 0.1 per 5.2.4.8.
Definition: BDSD1Bits.hpp:247
gnsstk::bds::escURAI
@ escURAI
Definition: BDSD1Bits.hpp:218
gnsstk::bds::escBeta1
@ escBeta1
Definition: BDSD1Bits.hpp:305
gnsstk::bds::escBeta0
@ escBeta0
Definition: BDSD1Bits.hpp:291
gnsstk::bds::esbWN
@ esbWN
Definition: BDSD1Bits.hpp:226
gnsstk::bds::h3nbHea36m
@ h3nbHea36m
Definition: BDSD1Bits.hpp:870
gnsstk::bds::h1nbHea1m
@ h1nbHea1m
Definition: BDSD1Bits.hpp:599
gnsstk::bds::esbBeta2
@ esbBeta2
Definition: BDSD1Bits.hpp:308
gnsstk::Exception
Definition: Exception.hpp:151
gnsstk::bds::esbEccl
@ esbEccl
Definition: BDSD1Bits.hpp:418
gnsstk::bds::cnbWNlsf
@ cnbWNlsf
Definition: BDSD1Bits.hpp:1022
gnsstk::bds::cscA0UTC
@ cscA0UTC
Definition: BDSD1Bits.hpp:1027
gnsstk::bds::h1nbHea6l
@ h1nbHea6l
Definition: BDSD1Bits.hpp:641
gnsstk::bds::esiEccm
@ esiEccm
Definition: BDSD1Bits.hpp:407
gnsstk::bds::h2nbtoam
@ h2nbtoam
Definition: BDSD1Bits.hpp:817
gnsstk::bds::h2sbHea22m
@ h2sbHea22m
PRN 22 health MSBs.
Definition: BDSD1Bits.hpp:751
gnsstk::bds::esbBeta3m
@ esbBeta3m
Definition: BDSD1Bits.hpp:313
gnsstk::bds::asbAmEpID
@ asbAmEpID
AmEpID for sat ID.
Definition: BDSD1Bits.hpp:182
gnsstk::bds::cnbA0GPS
@ cnbA0GPS
Definition: BDSD1Bits.hpp:960
gnsstk::bds::anbdil
@ anbdil
Definition: BDSD1Bits.hpp:143
gnsstk::bds::fscSOW
@ fscSOW
SOW scale factor.
Definition: BDSD1Bits.hpp:66
gnsstk::bds::cnbDN
@ cnbDN
Definition: BDSD1Bits.hpp:1040
gnsstk::bds::esiAODE
@ esiAODE
Age of data - ephemeris.
Definition: BDSD1Bits.hpp:359
gnsstk::bds::ascM0
@ ascM0
Definition: BDSD1Bits.hpp:173
gnsstk::bds::csbdtLSF
@ csbdtLSF
dtLSF
Definition: BDSD1Bits.hpp:1017
gnsstk::bds::cscA0GAL
@ cscA0GAL
Scale factor is actually .1.
Definition: BDSD1Bits.hpp:976
gnsstk::bds::escAODE
@ escAODE
Definition: BDSD1Bits.hpp:362
gnsstk::bds::h3sbHea37
@ h3sbHea37
Definition: BDSD1Bits.hpp:880
gnsstk::bds::h1sbHea2
@ h1sbHea2
Definition: BDSD1Bits.hpp:609
gnsstk::bds::ascAhalf
@ ascAhalf
Definition: BDSD1Bits.hpp:94
gnsstk::bds::esiCrsm
@ esiCrsm
Definition: BDSD1Bits.hpp:445
gnsstk::bds::esbAlpha0
@ esbAlpha0
Definition: BDSD1Bits.hpp:264
gnsstk::bds::h1nbHea12
@ h1nbHea12
Definition: BDSD1Bits.hpp:675
gnsstk::bds::enbdnl
@ enbdnl
Definition: BDSD1Bits.hpp:377
gnsstk::bds::esbwl
@ esbwl
Definition: BDSD1Bits.hpp:587
gnsstk::bds::h2sbtoal
@ h2sbtoal
Almanac ref SOW LSBs.
Definition: BDSD1Bits.hpp:824
gnsstk::bds::h1nbHea1l
@ h1nbHea1l
Definition: BDSD1Bits.hpp:607
gnsstk::bds::esbdnm
@ esbdnm
Definition: BDSD1Bits.hpp:366
gnsstk::bds::esiAODC
@ esiAODC
AODC.
Definition: BDSD1Bits.hpp:210
gnsstk::bds::h3nbHea32
@ h3nbHea32
Definition: BDSD1Bits.hpp:847
gnsstk::bds::h1nbHea3m
@ h1nbHea3m
Definition: BDSD1Bits.hpp:614
gnsstk::bds::enbURAI
@ enbURAI
Definition: BDSD1Bits.hpp:217
gnsstk::bds::h2sbHea27m
@ h2sbHea27m
PRN 27 health MSBs.
Definition: BDSD1Bits.hpp:785
gnsstk::bds::anbwl
@ anbwl
Definition: BDSD1Bits.hpp:169
gnsstk::bds::enbCrsl
@ enbCrsl
Definition: BDSD1Bits.hpp:457
gnsstk::bds::enbi0m
@ enbi0m
Definition: BDSD1Bits.hpp:494
gnsstk::bds::esbOMEGA0m
@ esbOMEGA0m
Definition: BDSD1Bits.hpp:563
gnsstk::bds::h2sctoa
@ h2sctoa
Definition: BDSD1Bits.hpp:818
gnsstk::bds::csbA1GPSm
@ csbA1GPSm
GPS A1 time offset term MSB.
Definition: BDSD1Bits.hpp:963
gnsstk::bds::sf2
@ sf2
Definition: BDSD1Bits.hpp:192
gnsstk::bds::enbAhalfl
@ enbAhalfl
Definition: BDSD1Bits.hpp:471
gnsstk::bds::h1sbHea1m
@ h1sbHea1m
Definition: BDSD1Bits.hpp:598
gnsstk::bds::escOMEGA0
@ escOMEGA0
Definition: BDSD1Bits.hpp:565
gnsstk::bds::enbTGD2m
@ enbTGD2m
Definition: BDSD1Bits.hpp:251
gnsstk::bds::h1sbHea4
@ h1sbHea4
Definition: BDSD1Bits.hpp:624
gnsstk::bds::h1nbHea11
@ h1nbHea11
Definition: BDSD1Bits.hpp:671
gnsstk::bds::h3nbHea34
@ h3nbHea34
Definition: BDSD1Bits.hpp:862
gnsstk::bds::fsbSOWm
@ fsbSOWm
SOW MSBs start bit.
Definition: BDSD1Bits.hpp:64
gnsstk::bds::escAlpha2
@ escAlpha2
Definition: BDSD1Bits.hpp:281
gnsstk::bds::csbA1GLOl
@ csbA1GLOl
GLO A0 time offset term LSB.
Definition: BDSD1Bits.hpp:1005
gnsstk::bds::h3nbHea31m
@ h3nbHea31m
Definition: BDSD1Bits.hpp:836
gnsstk::bds::h1nbHea10
@ h1nbHea10
Definition: BDSD1Bits.hpp:663
gnsstk::bds
Definition: BDSconsts.hpp:48
gnsstk::ObsID
Definition: ObsID.hpp:82
gnsstk::bds::asbwl
@ asbwl
little omega LSBs
Definition: BDSD1Bits.hpp:168
gnsstk::bds::h2sbHea23
@ h2sbHea23
PRN 23 health.
Definition: BDSD1Bits.hpp:762
gnsstk::bds::escOMEGAdot
@ escOMEGAdot
Definition: BDSD1Bits.hpp:523
gnsstk::bds::h2nbHea27m
@ h2nbHea27m
Definition: BDSD1Bits.hpp:786
gnsstk::bds::esbSatH1
@ esbSatH1
Definition: BDSD1Bits.hpp:206
gnsstk::bds::h3nbHea40
@ h3nbHea40
Definition: BDSD1Bits.hpp:900
gnsstk::bds::anbOMEGAdotl
@ anbOMEGAdotl
Definition: BDSD1Bits.hpp:158
gnsstk::bds::h3sbHea32
@ h3sbHea32
Definition: BDSD1Bits.hpp:846
gnsstk::bds::esbtoem
@ esbtoem
Definition: BDSD1Bits.hpp:480
gnsstk::bds::esitoel
@ esitoel
Definition: BDSD1Bits.hpp:488
gnsstk::NavSatelliteID::sat
SatID sat
ID of satellite to which the nav data applies.
Definition: NavSatelliteID.hpp:169
gnsstk::bds::enbidotl
@ enbidotl
Definition: BDSD1Bits.hpp:560
gnsstk::bds::h1sbHea11
@ h1sbHea11
Definition: BDSD1Bits.hpp:670
gnsstk::bds::anbA1
@ anbA1
Definition: BDSD1Bits.hpp:108
gnsstk::bds::cscdtLSF
@ cscdtLSF
Definition: BDSD1Bits.hpp:1019
gnsstk::bds::esitoem
@ esitoem
Definition: BDSD1Bits.hpp:479
gnsstk::bds::enbCucl
@ enbCucl
Definition: BDSD1Bits.hpp:391
gnsstk::bds::cscdtLS
@ cscdtLS
Definition: BDSD1Bits.hpp:1012
gnsstk::bds::enbCicl
@ enbCicl
Definition: BDSD1Bits.hpp:518
gnsstk::bds::esiCism
@ esiCism
Definition: BDSD1Bits.hpp:534
gnsstk::bds::esbTGD2m
@ esbTGD2m
Definition: BDSD1Bits.hpp:250
gnsstk::bds::escidot
@ escidot
Definition: BDSD1Bits.hpp:551
BDSD1NavTimeOffset.hpp
gnsstk::bds::asbdil
@ asbdil
delta inclination LSBs
Definition: BDSD1Bits.hpp:142
gnsstk::WeekSecond::sow
double sow
Definition: WeekSecond.hpp:155
gnsstk::bds::h1nbHea13m
@ h1nbHea13m
Definition: BDSD1Bits.hpp:679
gnsstk::bds::h2nbHea22l
@ h2nbHea22l
Definition: BDSD1Bits.hpp:760
gnsstk::timeAdjust8BitWeekRollover
long timeAdjust8BitWeekRollover(long toCorrectWeek, long &refWeek)
Definition: TimeCorrection.cpp:77
gnsstk::bds::h2sbHea20l
@ h2sbHea20l
PRN 20 health LSBs.
Definition: BDSD1Bits.hpp:744
gnsstk::bds::enbCism
@ enbCism
Definition: BDSD1Bits.hpp:536
gnsstk::bds::cnbA1GPSl
@ cnbA1GPSl
Definition: BDSD1Bits.hpp:972
gnsstk::bds::fnbPre
@ fnbPre
Preamble number of bits.
Definition: BDSD1Bits.hpp:53
gnsstk::bds::ascA1
@ ascA1
Definition: BDSD1Bits.hpp:109
gnsstk::bds::fnbSOWm
@ fnbSOWm
SOW MSBs number of bits.
Definition: BDSD1Bits.hpp:65
gnsstk::PackedNavBits::matchBits
bool matchBits(const PackedNavBits &right, const short startBit=0, const short endBit=-1) const
Definition: PackedNavBits.cpp:1116
gnsstk::bds::h2nbHea20l
@ h2nbHea20l
Definition: BDSD1Bits.hpp:745
gnsstk::bds::enbBeta1
@ enbBeta1
Definition: BDSD1Bits.hpp:304
gnsstk::bds::enbCrsm
@ enbCrsm
Definition: BDSD1Bits.hpp:447
gnsstk::bds::esbCrsm
@ esbCrsm
Definition: BDSD1Bits.hpp:446
gnsstk::bds::h1nbHea8m
@ h1nbHea8m
Definition: BDSD1Bits.hpp:648
gnsstk::bds::enbAODC
@ enbAODC
Definition: BDSD1Bits.hpp:212
gnsstk::bds::anbtoa
@ anbtoa
Definition: BDSD1Bits.hpp:146
gnsstk::bds::esbOMEGAdotl
@ esbOMEGAdotl
Definition: BDSD1Bits.hpp:531
gnsstk::bds::h3nbHea33m
@ h3nbHea33m
Definition: BDSD1Bits.hpp:851
gnsstk::bds::esbBeta3l
@ esbBeta3l
Definition: BDSD1Bits.hpp:323
gnsstk::bds::csbA0GPS
@ csbA0GPS
GPS A0 time offset term.
Definition: BDSD1Bits.hpp:959
gnsstk::bds::fnbPnum
@ fnbPnum
Page number in SF4/5 word 2, num bits.
Definition: BDSD1Bits.hpp:80
gnsstk::bds::enba2
@ enba2
Definition: BDSD1Bits.hpp:328
gnsstk::bds::esbCrsl
@ esbCrsl
Definition: BDSD1Bits.hpp:456
gnsstk::Week::week
int week
Full week number.
Definition: Week.hpp:267
gnsstk::bds::enbCisl
@ enbCisl
Definition: BDSD1Bits.hpp:546
gnsstk::bds::esba0m
@ esba0m
Definition: BDSD1Bits.hpp:332
gnsstk::bds::fnbSOWl
@ fnbSOWl
SOW LSBs number of bits.
Definition: BDSD1Bits.hpp:73
gnsstk::bds::esbi0m
@ esbi0m
Definition: BDSD1Bits.hpp:493
gnsstk::bds::esbidotm
@ esbidotm
Definition: BDSD1Bits.hpp:549
gnsstk::bds::csbdtLSl
@ csbdtLSl
dtLS LSBs
Definition: BDSD1Bits.hpp:1014
gnsstk::bds::h3nbHea42
@ h3nbHea42
Definition: BDSD1Bits.hpp:912
gnsstk::bds::h1sbHea15l
@ h1sbHea15l
Definition: BDSD1Bits.hpp:701
gnsstk::bds::h3sbHea43m
@ h3sbHea43m
Definition: BDSD1Bits.hpp:915
gnsstk::bds::enbCicm
@ enbCicm
Definition: BDSD1Bits.hpp:508
gnsstk::bds::cnbA0GLO
@ cnbA0GLO
Definition: BDSD1Bits.hpp:994
gnsstk::bds::enbAlpha1
@ enbAlpha1
Definition: BDSD1Bits.hpp:270
gnsstk::bds::h1nbHea15l
@ h1nbHea15l
Definition: BDSD1Bits.hpp:702
gnsstk::bds::h2sbHea22l
@ h2sbHea22l
PRN 22 health LSBs.
Definition: BDSD1Bits.hpp:759
gnsstk::bds::esbBeta1
@ esbBeta1
Definition: BDSD1Bits.hpp:303
gnsstk::bds::enbidotm
@ enbidotm
Definition: BDSD1Bits.hpp:550
gnsstk::bds::fsbPnum
@ fsbPnum
Page number in SF4/5 word 2, start bit.
Definition: BDSD1Bits.hpp:79
gnsstk::bds::h1nbHea2
@ h1nbHea2
Definition: BDSD1Bits.hpp:610
gnsstk::bds::ascOMEGA0
@ ascOMEGA0
Definition: BDSD1Bits.hpp:121
gnsstk::bds::h3sbHea31m
@ h3sbHea31m
Definition: BDSD1Bits.hpp:835
gnsstk::bds::csbA0UTCm
@ csbA0UTCm
UTC A0 time offset term MSB.
Definition: BDSD1Bits.hpp:1025
gnsstk::bds::enbM0l
@ enbM0l
Definition: BDSD1Bits.hpp:405
gnsstk::bds::esbdnl
@ esbdnl
Definition: BDSD1Bits.hpp:376
gnsstk::bds::enbAlpha0
@ enbAlpha0
Definition: BDSD1Bits.hpp:265
gnsstk::bds::enbwm
@ enbwm
Definition: BDSD1Bits.hpp:578
gnsstk::bds::esbURAI
@ esbURAI
Definition: BDSD1Bits.hpp:216
gnsstk::bds::cnbdtLSm
@ cnbdtLSm
Definition: BDSD1Bits.hpp:1011
gnsstk::bds::esitocm
@ esitocm
Clock correction reference SOW MSBs.
Definition: BDSD1Bits.hpp:230
gnsstk::bds::enba0l
@ enba0l
Definition: BDSD1Bits.hpp:343
gnsstk::bds::esca0
@ esca0
Definition: BDSD1Bits.hpp:334
gnsstk::bds::asbOMEGAdotm
@ asbOMEGAdotm
OMEGA dot MSBs.
Definition: BDSD1Bits.hpp:149
gnsstk::bds::asbEcc
@ asbEcc
Eccentricity.
Definition: BDSD1Bits.hpp:130
BDSD1NavHealth.hpp
gnsstk::bds::esbAlpha3
@ esbAlpha3
Definition: BDSD1Bits.hpp:284
gnsstk::bds::esbCicl
@ esbCicl
Definition: BDSD1Bits.hpp:517
gnsstk::bds::h1sbHea15m
@ h1sbHea15m
Definition: BDSD1Bits.hpp:693
gnsstk::bds::enbCrcm
@ enbCrcm
Definition: BDSD1Bits.hpp:433
gnsstk::bds::h3nbHea43m
@ h3nbHea43m
Definition: BDSD1Bits.hpp:916
gnsstk::bds::ascOMEGAdot
@ ascOMEGAdot
Definition: BDSD1Bits.hpp:151
gnsstk::bds::asbM0l
@ asbM0l
M0 LSBs.
Definition: BDSD1Bits.hpp:179
gnsstk::bds::h2nbHea24
@ h2nbHea24
Definition: BDSD1Bits.hpp:767
gnsstk::bds::enbOMEGAdotl
@ enbOMEGAdotl
Definition: BDSD1Bits.hpp:532
gnsstk::bds::esbBeta0l
@ esbBeta0l
Definition: BDSD1Bits.hpp:299
gnsstk::bds::fnbRev
@ fnbRev
Reserved data number of bits.
Definition: BDSD1Bits.hpp:57
gnsstk::bds::esbCucm
@ esbCucm
Definition: BDSD1Bits.hpp:380
gnsstk::bds::h2nbHea27l
@ h2nbHea27l
Definition: BDSD1Bits.hpp:794
gnsstk::bds::enbBeta3m
@ enbBeta3m
Definition: BDSD1Bits.hpp:314
gnsstk::bds::esbi0l
@ esbi0l
Definition: BDSD1Bits.hpp:503
gnsstk::bds::h2sbHea29
@ h2sbHea29
PRN 29 health.
Definition: BDSD1Bits.hpp:800
gnsstk::bds::h2sbHea25m
@ h2sbHea25m
PRN 25 health MSB.
Definition: BDSD1Bits.hpp:770
gnsstk::bds::h2scWNa
@ h2scWNa
Definition: BDSD1Bits.hpp:814
gnsstk::bds::esctoe
@ esctoe
Definition: BDSD1Bits.hpp:476
gnsstk::bds::sf1
@ sf1
Definition: BDSD1Bits.hpp:191
gnsstk::bds::esbAlpha2
@ esbAlpha2
Definition: BDSD1Bits.hpp:279
gnsstk::PNBBDSD1NavDataFactory::AlmPtrList
std::list< AlmPtr > AlmPtrList
Alias for list of almanac objects.
Definition: PNBBDSD1NavDataFactory.hpp:210
gnsstk::bds::enbi0l
@ enbi0l
Definition: BDSD1Bits.hpp:504
gnsstk::bds::esiOMEGAdotm
@ esiOMEGAdotm
Definition: BDSD1Bits.hpp:520
gnsstk::bds::csbWNlsf
@ csbWNlsf
WNlsf.
Definition: BDSD1Bits.hpp:1021
gnsstk::bds::escEcc
@ escEcc
Definition: BDSD1Bits.hpp:410
gnsstk::bds::h3scAmID
@ h3scAmID
Definition: BDSD1Bits.hpp:928
gnsstk::bds::esiTGD2m
@ esiTGD2m
Group delay differential #2 MSBs.
Definition: BDSD1Bits.hpp:249
gnsstk::bds::h1nbHea7
@ h1nbHea7
Definition: BDSD1Bits.hpp:644
gnsstk::bds::anbdim
@ anbdim
Definition: BDSD1Bits.hpp:135
gnsstk::bds::cnbdtLSF
@ cnbdtLSF
Definition: BDSD1Bits.hpp:1018
std
Definition: Angle.hpp:142
gnsstk::bds::esiSatH1
@ esiSatH1
Satellite health.
Definition: BDSD1Bits.hpp:205
gnsstk::bds::asbM0m
@ asbM0m
M0 MSBs.
Definition: BDSD1Bits.hpp:171
gnsstk::bds::cscWNlsf
@ cscWNlsf
Definition: BDSD1Bits.hpp:1023
gnsstk::bds::csbA1UTCm
@ csbA1UTCm
UTC A1 time offset term MSB.
Definition: BDSD1Bits.hpp:1032
gnsstk::bds::asbtoa
@ asbtoa
toa (reference time)
Definition: BDSD1Bits.hpp:145
PNBBDSD1NavDataFactory.hpp
gnsstk::bds::cnbA1UTCl
@ cnbA1UTCl
Definition: BDSD1Bits.hpp:1037
gnsstk::bds::h2sbHea26
@ h2sbHea26
PRN 26 health.
Definition: BDSD1Bits.hpp:781
gnsstk::bds::esbOMEGAdotm
@ esbOMEGAdotm
Definition: BDSD1Bits.hpp:521
gnsstk::bds::escWN
@ escWN
Definition: BDSD1Bits.hpp:228
gnsstk::bds::h3sbHea35
@ h3sbHea35
Definition: BDSD1Bits.hpp:865
gnsstk::bds::csbDN
@ csbDN
DN.
Definition: BDSD1Bits.hpp:1039
gnsstk::bds::enbCucm
@ enbCucm
Definition: BDSD1Bits.hpp:381
gnsstk::bds::ascdi
@ ascdi
Definition: BDSD1Bits.hpp:136
gnsstk::bds::h3nbHea31l
@ h3nbHea31l
Definition: BDSD1Bits.hpp:844
gnsstk::bds::h3nbHea39
@ h3nbHea39
Definition: BDSD1Bits.hpp:896
gnsstk::bds::anbM0m
@ anbM0m
Definition: BDSD1Bits.hpp:172
gnsstk::bds::h1nbHea8l
@ h1nbHea8l
Definition: BDSD1Bits.hpp:656
gnsstk::bds::escBeta3
@ escBeta3
Definition: BDSD1Bits.hpp:315
gnsstk::bds::h3sbHea42
@ h3sbHea42
Definition: BDSD1Bits.hpp:911
gnsstk::bds::h1sbHea13m
@ h1sbHea13m
Definition: BDSD1Bits.hpp:678
gnsstk::bds::enbAlpha2
@ enbAlpha2
Definition: BDSD1Bits.hpp:280
gnsstk::bds::esitoeh
@ esitoeh
Definition: BDSD1Bits.hpp:473
gnsstk::bds::h1sbHea6l
@ h1sbHea6l
Definition: BDSD1Bits.hpp:640
gnsstk::bds::escdn
@ escdn
Definition: BDSD1Bits.hpp:368
gnsstk::bds::enbtocl
@ enbtocl
Definition: BDSD1Bits.hpp:242
gnsstk::bds::enba1l
@ enba1l
Definition: BDSD1Bits.hpp:357
gnsstk::bds::h1sbHea12
@ h1sbHea12
Definition: BDSD1Bits.hpp:674
gnsstk::bds::esbAhalfm
@ esbAhalfm
Definition: BDSD1Bits.hpp:460
gnsstk::bds::enbTGD1
@ enbTGD1
Definition: BDSD1Bits.hpp:246
GNSSTK_THROW
#define GNSSTK_THROW(exc)
Definition: Exception.hpp:366
gnsstk::bds::asctoa
@ asctoa
Definition: BDSD1Bits.hpp:147
gnsstk::bds::asbAhalfl
@ asbAhalfl
Semi-major axis**0.5 LSBs.
Definition: BDSD1Bits.hpp:100
gnsstk::bds::anbAhalfm
@ anbAhalfm
Definition: BDSD1Bits.hpp:93
gnsstk::bds::fscFraID
@ fscFraID
Frame ID scale factor.
Definition: BDSD1Bits.hpp:62
gnsstk::bds::fsbRev
@ fsbRev
Reserved data start bit.
Definition: BDSD1Bits.hpp:56
gnsstk::bds::esctoc
@ esctoc
Definition: BDSD1Bits.hpp:233
gnsstk::bds::esiidotm
@ esiidotm
Definition: BDSD1Bits.hpp:548
gnsstk::bds::escCrc
@ escCrc
Definition: BDSD1Bits.hpp:434
gnsstk::bds::asbdim
@ asbdim
delta inclination MSBs
Definition: BDSD1Bits.hpp:134
gnsstk::bds::h2sbHea28
@ h2sbHea28
PRN 28 health.
Definition: BDSD1Bits.hpp:796
gnsstk::bds::esiCucm
@ esiCucm
Definition: BDSD1Bits.hpp:379
gnsstk::bds::esbAlpha1
@ esbAlpha1
Definition: BDSD1Bits.hpp:269
gnsstk::bds::h1sbHea18m
@ h1sbHea18m
Definition: BDSD1Bits.hpp:712
gnsstk::bds::h1sbHea3l
@ h1sbHea3l
Definition: BDSD1Bits.hpp:621
gnsstk::bds::esii0m
@ esii0m
Definition: BDSD1Bits.hpp:492
gnsstk::bds::h2sbHea30
@ h2sbHea30
PRN 30 health.
Definition: BDSD1Bits.hpp:808
gnsstk::bds::esca2
@ esca2
Definition: BDSD1Bits.hpp:329
gnsstk::bds::esiOMEGA0m
@ esiOMEGA0m
Definition: BDSD1Bits.hpp:562
gnsstk::PackedNavBits
Definition: PackedNavBits.hpp:70
gnsstk::bds::h1sbHea8l
@ h1sbHea8l
Definition: BDSD1Bits.hpp:655
gnsstk::bds::anbOMEGAdotm
@ anbOMEGAdotm
Definition: BDSD1Bits.hpp:150
gnsstk::bds::cscA0GLO
@ cscA0GLO
Scale factor is actually .1.
Definition: BDSD1Bits.hpp:995
gnsstk::bds::h1sbHea13l
@ h1sbHea13l
Definition: BDSD1Bits.hpp:686
gnsstk::bds::fsbSOWl
@ fsbSOWl
SOW LSBs start bit.
Definition: BDSD1Bits.hpp:72
gnsstk::BDSWeekSecond
Definition: BDSWeekSecond.hpp:56
gnsstk::bds::enbBeta2
@ enbBeta2
Definition: BDSD1Bits.hpp:309
gnsstk::bds::fscPnum
@ fscPnum
Page number in SF4/5 word 2, scale.
Definition: BDSD1Bits.hpp:81
gnsstk::NavID
Definition: NavID.hpp:61
gnsstk::bds::h2nbtoal
@ h2nbtoal
Definition: BDSD1Bits.hpp:825
gnsstk::bds::h1sbHea8m
@ h1sbHea8m
Definition: BDSD1Bits.hpp:647
gnsstk::bds::cnbdtLSl
@ cnbdtLSl
Definition: BDSD1Bits.hpp:1015
gnsstk::bds::enbwl
@ enbwl
Definition: BDSD1Bits.hpp:588
gnsstk::MAX_MEO_BDS
const long MAX_MEO_BDS
The last ranging code number for BeiDou MEO/IGSO satellites.
Definition: GNSSconstants.hpp:215
gnsstk::bds::anbM0l
@ anbM0l
Definition: BDSD1Bits.hpp:180
gnsstk::bds::h1sbHea17
@ h1sbHea17
Definition: BDSD1Bits.hpp:708
gnsstk::bds::h1sbHea10
@ h1sbHea10
Definition: BDSD1Bits.hpp:662
gnsstk::bds::h1sbHea18l
@ h1sbHea18l
Definition: BDSD1Bits.hpp:720
gnsstk::bds::csbA1UTCl
@ csbA1UTCl
UTC A1 time offset term LSB.
Definition: BDSD1Bits.hpp:1036
gnsstk::bds::enbTGD2l
@ enbTGD2l
Definition: BDSD1Bits.hpp:261
gnsstk::bds::csbA0GLO
@ csbA0GLO
GLO A0 time offset term.
Definition: BDSD1Bits.hpp:993
gnsstk::bds::csbA1GPSl
@ csbA1GPSl
GPS A1 time offset term LSB.
Definition: BDSD1Bits.hpp:971
gnsstk::bds::enbWN
@ enbWN
Definition: BDSD1Bits.hpp:227
gnsstk::bds::esbM0m
@ esbM0m
Definition: BDSD1Bits.hpp:394
gnsstk::bds::enbBeta0l
@ enbBeta0l
Definition: BDSD1Bits.hpp:300
gnsstk::bds::h1nbHea9
@ h1nbHea9
Definition: BDSD1Bits.hpp:659
gnsstk::bds::anbwm
@ anbwm
Definition: BDSD1Bits.hpp:161
gnsstk::bds::fscRev
@ fscRev
Reserved data scale factor.
Definition: BDSD1Bits.hpp:58
gnsstk::bds::cnbA0UTCm
@ cnbA0UTCm
Definition: BDSD1Bits.hpp:1026
gnsstk::bds::h3sbHea31l
@ h3sbHea31l
Definition: BDSD1Bits.hpp:843
gnsstk::bds::cnbA1GLOl
@ cnbA1GLOl
Definition: BDSD1Bits.hpp:1006
gnsstk::bds::enba0m
@ enba0m
Definition: BDSD1Bits.hpp:333
gnsstk::NavSatelliteID::xmitSat
SatID xmitSat
ID of the satellite transmitting the nav data.
Definition: NavSatelliteID.hpp:170
gnsstk::bds::escAlpha0
@ escAlpha0
Definition: BDSD1Bits.hpp:266
gnsstk::bds::enbtoem
@ enbtoem
Definition: BDSD1Bits.hpp:481
gnsstk::bds::esiM0m
@ esiM0m
Definition: BDSD1Bits.hpp:393
gnsstk::bds::cnbA1GAL
@ cnbA1GAL
Definition: BDSD1Bits.hpp:986
gnsstk::bds::anbOMEGA0l
@ anbOMEGA0l
Definition: BDSD1Bits.hpp:128
gnsstk::bds::csbA0UTCl
@ csbA0UTCl
UTC A0 time offset term LSB.
Definition: BDSD1Bits.hpp:1029
gnsstk::bds::h1nbHea16
@ h1nbHea16
Definition: BDSD1Bits.hpp:705
gnsstk::bds::csbA1GAL
@ csbA1GAL
Gal A1 time offset term.
Definition: BDSD1Bits.hpp:985
gnsstk::bds::h3nbAmID
@ h3nbAmID
Definition: BDSD1Bits.hpp:927
TimeCorrection.hpp
gnsstk::bds::escCrs
@ escCrs
Definition: BDSD1Bits.hpp:448
gnsstk::bds::sf3
@ sf3
Definition: BDSD1Bits.hpp:193
BDSD1NavEph.hpp
gnsstk::bds::h2nbWNa
@ h2nbWNa
Definition: BDSD1Bits.hpp:813
gnsstk::bds::enbtoel
@ enbtoel
Definition: BDSD1Bits.hpp:490
gnsstk::bds::h1nbHea15m
@ h1nbHea15m
Definition: BDSD1Bits.hpp:694
gnsstk::bds::escCis
@ escCis
Definition: BDSD1Bits.hpp:537
gnsstk::bds::cnbA0GALl
@ cnbA0GALl
Definition: BDSD1Bits.hpp:983
gnsstk::bds::enbCrcl
@ enbCrcl
Definition: BDSD1Bits.hpp:443
gnsstk::bds::h3sbHea33m
@ h3sbHea33m
Definition: BDSD1Bits.hpp:850
gnsstk::bds::h2nbHea21
@ h2nbHea21
Definition: BDSD1Bits.hpp:748
TimeString.hpp
gnsstk::bds::esbAODC
@ esbAODC
Definition: BDSD1Bits.hpp:211
gnsstk::bds::h3sbHea36m
@ h3sbHea36m
Definition: BDSD1Bits.hpp:869
gnsstk::bds::esba1m
@ esba1m
Definition: BDSD1Bits.hpp:346
gnsstk::bds::enbEccl
@ enbEccl
Definition: BDSD1Bits.hpp:419
gnsstk::bds::h2nbHea25m
@ h2nbHea25m
Definition: BDSD1Bits.hpp:771
gnsstk::bds::ascA0
@ ascA0
Definition: BDSD1Bits.hpp:113
BDSD1NavISC.hpp
gnsstk::bds::esiCus
@ esiCus
Definition: BDSD1Bits.hpp:426
gnsstk::bds::h1sbHea3m
@ h1sbHea3m
Definition: BDSD1Bits.hpp:613
gnsstk::bds::cscA1GPS
@ cscA1GPS
Scale factor is actually .1.
Definition: BDSD1Bits.hpp:965
gnsstk::bds::escAlpha3
@ escAlpha3
Definition: BDSD1Bits.hpp:286
gnsstk::bds::h1nbHea13l
@ h1nbHea13l
Definition: BDSD1Bits.hpp:687


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:40