From 5f5e861822341cd278f1f678a52b7233ffee146a Mon Sep 17 00:00:00 2001 From: Javier Arribas Date: Tue, 19 Sep 2023 13:10:56 +0200 Subject: [PATCH] Adding PVT UTC time string in rfc 3339 format to protobuf PVT monitor output --- docs/protobuf/monitor_pvt.proto | 1 + src/algorithms/PVT/libs/monitor_pvt.h | 6 ++++++ src/algorithms/PVT/libs/rtklib_solver.cc | 11 +++++++++++ src/algorithms/PVT/libs/serdes_monitor_pvt.h | 2 ++ 4 files changed, 20 insertions(+) diff --git a/docs/protobuf/monitor_pvt.proto b/docs/protobuf/monitor_pvt.proto index d8b9d7f54..d3a18f4f4 100644 --- a/docs/protobuf/monitor_pvt.proto +++ b/docs/protobuf/monitor_pvt.proto @@ -42,4 +42,5 @@ double hdop = 27; // Horizontal Dilution of Precision double vdop = 28; // Vertical Dilution of Precision double user_clk_drift_ppm = 29; // User clock drift [ppm] +string utc_time = 30; // PVT UTC time (rfc 3339 datetime string) } diff --git a/src/algorithms/PVT/libs/monitor_pvt.h b/src/algorithms/PVT/libs/monitor_pvt.h index 18c43229b..ce2ca815d 100644 --- a/src/algorithms/PVT/libs/monitor_pvt.h +++ b/src/algorithms/PVT/libs/monitor_pvt.h @@ -19,6 +19,7 @@ #include #include +#include /** \addtogroup PVT * \{ */ @@ -84,6 +85,10 @@ public: // User clock drift [ppm] double user_clk_drift_ppm; + // PVT UTC Time (rfc 3339 datetime string) + std::string utc_time; + + /*! * \brief This member function serializes and restores * Monitor_Pvt objects from a byte stream. @@ -131,6 +136,7 @@ public: ar& BOOST_SERIALIZATION_NVP(vdop); ar& BOOST_SERIALIZATION_NVP(user_clk_drift_ppm); + ar& BOOST_SERIALIZATION_NVP(utc_time); } }; diff --git a/src/algorithms/PVT/libs/rtklib_solver.cc b/src/algorithms/PVT/libs/rtklib_solver.cc index 8b9d5b8ee..443564819 100644 --- a/src/algorithms/PVT/libs/rtklib_solver.cc +++ b/src/algorithms/PVT/libs/rtklib_solver.cc @@ -1686,6 +1686,17 @@ bool Rtklib_Solver::get_PVT(const std::map &gnss_observables_ // User clock drift [ppm] d_monitor_pvt.user_clk_drift_ppm = clock_drift_ppm; + //write UTC time string + + // Use a facet to display time in a custom format (only hour and minutes). + boost::posix_time::time_facet *facet = new boost::posix_time::time_facet(); + facet->format("%Y-%m-%dT%H:%M:%S%F"); + std::stringstream stream; + stream.imbue(std::locale(std::locale::classic(), facet)); + stream << p_time; + stream << 'Z'; + d_monitor_pvt.utc_time = stream.str(); + // ######## LOG FILE ######### if (d_flag_dump_enabled == true) { diff --git a/src/algorithms/PVT/libs/serdes_monitor_pvt.h b/src/algorithms/PVT/libs/serdes_monitor_pvt.h index a792e18d6..5d22f8519 100644 --- a/src/algorithms/PVT/libs/serdes_monitor_pvt.h +++ b/src/algorithms/PVT/libs/serdes_monitor_pvt.h @@ -112,6 +112,7 @@ public: monitor_.set_hdop(monitor->hdop); monitor_.set_vdop(monitor->vdop); monitor_.set_user_clk_drift_ppm(monitor->user_clk_drift_ppm); + monitor_.set_utc_time(monitor->utc_time); monitor_.SerializeToString(&data); return data; @@ -150,6 +151,7 @@ public: monitor.hdop = mon.hdop(); monitor.vdop = mon.vdop(); monitor.user_clk_drift_ppm = mon.user_clk_drift_ppm(); + monitor.utc_time = mon.utc_time(); return monitor; }