GLOFNavAlm_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 <math.h>
40 #include "TestUtil.hpp"
41 #include "GLOFNavAlm.hpp"
42 #include "CivilTime.hpp"
43 #include "YDSTime.hpp"
44 #include "TimeString.hpp"
45 #include "GLOFNavEph.hpp"
46 #include "Angle.hpp"
47 #include "Position.hpp"
48 
49 namespace gnsstk
50 {
51  std::ostream& operator<<(std::ostream& s, gnsstk::NavMessageType e)
52  {
53  s << StringUtils::asString(e);
54  return s;
55  }
56 }
57 
59 {
60 public:
61  unsigned constructorTest();
62  unsigned validateTest();
63  unsigned getXvtTest();
64  unsigned getUserTimeTest();
65  unsigned fixFitTest();
69  unsigned blahTest();
70 };
71 
72 
73 unsigned GLOFNavAlm_T ::
75 {
76  TUDEF("GLOFNavAlm", "GLOFNavAlm()");
79  uut.signal.messageType);
80  TUASSERTE(bool, false, uut.healthBits);
81  TUASSERTE(int, 1, isnan(uut.taunA));
82  TUASSERTE(int, 1, isnan(uut.lambdanA));
83  TUASSERTE(int, 1, isnan(uut.deltainA));
84  TUASSERTE(int, 1, isnan(uut.eccnA));
85  TUASSERTE(int, 1, isnan(uut.omeganA));
86  TUASSERTE(int, 1, isnan(uut.tLambdanA));
87  TUASSERTE(int, 1, isnan(uut.deltaTnA));
88  TUASSERTE(int, 1, isnan(uut.deltaTdotnA));
89  TUASSERTE(int, -1, uut.freqnA);
90  TURETURN();
91 }
92 
93 
94 unsigned GLOFNavAlm_T ::
96 {
97  TUDEF("GLOFNavAlm", "validate()");
100  TUASSERTE(bool, true, uut.validate());
101  TURETURN();
102 }
103 
104 
105 unsigned GLOFNavAlm_T ::
107 {
108  TUDEF("GLOFNavAlm", "getXvt()");
109  gnsstk::GLOFNavAlm uut;
110  // 2001/09/06
111  gnsstk::YDSTime toi(2001, 249, 33300, gnsstk::TimeSystem::GLO);
112  // taken from ICD appendix A.3.2.3
113  uut.lambdanA = -0.189986229 * gnsstk::PI;
114  uut.tLambdanA = 27122.09375;
115  uut.deltainA = 0.011929512 * gnsstk::PI;
116  uut.deltaTnA = -2655.76171875;
117  uut.deltaTdotnA = 0.000549316;
118  uut.eccnA = 0.001482010;
119  uut.omeganA = 0.440277100 * gnsstk::PI;
120  uut.Toa = gnsstk::YDSTime(2001, 249, uut.tLambdanA, gnsstk::TimeSystem::GLO);
122 
123  // Normally called by fixFit, but we don't care about the fit
124  // interval for this test.
125  uut.setSemiMajorAxisIncl();
126  //uut.dump(std::cerr, gnsstk::DumpDetail::Full);
127  gnsstk::Xvt xvt;
128  TUASSERTE(bool, true, uut.getXvt(toi, xvt));
129  // 10 nm tolerance
130  TUASSERTFEPS(10945967.138109738, xvt.x[0], 1e-8);
131  TUASSERTFEPS(13079860.921750335, xvt.x[1], 1e-8);
132  TUASSERTFEPS(18922063.556836389, xvt.x[2], 1e-8);
133  // 1 pm/s tolerance
134  TUASSERTFEPS(-3375.4834789088281, xvt.v[0], 1e-12);
135  TUASSERTFEPS(-161.72513071304218, xvt.v[1], 1e-12);
136  TUASSERTFEPS(2060.8444711932389, xvt.v[2], 1e-12);
137  TUASSERTFE(0, xvt.clkbias);
138  TUASSERTFE(0, xvt.clkdrift);
139  TUASSERTFE(1.5097189886318696151e-09, xvt.relcorr);
140  TUASSERTE(gnsstk::RefFrame,expRF,xvt.frame);
141 #if 0
142  // This is more code that was used to track down what was going
143  // on with getXvt. Specifically it first helped me confirm that
144  // the getSiderealTime method was always starting at midnight
145  // GMT, and second it helped me confirm that the truth value in
146  // the ICD was *not* starting at GMT midnight. Third, it
147  // allowed me to see the position in geodetic coordinates which
148  // is easier to conceptualize.
149  // It's not a proper tests so leaving it commented out in case
150  // there's a reason to use it again later.
151  std::cout << "xvt = " << std::setprecision(17) << xvt << std::endl;
152  // these are the truth values from the ICD.
153  std::cout << "err_x = " << fabs(xvt.x[0] - 10947021.572) << std::endl
154  << "err_y = " << fabs(xvt.x[1] - 13078978.287) << std::endl
155  << "err_z = " << fabs(xvt.x[2] - 18922063.362) << std::endl
156  << "err_vx = " << fabs(xvt.v[0] - -3375.497) << std::endl
157  << "err_vy = " << fabs(xvt.v[1] - -161.453) << std::endl
158  << "err_vz = " << fabs(xvt.v[2] - 2060.844) << std::endl;
161  pos.transformTo(gnsstk::Position::Geodetic);
162  std::cout << " = " << pos << std::endl;
164  unsigned i = 0;
165  double st = 0;
166  while (st <= 6.02401539573)
167  {
168  gnsstk::CommonTime y = x+(double)i;
170  std::cout << gnsstk::printTime(y, "%Y %j %s %m %d = ")
171  << std::setprecision(15) << st << std::endl;
172  i += 86400;
173  }
174 #endif
175  TURETURN();
176 }
177 
178 
179 unsigned GLOFNavAlm_T ::
181 {
182  TUDEF("GLOFNavAlm", "getUserTime()");
183  gnsstk::GLOFNavAlm uut;
184  uut.timeStamp = gnsstk::CivilTime(2006, 10, 01, 0, 15, 0,
186  uut.xmit2 = gnsstk::CivilTime(2006, 10, 01, 0, 11, 0,
188  gnsstk::CommonTime exp(uut.timeStamp + 2.0);
190  TURETURN();
191 }
192 
193 
194 unsigned GLOFNavAlm_T ::
196 {
197  TUDEF("GLOFNavAlm", "fixFit()");
198  gnsstk::GLOFNavAlm uut;
199  uut.timeStamp = gnsstk::CivilTime(2006, 10, 01, 0, 15, 0,
201  gnsstk::CommonTime expBegin(uut.timeStamp),
204  TUCATCH(uut.fixFit());
205  TUASSERTE(gnsstk::CommonTime, expBegin, uut.beginFit);
206  // This is not a good value but it's the only one we have for now
207  TUASSERTE(gnsstk::CommonTime, expEnd, uut.endFit);
208  TURETURN();
209 }
210 
211 
212 unsigned GLOFNavAlm_T ::
214 {
215  // non-test code (see doxygen at the top)
216  // helped me figure out problems in computing the semi-major axis.
217  TUDEF("GLOFNavAlm", "nothing");
218  using namespace gnsstk;
219  using namespace std;
220  // system/model constants
221  const double omega3 = 0.7292115e-4;
222  const double mu = 398600.4418; // km**3/sec**2
223  const double C20 = -1082.62575e-6;
224  const double ae = 6378.136; // km
225  const Angle icp(63.0, AngleType::Deg);
226  const double Tcp = 43200; // seconds
227  // elemnents from almanac
228  const unsigned aNAj = 615; // Date 06 09 2001
229  const Angle alambdaj(-0.189986229, AngleType::SemiCircle);
230  const double atlambdaj = 27122.09375; // seconds
231  const Angle aDeltaij(0.011929512, AngleType::SemiCircle);
232  const double aDeltaTj = -2655.76171875; // seconds
233  const double aDeltaTPrimej = 0.000549316; // seconds/cycle**2
234  const double aepsilonj = 0.001482010; // unit
235  const Angle aomegaj(0.440277100, AngleType::SemiCircle);
236  // time of interest
237  const unsigned cNAj = 615; // Date 06 09 2001
238  const double ctlambdaj = 33300.; // seconds
239  const Angle cS0(6.02401539573, AngleType::Rad);
240  // expected values
241  const double eXoi = 10947.021572;
242  const double eYoi = 13078.978287;
243  const double eZoi = 18922.063362;
244  const double eVxoi = -3.375497;
245  const double eVyoi = -0.161453;
246  const double eVzoi = 2.060844;
247 
248  // dummies, aka my best guess at what values are supposed to be
249  // plugged in since the ICD isn't 100% clear.
250  unsigned N0 = aNAj;
251  Angle lambda = alambdaj;
252  double tlambda = atlambdaj;
253  Angle Deltai = aDeltaij;
254  double DeltaT = aDeltaTj;
255  double DeltaTPrime = aDeltaTPrimej;
256  double e = aepsilonj;
257  Angle omega = aomegaj;
258  Angle S0 = cS0;
259  double ti = ctlambdaj;
260  double NA = cNAj;
261 
262 
263  // page 67 (Russian)
264  double Tdeltap = Tcp + DeltaT;
265  Angle i = icp + Deltai;
266  // a* are in km
267  double a0 = ::pow((Tdeltap/(2*PI))*(Tdeltap/(2*PI))*mu, 1.0/3.0);
268  cerr << "a(0) = " << a0 << endl;
269  double an = a0;
270  double anp1 = -9999999999999;
271  Angle nu = -omega;
272  unsigned iteration = 0;
273  double nuTerm = 1 + (e * cos(nu));
274  nuTerm = nuTerm * nuTerm * nuTerm;
275  double ecc2obv = 1 - (e*e);
276  double eTerm = ::pow(ecc2obv, 3.0/2.0);
277  double omegaTerm = 1 + (e * cos(omega));
278  omegaTerm = omegaTerm * omegaTerm;
279  double siniTerm = 2.0 - ((5.0/2.0) * sin(i) * sin(i));
280  double bigTerm = siniTerm * (eTerm / omegaTerm) + (nuTerm / ecc2obv);
281  double C20Term = (3.0/2.0)*C20;
282  cerr << "bigTerm = " << siniTerm << " * (" << eTerm << " / " << omegaTerm
283  << ") + (" << nuTerm << " / " << ecc2obv << ")" << endl;
284  cerr << " Tock_b = " << nuTerm << endl
285  << " Tock_c = " << (nuTerm / ecc2obv) << endl
286  << " Tock_d = " << eTerm << endl
287  << " Tock_e = " << C20Term << endl
288  << " Tock_f = " << omegaTerm << endl
289  << " Tock_g = " << (eTerm / omegaTerm) << endl
290  << " Tock_h = " << siniTerm << endl
291  << " Tock_i = " << bigTerm << endl;
292  while (fabs(anp1-an) >= 1e-3)
293  {
294  double pn = an * (1-e*e);
295  // double Tocknp1 = Tdeltap /
296  // (1+(3/2)*C20*(ae/pn)*(ae/pn)*
297  // ((2-(5/2)*sin(i)*sin(i)) *
298  // (::pow(1-e*e,3.0/2.0) / ((1+e*cos(omega))*(1+e*cos(omega)))) +
299  // (((1+e*cos(nu))*(1+e*cos(nu))*(1+e*cos(nu))) / (1-e*e))));
300  double tock_k = (1.0+(3.0/2.0)*C20*(ae/pn)*(ae/pn)*bigTerm);
301  double Tocknp1 = Tdeltap / tock_k;
302  cerr << " Tock_k = " << tock_k << endl
303  << "p(" << iteration << ") = " << pn << endl
304  << " Tock(" << (iteration+1) << ") = " << Tocknp1 << endl;
305  if (iteration > 0)
306  an = anp1;
307  anp1 = ::pow((Tocknp1/(2*PI))*(Tocknp1/(2*PI))*mu, 1.0/3.0);
308  cerr << "a(" << iteration << ") = " << an << endl
309  << "a(" << (iteration+1) << ") = " << anp1 << endl;
310  iteration++;
311  }
312  double a = anp1;
313  cerr << "a = " << a << " km" << endl;
314  // NEXT...................................................................
315  double earthvs = (ae/a);
316  earthvs = earthvs * earthvs;
317  double tstar = ti - tlambda + (86400.0*(N0-NA));
318  double Wk = tstar / Tdeltap;
319  double W;
320  std::modf(Wk,&W);
321  // note that tlambdakBar = tlambda unless computing across a day boundary
322  double secSinceRef = (Tdeltap*W) + (DeltaTPrime * W * W);
323  double tlambdakBar = tlambda + secSinceRef;
324  double tlambdak = std::fmod(tlambdakBar, 86400.0);
325  double n = ((2.0*gnsstk::PI)/Tdeltap);
326  // ought to be radians per second... but do we know? no.
327  double OmegaPrime = C20Term * n * earthvs * cos(i) * ::sqrt(ecc2obv);
328  double radPerSec = OmegaPrime - omega3;
329  Angle lambdak = lambda + Angle(radPerSec * secSinceRef, AngleType::Rad);
330  cerr << "tstar = " << tstar << endl
331  << "Wk = " << Wk << endl
332  << "W = " << W << endl
333  << "tlambdakBar = " << tlambdakBar << endl
334  << "tlambdak = " << tlambdak << endl
335  << "n = " << n << endl
336  << "OMEGAdot = " << OmegaPrime << endl
337  << "lambdak = " << lambdak << endl;
338 // double Vzoi = Vri * sin(ui) * sin(ii) + Vui * sin(ui) * sin(ii);
340  TURETURN();
341 }
342 
343 
344 int main()
345 {
346  GLOFNavAlm_T testClass;
347  unsigned errorTotal = 0;
348 
349  errorTotal += testClass.constructorTest();
350  errorTotal += testClass.validateTest();
351  errorTotal += testClass.getXvtTest();
352  errorTotal += testClass.getUserTimeTest();
353  errorTotal += testClass.fixFitTest();
354  // errorTotal += testClass.blahTest();
355 
356  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
357  << std::endl;
358 
359  return errorTotal;
360 }
gnsstk::Position::Geodetic
@ Geodetic
geodetic latitude, longitude, and height above ellipsoid
Definition: Position.hpp:145
YDSTime.hpp
GLOFNavAlm_T
Definition: GLOFNavAlm_T.cpp:58
gnsstk::GLOFNavAlm::deltaTnA
double deltaTnA
Correction to mean value of Draconian period (Delta T_n^A).
Definition: GLOFNavAlm.hpp:285
gnsstk::GLOFNavEph::getSiderealTime
static double getSiderealTime(const CommonTime &time)
Definition: GLOFNavEph.cpp:397
GLOFNavAlm_T::fixFitTest
unsigned fixFitTest()
Definition: GLOFNavAlm_T.cpp:195
GLOFNavAlm_T::getXvtTest
unsigned getXvtTest()
Definition: GLOFNavAlm_T.cpp:106
gnsstk::Position::Cartesian
@ Cartesian
cartesian (Earth-centered, Earth-fixed)
Definition: Position.hpp:147
TUCATCH
#define TUCATCH(STATEMENT)
Definition: TestUtil.hpp:193
gnsstk::YDSTime
Definition: YDSTime.hpp:58
gnsstk::GLOFNavAlm::lambdanA
double lambdanA
Longitude of ascending node (lambda_n^A).
Definition: GLOFNavAlm.hpp:280
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
gnsstk::NavMessageID::messageType
NavMessageType messageType
Definition: NavMessageID.hpp:97
Angle.hpp
gnsstk::GLOFNavAlm::Toa
CommonTime Toa
Reference time for almanac.
Definition: GLOFNavAlm.hpp:275
gnsstk::Xvt::frame
RefFrame frame
reference frame of this data
Definition: Xvt.hpp:156
gnsstk::NavFit::endFit
CommonTime endFit
Time at end of fit interval.
Definition: NavFit.hpp:55
gnsstk::GLOFNavAlm::eccnA
double eccnA
Eccentricity (epsilon_n^A).
Definition: GLOFNavAlm.hpp:282
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
Position.hpp
gnsstk::CommonTime::setTimeSystem
CommonTime & setTimeSystem(TimeSystem timeSystem)
Definition: CommonTime.hpp:195
gnsstk::PI
const double PI
GPS value of PI; also specified by GAL.
Definition: GNSSconstants.hpp:62
gnsstk::Xvt::v
Triple v
satellite velocity in ECEF Cartesian, meters/second
Definition: Xvt.hpp:152
gnsstk::RefFrame
Definition: RefFrame.hpp:53
gnsstk::NavData::signal
NavMessageID signal
Source signal identification for this navigation message data.
Definition: NavData.hpp:175
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::Angle
Definition: Angle.hpp:53
std::sin
double sin(gnsstk::Angle x)
Definition: Angle.hpp:144
gnsstk::Xvt::relcorr
double relcorr
relativity correction (standard 2R.V/c^2 term), seconds
Definition: Xvt.hpp:155
gnsstk::GLOFNavAlm::getUserTime
CommonTime getUserTime() const override
Definition: GLOFNavAlm.cpp:95
gnsstk::GLOFNavAlm::omeganA
double omeganA
Argument of perigee (omega_n^A).
Definition: GLOFNavAlm.hpp:283
gnsstk::NavData::timeStamp
CommonTime timeStamp
Definition: NavData.hpp:173
gnsstk::GLOFNavAlm
Definition: GLOFNavAlm.hpp:53
gnsstk::CommonTime::END_OF_TIME
static const GNSSTK_EXPORT CommonTime END_OF_TIME
latest representable CommonTime
Definition: CommonTime.hpp:104
gnsstk::Xvt::x
Triple x
Sat position ECEF Cartesian (X,Y,Z) meters.
Definition: Xvt.hpp:151
GLOFNavAlm_T::validateTest
unsigned validateTest()
Definition: GLOFNavAlm_T.cpp:95
gnsstk::GLOFNavAlm::deltaTdotnA
double deltaTdotnA
Time derivative of deltaT (Delta T'_n^A).
Definition: GLOFNavAlm.hpp:286
TestUtil.hpp
y
page HOWTO subpage DoxygenGuide Documenting Your Code page DoxygenGuide Documenting Your Code todo Flesh out this document section doctips Tips for Documenting When defining make sure that the prototype is identical between the cpp and hpp including both the namespaces and the parameter names for you have std::string as the return type in the hpp file and string as the return type in the cpp Doxygen may get confused and autolink to the cpp version with no documentation If you don t use the same parameter names between the cpp and hpp that will also confuse Doxygen Don t put type information in return or param documentation It doesn t really add anything and will often cause Doxygen to complain and not produce the documentation< br > use note Do not put a comma after a param name unless you mean to document multiple parameters< br/> the output stream</code >< br/> y
Definition: DOCUMENTING.dox:15
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::GLOFNavAlm::validate
bool validate() const override
Definition: GLOFNavAlm.cpp:78
gnsstk::GLOFNavAlm::taunA
double taunA
Time offset to GLONASS time (tau_n^A).
Definition: GLOFNavAlm.hpp:279
gnsstk::operator<<
std::ostream & operator<<(std::ostream &s, const ObsEpoch &oe) noexcept
Definition: ObsEpochMap.cpp:54
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::Xvt::clkdrift
double clkdrift
satellite clock drift in seconds/second
Definition: Xvt.hpp:154
gnsstk::GLOFNavAlm::healthBits
bool healthBits
Health flag (C_n, 1 = operable).
Definition: GLOFNavAlm.hpp:276
TUASSERTFEPS
#define TUASSERTFEPS(EXP, GOT, EPS)
Definition: TestUtil.hpp:126
gnsstk::NavFit::beginFit
CommonTime beginFit
Time at beginning of fit interval.
Definition: NavFit.hpp:54
gnsstk::Xvt
Definition: Xvt.hpp:60
CivilTime.hpp
std::cos
double cos(gnsstk::Angle x)
Definition: Angle.hpp:146
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
example4.pos
pos
Definition: example4.py:125
gnsstk::GLOFNavAlm::setSemiMajorAxisIncl
void setSemiMajorAxisIncl()
Compute and set the semi-major axis (A) and inclination (i).
Definition: GLOFNavAlm.cpp:229
gnsstk::TimeSystem::GLO
@ GLO
GLONASS system time (aka UTC(SU))
gnsstk::GLOFNavData::xmit2
CommonTime xmit2
Transmit time for string 2 (eph) or odd string.
Definition: GLOFNavData.hpp:67
gnsstk::GLOFNavAlm::fixFit
void fixFit()
Definition: GLOFNavAlm.cpp:103
gnsstk::CivilTime
Definition: CivilTime.hpp:55
gnsstk::PZ90Ellipsoid
Definition: PZ90Ellipsoid.hpp:54
gnsstk::printTime
std::string printTime(const CommonTime &t, const std::string &fmt)
Definition: TimeString.cpp:64
GLOFNavAlm_T::constructorTest
unsigned constructorTest()
Definition: GLOFNavAlm_T.cpp:74
std
Definition: Angle.hpp:142
gnsstk::GLOFNavAlm::freqnA
int freqnA
Frequency offset (H_n^A).
Definition: GLOFNavAlm.hpp:287
gnsstk::NavMessageType
NavMessageType
Identify different types of navigation message data.
Definition: NavMessageType.hpp:59
gnsstk::RefFrameRlz::PZ90KGS
@ PZ90KGS
PZ90 the "original".
main
int main()
Definition: GLOFNavAlm_T.cpp:344
GLOFNavEph.hpp
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
gnsstk::Position
Definition: Position.hpp:136
gnsstk::Xvt::clkbias
double clkbias
Sat clock correction in seconds.
Definition: Xvt.hpp:153
gnsstk::GLOFNavAlm::NumberCruncher
Class to assist in doing all the math to get the XVT.
Definition: GLOFNavAlm.hpp:136
gnsstk::GLOFNavAlm::tLambdanA
double tLambdanA
Time of ascending node crossing (t_lambda_n^A).
Definition: GLOFNavAlm.hpp:284
example3.mu
int mu
Definition: example3.py:36
GLOFNavAlm_T::blahTest
unsigned blahTest()
Definition: GLOFNavAlm_T.cpp:213
gnsstk::GLOFNavAlm::deltainA
double deltainA
Correction to mean inclination (Delta i_n^A).
Definition: GLOFNavAlm.hpp:281
GLOFNavAlm.hpp
gnsstk::GLOFNavAlm::getXvt
bool getXvt(const CommonTime &when, Xvt &xvt, const ObsID &=ObsID()) override
Definition: GLOFNavAlm.cpp:86
GLOFNavAlm_T::getUserTimeTest
unsigned getUserTimeTest()
Definition: GLOFNavAlm_T.cpp:180
TimeString.hpp
gnsstk::NavMessageType::Almanac
@ Almanac
Low-precision orbits for other than the transmitting SV.


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