[hamradio-commits] [gnss-sdr] 44/80: Expose Galileo RTCM messages rate to the PVT configuration

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Sun May 15 20:11:55 UTC 2016


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch upstream
in repository gnss-sdr.

commit cdbba89996bc503764ae4dcbba42b7b507dab92f
Author: Carles Fernandez <carles.fernandez at gmail.com>
Date:   Sat May 7 23:15:17 2016 +0200

    Expose Galileo RTCM messages rate to the PVT configuration
---
 src/algorithms/PVT/adapters/CMakeLists.txt         |  1 +
 src/algorithms/PVT/adapters/galileo_e1_pvt.cc      | 65 +++++++++++++++-------
 src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc       | 21 ++++++-
 src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt  |  1 +
 .../PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc       | 30 ++++++++--
 .../PVT/gnuradio_blocks/galileo_e1_pvt_cc.h        |  5 ++
 .../PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc        |  5 +-
 7 files changed, 97 insertions(+), 31 deletions(-)

diff --git a/src/algorithms/PVT/adapters/CMakeLists.txt b/src/algorithms/PVT/adapters/CMakeLists.txt
index 83b4f02..51ebcdc 100644
--- a/src/algorithms/PVT/adapters/CMakeLists.txt
+++ b/src/algorithms/PVT/adapters/CMakeLists.txt
@@ -30,6 +30,7 @@ include_directories(
      ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/gnuradio_blocks
      ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs
      ${ARMADILLO_INCLUDE_DIRS}
+     ${Boost_INCLUDE_DIRS}
      ${GLOG_INCLUDE_DIRS}
      ${GFlags_INCLUDE_DIRS}
      ${GNURADIO_RUNTIME_INCLUDE_DIRS}
diff --git a/src/algorithms/PVT/adapters/galileo_e1_pvt.cc b/src/algorithms/PVT/adapters/galileo_e1_pvt.cc
index 4f026ad..72b2bb4 100644
--- a/src/algorithms/PVT/adapters/galileo_e1_pvt.cc
+++ b/src/algorithms/PVT/adapters/galileo_e1_pvt.cc
@@ -32,6 +32,7 @@
 
 
 #include "galileo_e1_pvt.h"
+#include <boost/math/common_factor_rt.hpp>
 #include <glog/logging.h>
 #include "configuration_interface.h"
 
@@ -52,37 +53,59 @@ GalileoE1Pvt::GalileoE1Pvt(ConfigurationInterface* configuration,
     std::string default_nmea_dump_devname = "/dev/tty1";
     std::string default_rtcm_dump_devname = "/dev/pts/1";
     DLOG(INFO) << "role " << role;
+
     dump_ = configuration->property(role + ".dump", false);
     dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
+
     // moving average depth parameters
-    int averaging_depth;
-    averaging_depth = configuration->property(role + ".averaging_depth", 10);
-    bool flag_averaging;
-    flag_averaging = configuration->property(role + ".flag_averaging", false);
+    int averaging_depth = configuration->property(role + ".averaging_depth", 10);
+    bool flag_averaging = configuration->property(role + ".flag_averaging", false);
+
     // output rate
-    int output_rate_ms;
-    output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
+    int output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
+
     // display rate
-    int display_rate_ms;
-    display_rate_ms = configuration->property(role + ".display_rate_ms", 500);
+    int display_rate_ms = configuration->property(role + ".display_rate_ms", 500);
+
     // NMEA Printer settings
-    bool flag_nmea_tty_port;
-    flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false);
-    std::string nmea_dump_filename;
-    nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename);
-    std::string nmea_dump_devname;
-    nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname);
+    bool flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false);
+    std::string nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename);
+    std::string nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname);
+
     // RTCM Printer settings
-    bool flag_rtcm_tty_port;
-    flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false);
-    std::string rtcm_dump_devname;
-    rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname);
-    bool flag_rtcm_server;
-    flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
+    bool flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false);
+    std::string rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname);
+    bool flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false);
     unsigned short rtcm_tcp_port = configuration->property(role + ".rtcm_tcp_port", 2101);
     unsigned short rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234);
+    // RTCM message rates: least common multiple with output_rate_ms
+    int rtcm_MT1045_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), output_rate_ms);
+    int rtcm_MSM_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), output_rate_ms);
+    std::map<int,int> rtcm_msg_rate_ms;
+    rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms;
+    for (int k = 1071; k < 1078; k++) // All GPS MSM
+        {
+            rtcm_msg_rate_ms[k] = rtcm_MSM_rate_ms;
+        }
+
     // make PVT object
-    pvt_ = galileo_e1_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_tcp_port, rtcm_station_id, rtcm_dump_devname);
+    pvt_ = galileo_e1_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_tcp_port,
+            rtcm_station_id,
+            rtcm_msg_rate_ms,
+            rtcm_dump_devname);
+
     DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
 }
 
