mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 12:40:35 +00:00
Read GPS almanac file if present
This commit is contained in:
parent
20302ed28f
commit
bc058d33da
@ -538,6 +538,28 @@ rtklib_pvt_cc::~rtklib_pvt_cc()
|
|||||||
LOG(INFO) << "Failed to save Galileo UTC model parameters, not valid data";
|
LOG(INFO) << "Failed to save Galileo UTC model parameters, not valid data";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// save GPS almanac to XML file
|
||||||
|
file_name = "gps_almanac.xml";
|
||||||
|
if (d_ls_pvt->gps_almanac_map.empty() == false)
|
||||||
|
{
|
||||||
|
std::ofstream ofs;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out);
|
||||||
|
boost::archive::xml_oarchive xml(ofs);
|
||||||
|
xml << boost::serialization::make_nvp("GNSS-SDR_gps_almanac_map", d_ls_pvt->gps_almanac_map);
|
||||||
|
LOG(INFO) << "Saved GPS almanac map data";
|
||||||
|
}
|
||||||
|
catch (const std::exception& e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << e.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(INFO) << "Failed to save GPS almanac, map is empty";
|
||||||
|
}
|
||||||
|
|
||||||
// Save Galileo almanac
|
// Save Galileo almanac
|
||||||
file_name = "gal_almanac.xml";
|
file_name = "gal_almanac.xml";
|
||||||
if (d_ls_pvt->galileo_almanac_map.empty() == false)
|
if (d_ls_pvt->galileo_almanac_map.empty() == false)
|
||||||
|
@ -104,6 +104,7 @@ public:
|
|||||||
|
|
||||||
Gps_Utc_Model gps_utc_model;
|
Gps_Utc_Model gps_utc_model;
|
||||||
Gps_Iono gps_iono;
|
Gps_Iono gps_iono;
|
||||||
|
std::map<int, Gps_Almanac> gps_almanac_map;
|
||||||
|
|
||||||
Gps_CNAV_Iono gps_cnav_iono;
|
Gps_CNAV_Iono gps_cnav_iono;
|
||||||
Gps_CNAV_Utc_Model gps_cnav_utc_model;
|
Gps_CNAV_Utc_Model gps_cnav_utc_model;
|
||||||
|
@ -786,6 +786,53 @@ bool gnss_sdr_supl_client::save_gal_iono_xml(const std::string file_name, Galile
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool gnss_sdr_supl_client::load_gps_almanac_xml(const std::string file_name)
|
||||||
|
{
|
||||||
|
std::ifstream ifs;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in);
|
||||||
|
boost::archive::xml_iarchive xml(ifs);
|
||||||
|
gps_almanac_map.clear();
|
||||||
|
xml >> boost::serialization::make_nvp("GNSS-SDR_gps_almanac_map", this->gps_almanac_map);
|
||||||
|
LOG(INFO) << "Loaded GPS almanac map data with " << this->gps_almanac_map.size() << " satellites";
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << e.what() << "File: " << file_name;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool gnss_sdr_supl_client::save_gps_almanac_xml(const std::string file_name, std::map<int, Gps_Almanac> gps_almanac_map)
|
||||||
|
{
|
||||||
|
if (gps_almanac_map.empty() == false)
|
||||||
|
{
|
||||||
|
std::ofstream ofs;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out);
|
||||||
|
boost::archive::xml_oarchive xml(ofs);
|
||||||
|
xml << boost::serialization::make_nvp("GNSS-SDR_gps_almanac_map", gps_almanac_map);
|
||||||
|
LOG(INFO) << "Saved GPS almanac data";
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << e.what();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Failed to save GPS almanac, map is empty";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool gnss_sdr_supl_client::load_gal_almanac_xml(const std::string file_name)
|
bool gnss_sdr_supl_client::load_gal_almanac_xml(const std::string file_name)
|
||||||
{
|
{
|
||||||
std::ifstream ifs;
|
std::ifstream ifs;
|
||||||
|
@ -207,6 +207,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool save_gal_almanac_xml(const std::string file_name, std::map<int, Galileo_Almanac> gal_almanac);
|
bool save_gal_almanac_xml(const std::string file_name, std::map<int, Galileo_Almanac> gal_almanac);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Read GPS almanac map from XML file
|
||||||
|
*/
|
||||||
|
bool load_gps_almanac_xml(const std::string file_name);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Save GPS almanac map to XML file
|
||||||
|
*/
|
||||||
|
bool save_gps_almanac_xml(const std::string file_name, std::map<int, Gps_Almanac> gps_almanac_map);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Read iono from XML file
|
* \brief Read iono from XML file
|
||||||
*/
|
*/
|
||||||
|
@ -235,6 +235,7 @@ bool ControlThread::read_assistance_from_XML()
|
|||||||
std::string eph_glo_xml_filename = configuration_->property("GNSS-SDR.SUPL_glo_ephemeris_xml", eph_glo_gnav_default_xml_filename);
|
std::string eph_glo_xml_filename = configuration_->property("GNSS-SDR.SUPL_glo_ephemeris_xml", eph_glo_gnav_default_xml_filename);
|
||||||
std::string glo_utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_glo_utc_model_xml", glo_utc_default_xml_filename);
|
std::string glo_utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_glo_utc_model_xml", glo_utc_default_xml_filename);
|
||||||
std::string gal_almanac_xml_filename = configuration_->property("GNSS-SDR.SUPL_gal_almanacl_xml", gal_almanac_default_xml_filename);
|
std::string gal_almanac_xml_filename = configuration_->property("GNSS-SDR.SUPL_gal_almanacl_xml", gal_almanac_default_xml_filename);
|
||||||
|
std::string gps_almanac_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_almanacl_xml", gps_almanac_default_xml_filename);
|
||||||
|
|
||||||
if (configuration_->property("GNSS-SDR.AGNSS_XML_enabled", false) == true)
|
if (configuration_->property("GNSS-SDR.AGNSS_XML_enabled", false) == true)
|
||||||
{
|
{
|
||||||
@ -286,6 +287,20 @@ bool ControlThread::read_assistance_from_XML()
|
|||||||
std::cout << "From XML file: Read GPS ionosphere model parameters." << std::endl;
|
std::cout << "From XML file: Read GPS ionosphere model parameters." << std::endl;
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (supl_client_ephemeris_.load_gps_almanac_xml(gps_almanac_xml_filename) == true)
|
||||||
|
{
|
||||||
|
std::map<int, Gps_Almanac>::const_iterator gps_alm_iter;
|
||||||
|
for (gps_alm_iter = supl_client_ephemeris_.gps_almanac_map.cbegin();
|
||||||
|
gps_alm_iter != supl_client_ephemeris_.gps_almanac_map.cend();
|
||||||
|
gps_alm_iter++)
|
||||||
|
{
|
||||||
|
std::cout << "From XML file: Read GPS almanac for satellite " << Gnss_Satellite("GPS", gps_alm_iter->second.i_satellite_PRN) << std::endl;
|
||||||
|
std::shared_ptr<Gps_Almanac> tmp_obj = std::make_shared<Gps_Almanac>(gps_alm_iter->second);
|
||||||
|
flowgraph_->send_telemetry_msg(pmt::make_any(tmp_obj));
|
||||||
|
}
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((configuration_->property("Channels_1B.count", 0) > 0) or (configuration_->property("Channels_5X.count", 0) > 0))
|
if ((configuration_->property("Channels_1B.count", 0) > 0) or (configuration_->property("Channels_5X.count", 0) > 0))
|
||||||
|
@ -181,6 +181,7 @@ private:
|
|||||||
const std::string eph_glo_gnav_default_xml_filename = "./glo_gnav_ephemeris.xml";
|
const std::string eph_glo_gnav_default_xml_filename = "./glo_gnav_ephemeris.xml";
|
||||||
const std::string glo_utc_default_xml_filename = "./glo_utc_model.xml";
|
const std::string glo_utc_default_xml_filename = "./glo_utc_model.xml";
|
||||||
const std::string gal_almanac_default_xml_filename = "./gal_almanac.xml";
|
const std::string gal_almanac_default_xml_filename = "./gal_almanac.xml";
|
||||||
|
const std::string gps_almanac_default_xml_filename = "./gps_almanac.xml";
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*GNSS_SDR_CONTROL_THREAD_H_*/
|
#endif /*GNSS_SDR_CONTROL_THREAD_H_*/
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#ifndef GNSS_SDR_GPS_ALMANAC_H_
|
#ifndef GNSS_SDR_GPS_ALMANAC_H_
|
||||||
#define GNSS_SDR_GPS_ALMANAC_H_
|
#define GNSS_SDR_GPS_ALMANAC_H_
|
||||||
|
|
||||||
|
#include <boost/serialization/nvp.hpp>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -59,6 +60,27 @@ public:
|
|||||||
* Default constructor
|
* Default constructor
|
||||||
*/
|
*/
|
||||||
Gps_Almanac();
|
Gps_Almanac();
|
||||||
|
|
||||||
|
template <class Archive>
|
||||||
|
|
||||||
|
void serialize(Archive& ar, const unsigned int version)
|
||||||
|
{
|
||||||
|
if (version)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(i_satellite_PRN);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_Delta_i);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_Toa);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_M_0);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_e_eccentricity);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_sqrt_A);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_OMEGA0);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_OMEGA);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_OMEGA_DOT);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(i_SV_health);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_A_f0);
|
||||||
|
ar& BOOST_SERIALIZATION_NVP(d_A_f1);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user