1 //==============================================================================
2 //
3 //  This file is part of GPSTk, the GPS Toolkit.
4 //
5 //  The GPSTk 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 GPSTk 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 GPSTk; 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-2020, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 //==============================================================================
26 //
27 //  This software was developed by Applied Research Laboratories at the
28 //  University of Texas at Austin, under contract to an agency or agencies
29 //  within the U.S. Department of Defense. The U.S. Government retains all
30 //  rights to use, duplicate, distribute, disclose, or release this software.
31 //
32 //  Pursuant to DoD Directive 523024
33 //
34 //  DISTRIBUTION STATEMENT A: This software has been approved for public
35 //                            release, distribution is unlimited.
36 //
37 //==============================================================================
38 
39 /**
40  * @file OrbSysGpsC_30.hpp
41  * Designed to support loading GPS CNAV UTC data
42  * Message Type 33.  NOTE: The clock data contained in the front half
43  * of the message is ignored.   See the orbit handling classes for
44  * that data.
45  */
46 
47 #ifndef SGLTK_ORBSYSGPSC_30_HPP
48 #define SGLTK_ORBSYSGPSC_30_HPP
49 
50 
51 #include <string>
52 #include <iostream>
53 #include <math.h>
54 
55 #include "OrbSysGpsC.hpp"
56 
57 namespace gpstk
58 {
59    class OrbSysGpsC_30 : public OrbSysGpsC
60    {
61    public:
62 
63          /// Default constructor
64       OrbSysGpsC_30();
65 
66          /** Constructor for creating directly from a PackedNavBits object
67           * @throw InvalidParameter
68           */
69       OrbSysGpsC_30(const PackedNavBits& msg);
70 
71          /// Destructor
~OrbSysGpsC_30()72       virtual ~OrbSysGpsC_30() {}
73 
74          /// Clone method
75       virtual OrbSysGpsC_30* clone() const;
76 
77          /**
78           * Store the contents of Subframe 4, Page 18 in this object.
79           * @param msg - 300 bits of Subframe 4, Page 18.
80           * @throw InvalidParameter if message data is invalid
81           */
82       virtual void loadData(const PackedNavBits& msg);
83 
84       virtual bool isSameData(const OrbData* right) const;
85 
getName() const86       virtual std::string getName() const
87       {
88          return "ISC";
89       }
90 
getNameLong() const91       virtual std::string getNameLong() const
92       {
93          return "GPS CNAV ISC/Iono Parameters";
94       }
95 
96          /** Output the contents of this orbit data to the given stream.
97           * @throw InvalidRequest if the required data has not been stored.
98           */
99       virtual void dumpTerse(std::ostream& s = std::cout) const;
100 
101          /**
102           * @throw InvalidRequest
103           */
104       virtual void dumpBody(std::ostream& s = std::cout) const;
105 
106          // The following are for the transmitting SV
107          // Not really "system" data, but that's where the data are in the message.
108       double Tgd;
109       double ISC_L1CA;
110       double ISC_L2C;
111       double ISC_L5I5;
112       double ISC_L5Q5;
113 
114          // See IS-GPS-705 20.3.3.3.1.2.  If transmitted data is "1000000000000" the
115          // term is not available.  The following members are set accordingly.
116       bool   avail_Tgd;
117       bool   avail_L1CA;
118       bool   avail_L2C;
119       bool   avail_L5I5;
120       bool   avail_L5Q5;
121 
122          // NOTE: units are sec, sec/rad, sec/rad**2, and sec/rad**3
123       double alpha[4];
124       double beta[4];
125 
126    }; // end class ORBSYSGPSC_30
127 
128 } // end namespace gpstk
129 
130 #endif
131 
132