diff --git a/src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc b/src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc
index ebc7204..a881d27 100644
--- a/src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc
+++ b/src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc
@@ -32,11 +32,11 @@
 
 
 #include "gps_l1_ca_pvt.h"
-#include <glog/logging.h>
 #include <boost/archive/xml_oarchive.hpp>
 #include <boost/archive/xml_iarchive.hpp>
 #include <boost/math/common_factor_rt.hpp>
 #include <boost/serialization/map.hpp>
+#include <glog/logging.h>
 #include "configuration_interface.h"
 
 using google::LogMessage;
@@ -104,10 +104,27 @@ GpsL1CaPvt::GpsL1CaPvt(ConfigurationInterface* configuration,
     //std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename);
 
     // 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_tcp_port, rtcm_station_id, rtcm_msg_rate_ms, 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_tcp_port,
+            rtcm_station_id,
+            rtcm_msg_rate_ms,
+            rtcm_dump_devname );
+
     DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
 }
 
+
 bool GpsL1CaPvt::save_assistance_to_XML()
 {
     // return variable (true == succeeded)
diff --git a/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt b/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt
index 4b477c7..7bf8fcc 100644
--- a/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt
+++ b/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt
@@ -29,6 +29,7 @@ include_directories(
      ${CMAKE_SOURCE_DIR}/src/core/receiver
      ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs
      ${ARMADILLO_INCLUDE_DIRS}
+     ${Boost_INCLUDE_DIRS}
      ${GLOG_INCLUDE_DIRS}
      ${GFlags_INCLUDE_DIRS}
      ${GNURADIO_RUNTIME_INCLUDE_DIRS}
diff --git a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
index 117169b..cfb4558 100644
--- a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
+++ b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
@@ -33,6 +33,7 @@
 #include <iostream>
 #include <map>
 #include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/math/common_factor_rt.hpp>
 #include <gnuradio/gr_complex.h>
 #include <gnuradio/io_signature.h>
 #include <glog/logging.h>
@@ -44,11 +45,11 @@ using google::LogMessage;
 galileo_e1_pvt_cc_sptr galileo_e1_make_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, std::string nmea_dump_filename,
         std::string nmea_dump_devname, bool flag_rtcm_server, bool flag_rtcm_tty_port, unsigned short rtcm_tcp_port,
-        unsigned short rtcm_station_id, std::string rtcm_dump_devname)
+        unsigned short rtcm_station_id, std::map<int,int> rtcm_msg_rate_ms, std::string rtcm_dump_devname)
 {
     return galileo_e1_pvt_cc_sptr(new galileo_e1_pvt_cc(nchannels, 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_tcp_port, rtcm_station_id, rtcm_dump_devname));
+            flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_msg_rate_ms, rtcm_dump_devname));
 }
 
 
@@ -108,7 +109,7 @@ void galileo_e1_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
 galileo_e1_pvt_cc::galileo_e1_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, std::string nmea_dump_filename, std::string nmea_dump_devname,
         bool flag_rtcm_server, bool flag_rtcm_tty_port, unsigned short rtcm_tcp_port,
