📄 engephemeris.hpp
字号:
#pragma ident "$Id: EngEphemeris.hpp 876 2007-11-06 14:16:30Z renfroba $"/** * @file EngEphemeris.hpp * Ephemeris data encapsulated in engineering terms */#ifndef GPSTK_ENGEPHEMERIS_HPP#define GPSTK_ENGEPHEMERIS_HPP//============================================================================//// This file is part of GPSTk, the GPS Toolkit.//// The GPSTk is free software; you can redistribute it and/or modify// it under the terms of the GNU Lesser General Public License as published// by the Free Software Foundation; either version 2.1 of the License, or// any later version.//// The GPSTk is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public// License along with GPSTk; if not, write to the Free Software Foundation,// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA// // Copyright 2004, The University of Texas at Austin////============================================================================//============================================================================////This software developed by Applied Research Laboratories at the University of//Texas at Austin, under contract to an agency or agencies within the U.S. //Department of Defense. The U.S. Government retains all rights to use,//duplicate, distribute, disclose, or release this software. ////Pursuant to DoD Directive 523024 //// DISTRIBUTION STATEMENT A: This software has been approved for public // release, distribution is unlimited.////=============================================================================#include "EngNav.hpp"#include "Exception.hpp"#include "DayTime.hpp"#include "Xvt.hpp"namespace gpstk{ /** @addtogroup ephemcalc */ //@{ /** * Ephemeris information for a single satellite. This class * encapsulates the ephemeris navigation message (subframes 1-3) * and provides functions to decode the as-broadcast * ephemerides. */ class EngEphemeris : public EngNav { public: /// Default constructor EngEphemeris() throw(); /// Destructor virtual ~EngEphemeris() {} /** * Store a subframe in this object. * @param subframe ten word navigation subframe stored in the * 30 least-significant bits of each array index. * @param gpsWeek full GPS week number. * @param PRN PRN ID of source satellite. * @param track tracking number (typically receiver channel number). * @return true if successful. * @throw InvalidParameter if subframe is valid but not subframe 1-3. */ bool addSubframe(const long subframe[10], const int gpsWeek, short PRN, short track) throw(gpstk::InvalidParameter); /** * Store a subframe in this object. This method is provided in * order to allow construction of an EngEphemeris object for * cases where a receiver only provides the 24 msb of each * word and strips the parity.l * @param subframe ten word navigation subframe (minus the six * parity bits) stored in the 24 least-significant bits of * each array index. * @param gpsWeek full GPS week number. * @param PRN PRN ID of source satellite. * @param track tracking number (typically receiver channel number). * @return true if successful. * @throw InvalidParameter if subframe is valid but not subframe 1-3. */ bool addSubframeNoParity(const long subframe[10], const long gpsWeek, const short PRN, const short track) throw(gpstk::InvalidParameter); /** * Store a subframe in this object. This method is provided in * order to provide a path to a EngEphemeris object for cases * where a receiver only provides words 3-10 of subframes 1-3. * @note: It is important to appropriately determine the transmit * time of the data. The parameters sf1TransmitSOW and gpsWeek * should be consistent and should represent the time when the * data in sf1, sf2, and sf3 were received. As a general rule, * the transmit time should be somewhere in the range of 0-2 hours * BEFORE the epoch time of the ephemeris. * @note: EngEphemeris objects built via this method will not * contain valid TLM message data, A-S flags, and "Alert" bits. * Methods getTLMMesage() and getASAlert() should not be used. * @param sf1 words 3-10 of navigation subframe1 stored in the * 30 least-significant bits of each array index. * @param sf2 words 3-10 of navigation subframe 2 * @param sf3 words 3-10 of navigation subframe 3 * @param sf1TransmitSOW time (in GPS seconds of week) corresponding * to leading edge of first bit of subframe 1 * @param gpsWeek full GPS week number. * @param PRN PRN ID of source satellite. * @param track tracker number (typically receiver channel number). * @return true if successful. */ bool addIncompleteSF1Thru3( const long sf1[8], const long sf2[8], const long sf3[8], const long sf1TransmitSOW, const int gpsWeek, const short PRN, const short track); /** * Query presence of subframe in this object. * @param subframe subframe ID (1-3) to check. * @return true if the given subframe is present in this object. * @throw InvalidParameter if subframe is not a valid * ephemeris subframe number. */ bool isData(short subframe) const throw(gpstk::InvalidRequest); /** * Set the value of the SV accuracy (in meters). This is the only * "set" method and is provided so that one can set the SV * accuracy directly and thereby override the conversion of the * SV accuracy flag to meters. This is usually used when entering * data from some source other than an SV nav message. * @note Subsequent use of the addSubframe(), with subframe 1 info, * or the setSF1() methods will overwrite any value set using this * method. * @note This function converts the given accuracy to the appropriate * SV accuracy flag and stores it in the accFlag data member. * @param acc the new value of SV accuracy in meters. * @throw InvalidParameter if the given accuracy value is invalid. */ void setAccuracy(const double& acc) throw(gpstk::InvalidParameter); /** * This computes and returns the fit interval for the * satellite ephemeris from the IODC and the fit interval * flag. This fit interval is centered around the Toe (time * of ephemeris) for the ephemeris. See Table 20-XIA in the * ICD-GPS-200 and section 20.3.3.4.3.1 for more information. * @return the fit interval in hours (0 = failure). * @throw InvalidRequest if data is missing. */ short getFitInterval() const throw(gpstk::InvalidRequest); /// Return 0x8b, the upper 5 bits of the 22-bit TLM word. // kinda pointless, huh? unsigned char getTLMPreamble() const throw() { return 0x8b; } /// Return the lower 16 bits of the TLM word for the given subframe. unsigned getTLMMessage(short subframe) const throw(gpstk::InvalidRequest); /// Extracts the epoch time from this ephemeris, correcting /// for half weeks and HOW time DayTime getEphemerisEpoch() const throw(InvalidRequest); /// Extracts the epoch time (time of clock) from this ephemeris, correcting /// for half weeks and HOW time DayTime getEpochTime() const throw(gpstk::InvalidRequest); /// Extracts the transmit time from the ephemeris using the Tot DayTime getTransmitTime() const throw(gpstk::InvalidRequest); /// used for template functions DayTime getTimestamp() const throw(gpstk::InvalidRequest) { return getEpochTime(); } /** This function returns the PRN ID of the SV. */ short getPRNID() const throw(gpstk::InvalidRequest); /** This function returns the tracker number. */ short getTracker() const throw(gpstk::InvalidRequest); /** This function returns the time of the HOW in subframe * 1 or 2 or 3 in seconds of week. */ double getHOWTime(short subframe) const throw(gpstk::InvalidRequest); /** This function returns the A-S alert flag for either * subframe 1 or 2 or 3. */ short getASAlert(short subframe) const throw(gpstk::InvalidRequest); /** This function return the GPS week number for the * ephemeris. this is the full GPS week (ie > 10 bits). */ short getFullWeek() const throw(gpstk::InvalidRequest); /** This function returns the values of the L2 codes. */ short getCodeFlags() const throw(gpstk::InvalidRequest); /** This function returns the value of the SV accuracy (m) * computed from the accuracy flag in the nav message, or * as set by the setAccuracy() method. */ double getAccuracy() const throw(gpstk::InvalidRequest); /** This function returns the flag based on the SV accuracy * flag as it appears in the nav message. */ short getAccFlag() const throw(gpstk::InvalidRequest); /** This function returns the value of the SV health flag. */ short getHealth() const throw(gpstk::InvalidRequest); /** This function returns the value of the L2 P-code data * flag. */ short getL2Pdata() const throw(gpstk::InvalidRequest); /** This function returns the IODC for the given PRN. */ short getIODC() const throw(gpstk::InvalidRequest); /** This function return the IODE for the ephemeris. */ short getIODE() const throw(gpstk::InvalidRequest); /** This function return the AODO for the ephemeris. */ long getAODO() const throw(gpstk::InvalidRequest); /** This function returns the clock epoch in GPS seconds of * week. */ double getToc() const throw(gpstk::InvalidRequest); /** This function returns the SV clock error in seconds. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -