PNBGPSLNavDataFactory_T.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 "FactoryCounter.hpp"
41 #include "TestUtil.hpp"
42 #include "GPSLNavTimeOffset.hpp"
43 #include "GPSLNavHealth.hpp"
44 #include "GPSLNavEph.hpp"
45 #include "GPSLNavAlm.hpp"
46 #include "GPSLNavIono.hpp"
47 #include "GPSLNavISC.hpp"
48 #include "TimeString.hpp"
49 #include "CivilTime.hpp"
50 
51 using namespace std;
52 
53 // avoid having to type out template params over and over.
55 
56 namespace gnsstk
57 {
58  ostream& operator<<(ostream& s, GPSLNavL2Codes e)
59  {
60  s << static_cast<int>(e);
61  return s;
62  }
63  std::ostream& operator<<(std::ostream& s, SVHealth h)
64  {
65  s << StringUtils::asString(h);
66  return s;
67  }
68 }
69 
70 
72 {
73 public:
75  // addData tests for a variety of filter states
77  unsigned addDataAllTest();
79  unsigned addDataAlmanacTest();
81  unsigned addDataEphemerisTest();
83  unsigned addDataHealthTest();
85  unsigned addDataTimeTest();
87  unsigned addDataEphHealthTest();
89  unsigned addDataValidityTest();
90  unsigned processEphTest();
91  unsigned processAlmOrbTest();
92  unsigned processSVID51Test();
93  unsigned processSVID63Test();
94  unsigned processSVID56Test();
95 
96  // tests with QZSS data
97 
99  unsigned addDataAllQZSSTest();
100  // no need to mirror the other addData tests from GPS as they
101  // are testing aspects that are not specific to GPS (type
102  // filter).
103  unsigned processEphQZSSTest();
104  unsigned processAlmOrbQZSSTest();
105  unsigned processSVID51QZSSTest();
106  unsigned processSVID56QZSSTest();
107 
108 #include "LNavTestDataDecl.hpp"
109 };
110 
111 
114 {
115 #include "LNavTestDataDef.hpp"
116 }
117 
118 
121 {
122  TUDEF("PNBGPSLNavDataFactory", "addData");
123  GPSFactoryCounter fc(testFramework);
129  gnsstk::PackedNavBitsPtr nonGPS = std::make_shared<gnsstk::PackedNavBits>(
130  gloSid, gloid, gloNav, "XX", almLNAVGPS26ct);
131  gnsstk::NavDataPtrList navOut;
132  // should refuse non-GPS data
133  TUASSERTE(bool, false, uut.addData(nonGPS, navOut));
134  // The rest is checking that we're processing the good data
135  // appropriately, but I'm not bothering to check the detailed
136  // contents as that is assumed to be tested in the process*
137  // tests.
138  // Add subframe 1, expect 1 health and 1 ISC.
139  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF1, navOut));
140  fc.validateResults(navOut, __LINE__, 2, 0, 0, 0, 1, 0, 1);
141  // add subframe 2, expect nothing yet
142  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF2, navOut));
143  fc.validateResults(navOut, __LINE__);
144  // add subframe 3, expect the completed ephemeris
145  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF3, navOut));
146  fc.validateResults(navOut, __LINE__, 1, 0, 1);
147  // add almanac sv id 25, expect health
148  TUASSERTE(bool, true, uut.addData(almLNAVGPS25, navOut));
149  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
150  // add almanac sv id 26, expect health
151  TUASSERTE(bool, true, uut.addData(almLNAVGPS26, navOut));
152  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
153  // add page 56, expect time offset and iono data
154  TUASSERTE(bool, true, uut.addData(pg56LNAVGPS, navOut));
155  fc.validateResults(navOut, __LINE__, 2, 0, 0, 1, 0, 1);
156  // add page 63, expect 8 health
157  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
158  fc.validateResults(navOut, __LINE__, 8, 0, 0, 0, 8);
159  // add page 51, expect 24 health and 2 almanacs
160  TUASSERTE(bool, true, uut.addData(pg51LNAVGPS, navOut));
161  fc.validateResults(navOut, __LINE__, 26, 2, 0, 0, 24);
162  TURETURN();
163 }
164 
165 
168 {
169  TUDEF("PNBGPSLNavDataFactory", "addData");
170  GPSFactoryCounter fc(testFramework);
172  gnsstk::NavDataPtrList navOut;
173  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Almanac}));
174  // Add subframe 1, expect nothing.
175  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF1, navOut));
176  fc.validateResults(navOut, __LINE__);
177  // add subframe 2, expect nothing.
178  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF2, navOut));
179  fc.validateResults(navOut, __LINE__);
180  // add subframe 3, expect nothing.
181  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF3, navOut));
182  fc.validateResults(navOut, __LINE__);
183  // add almanac sv id 25, expect nothing
184  TUASSERTE(bool, true, uut.addData(almLNAVGPS25, navOut));
185  fc.validateResults(navOut, __LINE__);
186  // add almanac sv id 26, expect nothing
187  TUASSERTE(bool, true, uut.addData(almLNAVGPS26, navOut));
188  fc.validateResults(navOut, __LINE__);
189  // add page 56, expect nothing
190  TUASSERTE(bool, true, uut.addData(pg56LNAVGPS, navOut));
191  fc.validateResults(navOut, __LINE__);
192  // add page 63, expect nothing
193  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
194  fc.validateResults(navOut, __LINE__);
195  // add page 51, expect 2 almanacs
196  TUASSERTE(bool, true, uut.addData(pg51LNAVGPS, navOut));
197  fc.validateResults(navOut, __LINE__, 2, 2);
198  TURETURN();
199 }
200 
201 
204 {
205  TUDEF("PNBGPSLNavDataFactory", "addData");
206  GPSFactoryCounter fc(testFramework);
208  gnsstk::NavDataPtrList navOut;
209  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Ephemeris}));
210  // Add subframe 1, expect nothing.
211  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF1, navOut));
212  fc.validateResults(navOut, __LINE__);
213  // add subframe 2, expect nothing.
214  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF2, navOut));
215  fc.validateResults(navOut, __LINE__);
216  // add subframe 3, expect a completed ephemeris.
217  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF3, navOut));
218  fc.validateResults(navOut, __LINE__, 1, 0, 1);
219  // add almanac sv id 25, expect nothing
220  TUASSERTE(bool, true, uut.addData(almLNAVGPS25, navOut));
221  fc.validateResults(navOut, __LINE__);
222  // add almanac sv id 26, expect nothing
223  TUASSERTE(bool, true, uut.addData(almLNAVGPS26, navOut));
224  fc.validateResults(navOut, __LINE__);
225  // add page 56, expect nothing
226  TUASSERTE(bool, true, uut.addData(pg56LNAVGPS, navOut));
227  fc.validateResults(navOut, __LINE__);
228  // add page 63, expect nothing
229  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
230  fc.validateResults(navOut, __LINE__);
231  // add page 51, expect nothing
232  TUASSERTE(bool, true, uut.addData(pg51LNAVGPS, navOut));
233  fc.validateResults(navOut, __LINE__);
234  TURETURN();
235 }
236 
237 
240 {
241  TUDEF("PNBGPSLNavDataFactory", "addData");
242  GPSFactoryCounter fc(testFramework);
244  gnsstk::NavDataPtrList navOut;
245  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Health}));
246  // Add subframe 1, expect 1 health object.
247  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF1, navOut));
248  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
249  // add subframe 2, expect nothing.
250  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF2, navOut));
251  fc.validateResults(navOut, __LINE__);
252  // add subframe 3, expect nothing.
253  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF3, navOut));
254  fc.validateResults(navOut, __LINE__);
255  // add almanac sv id 25, expect 1 health
256  TUASSERTE(bool, true, uut.addData(almLNAVGPS25, navOut));
257  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
258  // add almanac sv id 26, expect 1 health
259  TUASSERTE(bool, true, uut.addData(almLNAVGPS26, navOut));
260  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
261  // add page 56, expect nothing
262  TUASSERTE(bool, true, uut.addData(pg56LNAVGPS, navOut));
263  fc.validateResults(navOut, __LINE__);
264  // add page 63, expect 8 health
265  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
266  fc.validateResults(navOut, __LINE__, 8, 0, 0, 0, 8);
267  // add page 51, expect 24 health
268  TUASSERTE(bool, true, uut.addData(pg51LNAVGPS, navOut));
269  fc.validateResults(navOut, __LINE__, 24, 0, 0, 0, 24);
270  TURETURN();
271 }
272 
273 
276 {
277  TUDEF("PNBGPSLNavDataFactory", "addData");
278  GPSFactoryCounter fc(testFramework);
280  gnsstk::NavDataPtrList navOut;
281  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::TimeOffset}));
282  // Add subframe 1, expect nothing.
283  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF1, navOut));
284  fc.validateResults(navOut, __LINE__);
285  // add subframe 2, expect nothing.
286  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF2, navOut));
287  fc.validateResults(navOut, __LINE__);
288  // add subframe 3, expect nothing.
289  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF3, navOut));
290  fc.validateResults(navOut, __LINE__);
291  // add almanac sv id 25, expect nothing.
292  TUASSERTE(bool, true, uut.addData(almLNAVGPS25, navOut));
293  fc.validateResults(navOut, __LINE__);
294  // add almanac sv id 26, expect nothing.
295  TUASSERTE(bool, true, uut.addData(almLNAVGPS26, navOut));
296  fc.validateResults(navOut, __LINE__);
297  // add page 56, expect time offset
298  TUASSERTE(bool, true, uut.addData(pg56LNAVGPS, navOut));
299  fc.validateResults(navOut, __LINE__, 1, 0, 0, 1);
300  // add page 63, expect nothing.
301  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
302  fc.validateResults(navOut, __LINE__);
303  // add page 51, expect nothing.
304  TUASSERTE(bool, true, uut.addData(pg51LNAVGPS, navOut));
305  fc.validateResults(navOut, __LINE__);
306  TURETURN();
307 }
308 
309 
312 {
313  TUDEF("PNBGPSLNavDataFactory", "addData");
315  gnsstk::NavDataPtrList navOut;
316  GPSFactoryCounter fc(testFramework);
317  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Ephemeris,
318  gnsstk::NavMessageType::Health}));
319  // Add subframe 1, expect 1 health and 1 ISC
320  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF1, navOut));
321  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
322  // add subframe 2, expect nothing.
323  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF2, navOut));
324  fc.validateResults(navOut, __LINE__);
325  // add subframe 3, expect the completed ephemeris
326  TUASSERTE(bool, true, uut.addData(ephLNAVGPSSF3, navOut));
327  fc.validateResults(navOut, __LINE__, 1, 0, 1);
328  // add almanac sv id 25, expect 1 health
329  TUASSERTE(bool, true, uut.addData(almLNAVGPS25, navOut));
330  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
331  // add almanac sv id 26, expect 1 health
332  TUASSERTE(bool, true, uut.addData(almLNAVGPS26, navOut));
333  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
334  // add page 56, expect nothing.
335  TUASSERTE(bool, true, uut.addData(pg56LNAVGPS, navOut));
336  fc.validateResults(navOut, __LINE__);
337  // add page 63, expect 8 health
338  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
339  fc.validateResults(navOut, __LINE__, 8, 0, 0, 0, 8);
340  // add page 51, expect 24 health
341  TUASSERTE(bool, true, uut.addData(pg51LNAVGPS, navOut));
342  fc.validateResults(navOut, __LINE__, 24, 0, 0, 0, 24);
343  TURETURN();
344 }
345 
346 
349 {
350  TUDEF("PNBGPSLNavDataFactory", "addData");
351  GPSFactoryCounter fc(testFramework);
353  gnsstk::NavDataPtrList navOut;
354  // make a copy of page 63 and tweak a bit for bad parity
355  gnsstk::PackedNavBitsPtr pg63Bad = std::make_shared<gnsstk::PackedNavBits>(
356  *pg63LNAVGPS);
357  pg63Bad->insertUnsignedLong(0, 29, 1);
358  // default = all validity
359  // add page 63, expect 8 health
360  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
361  fc.validateResults(navOut, __LINE__, 8, 0, 0, 0, 8);
362  // check valid only
364  // add page 63, expect 8 health
365  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
366  fc.validateResults(navOut, __LINE__, 8, 0, 0, 0, 8);
367  // add BAD page 63, expect nothing
368  TUASSERTE(bool, true, uut.addData(pg63Bad, navOut));
369  fc.validateResults(navOut, __LINE__);
370  // check invalid only
372  // add page 63, expect nothing
373  TUASSERTE(bool, true, uut.addData(pg63LNAVGPS, navOut));
374  fc.validateResults(navOut, __LINE__);
375  // add BAD page 63, expect 8 health.
376  TUASSERTE(bool, true, uut.addData(pg63Bad, navOut));
377  fc.validateResults(navOut, __LINE__, 8, 0, 0, 0, 8);
378  TURETURN();
379 }
380 
381 
384 {
385  TUDEF("PNBGPSLNavDataFactory", "processEph");
386  GPSFactoryCounter fc(testFramework);
388  gnsstk::NavMessageID nmidExp(
393  gnsstk::CommonTime toeExp = gnsstk::GPSWeekSecond(1869,7200.0);
394  gnsstk::CommonTime beginExp = gnsstk::GPSWeekSecond(1869, 0.0);
395  gnsstk::CommonTime endExp = gnsstk::GPSWeekSecond(1869, 14400.0);
396  gnsstk::NavDataPtrList navOut;
398  gnsstk::GPSLNavEph *eph;
399  gnsstk::GPSLNavISC *isc;
400  // success, health data only
401  TUASSERTE(bool, true, uut.processEph(1, ephLNAVGPSSF1, navOut));
402  for (const auto& i : navOut)
403  {
404  if ((hea = dynamic_cast<gnsstk::GPSLNavHealth*>(i.get())) != nullptr)
405  {
407  // NavData fields
409  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
410  // NavHealthData has no fields
411  // GPSLNavHealth
412  // Stored as uint8_t but I want failures to print numbers,
413  // not characters, so I use unsigned.
414  TUASSERTE(unsigned, 0, hea->svHealth);
415  }
416  else if ((isc = dynamic_cast<gnsstk::GPSLNavISC*>(i.get())) != nullptr)
417  {
419  // NavData fields
421  TUASSERTE(gnsstk::NavMessageID, nmidExp, isc->signal);
422  // InterSigCorr
423  TUASSERTFE(-6.519258E-09, isc->isc);
424  // GPSLNavISC
425  TUASSERTE(uint32_t, 0x8b, isc->pre);
426  TUASSERTE(uint32_t, 0x34d, isc->tlm);
427  TUASSERTE(bool, false, isc->isf);
428  TUASSERTE(bool, false, isc->alert);
429  TUASSERTE(bool, true, isc->asFlag);
430  }
431  }
432  fc.validateResults(navOut, __LINE__, 2, 0, 0, 0, 1, 0, 1);
433  TUASSERTE(bool, true, uut.processEph(2, ephLNAVGPSSF2, navOut));
434  fc.validateResults(navOut, __LINE__);
435  // success, and we have an ephemeris.
436  TUASSERTE(bool, true, uut.processEph(3, ephLNAVGPSSF3, navOut));
437  for (const auto& i : navOut)
438  {
439  if ((eph = dynamic_cast<gnsstk::GPSLNavEph*>(i.get())) != nullptr)
440  {
442  // NavData fields
444  TUASSERTE(gnsstk::NavMessageID, nmidExp, eph->signal);
445  // OrbitData has no fields
446  // OrbitDataKepler fields
448  TUASSERTE(gnsstk::CommonTime, toeExp, eph->Toe);
449  TUASSERTE(gnsstk::CommonTime, toeExp, eph->Toc); // same value as toe
451  TUASSERTFE(-4.73111868E-07, eph->Cuc);
452  TUASSERTFE(8.9444220066070556641e-06, eph->Cus);
453  TUASSERTFE(1.97843750E+02, eph->Crc);
454  TUASSERTFE(-6.62500000E+00, eph->Crs);
455  TUASSERTFE(-2.14204192E-07, eph->Cis);
456  TUASSERTFE(-2.2910535335540771484e-07, eph->Cic);
457  TUASSERTFE(1.6427405986254530745, eph->M0);
458  TUASSERTFE(4.92949105E-09, eph->dn);
459  TUASSERTFE(0, eph->dndot);
460  TUASSERTFE(0.012018375913612544537, eph->ecc);
461  TUASSERTFE(5153.6434803009033203, eph->Ahalf);
462  TUASSERTFE(26560041.122048005462, eph->A);
463  TUASSERTFE(0, eph->Adot);
464  TUASSERTFE(1.4502525982818956773, eph->OMEGA0);
465  TUASSERTFE(0.9404723483911350268, eph->i0);
466  TUASSERTFE(1.1153119288528794417, eph->w);
467  TUASSERTFE(-8.27748765E-09, eph->OMEGAdot);
468  TUASSERTFE(3.90730561E-10, eph->idot);
469  TUASSERTFE(-4.0083192288875579834e-05, eph->af0);
470  TUASSERTFE(-5.34328137E-12, eph->af1);
471  TUASSERTFE(0, eph->af2);
472  TUASSERTE(gnsstk::CommonTime, beginExp, eph->beginFit);
473  TUASSERTE(gnsstk::CommonTime, endExp, eph->endFit);
474  // GPSLNavData fields
475  TUASSERTE(uint32_t, 0x8b, eph->pre);
476  TUASSERTE(uint32_t, 0x34d, eph->tlm);
477  TUASSERTE(bool, false, eph->isf);
478  TUASSERTE(bool, false, eph->alert);
479  TUASSERTE(bool, true, eph->asFlag);
480  // GPSLNavEph fields
481  TUASSERTE(uint32_t, 0x8b, eph->pre2);
482  TUASSERTE(uint32_t, 0x34d, eph->tlm2);
483  TUASSERTE(bool, false, eph->isf2);
484  TUASSERTE(uint32_t, 0x8b, eph->pre3);
485  TUASSERTE(uint32_t, 0x34d, eph->tlm3);
486  TUASSERTE(bool, false, eph->isf3);
487  TUASSERTE(uint16_t, 0x4a, eph->iodc);
488  TUASSERTE(uint16_t, 0x4a, eph->iode);
489  TUASSERTE(unsigned, 0, eph->fitIntFlag);
490  TUASSERTE(unsigned, 0, eph->healthBits);
491  TUASSERTE(unsigned, 1, eph->uraIndex);
492  TUASSERTFE(-6.519258E-09, eph->tgd);
493  TUASSERTE(bool, false, eph->alert2);
494  TUASSERTE(bool, false, eph->alert3);
495  TUASSERTE(bool, true, eph->asFlag2);
496  TUASSERTE(bool, true, eph->asFlag3);
499  TUASSERTE(bool, false, eph->L2Pdata);
500  }
501  }
502  fc.validateResults(navOut, __LINE__, 1, 0, 1);
503  TURETURN();
504 }
505 
506 
509 {
510  TUDEF("PNBGPSLNavDataFactory", "processAlmOrb");
511  GPSFactoryCounter fc(testFramework);
513  gnsstk::NavMessageID nmidExp(
518  gnsstk::CommonTime toaExp = gnsstk::GPSWeekSecond(1869,147456.0);
519  gnsstk::CommonTime beginExp = gnsstk::GPSWeekSecond(1868, 500256.0);
520  gnsstk::CommonTime endExp = gnsstk::GPSWeekSecond(1869, 413856.0);
521  gnsstk::NavDataPtrList navOut;
522  TUASSERTE(bool, true, uut.processAlmOrb(25, almLNAVGPS25, navOut));
523  // no page 51 yet so we only get the health data back
524  gnsstk::GPSLNavHealth *hea =
525  dynamic_cast<gnsstk::GPSLNavHealth*>(navOut.begin()->get());
526  TUASSERT(hea != nullptr);
527  // NavData fields
529  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
530  // NavHealthData has no fields
531  // GPSLNavHealth
532  TUASSERTE(unsigned, 0, hea->svHealth);
533  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
534  TUCSM("processSVID51()");
535  navOut.clear();
536  TUASSERTE(bool, true, uut.processSVID51(pg51LNAVGPS, navOut));
537  // sv/page ID 51 contains health information for 24 satellites,
538  // starting with PRN 1.
539  unsigned subjPRN = 1;
540  gnsstk::GPSLNavAlm *alm;
541  for (const auto& i : navOut)
542  {
543  if ((hea = dynamic_cast<gnsstk::GPSLNavHealth*>(i.get())) != nullptr)
544  {
546  nmidExp.sat.id = subjPRN++;
547  // Yes this code can cause seg faults on failure, but that's ok.
548  gnsstk::GPSLNavHealth *hea =
549  dynamic_cast<gnsstk::GPSLNavHealth*>(i.get());
550  TUASSERT(hea != nullptr);
551  // NavData fields
553  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
554  // NavHealthData has no fields
555  // GPSLNavHealth
556  // Stored as uint8_t but I want failures to print numbers,
557  // not characters, so I use unsigned.
558  // PRN 10 is unhealthy, but we've already incremented subjPRN
559  // so compare it to 11.
560  TUASSERTE(unsigned, (subjPRN == 11 ? 0x3f : 0), hea->svHealth);
561  }
562  else if ((alm = dynamic_cast<gnsstk::GPSLNavAlm*>(i.get())) != nullptr)
563  {
565  // make sure to reset the expected sat ID to the
566  // appropriate value for the almanac page.
567  nmidExp.sat.id = 25;
568  // NavData fields
570  TUASSERTE(gnsstk::NavMessageID, nmidExp, alm->signal);
571  // OrbitData has no fields
572  // OrbitDataKepler fields
574  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toe);
575  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toc); // same value as toe
577  TUASSERTFE(0, alm->Cuc);
578  TUASSERTFE(0, alm->Cus);
579  TUASSERTFE(0, alm->Crc);
580  TUASSERTFE(0, alm->Crs);
581  TUASSERTFE(0, alm->Cis);
582  TUASSERTFE(0, alm->Cic);
583  TUASSERTFE(1.714684548614031856, alm->M0);
584  TUASSERTFE(0, alm->dn);
585  TUASSERTFE(0, alm->dndot);
586  TUASSERTFE(0.004675388336181640625, alm->ecc);
587  TUASSERTFE(5153.56005859375, alm->Ahalf);
588  TUASSERTFE(5153.56005859375 * 5153.56005859375, alm->A);
589  TUASSERTFE(0, alm->Adot);
590  TUASSERTFE(-0.62474775600600196412, alm->OMEGA0);
591  TUASSERTFE(0.036186367101724167816+gnsstk::GPSLNavData::refioffsetGPS,
592  alm->i0);
593  TUASSERTFE(0.72259183672470084225, alm->w);
594  TUASSERTFE(-7.92032991E-09, alm->OMEGAdot);
595  TUASSERTFE(0, alm->idot);
596  TUASSERTFE(-6.103515625e-05, alm->af0);
597  TUASSERTFE(-3.63797881E-12, alm->af1);
598  TUASSERTFE(0, alm->af2);
599  TUASSERTE(gnsstk::CommonTime, beginExp, alm->beginFit);
600  TUASSERTE(gnsstk::CommonTime, endExp, alm->endFit);
601  // GPSLNavData fields
602  TUASSERTE(uint32_t, 0x8b, alm->pre);
603  TUASSERTE(uint32_t, 0x34d, alm->tlm);
604  TUASSERTE(bool, false, alm->isf);
605  TUASSERTE(bool, false, alm->alert);
606  TUASSERTE(bool, true, alm->asFlag);
607  // GPSLNavAlm fields
608  TUASSERTE(unsigned, 0, alm->healthBits);
609  TUASSERTFE(0.036186367101724167816, alm->deltai);
610  TUASSERTFE(147456, alm->toa);
611  }
612  }
613  // 1 GPSLNavAlm and 24 GPSLNavHealth.
614  fc.validateResults(navOut, __LINE__, 25, 1, 0, 0, 24);
615  // Now that a page 51 has been loaded, we should immediately get
616  // both the almanac and health objects in return.
617  TUCSM("processAlmOrb");
618  TUASSERTE(bool, true, uut.processAlmOrb(26, almLNAVGPS26, navOut));
619  nmidExp.sat.id = 26;
620  for (const auto& i : navOut)
621  {
622  if ((hea = dynamic_cast<gnsstk::GPSLNavHealth*>(i.get())) != nullptr)
623  {
625  // Yes this code can cause seg faults on failure, but that's ok.
626  gnsstk::GPSLNavHealth *hea =
627  dynamic_cast<gnsstk::GPSLNavHealth*>(i.get());
628  TUASSERT(hea != nullptr);
629  // NavData fields
631  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
632  // NavHealthData has no fields
633  // GPSLNavHealth
634  // Stored as uint8_t but I want failures to print numbers,
635  // not characters, so I use unsigned.
636  TUASSERTE(unsigned, 0, hea->svHealth);
637  }
638  else if ((alm = dynamic_cast<gnsstk::GPSLNavAlm*>(i.get())) != nullptr)
639  {
641  // NavData fields
643  TUASSERTE(gnsstk::NavMessageID, nmidExp, alm->signal);
644  // OrbitData has no fields
645  // OrbitDataKepler fields
647  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toe);
648  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toc); // same value as toe
650  TUASSERTFE(0, alm->Cuc);
651  TUASSERTFE(0, alm->Cus);
652  TUASSERTFE(0, alm->Crc);
653  TUASSERTFE(0, alm->Crs);
654  TUASSERTFE(0, alm->Cis);
655  TUASSERTFE(0, alm->Cic);
656  TUASSERTFE(1.3982957680142222845, alm->M0);
657  TUASSERTFE(0, alm->dn);
658  TUASSERTFE(0, alm->dndot);
659  TUASSERTFE(0.0002918243408203125, alm->ecc);
660  TUASSERTFE(5153.60791015625, alm->Ahalf);
661  TUASSERTFE(5153.60791015625 * 5153.60791015625, alm->A);
662  TUASSERTFE(0, alm->Adot);
663  TUASSERTFE(-0.63010732608789443709, alm->OMEGA0);
664  TUASSERTFE(0.018239990305952701738+gnsstk::GPSLNavData::refioffsetGPS,
665  alm->i0);
666  TUASSERTFE(-0.27279354095737701202, alm->w);
667  TUASSERTFE(-8.1031946734407515747e-09, alm->OMEGAdot);
668  TUASSERTFE(0, alm->idot);
669  TUASSERTFE(-0.0001068115234375, alm->af0);
670  TUASSERTFE(-1.4551915228366851807e-11, alm->af1);
671  TUASSERTFE(0, alm->af2);
672  TUASSERTE(gnsstk::CommonTime, beginExp, alm->beginFit);
673  TUASSERTE(gnsstk::CommonTime, endExp, alm->endFit);
674  // GPSLNavData fields
675  TUASSERTE(uint32_t, 0x8b, alm->pre);
676  TUASSERTE(uint32_t, 0x34d, alm->tlm);
677  TUASSERTE(bool, false, alm->isf);
678  TUASSERTE(bool, false, alm->alert);
679  TUASSERTE(bool, true, alm->asFlag);
680  // GPSLNavAlm fields
681  TUASSERTE(unsigned, 0, alm->healthBits);
682  TUASSERTFE(0.018239990305952701738, alm->deltai);
683  TUASSERTFE(147456, alm->toa);
684  }
685  }
686  fc.validateResults(navOut, __LINE__, 2, 1, 0, 0, 1);
687  TURETURN();
688 }
689 
690 
693 {
694  TUDEF("PNBGPSLNavDataFactory", "processSVID51");
696  gnsstk::NavMessageID nmidExp(
701  gnsstk::NavDataPtrList navOut;
702  TUASSERTE(bool, true, uut.processSVID51(pg51LNAVGPS, navOut));
703  TUASSERTE(size_t, 24, navOut.size());
704  // sv/page ID 51 contains health information for 24 satellites,
705  // starting with PRN 1.
706  unsigned subjPRN = 1;
707  for (const auto& i : navOut)
708  {
709  nmidExp.sat.id = subjPRN++;
710  // Yes this code can cause seg faults on failure, but that's ok.
711  gnsstk::GPSLNavHealth *hea =
712  dynamic_cast<gnsstk::GPSLNavHealth*>(i.get());
713  TUASSERT(hea != nullptr);
714  // NavData fields
716  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
717  // NavHealthData has no fields
718  // GPSLNavHealth
719  // Stored as uint8_t but I want failures to print numbers,
720  // not characters, so I use unsigned.
721  // PRN 10 is unhealthy, but we've already incremented subjPRN
722  // so compare it to 11.
723  TUASSERTE(unsigned, (subjPRN == 11 ? 0x3f : 0), hea->svHealth);
724  }
725  TURETURN();
726 }
727 
728 
731 {
732  TUDEF("PNBGPSLNavDataFactory", "processSVID63");
734  gnsstk::NavMessageID nmidExp(
739  gnsstk::NavDataPtrList navOut;
740  TUASSERTE(bool, true, uut.processSVID63(pg63LNAVGPS, navOut));
741  TUASSERTE(size_t, 8, navOut.size());
742  // sv/page ID 63 contains health information for 8 satellites,
743  // starting with PRN 25.
744  unsigned subjPRN = 25;
745  for (const auto& i : navOut)
746  {
747  nmidExp.sat.id = subjPRN++;
748  // Yes this code can cause seg faults on failure, but that's ok.
749  gnsstk::GPSLNavHealth *hea =
750  dynamic_cast<gnsstk::GPSLNavHealth*>(i.get());
751  TUASSERT(hea != nullptr);
752  // NavData fields
754  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
755  // NavHealthData has no fields
756  // GPSLNavHealth
757  // Stored as uint8_t but I want failures to print numbers,
758  // not characters, so I use unsigned.
761  TUASSERTE(unsigned, 0, hea->svHealth);
762  }
763  TURETURN();
764 }
765 
766 
769 {
770  TUDEF("PNBGPSLNavDataFactory", "processSVID56");
771  GPSFactoryCounter fc(testFramework);
773  gnsstk::NavMessageID nmidExp(
778  gnsstk::NavDataPtrList navOut;
780  gnsstk::GPSLNavIono *iono;
781  TUASSERTE(bool, true, uut.processSVID56(pg56LNAVGPS, navOut));
782  for (const auto& i : navOut)
783  {
784  if ((to = dynamic_cast<gnsstk::GPSLNavTimeOffset*>(i.get())) != nullptr)
785  {
787  // NavData fields
789  TUASSERTE(gnsstk::NavMessageID, nmidExp, to->signal);
790  // TimeOffsetData has no fields
791  // GPSLNavTimeOffset fields
792  TUASSERTFE(17, to->deltatLS);
793  TUASSERTFE(4.65661287E-09, to->a0);
794  TUASSERTFE(1.42108547E-14, to->a1);
795  TUASSERTFE(147456, to->tot);
796  TUASSERTE(unsigned, 1869, to->wnot);
797  TUASSERTE(unsigned, 1851, to->wnLSF);
799  gnsstk::GPSWeekSecond(1869,147456).convertToCommonTime(),
800  to->refTime);
801  TUASSERTE(unsigned, 3, to->dn);
802  TUASSERTFE(17, to->deltatLSF);
803  }
804  else if ((iono = dynamic_cast<gnsstk::GPSLNavIono*>(i.get())) != nullptr)
805  {
807  // NavData fields
809  TUASSERTE(gnsstk::NavMessageID, nmidExp, iono->signal);
810  TUASSERTE(uint32_t, 0x8b, iono->pre);
811  TUASSERTE(uint32_t, 845, iono->tlm);
812  TUASSERTE(bool, false, iono->isf);
813  TUASSERTE(bool, false, iono->alert);
814  TUASSERTE(bool, true, iono->asFlag);
815  TUASSERTFE( 2.142041922e-08, iono->alpha[0]);
816  TUASSERTFE(-7.450580597e-09, iono->alpha[1]);
817  TUASSERTFE(-1.192092896e-07, iono->alpha[2]);
818  TUASSERTFE( 1.192092896e-07, iono->alpha[3]);
819  TUASSERTFE( 1.290240000e+05, iono->beta[0]);
820  TUASSERTFE(-4.915200000e+04, iono->beta[1]);
821  TUASSERTFE(-1.966080000e+05, iono->beta[2]);
822  TUASSERTFE( 6.553600000e+04, iono->beta[3]);
823  }
824  }
825  fc.validateResults(navOut, __LINE__, 2, 0, 0, 1, 0, 1);
826  TURETURN();
827 }
828 
829 
832 {
833  TUDEF("PNBGPSLNavDataFactory", "addData(QZSS)");
834  GPSFactoryCounter fc(testFramework);
836  gnsstk::NavDataPtrList navOut;
837  // Add subframe 1, expect 1 health and 1 ISC.
838  TUASSERTE(bool, true, uut.addData(ephLNAVQZSSSF1, navOut));
839  fc.validateResults(navOut, __LINE__, 2, 0, 0, 0, 1, 0, 1);
840  // add subframe 2, expect nothing yet
841  TUASSERTE(bool, true, uut.addData(ephLNAVQZSSSF2, navOut));
842  fc.validateResults(navOut, __LINE__);
843  // add subframe 3, expect the completed ephemeris
844  TUASSERTE(bool, true, uut.addData(ephLNAVQZSSSF3, navOut));
845  fc.validateResults(navOut, __LINE__, 1, 0, 1);
846  // add almanac sv id 1, expect health
847  TUASSERTE(bool, true, uut.addData(almLNAVQZSS1, navOut));
848  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
849  // add almanac sv id 2, expect health
850  TUASSERTE(bool, true, uut.addData(almLNAVQZSS2, navOut));
851  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
852  // add page 56, expect time offset and iono corrections
853  TUASSERTE(bool, true, uut.addData(pg56LNAVQZSS, navOut));
854  fc.validateResults(navOut, __LINE__, 2, 0, 0, 1, 0, 1);
855  // add page 51, expect 10 health and 2 almanacs
856  TUASSERTE(bool, true, uut.addData(pg51LNAVQZSS, navOut));
857  fc.validateResults(navOut, __LINE__, 12, 2, 0, 0, 10);
858  // add page 61, expect time offset and iono corrections
859  TUASSERTE(bool, true, uut.addData(pg61LNAVQZSS, navOut));
860  fc.validateResults(navOut, __LINE__, 2, 0, 0, 1, 0, 1);
861  TURETURN();
862 }
863 
864 
867 {
868  TUDEF("PNBGPSLNavDataFactory", "processEph(QZSS)");
869  GPSFactoryCounter fc(testFramework);
871  gnsstk::NavMessageID nmidExp(
876  gnsstk::CommonTime toeExp = gnsstk::GPSWeekSecond(2118,522000,
878  gnsstk::CommonTime beginExp = gnsstk::GPSWeekSecond(2118,518400,
880  gnsstk::CommonTime endExp = gnsstk::GPSWeekSecond(2118,530100,
882  gnsstk::NavDataPtrList navOut;
884  gnsstk::GPSLNavEph *eph;
885  gnsstk::GPSLNavISC *isc;
886  // success, 1 health data and 1 ISC
887  TUASSERTE(bool, true, uut.processEph(1, ephLNAVQZSSSF1, navOut));
888  for (const auto& i : navOut)
889  {
890  if ((hea = dynamic_cast<gnsstk::GPSLNavHealth*>(i.get())) != nullptr)
891  {
893  // NavData fields
895  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
896  // NavHealthData has no fields
897  // GPSLNavHealth
898  // Stored as uint8_t but I want failures to print numbers,
899  // not characters, so I use unsigned.
900  TUASSERTE(unsigned, 0, hea->svHealth);
901  }
902  else if ((isc = dynamic_cast<gnsstk::GPSLNavISC*>(i.get())) != nullptr)
903  {
905  // NavData fields
907  TUASSERTE(gnsstk::NavMessageID, nmidExp, isc->signal);
908  // InterSigCorr
909  TUASSERTFE(-5.5879354476928710938e-09, isc->isc);
910  // GPSLNavISC
911  TUASSERTE(uint32_t, 0x8b, isc->pre);
912  TUASSERTE(uint32_t, 0xaa, isc->tlm);
913  TUASSERTE(bool, false, isc->isf);
914  TUASSERTE(bool, false, isc->alert);
915  TUASSERTE(bool, false, isc->asFlag);
916  }
917  }
918  fc.validateResults(navOut, __LINE__, 2, 0, 0, 0, 1, 0, 1);
919  TUASSERTE(bool, true, uut.processEph(2, ephLNAVQZSSSF2, navOut));
920  fc.validateResults(navOut, __LINE__);
921  // success, and we have an ephemeris.
922  TUASSERTE(bool, true, uut.processEph(3, ephLNAVQZSSSF3, navOut));
923  for (const auto& i : navOut)
924  {
925  if ((eph = dynamic_cast<gnsstk::GPSLNavEph*>(i.get())) != nullptr)
926  {
928  // NavData fields
930  TUASSERTE(gnsstk::NavMessageID, nmidExp, eph->signal);
931  // OrbitData has no fields
932  // OrbitDataKepler fields
934  TUASSERTE(gnsstk::CommonTime, toeExp, eph->Toe);
935  TUASSERTE(gnsstk::CommonTime, toeExp, eph->Toc); // same value as toe
937  TUASSERTFE(-3.25962901E-07, eph->Cuc);
938  TUASSERTFE(1.3930723071098327637E-05, eph->Cus);
939  TUASSERTFE(-2.38843750E+02, eph->Crc);
940  TUASSERTFE(-3.04062500E+01, eph->Crs);
941  TUASSERTFE(-5.36441803E-07, eph->Cis);
942  TUASSERTFE(-9.12696123E-08, eph->Cic);
943  TUASSERTFE(1.1030415015803312073E+00, eph->M0);
944  TUASSERTFE(2.43152985E-09, eph->dn);
945  TUASSERTFE(0, eph->dndot);
946  TUASSERTFE(7.5891476939432322979E-02, eph->ecc);
947  TUASSERTFE(::sqrt(4.2168440525536708534E+07), eph->Ahalf);
948  TUASSERTFE(4.2168440525536708534E+07, eph->A);
949  TUASSERTFE(0, eph->Adot);
950  TUASSERTFE(-3.0561569811139608355E+00, eph->OMEGA0);
951  TUASSERTFE(7.2813125210358609074E-01, eph->i0);
952  TUASSERTFE(-1.5543714330778595212E+00, eph->w);
953  TUASSERTFE(-2.63439545E-09, eph->OMEGAdot);
954  TUASSERTFE(9.47539469E-10, eph->idot);
955  TUASSERTFE(-1.8891552463173866272E-04, eph->af0);
956  TUASSERTFE(4.09272616E-12, eph->af1);
957  TUASSERTFE(0, eph->af2);
958  TUASSERTE(gnsstk::CommonTime, beginExp, eph->beginFit);
959  TUASSERTE(gnsstk::CommonTime, endExp, eph->endFit);
960  // GPSLNavData fields
961  TUASSERTE(uint32_t, 0x8b, eph->pre);
962  TUASSERTE(uint32_t, 0xaa, eph->tlm);
963  TUASSERTE(bool, false, eph->isf);
964  TUASSERTE(bool, false, eph->alert);
965  TUASSERTE(bool, false, eph->asFlag);
966  // GPSLNavEph fields
967  TUASSERTE(uint32_t, 0x8b, eph->pre2);
968  TUASSERTE(uint32_t, 0xaa, eph->tlm2);
969  TUASSERTE(uint32_t, 0x8b, eph->pre3);
970  TUASSERTE(uint32_t, 0xaa, eph->tlm3);
971  TUASSERTE(bool, false, eph->isf2);
972  TUASSERTE(bool, false, eph->isf3);
973  TUASSERTE(uint16_t, 0x381, eph->iodc);
974  TUASSERTE(uint16_t, 0x81, eph->iode);
975  TUASSERTE(unsigned, 0, eph->fitIntFlag);
976  TUASSERTE(unsigned, 0, eph->healthBits);
977  TUASSERTE(unsigned, 1, eph->uraIndex);
978  TUASSERTFE(-5.5879354476928710938E-09, eph->tgd);
979  TUASSERTE(bool, false, eph->alert2);
980  TUASSERTE(bool, false, eph->alert3);
981  TUASSERTE(bool, false, eph->asFlag2);
982  TUASSERTE(bool, false, eph->asFlag3);
985  TUASSERTE(bool, true, eph->L2Pdata);
986  }
987  }
988  fc.validateResults(navOut, __LINE__, 1, 0, 1);
989  TURETURN();
990 }
991 
992 
995 {
996  TUDEF("PNBGPSLNavDataFactory", "processAlmOrb(QZSS)");
997  GPSFactoryCounter fc(testFramework);
999  gnsstk::NavMessageID nmidExp(
1004  gnsstk::CommonTime toaExp = gnsstk::GPSWeekSecond(2119,86016);
1005  gnsstk::CommonTime beginExp = toaExp - (70.0 * 3600.0);
1006  gnsstk::CommonTime endExp = toaExp + (74.0 * 3600.0);
1007  gnsstk::NavDataPtrList navOut;
1008  TUASSERTE(bool, true, uut.processAlmOrb(193, almLNAVQZSS1, navOut));
1009  TUASSERTE(size_t, 1, navOut.size());
1010  // no page 51 yet so we only get the health data back
1011  gnsstk::GPSLNavHealth *hea =
1012  dynamic_cast<gnsstk::GPSLNavHealth*>(navOut.begin()->get());
1013  TUASSERT(hea != nullptr);
1014  // NavData fields
1016  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
1017  // NavHealthData has no fields
1018  // GPSLNavHealth
1019  TUASSERTE(unsigned, 0, hea->svHealth);
1020  TUCSM("processSVID51()");
1021  navOut.clear();
1022  TUASSERTE(bool, true, uut.processSVID51(pg51LNAVQZSS, navOut));
1023  // sv/page ID 51 contains health information for 5 satellites,
1024  // starting with PRN 193.
1025  unsigned subjPRN = 193;
1026  gnsstk::GPSLNavAlm *alm;
1027  for (const auto& i : navOut)
1028  {
1029  if ((hea = dynamic_cast<gnsstk::GPSLNavHealth*>(i.get())) != nullptr)
1030  {
1032  nmidExp.sat.id = subjPRN;
1033  // Yes this code can cause seg faults on failure, but that's ok.
1034  gnsstk::GPSLNavHealth *hea =
1035  dynamic_cast<gnsstk::GPSLNavHealth*>(i.get());
1036  TUASSERT(hea != nullptr);
1037  // NavData fields
1039  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
1040  // NavHealthData has no fields
1041  // GPSLNavHealth
1042  switch (subjPRN)
1043  {
1044  case 193:
1045  case 194:
1046  case 195:
1047  case 199:
1048  TUASSERTE(unsigned, 0, hea->svHealth);
1049  break;
1050  case 196:
1051  case 197:
1052  case 198:
1053  case 200:
1054  case 201:
1055  case 202:
1056  TUASSERTE(unsigned, 0x3e, hea->svHealth);
1057  break;
1058  default:
1059  TUFAIL("Unknown subjPRN "+gnsstk::StringUtils::asString(subjPRN));
1060  break;
1061  }
1062  subjPRN++;
1063  }
1064  else if ((alm = dynamic_cast<gnsstk::GPSLNavAlm*>(i.get())) != nullptr)
1065  {
1067  // make sure to reset the expected sat ID to the
1068  // appropriate value for the almanac page.
1069  nmidExp.sat.id = 193;
1070  // NavData fields
1072  TUASSERTE(gnsstk::NavMessageID, nmidExp, alm->signal);
1073  // OrbitData has no fields
1074  // OrbitDataKepler fields
1076  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toe);
1077  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toc); // same value as toe
1079  TUASSERTFE(0, alm->Cuc);
1080  TUASSERTFE(0, alm->Cus);
1081  TUASSERTFE(0, alm->Crc);
1082  TUASSERTFE(0, alm->Crs);
1083  TUASSERTFE(0, alm->Cis);
1084  TUASSERTFE(0, alm->Cic);
1085  TUASSERTFE(8.4556833509804563143E-01, alm->M0);
1086  TUASSERTFE(0, alm->dn);
1087  TUASSERTFE(0, alm->dndot);
1088  TUASSERTFE(1.5868663787841796875E-02 + gnsstk::GPSLNavData::refEccQZSS,
1089  alm->ecc);
1090  TUASSERTFE(6.493703125E+03, alm->Ahalf);
1091  TUASSERTFE(6.493703125E+03 * 6.493703125E+03, alm->A);
1092  TUASSERTFE(0, alm->Adot);
1093  TUASSERTFE(3.1062594134985190841E+00, alm->OMEGA0);
1094  TUASSERTFE(-5.7116815898929418349E-02 +
1096  alm->i0);
1097  TUASSERTFE(-1.5547277282389830866E+00, alm->w);
1098  TUASSERTFE(-2.17151902E-09, alm->OMEGAdot);
1099  TUASSERTFE(0, alm->idot);
1100  TUASSERTFE(-1.8787384033203125E-04, alm->af0);
1101  TUASSERTFE(3.63797881E-12, alm->af1);
1102  TUASSERTFE(0, alm->af2);
1103  TUASSERTE(gnsstk::CommonTime, beginExp, alm->beginFit);
1104  TUASSERTE(gnsstk::CommonTime, endExp, alm->endFit);
1105  // GPSLNavData fields
1106  TUASSERTE(uint32_t, 0x8b, alm->pre);
1107  TUASSERTE(uint32_t, 0xaa, alm->tlm);
1108  TUASSERTE(bool, false, alm->isf);
1109  TUASSERTE(bool, false, alm->alert);
1110  TUASSERTE(bool, false, alm->asFlag);
1111  // GPSLNavAlm fields
1112  TUASSERTE(unsigned, 0, alm->healthBits);
1113  TUASSERTFE(-5.7116815898929418349E-02, alm->deltai);
1114  TUASSERTFE(86016, alm->toa);
1115  }
1116  }
1117  // 1 GPSLNavAlm and 10 GPSLNavHealth.
1118  fc.validateResults(navOut, __LINE__, 11, 1, 0, 0, 10);
1119  // Now that a page 51 has been loaded, we should immediately get
1120  // both the almanac and health objects in return.
1121  TUCSM("processAlmOrb");
1122  TUASSERTE(bool, true, uut.processAlmOrb(194, almLNAVQZSS2, navOut));
1123  nmidExp.sat.id = 194;
1124  for (const auto& i : navOut)
1125  {
1126  if ((hea = dynamic_cast<gnsstk::GPSLNavHealth*>(i.get())) != nullptr)
1127  {
1129  // Yes this code can cause seg faults on failure, but that's ok.
1130  gnsstk::GPSLNavHealth *hea =
1131  dynamic_cast<gnsstk::GPSLNavHealth*>(i.get());
1132  TUASSERT(hea != nullptr);
1133  // NavData fields
1135  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
1136  // NavHealthData has no fields
1137  // GPSLNavHealth
1138  // Stored as uint8_t but I want failures to print numbers,
1139  // not characters, so I use unsigned.
1140  TUASSERTE(unsigned, 0, hea->svHealth);
1141  }
1142  else if ((alm = dynamic_cast<gnsstk::GPSLNavAlm*>(i.get())) != nullptr)
1143  {
1145  // NavData fields
1147  TUASSERTE(gnsstk::NavMessageID, nmidExp, alm->signal);
1148  // OrbitData has no fields
1149  // OrbitDataKepler fields
1151  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toe);
1152  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toc); // same value as toe
1154  TUASSERTFE(0, alm->Cuc);
1155  TUASSERTFE(0, alm->Cus);
1156  TUASSERTFE(0, alm->Crc);
1157  TUASSERTFE(0, alm->Crs);
1158  TUASSERTFE(0, alm->Cis);
1159  TUASSERTFE(0, alm->Cic);
1160  TUASSERTFE(-1.3581512361304759473E+00, alm->M0);
1161  TUASSERTFE(0, alm->dn);
1162  TUASSERTFE(0, alm->dndot);
1163  TUASSERTFE(1.51500701904296875E-02 + gnsstk::GPSLNavData::refEccQZSS,
1164  alm->ecc);
1165  TUASSERTFE(6.49335595703125E+03, alm->Ahalf);
1166  TUASSERTFE(6.49335595703125E+03 * 6.49335595703125E+03, alm->A);
1167  TUASSERTFE(0, alm->Adot);
1168  TUASSERTFE(-8.9252926940374188725E-01, alm->OMEGA0);
1169  TUASSERTFE(-3.7139112981700014848E-02 +
1171  alm->i0);
1172  TUASSERTFE(-1.5782527617281980614E+00, alm->w);
1173  TUASSERTFE(-2.49153235E-09, alm->OMEGAdot);
1174  TUASSERTFE(0, alm->idot);
1175  TUASSERTFE(-2.86102294921875E-06, alm->af0);
1176  TUASSERTFE(0, alm->af1);
1177  TUASSERTFE(0, alm->af2);
1178  TUASSERTE(gnsstk::CommonTime, beginExp, alm->beginFit);
1179  TUASSERTE(gnsstk::CommonTime, endExp, alm->endFit);
1180  // GPSLNavData fields
1181  TUASSERTE(uint32_t, 0x8b, alm->pre);
1182  TUASSERTE(uint32_t, 0xaa, alm->tlm);
1183  TUASSERTE(bool, false, alm->isf);
1184  TUASSERTE(bool, false, alm->alert);
1185  TUASSERTE(bool, false, alm->asFlag);
1186  // GPSLNavAlm fields
1187  TUASSERTE(unsigned, 0, alm->healthBits);
1188  TUASSERTFE(-3.7139112981700014848E-02, alm->deltai);
1189  TUASSERTFE(86016, alm->toa);
1190  }
1191  }
1192  fc.validateResults(navOut, __LINE__, 2, 1, 0, 0, 1);
1193  TURETURN();
1194 }
1195 
1196 
1199 {
1200  TUDEF("PNBGPSLNavDataFactory", "processSVID51(QZSS)");
1202  gnsstk::NavMessageID nmidExp(
1207  gnsstk::NavDataPtrList navOut;
1208  TUASSERTE(bool, true, uut.processSVID51(pg51LNAVQZSS, navOut));
1209  TUASSERTE(size_t, 10, navOut.size());
1210  // sv/page ID 51 contains health information for 10 satellites,
1211  // starting with PRN 193.
1212  unsigned subjPRN = 193;
1213  for (const auto& i : navOut)
1214  {
1215  nmidExp.sat.id = subjPRN;
1216  // Yes this code can cause seg faults on failure, but that's ok.
1217  gnsstk::GPSLNavHealth *hea =
1218  dynamic_cast<gnsstk::GPSLNavHealth*>(i.get());
1219  TUASSERT(hea != nullptr);
1220  // NavData fields
1222  TUASSERTE(gnsstk::NavMessageID, nmidExp, hea->signal);
1223  // NavHealthData has no fields
1224  // GPSLNavHealth
1225  switch (subjPRN)
1226  {
1227  case 193:
1228  case 194:
1229  case 195:
1230  case 199:
1231  TUASSERTE(unsigned, 0, hea->svHealth);
1232  break;
1233  case 196:
1234  case 197:
1235  case 198:
1236  case 200:
1237  case 201:
1238  case 202:
1239  TUASSERTE(unsigned, 0x3e, hea->svHealth);
1240  break;
1241  default:
1242  TUFAIL("Unknown subjPRN "+gnsstk::StringUtils::asString(subjPRN));
1243  break;
1244  }
1245  subjPRN++;
1246  }
1247  TURETURN();
1248 }
1249 
1250 
1253 {
1254  TUDEF("PNBGPSLNavDataFactory", "processSVID56(QZSS)");
1255  GPSFactoryCounter fc(testFramework);
1257  gnsstk::NavMessageID nmidExp(
1262  gnsstk::CommonTime expRef = gnsstk::CivilTime(2020,8,17,2,10,8,
1264  gnsstk::NavDataPtrList navOut;
1266  gnsstk::GPSLNavIono *iono;
1267  // using page 56
1268  TUASSERTE(bool, true, uut.processSVID56(pg56LNAVQZSS, navOut));
1269  for (const auto& i : navOut)
1270  {
1271  if ((to = dynamic_cast<gnsstk::GPSLNavTimeOffset*>(i.get())) != nullptr)
1272  {
1274  // NavData fields
1276  TUASSERTE(gnsstk::NavMessageID, nmidExp, to->signal);
1277  // TimeOffsetData has no fields
1278  // StdNavTimeOffset fields
1281  TUASSERTFE(2.79396772E-09, to->a0);
1282  TUASSERTFE(0.00000000E+00, to->a1);
1283  TUASSERTFE(0.00000000E+00, to->a2);
1284  TUASSERTFE(18, to->deltatLS);
1285  TUASSERTE(gnsstk::CommonTime, expRef, to->refTime);
1286  TUASSERTFE(94208, to->tot);
1287  TUASSERTE(unsigned, 2119, to->wnot);
1288  TUASSERTE(unsigned, 2185, to->wnLSF);
1289  TUASSERTE(unsigned, 7, to->dn);
1290  TUASSERTFE(18, to->deltatLSF);
1291  }
1292  else if ((iono = dynamic_cast<gnsstk::GPSLNavIono*>(i.get())) != nullptr)
1293  {
1295  // NavData fields
1297  TUASSERTE(gnsstk::NavMessageID, nmidExp, iono->signal);
1298  TUASSERTE(uint32_t, 0x8b, iono->pre);
1299  TUASSERTE(uint32_t, 170, iono->tlm);
1300  TUASSERTE(bool, false, iono->isf);
1301  TUASSERTE(bool, false, iono->alert);
1302  TUASSERTE(bool, false, iono->asFlag);
1303  TUASSERTFE( 5.587935448e-09, iono->alpha[0]);
1304  TUASSERTFE(-7.450580597e-09, iono->alpha[1]);
1305  TUASSERTFE(-4.768371582e-07, iono->alpha[2]);
1306  TUASSERTFE(-5.364418030e-07, iono->alpha[3]);
1307  TUASSERTFE( 6.963200000e+04, iono->beta[0]);
1308  TUASSERTFE(-5.242880000e+05, iono->beta[1]);
1309  TUASSERTFE(-6.094848000e+06, iono->beta[2]);
1310  TUASSERTFE( 8.323072000e+06, iono->beta[3]);
1311  }
1312  }
1313  fc.validateResults(navOut, __LINE__, 2, 0, 0, 1, 0, 1);
1314  // using page 61
1315  TUASSERTE(bool, true, uut.processSVID56(pg61LNAVQZSS, navOut));
1316  for (const auto& i : navOut)
1317  {
1318  if ((to = dynamic_cast<gnsstk::GPSLNavTimeOffset*>(i.get())) != nullptr)
1319  {
1321  // NavData fields
1323  TUASSERTE(gnsstk::NavMessageID, nmidExp, to->signal);
1324  // TimeOffsetData has no fields
1325  // StdNavTimeOffset fields
1328  TUASSERTFE(2.79396772E-09, to->a0);
1329  TUASSERTFE(0.00000000E+00, to->a1);
1330  TUASSERTFE(0.00000000E+00, to->a2);
1331  TUASSERTFE(18, to->deltatLS);
1332  TUASSERTE(gnsstk::CommonTime, expRef, to->refTime);
1333  TUASSERTFE(94208, to->tot);
1334  TUASSERTE(unsigned, 2119, to->wnot);
1335  TUASSERTE(unsigned, 2185, to->wnLSF);
1336  TUASSERTE(unsigned, 7, to->dn);
1337  TUASSERTFE(18, to->deltatLSF);
1338  }
1339  else if ((iono = dynamic_cast<gnsstk::GPSLNavIono*>(i.get())) != nullptr)
1340  {
1342  // NavData fields
1344  TUASSERTE(gnsstk::NavMessageID, nmidExp, iono->signal);
1345  TUASSERTE(uint32_t, 0x8b, iono->pre);
1346  TUASSERTE(uint32_t, 170, iono->tlm);
1347  TUASSERTE(bool, false, iono->isf);
1348  TUASSERTE(bool, false, iono->alert);
1349  TUASSERTE(bool, false, iono->asFlag);
1350  TUASSERTFE( 1.024454832e-08, iono->alpha[0]);
1351  TUASSERTFE(-5.960464478e-08, iono->alpha[1]);
1352  TUASSERTFE(-2.980232239e-07, iono->alpha[2]);
1353  TUASSERTFE( 0.000000000e+00, iono->alpha[3]);
1354  TUASSERTFE( 7.782400000e+04, iono->beta[0]);
1355  TUASSERTFE( 3.112960000e+05, iono->beta[1]);
1356  TUASSERTFE(-8.257536000e+06, iono->beta[2]);
1357  TUASSERTFE( 8.323072000e+06, iono->beta[3]);
1358  }
1359  }
1360  fc.validateResults(navOut, __LINE__, 2, 0, 0, 1, 0, 1);
1361  TURETURN();
1362 }
1363 
1364 
1365 int main()
1366 {
1367  PNBGPSLNavDataFactory_T testClass;
1368  unsigned errorTotal = 0;
1369 
1370  errorTotal += testClass.addDataAllTest();
1371  errorTotal += testClass.addDataAlmanacTest();
1372  errorTotal += testClass.addDataEphemerisTest();
1373  errorTotal += testClass.addDataHealthTest();
1374  errorTotal += testClass.addDataTimeTest();
1375  errorTotal += testClass.addDataEphHealthTest();
1376  errorTotal += testClass.addDataValidityTest();
1377  errorTotal += testClass.processEphTest();
1378  errorTotal += testClass.processAlmOrbTest();
1379  errorTotal += testClass.processSVID51Test();
1380  errorTotal += testClass.processSVID63Test();
1381  errorTotal += testClass.processSVID56Test();
1382  errorTotal += testClass.addDataAllQZSSTest();
1383  errorTotal += testClass.processEphQZSSTest();
1384  errorTotal += testClass.processAlmOrbQZSSTest();
1385  errorTotal += testClass.processSVID51QZSSTest();
1386  errorTotal += testClass.processSVID56QZSSTest();
1387 
1388  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
1389  << std::endl;
1390 
1391  return errorTotal;
1392 }
gnsstk::PNBGPSLNavDataFactory::processSVID63
bool processSVID63(const PackedNavBitsPtr &navIn, NavDataPtrList &navOut)
Definition: PNBGPSLNavDataFactory.cpp:596
gnsstk::GPSLNavL2Codes::Pcode
@ Pcode
P/Y-code is broadcast on L2.
gnsstk::NavMessageType::ISC
@ ISC
Inter-signal corrections.
gnsstk::GPSLNavEph::codesL2
GPSLNavL2Codes codesL2
Code on L2 in-phase component.
Definition: GPSLNavEph.hpp:108
almLNAVQZSS2ct
gnsstk::CommonTime almLNAVQZSS2ct
Definition: LNavTestDataDecl.hpp:53
gnsstk::PNBGPSLNavDataFactory::processAlmOrb
bool processAlmOrb(unsigned long prn, const PackedNavBitsPtr &navIn, NavDataPtrList &navOut)
Definition: PNBGPSLNavDataFactory.cpp:371
gnsstk::GPSLNavEph::alert2
bool alert2
Alert flag from SF2 HOW.
Definition: GPSLNavEph.hpp:104
TUCSM
#define TUCSM(METHOD)
Definition: TestUtil.hpp:59
gnsstk::OrbitDataKepler::idot
double idot
Rate of inclination angle (rad/sec)
Definition: OrbitDataKepler.hpp:193
pg63LNAVGPSct
gnsstk::CommonTime pg63LNAVGPSct
Definition: LNavTestDataDecl.hpp:46
gnsstk::NavMessageID
Class used to identify/categorize navigation message data.
Definition: NavMessageID.hpp:52
gnsstk::GPSLNavEph::isf2
bool isf2
Integrity status flag from subframe 2.
Definition: GPSLNavEph.hpp:96
gnsstk::StdNavTimeOffset::deltatLSF
double deltatLSF
Current or future leap second count (UTC only).
Definition: StdNavTimeOffset.hpp:135
PNBGPSLNavDataFactory_T::PNBGPSLNavDataFactory_T
PNBGPSLNavDataFactory_T()
Definition: PNBGPSLNavDataFactory_T.cpp:113
gnsstk::GPSLNavHealth::svHealth
uint8_t svHealth
6-bit or 8-bit health.
Definition: GPSLNavHealth.hpp:80
ephLNAVGPSSF1
gnsstk::PackedNavBitsPtr ephLNAVGPSSF1
Definition: LNavTestDataDecl.hpp:43
gnsstk::SatID::id
int id
Satellite identifier, e.g. PRN.
Definition: SatID.hpp:154
gnsstk::PackedNavBitsPtr
std::shared_ptr< PackedNavBits > PackedNavBitsPtr
Managed pointer for passing PackedNavBits around.
Definition: PackedNavBits.hpp:66
gnsstk::GPSLNavData::refioffsetQZSS
static const GNSSTK_EXPORT double refioffsetQZSS
inclination offset, this + delta i = i0, defined in IS-QZSS.
Definition: GPSLNavData.hpp:67
gnsstk::CarrierBand::G1
@ G1
GLONASS G1.
TUCATCH
#define TUCATCH(STATEMENT)
Definition: TestUtil.hpp:193
gnsstk::OrbitDataKepler::Cis
double Cis
Sine inclination (rad)
Definition: OrbitDataKepler.hpp:180
gnsstk::OrbitDataKepler::A
double A
Semi-major axis (m)
Definition: OrbitDataKepler.hpp:186
gnsstk::PNBNavDataFactory::setTypeFilter
virtual void setTypeFilter(const NavMessageTypeSet &nmts)
Definition: PNBNavDataFactory.cpp:54
gnsstk::OrbitDataKepler::af2
double af2
SV clock drift rate (sec/sec**2)
Definition: OrbitDataKepler.hpp:197
gnsstk::OrbitDataKepler::ecc
double ecc
Eccentricity.
Definition: OrbitDataKepler.hpp:185
PNBGPSLNavDataFactory_T::addDataAllTest
unsigned addDataAllTest()
Test addData with all message types enabled.
Definition: PNBGPSLNavDataFactory_T.cpp:120
gnsstk::StdNavTimeOffset::src
TimeSystem src
Source time system.
Definition: StdNavTimeOffset.hpp:120
PNBGPSLNavDataFactory_T::processSVID63Test
unsigned processSVID63Test()
Definition: PNBGPSLNavDataFactory_T.cpp:730
gnsstk::PNBGPSLNavDataFactory::processEph
bool processEph(unsigned sfid, const PackedNavBitsPtr &navIn, NavDataPtrList &navOut)
Definition: PNBGPSLNavDataFactory.cpp:177
gnsstk::GPSLNavData::asFlag
bool asFlag
Anti-spoof flag from HOW.
Definition: GPSLNavData.hpp:84
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
gnsstk::NavMessageID::messageType
NavMessageType messageType
Definition: NavMessageID.hpp:97
TUFAIL
#define TUFAIL(MSG)
Definition: TestUtil.hpp:228
almLNAVGPS25
gnsstk::PackedNavBitsPtr almLNAVGPS25
Definition: LNavTestDataDecl.hpp:44
gnsstk::NavSatelliteID
Definition: NavSatelliteID.hpp:57
PNBGPSLNavDataFactory.hpp
ephLNAVQZSSSF2
gnsstk::PackedNavBitsPtr ephLNAVQZSSSF2
Definition: LNavTestDataDecl.hpp:50
gnsstk::GPSLNavEph::fitIntFlag
uint8_t fitIntFlag
Fit interval flag from subframe 2.
Definition: GPSLNavEph.hpp:100
gnsstk::OrbitDataKepler::OMEGAdot
double OMEGAdot
Rate of Rt ascension (rad/sec)
Definition: OrbitDataKepler.hpp:192
pg51LNAVQZSSct
gnsstk::CommonTime pg51LNAVQZSSct
Definition: LNavTestDataDecl.hpp:53
gnsstk::StdNavTimeOffset::tgt
TimeSystem tgt
Target time system.
Definition: StdNavTimeOffset.hpp:121
pg51LNAVQZSS
gnsstk::PackedNavBitsPtr pg51LNAVQZSS
Definition: LNavTestDataDecl.hpp:51
gnsstk::GPSLNavData::isf
bool isf
Integrity status flag.
Definition: GPSLNavData.hpp:82
gnsstk::SatID
Definition: SatID.hpp:89
gnsstk::NavMessageType::Health
@ Health
SV health status information message.
gnsstk::NavFit::endFit
CommonTime endFit
Time at end of fit interval.
Definition: NavFit.hpp:55
gnsstk::NavDataPtrList
std::list< NavDataPtr > NavDataPtrList
Definition: NavData.hpp:75
gnsstk::PNBGPSLNavDataFactory
Definition: PNBGPSLNavDataFactory.hpp:69
pg63LNAVGPS
gnsstk::PackedNavBitsPtr pg63LNAVGPS
Definition: LNavTestDataDecl.hpp:44
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
almLNAVQZSS2
gnsstk::PackedNavBitsPtr almLNAVQZSS2
Definition: LNavTestDataDecl.hpp:51
GPSLNavIono.hpp
gnsstk::OrbitDataKepler::Cuc
double Cuc
Cosine latitude (rad)
Definition: OrbitDataKepler.hpp:175
gnsstk::GPSLNavEph::L2Pdata
bool L2Pdata
Definition: GPSLNavEph.hpp:114
GPSLNavHealth.hpp
gnsstk::GPSLNavEph::tlm2
uint32_t tlm2
The TLM message from word 1 of subframe 2.
Definition: GPSLNavEph.hpp:94
pg61LNAVQZSSct
gnsstk::CommonTime pg61LNAVQZSSct
Definition: LNavTestDataDecl.hpp:54
gnsstk::GPSLNavData::tlm
uint32_t tlm
The TLM message from word 1 of the subframe.
Definition: GPSLNavData.hpp:81
gnsstk::StdNavTimeOffset::deltatLS
double deltatLS
Current or past leap second count (UTC only).
Definition: StdNavTimeOffset.hpp:125
gnsstk::NavType::GloCivilF
@ GloCivilF
gnsstk::GPSLNavIono::alert
bool alert
Alert flag from HOW.
Definition: GPSLNavIono.hpp:68
gnsstk::OrbitDataKepler::w
double w
Argument of perigee (rad)
Definition: OrbitDataKepler.hpp:191
FactoryCounter::validateResults
void validateResults(gnsstk::NavDataPtrList &navOut, unsigned lineNo, size_t totalExp=0, unsigned almExp=0, unsigned ephExp=0, unsigned toExp=0, unsigned heaExp=0, unsigned ionoExp=0, unsigned iscExp=0, unsigned otherExp=0)
Definition: FactoryCounter.hpp:144
ephLNAVQZSSSF1
gnsstk::PackedNavBitsPtr ephLNAVQZSSSF1
Definition: LNavTestDataDecl.hpp:50
gnsstk::GPSLNavAlm::toa
double toa
Convenience storage of unqualified toa.
Definition: GPSLNavAlm.hpp:80
gnsstk::StdNavTimeOffset::wnot
unsigned wnot
Time data reference week number (storage only).
Definition: StdNavTimeOffset.hpp:129
gnsstk::GPSLNavEph::asFlag2
bool asFlag2
Anti-spoof flag from SF2 HOW.
Definition: GPSLNavEph.hpp:106
gnsstk::OrbitDataKepler::Toe
CommonTime Toe
Orbit epoch.
Definition: OrbitDataKepler.hpp:171
gnsstk::OrbitDataKepler::Crs
double Crs
Sine radius (m)
Definition: OrbitDataKepler.hpp:178
gnsstk::GPSLNavEph::tlm3
uint32_t tlm3
The TLM message from word 1 of subframe 3.
Definition: GPSLNavEph.hpp:95
gnsstk::SVHealth
SVHealth
Identify different types of SV health states.
Definition: SVHealth.hpp:52
gnsstk::NavData::signal
NavMessageID signal
Source signal identification for this navigation message data.
Definition: NavData.hpp:175
gnsstk::GPSLNavEph::uraIndex
uint8_t uraIndex
4-bit URA index from subframe 1, word 3.
Definition: GPSLNavEph.hpp:102
PNBGPSLNavDataFactory_T::addDataValidityTest
unsigned addDataValidityTest()
Test validity checking.
Definition: PNBGPSLNavDataFactory_T.cpp:348
gnsstk::StdNavTimeOffset::wnLSF
unsigned wnLSF
Leap second reference week number (UTC only).
Definition: StdNavTimeOffset.hpp:133
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::NavType::GPSLNAV
@ GPSLNAV
gnsstk::StdNavTimeOffset::a1
double a1
Drift coefficient of source time scale.
Definition: StdNavTimeOffset.hpp:123
gnsstk::InterSigCorr::isc
double isc
Definition: InterSigCorr.hpp:171
ephLNAVGPSSF3
gnsstk::PackedNavBitsPtr ephLNAVGPSSF3
Definition: LNavTestDataDecl.hpp:43
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
gnsstk::TrackingCode::Standard
@ Standard
Legacy Glonass civil signal.
gnsstk::OrbitDataKepler::xmitTime
CommonTime xmitTime
Time of transmission of the start of the data.
Definition: OrbitDataKepler.hpp:170
gnsstk::NavData::timeStamp
CommonTime timeStamp
Definition: NavData.hpp:173
main
int main()
Definition: PNBGPSLNavDataFactory_T.cpp:1365
gnsstk::OrbitDataKepler::Adot
double Adot
Rate of semi-major axis (m/sec)
Definition: OrbitDataKepler.hpp:188
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::ObservationType::NavMsg
@ NavMsg
Navigation Message data.
gnsstk::GPSLNavL2Codes
GPSLNavL2Codes
Codes on L2 channel, per IS-GPS-200 20.3.3.3.1.2.
Definition: GPSLNavL2Codes.hpp:51
gnsstk::SatelliteSystem::GPS
@ GPS
gnsstk::TrackingCode::CA
@ CA
Legacy GPS civil code.
gnsstk::GPSLNavEph::isf3
bool isf3
Integrity status flag from subframe 3.
Definition: GPSLNavEph.hpp:97
PNBGPSLNavDataFactory_T::processSVID56QZSSTest
unsigned processSVID56QZSSTest()
Definition: PNBGPSLNavDataFactory_T.cpp:1252
gnsstk::GPSLNavIono::tlm
uint32_t tlm
The TLM message from word 1 of the subframe.
Definition: GPSLNavIono.hpp:66
TUASSERT
#define TUASSERT(EXPR)
Definition: TestUtil.hpp:63
gnsstk::GPSLNavData::alert
bool alert
Alert flag from HOW.
Definition: GPSLNavData.hpp:83
FactoryCounter
Definition: FactoryCounter.hpp:75
TestUtil.hpp
PNBGPSLNavDataFactory_T::addDataEphemerisTest
unsigned addDataEphemerisTest()
Test addData with ephemeris selected only.
Definition: PNBGPSLNavDataFactory_T.cpp:203
gnsstk::SVHealth::Healthy
@ Healthy
Satellite is in a healthy and useable state.
gnsstk::OrbitDataKepler::dndot
double dndot
Rate of correction to mean motion (rad/sec/sec)
Definition: OrbitDataKepler.hpp:184
PNBGPSLNavDataFactory_T::addDataTimeTest
unsigned addDataTimeTest()
Test addData with time offset data selected only.
Definition: PNBGPSLNavDataFactory_T.cpp:275
gnsstk::OrbitDataKepler::Cus
double Cus
Sine latitude (rad)
Definition: OrbitDataKepler.hpp:176
gnsstk::StdNavTimeOffset::a2
double a2
Drift rate coefficient of source time scale.
Definition: StdNavTimeOffset.hpp:124
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::GPSLNavData::refEccQZSS
static const GNSSTK_EXPORT double refEccQZSS
Reference eccentricity for reduced almanac in IS-QZSS-200.
Definition: GPSLNavData.hpp:69
gnsstk::NavValidityType::InvalidOnly
@ InvalidOnly
Only load/find nav messages that fail validity checks.
gnsstk::TimeSystem::QZS
@ QZS
QZSS system Time.
pg51LNAVGPS
gnsstk::PackedNavBitsPtr pg51LNAVGPS
Definition: LNavTestDataDecl.hpp:44
gnsstk::GPSLNavEph::healthBits
uint8_t healthBits
6 SV health bits from subframe 1, word 3.
Definition: GPSLNavEph.hpp:101
gnsstk::GPSLNavISC::tlm
uint32_t tlm
The TLM message from word 1 of the subframe.
Definition: GPSLNavISC.hpp:69
gnsstk::GPSLNavEph::pre3
uint32_t pre3
The TLM preamble from word 1 of subframe 3.
Definition: GPSLNavEph.hpp:93
almLNAVGPS26ct
gnsstk::CommonTime almLNAVGPS26ct
Definition: LNavTestDataDecl.hpp:46
gnsstk::NavValidityType::ValidOnly
@ ValidOnly
Only load/find nav messages that pass validity checks.
ephLNAVQZSSSF1ct
gnsstk::CommonTime ephLNAVQZSSSF1ct
Definition: LNavTestDataDecl.hpp:52
PNBGPSLNavDataFactory_T::addDataHealthTest
unsigned addDataHealthTest()
Test addData with health data selected only.
Definition: PNBGPSLNavDataFactory_T.cpp:239
gnsstk::ObsID
Definition: ObsID.hpp:82
PNBGPSLNavDataFactory_T::addDataAllQZSSTest
unsigned addDataAllQZSSTest()
Test addData with all message types enabled.
Definition: PNBGPSLNavDataFactory_T.cpp:831
gnsstk::NavMessageType::Iono
@ Iono
Ionospheric correction data.
pg56LNAVGPSct
gnsstk::CommonTime pg56LNAVGPSct
Definition: LNavTestDataDecl.hpp:46
gnsstk::OrbitDataKepler::Ahalf
double Ahalf
Square Root of semi-major axis (m**.5)
Definition: OrbitDataKepler.hpp:187
PNBGPSLNavDataFactory_T::processAlmOrbTest
unsigned processAlmOrbTest()
Definition: PNBGPSLNavDataFactory_T.cpp:508
gnsstk::NavSatelliteID::sat
SatID sat
ID of satellite to which the nav data applies.
Definition: NavSatelliteID.hpp:169
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::OrbitDataKepler::Toc
CommonTime Toc
Clock epoch.
Definition: OrbitDataKepler.hpp:172
PNBGPSLNavDataFactory_T::processEphTest
unsigned processEphTest()
Definition: PNBGPSLNavDataFactory_T.cpp:383
gnsstk::GPSLNavEph::iode
uint16_t iode
Issue Of Data-Ephemeris.
Definition: GPSLNavEph.hpp:99
gnsstk::TimeSystem
TimeSystem
Definition of various time systems.
Definition: TimeSystem.hpp:51
gnsstk::NavFit::beginFit
CommonTime beginFit
Time at beginning of fit interval.
Definition: NavFit.hpp:54
pg56LNAVGPS
gnsstk::PackedNavBitsPtr pg56LNAVGPS
Definition: LNavTestDataDecl.hpp:44
gnsstk::CarrierBand::L1
@ L1
GPS L1, Galileo E1, SBAS L1, QZSS L1, BeiDou L1.
CivilTime.hpp
gnsstk::KlobucharIonoNavData::beta
double beta[4]
beta terms of Klobuchar model, using semi-circles.
Definition: KlobucharIonoNavData.hpp:85
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
gnsstk::PNBNavDataFactory::setValidityFilter
virtual void setValidityFilter(NavValidityType nvt)
Definition: PNBNavDataFactory.hpp:72
gnsstk::GPSLNavData::refioffsetGPS
static const GNSSTK_EXPORT double refioffsetGPS
inclination offset, this + delta i = i0, defined in IS-GPS-200.
Definition: GPSLNavData.hpp:60
gnsstk::GPSLNavAlm::deltai
double deltai
Inclination in rad relative to 0.3*pi rad.
Definition: GPSLNavAlm.hpp:79
gnsstk::TimeSystem::UTC
@ UTC
Coordinated Universal Time (e.g., from NTP)
pg51LNAVGPSct
gnsstk::CommonTime pg51LNAVGPSct
Definition: LNavTestDataDecl.hpp:46
gnsstk::GPSLNavISC::pre
uint32_t pre
The TLM preamble from word 1 of the subframe.
Definition: GPSLNavISC.hpp:68
gnsstk::OrbitDataKepler::i0
double i0
Inclination (rad)
Definition: OrbitDataKepler.hpp:190
std::operator<<
std::ostream & operator<<(std::ostream &s, gnsstk::StringUtils::FFLead v)
Definition: FormattedDouble_T.cpp:44
gnsstk::GPSLNavData::pre
uint32_t pre
The TLM preamble from word 1 of the subframe.
Definition: GPSLNavData.hpp:80
gnsstk::OrbitDataKepler::Cic
double Cic
Cosine inclination (rad)
Definition: OrbitDataKepler.hpp:179
LNavTestDataDef.hpp
gnsstk::CivilTime
Definition: CivilTime.hpp:55
gnsstk::GPSLNavIono
Class containing data elements unique to GPS LNav ionospheric data.
Definition: GPSLNavIono.hpp:50
gnsstk::NavMessageType::TimeOffset
@ TimeOffset
Message containing information about time system offsets.
gnsstk::GPSLNavTimeOffset
Definition: GPSLNavTimeOffset.hpp:53
gnsstk::GPSLNavISC::asFlag
bool asFlag
Anti-spoof flag from HOW.
Definition: GPSLNavISC.hpp:72
gnsstk::OrbitDataKepler::Crc
double Crc
Cosine radius (m)
Definition: OrbitDataKepler.hpp:177
ephLNAVQZSSSF3
gnsstk::PackedNavBitsPtr ephLNAVQZSSSF3
Definition: LNavTestDataDecl.hpp:50
PNBGPSLNavDataFactory_T
Definition: PNBGPSLNavDataFactory_T.cpp:71
PNBGPSLNavDataFactory_T::processSVID56Test
unsigned processSVID56Test()
Definition: PNBGPSLNavDataFactory_T.cpp:768
gnsstk::GPSLNavISC::alert
bool alert
Alert flag from HOW.
Definition: GPSLNavISC.hpp:71
gnsstk::GPSLNavEph::asFlag3
bool asFlag3
Anti-spoof flag from SF3 HOW.
Definition: GPSLNavEph.hpp:107
ephLNAVGPSSF1ct
gnsstk::CommonTime ephLNAVGPSSF1ct
Definition: LNavTestDataDecl.hpp:45
std
Definition: Angle.hpp:142
PNBGPSLNavDataFactory_T::processAlmOrbQZSSTest
unsigned processAlmOrbQZSSTest()
Definition: PNBGPSLNavDataFactory_T.cpp:994
gnsstk::OrbitDataKepler::af0
double af0
SV clock error (sec)
Definition: OrbitDataKepler.hpp:195
gnsstk::PNBGPSLNavDataFactory::processSVID51
bool processSVID51(const PackedNavBitsPtr &navIn, NavDataPtrList &navOut)
Definition: PNBGPSLNavDataFactory.cpp:477
PNBGPSLNavDataFactory_T::processSVID51QZSSTest
unsigned processSVID51QZSSTest()
Definition: PNBGPSLNavDataFactory_T.cpp:1198
gnsstk::NavMessageType::Ephemeris
@ Ephemeris
Precision orbits for the transmitting SV.
FactoryCounter.hpp
gnsstk::KlobucharIonoNavData::alpha
double alpha[4]
alpha terms of Klobuchar model, using semi-circles.
Definition: KlobucharIonoNavData.hpp:84
pg61LNAVQZSS
gnsstk::PackedNavBitsPtr pg61LNAVQZSS
Definition: LNavTestDataDecl.hpp:51
gnsstk::GPSLNavIono::pre
uint32_t pre
The TLM preamble from word 1 of the subframe.
Definition: GPSLNavIono.hpp:65
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
gnsstk::GPSLNavEph::iodc
uint16_t iodc
Issue Of Data-Clock for the ephemeris.
Definition: GPSLNavEph.hpp:98
GPSLNavTimeOffset.hpp
gnsstk::SatelliteSystem::Glonass
@ Glonass
gnsstk::GPSLNavL2Codes::CAcode
@ CAcode
C/A-code is broadcast on L2.
PNBGPSLNavDataFactory_T::processEphQZSSTest
unsigned processEphQZSSTest()
Definition: PNBGPSLNavDataFactory_T.cpp:866
gnsstk::StdNavTimeOffset::a0
double a0
Bias coefficient of source time scale.
Definition: StdNavTimeOffset.hpp:122
GPSLNavISC.hpp
pg56LNAVQZSS
gnsstk::PackedNavBitsPtr pg56LNAVQZSS
Definition: LNavTestDataDecl.hpp:51
ephLNAVGPSSF2
gnsstk::PackedNavBitsPtr ephLNAVGPSSF2
Definition: LNavTestDataDecl.hpp:43
gnsstk::GPSLNavEph
Class containing data elements unique to GPS LNav ephemerides.
Definition: GPSLNavEph.hpp:51
gnsstk::PNBGPSLNavDataFactory::processSVID56
bool processSVID56(const PackedNavBitsPtr &navIn, NavDataPtrList &navOut)
Definition: PNBGPSLNavDataFactory.cpp:671
almLNAVQZSS1
gnsstk::PackedNavBitsPtr almLNAVQZSS1
Definition: LNavTestDataDecl.hpp:51
gnsstk::NavID
Definition: NavID.hpp:61
PNBGPSLNavDataFactory_T::addDataAlmanacTest
unsigned addDataAlmanacTest()
Test addData with almanac selected only.
Definition: PNBGPSLNavDataFactory_T.cpp:167
GPSLNavEph.hpp
gnsstk::OrbitDataKepler::health
SVHealth health
SV health status.
Definition: OrbitDataKepler.hpp:173
almLNAVQZSS1ct
gnsstk::CommonTime almLNAVQZSS1ct
Definition: LNavTestDataDecl.hpp:53
gnsstk::GPSLNavAlm::healthBits
uint8_t healthBits
8 SV health bits.
Definition: GPSLNavAlm.hpp:78
gnsstk::OrbitDataKepler::OMEGA0
double OMEGA0
Longitude of ascending node at weekly epoch (rad)
Definition: OrbitDataKepler.hpp:189
gnsstk::GPSLNavIono::asFlag
bool asFlag
Anti-spoof flag from HOW.
Definition: GPSLNavIono.hpp:69
GPSLNavAlm.hpp
almLNAVGPS25ct
gnsstk::CommonTime almLNAVGPS25ct
Definition: LNavTestDataDecl.hpp:46
gnsstk::SatelliteSystem::QZSS
@ QZSS
PNBGPSLNavDataFactory_T::addDataEphHealthTest
unsigned addDataEphHealthTest()
One additional combo test with no particular meaning behind selection.
Definition: PNBGPSLNavDataFactory_T.cpp:311
gnsstk::GPSLNavIono::isf
bool isf
Integrity status flag.
Definition: GPSLNavIono.hpp:67
gnsstk::GPSLNavAlm
Class containing data elements unique to GPS LNav almanac pages.
Definition: GPSLNavAlm.hpp:50
gnsstk::StdNavTimeOffset::refTime
CommonTime refTime
Reference time for computation.
Definition: StdNavTimeOffset.hpp:126
gnsstk::GPSLNavISC::isf
bool isf
Integrity status flag.
Definition: GPSLNavISC.hpp:70
gnsstk::GPSLNavEph::pre2
uint32_t pre2
The TLM preamble from word 1 of subframe 2.
Definition: GPSLNavEph.hpp:92
pg56LNAVQZSSct
gnsstk::CommonTime pg56LNAVQZSSct
Definition: LNavTestDataDecl.hpp:53
gnsstk::OrbitDataKepler::af1
double af1
SV clock drift (sec/sec)
Definition: OrbitDataKepler.hpp:196
almLNAVGPS26
gnsstk::PackedNavBitsPtr almLNAVGPS26
Definition: LNavTestDataDecl.hpp:44
gnsstk::GPSLNavISC
Definition: GPSLNavISC.hpp:53
TimeString.hpp
LNavTestDataDecl.hpp
gnsstk::GPSLNavEph::tgd
double tgd
Ionospheric group delay in seconds.
Definition: GPSLNavEph.hpp:103
gnsstk::NavMessageType::Almanac
@ Almanac
Low-precision orbits for other than the transmitting SV.
PNBGPSLNavDataFactory_T::processSVID51Test
unsigned processSVID51Test()
Definition: PNBGPSLNavDataFactory_T.cpp:692
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::GPSLNavEph::alert3
bool alert3
Alert flag from SF3 HOW.
Definition: GPSLNavEph.hpp:105
gnsstk::PNBGPSLNavDataFactory::addData
bool addData(const PackedNavBitsPtr &navIn, NavDataPtrList &navOut, double cadence=-1) override
Definition: PNBGPSLNavDataFactory.cpp:56
gnsstk::GPSLNavHealth
Definition: GPSLNavHealth.hpp:51


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