PNBGPSCNav2DataFactory.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 //==============================================================================
39 #include <math.h>
40 #include <memory>
42 #include "GPSCNav2Alm.hpp"
43 // #include "GPSCNav2RedAlm.hpp"
44 #include "GPSCNav2Eph.hpp"
45 #include "GPSCNav2Health.hpp"
46 #include "GPSCNav2TimeOffset.hpp"
47 #include "GPSCNav2Iono.hpp"
48 #include "TimeCorrection.hpp"
49 #include "YDSTime.hpp"
50 #include "GPSC2Bits.hpp"
51 
52 using namespace std;
53 using namespace gnsstk::gpscnav2;
54 
56 constexpr double TIME_EPSILON = 1e-9;
58 constexpr double CNAV2_FRAME_LEN = 18.0;
60 constexpr double CNAV2_SF2_OFFS = 0.52;
62 constexpr double CNAV2_SF3_OFFS = 12.52;
63 
64 namespace gnsstk
65 {
66  bool PNBGPSCNav2DataFactory ::
67  addData(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut,
68  double cadence)
69  {
70  if (navIn->getNavID().navType != NavType::GPSCNAV2)
71  {
72  // This class only processes GPS CNav2.
73  return false;
74  }
75  bool rv = true;
76  bool isQZSS = navIn->getsatSys().system == SatelliteSystem::QZSS;
77  try
78  {
79  switch (navIn->getNumBits())
80  {
81  case nnbSF2:
82  rv = processEph(navIn, navOut) && processISC(navIn, navOut);
83  break;
84  case nnbSF3:
85  rv = processSF3(navIn, navOut) && processISC(navIn, navOut);
86  break;
87  case nnbComplete:
88  rv = processEph(navIn, navOut, nnbSF1) &&
89  processSF3(navIn, navOut, nnbSF1+nnbSF2) &&
90  processISC(navIn, navOut);
91  break;
92  default:
93  return true;
94  }
95  }
96  catch (gnsstk::Exception& exc)
97  {
98  rv = false;
99  cerr << exc << endl;
100  }
101  catch (std::exception& exc)
102  {
103  rv = false;
104  cerr << exc.what() << endl;
105  }
106  catch (...)
107  {
108  rv = false;
109  cerr << "Unknown exception" << endl;
110  }
111  return rv;
112  }
113 
114 
115  bool PNBGPSCNav2DataFactory ::
116  processEph(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut,
117  unsigned offset)
118  {
119  unsigned prn = navIn->getsatSys().id;
120  if (processHea)
121  {
122  // Add ephemeris health bit
123  NavDataPtr p1 = std::make_shared<GPSCNav2Health>();
124  p1->timeStamp = getSF2Time(navIn->getTransmitTime());
125  p1->signal = NavMessageID(
126  NavSatelliteID(prn, prn, navIn->getsatSys().system,
127  CarrierBand::L1, TrackingCode::L1CD,
128  NavType::GPSCNAV2),
129  NavMessageType::Health);
130  dynamic_cast<GPSCNav2Health*>(p1.get())->health =
131  navIn->asBool(offset+esbHeaL1C);
132  dynamic_cast<GPSCNav2Health*>(p1.get())->setEph(true);
133  // cerr << "add CNAV2 eph health" << endl;
134  navOut.push_back(p1);
135  }
136  if (!PNBNavDataFactory::processEph)
137  {
138  // User doesn't want ephemerides so don't do any processing.
139  return true;
140  }
141  NavDataPtr p0 = std::make_shared<GPSCNav2Eph>();
142  GPSCNav2Eph *eph = dynamic_cast<GPSCNav2Eph*>(p0.get());
143  // NavData
144  eph->timeStamp = getSF2Time(navIn->getTransmitTime());
145  eph->signal = NavMessageID(
146  NavSatelliteID(prn, navIn->getsatSys(), navIn->getobsID(),
147  navIn->getNavID()),
148  NavMessageType::Ephemeris);
149  // OrbitData = empty
150  // OrbitDataKepler
151  eph->xmitTime = getSF2Time(eph->timeStamp);
154  long wn = navIn->asUnsignedLong(offset+esbWN,enbWN,escWN);
155  double toe = navIn->asUnsignedLong(offset+esbtoe,enbtoe,esctoe);
156  eph->itow = navIn->asUnsignedLong(offset+esbITOW,enbITOW,escITOW);
157  eph->Toe = eph->Toc = GPSWeekSecond(wn,toe);
158  if (navIn->getsatSys().system == gnsstk::SatelliteSystem::QZSS)
159  {
162  }
163  // health is set below
164  eph->Cuc = navIn->asSignedDouble(offset+esbCuc,enbCuc,escCuc);
165  eph->Cus = navIn->asSignedDouble(offset+esbCus,enbCus,escCus);
166  eph->Crc = navIn->asSignedDouble(offset+esbCrc,enbCrc,escCrc);
167  eph->Crs = navIn->asSignedDouble(offset+esbCrs,enbCrs,escCrs);
168  eph->Cic = navIn->asSignedDouble(offset+esbCic,enbCic,escCic);
169  eph->Cis = navIn->asSignedDouble(offset+esbCis,enbCis,escCis);
170  eph->M0 = navIn->asDoubleSemiCircles(offset+esbM0,enbM0,escM0);
171  eph->dn = navIn->asDoubleSemiCircles(offset+esbdn0,enbdn0,escdn0);
172  eph->dndot = navIn->asDoubleSemiCircles(offset+esbdn0dot,enbdn0dot,
173  escdn0dot);
174  eph->ecc = navIn->asUnsignedDouble(offset+esbEcc,enbEcc,escEcc);
175  eph->deltaA = navIn->asSignedDouble(offset+esbdA,enbdA,escdA);
176  eph->dOMEGAdot = navIn->asDoubleSemiCircles(
178  if (eph->signal.sat.system == SatelliteSystem::QZSS)
179  {
180  eph->A = eph->deltaA + GPSCNav2Eph::refAQZSS;
181  eph->OMEGAdot = eph->dOMEGAdot + GPSCNav2Eph::refOMEGAdotQZSS;
182  }
183  else
184  {
185  eph->A = eph->deltaA + GPSCNav2Eph::refAGPS;
186  eph->OMEGAdot = eph->dOMEGAdot + GPSCNav2Eph::refOMEGAdotGPS;
187  }
188  eph->Ahalf = ::sqrt(eph->A);
189  eph->Adot = navIn->asSignedDouble(offset+esbAdot,enbAdot,escAdot);
190  eph->OMEGA0 = navIn->asDoubleSemiCircles(offset+esbOMEGA0,enbOMEGA0,
191  escOMEGA0);
192  eph->i0 = navIn->asDoubleSemiCircles(offset+esbi0,enbi0,esci0);
193  eph->w = navIn->asDoubleSemiCircles(offset+esbw,enbw,escw);
194  eph->idot = navIn->asDoubleSemiCircles(offset+esbidot,enbidot,escidot);
195  eph->af0 = navIn->asSignedDouble(offset+esbaf0,enbaf0,escaf0);
196  eph->af1 = navIn->asSignedDouble(offset+esbaf1,enbaf1,escaf1);
197  eph->af2 = navIn->asSignedDouble(offset+esbaf2,enbaf2,escaf2);
198  // GPSCNav2Eph
199  eph->healthL1C = navIn->asBool(offset+esbHeaL1C);
200  eph->health = eph->healthL1C ? SVHealth::Unhealthy : SVHealth::Healthy;
201  eph->uraED = navIn->asLong(offset+esbURA,enbURA,escURA);
202  unsigned wnop = navIn->asUnsignedLong(offset+esbWNop,enbWNop,escWNop);
203  double top = navIn->asUnsignedLong(offset+esbtop,enbtop,esctop);
204  wnop = timeAdjust8BitWeekRollover(wnop, wn);
205  eph->top = GPSWeekSecond(wnop,top);
206  if (navIn->getsatSys().system == gnsstk::SatelliteSystem::QZSS)
207  {
209  }
210  eph->uraNED0= navIn->asLong(offset+esbURAned0,enbURAned0,escURAned0);
211  eph->uraNED1= navIn->asUnsignedLong(offset+esbURAned1,enbURAned1,
212  escURAned1);
213  eph->uraNED2= navIn->asUnsignedLong(offset+esbURAned2,enbURAned2,
214  escURAned2);
215  eph->tgd = InterSigCorr::getGPSISC(navIn, offset+esbTGD);
216  eph->iscL1CP = navIn->asSignedDouble(offset+esbISCL1CP,enbISCL1CP,
217  escISCL1CP);
218  eph->iscL1CD = navIn->asSignedDouble(offset+esbISCL1CD,enbISCL1CD,
219  escISCL1CD);
220  eph->integStat = navIn->asBool(offset+esbISF);
221  eph->fixFit();
222  // cerr << "add CNAV2 eph" << endl;
223  navOut.push_back(p0);
224  return true;
225  }
226 
227 
228  bool PNBGPSCNav2DataFactory ::
229  processSF3(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut,
230  unsigned offset)
231  {
232  unsigned long pageNum = navIn->asUnsignedLong(offset+asbPage,anbPage,
233  ascPage);
234  switch (pageNum)
235  {
236  case npgUTC:
237  return processUTCIono(navIn, navOut, offset);
238  break;
239  case npgGGTO:
240  return processGGTOEOP(navIn, navOut, offset);
241  break;
242  case npgMAlm:
243  return processAlmOrb(navIn, navOut, offset);
244  break;
245  default:
246  // Just ignore everything else.
247  return true;
248  }
249  }
250 
251 
252  bool PNBGPSCNav2DataFactory ::
253  processAlmOrb(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut,
254  unsigned offset)
255  {
256  unsigned long sprn = navIn->asUnsignedLong(offset+asbPRNa,anbPRNa,
257  ascPRNa);
258  SatID xmitSat(navIn->getsatSys());
259  SatelliteSystem subjSys = xmitSat.system;
260  SatID subjSat(sprn, subjSys);
261  // No checks for correct svid, just assume that the input
262  // data has already been checked (it will have been by
263  // addData).
264  if (processHea)
265  {
266  // Add almanac health bits from message type 37.
267  NavDataPtr p1L1 = std::make_shared<GPSCNav2Health>();
268  NavDataPtr p1L2 = std::make_shared<GPSCNav2Health>();
269  NavDataPtr p1L5 = std::make_shared<GPSCNav2Health>();
270  p1L1->timeStamp =
271  p1L2->timeStamp =
272  p1L5->timeStamp = getSF3Time(navIn->getTransmitTime());
277  p1L1->signal = NavMessageID(
278  NavSatelliteID(subjSat, xmitSat, navIn->getobsID(),
279  navIn->getNavID()),
280  NavMessageType::Health);
281  p1L2->signal = NavMessageID(
282  NavSatelliteID(subjSat, xmitSat,
283  ObsID(ObservationType::NavMsg, CarrierBand::L2,
284  TrackingCode::L2CM),
285  NavID(NavType::GPSCNAVL2)),
286  NavMessageType::Health);
287  p1L5->signal = NavMessageID(
288  NavSatelliteID(subjSat, xmitSat,
289  ObsID(ObservationType::NavMsg, CarrierBand::L5,
290  TrackingCode::L5I),
291  NavID(NavType::GPSCNAVL5)),
292  NavMessageType::Health);
293  dynamic_cast<GPSCNav2Health*>(p1L1.get())->health =
294  navIn->asBool(offset+asbHeaL1);
295  dynamic_cast<GPSCNav2Health*>(p1L2.get())->health =
296  navIn->asBool(offset+asbHeaL2);
297  dynamic_cast<GPSCNav2Health*>(p1L5.get())->health =
298  navIn->asBool(offset+asbHeaL5);
299  dynamic_cast<GPSCNav2Health*>(p1L1.get())->setEph(false);
300  dynamic_cast<GPSCNav2Health*>(p1L2.get())->setEph(false);
301  dynamic_cast<GPSCNav2Health*>(p1L5.get())->setEph(false);
302  // cerr << "add CNAV2 alm health" << endl;
303  navOut.push_back(p1L1);
304  // cerr << "add CNAV2 alm health" << endl;
305  navOut.push_back(p1L2);
306  // cerr << "add CNAV2 alm health" << endl;
307  navOut.push_back(p1L5);
308  }
309  if (!PNBNavDataFactory::processAlm)
310  {
311  // User doesn't want almanacs so don't do any processing.
312  return true;
313  }
314  NavDataPtr p0 = std::make_shared<GPSCNav2Alm>();
315  GPSCNav2Alm *alm = dynamic_cast<GPSCNav2Alm*>(p0.get());
316  // NavData
317  alm->timeStamp = getSF3Time(navIn->getTransmitTime());
318  alm->signal = NavMessageID(
319  NavSatelliteID(subjSat, xmitSat, navIn->getobsID(),
320  navIn->getNavID()),
321  NavMessageType::Almanac);
322  // OrbitData = empty
323  // OrbitDataKepler
324  alm->xmitTime = getSF3Time(alm->timeStamp);
327  alm->wna = navIn->asUnsignedLong(offset+asbWNa,anbWNa,ascWNa);
328  alm->toa = navIn->asUnsignedDouble(offset+asbtoa,anbtoa,asctoa);
329  alm->Toc = alm->Toe = GPSWeekSecond(alm->wna,alm->toa);
330  if (navIn->getsatSys().system == gnsstk::SatelliteSystem::QZSS)
331  {
334  }
335  alm->M0 = navIn->asDoubleSemiCircles(offset+asbM0,anbM0,ascM0);
336  alm->ecc = navIn->asUnsignedDouble(offset+asbEcc,anbEcc,ascEcc);
337  alm->Ahalf = navIn->asUnsignedDouble(offset+asbAhalf,anbAhalf,ascAhalf);
338  alm->A = alm->Ahalf * alm->Ahalf;
339  alm->OMEGA0 = navIn->asDoubleSemiCircles(offset+asbOMEGA0,anbOMEGA0,
340  ascOMEGA0);
341  // i0 is set below
342  alm->w = navIn->asDoubleSemiCircles(offset+asbw,anbw,ascw);
343  alm->OMEGAdot = navIn->asDoubleSemiCircles(offset+asbOMEGAdot,anbOMEGAdot,
344  ascOMEGAdot);
345  alm->af0 = navIn->asSignedDouble(offset+asbaf0,anbaf0,ascaf0);
346  alm->af1 = navIn->asSignedDouble(offset+asbaf1,anbaf1,ascaf1);
347  // GPSCNav2Alm
348  alm->healthL1 = navIn->asBool(offset+asbHeaL1);
349  alm->healthL2 = navIn->asBool(offset+asbHeaL2);
350  alm->healthL5 = navIn->asBool(offset+asbHeaL5);
351  alm->health = ((alm->healthL1 == false) ? SVHealth::Healthy :
352  SVHealth::Unhealthy);
353  alm->deltai = navIn->asDoubleSemiCircles(offset+asbdi,anbdi,ascdi);
354  if (alm->signal.sat.system == SatelliteSystem::QZSS)
355  {
359  alm->i0 = GPSCNav2Alm::refi0QZSS + alm->deltai;
360  }
361  else
362  {
363  alm->i0 = GPSCNav2Alm::refi0GPS + alm->deltai;
364  }
365  alm->fixFit();
366  // cerr << "add CNAV2 alm" << endl;
367  navOut.push_back(p0);
368  return true;
369  }
370 
371 
372  bool PNBGPSCNav2DataFactory ::
373  processUTCIono(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut,
374  unsigned offset)
375  {
376  if (PNBNavDataFactory::processIono)
377  {
378  NavDataPtr p1 = std::make_shared<GPSCNav2Iono>();
379  GPSCNav2Iono *iono = dynamic_cast<GPSCNav2Iono*>(p1.get());
380  // NavData
381  p1->timeStamp = getSF3Time(navIn->getTransmitTime());
382  p1->signal = NavMessageID(
383  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
384  navIn->getobsID(), navIn->getNavID()),
385  NavMessageType::Iono);
386  // KlobucharIonoNavData
387  iono->alpha[0] = navIn->asSignedDouble(offset+csbAlpha0,cnbAlpha0,
388  cscAlpha0);
389  iono->alpha[1] = navIn->asSignedDouble(offset+csbAlpha1,cnbAlpha1,
390  cscAlpha1);
391  iono->alpha[2] = navIn->asSignedDouble(offset+csbAlpha2,cnbAlpha2,
392  cscAlpha2);
393  iono->alpha[3] = navIn->asSignedDouble(offset+csbAlpha3,cnbAlpha3,
394  cscAlpha3);
395  iono->beta[0] = navIn->asSignedDouble(offset+csbBeta0,cnbBeta0,
396  cscBeta0);
397  iono->beta[1] = navIn->asSignedDouble(offset+csbBeta1,cnbBeta1,
398  cscBeta1);
399  iono->beta[2] = navIn->asSignedDouble(offset+csbBeta2,cnbBeta2,
400  cscBeta2);
401  iono->beta[3] = navIn->asSignedDouble(offset+csbBeta3,cnbBeta3,
402  cscBeta3);
403  // GPSCNav2Iono
404  navOut.push_back(p1);
405  }
406  if (!PNBNavDataFactory::processTim)
407  {
408  // User doesn't want time offset data so don't do any processing.
409  return true;
410  }
411  NavDataPtr p0 = std::make_shared<GPSCNav2TimeOffset>();
412  p0->timeStamp = getSF3Time(navIn->getTransmitTime());
413  p0->signal = NavMessageID(
414  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
415  navIn->getobsID(), navIn->getNavID()),
416  NavMessageType::TimeOffset);
417  GPSCNav2TimeOffset *to =
418  dynamic_cast<GPSCNav2TimeOffset*>(p0.get());
419  to->tgt = TimeSystem::UTC; // by definition
420  to->a0 = navIn->asSignedDouble(offset+csbA0,cnbA0,cscA0);
421  to->a1 = navIn->asSignedDouble(offset+csbA1,cnbA1,cscA1);
422  to->a2 = navIn->asSignedDouble(offset+csbA2,cnbA2,cscA2);
423  to->deltatLS = navIn->asLong(offset+csbdtLS,cnbdtLS,cscdtLS);
424  to->tot = navIn->asUnsignedDouble(offset+csbtot,cnbtot,csctot);
425  to->wnot = navIn->asUnsignedLong(offset+csbWNot,cnbWNot,cscWNot);
426  to->refTime = GPSWeekSecond(to->wnot, to->tot);
427  to->wnLSF = navIn->asUnsignedLong(offset+csbWNlsf,cnbWNlsf,cscWNlsf);
428  to->dn = navIn->asUnsignedLong(offset+csbDN,cnbDN,cscDN);
429  to->effTime = GPSWeekSecond(to->wnLSF, (to->dn-1)*86400);
430  if (navIn->getsatSys().system == gnsstk::SatelliteSystem::QZSS)
431  {
435  }
436  to->deltatLSF = navIn->asLong(offset+csbdtLSF,cnbdtLSF,cscdtLSF);
437  navOut.push_back(p0);
438  return true;
439  }
440 
441 
442  bool PNBGPSCNav2DataFactory ::
443  processGGTOEOP(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut,
444  unsigned offset)
445  {
446  if (!PNBNavDataFactory::processTim)
447  {
448  // User doesn't want time offset data so don't do any processing.
449  return true;
450  }
451  NavDataPtr p0 = std::make_shared<GPSCNav2TimeOffset>();
452  p0->timeStamp = getSF3Time(navIn->getTransmitTime());
453  p0->signal = NavMessageID(
454  NavSatelliteID(navIn->getsatSys().id, navIn->getsatSys(),
455  navIn->getobsID(), navIn->getNavID()),
456  NavMessageType::TimeOffset);
457  GPSCNav2TimeOffset *to =
458  dynamic_cast<GPSCNav2TimeOffset*>(p0.get());
459  uint8_t gnssID = navIn->asUnsignedLong(offset+gsbGNSS,gnbGNSS,gscGNSS);
460  switch (gnssID)
461  {
462  case 0:
463  // no data available.
464  return true;
465  case 1:
466  to->tgt = TimeSystem::GAL;
467  break;
468  case 2:
469  to->tgt = TimeSystem::GLO;
470  break;
471  case 3:
475  to->tgt = TimeSystem::QZS;
476  break;
477  default:
478  // unknown/unsupported
479  return false;
480  }
481  to->tot = navIn->asUnsignedDouble(offset+gsbt,gnbt,gsct);
482  to->wnot = navIn->asUnsignedLong(offset+gsbWN,gnbWN,gscWN);
483  to->refTime = gnsstk::GPSWeekSecond(to->wnot, to->tot);
484  if (navIn->getsatSys().system == gnsstk::SatelliteSystem::QZSS)
485  {
486  // source time system is supposed to be GPS even for QZSS,
487  // so don't set to->src
489  }
490  to->a0 = navIn->asSignedDouble(offset+gsbA0,gnbA0,gscA0);
491  to->a1 = navIn->asSignedDouble(offset+gsbA1,gnbA1,gscA1);
492  to->a2 = navIn->asSignedDouble(offset+gsbA2,gnbA2,gscA2);
493  navOut.push_back(p0);
494  return true;
495  }
496 
497 
498  bool PNBGPSCNav2DataFactory ::
499  processISC(const PackedNavBitsPtr& navIn, NavDataPtrList& navOut)
500  {
501  if (!PNBNavDataFactory::processISC)
502  return true;
503  NavSatelliteID nsid(navIn->getsatSys().id, navIn->getsatSys(),
504  navIn->getobsID(), navIn->getNavID());
505  GPSCNav2ISCPtr isc = getISCObj(navIn, nsid);
506  // offset for subframe 3
507  const unsigned offs = nnbSF1+nnbSF2;
508  switch (navIn->getNumBits())
509  {
510  case nnbSF2:
511  if (isc->haveSF2 && !isc->haveSF3)
512  {
513  // Two sequential subframe 2 with no subframe 3,
514  // publish the previous subframe 2 data.
515  navOut.push_back(std::make_shared<GPSCNav2ISC>(*isc));
516  }
517  isc->timeStamp = isc->xmit2 = getSF2Time(navIn->getTransmitTime());
518  isc->haveSF2 = true;
519  isc->isc = InterSigCorr::getGPSISC(navIn, esbTGD);
520  isc->iscL1CP = InterSigCorr::getGPSISC(navIn, esbISCL1CP);
521  isc->iscL1CD = InterSigCorr::getGPSISC(navIn, esbISCL1CD);
522  if (isc->haveSF3)
523  {
524  // We have a complete set of ISCs, so immediately
525  // add it to the output
526  navOut.push_back(std::make_shared<GPSCNav2ISC>(*isc));
527  }
528  break;
529  case nnbSF3:
530  // It's theoretically possible to process multiple
531  // sequential subframe 3, page 1, but I don't think
532  // it's useful without the Tgd in subframe 2.
533 
534  // only process page 1 of subframe 3
535  if (navIn->asUnsignedLong(asbPage,anbPage,ascPage) != 1)
536  break;
537  isc->timeStamp = isc->xmit3 = getSF3Time(navIn->getTransmitTime());
538  isc->haveSF3 = true;
539  isc->iscL1CA = InterSigCorr::getGPSISC(navIn, csbISCL1CA);
540  isc->iscL2C = InterSigCorr::getGPSISC(navIn, csbISCL2C);
541  isc->iscL5I5 = InterSigCorr::getGPSISC(navIn, csbISCL5I5);
542  isc->iscL5Q5 = InterSigCorr::getGPSISC(navIn, csbISCL5Q5);
543  if (isc->haveSF2)
544  {
545  // We have a complete set of ISCs, so immediately
546  // add it to the output
547  navOut.push_back(std::make_shared<GPSCNav2ISC>(*isc));
548  }
549  break;
550  case nnbComplete:
551  if (isc->haveSF2 && !isc->haveSF3)
552  {
553  // Two sequential subframe 2 with no subframe 3,
554  // publish the previous subframe 2 data.
555  navOut.push_back(std::make_shared<GPSCNav2ISC>(*isc));
556  }
557  isc->timeStamp = getSF3Time(navIn->getTransmitTime());
558  isc->xmit2 = getSF2Time(navIn->getTransmitTime());
559  isc->xmit3 = isc->timeStamp;
560  isc->haveSF2 = true;
561  isc->isc = InterSigCorr::getGPSISC(navIn, nnbSF1+esbTGD);
562  isc->iscL1CP = InterSigCorr::getGPSISC(navIn, nnbSF1+esbISCL1CP);
563  isc->iscL1CD = InterSigCorr::getGPSISC(navIn, nnbSF1+esbISCL1CD);
564  if (isc->haveSF3 &&
565  (navIn->asUnsignedLong(asbPage,anbPage,ascPage) != 1))
566  {
567  // We have a complete set of ISCs and the subframe 3
568  // page for the complete message isn't page 1, so
569  // immediately add it to the output
570  navOut.push_back(std::make_shared<GPSCNav2ISC>(*isc));
571  }
572  else if (navIn->asUnsignedLong(offs+asbPage,anbPage,ascPage) == 1)
573  {
574  // Got a subframe 3 page 1, so decode it, store it,
575  // and output it.
576  isc->timeStamp = getSF3Time(navIn->getTransmitTime());
577  isc->haveSF3 = true;
578  isc->iscL1CA = InterSigCorr::getGPSISC(navIn, offs+csbISCL1CA);
579  isc->iscL2C = InterSigCorr::getGPSISC(navIn, offs+csbISCL2C);
580  isc->iscL5I5 = InterSigCorr::getGPSISC(navIn, offs+csbISCL5I5);
581  isc->iscL5Q5 = InterSigCorr::getGPSISC(navIn, offs+csbISCL5Q5);
582  navOut.push_back(std::make_shared<GPSCNav2ISC>(*isc));
583  }
584  break;
585  default:
586  return true;
587  }
588  return true;
589  }
590 
591 
592  PNBGPSCNav2DataFactory::GPSCNav2ISCPtr PNBGPSCNav2DataFactory ::
593  getISCObj(const PackedNavBitsPtr& navIn, const NavSatelliteID& nsid)
594  {
595  if (iscAcc.find(nsid) == iscAcc.end())
596  {
597  iscAcc[nsid] = std::make_shared<GPSCNav2ISC>();
598  GPSCNav2ISCPtr &isc(iscAcc[nsid]);
599  isc->signal = NavMessageID(nsid, NavMessageType::ISC);
600  }
601  return iscAcc[nsid];
602  }
603 
604 
605  CommonTime PNBGPSCNav2DataFactory ::
606  getSF2Time(const CommonTime& timestamp)
607  {
608  // Convert to YDS which is easier to manipulate since it's
609  // evenly divisible by 18 seconds, the period of a CNAV-2
610  // frame.
611  YDSTime yds(timestamp);
612  if (fabs(remainder(yds.sod,CNAV2_FRAME_LEN)) < TIME_EPSILON)
613  {
614  // given time stamp is for subframe 1, add the offset for sf2
615  return timestamp + CNAV2_SF2_OFFS;
616  }
617  return timestamp;
618  }
619 
620 
621  CommonTime PNBGPSCNav2DataFactory ::
622  getSF3Time(const CommonTime& timestamp)
623  {
624  // Convert to YDS which is easier to manipulate since it's
625  // evenly divisible by 18 seconds, the period of a CNAV-2
626  // frame.
627  YDSTime yds(timestamp);
628  if (fabs(remainder(yds.sod,CNAV2_FRAME_LEN)) < TIME_EPSILON)
629  {
630  // given time stamp is for subframe 1, add the offset for sf3
631  return timestamp + CNAV2_SF3_OFFS;
632  }
633  return timestamp;
634  }
635 
636 } // namespace gnsstk
gnsstk::galfnav::anbOMEGAdot
@ anbOMEGAdot
Definition: GalFBits.hpp:430
gnsstk::bds::ascw
@ ascw
Definition: BDSD1Bits.hpp:162
gnsstk::gpscnav2::esbdn0
@ esbdn0
Delta n0 start bit.
Definition: GPSC2Bits.hpp:99
gnsstk::bds::cscDN
@ cscDN
Definition: BDSD1Bits.hpp:1041
gnsstk::gpscnav2::gscA0
@ gscA0
A0-ggto power factor.
Definition: GPSC2Bits.hpp:313
gnsstk::NavDataPtr
std::shared_ptr< NavData > NavDataPtr
Factories instantiate these in response to find() requests.
Definition: NavData.hpp:62
gnsstk::galfnav::enbCuc
@ enbCuc
Cuc number of bits.
Definition: GalFBits.hpp:256
GPSCNav2Iono.hpp
gnsstk::galinav::csbA1
@ csbA1
Definition: GalIBits.hpp:301
gnsstk::bds::escM0
@ escM0
Definition: BDSD1Bits.hpp:396
GPSCNav2Eph.hpp
gnsstk::OrbitDataKepler::idot
double idot
Rate of inclination angle (rad/sec)
Definition: OrbitDataKepler.hpp:193
YDSTime.hpp
gnsstk::gpscnav2::gnbWN
@ gnbWN
WNggto number of bits.
Definition: GPSC2Bits.hpp:308
GPSC2Bits.hpp
gnsstk::NavMessageID
Class used to identify/categorize navigation message data.
Definition: NavMessageID.hpp:52
gnsstk::StdNavTimeOffset::deltatLSF
double deltatLSF
Current or future leap second count (UTC only).
Definition: StdNavTimeOffset.hpp:135
gnsstk::gpscnav2::cnbBeta0
@ cnbBeta0
Definition: GPSC2Bits.hpp:266
gnsstk::gpscnav2::cscAlpha0
@ cscAlpha0
Definition: GPSC2Bits.hpp:251
gnsstk::galinav::csbA0
@ csbA0
Definition: GalIBits.hpp:297
gnsstk::galinav::cnbWNot
@ cnbWNot
Definition: GalIBits.hpp:314
gnsstk::gpscnav2::anbPage
@ anbPage
Page # number of bits.
Definition: GPSC2Bits.hpp:208
gnsstk::PackedNavBitsPtr
std::shared_ptr< PackedNavBits > PackedNavBitsPtr
Managed pointer for passing PackedNavBits around.
Definition: PackedNavBits.hpp:66
gnsstk::gpscnav2::asbHeaL5
@ asbHeaL5
L5 Signal health bit.
Definition: GPSC2Bits.hpp:339
gnsstk::galfnav::enbidot
@ enbidot
idot number of bits
Definition: GalFBits.hpp:219
gnsstk::galfnav::enbEcc
@ enbEcc
Ecc number of bits.
Definition: GalFBits.hpp:204
gnsstk::gpscnav2::asbHeaL2
@ asbHeaL2
L2 Signal health bit.
Definition: GPSC2Bits.hpp:338
gnsstk::bds::escCus
@ escCus
Definition: BDSD1Bits.hpp:429
gnsstk::bds::escCuc
@ escCuc
Definition: BDSD1Bits.hpp:382
gnsstk::gpscnav2::enbISCL1CP
@ enbISCL1CP
ISC_L1CP number of bits.
Definition: GPSC2Bits.hpp:188
gnsstk::galfnav::esbw
@ esbw
w start bit
Definition: GalFBits.hpp:245
gnsstk::GPSCNav2Alm::healthL2
bool healthL2
L2 signal health.
Definition: GPSCNav2Alm.hpp:84
gnsstk::bds::esbCrs
@ esbCrs
Definition: BDSD2Bits.hpp:1055
gnsstk::galinav::cnbA1
@ cnbA1
Definition: GalIBits.hpp:302
gnsstk::bds::ascEcc
@ ascEcc
Definition: BDSD1Bits.hpp:132
gnsstk::OrbitDataKepler::Cis
double Cis
Sine inclination (rad)
Definition: OrbitDataKepler.hpp:180
gnsstk::galfnav::esbEcc
@ esbEcc
Ecc start bit.
Definition: GalFBits.hpp:203
gnsstk::OrbitDataKepler::A
double A
Semi-major axis (m)
Definition: OrbitDataKepler.hpp:186
gnsstk::gpscnav2::gscA1
@ gscA1
A1-ggto power factor.
Definition: GPSC2Bits.hpp:317
gnsstk::gpscnav2::esbdOMEGAdot
@ esbdOMEGAdot
Delta OMEGAdot start bit.
Definition: GPSC2Bits.hpp:127
L1
gnsstk::Matrix< double > L1
Definition: Matrix_LUDecomp_T.cpp:46
gnsstk::gpscnav2::cscA2
@ cscA2
A2-n power factor.
Definition: GPSC2Bits.hpp:223
gnsstk::galfnav::anbaf0
@ anbaf0
Definition: GalFBits.hpp:440
gnsstk::galfnav::esbaf1
@ esbaf1
af1 start bit
Definition: GalFBits.hpp:106
gnsstk::OrbitDataKepler::af2
double af2
SV clock drift rate (sec/sec**2)
Definition: OrbitDataKepler.hpp:197
gnsstk::galfnav::anbw
@ anbw
Definition: GalFBits.hpp:415
gnsstk::gpscnav2::cnbAlpha1
@ cnbAlpha1
Definition: GPSC2Bits.hpp:254
gnsstk::galfnav::enbaf0
@ enbaf0
af0 number of bits
Definition: GalFBits.hpp:102
gnsstk::gpscnav2::esbURAned2
@ esbURAned2
URA_NED2 start bit.
Definition: GPSC2Bits.hpp:167
gnsstk::YDSTime
Definition: YDSTime.hpp:58
gnsstk::gpscnav2::esbHeaL1C
@ esbHeaL1C
L1C Signal health bit.
Definition: GPSC2Bits.hpp:81
gnsstk::OrbitDataKepler::ecc
double ecc
Eccentricity.
Definition: OrbitDataKepler.hpp:185
gnsstk::gpscnav2::cscAlpha1
@ cscAlpha1
Definition: GPSC2Bits.hpp:255
gnsstk::StdNavTimeOffset::src
TimeSystem src
Source time system.
Definition: StdNavTimeOffset.hpp:120
gnsstk::gpscnav2::enbURAned0
@ enbURAned0
URA_NED0 number of bits.
Definition: GPSC2Bits.hpp:160
gnsstk::bds::anbEcc
@ anbEcc
Definition: BDSD1Bits.hpp:131
gnsstk::bds::enbCus
@ enbCus
Definition: BDSD1Bits.hpp:428
gnsstk::gpscnav2::asbAhalf
@ asbAhalf
Ahalf MSBs start bit.
Definition: GPSC2Bits.hpp:353
gnsstk::gpscnav2::anbAhalf
@ anbAhalf
Ahalf MSBs number of bits.
Definition: GPSC2Bits.hpp:354
gnsstk::NavSatelliteID
Definition: NavSatelliteID.hpp:57
gnsstk::bds::escw
@ escw
Definition: BDSD1Bits.hpp:579
gnsstk::SatelliteSystem
SatelliteSystem
Supported satellite systems.
Definition: SatelliteSystem.hpp:55
gnsstk::bds::escCic
@ escCic
Definition: BDSD1Bits.hpp:509
CNAV2_SF2_OFFS
constexpr double CNAV2_SF2_OFFS
Offset in seconds of SF2 from start of CNAV2 frame.
Definition: PNBGPSCNav2DataFactory.cpp:60
gnsstk::OrbitDataKepler::OMEGAdot
double OMEGAdot
Rate of Rt ascension (rad/sec)
Definition: OrbitDataKepler.hpp:192
gnsstk::gpscnav2::cscAlpha2
@ cscAlpha2
Definition: GPSC2Bits.hpp:259
gnsstk::Exception::what
std::string what() const
Dump to a string.
Definition: Exception.cpp:193
gnsstk::GPSCNav2Eph::uraNED0
int8_t uraNED0
non-elevation dependent URA from clock message.
Definition: GPSCNav2Eph.hpp:88
gnsstk::StdNavTimeOffset::tgt
TimeSystem tgt
Target time system.
Definition: StdNavTimeOffset.hpp:121
gnsstk::gpscnav2::gnbA1
@ gnbA1
A1-ggto number of bits.
Definition: GPSC2Bits.hpp:316
gnsstk::SatID
Definition: SatID.hpp:89
gnsstk::NavDataPtrList
std::list< NavDataPtr > NavDataPtrList
Definition: NavData.hpp:75
gnsstk::GPSCNav2Alm::healthL5
bool healthL5
L5 signal health.
Definition: GPSCNav2Alm.hpp:85
gnsstk::gpscnav2::esbURA
@ esbURA
URA index start bit.
Definition: GPSC2Bits.hpp:83
gnsstk::gpscnav2::asbaf0
@ asbaf0
af0 start bit
Definition: GPSC2Bits.hpp:369
gnsstk::galfnav::ascaf1
@ ascaf1
Definition: GalFBits.hpp:446
gnsstk::OrbitDataKepler::Cuc
double Cuc
Cosine latitude (rad)
Definition: OrbitDataKepler.hpp:175
gnsstk::CommonTime::setTimeSystem
CommonTime & setTimeSystem(TimeSystem timeSystem)
Definition: CommonTime.hpp:195
gnsstk::StdNavTimeOffset::deltatLS
double deltatLS
Current or past leap second count (UTC only).
Definition: StdNavTimeOffset.hpp:125
gnsstk::galfnav::anbOMEGA0
@ anbOMEGA0
Definition: GalFBits.hpp:425
gnsstk::gpscnav2::enbtop
@ enbtop
top number of bits
Definition: GPSC2Bits.hpp:78
gnsstk::gpscnav2::escdn0dot
@ escdn0dot
Delta n0 dot power factor.
Definition: GPSC2Bits.hpp:105
gnsstk::gpscnav2::csbISCL5I5
@ csbISCL5I5
Definition: GPSC2Bits.hpp:289
gnsstk::gpscnav2::gscGNSS
@ gscGNSS
GNSS ID scale factor.
Definition: GPSC2Bits.hpp:301
gnsstk::OrbitDataKepler::w
double w
Argument of perigee (rad)
Definition: OrbitDataKepler.hpp:191
gnsstk::gpscnav2
Definition: GPSC2Bits.hpp:45
gnsstk::StdNavTimeOffset::wnot
unsigned wnot
Time data reference week number (storage only).
Definition: StdNavTimeOffset.hpp:129
gnsstk::galfnav::escaf2
@ escaf2
af2 scale factor
Definition: GalFBits.hpp:113
gnsstk::galinav::csctot
@ csctot
Definition: GalIBits.hpp:311
gnsstk::galfnav::enbw
@ enbw
w number of bits
Definition: GalFBits.hpp:246
gnsstk::OrbitDataKepler::Toe
CommonTime Toe
Orbit epoch.
Definition: OrbitDataKepler.hpp:171
gnsstk::OrbitDataKepler::Crs
double Crs
Sine radius (m)
Definition: OrbitDataKepler.hpp:178
gnsstk::gpscnav2::asbPRNa
@ asbPRNa
PRNa start bit.
Definition: GPSC2Bits.hpp:333
gnsstk::NavData::signal
NavMessageID signal
Source signal identification for this navigation message data.
Definition: NavData.hpp:175
gnsstk::bds::esci0
@ esci0
Definition: BDSD1Bits.hpp:495
gnsstk::galinav::cnbA0
@ cnbA0
Definition: GalIBits.hpp:298
gnsstk::gpscnav2::npgGGTO
@ npgGGTO
GPS-GNSS time offset page number for subframe 3.
Definition: GPSC2Bits.hpp:64
GPSCNav2Alm.hpp
gnsstk::gpscnav2::escWNop
@ escWNop
WNop scale factor.
Definition: GPSC2Bits.hpp:199
gnsstk::StdNavTimeOffset::wnLSF
unsigned wnLSF
Leap second reference week number (UTC only).
Definition: StdNavTimeOffset.hpp:133
gnsstk::gpscnav2::enbdn0
@ enbdn0
Delta n0 number of bits.
Definition: GPSC2Bits.hpp:100
gnsstk::bds::esbCus
@ esbCus
Definition: BDSD1Bits.hpp:427
gnsstk::gpscnav2::gnbA2
@ gnbA2
A2-ggto number of bits.
Definition: GPSC2Bits.hpp:320
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::StdNavTimeOffset::a1
double a1
Drift coefficient of source time scale.
Definition: StdNavTimeOffset.hpp:123
gnsstk::gpscnav2::cnbAlpha2
@ cnbAlpha2
Definition: GPSC2Bits.hpp:258
gnsstk::gpscnav2::cscBeta2
@ cscBeta2
Definition: GPSC2Bits.hpp:275
gnsstk::gpscnav2::ascPage
@ ascPage
Page # scale factor.
Definition: GPSC2Bits.hpp:209
gnsstk::gpscnav2::csbISCL5Q5
@ csbISCL5Q5
Definition: GPSC2Bits.hpp:293
gnsstk::GPSCNav2Alm
Class containing data elements unique to GPS CNav2 midi almanac.
Definition: GPSCNav2Alm.hpp:51
gnsstk::gpscnav2::esbISCL1CD
@ esbISCL1CD
ISC_L1CD start bit.
Definition: GPSC2Bits.hpp:191
gnsstk::GPSCNav2Eph::top
CommonTime top
Time of prediction.
Definition: GPSCNav2Eph.hpp:94
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
GPSCNav2TimeOffset.hpp
gnsstk::gpscnav2::csbAlpha2
@ csbAlpha2
Definition: GPSC2Bits.hpp:257
gnsstk::galfnav::escaf0
@ escaf0
af0 scale factor
Definition: GalFBits.hpp:103
gnsstk::OrbitDataKepler::xmitTime
CommonTime xmitTime
Time of transmission of the start of the data.
Definition: OrbitDataKepler.hpp:170
gnsstk::gpscnav2::asbw
@ asbw
w start bit
Definition: GPSC2Bits.hpp:361
gnsstk::NavData::timeStamp
CommonTime timeStamp
Definition: NavData.hpp:173
gnsstk::bds::esbWN
@ esbWN
Definition: BDSD1Bits.hpp:226
gnsstk::gpscnav2::gnbt
@ gnbt
tggto number of bits
Definition: GPSC2Bits.hpp:304
gnsstk::OrbitDataKepler::Adot
double Adot
Rate of semi-major axis (m/sec)
Definition: OrbitDataKepler.hpp:188
gnsstk::bds::enbCrs
@ enbCrs
Definition: BDSD2Bits.hpp:1056
gnsstk::galfnav::anbdi
@ anbdi
Definition: GalFBits.hpp:420
gnsstk::StdNavTimeOffset::dn
unsigned dn
Leap second reference day number (UTC only).
Definition: StdNavTimeOffset.hpp:134
gnsstk::OrbitDataKepler::M0
double M0
Mean anomaly (rad)
Definition: OrbitDataKepler.hpp:182
gnsstk::Exception
Definition: Exception.hpp:151
gnsstk::bds::cnbWNlsf
@ cnbWNlsf
Definition: BDSD1Bits.hpp:1022
gnsstk::galfnav::anbWNa
@ anbWNa
Definition: GalFBits.hpp:386
gnsstk::gpscnav2::enbdA
@ enbdA
Delta A number of bits.
Definition: GPSC2Bits.hpp:92
TIME_EPSILON
constexpr double TIME_EPSILON
Epsilon value for checking timestamps of nav data (in seconds).
Definition: PNBGPSCNav2DataFactory.cpp:56
gnsstk::GPSCNav2Eph::itow
uint8_t itow
Definition: GPSCNav2Eph.hpp:84
gnsstk::bds::cnbDN
@ cnbDN
Definition: BDSD1Bits.hpp:1040
gnsstk::bds::ascM0
@ ascM0
Definition: BDSD1Bits.hpp:173
gnsstk::bds::csbdtLSF
@ csbdtLSF
dtLSF
Definition: BDSD1Bits.hpp:1017
gnsstk::galinav::csbdtLS
@ csbdtLS
Definition: GalIBits.hpp:305
gnsstk::gpscnav2::escURAned2
@ escURAned2
URA_NED2 scale factor.
Definition: GPSC2Bits.hpp:169
gnsstk::bds::ascAhalf
@ ascAhalf
Definition: BDSD1Bits.hpp:94
gnsstk::galfnav::enbaf2
@ enbaf2
af2 number of bits
Definition: GalFBits.hpp:112
gnsstk::bds::enbCis
@ enbCis
Definition: BDSD2Bits.hpp:994
gnsstk::gpscnav2::gsbt
@ gsbt
tggto start bit
Definition: GPSC2Bits.hpp:303
gnsstk::GPSCNav2Eph::uraNED2
uint8_t uraNED2
non-elevation dependent URA from clock message.
Definition: GPSCNav2Eph.hpp:90
gnsstk::gpscnav2::asbHeaL1
@ asbHeaL1
L1 Signal health bit.
Definition: GPSC2Bits.hpp:337
gnsstk::galfnav::anbM0
@ anbM0
Definition: GalFBits.hpp:435
gnsstk::OrbitDataKepler::dndot
double dndot
Rate of correction to mean motion (rad/sec/sec)
Definition: OrbitDataKepler.hpp:184
gnsstk::galfnav::enbCrc
@ enbCrc
Crc number of bits.
Definition: GalFBits.hpp:266
gnsstk::gpscnav2::gsct
@ gsct
tggto power factor
Definition: GPSC2Bits.hpp:305
gnsstk::PNBGPSCNav2DataFactory::GPSCNav2ISCPtr
std::shared_ptr< GPSCNav2ISC > GPSCNav2ISCPtr
Quick alias for a shared_ptr to GPSCNav2ISC.
Definition: PNBGPSCNav2DataFactory.hpp:139
gnsstk::galinav::cscA1
@ cscA1
Definition: GalIBits.hpp:303
gnsstk::OrbitDataKepler::Cus
double Cus
Sine latitude (rad)
Definition: OrbitDataKepler.hpp:176
gnsstk::GPSCNav2Eph::healthL1C
bool healthL1C
L1C signal health.
Definition: GPSCNav2Eph.hpp:86
gnsstk::StdNavTimeOffset::a2
double a2
Drift rate coefficient of source time scale.
Definition: StdNavTimeOffset.hpp:124
gnsstk::gpscnav2::enbAdot
@ enbAdot
Adot number of bits.
Definition: GPSC2Bits.hpp:96
gnsstk::bds::escOMEGA0
@ escOMEGA0
Definition: BDSD1Bits.hpp:565
gnsstk::TimeSystem::QZS
@ QZS
QZSS system Time.
gnsstk::galfnav::esbi0
@ esbi0
i0 start bit
Definition: GalFBits.hpp:240
gnsstk::gpscnav2::cnbA2
@ cnbA2
A2-n number of bits.
Definition: GPSC2Bits.hpp:222
gnsstk::gpscnav2::asbM0
@ asbM0
M0 start bit.
Definition: GPSC2Bits.hpp:365
gnsstk::gpscnav2::cnbAlpha3
@ cnbAlpha3
Definition: GPSC2Bits.hpp:262
gnsstk::bds::esbCis
@ esbCis
Definition: BDSD2Bits.hpp:993
gnsstk::galinav::cnbdtLS
@ cnbdtLS
Definition: GalIBits.hpp:306
gnsstk::ObsID
Definition: ObsID.hpp:82
gnsstk::gpscnav2::nnbSF1
@ nnbSF1
Number of bits in subframe 1 message.
Definition: GPSC2Bits.hpp:58
gnsstk::gpscnav2::enbURAned2
@ enbURAned2
URA_NED2 number of bits.
Definition: GPSC2Bits.hpp:168
gnsstk::GPSCNav2Eph::dOMEGAdot
double dOMEGAdot
Rate of right ascension relative to -2.6e-9*pi.
Definition: GPSCNav2Eph.hpp:93
gnsstk::gpscnav2::escURAned1
@ escURAned1
URA_NED1 scale factor.
Definition: GPSC2Bits.hpp:165
CNAV2_FRAME_LEN
constexpr double CNAV2_FRAME_LEN
CNAV2 frame length in seconds.
Definition: PNBGPSCNav2DataFactory.cpp:58
gnsstk::gpscnav2::escISCL1CD
@ escISCL1CD
ISC_L1CD power factor.
Definition: GPSC2Bits.hpp:193
gnsstk::OrbitDataKepler::Ahalf
double Ahalf
Square Root of semi-major axis (m**.5)
Definition: OrbitDataKepler.hpp:187
gnsstk::gpscnav2::cscBeta1
@ cscBeta1
Definition: GPSC2Bits.hpp:271
gnsstk::GPSCNav2Eph::uraED
int8_t uraED
5-bit URA index from message type 10.
Definition: GPSCNav2Eph.hpp:87
gnsstk::NavSatelliteID::sat
SatID sat
ID of satellite to which the nav data applies.
Definition: NavSatelliteID.hpp:169
gnsstk::gpscnav2::asbdi
@ asbdi
delta i start bit
Definition: GPSC2Bits.hpp:345
gnsstk::gpscnav2::cscAlpha3
@ cscAlpha3
Definition: GPSC2Bits.hpp:263
gnsstk::galfnav::esbaf2
@ esbaf2
af2 start bit
Definition: GalFBits.hpp:111
gnsstk::bds::cscdtLSF
@ cscdtLSF
Definition: BDSD1Bits.hpp:1019
gnsstk::GPSCNav2Eph
Class containing data elements unique to GPS CNav2 ephemerides.
Definition: GPSCNav2Eph.hpp:51
gnsstk::bds::cscdtLS
@ cscdtLS
Definition: BDSD1Bits.hpp:1012
gnsstk::GPSCNav2Eph::iscL1CP
double iscL1CP
Inter-signal correction for L1CP.
Definition: GPSCNav2Eph.hpp:96
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::gpscnav2::npgMAlm
@ npgMAlm
Midi Almanac page number for subframe 3.
Definition: GPSC2Bits.hpp:65
gnsstk::gpscnav2::nnbSF3
@ nnbSF3
Number of bits in subframe 3 message.
Definition: GPSC2Bits.hpp:60
gnsstk::bds::escidot
@ escidot
Definition: BDSD1Bits.hpp:551
gnsstk::OrbitDataKepler::Toc
CommonTime Toc
Clock epoch.
Definition: OrbitDataKepler.hpp:172
gnsstk::gpscnav2::gnbA0
@ gnbA0
A0-ggto number of bits.
Definition: GPSC2Bits.hpp:312
gnsstk::galinav::csbWNot
@ csbWNot
Definition: GalIBits.hpp:313
gnsstk::timeAdjust8BitWeekRollover
long timeAdjust8BitWeekRollover(long toCorrectWeek, long &refWeek)
Definition: TimeCorrection.cpp:77
gnsstk::gpscnav2::escAdot
@ escAdot
Adot power factor.
Definition: GPSC2Bits.hpp:97
gnsstk::GPSCNav2Eph::uraNED1
uint8_t uraNED1
non-elevation dependent URA from clock message.
Definition: GPSCNav2Eph.hpp:89
gnsstk::gpscnav2::enbURA
@ enbURA
URA index number of bits.
Definition: GPSC2Bits.hpp:84
gnsstk::gpscnav2::csbAlpha0
@ csbAlpha0
Definition: GPSC2Bits.hpp:249
gnsstk::gpscnav2::csbAlpha1
@ csbAlpha1
Definition: GPSC2Bits.hpp:253
gnsstk::GPSCNav2Eph::tgd
double tgd
Ionospheric group delay in seconds. NaN=invalid.
Definition: GPSCNav2Eph.hpp:95
gnsstk::bds::anbtoa
@ anbtoa
Definition: BDSD1Bits.hpp:146
gnsstk::gpscnav2::escdA
@ escdA
Delta A power factor.
Definition: GPSC2Bits.hpp:93
gnsstk::gpscnav2::esbURAned0
@ esbURAned0
URA_NED0 start bit.
Definition: GPSC2Bits.hpp:159
gnsstk::YDSTime::sod
double sod
Definition: YDSTime.hpp:186
gnsstk::KlobucharIonoNavData::beta
double beta[4]
beta terms of Klobuchar model, using semi-circles.
Definition: KlobucharIonoNavData.hpp:85
gnsstk::gpscnav2::esbtop
@ esbtop
top start bit
Definition: GPSC2Bits.hpp:77
gnsstk::gpscnav2::esbdn0dot
@ esbdn0dot
Delta n0 dot start bit.
Definition: GPSC2Bits.hpp:103
gnsstk::gpscnav2::cnbBeta1
@ cnbBeta1
Definition: GPSC2Bits.hpp:270
gnsstk::gpscnav2::escdn0
@ escdn0
Delta n0 power factor.
Definition: GPSC2Bits.hpp:101
gnsstk::GPSCNav2Alm::toa
double toa
Convenience storage of unqualified toa.
Definition: GPSCNav2Alm.hpp:88
gnsstk::gpscnav2::esbTGD
@ esbTGD
Tgd start bit.
Definition: GPSC2Bits.hpp:183
gnsstk::gpscnav2::asbaf1
@ asbaf1
af1 start bit
Definition: GPSC2Bits.hpp:373
gnsstk::gpscnav2::esbWNop
@ esbWNop
WNop start bit.
Definition: GPSC2Bits.hpp:197
gnsstk::gpscnav2::esbtoe
@ esbtoe
toe start bit
Definition: GPSC2Bits.hpp:87
gnsstk::SatID::system
SatelliteSystem system
System for this satellite.
Definition: SatID.hpp:156
gnsstk::galfnav::ascaf0
@ ascaf0
Definition: GalFBits.hpp:441
gnsstk::bds::ascOMEGA0
@ ascOMEGA0
Definition: BDSD1Bits.hpp:121
gnsstk::gpscnav2::esbITOW
@ esbITOW
ITOW start bit.
Definition: GPSC2Bits.hpp:73
gnsstk::gpscnav2::esbdA
@ esbdA
Delta A start bit.
Definition: GPSC2Bits.hpp:91
gnsstk::gpscnav2::nnbComplete
@ nnbComplete
Number of bits in a complete subframe 1/2/3 msg.
Definition: GPSC2Bits.hpp:57
gnsstk::OrbitDataKepler::i0
double i0
Inclination (rad)
Definition: OrbitDataKepler.hpp:190
gnsstk::galfnav::esbM0
@ esbM0
M0 start bit.
Definition: GalFBits.hpp:193
gnsstk::bds::asbEcc
@ asbEcc
Eccentricity.
Definition: BDSD1Bits.hpp:130
gnsstk::GPSCNav2TimeOffset
Definition: GPSCNav2TimeOffset.hpp:62
gnsstk::gpscnav2::gsbA0
@ gsbA0
A0-ggto start bit.
Definition: GPSC2Bits.hpp:311
gnsstk::OrbitDataKepler::Cic
double Cic
Cosine inclination (rad)
Definition: OrbitDataKepler.hpp:179
gnsstk::bds::ascOMEGAdot
@ ascOMEGAdot
Definition: BDSD1Bits.hpp:151
gnsstk::galfnav::enbi0
@ enbi0
i0 number of bits
Definition: GalFBits.hpp:241
gnsstk::gpscnav2::asbOMEGA0
@ asbOMEGA0
OMEGA0 MSBs start bit.
Definition: GPSC2Bits.hpp:357
gnsstk::gpscnav2::esbAdot
@ esbAdot
Adot start bit.
Definition: GPSC2Bits.hpp:95
gnsstk::gpscnav2::esbISCL1CP
@ esbISCL1CP
ISC_L1CP start bit.
Definition: GPSC2Bits.hpp:187
gnsstk::GPSCNav2Iono
Definition: GPSCNav2Iono.hpp:52
gnsstk::gpscnav2::enbdn0dot
@ enbdn0dot
Delta n0 dot number of bits.
Definition: GPSC2Bits.hpp:104
gnsstk::gpscnav2::enbITOW
@ enbITOW
ITOW number of bits.
Definition: GPSC2Bits.hpp:74
gnsstk::OrbitDataKepler::Crc
double Crc
Cosine radius (m)
Definition: OrbitDataKepler.hpp:177
gnsstk::galinav::cscWNot
@ cscWNot
Definition: GalIBits.hpp:315
gnsstk::galinav::csbtot
@ csbtot
Definition: GalIBits.hpp:309
gnsstk::gpscnav2::anbPRNa
@ anbPRNa
PRNa number of bits.
Definition: GPSC2Bits.hpp:334
gnsstk::bds::esctoe
@ esctoe
Definition: BDSD1Bits.hpp:476
gnsstk::gpscnav2::nnbSF2
@ nnbSF2
Number of bits in subframe 2 message.
Definition: GPSC2Bits.hpp:59
gnsstk::GPSCNav2Eph::iscL1CD
double iscL1CD
Inter-signal correction for L1CD.
Definition: GPSCNav2Eph.hpp:97
gnsstk::galfnav::enbOMEGA0
@ enbOMEGA0
OMEGA0 number of bits.
Definition: GalFBits.hpp:214
gnsstk::bds::csbWNlsf
@ csbWNlsf
WNlsf.
Definition: BDSD1Bits.hpp:1021
gnsstk::bds::escEcc
@ escEcc
Definition: BDSD1Bits.hpp:410
gnsstk::gpscnav2::csbA2
@ csbA2
A2-n start bit.
Definition: GPSC2Bits.hpp:221
gnsstk::gpscnav2::npgUTC
@ npgUTC
UTC & Iono page number for subframe 3.
Definition: GPSC2Bits.hpp:63
gnsstk::gpscnav2::enbdOMEGAdot
@ enbdOMEGAdot
Delta OMEGAdot number of bits.
Definition: GPSC2Bits.hpp:128
gnsstk::bds::cnbdtLSF
@ cnbdtLSF
Definition: BDSD1Bits.hpp:1018
std
Definition: Angle.hpp:142
gnsstk::OrbitDataKepler::af0
double af0
SV clock error (sec)
Definition: OrbitDataKepler.hpp:195
gnsstk::bds::cscWNlsf
@ cscWNlsf
Definition: BDSD1Bits.hpp:1023
CNAV2_SF3_OFFS
constexpr double CNAV2_SF3_OFFS
Offset in seconds of SF3 from start of CNAV2 frame.
Definition: PNBGPSCNav2DataFactory.cpp:62
gnsstk::galinav::cnbtot
@ cnbtot
Definition: GalIBits.hpp:310
gnsstk::bds::asbtoa
@ asbtoa
toa (reference time)
Definition: BDSD1Bits.hpp:145
gnsstk::bds::escWN
@ escWN
Definition: BDSD1Bits.hpp:228
gnsstk::bds::csbDN
@ csbDN
DN.
Definition: BDSD1Bits.hpp:1039
gnsstk::KlobucharIonoNavData::alpha
double alpha[4]
alpha terms of Klobuchar model, using semi-circles.
Definition: KlobucharIonoNavData.hpp:84
gnsstk::GPSCNav2Health
Wrapper for the 1-bit health status in GPS CNav2 subframe 2 or 3.
Definition: GPSCNav2Health.hpp:50
gnsstk::bds::ascdi
@ ascdi
Definition: BDSD1Bits.hpp:136
gnsstk::GPSCNav2Eph::integStat
bool integStat
Integrity status flag.
Definition: GPSCNav2Eph.hpp:91
gnsstk::galinav::cscA0
@ cscA0
Definition: GalIBits.hpp:299
gnsstk::gpscnav2::asbOMEGAdot
@ asbOMEGAdot
OMEGAdot start bit.
Definition: GPSC2Bits.hpp:349
gnsstk::gpscnav2::cnbBeta3
@ cnbBeta3
Definition: GPSC2Bits.hpp:278
gnsstk::gpscnav2::ascPRNa
@ ascPRNa
PRNa scale factor.
Definition: GPSC2Bits.hpp:335
gnsstk::gpscnav2::cnbAlpha0
@ cnbAlpha0
Definition: GPSC2Bits.hpp:250
gnsstk::galfnav::esbaf0
@ esbaf0
af0 start bit
Definition: GalFBits.hpp:101
gnsstk::gpscnav2::enbWNop
@ enbWNop
WNop number of bits.
Definition: GPSC2Bits.hpp:198
gnsstk::galfnav::enbCic
@ enbCic
Cic number of bits.
Definition: GalFBits.hpp:298
gnsstk::galfnav::asbWNa
@ asbWNa
Definition: GalFBits.hpp:385
gnsstk::bds::asctoa
@ asctoa
Definition: BDSD1Bits.hpp:147
gnsstk::galfnav::enbM0
@ enbM0
M0 number of bits.
Definition: GalFBits.hpp:194
gnsstk::bds::escCrc
@ escCrc
Definition: BDSD1Bits.hpp:434
gnsstk::galfnav::enbaf1
@ enbaf1
af1 number of bits
Definition: GalFBits.hpp:107
gnsstk::gpscnav2::gscWN
@ gscWN
WNggto scale factor.
Definition: GPSC2Bits.hpp:309
gnsstk::StdNavTimeOffset::a0
double a0
Bias coefficient of source time scale.
Definition: StdNavTimeOffset.hpp:122
gnsstk::gpscnav2::escISCL1CP
@ escISCL1CP
ISC_L1CP power factor.
Definition: GPSC2Bits.hpp:189
PNBGPSCNav2DataFactory.hpp
gnsstk::gpscnav2::csbBeta2
@ csbBeta2
Definition: GPSC2Bits.hpp:273
gnsstk::GPSCNav2Alm::wna
unsigned wna
Reference week for toa.
Definition: GPSCNav2Alm.hpp:87
gnsstk::galfnav::ascWNa
@ ascWNa
Definition: GalFBits.hpp:387
gnsstk::galfnav::esbCrc
@ esbCrc
Crc start bit.
Definition: GalFBits.hpp:265
gnsstk::gpscnav2::enbISCL1CD
@ enbISCL1CD
ISC_L1CD number of bits.
Definition: GPSC2Bits.hpp:192
gnsstk::gpscnav2::csbBeta1
@ csbBeta1
Definition: GPSC2Bits.hpp:269
gnsstk::GPSCNav2Alm::fixFit
void fixFit()
Fill the beginFit and endFit values for this object.
Definition: GPSCNav2Alm.cpp:71
gnsstk::galfnav::esbCic
@ esbCic
Cic start bit.
Definition: GalFBits.hpp:297
gnsstk::GPSCNav2Alm::deltai
double deltai
Inclination in rad relative to 0.3*pi rad.
Definition: GPSCNav2Alm.hpp:86
gnsstk::NavID
Definition: NavID.hpp:61
gnsstk::gpscnav2::escURAned0
@ escURAned0
URA_NED0 scale factor.
Definition: GPSC2Bits.hpp:161
gnsstk::gpscnav2::esbISF
@ esbISF
ISF start bit.
Definition: GPSC2Bits.hpp:195
gnsstk::gpscnav2::cscBeta3
@ cscBeta3
Definition: GPSC2Bits.hpp:279
gnsstk::GPSCNav2Eph::fixFit
void fixFit()
Definition: GPSCNav2Eph.cpp:81
gnsstk::OrbitDataKepler::health
SVHealth health
SV health status.
Definition: OrbitDataKepler.hpp:173
gnsstk::gpscnav2::asbPage
@ asbPage
Page # start bit.
Definition: GPSC2Bits.hpp:207
L2
gnsstk::Matrix< double > L2
Definition: Matrix_LUDecomp_T.cpp:46
gnsstk::gpscnav2::cscBeta0
@ cscBeta0
Definition: GPSC2Bits.hpp:267
gnsstk::OrbitDataKepler::OMEGA0
double OMEGA0
Longitude of ascending node at weekly epoch (rad)
Definition: OrbitDataKepler.hpp:189
GPSCNav2Health.hpp
gnsstk::bds::enbWN
@ enbWN
Definition: BDSD1Bits.hpp:227
gnsstk::galfnav::esbOMEGA0
@ esbOMEGA0
OMEGA0 start bit.
Definition: GalFBits.hpp:213
gnsstk::StdNavTimeOffset::effTime
CommonTime effTime
Effectivity time (wnLSF,dn).
Definition: StdNavTimeOffset.hpp:127
gnsstk::SatelliteSystem::QZSS
@ QZSS
gnsstk::gpscnav2::enbtoe
@ enbtoe
toe number of bits
Definition: GPSC2Bits.hpp:88
gnsstk::galfnav::escaf1
@ escaf1
af1 scale factor
Definition: GalFBits.hpp:108
gnsstk::galfnav::anbaf1
@ anbaf1
Definition: GalFBits.hpp:445
gnsstk::gpscnav2::gsbGNSS
@ gsbGNSS
GNSS ID start bit.
Definition: GPSC2Bits.hpp:299
gnsstk::galfnav::esbCuc
@ esbCuc
Cuc start bit.
Definition: GalFBits.hpp:255
gnsstk::gpscnav2::gnbGNSS
@ gnbGNSS
GNSS ID number of bits.
Definition: GPSC2Bits.hpp:300
gnsstk::gpscnav2::enbURAned1
@ enbURAned1
URA_NED1 number of bits.
Definition: GPSC2Bits.hpp:164
gnsstk::StdNavTimeOffset::refTime
CommonTime refTime
Reference time for computation.
Definition: StdNavTimeOffset.hpp:126
gnsstk::gpscnav2::csbBeta0
@ csbBeta0
Definition: GPSC2Bits.hpp:265
TimeCorrection.hpp
gnsstk::GPSCNav2Alm::healthL1
bool healthL1
L1 signal health.
Definition: GPSCNav2Alm.hpp:83
gnsstk::gpscnav2::cnbBeta2
@ cnbBeta2
Definition: GPSC2Bits.hpp:274
gnsstk::gpscnav2::esbURAned1
@ esbURAned1
URA_NED1 start bit.
Definition: GPSC2Bits.hpp:163
gnsstk::bds::escCrs
@ escCrs
Definition: BDSD1Bits.hpp:448
gnsstk::gpscnav2::csbBeta3
@ csbBeta3
Definition: GPSC2Bits.hpp:277
gnsstk::gpscnav2::csbAlpha3
@ csbAlpha3
Definition: GPSC2Bits.hpp:261
gnsstk::gpscnav2::csbISCL2C
@ csbISCL2C
Definition: GPSC2Bits.hpp:285
gnsstk::gpscnav2::escITOW
@ escITOW
ITOW scale factor.
Definition: GPSC2Bits.hpp:75
gnsstk::OrbitDataKepler::af1
double af1
SV clock drift (sec/sec)
Definition: OrbitDataKepler.hpp:196
gnsstk::gpscnav2::escURA
@ escURA
URA index scale factor.
Definition: GPSC2Bits.hpp:85
gnsstk::bds::escCis
@ escCis
Definition: BDSD1Bits.hpp:537
gnsstk::gpscnav2::gscA2
@ gscA2
A2-ggto power factor.
Definition: GPSC2Bits.hpp:321
gnsstk::gpscnav2::gsbWN
@ gsbWN
WNggto start bit.
Definition: GPSC2Bits.hpp:307
gnsstk::gpscnav2::esctop
@ esctop
top scale factor
Definition: GPSC2Bits.hpp:79
gnsstk::gpscnav2::gsbA1
@ gsbA1
A1-ggto start bit.
Definition: GPSC2Bits.hpp:315
gnsstk::gpscnav2::escdOMEGAdot
@ escdOMEGAdot
Delta OMEGAdot power factor.
Definition: GPSC2Bits.hpp:129
gnsstk::gpscnav2::gsbA2
@ gsbA2
A2-ggto start bit.
Definition: GPSC2Bits.hpp:319
gnsstk::StdNavTimeOffset::tot
double tot
Time data reference time of week (storage only).
Definition: StdNavTimeOffset.hpp:128
gnsstk::OrbitDataKepler::dn
double dn
Correction to mean motion (rad/sec)
Definition: OrbitDataKepler.hpp:183
gnsstk::galfnav::esbidot
@ esbidot
idot start bit
Definition: GalFBits.hpp:218
gnsstk::gpscnav2::csbISCL1CA
@ csbISCL1CA
Definition: GPSC2Bits.hpp:281
gnsstk::GPSCNav2Eph::deltaA
double deltaA
Semi-major axis relative to reference (Aref).
Definition: GPSCNav2Eph.hpp:92


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