mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-18 21:23:02 +00:00
Merge branch 'clean-pvt' into next
This commit is contained in:
commit
46d227b6a3
File diff suppressed because it is too large
Load Diff
@ -255,20 +255,17 @@ private:
|
||||
bool d_dump;
|
||||
bool d_dump_mat;
|
||||
bool d_rinex_output_enabled;
|
||||
bool d_rinex_header_written;
|
||||
bool d_rinex_header_updated;
|
||||
bool d_geojson_output_enabled;
|
||||
bool d_gpx_output_enabled;
|
||||
bool d_kml_output_enabled;
|
||||
bool d_nmea_output_file_enabled;
|
||||
bool d_rtcm_enabled;
|
||||
bool d_first_fix;
|
||||
bool d_xml_storage;
|
||||
bool d_flag_monitor_pvt_enabled;
|
||||
bool d_show_local_time_zone;
|
||||
bool d_waiting_obs_block_rx_clock_offset_correction_msg;
|
||||
bool d_enable_rx_clock_correction;
|
||||
bool d_rtcm_writing_started;
|
||||
bool d_rtcm_enabled;
|
||||
};
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -48,6 +48,7 @@
|
||||
#include <map> // for map
|
||||
#include <sstream> // for stringstream
|
||||
#include <string> // for string
|
||||
#include <vector>
|
||||
|
||||
|
||||
/** \addtogroup PVT
|
||||
@ -73,6 +74,7 @@ class Gps_Ephemeris;
|
||||
class Gps_Iono;
|
||||
class Gps_Navigation_Message;
|
||||
class Gps_Utc_Model;
|
||||
class Rtklib_Solver;
|
||||
|
||||
|
||||
/*!
|
||||
@ -83,152 +85,571 @@ class Rinex_Printer
|
||||
{
|
||||
public:
|
||||
/*!
|
||||
* \brief Default constructor. Creates GNSS Navigation and Observables RINEX files and their headers
|
||||
* \brief Constructor. Creates GNSS Navigation and Observables RINEX files.
|
||||
*/
|
||||
explicit Rinex_Printer(int version = 0, const std::string& base_path = ".", const std::string& base_name = "-");
|
||||
explicit Rinex_Printer(int version = 0,
|
||||
const std::string& base_path = ".",
|
||||
const std::string& base_name = "-");
|
||||
|
||||
/*!
|
||||
* \brief Default destructor. Closes GNSS Navigation and Observables RINEX files
|
||||
* \brief Destructor. Removes created files if empty.
|
||||
*/
|
||||
~Rinex_Printer();
|
||||
|
||||
/*!
|
||||
* \brief Generates the GPS L1 C/A Navigation Data header
|
||||
* \brief Print RINEX annotation. If it is the first annotation, it also
|
||||
* prints the RINEX headers for navigation and observation files. If it is
|
||||
* not the first annotation, it only annotates the observation, and updates
|
||||
* the navigation header if UTC data was not available when writting it for
|
||||
* the first time. The meaning of type_of_rx is as follows:
|
||||
*
|
||||
* type_of_rx | Signals
|
||||
* ------------- | -------------
|
||||
* 0 | Unknown
|
||||
* 1 | GPS L1 C/A
|
||||
* 2 | GPS L2C
|
||||
* 3 | GPS L5
|
||||
* 4 | Galileo E1B
|
||||
* 5 | Galileo E5a
|
||||
* 6 | Galileo E5b
|
||||
* 7 | GPS L1 C/A + GPS L2C
|
||||
* 8 | GPS L1 C/A + GPS L5
|
||||
* 9 | GPS L1 C/A + Galileo E1B
|
||||
* 10 | GPS L1 C/A + Galileo E5a
|
||||
* 11 | GPS L1 C/A + Galileo E5b
|
||||
* 12 | Galileo E1B + GPS L2C
|
||||
* 13 | Galileo E5a + GPS L5
|
||||
* 14 | Galileo E1B + Galileo E5a
|
||||
* 15 | Galileo E1B + Galileo E5b
|
||||
* 16 | GPS L2C + GPS L5
|
||||
* 17 | GPS L2C + Galileo E5a
|
||||
* 20 | GPS L5 + Galileo E5b
|
||||
* 21 | GPS L1 C/A + Galileo E1B + GPS L2C
|
||||
* 22 | GPS L1 C/A + Galileo E1B + GPS L5
|
||||
* 23 | GLONASS L1 C/A
|
||||
* 24 | GLONASS L2 C/A
|
||||
* 25 | GLONASS L1 C/A + GLONASS L2 C/A
|
||||
* 26 | GPS L1 C/A + GLONASS L1 C/A
|
||||
* 27 | Galileo E1B + GLONASS L1 C/A
|
||||
* 28 | GPS L2C + GLONASS L1 C/A
|
||||
* 29 | GPS L1 C/A + GLONASS L2 C/A
|
||||
* 30 | Galileo E1B + GLONASS L2 C/A
|
||||
* 31 | GPS L2C + GLONASS L2 C/A
|
||||
* 32 | GPS L1 C/A + Galileo E1B + GPS L5 + Galileo E5a
|
||||
* 33 | GPS L1 C/A + Galileo E1B + Galileo E5a
|
||||
* 100 | Galileo E6B
|
||||
* 101 | Galileo E1B + Galileo E6B
|
||||
* 102 | Galileo E5a + Galileo E6B
|
||||
* 103 | Galileo E5b + Galileo E6B
|
||||
* 104 | Galileo E1B + Galileo E5a + Galileo E6B
|
||||
* 105 | Galileo E1B + Galileo E5b + Galileo E6B
|
||||
* 106 | GPS L1 C/A + Galileo E1B + Galileo E6B
|
||||
* 500 | BeiDou B1I
|
||||
* 501 | BeiDou B1I + GPS L1 C/A
|
||||
* 502 | BeiDou B1I + Galileo E1B
|
||||
* 503 | BeiDou B1I + GLONASS L1 C/A
|
||||
* 504 | BeiDou B1I + GPS L1 C/A + Galileo E1B
|
||||
* 505 | BeiDou B1I + GPS L1 C/A + GLONASS L1 C/A + Galileo E1B
|
||||
* 506 | BeiDou B1I + Beidou B3I
|
||||
* 600 | BeiDou B3I
|
||||
* 601 | BeiDou B3I + GPS L2C
|
||||
* 602 | BeiDou B3I + GLONASS L2 C/A
|
||||
* 603 | BeiDou B3I + GPS L2C + GLONASS L2 C/A
|
||||
* 604 | BeiDou B3I + GPS L1 C/A
|
||||
* 605 | BeiDou B3I + Galileo E1B
|
||||
* 606 | BeiDou B3I + GLONASS L1 C/A
|
||||
* 607 | BeiDou B3I + GPS L1 C/A + Galileo E1B
|
||||
* 608 | BeiDou B3I + GPS L1 C/A + Galileo E1B + BeiDou B1I
|
||||
* 609 | BeiDou B3I + GPS L1 C/A + Galileo E1B + GLONASS L1 C/A
|
||||
* 610 | BeiDou B3I + GPS L1 C/A + Galileo E1B + GLONASS L1 C/A + BeiDou B1I
|
||||
* 1000 | GPS L1 C/A + GPS L2C + GPS L5
|
||||
* 1001 | GPS L1 C/A + Galileo E1B + GPS L2C + GPS L5 + Galileo E5a
|
||||
*
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Gps_Iono& iono, const Gps_Utc_Model& utc_model, const Gps_Ephemeris& eph) const;
|
||||
void print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
const std::map<int, Gnss_Synchro>& gnss_observables_map,
|
||||
double rx_time,
|
||||
int type_of_rx,
|
||||
bool flag_write_RINEX_obs_output);
|
||||
|
||||
/*!
|
||||
* \brief Generates the GPS L2C(M) Navigation Data header
|
||||
* \brief Print RINEX annotation for GPS NAV message
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Gps_CNAV_Iono& iono, const Gps_CNAV_Utc_Model& utc_model) const;
|
||||
void log_rinex_nav_gps_nav(int type_of_rx,
|
||||
const std::map<int32_t, Gps_Ephemeris>& new_eph);
|
||||
|
||||
/*!
|
||||
* \brief Generates the Galileo Navigation Data header
|
||||
* \brief Print RINEX annotation for GPS CNAV message
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Galileo_Iono& iono, const Galileo_Utc_Model& utc_model) const;
|
||||
void log_rinex_nav_gps_cnav(int type_of_rx,
|
||||
const std::map<int32_t, Gps_CNAV_Ephemeris>& new_cnav_eph);
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS/Galileo) Navigation Data header
|
||||
* \brief Print RINEX annotation for Galileo NAV message
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
void log_rinex_nav_gal_nav(int type_of_rx,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& new_gal_eph);
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS CNAV/Galileo) Navigation Data header
|
||||
* \brief Print RINEX annotation for Glonass GNAV message
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Gps_CNAV_Iono& iono, const Gps_CNAV_Utc_Model& utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
void log_rinex_nav_glo_gnav(int type_of_rx,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& new_glo_eph);
|
||||
|
||||
/*!
|
||||
* \brief Generates the GLONASS L1, L2 C/A Navigation Data header
|
||||
* \brief Print RINEX annotation for BeiDou DNAV message
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Glonass_Gnav_Utc_Model& utc_model, const Glonass_Gnav_Ephemeris& glonass_gnav_eph);
|
||||
void log_rinex_nav_bds_dnav(int type_of_rx,
|
||||
const std::map<int32_t, Beidou_Dnav_Ephemeris>& new_bds_eph);
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (Galileo/GLONASS) Navigation Data header
|
||||
* \brief Set processing for signals older than 2009
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
void set_pre_2009_file(bool pre_2009_file);
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS L1 C/A/GLONASS L1, L2) Navigation Data header
|
||||
* \brief Returns true is the RINEX file headers are already written
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac);
|
||||
inline bool is_rinex_header_written() const
|
||||
{
|
||||
return d_rinex_header_written;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS L2C C/A/GLONASS L1, L2) Navigation Data header
|
||||
* \brief Returns name of RINEX navigation file(s)
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Gps_CNAV_Iono& gps_iono, const Gps_CNAV_Utc_Model& gps_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac);
|
||||
inline std::vector<std::string> get_navfilename() const
|
||||
{
|
||||
return output_navfilename;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Generates the BDS B1I or B3I Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Beidou_Dnav_Iono& iono, const Beidou_Dnav_Utc_Model& utc_model) const;
|
||||
* \brief Returns name of RINEX observation file
|
||||
*/
|
||||
inline std::string get_obsfilename() const
|
||||
{
|
||||
return obsfilename;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed GPS L1,L5 + BDS B1I, B3I Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Beidou_Dnav_Iono& bds_dnav_iono, const Beidou_Dnav_Utc_Model& bds_dnav_utc_model) const;
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed GPS L2C + BDS B1I, B3I Navigation Data header
|
||||
private:
|
||||
/*
|
||||
* Generates the GPS Observation data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Gps_CNAV_Iono& gps_cnav_iono, const Gps_CNAV_Utc_Model& gps_cnav_utc_model, const Beidou_Dnav_Iono& bds_dnav_iono, const Beidou_Dnav_Utc_Model& bds_dnav_utc_model);
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Gps_Ephemeris& eph,
|
||||
double d_TOW_first_observation);
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed GLONASS L1,L2 + BDS B1I, B3I Navigation Data header
|
||||
/*
|
||||
* Generates the GPS L2 Observation data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Glonass_Gnav_Utc_Model& glo_gnav_utc_model, const Beidou_Dnav_Iono& bds_dnav_iono, const Beidou_Dnav_Utc_Model& bds_dnav_utc_model) const;
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& gps_bands = "2S");
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (Galileo/BDS B1I, B3I) Navigation Data header
|
||||
/*
|
||||
* Generates the dual frequency GPS L1 & L2/L5 Observation data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Beidou_Dnav_Iono& bds_dnav_iono, const Beidou_Dnav_Utc_Model& bds_dnav_utc_model) const;
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Gps_Ephemeris& eph,
|
||||
const Gps_CNAV_Ephemeris& eph_cnav,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& gps_bands = "1C 2S");
|
||||
|
||||
/*!
|
||||
* \brief Generates the GPS Observation data header
|
||||
/*
|
||||
* Generates the Galileo Observation data header.
|
||||
* Example: bands("1B"), bands("1B 5X"), bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph, double d_TOW_first_observation);
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Galileo_Ephemeris& eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& bands = "1B");
|
||||
|
||||
/*!
|
||||
* \brief Generates the GPS L2 Observation data header
|
||||
/*
|
||||
* Generates the Mixed (GPS/Galileo) Observation data header.
|
||||
* Example: galileo_bands("1B"), galileo_bands("1B 5X"),
|
||||
* galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris& eph, double d_TOW_first_observation, const std::string& gps_bands = "2S");
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& galileo_bands = "1B");
|
||||
|
||||
/*!
|
||||
* \brief Generates the dual frequency GPS L1 & L2/L5 Observation data header
|
||||
/*
|
||||
* Generates the Mixed (GPS/Galileo) Observation data header.
|
||||
* Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& eph_cnav, double d_TOW_first_observation, const std::string& gps_bands = "1C 2S");
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Gps_CNAV_Ephemeris& eph_cnav,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& gps_bands = "1C 2S",
|
||||
const std::string& galileo_bands = "1B");
|
||||
|
||||
/*!
|
||||
* \brief Generates the Galileo Observation data header. Example: bands("1B"), bands("1B 5X"), bands("5X"), ... Default: "1B".
|
||||
/*
|
||||
* Generates the Mixed (GPS/Galileo) Observation data header.
|
||||
* Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Galileo_Ephemeris& eph, double d_TOW_first_observation, const std::string& bands = "1B");
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& eph_cnav,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& gps_bands = "2S",
|
||||
const std::string& galileo_bands = "1B");
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS/Galileo) Observation data header. Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
/*
|
||||
* Generates the GLONASS GNAV Observation data header.
|
||||
* Example: bands("1C"), bands("1C 2C"), bands("2C"), ... Default: "1C".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& galileo_eph, double d_TOW_first_observation, const std::string& galileo_bands = "1B");
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Glonass_Gnav_Ephemeris& eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& bands = "1G");
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS/Galileo) Observation data header. Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
/*
|
||||
* Generates the Mixed (GPS L1 C/A /GLONASS) Observation data header.
|
||||
* Example: galileo_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& eph_cnav, const Galileo_Ephemeris& galileo_eph, double d_TOW_first_observation, const std::string& gps_bands = "1C 2S", const std::string& galileo_bands = "1B");
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& glonass_bands = "1C");
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS/Galileo) Observation data header. Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
/*
|
||||
* Generates the Mixed (Galileo/GLONASS) Observation data header.
|
||||
* Example: galileo_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris& eph_cnav, const Galileo_Ephemeris& galileo_eph, double d_TOW_first_observation, const std::string& gps_bands = "2S", const std::string& galileo_bands = "1B");
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& galileo_bands = "1B",
|
||||
const std::string& glonass_bands = "1C");
|
||||
|
||||
/*!
|
||||
* \brief Generates the GLONASS GNAV Observation data header. Example: bands("1C"), bands("1C 2C"), bands("2C"), ... Default: "1C".
|
||||
/*
|
||||
* Generates the Mixed (GPS L2C/GLONASS) Observation data header.
|
||||
* Example: galileo_bands("1G")... Default: "1G".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Glonass_Gnav_Ephemeris& eph, double d_TOW_first_observation, const std::string& bands = "1G");
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& gps_cnav_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& glonass_bands = "1G");
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS L1 C/A /GLONASS) Observation data header. Example: galileo_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
/*
|
||||
* Generates the a Beidou B1I Observation data header. Example: beidou_bands("B1")
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps_eph, const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double d_TOW_first_observation, const std::string& glonass_bands = "1C");
|
||||
void rinex_obs_header(std::fstream& out,
|
||||
const Beidou_Dnav_Ephemeris& eph,
|
||||
double d_TOW_first_observation,
|
||||
const std::string& bands);
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (Galileo/GLONASS) Observation data header. Example: galileo_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Galileo_Ephemeris& galileo_eph, const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double d_TOW_first_observation, const std::string& galileo_bands = "1B", const std::string& glonass_bands = "1C");
|
||||
|
||||
/*!
|
||||
* \brief Generates the Mixed (GPS L2C/GLONASS) Observation data header. Example: galileo_bands("1G")... Default: "1G".
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris& gps_cnav_eph, const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double d_TOW_first_observation, const std::string& glonass_bands = "1G");
|
||||
|
||||
/*!
|
||||
* \brief Generates the a Beidou B1I Observation data header. Example: beidou_bands("B1")
|
||||
*/
|
||||
void rinex_obs_header(std::fstream& out, const Beidou_Dnav_Ephemeris& eph, double d_TOW_first_observation, const std::string& bands);
|
||||
|
||||
/*!
|
||||
* \brief Generates the SBAS raw data header
|
||||
/*
|
||||
* Generates the SBAS raw data header
|
||||
*/
|
||||
void rinex_sbs_header(std::fstream& out) const;
|
||||
|
||||
/*!
|
||||
* \brief Computes the BDS Time and returns a boost::posix_time::ptime object
|
||||
/*
|
||||
* Writes GPS L1 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*
|
||||
* Writes GPS L2 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*
|
||||
* Writes dual frequency GPS L1 and L2 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& eph,
|
||||
const Gps_CNAV_Ephemeris& eph_cnav,
|
||||
double obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables,
|
||||
bool triple_band = false) const;
|
||||
|
||||
/*
|
||||
* Writes Galileo observables into the RINEX file.
|
||||
* Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Galileo_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables,
|
||||
const std::string& galileo_bands = "1B") const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double gps_obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& eph,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double gps_obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Gps_CNAV_Ephemeris& gps_cnav_eph,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double gps_obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables,
|
||||
bool triple_band = false) const;
|
||||
|
||||
/*
|
||||
* Writes GLONASS GNAV observables into the RINEX file.
|
||||
* Example: glonass_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Glonass_Gnav_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables,
|
||||
const std::string& glonass_bands = "1C") const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS L1 C/A - GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double gps_obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS L2C - GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& gps_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double gps_obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed Galileo/GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double galileo_obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*
|
||||
* Writes BDS B1I observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Beidou_Dnav_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const std::map<int32_t, Gnss_Synchro>& observables,
|
||||
const std::string& bds_bands) const;
|
||||
|
||||
/*
|
||||
* Generates the GPS L1 C/A Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Gps_Iono& iono,
|
||||
const Gps_Utc_Model& utc_model,
|
||||
const Gps_Ephemeris& eph) const;
|
||||
|
||||
/*
|
||||
* Generates the GPS L2C(M) Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Gps_CNAV_Iono& iono,
|
||||
const Gps_CNAV_Utc_Model& utc_model) const;
|
||||
|
||||
/*
|
||||
* Generates the Galileo Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Galileo_Iono& iono,
|
||||
const Galileo_Utc_Model& utc_model) const;
|
||||
|
||||
/*
|
||||
* Generates the Mixed (GPS/Galileo) Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Gps_Iono& gps_iono,
|
||||
const Gps_Utc_Model& gps_utc_model,
|
||||
const Gps_Ephemeris& eph,
|
||||
const Galileo_Iono& galileo_iono,
|
||||
const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
|
||||
/*
|
||||
* Generates the Mixed (GPS CNAV/Galileo) Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Gps_CNAV_Iono& iono,
|
||||
const Gps_CNAV_Utc_Model& utc_model,
|
||||
const Galileo_Iono& galileo_iono,
|
||||
const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
|
||||
/*
|
||||
* Generates the GLONASS L1, L2 C/A Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Glonass_Gnav_Utc_Model& utc_model,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph);
|
||||
|
||||
/*
|
||||
* Generates the Mixed (Galileo/GLONASS) Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Galileo_Iono& galileo_iono,
|
||||
const Galileo_Utc_Model& galileo_utc_model,
|
||||
const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model,
|
||||
const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
|
||||
/*
|
||||
* Generates the Mixed (GPS L1 C/A/GLONASS L1, L2) Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Gps_Iono& gps_iono,
|
||||
const Gps_Utc_Model& gps_utc_model,
|
||||
const Gps_Ephemeris& eph,
|
||||
const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model,
|
||||
const Glonass_Gnav_Almanac& glonass_gnav_almanac);
|
||||
|
||||
/*
|
||||
* Generates the Mixed (GPS L2C C/A/GLONASS L1, L2) Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Gps_CNAV_Iono& gps_iono,
|
||||
const Gps_CNAV_Utc_Model& gps_utc_model,
|
||||
const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model,
|
||||
const Glonass_Gnav_Almanac& glonass_gnav_almanac);
|
||||
|
||||
/*
|
||||
* Generates the BDS B1I or B3I Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Beidou_Dnav_Iono& iono,
|
||||
const Beidou_Dnav_Utc_Model& utc_model) const;
|
||||
|
||||
/*
|
||||
* Generates the Mixed GPS L1,L5 + BDS B1I, B3I Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Gps_Iono& gps_iono,
|
||||
const Gps_Utc_Model& gps_utc_model,
|
||||
const Gps_Ephemeris& eph,
|
||||
const Beidou_Dnav_Iono& bds_dnav_iono,
|
||||
const Beidou_Dnav_Utc_Model& bds_dnav_utc_model) const;
|
||||
|
||||
/*
|
||||
* Generates the Mixed GPS L2C + BDS B1I, B3I Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Gps_CNAV_Iono& gps_cnav_iono,
|
||||
const Gps_CNAV_Utc_Model& gps_cnav_utc_model,
|
||||
const Beidou_Dnav_Iono& bds_dnav_iono,
|
||||
const Beidou_Dnav_Utc_Model& bds_dnav_utc_model);
|
||||
|
||||
/*
|
||||
* Generates the Mixed GLONASS L1,L2 + BDS B1I, B3I Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Glonass_Gnav_Utc_Model& glo_gnav_utc_model,
|
||||
const Beidou_Dnav_Iono& bds_dnav_iono,
|
||||
const Beidou_Dnav_Utc_Model& bds_dnav_utc_model) const;
|
||||
|
||||
/*
|
||||
* Generates the Mixed (Galileo/BDS B1I, B3I) Navigation Data header
|
||||
*/
|
||||
void rinex_nav_header(std::fstream& out,
|
||||
const Galileo_Iono& galileo_iono,
|
||||
const Galileo_Utc_Model& galileo_utc_model,
|
||||
const Beidou_Dnav_Iono& bds_dnav_iono,
|
||||
const Beidou_Dnav_Utc_Model& bds_dnav_utc_model) const;
|
||||
|
||||
/*
|
||||
* Writes data from the GPS L1 C/A navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_Ephemeris>& eph_map) const;
|
||||
|
||||
/*
|
||||
* Writes data from the GPS L2 navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_CNAV_Ephemeris>& eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the Galileo navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& eph_map) const;
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (GPS/Galileo) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_Ephemeris>& gps_eph_map,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (GPS/Galileo) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the GLONASS GNAV navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& eph_map) const;
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (GPS/GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_Ephemeris>& gps_eph_map,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map) const;
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (GPS/GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (Galileo/ GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the Beidou B1I navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Beidou_Dnav_Ephemeris>& eph_map) const;
|
||||
|
||||
/*
|
||||
* Computes the BDS Time and returns a boost::posix_time::ptime object
|
||||
* \details Function used to convert the observation time into BDT time which is used
|
||||
* as the default time for RINEX files
|
||||
* \param eph BeiDou DNAV Ephemeris object
|
||||
@ -236,28 +657,28 @@ public:
|
||||
*/
|
||||
boost::posix_time::ptime compute_BDS_time(const Beidou_Dnav_Ephemeris& eph, double obs_time) const;
|
||||
|
||||
/*!
|
||||
* \brief Computes the UTC time and returns a boost::posix_time::ptime object
|
||||
/*
|
||||
* Computes the UTC time and returns a boost::posix_time::ptime object
|
||||
*/
|
||||
boost::posix_time::ptime compute_UTC_time(const Gps_Navigation_Message& nav_msg) const;
|
||||
|
||||
/*!
|
||||
* \brief Computes the GPS time and returns a boost::posix_time::ptime object
|
||||
/*
|
||||
* Computes the GPS time and returns a boost::posix_time::ptime object
|
||||
*/
|
||||
boost::posix_time::ptime compute_GPS_time(const Gps_Ephemeris& eph, double obs_time) const;
|
||||
|
||||
/*!
|
||||
* \brief Computes the GPS time and returns a boost::posix_time::ptime object
|
||||
/*
|
||||
* Computes the GPS time and returns a boost::posix_time::ptime object
|
||||
*/
|
||||
boost::posix_time::ptime compute_GPS_time(const Gps_CNAV_Ephemeris& eph, double obs_time) const;
|
||||
|
||||
/*!
|
||||
* \brief Computes the Galileo time and returns a boost::posix_time::ptime object
|
||||
/*
|
||||
* Computes the Galileo time and returns a boost::posix_time::ptime object
|
||||
*/
|
||||
boost::posix_time::ptime compute_Galileo_time(const Galileo_Ephemeris& eph, double obs_time) const;
|
||||
|
||||
/*!
|
||||
* \brief Computes the UTC Time and returns a boost::posix_time::ptime object
|
||||
/*
|
||||
* Computes the UTC Time and returns a boost::posix_time::ptime object
|
||||
* \details Function used as a method to convert the observation time into UTC time which is used
|
||||
* as the default time for RINEX files
|
||||
* \param eph GLONASS GNAV Ephemeris object
|
||||
@ -265,183 +686,97 @@ public:
|
||||
*/
|
||||
boost::posix_time::ptime compute_UTC_time(const Glonass_Gnav_Ephemeris& eph, double obs_time) const;
|
||||
|
||||
/*!
|
||||
* \brief Computes number of leap seconds of GPS relative to UTC
|
||||
/*
|
||||
* Computes number of leap seconds of GPS relative to UTC
|
||||
* \param eph GLONASS GNAV Ephemeris object
|
||||
* \param gps_obs_time Observation time in GPS seconds of week
|
||||
*/
|
||||
double get_leap_second(const Glonass_Gnav_Ephemeris& eph, double gps_obs_time) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the GPS L1 C/A navigation message into the RINEX file
|
||||
/*
|
||||
* Represents GPS time in the date time format. Leap years are considered, but leap seconds are not.
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_Ephemeris>& eph_map) const;
|
||||
void to_date_time(int gps_week,
|
||||
int gps_tow,
|
||||
int& year,
|
||||
int& month,
|
||||
int& day,
|
||||
int& hour,
|
||||
int& minute,
|
||||
int& second) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the GPS L2 navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_CNAV_Ephemeris>& eph_map);
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the Galileo navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Galileo_Ephemeris>& eph_map) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the Mixed (GPS/Galileo) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_Ephemeris>& gps_eph_map, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map);
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the Mixed (GPS/Galileo) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map);
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the GLONASS GNAV navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Glonass_Gnav_Ephemeris>& eph_map) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the Mixed (GPS/GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_Ephemeris>& gps_eph_map, const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the Mixed (GPS/GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map, const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map);
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the Mixed (Galileo/ GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map, const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map);
|
||||
|
||||
/*!
|
||||
* \brief Writes data from the Beidou B1I navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out, const std::map<int32_t, Beidou_Dnav_Ephemeris>& eph_map) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes GPS L1 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes GPS L2 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes dual frequency GPS L1 and L2 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& eph_cnav, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables, bool triple_band = false) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes Galileo observables into the RINEX file. Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Galileo_Ephemeris& eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables, const std::string& galileo_bands = "1B") const;
|
||||
|
||||
/*!
|
||||
* \brief Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& gps_cnav_eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables, bool triple_band = false) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes GLONASS GNAV observables into the RINEX file. Example: glonass_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Glonass_Gnav_Ephemeris& eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables, const std::string& glonass_bands = "1C") const;
|
||||
|
||||
/*!
|
||||
* \brief Writes Mixed GPS L1 C/A - GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes Mixed GPS L2C - GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& gps_eph, const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes Mixed Galileo/GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Galileo_Ephemeris& galileo_eph, const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double galileo_obs_time, const std::map<int32_t, Gnss_Synchro>& observables) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes BDS B1I observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out, const Beidou_Dnav_Ephemeris& eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables, const std::string& bds_bands) const;
|
||||
|
||||
|
||||
/*!
|
||||
* \brief Represents GPS time in the date time format. Leap years are considered, but leap seconds are not.
|
||||
*/
|
||||
void to_date_time(int gps_week, int gps_tow, int& year, int& month, int& day, int& hour, int& minute, int& second) const;
|
||||
|
||||
/*!
|
||||
* \brief Writes raw SBAS messages into the RINEX file
|
||||
/*
|
||||
* Writes raw SBAS messages into the RINEX file
|
||||
*/
|
||||
// void log_rinex_sbs(std::fstream & out, const Sbas_Raw_Msg & sbs_message);
|
||||
|
||||
void update_nav_header(std::fstream& out, const Gps_Utc_Model& utc_model, const Gps_Iono& gps_iono, const Gps_Ephemeris& eph) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Gps_Utc_Model& utc_model,
|
||||
const Gps_Iono& gps_iono, const Gps_Ephemeris& eph) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Model& utc_model, const Gps_CNAV_Iono& iono) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Gps_CNAV_Utc_Model& utc_model,
|
||||
const Gps_CNAV_Iono& iono) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Gps_Iono& gps_iono,
|
||||
const Gps_Utc_Model& gps_utc_model,
|
||||
const Gps_Ephemeris& eph,
|
||||
const Galileo_Iono& galileo_iono,
|
||||
const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Model& utc_model, const Gps_CNAV_Iono& iono, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Gps_CNAV_Utc_Model& utc_model,
|
||||
const Gps_CNAV_Iono& iono,
|
||||
const Galileo_Iono& galileo_iono,
|
||||
const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& utc_model) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Galileo_Iono& galileo_iono,
|
||||
const Galileo_Utc_Model& utc_model) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model,
|
||||
const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc, const Gps_Ephemeris& eph, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Gps_Iono& gps_iono,
|
||||
const Gps_Utc_Model& gps_utc,
|
||||
const Gps_Ephemeris& eph,
|
||||
const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model,
|
||||
const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Gps_CNAV_Iono& gps_iono, const Gps_CNAV_Utc_Model& gps_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Gps_CNAV_Iono& gps_iono,
|
||||
const Gps_CNAV_Utc_Model& gps_utc_model,
|
||||
const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model,
|
||||
const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Galileo_Iono& galileo_iono,
|
||||
const Galileo_Utc_Model& galileo_utc_model,
|
||||
const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model,
|
||||
const Glonass_Gnav_Almanac& glonass_gnav_almanac) const;
|
||||
|
||||
void update_nav_header(std::fstream& out, const Beidou_Dnav_Utc_Model& utc_model, const Beidou_Dnav_Iono& beidou_dnav_iono) const;
|
||||
void update_nav_header(std::fstream& out,
|
||||
const Beidou_Dnav_Utc_Model& utc_model,
|
||||
const Beidou_Dnav_Iono& beidou_dnav_iono) const;
|
||||
|
||||
void update_obs_header(std::fstream& out, const Gps_Utc_Model& utc_model) const;
|
||||
void update_obs_header(std::fstream& out,
|
||||
const Gps_Utc_Model& utc_model) const;
|
||||
|
||||
void update_obs_header(std::fstream& out, const Gps_CNAV_Utc_Model& utc_model) const;
|
||||
void update_obs_header(std::fstream& out,
|
||||
const Gps_CNAV_Utc_Model& utc_model) const;
|
||||
|
||||
void update_obs_header(std::fstream& out, const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
void update_obs_header(std::fstream& out,
|
||||
const Galileo_Utc_Model& galileo_utc_model) const;
|
||||
|
||||
void update_obs_header(std::fstream& out, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model) const;
|
||||
void update_obs_header(std::fstream& out,
|
||||
const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model) const;
|
||||
|
||||
void update_obs_header(std::fstream& out, const Beidou_Dnav_Utc_Model& utc_model) const;
|
||||
void update_obs_header(std::fstream& out,
|
||||
const Beidou_Dnav_Utc_Model& utc_model) const;
|
||||
|
||||
void set_pre_2009_file(bool pre_2009_file);
|
||||
|
||||
std::fstream obsFile; //!< Output file stream for RINEX observation file
|
||||
std::fstream navFile; //!< Output file stream for RINEX navigation data file
|
||||
std::fstream sbsFile; //!< Output file stream for RINEX SBAS raw data file
|
||||
std::fstream navGalFile; //!< Output file stream for RINEX Galileo navigation data file
|
||||
std::fstream navGloFile; //!< Output file stream for RINEX GLONASS navigation data file
|
||||
std::fstream navBdsFile; //!< Output file stream for RINEX Galileo navigation data file
|
||||
std::fstream navMixFile; //!< Output file stream for RINEX Mixed navigation data file
|
||||
|
||||
std::string navfilename;
|
||||
std::string obsfilename;
|
||||
std::string sbsfilename;
|
||||
std::string navGalfilename;
|
||||
std::string navGlofilename;
|
||||
std::string navBdsfilename;
|
||||
std::string navMixfilename;
|
||||
|
||||
private:
|
||||
/*
|
||||
* Generation of RINEX signal strength indicators
|
||||
*/
|
||||
@ -653,12 +988,32 @@ private:
|
||||
std::map<std::string, std::string> satelliteSystem; // GPS, GLONASS, SBAS payload, Galileo or Beidou
|
||||
std::map<std::string, std::string> observationType; // PSEUDORANGE, CARRIER_PHASE, DOPPLER, SIGNAL_STRENGTH
|
||||
std::map<std::string, std::string> observationCode; // GNSS observation descriptors
|
||||
std::string stringVersion; // RINEX version (2.10/2.11 or 3.01/3.02)
|
||||
|
||||
double fake_cnav_iode;
|
||||
int version; // RINEX version (2 for 2.10/2.11 and 3 for 3.01)
|
||||
int numberTypesObservations; // Number of available types of observable in the system. Should be public?
|
||||
bool pre_2009_file_;
|
||||
std::fstream obsFile; // Output file stream for RINEX observation file
|
||||
std::fstream navFile; // Output file stream for RINEX navigation data file
|
||||
std::fstream sbsFile; // Output file stream for RINEX SBAS raw data file
|
||||
std::fstream navGalFile; // Output file stream for RINEX Galileo navigation data file
|
||||
std::fstream navGloFile; // Output file stream for RINEX GLONASS navigation data file
|
||||
std::fstream navBdsFile; // Output file stream for RINEX Galileo navigation data file
|
||||
std::fstream navMixFile; // Output file stream for RINEX Mixed navigation data file
|
||||
|
||||
std::string navfilename; // Name of RINEX navigation file for GPS L1
|
||||
std::string obsfilename; // Name of RINEX observation file
|
||||
std::string sbsfilename; // Name of RINEX SBAS file
|
||||
std::string navGalfilename; // Name of RINEX navigation file for Galileo
|
||||
std::string navGlofilename; // Name of RINEX navigation file for Glonass
|
||||
std::string navBdsfilename; // Name of RINEX navigation file for BeiDou
|
||||
std::string navMixfilename; // Name of RINEX navigation file for fixed signals
|
||||
std::vector<std::string> output_navfilename; // Name of output RINEX navigation file(s)
|
||||
|
||||
std::string d_stringVersion; // RINEX version (2.10/2.11 or 3.01/3.02)
|
||||
|
||||
double d_fake_cnav_iode;
|
||||
int d_version; // RINEX version (2 for 2.10/2.11 and 3 for 3.01)
|
||||
int d_numberTypesObservations; // Number of available types of observable in the system. Should be public?
|
||||
bool d_rinex_header_updated;
|
||||
bool d_rinex_header_written;
|
||||
bool d_pre_2009_file;
|
||||
};
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -42,6 +42,7 @@ class Gnss_Synchro;
|
||||
class Gps_CNAV_Ephemeris;
|
||||
class Gps_Ephemeris;
|
||||
class Rtcm;
|
||||
class Rtklib_Solver;
|
||||
|
||||
/*!
|
||||
* \brief This class provides a implementation of a subset of the RTCM Standard 10403.2 messages
|
||||
@ -52,19 +53,63 @@ public:
|
||||
/*!
|
||||
* \brief Default constructor.
|
||||
*/
|
||||
Rtcm_Printer(const std::string& filename, bool flag_rtcm_file_dump, bool flag_rtcm_server, bool flag_rtcm_tty_port, uint16_t rtcm_tcp_port, uint16_t rtcm_station_id, const std::string& rtcm_dump_devname, bool time_tag_name = true, const std::string& base_path = ".");
|
||||
Rtcm_Printer(const std::string& filename,
|
||||
bool flag_rtcm_file_dump,
|
||||
bool flag_rtcm_server,
|
||||
bool flag_rtcm_tty_port,
|
||||
uint16_t rtcm_tcp_port,
|
||||
uint16_t rtcm_station_id,
|
||||
const std::string& rtcm_dump_devname,
|
||||
bool time_tag_name = true,
|
||||
const std::string& base_path = ".");
|
||||
|
||||
/*!
|
||||
* \brief Default destructor.
|
||||
*/
|
||||
~Rtcm_Printer();
|
||||
|
||||
/*!
|
||||
* \brief Print RTCM messages.
|
||||
*/
|
||||
void Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver,
|
||||
const std::map<int, Gnss_Synchro>& gnss_observables_map,
|
||||
double rx_time,
|
||||
int32_t type_of_rx,
|
||||
int32_t rtcm_MSM_rate_ms,
|
||||
int32_t rtcm_MT1019_rate_ms,
|
||||
int32_t rtcm_MT1020_rate_ms,
|
||||
int32_t rtcm_MT1045_rate_ms,
|
||||
int32_t rtcm_MT1077_rate_ms,
|
||||
int32_t rtcm_MT1097_rate_ms,
|
||||
bool flag_write_RTCM_MSM_output,
|
||||
bool flag_write_RTCM_1019_output,
|
||||
bool flag_write_RTCM_1020_output,
|
||||
bool flag_write_RTCM_1045_output,
|
||||
bool enable_rx_clock_correction);
|
||||
|
||||
uint32_t lock_time(const Gps_Ephemeris& eph, double obs_time, const Gnss_Synchro& gnss_synchro);
|
||||
uint32_t lock_time(const Gps_CNAV_Ephemeris& eph, double obs_time, const Gnss_Synchro& gnss_synchro);
|
||||
uint32_t lock_time(const Galileo_Ephemeris& eph, double obs_time, const Gnss_Synchro& gnss_synchro);
|
||||
|
||||
/*!
|
||||
* \brief Locks time for logging given GLONASS GNAV Broadcast Ephemeris
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
* \params glonass_gnav_eph GLONASS GNAV Broadcast Ephemeris
|
||||
* \params obs_time Time of observation at the moment of printing
|
||||
* \params observables Set of observables as defined by the platform
|
||||
* \return locked time during logging process
|
||||
*/
|
||||
uint32_t lock_time(const Glonass_Gnav_Ephemeris& eph, double obs_time, const Gnss_Synchro& gnss_synchro);
|
||||
|
||||
std::string print_MT1005_test(); //!< For testing purposes
|
||||
|
||||
private:
|
||||
bool Print_Rtcm_MT1001(const Gps_Ephemeris& gps_eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables);
|
||||
bool Print_Rtcm_MT1002(const Gps_Ephemeris& gps_eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables);
|
||||
bool Print_Rtcm_MT1003(const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& cnav_eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables);
|
||||
bool Print_Rtcm_MT1004(const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& cnav_eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables);
|
||||
|
||||
/*!
|
||||
/*
|
||||
* \brief Prints L1-Only GLONASS RTK Observables
|
||||
* \details This GLONASS message type is not generally used or supported; type 1012 is to be preferred.
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
@ -75,7 +120,7 @@ public:
|
||||
*/
|
||||
bool Print_Rtcm_MT1009(const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables);
|
||||
|
||||
/*!
|
||||
/*
|
||||
* \brief Prints Extended L1-Only GLONASS RTK Observables
|
||||
* \details This GLONASS message type is used when only L1 data is present and bandwidth is very tight, often 1012 is used in such cases.
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
@ -86,7 +131,7 @@ public:
|
||||
*/
|
||||
bool Print_Rtcm_MT1010(const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables);
|
||||
|
||||
/*!
|
||||
/*
|
||||
* \brief Prints L1&L2 GLONASS RTK Observables
|
||||
* \details This GLONASS message type is not generally used or supported; type 1012 is to be preferred
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
@ -98,7 +143,7 @@ public:
|
||||
*/
|
||||
bool Print_Rtcm_MT1011(const Glonass_Gnav_Ephemeris& glonass_gnav_ephL1, const Glonass_Gnav_Ephemeris& glonass_gnav_ephL2, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables);
|
||||
|
||||
/*!
|
||||
/*
|
||||
* \brief Prints Extended L1&L2 GLONASS RTK Observables
|
||||
* \details This GLONASS message type is the most common observational message type, with L1/L2/SNR content. This is one of the most common messages found.
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
@ -110,10 +155,10 @@ public:
|
||||
*/
|
||||
bool Print_Rtcm_MT1012(const Glonass_Gnav_Ephemeris& glonass_gnav_ephL1, const Glonass_Gnav_Ephemeris& glonass_gnav_ephL2, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables);
|
||||
|
||||
bool Print_Rtcm_MT1019(const Gps_Ephemeris& gps_eph); //!< GPS Ephemeris, should be broadcast in the event that the IODC does not match the IODE, and every 2 minutes.
|
||||
bool Print_Rtcm_MT1045(const Galileo_Ephemeris& gal_eph); //!< Galileo Ephemeris, should be broadcast every 2 minutes
|
||||
bool Print_Rtcm_MT1019(const Gps_Ephemeris& gps_eph); // GPS Ephemeris, should be broadcast in the event that the IODC does not match the IODE, and every 2 minutes.
|
||||
bool Print_Rtcm_MT1045(const Galileo_Ephemeris& gal_eph); // Galileo Ephemeris, should be broadcast every 2 minutes
|
||||
|
||||
/*!
|
||||
/*
|
||||
* \brief Prints GLONASS GNAV Ephemeris
|
||||
* \details This GLONASS message should be broadcast every 2 minutes
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
@ -136,22 +181,6 @@ public:
|
||||
bool divergence_free,
|
||||
bool more_messages);
|
||||
|
||||
std::string print_MT1005_test(); //!< For testing purposes
|
||||
uint32_t lock_time(const Gps_Ephemeris& eph, double obs_time, const Gnss_Synchro& gnss_synchro);
|
||||
uint32_t lock_time(const Gps_CNAV_Ephemeris& eph, double obs_time, const Gnss_Synchro& gnss_synchro);
|
||||
uint32_t lock_time(const Galileo_Ephemeris& eph, double obs_time, const Gnss_Synchro& gnss_synchro);
|
||||
|
||||
/*!
|
||||
* \brief Locks time for logging given GLONASS GNAV Broadcast Ephemeris
|
||||
* \note Code added as part of GSoC 2017 program
|
||||
* \params glonass_gnav_eph GLONASS GNAV Broadcast Ephemeris
|
||||
* \params obs_time Time of observation at the moment of printing
|
||||
* \params observables Set of observables as defined by the platform
|
||||
* \return locked time during logging process
|
||||
*/
|
||||
uint32_t lock_time(const Glonass_Gnav_Ephemeris& eph, double obs_time, const Gnss_Synchro& gnss_synchro);
|
||||
|
||||
private:
|
||||
int32_t init_serial(const std::string& serial_device); // serial port control
|
||||
void close_serial();
|
||||
bool Print_Message(const std::string& message);
|
||||
@ -164,6 +193,7 @@ private:
|
||||
int32_t rtcm_dev_descriptor; // RTCM serial device descriptor (i.e. COM port)
|
||||
uint16_t port;
|
||||
uint16_t station_id;
|
||||
bool d_rtcm_writing_started;
|
||||
bool d_rtcm_file_dump;
|
||||
};
|
||||
|
||||
|
@ -133,7 +133,6 @@ DECLARE_string(log_dir);
|
||||
#include "unit-tests/system-parameters/glonass_gnav_ephemeris_test.cc"
|
||||
#include "unit-tests/system-parameters/glonass_gnav_nav_message_test.cc"
|
||||
|
||||
|
||||
#if EXTRA_TESTS
|
||||
#include "unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc"
|
||||
// #include "unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc"
|
||||
|
@ -18,24 +18,182 @@
|
||||
*/
|
||||
|
||||
#include "rinex_printer.h"
|
||||
#include "rtklib_rtkpos.h"
|
||||
#include "rtklib_solver.h"
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
|
||||
#if HAS_STD_FILESYSTEM
|
||||
#include <system_error>
|
||||
namespace errorlib = std;
|
||||
#if HAS_STD_FILESYSTEM_EXPERIMENTAL
|
||||
#include <experimental/filesystem>
|
||||
namespace fs = std::experimental::filesystem;
|
||||
#else
|
||||
#include <filesystem>
|
||||
namespace fs = std::filesystem;
|
||||
#endif
|
||||
#else
|
||||
#include <boost/filesystem/operations.hpp> // for create_directories, exists
|
||||
#include <boost/filesystem/path.hpp> // for path, operator<<
|
||||
#include <boost/filesystem/path_traits.hpp> // for filesystem
|
||||
#include <boost/system/error_code.hpp> // for error_code
|
||||
namespace fs = boost::filesystem;
|
||||
namespace errorlib = boost::system;
|
||||
#endif
|
||||
|
||||
TEST(RinexPrinterTest, GalileoObsHeader)
|
||||
class RinexPrinterTest : public ::testing::Test
|
||||
{
|
||||
protected:
|
||||
RinexPrinterTest()
|
||||
{
|
||||
this->conf();
|
||||
}
|
||||
~RinexPrinterTest() = default;
|
||||
void conf();
|
||||
rtk_t rtk;
|
||||
};
|
||||
|
||||
void RinexPrinterTest::conf()
|
||||
{
|
||||
snrmask_t snrmask = {{}, {{}, {}}};
|
||||
int positioning_mode = 0; // Single
|
||||
int number_of_frequencies = 1;
|
||||
double elevation_mask = 5;
|
||||
int navigation_system = 1; // GPS
|
||||
int integer_ambiguity_resolution_gps = 0;
|
||||
int integer_ambiguity_resolution_glo = 0;
|
||||
int integer_ambiguity_resolution_bds = 0;
|
||||
int outage_reset_ambiguity = 5;
|
||||
int min_lock_to_fix_ambiguity = 0;
|
||||
int iono_model = 0;
|
||||
int trop_model = 0;
|
||||
int dynamics_model = 0;
|
||||
int earth_tide = 0;
|
||||
int number_filter_iter = 1;
|
||||
double code_phase_error_ratio_l1 = 100.0;
|
||||
double code_phase_error_ratio_l2 = 100.0;
|
||||
double code_phase_error_ratio_l5 = 100.0;
|
||||
double carrier_phase_error_factor_a = 0.003;
|
||||
double carrier_phase_error_factor_b = 0.003;
|
||||
double bias_0 = 30.0;
|
||||
double iono_0 = 0.03;
|
||||
double trop_0 = 0.3;
|
||||
double sigma_bias = 1e-4;
|
||||
double sigma_iono = 1e-3;
|
||||
double sigma_trop = 1e-4;
|
||||
double sigma_acch = 1e-1;
|
||||
double sigma_accv = 1e-2;
|
||||
double sigma_pos = 0.0;
|
||||
double min_ratio_to_fix_ambiguity = 3.0;
|
||||
double min_elevation_to_fix_ambiguity = 0.0;
|
||||
double slip_threshold = 0.05;
|
||||
double threshold_reject_innovation = 30.0;
|
||||
double threshold_reject_gdop = 30.0;
|
||||
int sat_PCV = 0;
|
||||
int rec_PCV = 0;
|
||||
int phwindup = 0;
|
||||
int reject_GPS_IIA = 0;
|
||||
int raim_fde = 0;
|
||||
|
||||
prcopt_t rtklib_configuration_options = {
|
||||
positioning_mode, /* positioning mode (PMODE_XXX) see src/algorithms/libs/rtklib/rtklib.h */
|
||||
0, /* solution type (0:forward,1:backward,2:combined) */
|
||||
number_of_frequencies, /* number of frequencies (1:L1, 2:L1+L2, 3:L1+L2+L5)*/
|
||||
navigation_system, /* navigation system */
|
||||
elevation_mask * D2R, /* elevation mask angle (degrees) */
|
||||
snrmask, /* snrmask_t snrmask SNR mask */
|
||||
0, /* satellite ephemeris/clock (EPHOPT_XXX) */
|
||||
integer_ambiguity_resolution_gps, /* AR mode (0:off,1:continuous,2:instantaneous,3:fix and hold,4:ppp-ar) */
|
||||
integer_ambiguity_resolution_glo, /* GLONASS AR mode (0:off,1:on,2:auto cal,3:ext cal) */
|
||||
integer_ambiguity_resolution_bds, /* BeiDou AR mode (0:off,1:on) */
|
||||
outage_reset_ambiguity, /* obs outage count to reset bias */
|
||||
min_lock_to_fix_ambiguity, /* min lock count to fix ambiguity */
|
||||
10, /* min fix count to hold ambiguity */
|
||||
1, /* max iteration to resolve ambiguity */
|
||||
iono_model, /* ionosphere option (IONOOPT_XXX) */
|
||||
trop_model, /* troposphere option (TROPOPT_XXX) */
|
||||
dynamics_model, /* dynamics model (0:none, 1:velocity, 2:accel) */
|
||||
earth_tide, /* earth tide correction (0:off,1:solid,2:solid+otl+pole) */
|
||||
number_filter_iter, /* number of filter iteration */
|
||||
0, /* code smoothing window size (0:none) */
|
||||
0, /* interpolate reference obs (for post mission) */
|
||||
0, /* sbssat_t sbssat SBAS correction options */
|
||||
0, /* sbsion_t sbsion[MAXBAND+1] SBAS satellite selection (0:all) */
|
||||
0, /* rover position for fixed mode */
|
||||
0, /* base position for relative mode */
|
||||
/* 0:pos in prcopt, 1:average of single pos, */
|
||||
/* 2:read from file, 3:rinex header, 4:rtcm pos */
|
||||
{code_phase_error_ratio_l1, code_phase_error_ratio_l2, code_phase_error_ratio_l5}, /* eratio[NFREQ] code/phase error ratio */
|
||||
{100.0, carrier_phase_error_factor_a, carrier_phase_error_factor_b, 0.0, 1.0}, /* err[5]: measurement error factor [0]:reserved, [1-3]:error factor a/b/c of phase (m) , [4]:doppler frequency (hz) */
|
||||
{bias_0, iono_0, trop_0}, /* std[3]: initial-state std [0]bias,[1]iono [2]trop*/
|
||||
{sigma_bias, sigma_iono, sigma_trop, sigma_acch, sigma_accv, sigma_pos}, /* prn[6] process-noise std */
|
||||
5e-12, /* sclkstab: satellite clock stability (sec/sec) */
|
||||
{min_ratio_to_fix_ambiguity, 0.9999, 0.25, 0.1, 0.05, 0.0, 0.0, 0.0}, /* thresar[8]: AR validation threshold */
|
||||
min_elevation_to_fix_ambiguity, /* elevation mask of AR for rising satellite (deg) */
|
||||
0.0, /* elevation mask to hold ambiguity (deg) */
|
||||
slip_threshold, /* slip threshold of geometry-free phase (m) */
|
||||
30.0, /* max difference of time (sec) */
|
||||
threshold_reject_innovation, /* reject threshold of innovation (m) */
|
||||
threshold_reject_gdop, /* reject threshold of gdop */
|
||||
{}, /* double baseline[2] baseline length constraint {const,sigma} (m) */
|
||||
{}, /* double ru[3] rover position for fixed mode {x,y,z} (ecef) (m) */
|
||||
{}, /* double rb[3] base position for relative mode {x,y,z} (ecef) (m) */
|
||||
{"", ""}, /* char anttype[2][MAXANT] antenna types {rover,base} */
|
||||
{{}, {}}, /* double antdel[2][3] antenna delta {{rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */
|
||||
{}, /* pcv_t pcvr[2] receiver antenna parameters {rov,base} */
|
||||
{}, /* unsigned char exsats[MAXSAT] excluded satellites (1:excluded, 2:included) */
|
||||
0, /* max averaging epoches */
|
||||
0, /* initialize by restart */
|
||||
1, /* output single by dgps/float/fix/ppp outage */
|
||||
{"", ""}, /* char rnxopt[2][256] rinex options {rover,base} */
|
||||
{sat_PCV, rec_PCV, phwindup, reject_GPS_IIA, raim_fde}, /* posopt[6] positioning options [0]: satellite and receiver antenna PCV model; [1]: interpolate antenna parameters; [2]: apply phase wind-up correction for PPP modes; [3]: exclude measurements of GPS Block IIA satellites satellite [4]: RAIM FDE (fault detection and exclusion) [5]: handle day-boundary clock jump */
|
||||
0, /* solution sync mode (0:off,1:on) */
|
||||
{{}, {}}, /* odisp[2][6*11] ocean tide loading parameters {rov,base} */
|
||||
{{}, {{}, {}}, {{}, {}}, {}, {}}, /* exterr_t exterr extended receiver error model */
|
||||
0, /* disable L2-AR */
|
||||
{} /* char pppopt[256] ppp option "-GAP_RESION=" default gap to reset iono parameters (ep) */
|
||||
};
|
||||
|
||||
rtkinit(&rtk, &rtklib_configuration_options);
|
||||
}
|
||||
|
||||
|
||||
TEST_F(RinexPrinterTest, GalileoObsHeader)
|
||||
{
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
auto eph = Galileo_Ephemeris();
|
||||
eph.i_satellite_PRN = 1;
|
||||
pvt_solution->galileo_ephemeris_map[1] = eph;
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
Gnss_Synchro gs{};
|
||||
gs.PRN = 1;
|
||||
gnss_observables_map[1] = gs;
|
||||
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
4,
|
||||
true);
|
||||
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Galileo_Ephemeris eph = Galileo_Ephemeris();
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp1;
|
||||
rp1 = std::make_shared<Rinex_Printer>();
|
||||
rp1->rinex_obs_header(rp1->obsFile, eph, 0.0);
|
||||
rp1->obsFile.seekp(0);
|
||||
|
||||
while (!rp1->obsFile.eof())
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp1->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("SYS / # / OBS TYPES", 59) != std::string::npos)
|
||||
@ -47,21 +205,29 @@ TEST(RinexPrinterTest, GalileoObsHeader)
|
||||
}
|
||||
std::string expected_str("E 4 C1B L1B D1B S1B SYS / # / OBS TYPES ");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
if (remove(rp1->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
line_aux.clear();
|
||||
fstr.close();
|
||||
fs::remove(obsfile);
|
||||
fs::remove(navfile);
|
||||
|
||||
auto rp2 = std::make_shared<Rinex_Printer>();
|
||||
|
||||
rp2->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
15,
|
||||
true);
|
||||
obsfile = rp2->get_obsfilename();
|
||||
navfile = rp2->get_navfilename()[0];
|
||||
|
||||
rp2 = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr2(obsfile.c_str(), std::fstream::in);
|
||||
fstr2.seekg(0);
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp2;
|
||||
rp2 = std::make_shared<Rinex_Printer>();
|
||||
std::string bands("1B 5X 7X");
|
||||
rp2->rinex_obs_header(rp2->obsFile, eph, 0.0, bands);
|
||||
rp2->obsFile.seekp(0);
|
||||
no_more_finds = false;
|
||||
while (!rp2->obsFile.eof())
|
||||
while (!fstr2.eof())
|
||||
{
|
||||
std::getline(rp2->obsFile, line_str);
|
||||
std::getline(fstr2, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("SYS / # / OBS TYPES", 59) != std::string::npos)
|
||||
@ -71,32 +237,49 @@ TEST(RinexPrinterTest, GalileoObsHeader)
|
||||
}
|
||||
}
|
||||
}
|
||||
std::string expected_str2("E 12 C1B L1B D1B S1B C5X L5X D5X S5X C7X L7X D7X S7X SYS / # / OBS TYPES ");
|
||||
std::string expected_str2("E 8 C1B L1B D1B S1B C7X L7X D7X S7X SYS / # / OBS TYPES ");
|
||||
EXPECT_EQ(0, expected_str2.compare(line_aux));
|
||||
|
||||
if (remove(rp2->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr2.close();
|
||||
fs::remove(obsfile);
|
||||
fs::remove(navfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, GlonassObsHeader)
|
||||
TEST_F(RinexPrinterTest, GlonassObsHeader)
|
||||
{
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
auto eph = Glonass_Gnav_Ephemeris();
|
||||
eph.i_satellite_PRN = 1;
|
||||
pvt_solution->glonass_gnav_ephemeris_map[1] = eph;
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
Gnss_Synchro gs{};
|
||||
gs.PRN = 1;
|
||||
gnss_observables_map[1] = gs;
|
||||
|
||||
auto rp = std::make_shared<Rinex_Printer>(3);
|
||||
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
23,
|
||||
true);
|
||||
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Glonass_Gnav_Ephemeris eph = Glonass_Gnav_Ephemeris();
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp1;
|
||||
rp1 = std::make_shared<Rinex_Printer>(3);
|
||||
const std::string bands = "1G";
|
||||
rp1->rinex_obs_header(rp1->obsFile, eph, 0.0, bands);
|
||||
rp1->obsFile.seekp(0);
|
||||
|
||||
while (!rp1->obsFile.eof())
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp1->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("SYS / # / OBS TYPES", 59) != std::string::npos)
|
||||
@ -108,32 +291,54 @@ TEST(RinexPrinterTest, GlonassObsHeader)
|
||||
}
|
||||
std::string expected_str("R 4 C1C L1C D1C S1C SYS / # / OBS TYPES ");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
if (remove(rp1->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
line_aux.clear();
|
||||
fstr.close();
|
||||
fs::remove(obsfile);
|
||||
fs::remove(navfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, MixedObsHeader)
|
||||
TEST_F(RinexPrinterTest, MixedObsHeader)
|
||||
{
|
||||
std::string line_aux;
|
||||
std::string line_aux2;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Galileo_Ephemeris eph_gal = Galileo_Ephemeris();
|
||||
const Gps_Ephemeris eph_gps = Gps_Ephemeris();
|
||||
auto eph_gal = Galileo_Ephemeris();
|
||||
auto eph_gps = Gps_Ephemeris();
|
||||
eph_gal.i_satellite_PRN = 1;
|
||||
eph_gps.i_satellite_PRN = 1;
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
pvt_solution->galileo_ephemeris_map[1] = eph_gal;
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp1;
|
||||
rp1 = std::make_shared<Rinex_Printer>();
|
||||
rp1->rinex_obs_header(rp1->obsFile, eph_gps, eph_gal, 0.0, "1B 5X");
|
||||
rp1->obsFile.seekp(0);
|
||||
pvt_solution->gps_ephemeris_map[1] = eph_gps;
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
Gnss_Synchro gs{};
|
||||
gs.PRN = 1;
|
||||
gnss_observables_map[1] = gs;
|
||||
gnss_observables_map[2] = gs;
|
||||
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
33,
|
||||
true);
|
||||
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
int systems_found = 0;
|
||||
|
||||
while (!rp1->obsFile.eof())
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp1->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("SYS / # / OBS TYPES", 59) != std::string::npos)
|
||||
@ -156,31 +361,54 @@ TEST(RinexPrinterTest, MixedObsHeader)
|
||||
std::string expected_str2("E 8 C1B L1B D1B S1B C5X L5X D5X S5X SYS / # / OBS TYPES ");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
EXPECT_EQ(0, expected_str2.compare(line_aux2));
|
||||
if (remove(rp1->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr.close();
|
||||
fs::remove(obsfile);
|
||||
fs::remove(navfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, MixedObsHeaderGpsGlo)
|
||||
TEST_F(RinexPrinterTest, MixedObsHeaderGpsGlo)
|
||||
{
|
||||
std::string line_aux;
|
||||
std::string line_aux2;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Glonass_Gnav_Ephemeris eph_glo = Glonass_Gnav_Ephemeris();
|
||||
const Gps_Ephemeris eph_gps = Gps_Ephemeris();
|
||||
auto eph_glo = Glonass_Gnav_Ephemeris();
|
||||
auto eph_gps = Gps_Ephemeris();
|
||||
eph_glo.i_satellite_PRN = 1;
|
||||
eph_gps.i_satellite_PRN = 1;
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
pvt_solution->glonass_gnav_ephemeris_map[1] = eph_glo;
|
||||
|
||||
pvt_solution->gps_ephemeris_map[1] = eph_gps;
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
Gnss_Synchro gs{};
|
||||
gs.PRN = 1;
|
||||
gnss_observables_map[1] = gs;
|
||||
gnss_observables_map[2] = gs;
|
||||
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
26,
|
||||
true);
|
||||
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp1;
|
||||
rp1 = std::make_shared<Rinex_Printer>();
|
||||
rp1->rinex_obs_header(rp1->obsFile, eph_gps, eph_glo, 0.0, "1G");
|
||||
rp1->obsFile.seekp(0);
|
||||
int systems_found = 0;
|
||||
|
||||
while (!rp1->obsFile.eof())
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp1->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("SYS / # / OBS TYPES", 59) != std::string::npos)
|
||||
@ -203,25 +431,22 @@ TEST(RinexPrinterTest, MixedObsHeaderGpsGlo)
|
||||
std::string expected_str2("R 4 C1C L1C D1C S1C SYS / # / OBS TYPES ");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
EXPECT_EQ(0, expected_str2.compare(line_aux2));
|
||||
if (remove(rp1->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr.close();
|
||||
fs::remove(obsfile);
|
||||
fs::remove(navfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, GalileoObsLog)
|
||||
TEST_F(RinexPrinterTest, GalileoObsLog)
|
||||
{
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Galileo_Ephemeris eph = Galileo_Ephemeris();
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp;
|
||||
rp = std::make_shared<Rinex_Printer>();
|
||||
rp->rinex_obs_header(rp->obsFile, eph, 0.0);
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_pseudoranges_map;
|
||||
auto eph = Galileo_Ephemeris();
|
||||
eph.i_satellite_PRN = 1;
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
pvt_solution->galileo_ephemeris_map[1] = eph;
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
|
||||
Gnss_Synchro gs1 = Gnss_Synchro();
|
||||
Gnss_Synchro gs2 = Gnss_Synchro();
|
||||
@ -250,17 +475,30 @@ TEST(RinexPrinterTest, GalileoObsLog)
|
||||
gs4.Carrier_Doppler_hz = 1534;
|
||||
gs4.CN0_dB_hz = 42;
|
||||
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
|
||||
rp->log_rinex_obs(rp->obsFile, eph, 0.0, gnss_pseudoranges_map);
|
||||
rp->obsFile.seekp(0);
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
4,
|
||||
true);
|
||||
|
||||
while (!rp->obsFile.eof())
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("E22", 0) != std::string::npos)
|
||||
@ -273,26 +511,22 @@ TEST(RinexPrinterTest, GalileoObsLog)
|
||||
|
||||
std::string expected_str("E22 22000000.000 7 3.724 7 1534.000 7 42.000 ");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
|
||||
if (remove(rp->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr.close();
|
||||
fs::remove(obsfile);
|
||||
fs::remove(navfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, GlonassObsLog)
|
||||
TEST_F(RinexPrinterTest, GlonassObsLog)
|
||||
{
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Glonass_Gnav_Ephemeris eph = Glonass_Gnav_Ephemeris();
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp;
|
||||
rp = std::make_shared<Rinex_Printer>();
|
||||
rp->rinex_obs_header(rp->obsFile, eph, 0.0);
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_pseudoranges_map;
|
||||
auto eph = Glonass_Gnav_Ephemeris();
|
||||
eph.i_satellite_PRN = 22;
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
pvt_solution->glonass_gnav_ephemeris_map[1] = eph;
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
|
||||
Gnss_Synchro gs1 = Gnss_Synchro();
|
||||
Gnss_Synchro gs2 = Gnss_Synchro();
|
||||
@ -321,17 +555,30 @@ TEST(RinexPrinterTest, GlonassObsLog)
|
||||
gs4.Carrier_Doppler_hz = 1534;
|
||||
gs4.CN0_dB_hz = 42;
|
||||
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
|
||||
rp->log_rinex_obs(rp->obsFile, eph, 0.0, gnss_pseudoranges_map);
|
||||
rp->obsFile.seekp(0);
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
23,
|
||||
true);
|
||||
|
||||
while (!rp->obsFile.eof())
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("R22", 0) != std::string::npos)
|
||||
@ -344,27 +591,25 @@ TEST(RinexPrinterTest, GlonassObsLog)
|
||||
|
||||
std::string expected_str("R22 22000000.000 7 3.724 7 1534.000 7 42.000 ");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
|
||||
if (remove(rp->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr.close();
|
||||
fs::remove(navfile);
|
||||
fs::remove(obsfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, GpsObsLogDualBand)
|
||||
TEST_F(RinexPrinterTest, GpsObsLogDualBand)
|
||||
{
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Gps_Ephemeris eph_gps = Gps_Ephemeris();
|
||||
const Gps_CNAV_Ephemeris eph_cnav = Gps_CNAV_Ephemeris();
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp;
|
||||
rp = std::make_shared<Rinex_Printer>();
|
||||
rp->rinex_obs_header(rp->obsFile, eph_gps, eph_cnav, 0.0);
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_pseudoranges_map;
|
||||
auto eph = Gps_Ephemeris();
|
||||
auto eph_cnav = Gps_CNAV_Ephemeris();
|
||||
eph.i_satellite_PRN = 1;
|
||||
eph_cnav.i_satellite_PRN = 1;
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
pvt_solution->gps_ephemeris_map[1] = eph;
|
||||
pvt_solution->gps_cnav_ephemeris_map[1] = eph_cnav;
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
|
||||
Gnss_Synchro gs1 = Gnss_Synchro();
|
||||
Gnss_Synchro gs2 = Gnss_Synchro();
|
||||
@ -405,17 +650,30 @@ TEST(RinexPrinterTest, GpsObsLogDualBand)
|
||||
gs3.Carrier_Doppler_hz = -1534;
|
||||
gs3.CN0_dB_hz = 47;
|
||||
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
|
||||
rp->log_rinex_obs(rp->obsFile, eph_gps, eph_cnav, 0.0, gnss_pseudoranges_map);
|
||||
rp->obsFile.seekp(0);
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
7,
|
||||
true);
|
||||
|
||||
while (!rp->obsFile.eof())
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("G08", 0) != std::string::npos)
|
||||
@ -428,28 +686,20 @@ TEST(RinexPrinterTest, GpsObsLogDualBand)
|
||||
|
||||
std::string expected_str("G08 22000002.100 6 7.226 6 321.000 6 39.000 22000000.000 7 3.724 7 1534.000 7 42.000");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
|
||||
if (remove(rp->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr.close();
|
||||
fs::remove(navfile);
|
||||
fs::remove(obsfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, GalileoObsLogDualBand)
|
||||
TEST_F(RinexPrinterTest, GalileoObsLogDualBand)
|
||||
{
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Galileo_Ephemeris eph = Galileo_Ephemeris();
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp;
|
||||
rp = std::make_shared<Rinex_Printer>();
|
||||
std::string bands("1B 5X");
|
||||
rp->rinex_obs_header(rp->obsFile, eph, 0.0, bands);
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_pseudoranges_map;
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
auto eph = Galileo_Ephemeris();
|
||||
eph.i_satellite_PRN = 1;
|
||||
pvt_solution->galileo_ephemeris_map[1] = eph;
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
Gnss_Synchro gs1 = Gnss_Synchro();
|
||||
Gnss_Synchro gs2 = Gnss_Synchro();
|
||||
Gnss_Synchro gs3 = Gnss_Synchro();
|
||||
@ -489,17 +739,34 @@ TEST(RinexPrinterTest, GalileoObsLogDualBand)
|
||||
gs4.Carrier_Doppler_hz = 1534;
|
||||
gs4.CN0_dB_hz = 42;
|
||||
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
|
||||
rp->log_rinex_obs(rp->obsFile, eph, 0.0, gnss_pseudoranges_map, bands);
|
||||
rp->obsFile.seekp(0);
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
|
||||
while (!rp->obsFile.eof())
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
14,
|
||||
true);
|
||||
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("E08", 0) != std::string::npos)
|
||||
@ -512,27 +779,25 @@ TEST(RinexPrinterTest, GalileoObsLogDualBand)
|
||||
|
||||
std::string expected_str("E08 22000002.100 6 7.226 6 321.000 6 39.000 22000000.000 7 3.724 7 1534.000 7 42.000");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
|
||||
if (remove(rp->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr.close();
|
||||
fs::remove(navfile);
|
||||
fs::remove(obsfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, MixedObsLog)
|
||||
TEST_F(RinexPrinterTest, MixedObsLog)
|
||||
{
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Galileo_Ephemeris eph_gal = Galileo_Ephemeris();
|
||||
const Gps_Ephemeris eph_gps = Gps_Ephemeris();
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp;
|
||||
rp = std::make_shared<Rinex_Printer>();
|
||||
rp->rinex_obs_header(rp->obsFile, eph_gps, eph_gal, 0.0, "1B 5X");
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_pseudoranges_map;
|
||||
auto eph_gps = Gps_Ephemeris();
|
||||
auto eph_gal = Galileo_Ephemeris();
|
||||
eph_gps.i_satellite_PRN = 1;
|
||||
eph_gal.i_satellite_PRN = 1;
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
pvt_solution->gps_ephemeris_map[1] = eph_gps;
|
||||
pvt_solution->galileo_ephemeris_map[1] = eph_gal;
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
|
||||
Gnss_Synchro gs1 = Gnss_Synchro();
|
||||
Gnss_Synchro gs2 = Gnss_Synchro();
|
||||
@ -598,22 +863,35 @@ TEST(RinexPrinterTest, MixedObsLog)
|
||||
gs8.Carrier_Doppler_hz = -20;
|
||||
gs8.CN0_dB_hz = 42;
|
||||
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(5, gs5));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(6, gs6));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(7, gs7));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(8, gs8));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(5, gs5));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(6, gs6));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(7, gs7));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(8, gs8));
|
||||
|
||||
rp->log_rinex_obs(rp->obsFile, eph_gps, eph_gal, 0.0, gnss_pseudoranges_map);
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
|
||||
rp->obsFile.seekp(0);
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
9,
|
||||
true);
|
||||
|
||||
while (!rp->obsFile.eof())
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("E16", 0) != std::string::npos)
|
||||
@ -625,27 +903,25 @@ TEST(RinexPrinterTest, MixedObsLog)
|
||||
}
|
||||
std::string expected_str("E16 22000000.000 7 0.127 7 -20.000 7 42.000 22000000.000 6 8.292 6 1534.000 6 41.000");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
|
||||
if (remove(rp->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr.close();
|
||||
fs::remove(navfile);
|
||||
fs::remove(obsfile);
|
||||
}
|
||||
|
||||
|
||||
TEST(RinexPrinterTest, MixedObsLogGpsGlo)
|
||||
TEST_F(RinexPrinterTest, MixedObsLogGpsGlo)
|
||||
{
|
||||
std::string line_aux;
|
||||
std::string line_str;
|
||||
bool no_more_finds = false;
|
||||
const Glonass_Gnav_Ephemeris eph_glo = Glonass_Gnav_Ephemeris();
|
||||
const Gps_Ephemeris eph_gps = Gps_Ephemeris();
|
||||
|
||||
std::shared_ptr<Rinex_Printer> rp;
|
||||
rp = std::make_shared<Rinex_Printer>();
|
||||
rp->rinex_obs_header(rp->obsFile, eph_gps, eph_glo, 0.0, "1G");
|
||||
|
||||
std::map<int, Gnss_Synchro> gnss_pseudoranges_map;
|
||||
auto eph_gps = Gps_Ephemeris();
|
||||
auto eph_glo = Glonass_Gnav_Ephemeris();
|
||||
eph_gps.i_satellite_PRN = 1;
|
||||
eph_glo.i_satellite_PRN = 1;
|
||||
auto pvt_solution = std::make_shared<Rtklib_Solver>(rtk, 12, "filename", false, false);
|
||||
pvt_solution->gps_ephemeris_map[1] = eph_gps;
|
||||
pvt_solution->glonass_gnav_ephemeris_map[1] = eph_glo;
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
|
||||
Gnss_Synchro gs1 = Gnss_Synchro();
|
||||
Gnss_Synchro gs2 = Gnss_Synchro();
|
||||
@ -709,22 +985,35 @@ TEST(RinexPrinterTest, MixedObsLogGpsGlo)
|
||||
gs8.Carrier_Doppler_hz = -20;
|
||||
gs8.CN0_dB_hz = 42;
|
||||
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(5, gs5));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(6, gs6));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(7, gs7));
|
||||
gnss_pseudoranges_map.insert(std::pair<int, Gnss_Synchro>(8, gs8));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(1, gs1));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(2, gs2));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(3, gs3));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(4, gs4));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(5, gs5));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(6, gs6));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(7, gs7));
|
||||
gnss_observables_map.insert(std::pair<int, Gnss_Synchro>(8, gs8));
|
||||
|
||||
rp->log_rinex_obs(rp->obsFile, eph_gps, eph_glo, 0.0, gnss_pseudoranges_map);
|
||||
auto rp = std::make_shared<Rinex_Printer>();
|
||||
|
||||
rp->obsFile.seekp(0);
|
||||
rp->print_rinex_annotation(pvt_solution.get(),
|
||||
gnss_observables_map,
|
||||
0.0,
|
||||
26,
|
||||
true);
|
||||
|
||||
while (!rp->obsFile.eof())
|
||||
std::string obsfile = rp->get_obsfilename();
|
||||
std::string navfile = rp->get_navfilename()[0];
|
||||
|
||||
rp = nullptr; // close the RINEX files so we can inspect them
|
||||
|
||||
std::fstream fstr(obsfile.c_str(), std::fstream::in);
|
||||
|
||||
fstr.seekg(0);
|
||||
|
||||
while (!fstr.eof())
|
||||
{
|
||||
std::getline(rp->obsFile, line_str);
|
||||
std::getline(fstr, line_str);
|
||||
if (!no_more_finds)
|
||||
{
|
||||
if (line_str.find("R16", 0) != std::string::npos)
|
||||
@ -737,9 +1026,7 @@ TEST(RinexPrinterTest, MixedObsLogGpsGlo)
|
||||
|
||||
std::string expected_str("R16 22000000.000 6 8.292 6 1534.000 6 41.000 22000000.000 7 0.127 7 -20.000 7 42.000");
|
||||
EXPECT_EQ(0, expected_str.compare(line_aux));
|
||||
|
||||
if (remove(rp->obsfilename.c_str()) != 0)
|
||||
{
|
||||
LOG(INFO) << "Error deleting temporary file";
|
||||
}
|
||||
fstr.close();
|
||||
fs::remove(navfile);
|
||||
fs::remove(obsfile);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user