-        unsigned short rtcm_station_id, std::string rtcm_dump_devname) :
+        unsigned short rtcm_station_id, std::map<int,int> rtcm_msg_rate_ms, std::string rtcm_dump_devname) :
     gr::block("galileo_e1_pvt_cc", gr::io_signature::make(nchannels, nchannels,  sizeof(Gnss_Synchro)), gr::io_signature::make(0, 0, sizeof(gr_complex)))
 {
     d_output_rate_ms = output_rate_ms;
@@ -143,6 +144,23 @@ galileo_e1_pvt_cc::galileo_e1_pvt_cc(unsigned int nchannels, bool dump, std::str
     unsigned short _port = rtcm_tcp_port;
     unsigned short _station_id = rtcm_station_id;
     d_rtcm_printer = std::make_shared<Rtcm_Printer>(rtcm_dump_filename, flag_rtcm_server, flag_rtcm_tty_port, _port, _station_id, rtcm_dump_devname);
+    if(rtcm_msg_rate_ms.find(1045) != rtcm_msg_rate_ms.end())
+        {
+            d_rtcm_MT1045_rate_ms = rtcm_msg_rate_ms[1045];
+        }
+    else
+        {
+            d_rtcm_MT1045_rate_ms = boost::math::lcm(5000, d_output_rate_ms);  // default value if not set
+        }
+    if(rtcm_msg_rate_ms.find(1071) != rtcm_msg_rate_ms.end()) // whatever between 1071 and 1077
+        {
+            d_rtcm_MSM_rate_ms = rtcm_msg_rate_ms[1071];
+        }
+    else
+        {
+            d_rtcm_MSM_rate_ms = boost::math::lcm(1000, d_output_rate_ms);  // default value if not set
+        }
+    b_rtcm_writing_started = false;
 
     d_dump_filename.append("_raw.dat");
     dump_ls_pvt_filename.append("_ls_pvt.dat");
@@ -158,7 +176,7 @@ galileo_e1_pvt_cc::galileo_e1_pvt_cc(unsigned int nchannels, bool dump, std::str
 
     b_rinex_header_writen = false;
     b_rinex_header_updated = false;
-    b_rtcm_writing_started = false;
+
     rp = std::make_shared<Rinex_Printer>();
 
     d_last_status_print_seg = 0;
@@ -289,14 +307,14 @@ int galileo_e1_pvt_cc::general_work (int noutput_items __attribute__((unused)),
 
                             if(b_rtcm_writing_started)
                                 {
-                                    if((d_sample_counter % (5000 / 4) ) == 0) // every 5 seconds
+                                    if((d_sample_counter % (d_rtcm_MT1045_rate_ms / 4) ) == 0)
                                         {
                                             for(std::map<int,Galileo_Ephemeris>::iterator gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end(); gal_ephemeris_iter++ )
                                                 {
                                                     d_rtcm_printer->Print_Rtcm_MT1045(gal_ephemeris_iter->second);
                                                 }
                                         }
-                                    if((d_sample_counter % (1000 / 4) ) == 0) // every second
+                                    if((d_sample_counter % (d_rtcm_MSM_rate_ms / 4) ) == 0)
                                         {
                                             std::map<int,Galileo_Ephemeris>::iterator gal_ephemeris_iter;
                                             gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
diff --git a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h
index b506e3f..bcb1313 100644
--- a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h
+++ b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h
@@ -61,6 +61,7 @@ galileo_e1_pvt_cc_sptr galileo_e1_make_pvt_cc(unsigned int n_channels,
                                               bool flag_rtcm_tty_port,
                                               unsigned short rtcm_tcp_port,
                                               unsigned short rtcm_station_id,
+                                              std::map<int,int> rtcm_msg_rate_ms,
                                               std::string rtcm_dump_devname);
 
 /*!
@@ -83,6 +84,7 @@ private:
                                                          bool flag_rtcm_tty_port,
                                                          unsigned short rtcm_tcp_port,
                                                          unsigned short rtcm_station_id,
+                                                         std::map<int,int> rtcm_msg_rate_ms,
                                                          std::string rtcm_dump_devname);
     galileo_e1_pvt_cc(unsigned int nchannels,
                       bool dump, std::string dump_filename,
@@ -97,6 +99,7 @@ private:
                       bool flag_rtcm_tty_port,
                       unsigned short rtcm_tcp_port,
                       unsigned short rtcm_station_id,
+                      std::map<int,int> rtcm_msg_rate_ms,
                       std::string rtcm_dump_devname);
 
     void msg_handler_telemetry(pmt::pmt_t msg);
@@ -118,6 +121,8 @@ private:
     int d_display_rate_ms;
     long unsigned int d_sample_counter;
     long unsigned int d_last_sample_nav_output;
+    int d_rtcm_MT1045_rate_ms;
+    int d_rtcm_MSM_rate_ms;
 
     std::shared_ptr<Rinex_Printer> rp;
     std::shared_ptr<Kml_Printer> d_kml_dump;
diff --git a/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc b/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc
index 38bd188..3f656e8 100644
--- a/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc
+++ b/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc
@@ -32,6 +32,7 @@
 #include <iostream>
 #include <map>
 #include <utility>
+#include <boost/math/common_factor_rt.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <gnuradio/gr_complex.h>
 #include <gnuradio/io_signature.h>
@@ -235,7 +236,7 @@ gps_l1_ca_pvt_cc::gps_l1_ca_pvt_cc(unsigned int nchannels,
         }
     else
         {
-            d_rtcm_MT1019_rate_ms = 5000;  // default value if not set
+            d_rtcm_MT1019_rate_ms = boost::math::lcm(5000, d_output_rate_ms);  // default value if not set
         }
     if(rtcm_msg_rate_ms.find(1071) != rtcm_msg_rate_ms.end()) // whatever between 1071 and 1077
         {
@@ -243,7 +244,7 @@ gps_l1_ca_pvt_cc::gps_l1_ca_pvt_cc(unsigned int nchannels,
         }
     else
         {
-            d_rtcm_MSM_rate_ms = 1000;  // default value if not set
+            d_rtcm_MSM_rate_ms = boost::math::lcm(1000, d_output_rate_ms);  // default value if not set
         }
     b_rtcm_writing_started = false;
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git



More information about the pkg-hamradio-commits mailing list