mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-13 02:40:32 +00:00
Re-enabling the GPS L1 warm start ephemeris assistance stored in XML file
This commit is contained in:
parent
eb8539a725
commit
3d2e72c790
@ -33,6 +33,9 @@
|
|||||||
|
|
||||||
#include "gps_l1_ca_pvt.h"
|
#include "gps_l1_ca_pvt.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <boost/archive/xml_oarchive.hpp>
|
||||||
|
#include <boost/archive/xml_iarchive.hpp>
|
||||||
|
#include <boost/serialization/map.hpp>
|
||||||
#include "configuration_interface.h"
|
#include "configuration_interface.h"
|
||||||
|
|
||||||
using google::LogMessage;
|
using google::LogMessage;
|
||||||
@ -79,14 +82,115 @@ GpsL1CaPvt::GpsL1CaPvt(ConfigurationInterface* configuration,
|
|||||||
bool flag_rtcm_server;
|
bool flag_rtcm_server;
|
||||||
flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
|
flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
|
||||||
|
|
||||||
|
// getting names from the config file, if available
|
||||||
|
// default filename for assistance data
|
||||||
|
const std::string eph_default_xml_filename = "./gps_ephemeris.xml";
|
||||||
|
const std::string utc_default_xml_filename = "./gps_utc_model.xml";
|
||||||
|
const std::string iono_default_xml_filename = "./gps_iono.xml";
|
||||||
|
const std::string ref_time_default_xml_filename = "./gps_ref_time.xml";
|
||||||
|
const std::string ref_location_default_xml_filename = "./gps_ref_location.xml";
|
||||||
|
eph_xml_filename_= configuration->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename);
|
||||||
|
//std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename);
|
||||||
|
//std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename);
|
||||||
|
//std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename);
|
||||||
|
//std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename);
|
||||||
|
|
||||||
// make PVT object
|
// make PVT object
|
||||||
pvt_ = gps_l1_ca_make_pvt_cc(in_streams_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname, flag_rtcm_server, flag_rtcm_tty_port, rtcm_dump_devname );
|
pvt_ = gps_l1_ca_make_pvt_cc(in_streams_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname, flag_rtcm_server, flag_rtcm_tty_port, rtcm_dump_devname );
|
||||||
DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
|
DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GpsL1CaPvt::save_assistance_to_XML()
|
||||||
|
{
|
||||||
|
// return variable (true == succeeded)
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
|
LOG(INFO) << "SUPL: Try to save GPS ephemeris to XML file " << eph_xml_filename_;
|
||||||
|
|
||||||
|
std::map<int,Gps_Ephemeris> eph_map=pvt_->get_GPS_L1_ephemeris_map();
|
||||||
|
if (eph_map.size() > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
std::ofstream ofs(eph_xml_filename_.c_str(), std::ofstream::trunc | std::ofstream::out);
|
||||||
|
boost::archive::xml_oarchive xml(ofs);
|
||||||
|
xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map);
|
||||||
|
ofs.close();
|
||||||
|
LOG(INFO) << "Saved GPS L1 Ephemeris map data";
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
LOG(ERROR) << e.what();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Failed to save Ephemeris, map is empty";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Only try to save {utc, iono, ref time, ref location} if SUPL is enabled
|
||||||
|
// bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false);
|
||||||
|
// if (enable_gps_supl_assistance == true)
|
||||||
|
// {
|
||||||
|
// // try to save utc model xml file
|
||||||
|
// std::map<int, Gps_Utc_Model> utc_copy = global_gps_utc_model_map.get_map_copy();
|
||||||
|
// if (supl_client_acquisition_.save_utc_map_xml(utc_xml_filename, utc_copy) == true)
|
||||||
|
// {
|
||||||
|
// LOG(INFO) << "SUPL: Successfully saved UTC Model XML file";
|
||||||
|
// //ret = true;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// LOG(INFO) << "SUPL: Error while trying to save utc XML file";
|
||||||
|
// //ret = false;
|
||||||
|
// }
|
||||||
|
// // try to save iono model xml file
|
||||||
|
// std::map<int, Gps_Iono> iono_copy = global_gps_iono_map.get_map_copy();
|
||||||
|
// if (supl_client_acquisition_.save_iono_map_xml(iono_xml_filename, iono_copy) == true)
|
||||||
|
// {
|
||||||
|
// LOG(INFO) << "SUPL: Successfully saved IONO Model XML file";
|
||||||
|
// //ret = true;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// LOG(INFO) << "SUPL: Error while trying to save iono XML file";
|
||||||
|
// //ret = false;
|
||||||
|
// }
|
||||||
|
// // try to save ref time xml file
|
||||||
|
// std::map<int, Gps_Ref_Time> ref_time_copy = global_gps_ref_time_map.get_map_copy();
|
||||||
|
// if (supl_client_acquisition_.save_ref_time_map_xml(ref_time_xml_filename, ref_time_copy) == true)
|
||||||
|
// {
|
||||||
|
// LOG(INFO) << "SUPL: Successfully saved Ref Time XML file";
|
||||||
|
// //ret = true;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// LOG(INFO) << "SUPL: Error while trying to save ref time XML file";
|
||||||
|
// //ref = false;
|
||||||
|
// }
|
||||||
|
// // try to save ref location xml file
|
||||||
|
// std::map<int, Gps_Ref_Location> ref_location_copy = global_gps_ref_location_map.get_map_copy();
|
||||||
|
// if (supl_client_acquisition_.save_ref_location_map_xml(ref_location_xml_filename, ref_location_copy) == true)
|
||||||
|
// {
|
||||||
|
// LOG(INFO) << "SUPL: Successfully saved Ref Location XML file";
|
||||||
|
// //ref = true;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// LOG(INFO) << "SUPL: Error while trying to save ref location XML file";
|
||||||
|
// //ret = false;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
GpsL1CaPvt::~GpsL1CaPvt()
|
GpsL1CaPvt::~GpsL1CaPvt()
|
||||||
{}
|
{
|
||||||
|
save_assistance_to_XML();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void GpsL1CaPvt::connect(gr::top_block_sptr top_block)
|
void GpsL1CaPvt::connect(gr::top_block_sptr top_block)
|
||||||
|
@ -90,6 +90,9 @@ private:
|
|||||||
std::string role_;
|
std::string role_;
|
||||||
unsigned int in_streams_;
|
unsigned int in_streams_;
|
||||||
unsigned int out_streams_;
|
unsigned int out_streams_;
|
||||||
|
|
||||||
|
std::string eph_xml_filename_;
|
||||||
|
bool save_assistance_to_XML();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -33,6 +33,9 @@
|
|||||||
|
|
||||||
#include "hybrid_pvt.h"
|
#include "hybrid_pvt.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <boost/archive/xml_oarchive.hpp>
|
||||||
|
#include <boost/archive/xml_iarchive.hpp>
|
||||||
|
#include <boost/serialization/map.hpp>
|
||||||
#include "configuration_interface.h"
|
#include "configuration_interface.h"
|
||||||
|
|
||||||
|
|
||||||
@ -79,15 +82,62 @@ HybridPvt::HybridPvt(ConfigurationInterface* configuration,
|
|||||||
rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname);
|
rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname);
|
||||||
bool flag_rtcm_server;
|
bool flag_rtcm_server;
|
||||||
flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
|
flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
|
||||||
|
|
||||||
|
// getting names from the config file, if available
|
||||||
|
// default filename for assistance data
|
||||||
|
const std::string eph_default_xml_filename = "./gps_ephemeris.xml";
|
||||||
|
const std::string utc_default_xml_filename = "./gps_utc_model.xml";
|
||||||
|
const std::string iono_default_xml_filename = "./gps_iono.xml";
|
||||||
|
const std::string ref_time_default_xml_filename = "./gps_ref_time.xml";
|
||||||
|
const std::string ref_location_default_xml_filename = "./gps_ref_location.xml";
|
||||||
|
eph_xml_filename_= configuration->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename);
|
||||||
|
//std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename);
|
||||||
|
//std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename);
|
||||||
|
//std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename);
|
||||||
|
//std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename);
|
||||||
|
|
||||||
// make PVT object
|
// make PVT object
|
||||||
pvt_ = hybrid_make_pvt_cc(in_streams_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname, flag_rtcm_server, flag_rtcm_tty_port, rtcm_dump_devname);
|
pvt_ = hybrid_make_pvt_cc(in_streams_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname, flag_rtcm_server, flag_rtcm_tty_port, rtcm_dump_devname);
|
||||||
DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
|
DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HybridPvt::~HybridPvt()
|
bool HybridPvt::save_assistance_to_XML()
|
||||||
{}
|
{
|
||||||
|
// return variable (true == succeeded)
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
|
LOG(INFO) << "SUPL: Try to save GPS ephemeris to XML file " << eph_xml_filename_;
|
||||||
|
|
||||||
|
std::map<int,Gps_Ephemeris> eph_map=pvt_->get_GPS_L1_ephemeris_map();
|
||||||
|
if (eph_map.size() > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
std::ofstream ofs(eph_xml_filename_.c_str(), std::ofstream::trunc | std::ofstream::out);
|
||||||
|
boost::archive::xml_oarchive xml(ofs);
|
||||||
|
xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map);
|
||||||
|
ofs.close();
|
||||||
|
LOG(INFO) << "Saved GPS L1 Ephemeris map data";
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
LOG(ERROR) << e.what();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Failed to save Ephemeris, map is empty";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HybridPvt::~HybridPvt()
|
||||||
|
{
|
||||||
|
save_assistance_to_XML();
|
||||||
|
}
|
||||||
|
|
||||||
void HybridPvt::connect(gr::top_block_sptr top_block)
|
void HybridPvt::connect(gr::top_block_sptr top_block)
|
||||||
{
|
{
|
||||||
|
@ -88,6 +88,9 @@ private:
|
|||||||
std::string role_;
|
std::string role_;
|
||||||
unsigned int in_streams_;
|
unsigned int in_streams_;
|
||||||
unsigned int out_streams_;
|
unsigned int out_streams_;
|
||||||
|
|
||||||
|
std::string eph_xml_filename_;
|
||||||
|
bool save_assistance_to_XML();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -144,6 +144,11 @@ void gps_l1_ca_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::map<int,Gps_Ephemeris> gps_l1_ca_pvt_cc::get_GPS_L1_ephemeris_map()
|
||||||
|
{
|
||||||
|
return d_ls_pvt->gps_ephemeris_map;
|
||||||
|
}
|
||||||
|
|
||||||
gps_l1_ca_pvt_cc::gps_l1_ca_pvt_cc(unsigned int nchannels,
|
gps_l1_ca_pvt_cc::gps_l1_ca_pvt_cc(unsigned int nchannels,
|
||||||
bool dump, std::string dump_filename,
|
bool dump, std::string dump_filename,
|
||||||
int averaging_depth,
|
int averaging_depth,
|
||||||
|
@ -125,6 +125,14 @@ private:
|
|||||||
std::map<int,Gnss_Synchro> gnss_pseudoranges_map;
|
std::map<int,Gnss_Synchro> gnss_pseudoranges_map;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Get latest set of GPS L1 ephemeris from PVT block
|
||||||
|
*
|
||||||
|
* It is used to save the assistance data at the receiver shutdown
|
||||||
|
*/
|
||||||
|
std::map<int,Gps_Ephemeris> get_GPS_L1_ephemeris_map();
|
||||||
|
|
||||||
~gps_l1_ca_pvt_cc (); //!< Default destructor
|
~gps_l1_ca_pvt_cc (); //!< Default destructor
|
||||||
|
|
||||||
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
||||||
|
@ -130,6 +130,11 @@ void hybrid_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::map<int,Gps_Ephemeris> hybrid_pvt_cc::get_GPS_L1_ephemeris_map()
|
||||||
|
{
|
||||||
|
return d_ls_pvt->gps_ephemeris_map;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
hybrid_pvt_cc::hybrid_pvt_cc(unsigned int nchannels, bool dump, std::string dump_filename,
|
hybrid_pvt_cc::hybrid_pvt_cc(unsigned int nchannels, bool dump, std::string dump_filename,
|
||||||
int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port,
|
int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port,
|
||||||
|
@ -124,6 +124,13 @@ private:
|
|||||||
bool pseudoranges_pairCompare_min(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b);
|
bool pseudoranges_pairCompare_min(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/*!
|
||||||
|
* \brief Get latest set of GPS L1 ephemeris from PVT block
|
||||||
|
*
|
||||||
|
* It is used to save the assistance data at the receiver shutdown
|
||||||
|
*/
|
||||||
|
std::map<int,Gps_Ephemeris> get_GPS_L1_ephemeris_map();
|
||||||
|
|
||||||
~hybrid_pvt_cc (); //!< Default destructor
|
~hybrid_pvt_cc (); //!< Default destructor
|
||||||
|
|
||||||
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
||||||
|
@ -172,21 +172,20 @@ int gnss_sdr_supl_client::get_assistance(int i_mcc, int i_mns, int i_lac, int i_
|
|||||||
if (err == 0)
|
if (err == 0)
|
||||||
{
|
{
|
||||||
read_supl_data();
|
read_supl_data();
|
||||||
if (supl_ctx_free(&ctx)) {} // clean it up before leaving
|
if (supl_ctx_free(&ctx)) {} // clean it up before leaving
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* If supl_get_assist() fails, the connection remains open
|
* If supl_get_assist() fails, the connection remains open
|
||||||
* and the memory/files are not released.
|
* and the memory/files are not released.
|
||||||
*/
|
*/
|
||||||
supl_close(&ctx);
|
supl_close(&ctx);
|
||||||
}
|
}
|
||||||
delete [] cstr;
|
delete [] cstr;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void gnss_sdr_supl_client::read_supl_data()
|
void gnss_sdr_supl_client::read_supl_data()
|
||||||
{
|
{
|
||||||
// READ REFERENCE LOCATION
|
// READ REFERENCE LOCATION
|
||||||
@ -373,11 +372,11 @@ bool gnss_sdr_supl_client::load_ephemeris_xml(const std::string file_name)
|
|||||||
gps_ephemeris_map.clear();
|
gps_ephemeris_map.clear();
|
||||||
xml >> boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", this->gps_ephemeris_map);
|
xml >> boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", this->gps_ephemeris_map);
|
||||||
ifs.close();
|
ifs.close();
|
||||||
LOG(INFO) << "Loaded Ephemeris map data";
|
LOG(INFO) << "Loaded Ephemeris map data with "<<this->gps_ephemeris_map.size()<<" satellites";
|
||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what() << "File: " << file_name;
|
LOG(WARNING) << e.what() << "File: " << file_name;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -397,7 +396,7 @@ bool gnss_sdr_supl_client::save_ephemeris_map_xml(const std::string file_name, s
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what();
|
LOG(WARNING) << e.what();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -421,7 +420,7 @@ bool gnss_sdr_supl_client::load_utc_xml(const std::string file_name)
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what() << "File: " << file_name;
|
LOG(WARNING) << e.what() << "File: " << file_name;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -441,7 +440,7 @@ bool gnss_sdr_supl_client::save_utc_map_xml(const std::string file_name, std::ma
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what();
|
LOG(WARNING) << e.what();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -465,7 +464,7 @@ bool gnss_sdr_supl_client::load_iono_xml(const std::string file_name)
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what() << "File: " << file_name;
|
LOG(WARNING) << e.what() << "File: " << file_name;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -485,7 +484,7 @@ bool gnss_sdr_supl_client::save_iono_map_xml(const std::string file_name, std::m
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what();
|
LOG(WARNING) << e.what();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -509,7 +508,7 @@ bool gnss_sdr_supl_client::load_ref_time_xml(const std::string file_name)
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what() << "File: " << file_name;
|
LOG(WARNING) << e.what() << "File: " << file_name;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -529,7 +528,7 @@ bool gnss_sdr_supl_client::save_ref_time_map_xml(const std::string file_name, st
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what();
|
LOG(WARNING) << e.what();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -553,7 +552,7 @@ bool gnss_sdr_supl_client::load_ref_location_xml(const std::string file_name)
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what() << "File: " << file_name;
|
LOG(WARNING) << e.what() << "File: " << file_name;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -573,7 +572,7 @@ bool gnss_sdr_supl_client::save_ref_location_map_xml(const std::string file_name
|
|||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(ERROR) << e.what();
|
LOG(WARNING) << e.what();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -121,6 +121,9 @@ void ControlThread::run()
|
|||||||
LOG(ERROR) << "Unable to start flowgraph";
|
LOG(ERROR) << "Unable to start flowgraph";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//launch GNSS assistance process AFTER the flowgraph is running because the GNURadio asynchronous queues must be already running to transport msgs
|
||||||
|
assist_GNSS();
|
||||||
// start the keyboard_listener thread
|
// start the keyboard_listener thread
|
||||||
keyboard_thread_ = boost::thread(&ControlThread::keyboard_listener, this);
|
keyboard_thread_ = boost::thread(&ControlThread::keyboard_listener, this);
|
||||||
|
|
||||||
@ -247,98 +250,8 @@ bool ControlThread::read_assistance_from_XML()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ControlThread::assist_GNSS()
|
||||||
//todo: The save assistance function needs to be moved to the PVT block because now the global maps are deprecated, and PVT is the only block that have all the information
|
|
||||||
//bool ControlThread::save_assistance_to_XML()
|
|
||||||
//{
|
|
||||||
// // return variable (true == succeeded)
|
|
||||||
// bool ret = false;
|
|
||||||
// // getting names from the config file, if available
|
|
||||||
// std::string eph_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename);
|
|
||||||
// std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename);
|
|
||||||
// std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename);
|
|
||||||
// std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename);
|
|
||||||
// std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename);
|
|
||||||
//
|
|
||||||
// LOG(INFO) << "SUPL: Try to save GPS ephemeris to XML file " << eph_xml_filename;
|
|
||||||
// std::map<int, Gps_Ephemeris> eph_copy = global_gps_ephemeris_map.get_map_copy();
|
|
||||||
// if (supl_client_ephemeris_.save_ephemeris_map_xml(eph_xml_filename, eph_copy) == true)
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Successfully saved ephemeris XML file";
|
|
||||||
// ret = true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Error while trying to save ephemeris XML file. Maybe an empty map?";
|
|
||||||
// ret = false;
|
|
||||||
// }
|
|
||||||
// // Only try to save {utc, iono, ref time, ref location} if SUPL is enabled
|
|
||||||
// bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false);
|
|
||||||
// if (enable_gps_supl_assistance == true)
|
|
||||||
// {
|
|
||||||
// // try to save utc model xml file
|
|
||||||
// std::map<int, Gps_Utc_Model> utc_copy = global_gps_utc_model_map.get_map_copy();
|
|
||||||
// if (supl_client_acquisition_.save_utc_map_xml(utc_xml_filename, utc_copy) == true)
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Successfully saved UTC Model XML file";
|
|
||||||
// //ret = true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Error while trying to save utc XML file";
|
|
||||||
// //ret = false;
|
|
||||||
// }
|
|
||||||
// // try to save iono model xml file
|
|
||||||
// std::map<int, Gps_Iono> iono_copy = global_gps_iono_map.get_map_copy();
|
|
||||||
// if (supl_client_acquisition_.save_iono_map_xml(iono_xml_filename, iono_copy) == true)
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Successfully saved IONO Model XML file";
|
|
||||||
// //ret = true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Error while trying to save iono XML file";
|
|
||||||
// //ret = false;
|
|
||||||
// }
|
|
||||||
// // try to save ref time xml file
|
|
||||||
// std::map<int, Gps_Ref_Time> ref_time_copy = global_gps_ref_time_map.get_map_copy();
|
|
||||||
// if (supl_client_acquisition_.save_ref_time_map_xml(ref_time_xml_filename, ref_time_copy) == true)
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Successfully saved Ref Time XML file";
|
|
||||||
// //ret = true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Error while trying to save ref time XML file";
|
|
||||||
// //ref = false;
|
|
||||||
// }
|
|
||||||
// // try to save ref location xml file
|
|
||||||
// std::map<int, Gps_Ref_Location> ref_location_copy = global_gps_ref_location_map.get_map_copy();
|
|
||||||
// if (supl_client_acquisition_.save_ref_location_map_xml(ref_location_xml_filename, ref_location_copy) == true)
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Successfully saved Ref Location XML file";
|
|
||||||
// //ref = true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// LOG(INFO) << "SUPL: Error while trying to save ref location XML file";
|
|
||||||
// //ret = false;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return ret;
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
void ControlThread::init()
|
|
||||||
{
|
{
|
||||||
// Instantiates a control queue, a GNSS flowgraph, and a control message factory
|
|
||||||
control_queue_ = gr::msg_queue::make(0);
|
|
||||||
flowgraph_ = std::make_shared<GNSSFlowgraph>(configuration_, control_queue_);
|
|
||||||
control_message_factory_ = std::make_shared<ControlMessageFactory>();
|
|
||||||
stop_ = false;
|
|
||||||
processed_control_messages_ = 0;
|
|
||||||
applied_actions_ = 0;
|
|
||||||
|
|
||||||
//######### GNSS Assistance #################################
|
//######### GNSS Assistance #################################
|
||||||
// GNSS Assistance configuration
|
// GNSS Assistance configuration
|
||||||
bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false);
|
bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false);
|
||||||
@ -379,7 +292,9 @@ void ControlThread::init()
|
|||||||
if (SUPL_read_gps_assistance_xml == true)
|
if (SUPL_read_gps_assistance_xml == true)
|
||||||
{
|
{
|
||||||
// read assistance from file
|
// read assistance from file
|
||||||
//if (read_assistance_from_XML()) {}
|
if (read_assistance_from_XML()) {
|
||||||
|
std::cout<<"GPS assistance data loaded from local XML file."<<std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -414,11 +329,11 @@ void ControlThread::init()
|
|||||||
{
|
{
|
||||||
std::cout << "ERROR: SUPL client for Ephemeris returned " << error << std::endl;
|
std::cout << "ERROR: SUPL client for Ephemeris returned " << error << std::endl;
|
||||||
std::cout << "Please check internet connection and SUPL server configuration" << error << std::endl;
|
std::cout << "Please check internet connection and SUPL server configuration" << error << std::endl;
|
||||||
//std::cout << "Trying to read ephemeris from XML file" << std::endl;
|
std::cout << "Trying to read ephemeris from XML file" << std::endl;
|
||||||
//if (read_assistance_from_XML() == false)
|
if (read_assistance_from_XML() == false)
|
||||||
// {
|
{
|
||||||
// std::cout << "ERROR: Could not read Ephemeris file: Disabling SUPL assistance.." << std::endl;
|
std::cout << "ERROR: Could not read Ephemeris file: Disabling SUPL assistance.." << std::endl;
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Request almanac , IONO and UTC Model
|
// Request almanac , IONO and UTC Model
|
||||||
@ -492,6 +407,17 @@ void ControlThread::init()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void ControlThread::init()
|
||||||
|
{
|
||||||
|
// Instantiates a control queue, a GNSS flowgraph, and a control message factory
|
||||||
|
control_queue_ = gr::msg_queue::make(0);
|
||||||
|
flowgraph_ = std::make_shared<GNSSFlowgraph>(configuration_, control_queue_);
|
||||||
|
control_message_factory_ = std::make_shared<ControlMessageFactory>();
|
||||||
|
stop_ = false;
|
||||||
|
processed_control_messages_ = 0;
|
||||||
|
applied_actions_ = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ControlThread::read_control_messages()
|
void ControlThread::read_control_messages()
|
||||||
|
@ -138,6 +138,12 @@ private:
|
|||||||
*/
|
*/
|
||||||
void gps_acq_assist_data_collector();
|
void gps_acq_assist_data_collector();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read initial GNSS assistance from SUPL server or local XML files
|
||||||
|
*/
|
||||||
|
void assist_GNSS();
|
||||||
|
|
||||||
|
|
||||||
void apply_action(unsigned int what);
|
void apply_action(unsigned int what);
|
||||||
std::shared_ptr<GNSSFlowgraph> flowgraph_;
|
std::shared_ptr<GNSSFlowgraph> flowgraph_;
|
||||||
std::shared_ptr<ConfigurationInterface> configuration_;
|
std::shared_ptr<ConfigurationInterface> configuration_;
|
||||||
|
Loading…
Reference in New Issue
Block a user