From f162182ffe4b2e47ae1d285259d272bab7ec78f3 Mon Sep 17 00:00:00 2001 From: Javier Arribas Date: Thu, 26 Jul 2018 19:19:23 +0200 Subject: [PATCH] Improved sample counter block --- src/algorithms/libs/gnss_sdr_sample_counter.cc | 9 ++++++++- src/algorithms/libs/gnss_sdr_sample_counter.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/algorithms/libs/gnss_sdr_sample_counter.cc b/src/algorithms/libs/gnss_sdr_sample_counter.cc index a94d4ddeb..39405522f 100644 --- a/src/algorithms/libs/gnss_sdr_sample_counter.cc +++ b/src/algorithms/libs/gnss_sdr_sample_counter.cc @@ -39,10 +39,12 @@ gnss_sdr_sample_counter::gnss_sdr_sample_counter(double _fs, size_t _size) : gr::sync_decimator("sample_counter", gr::io_signature::make(1, 1, _size), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)), - static_cast(std::floor(_fs * 0.001))) + static_cast(std::round(_fs * 0.001))) { message_port_register_out(pmt::mp("sample_counter")); set_max_noutput_items(1); + samples_per_output = std::round(_fs * 0.001); + sample_counter = 0; current_T_rx_ms = 0; current_s = 0; current_m = 0; @@ -69,6 +71,9 @@ int gnss_sdr_sample_counter::work(int noutput_items __attribute__((unused)), { Gnss_Synchro *out = reinterpret_cast(output_items[0]); out[0] = Gnss_Synchro(); + out[0].Flag_valid_symbol_output = false; + out[0].Flag_valid_word = false; + out[0].Channel_ID = -1; if ((current_T_rx_ms % report_interval_ms) == 0) { current_s++; @@ -127,6 +132,8 @@ int gnss_sdr_sample_counter::work(int noutput_items __attribute__((unused)), message_port_pub(pmt::mp("receiver_time"), pmt::from_double(static_cast(current_T_rx_ms) / 1000.0)); } } + sample_counter += samples_per_output; + out[0].Tracking_sample_counter = sample_counter; current_T_rx_ms++; return 1; } diff --git a/src/algorithms/libs/gnss_sdr_sample_counter.h b/src/algorithms/libs/gnss_sdr_sample_counter.h index f398684f5..3c3378c4d 100644 --- a/src/algorithms/libs/gnss_sdr_sample_counter.h +++ b/src/algorithms/libs/gnss_sdr_sample_counter.h @@ -45,6 +45,8 @@ class gnss_sdr_sample_counter : public gr::sync_decimator { private: gnss_sdr_sample_counter(double _fs, size_t _size); + unsigned int samples_per_output; + unsigned long int sample_counter; long long int current_T_rx_ms; // Receiver time in ms since the beginning of the run unsigned int current_s; // Receiver time in seconds, modulo 60 bool flag_m; // True if the receiver has been running for at least 1 minute