diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc index 13962f559..a9df67b7d 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc @@ -126,9 +126,12 @@ rtklib_pvt_gs::rtklib_pvt_gs(uint32_t nchannels, { // Send feedback message to observables block with the receiver clock offset this->message_port_register_out(pmt::mp("pvt_to_observables")); + // Send PVT status to gnss_flowgraph + this->message_port_register_out(pmt::mp("status")); d_output_rate_ms = conf_.output_rate_ms; d_display_rate_ms = conf_.display_rate_ms; + d_report_rate_ms = 1000; //report every second PVT to gnss_synchro d_dump = conf_.dump; d_dump_mat = conf_.dump_mat and d_dump; d_dump_filename = conf_.dump_filename; @@ -3729,10 +3732,19 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item } // PVT MONITOR - if (d_pvt_solver->is_valid_position() and flag_monitor_pvt_enabled) + if (d_pvt_solver->is_valid_position()) { - Monitor_Pvt monitor_pvt = d_pvt_solver->get_monitor_pvt(); - udp_sink_ptr->write_monitor_pvt(monitor_pvt); + std::shared_ptr<Monitor_Pvt> monitor_pvt = std::make_shared<Monitor_Pvt>(d_pvt_solver->get_monitor_pvt()); + + //publish new position to the gnss_flowgraph channel status monitor + if (current_RX_time_ms % d_report_rate_ms == 0) + { + this->message_port_pub(pmt::mp("status"), pmt::make_any(monitor_pvt)); + } + if (flag_monitor_pvt_enabled) + { + udp_sink_ptr->write_monitor_pvt(monitor_pvt); + } } } } diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.h b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.h index 595cd2624..b046735d8 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.h +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.h @@ -169,6 +169,7 @@ private: int32_t d_output_rate_ms; int32_t d_display_rate_ms; + int32_t d_report_rate_ms; std::shared_ptr<Rinex_Printer> rp; std::shared_ptr<Kml_Printer> d_kml_dump; diff --git a/src/algorithms/PVT/libs/monitor_pvt_udp_sink.cc b/src/algorithms/PVT/libs/monitor_pvt_udp_sink.cc index 2796f13da..ed23fbb5d 100644 --- a/src/algorithms/PVT/libs/monitor_pvt_udp_sink.cc +++ b/src/algorithms/PVT/libs/monitor_pvt_udp_sink.cc @@ -51,14 +51,14 @@ Monitor_Pvt_Udp_Sink::Monitor_Pvt_Udp_Sink(const std::vector<std::string>& addre } -bool Monitor_Pvt_Udp_Sink::write_monitor_pvt(const Monitor_Pvt& monitor_pvt) +bool Monitor_Pvt_Udp_Sink::write_monitor_pvt(std::shared_ptr<Monitor_Pvt> monitor_pvt) { std::string outbound_data; if (use_protobuf == false) { std::ostringstream archive_stream; boost::archive::binary_oarchive oa{archive_stream}; - oa << monitor_pvt; + oa << *monitor_pvt.get(); outbound_data = archive_stream.str(); } else diff --git a/src/algorithms/PVT/libs/monitor_pvt_udp_sink.h b/src/algorithms/PVT/libs/monitor_pvt_udp_sink.h index f1f9146f4..588e70257 100644 --- a/src/algorithms/PVT/libs/monitor_pvt_udp_sink.h +++ b/src/algorithms/PVT/libs/monitor_pvt_udp_sink.h @@ -45,8 +45,8 @@ using b_io_context = boost::asio::io_service; class Monitor_Pvt_Udp_Sink { public: - Monitor_Pvt_Udp_Sink(const std::vector<std::string>& addresses, const uint16_t &port, bool protobuf_enabled); - bool write_monitor_pvt(const Monitor_Pvt &monitor_pvt); + Monitor_Pvt_Udp_Sink(const std::vector<std::string>& addresses, const uint16_t& port, bool protobuf_enabled); + bool write_monitor_pvt(std::shared_ptr<Monitor_Pvt> monitor_pvt); private: b_io_context io_context; diff --git a/src/algorithms/PVT/libs/rtcm.h b/src/algorithms/PVT/libs/rtcm.h index 792eafb9a..75dcd4c50 100644 --- a/src/algorithms/PVT/libs/rtcm.h +++ b/src/algorithms/PVT/libs/rtcm.h @@ -43,6 +43,7 @@ #include <boost/asio.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <glog/logging.h> +#include <pmt/pmt.h> #include <bitset> #include <cstddef> // for size_t #include <cstdint> diff --git a/src/algorithms/PVT/libs/serdes_monitor_pvt.h b/src/algorithms/PVT/libs/serdes_monitor_pvt.h index 1b5ca11ca..1477442df 100644 --- a/src/algorithms/PVT/libs/serdes_monitor_pvt.h +++ b/src/algorithms/PVT/libs/serdes_monitor_pvt.h @@ -34,7 +34,7 @@ #include "monitor_pvt.h" #include "monitor_pvt.pb.h" // file created by Protocol Buffers at compile time - +#include <memory> /*! * \brief This class implements serialization and deserialization of @@ -80,40 +80,40 @@ public: return *this; } - inline std::string createProtobuffer(const Monitor_Pvt& monitor) //!< Serialization into a string + inline std::string createProtobuffer(std::shared_ptr<Monitor_Pvt> monitor) //!< Serialization into a string { monitor_.Clear(); std::string data; - monitor_.set_tow_at_current_symbol_ms(monitor.TOW_at_current_symbol_ms); - monitor_.set_week(monitor.week); - monitor_.set_rx_time(monitor.RX_time); - monitor_.set_user_clk_offset(monitor.user_clk_offset); - monitor_.set_pos_x(monitor.pos_x); - monitor_.set_pos_y(monitor.pos_y); - monitor_.set_pos_z(monitor.pos_z); - monitor_.set_vel_x(monitor.vel_x); - monitor_.set_vel_y(monitor.vel_y); - monitor_.set_vel_z(monitor.vel_z); - monitor_.set_cov_xx(monitor.cov_xx); - monitor_.set_cov_yy(monitor.cov_yy); - monitor_.set_cov_zz(monitor.cov_zz); - monitor_.set_cov_xy(monitor.cov_xy); - monitor_.set_cov_yz(monitor.cov_yz); - monitor_.set_cov_zx(monitor.cov_zx); - monitor_.set_latitude(monitor.latitude); - monitor_.set_longitude(monitor.longitude); - monitor_.set_height(monitor.height); - monitor_.set_valid_sats(monitor.valid_sats); - monitor_.set_solution_status(monitor.solution_status); - monitor_.set_solution_type(monitor.solution_type); - monitor_.set_ar_ratio_factor(monitor.AR_ratio_factor); - monitor_.set_ar_ratio_threshold(monitor.AR_ratio_threshold); - monitor_.set_gdop(monitor.gdop); - monitor_.set_pdop(monitor.pdop); - monitor_.set_hdop(monitor.hdop); - monitor_.set_vdop(monitor.vdop); + monitor_.set_tow_at_current_symbol_ms(monitor->TOW_at_current_symbol_ms); + monitor_.set_week(monitor->week); + monitor_.set_rx_time(monitor->RX_time); + monitor_.set_user_clk_offset(monitor->user_clk_offset); + monitor_.set_pos_x(monitor->pos_x); + monitor_.set_pos_y(monitor->pos_y); + monitor_.set_pos_z(monitor->pos_z); + monitor_.set_vel_x(monitor->vel_x); + monitor_.set_vel_y(monitor->vel_y); + monitor_.set_vel_z(monitor->vel_z); + monitor_.set_cov_xx(monitor->cov_xx); + monitor_.set_cov_yy(monitor->cov_yy); + monitor_.set_cov_zz(monitor->cov_zz); + monitor_.set_cov_xy(monitor->cov_xy); + monitor_.set_cov_yz(monitor->cov_yz); + monitor_.set_cov_zx(monitor->cov_zx); + monitor_.set_latitude(monitor->latitude); + monitor_.set_longitude(monitor->longitude); + monitor_.set_height(monitor->height); + monitor_.set_valid_sats(monitor->valid_sats); + monitor_.set_solution_status(monitor->solution_status); + monitor_.set_solution_type(monitor->solution_type); + monitor_.set_ar_ratio_factor(monitor->AR_ratio_factor); + monitor_.set_ar_ratio_threshold(monitor->AR_ratio_threshold); + monitor_.set_gdop(monitor->gdop); + monitor_.set_pdop(monitor->pdop); + monitor_.set_hdop(monitor->hdop); + monitor_.set_vdop(monitor->vdop); monitor_.SerializeToString(&data); return data; diff --git a/src/algorithms/channel/adapters/CMakeLists.txt b/src/algorithms/channel/adapters/CMakeLists.txt index 7f439ce56..48f293df5 100644 --- a/src/algorithms/channel/adapters/CMakeLists.txt +++ b/src/algorithms/channel/adapters/CMakeLists.txt @@ -31,6 +31,7 @@ target_link_libraries(channel_adapters Gnuradio::runtime channel_libs core_system_parameters + core_receiver PRIVATE Gflags::gflags Glog::glog diff --git a/src/algorithms/channel/adapters/channel.cc b/src/algorithms/channel/adapters/channel.cc index 98574b3eb..2cea8e915 100644 --- a/src/algorithms/channel/adapters/channel.cc +++ b/src/algorithms/channel/adapters/channel.cc @@ -42,7 +42,7 @@ Channel::Channel(ConfigurationInterface* configuration, uint32_t channel, std::shared_ptr<AcquisitionInterface> acq, std::shared_ptr<TrackingInterface> trk, std::shared_ptr<TelemetryDecoderInterface> nav, - std::string role, std::string implementation, gr::msg_queue::sptr queue) + std::string role, std::string implementation, std::shared_ptr<Concurrent_Queue<pmt::pmt_t> > queue) { acq_ = std::move(acq); trk_ = std::move(trk); diff --git a/src/algorithms/channel/adapters/channel.h b/src/algorithms/channel/adapters/channel.h index a238f490c..083608331 100644 --- a/src/algorithms/channel/adapters/channel.h +++ b/src/algorithms/channel/adapters/channel.h @@ -38,10 +38,11 @@ #include "channel_fsm.h" #include "channel_interface.h" #include "channel_msg_receiver_cc.h" +#include "concurrent_queue.h" #include "gnss_signal.h" #include "gnss_synchro.h" #include <gnuradio/block.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstddef> #include <cstdint> #include <memory> @@ -66,7 +67,7 @@ public: //! Constructor Channel(ConfigurationInterface* configuration, uint32_t channel, std::shared_ptr<AcquisitionInterface> acq, std::shared_ptr<TrackingInterface> trk, std::shared_ptr<TelemetryDecoderInterface> nav, - std::string role, std::string implementation, gr::msg_queue::sptr queue); + std::string role, std::string implementation, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~Channel(); //!< Virtual destructor @@ -105,7 +106,7 @@ private: bool connected_; bool repeat_; std::shared_ptr<ChannelFsm> channel_fsm_; - gr::msg_queue::sptr queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; std::mutex mx; }; diff --git a/src/algorithms/channel/libs/CMakeLists.txt b/src/algorithms/channel/libs/CMakeLists.txt index ba6e2a274..1ab513f43 100644 --- a/src/algorithms/channel/libs/CMakeLists.txt +++ b/src/algorithms/channel/libs/CMakeLists.txt @@ -24,7 +24,7 @@ set(CHANNEL_FSM_SOURCES set(CHANNEL_FSM_HEADERS channel_fsm.h channel_msg_receiver_cc.h -) +) list(SORT CHANNEL_FSM_HEADERS) list(SORT CHANNEL_FSM_SOURCES) @@ -35,14 +35,14 @@ add_library(channel_libs ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS}) target_link_libraries(channel_libs PUBLIC + core_libs + core_system_parameters Gnuradio::runtime Gnuradio::pmt - core_system_parameters PRIVATE Boost::boost Gflags::gflags Glog::glog - core_receiver ) if(ENABLE_CLANG_TIDY) diff --git a/src/algorithms/channel/libs/channel_fsm.cc b/src/algorithms/channel/libs/channel_fsm.cc index ac533d310..ffc491634 100644 --- a/src/algorithms/channel/libs/channel_fsm.cc +++ b/src/algorithms/channel/libs/channel_fsm.cc @@ -31,7 +31,7 @@ */ #include "channel_fsm.h" -#include "control_message_factory.h" +#include "channel_event.h" #include <glog/logging.h> #include <utility> @@ -179,7 +179,7 @@ void ChannelFsm::set_telemetry(std::shared_ptr<TelemetryDecoderInterface> teleme } -void ChannelFsm::set_queue(gr::msg_queue::sptr queue) +void ChannelFsm::set_queue(std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { std::lock_guard<std::mutex> lk(mx); queue_ = std::move(queue); @@ -215,29 +215,17 @@ void ChannelFsm::start_acquisition() void ChannelFsm::start_tracking() { trk_->start_tracking(); - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); - if (queue_ != gr::msg_queue::make()) - { - queue_->handle(cmf->GetQueueMessage(channel_, 1)); - } + queue_->push(pmt::make_any(channel_event_make(channel_, 1))); } void ChannelFsm::request_satellite() { - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); - if (queue_ != gr::msg_queue::make()) - { - queue_->handle(cmf->GetQueueMessage(channel_, 0)); - } + queue_->push(pmt::make_any(channel_event_make(channel_, 0))); } void ChannelFsm::notify_stop_tracking() { - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); - if (queue_ != gr::msg_queue::make()) - { - queue_->handle(cmf->GetQueueMessage(channel_, 2)); - } + queue_->push(pmt::make_any(channel_event_make(channel_, 2))); } diff --git a/src/algorithms/channel/libs/channel_fsm.h b/src/algorithms/channel/libs/channel_fsm.h index 8a3342511..a083a1507 100644 --- a/src/algorithms/channel/libs/channel_fsm.h +++ b/src/algorithms/channel/libs/channel_fsm.h @@ -34,9 +34,10 @@ #define GNSS_SDR_CHANNEL_FSM_H #include "acquisition_interface.h" +#include "concurrent_queue.h" #include "telemetry_decoder_interface.h" #include "tracking_interface.h" -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <memory> #include <mutex> @@ -54,7 +55,7 @@ public: void set_acquisition(std::shared_ptr<AcquisitionInterface> acquisition); void set_tracking(std::shared_ptr<TrackingInterface> tracking); void set_telemetry(std::shared_ptr<TelemetryDecoderInterface> telemetry); - void set_queue(gr::msg_queue::sptr queue); + void set_queue(std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); void set_channel(uint32_t channel); void start_acquisition(); // FSM EVENTS @@ -76,7 +77,7 @@ private: std::shared_ptr<AcquisitionInterface> acq_; std::shared_ptr<TrackingInterface> trk_; std::shared_ptr<TelemetryDecoderInterface> nav_; - gr::msg_queue::sptr queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; uint32_t channel_; uint32_t d_state; std::mutex mx; diff --git a/src/algorithms/libs/pass_through.cc b/src/algorithms/libs/pass_through.cc index 1a517a96b..7b4144dd1 100644 --- a/src/algorithms/libs/pass_through.cc +++ b/src/algorithms/libs/pass_through.cc @@ -109,6 +109,12 @@ Pass_Through::Pass_Through(ConfigurationInterface* configuration, const std::str } kludge_copy_ = gr::blocks::copy::make(item_size_); + unsigned long int max_source_buffer_samples = configuration->property("GNSS-SDR.max_source_buffer_samples", 0); + if (max_source_buffer_samples > 0) + { + kludge_copy_->set_max_output_buffer(max_source_buffer_samples); + LOG(INFO) << "Set signal conditioner max output buffer to " << max_source_buffer_samples; + } DLOG(INFO) << "kludge_copy(" << kludge_copy_->unique_id() << ")"; if (in_streams_ > 1) { diff --git a/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.cc b/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.cc index 3131d198b..b6abea28f 100644 --- a/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.cc +++ b/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.cc @@ -84,6 +84,9 @@ hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in, this->message_port_register_in(pmt::mp("pvt_to_observables")); this->set_msg_handler(pmt::mp("pvt_to_observables"), boost::bind(&hybrid_observables_gs::msg_handler_pvt_to_observables, this, _1)); + // Send Channel status to gnss_flowgraph + this->message_port_register_out(pmt::mp("status")); + d_dump = dump; d_dump_mat = dump_mat and d_dump; d_dump_filename = std::move(dump_filename); @@ -140,7 +143,7 @@ hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in, T_rx_remnant_to_20ms = 0; T_rx_step_ms = 20; //read from config at the adapter GNSS-SDR.observable_interval_ms!! T_rx_TOW_set = false; - + T_status_report_timer_ms = 0; // rework d_Rx_clock_buffer.set_capacity(10); // 10*20 ms = 200 ms of data in buffer d_Rx_clock_buffer.clear(); // Clear all the elements in the buffer @@ -618,6 +621,20 @@ int hybrid_observables_gs::general_work(int noutput_items __attribute__((unused) { out[n][0] = epoch_data.at(n); } + + //report channel status every second + T_status_report_timer_ms += T_rx_step_ms; + if (T_status_report_timer_ms >= 1000) + { + for (uint32_t n = 0; n < d_nchannels_out; n++) + { + std::shared_ptr<Gnss_Synchro> gnss_synchro_sptr = std::make_shared<Gnss_Synchro>(epoch_data.at(n)); + //publish valid gnss_synchro to the gnss_flowgraph channel status monitor + this->message_port_pub(pmt::mp("status"), pmt::make_any(gnss_synchro_sptr)); + } + T_status_report_timer_ms = 0; + } + if (d_dump) { // MULTIPLEXED FILE RECORDING - Record results to file diff --git a/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.h b/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.h index 39112b160..e2bbfa299 100644 --- a/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.h +++ b/src/algorithms/observables/gnuradio_blocks/hybrid_observables_gs.h @@ -90,6 +90,7 @@ private: uint32_t T_rx_TOW_ms; uint32_t T_rx_remnant_to_20ms; uint32_t T_rx_step_ms; + uint32_t T_status_report_timer_ms; uint32_t d_nchannels_in; uint32_t d_nchannels_out; double T_rx_offset_ms; diff --git a/src/algorithms/signal_generator/adapters/CMakeLists.txt b/src/algorithms/signal_generator/adapters/CMakeLists.txt index fb651871e..a519eaa3f 100644 --- a/src/algorithms/signal_generator/adapters/CMakeLists.txt +++ b/src/algorithms/signal_generator/adapters/CMakeLists.txt @@ -34,6 +34,7 @@ target_link_libraries(signal_generator_adapters Gflags::gflags Glog::glog algorithms_libs + core_receiver ) target_include_directories(signal_generator_adapters diff --git a/src/algorithms/signal_generator/adapters/signal_generator.cc b/src/algorithms/signal_generator/adapters/signal_generator.cc index c4dc9dc3d..31636f246 100644 --- a/src/algorithms/signal_generator/adapters/signal_generator.cc +++ b/src/algorithms/signal_generator/adapters/signal_generator.cc @@ -44,7 +44,7 @@ SignalGenerator::SignalGenerator(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t> > queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./data/gen_source.dat"; diff --git a/src/algorithms/signal_generator/adapters/signal_generator.h b/src/algorithms/signal_generator/adapters/signal_generator.h index e32c431b8..d2adfc27e 100644 --- a/src/algorithms/signal_generator/adapters/signal_generator.h +++ b/src/algorithms/signal_generator/adapters/signal_generator.h @@ -33,12 +33,13 @@ #ifndef GNSS_SDR_SIGNAL_GENERATOR_H_ #define GNSS_SDR_SIGNAL_GENERATOR_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "signal_generator_c.h" #include <gnuradio/blocks/file_sink.h> #include <gnuradio/blocks/vector_to_stream.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <string> #include <vector> @@ -53,7 +54,7 @@ class SignalGenerator : public GNSSBlockInterface public: SignalGenerator(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t> > queue); virtual ~SignalGenerator(); @@ -91,6 +92,6 @@ private: boost::shared_ptr<gr::block> gen_source_; gr::blocks::vector_to_stream::sptr vector_to_stream_; gr::blocks::file_sink::sptr file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t> > queue_; }; #endif /*GNSS_SDR_SIGNAL_GENERATOR_H_*/ diff --git a/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.cc b/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.cc index f83c64f25..dac665cc4 100644 --- a/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.cc +++ b/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.cc @@ -48,7 +48,7 @@ Ad9361FpgaSignalSource::Ad9361FpgaSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, unsigned int out_stream, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./data/signal_source.dat"; diff --git a/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.h b/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.h index 9277c4c2b..e5a917199 100644 --- a/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.h +++ b/src/algorithms/signal_source/adapters/ad9361_fpga_signal_source.h @@ -32,10 +32,11 @@ #ifndef GNSS_SDR_AD9361_FPGA_SIGNAL_SOURCE_H_ #define GNSS_SDR_AD9361_FPGA_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "fpga_switch.h" #include "gnss_block_interface.h" #include <boost/shared_ptr.hpp> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <string> @@ -46,7 +47,7 @@ class Ad9361FpgaSignalSource : public GNSSBlockInterface public: Ad9361FpgaSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); ~Ad9361FpgaSignalSource(); @@ -112,7 +113,7 @@ private: bool dump_; std::string dump_filename_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; std::shared_ptr<Fpga_Switch> switch_fpga; }; diff --git a/src/algorithms/signal_source/adapters/custom_udp_signal_source.cc b/src/algorithms/signal_source/adapters/custom_udp_signal_source.cc index 024966d0e..a130b32f8 100644 --- a/src/algorithms/signal_source/adapters/custom_udp_signal_source.cc +++ b/src/algorithms/signal_source/adapters/custom_udp_signal_source.cc @@ -40,7 +40,7 @@ CustomUDPSignalSource::CustomUDPSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, unsigned int out_stream, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) { // DUMP PARAMETERS std::string empty = ""; diff --git a/src/algorithms/signal_source/adapters/custom_udp_signal_source.h b/src/algorithms/signal_source/adapters/custom_udp_signal_source.h index 37e80caf7..3d8d400de 100644 --- a/src/algorithms/signal_source/adapters/custom_udp_signal_source.h +++ b/src/algorithms/signal_source/adapters/custom_udp_signal_source.h @@ -32,12 +32,13 @@ #ifndef GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H #define GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "gr_complex_ip_packet_source.h" #include <boost/shared_ptr.hpp> #include <gnuradio/blocks/file_sink.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <stdexcept> #include <string> #include <vector> @@ -54,7 +55,7 @@ class CustomUDPSignalSource : public GNSSBlockInterface public: CustomUDPSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~CustomUDPSignalSource(); @@ -98,7 +99,7 @@ private: std::vector<boost::shared_ptr<gr::block>> null_sinks_; Gr_Complex_Ip_Packet_Source::sptr udp_gnss_rx_source_; std::vector<boost::shared_ptr<gr::block>> file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_CUSTOM_UDP_SIGNAL_SOURCE_H */ diff --git a/src/algorithms/signal_source/adapters/file_signal_source.cc b/src/algorithms/signal_source/adapters/file_signal_source.cc index 59ad90f50..b478b6363 100644 --- a/src/algorithms/signal_source/adapters/file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/file_signal_source.cc @@ -44,7 +44,7 @@ FileSignalSource::FileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) { std::string default_filename = "./example_capture.dat"; std::string default_item_type = "short"; diff --git a/src/algorithms/signal_source/adapters/file_signal_source.h b/src/algorithms/signal_source/adapters/file_signal_source.h index bfded2ce8..86d87798a 100644 --- a/src/algorithms/signal_source/adapters/file_signal_source.h +++ b/src/algorithms/signal_source/adapters/file_signal_source.h @@ -35,13 +35,15 @@ #ifndef GNSS_SDR_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_FILE_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include <gnuradio/blocks/file_sink.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/throttle.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> +#include <memory> #include <string> class ConfigurationInterface; @@ -55,7 +57,7 @@ class FileSignalSource : public GNSSBlockInterface public: FileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~FileSignalSource(); @@ -122,7 +124,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; diff --git a/src/algorithms/signal_source/adapters/flexiband_signal_source.cc b/src/algorithms/signal_source/adapters/flexiband_signal_source.cc index ff3f3f9a0..478a6973d 100644 --- a/src/algorithms/signal_source/adapters/flexiband_signal_source.cc +++ b/src/algorithms/signal_source/adapters/flexiband_signal_source.cc @@ -34,7 +34,6 @@ #include "configuration_interface.h" #include <glog/logging.h> #include <gnuradio/blocks/file_sink.h> -#include <gnuradio/msg_queue.h> #include <teleorbit/frontend.h> #include <utility> @@ -43,10 +42,10 @@ FlexibandSignalSource::FlexibandSignalSource(ConfigurationInterface* configurati const std::string& role, unsigned int in_stream, unsigned int out_stream, - gr::msg_queue::sptr queue) : role_(role), - in_stream_(in_stream), - out_stream_(out_stream), - queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), + in_stream_(in_stream), + out_stream_(out_stream), + queue_(std::move(queue)) { std::string default_item_type = "byte"; item_type_ = configuration->property(role + ".item_type", default_item_type); diff --git a/src/algorithms/signal_source/adapters/flexiband_signal_source.h b/src/algorithms/signal_source/adapters/flexiband_signal_source.h index 7da5839a8..56c2aff09 100644 --- a/src/algorithms/signal_source/adapters/flexiband_signal_source.h +++ b/src/algorithms/signal_source/adapters/flexiband_signal_source.h @@ -34,13 +34,14 @@ #ifndef GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_ #define GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include <gnuradio/blocks/char_to_float.h> #include <gnuradio/blocks/file_sink.h> #include <gnuradio/blocks/float_to_complex.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <string> #include <vector> @@ -56,7 +57,7 @@ class FlexibandSignalSource : public GNSSBlockInterface public: FlexibandSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, gr::msg_queue::sptr queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~FlexibandSignalSource(); @@ -109,7 +110,7 @@ private: std::vector<boost::shared_ptr<gr::block>> float_to_complex_; std::vector<gr::blocks::null_sink::sptr> null_sinks_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif // GNSS_SDR_FLEXIBAND_SIGNAL_SOURCE_H_ diff --git a/src/algorithms/signal_source/adapters/fmcomms2_signal_source.cc b/src/algorithms/signal_source/adapters/fmcomms2_signal_source.cc index 704c5b01e..bfc470dbc 100644 --- a/src/algorithms/signal_source/adapters/fmcomms2_signal_source.cc +++ b/src/algorithms/signal_source/adapters/fmcomms2_signal_source.cc @@ -43,7 +43,7 @@ Fmcomms2SignalSource::Fmcomms2SignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, unsigned int out_stream, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./data/signal_source.dat"; diff --git a/src/algorithms/signal_source/adapters/fmcomms2_signal_source.h b/src/algorithms/signal_source/adapters/fmcomms2_signal_source.h index 1388a514d..44870c182 100644 --- a/src/algorithms/signal_source/adapters/fmcomms2_signal_source.h +++ b/src/algorithms/signal_source/adapters/fmcomms2_signal_source.h @@ -41,7 +41,8 @@ #else #include <iio/fmcomms2_source.h> #endif -#include <gnuradio/msg_queue.h> +#include "concurrent_queue.h" +#include <pmt/pmt.h> #include <string> class ConfigurationInterface; @@ -51,7 +52,7 @@ class Fmcomms2SignalSource : public GNSSBlockInterface public: Fmcomms2SignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~Fmcomms2SignalSource(); @@ -122,7 +123,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_FMCOMMS2_SIGNAL_SOURCE_H_*/ diff --git a/src/algorithms/signal_source/adapters/gen_signal_source.cc b/src/algorithms/signal_source/adapters/gen_signal_source.cc index ef8441853..057650ac0 100644 --- a/src/algorithms/signal_source/adapters/gen_signal_source.cc +++ b/src/algorithms/signal_source/adapters/gen_signal_source.cc @@ -42,7 +42,7 @@ // Constructor GenSignalSource::GenSignalSource(GNSSBlockInterface *signal_generator, GNSSBlockInterface *filter, - std::string role, boost::shared_ptr<gr::msg_queue> queue) : signal_generator_(signal_generator), + std::string role, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : signal_generator_(signal_generator), filter_(filter), role_(std::move(role)), queue_(std::move(queue)) diff --git a/src/algorithms/signal_source/adapters/gen_signal_source.h b/src/algorithms/signal_source/adapters/gen_signal_source.h index 49fb25293..d30f8935b 100644 --- a/src/algorithms/signal_source/adapters/gen_signal_source.h +++ b/src/algorithms/signal_source/adapters/gen_signal_source.h @@ -34,8 +34,9 @@ #define GNSS_SDR_GEN_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <string> /*! @@ -47,7 +48,7 @@ class GenSignalSource : public GNSSBlockInterface public: //! Constructor GenSignalSource(GNSSBlockInterface *signal_generator, GNSSBlockInterface *filter, - std::string role, boost::shared_ptr<gr::msg_queue> queue); + std::string role, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); //! Virtual destructor virtual ~GenSignalSource(); @@ -58,20 +59,17 @@ public: gr::basic_block_sptr get_right_block() override; inline std::string role() override { return role_; } - //! Returns "Signal Source" inline std::string implementation() override { return "Signal Source"; } inline size_t item_size() override { return 0; } - inline GNSSBlockInterface *signal_generator() const { return signal_generator_; } - private: GNSSBlockInterface *signal_generator_; GNSSBlockInterface *filter_; std::string role_; std::string implementation_; bool connected_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_GEN_SIGNAL_SOURCE_H*/ diff --git a/src/algorithms/signal_source/adapters/gn3s_signal_source.cc b/src/algorithms/signal_source/adapters/gn3s_signal_source.cc index 3f66591e9..4a699d09d 100644 --- a/src/algorithms/signal_source/adapters/gn3s_signal_source.cc +++ b/src/algorithms/signal_source/adapters/gn3s_signal_source.cc @@ -32,12 +32,11 @@ #include "configuration_interface.h" #include <glog/logging.h> #include <gnuradio/blocks/file_sink.h> -#include <gnuradio/msg_queue.h> #include <gn3s/gn3s_source_cc.h> Gn3sSignalSource::Gn3sSignalSource(ConfigurationInterface* configuration, - std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) + std::string role, unsigned int in_stream, unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { std::string default_item_type = "short"; std::string default_dump_file = "./data/gn3s_source.dat"; diff --git a/src/algorithms/signal_source/adapters/gn3s_signal_source.h b/src/algorithms/signal_source/adapters/gn3s_signal_source.h index df799f019..e34b91afe 100644 --- a/src/algorithms/signal_source/adapters/gn3s_signal_source.h +++ b/src/algorithms/signal_source/adapters/gn3s_signal_source.h @@ -32,10 +32,11 @@ #ifndef GNSS_SDR_GN3S_SIGNAL_SOURCE_H_ #define GNSS_SDR_GN3S_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include <gnuradio/blocks/file_sink.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <string> @@ -49,7 +50,7 @@ class Gn3sSignalSource : public GNSSBlockInterface public: Gn3sSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, - unsigned int out_stream, gr::msg_queue::sptr queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~Gn3sSignalSource(); @@ -87,7 +88,7 @@ private: std::string dump_filename_; gr::block_sptr gn3s_source_; gr::blocks::file_sink::sptr file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_GN3S_SIGNAL_SOURCE_H_*/ diff --git a/src/algorithms/signal_source/adapters/labsat_signal_source.cc b/src/algorithms/signal_source/adapters/labsat_signal_source.cc index 2fb8ba3b7..e6366261a 100644 --- a/src/algorithms/signal_source/adapters/labsat_signal_source.cc +++ b/src/algorithms/signal_source/adapters/labsat_signal_source.cc @@ -37,7 +37,7 @@ LabsatSignalSource::LabsatSignalSource(ConfigurationInterface* configuration, - const std::string& role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) + const std::string& role, unsigned int in_stream, unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./labsat_output.dat"; diff --git a/src/algorithms/signal_source/adapters/labsat_signal_source.h b/src/algorithms/signal_source/adapters/labsat_signal_source.h index 1d9e333bf..9bf5d2057 100644 --- a/src/algorithms/signal_source/adapters/labsat_signal_source.h +++ b/src/algorithms/signal_source/adapters/labsat_signal_source.h @@ -32,10 +32,11 @@ #ifndef GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_ #define GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include <gnuradio/blocks/file_sink.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <string> class ConfigurationInterface; @@ -48,7 +49,7 @@ class LabsatSignalSource : public GNSSBlockInterface public: LabsatSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, gr::msg_queue::sptr queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~LabsatSignalSource(); @@ -86,7 +87,7 @@ private: std::string dump_filename_; gr::block_sptr labsat23_source_; gr::blocks::file_sink::sptr file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_LABSAT_SIGNAL_SOURCE_H_*/ diff --git a/src/algorithms/signal_source/adapters/multichannel_file_signal_source.cc b/src/algorithms/signal_source/adapters/multichannel_file_signal_source.cc index 11efe4fd9..330b3e43c 100644 --- a/src/algorithms/signal_source/adapters/multichannel_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/multichannel_file_signal_source.cc @@ -43,7 +43,7 @@ MultichannelFileSignalSource::MultichannelFileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) { std::string default_filename = "./example_capture.dat"; std::string default_item_type = "short"; diff --git a/src/algorithms/signal_source/adapters/multichannel_file_signal_source.h b/src/algorithms/signal_source/adapters/multichannel_file_signal_source.h index b248073dd..db3a9c57c 100644 --- a/src/algorithms/signal_source/adapters/multichannel_file_signal_source.h +++ b/src/algorithms/signal_source/adapters/multichannel_file_signal_source.h @@ -35,12 +35,13 @@ #ifndef GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include <gnuradio/blocks/file_sink.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/throttle.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <string> #include <vector> @@ -56,7 +57,7 @@ class MultichannelFileSignalSource : public GNSSBlockInterface public: MultichannelFileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~MultichannelFileSignalSource(); @@ -122,7 +123,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr sink_; std::vector<gr::blocks::throttle::sptr> throttle_vec_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; diff --git a/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc b/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc index aa31e75a6..dc00bcecb 100644 --- a/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc @@ -44,7 +44,7 @@ NsrFileSignalSource::NsrFileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) { std::string default_filename = "../data/my_capture.dat"; std::string default_item_type = "byte"; diff --git a/src/algorithms/signal_source/adapters/nsr_file_signal_source.h b/src/algorithms/signal_source/adapters/nsr_file_signal_source.h index a2b3ee547..2efaa09b3 100644 --- a/src/algorithms/signal_source/adapters/nsr_file_signal_source.h +++ b/src/algorithms/signal_source/adapters/nsr_file_signal_source.h @@ -35,13 +35,14 @@ #ifndef GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "unpack_byte_2bit_samples.h" #include <gnuradio/blocks/file_sink.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/throttle.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <string> class ConfigurationInterface; @@ -55,7 +56,7 @@ class NsrFileSignalSource : public GNSSBlockInterface public: NsrFileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~NsrFileSignalSource(); inline std::string role() override @@ -122,7 +123,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; diff --git a/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc b/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc index 32ea28cf0..38f823248 100644 --- a/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc +++ b/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc @@ -42,7 +42,7 @@ OsmosdrSignalSource::OsmosdrSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, unsigned int out_stream, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) { // DUMP PARAMETERS std::string empty = ""; diff --git a/src/algorithms/signal_source/adapters/osmosdr_signal_source.h b/src/algorithms/signal_source/adapters/osmosdr_signal_source.h index 15f38b2a3..8a96f32d6 100644 --- a/src/algorithms/signal_source/adapters/osmosdr_signal_source.h +++ b/src/algorithms/signal_source/adapters/osmosdr_signal_source.h @@ -33,10 +33,11 @@ #ifndef GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_ #define GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include <boost/shared_ptr.hpp> #include <gnuradio/blocks/file_sink.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <osmosdr/source.h> #include <stdexcept> @@ -54,7 +55,7 @@ class OsmosdrSignalSource : public GNSSBlockInterface public: OsmosdrSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~OsmosdrSignalSource(); @@ -110,7 +111,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_*/ diff --git a/src/algorithms/signal_source/adapters/plutosdr_signal_source.cc b/src/algorithms/signal_source/adapters/plutosdr_signal_source.cc index fc41bd3a9..ba6af1fd6 100644 --- a/src/algorithms/signal_source/adapters/plutosdr_signal_source.cc +++ b/src/algorithms/signal_source/adapters/plutosdr_signal_source.cc @@ -39,7 +39,7 @@ PlutosdrSignalSource::PlutosdrSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, unsigned int out_stream, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./data/signal_source.dat"; diff --git a/src/algorithms/signal_source/adapters/plutosdr_signal_source.h b/src/algorithms/signal_source/adapters/plutosdr_signal_source.h index e765ff7c4..bc105d171 100644 --- a/src/algorithms/signal_source/adapters/plutosdr_signal_source.h +++ b/src/algorithms/signal_source/adapters/plutosdr_signal_source.h @@ -40,7 +40,8 @@ #else #include <iio/pluto_source.h> #endif -#include <gnuradio/msg_queue.h> +#include "concurrent_queue.h" +#include <pmt/pmt.h> #include <string> @@ -53,7 +54,7 @@ class PlutosdrSignalSource : public GNSSBlockInterface public: PlutosdrSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~PlutosdrSignalSource(); @@ -109,7 +110,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_PLUTOSDR_SIGNAL_SOURCE_H_*/ diff --git a/src/algorithms/signal_source/adapters/raw_array_signal_source.cc b/src/algorithms/signal_source/adapters/raw_array_signal_source.cc index f9aab0987..d54a7cb19 100644 --- a/src/algorithms/signal_source/adapters/raw_array_signal_source.cc +++ b/src/algorithms/signal_source/adapters/raw_array_signal_source.cc @@ -29,15 +29,16 @@ */ #include "raw_array_signal_source.h" +#include "concurrent_queue.h" #include "configuration_interface.h" #include <glog/logging.h> #include <gnuradio/blocks/file_sink.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <dbfcttc/raw_array.h> RawArraySignalSource::RawArraySignalSource(ConfigurationInterface* configuration, - std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) + std::string role, unsigned int in_stream, unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./data/raw_array_source.dat"; diff --git a/src/algorithms/signal_source/adapters/raw_array_signal_source.h b/src/algorithms/signal_source/adapters/raw_array_signal_source.h index 321895cef..750efb3fe 100644 --- a/src/algorithms/signal_source/adapters/raw_array_signal_source.h +++ b/src/algorithms/signal_source/adapters/raw_array_signal_source.h @@ -32,10 +32,11 @@ #ifndef GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_ #define GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include <gnuradio/blocks/file_sink.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <string> class ConfigurationInterface; @@ -48,7 +49,7 @@ class RawArraySignalSource : public GNSSBlockInterface public: RawArraySignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, - unsigned int out_stream, gr::msg_queue::sptr queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~RawArraySignalSource(); @@ -87,7 +88,7 @@ private: std::string eth_device_; gr::block_sptr raw_array_source_; gr::blocks::file_sink::sptr file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_RAW_ARRAY_SIGNAL_SOURCE_H_*/ diff --git a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc index 2b9574708..478e6b1c7 100644 --- a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc +++ b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc @@ -45,7 +45,7 @@ RtlTcpSignalSource::RtlTcpSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, unsigned int out_stream, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) diff --git a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h index 74f2b02d5..2fcb9d871 100644 --- a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h +++ b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h @@ -32,13 +32,14 @@ #ifndef GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H #define GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "rtl_tcp_signal_source_c.h" #include <boost/shared_ptr.hpp> #include <gnuradio/blocks/deinterleave.h> #include <gnuradio/blocks/file_sink.h> #include <gnuradio/blocks/float_to_complex.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <stdexcept> #include <string> @@ -57,7 +58,7 @@ public: const std::string& role, unsigned int in_stream, unsigned int out_stream, - boost::shared_ptr<gr::msg_queue> queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~RtlTcpSignalSource(); @@ -113,7 +114,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H */ diff --git a/src/algorithms/signal_source/adapters/spir_file_signal_source.cc b/src/algorithms/signal_source/adapters/spir_file_signal_source.cc index 52964abba..91287020c 100644 --- a/src/algorithms/signal_source/adapters/spir_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/spir_file_signal_source.cc @@ -43,7 +43,7 @@ SpirFileSignalSource::SpirFileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) { std::string default_filename = "../data/my_capture.dat"; std::string default_item_type = "int"; diff --git a/src/algorithms/signal_source/adapters/spir_file_signal_source.h b/src/algorithms/signal_source/adapters/spir_file_signal_source.h index ad76ce23b..09aff8c09 100644 --- a/src/algorithms/signal_source/adapters/spir_file_signal_source.h +++ b/src/algorithms/signal_source/adapters/spir_file_signal_source.h @@ -32,13 +32,14 @@ #ifndef GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "unpack_intspir_1bit_samples.h" #include <gnuradio/blocks/file_sink.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/throttle.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <string> @@ -53,7 +54,7 @@ class SpirFileSignalSource : public GNSSBlockInterface public: SpirFileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~SpirFileSignalSource(); inline std::string role() override @@ -120,7 +121,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; diff --git a/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.cc b/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.cc index 7e1c3f1ce..1ba2d5bf0 100644 --- a/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.cc @@ -40,7 +40,7 @@ SpirGSS6450FileSignalSource::SpirGSS6450FileSignalSource(ConfigurationInterface* configuration, - const std::string& role, uint32_t in_streams, uint32_t out_streams, gr::msg_queue::sptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) + const std::string& role, uint32_t in_streams, uint32_t out_streams, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) { std::string default_filename = "../data/my_capture.dat"; std::string default_dump_filename = "../data/my_capture_dump.dat"; diff --git a/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.h b/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.h index 0757c24af..61edd479c 100644 --- a/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.h +++ b/src/algorithms/signal_source/adapters/spir_gss6450_file_signal_source.h @@ -32,6 +32,7 @@ #ifndef GNSS_SDR_SPIR_GSS6450_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_SPIR_GSS6450_FILE_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "unpack_spir_gss6450_samples.h" @@ -42,7 +43,7 @@ #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/throttle.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <string> #include <vector> @@ -58,7 +59,7 @@ class SpirGSS6450FileSignalSource : public GNSSBlockInterface { public: SpirGSS6450FileSignalSource(ConfigurationInterface* configuration, const std::string& role, - uint32_t in_streams, uint32_t out_streams, gr::msg_queue::sptr queue); + uint32_t in_streams, uint32_t out_streams, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~SpirGSS6450FileSignalSource(); inline std::string role() override @@ -131,7 +132,7 @@ private: std::vector<boost::shared_ptr<gr::block>> valve_vec_; std::vector<gr::blocks::file_sink::sptr> sink_vec_; std::vector<gr::blocks::throttle::sptr> throttle_vec_; - gr::msg_queue::sptr queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; size_t item_size_; }; diff --git a/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc b/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc index 604f9c536..9e0b802d4 100644 --- a/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc @@ -45,7 +45,7 @@ TwoBitCpxFileSignalSource::TwoBitCpxFileSignalSource(ConfigurationInterface* con const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) diff --git a/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.h b/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.h index a66a87965..dea315cec 100644 --- a/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.h +++ b/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.h @@ -34,6 +34,7 @@ #ifndef GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "unpack_byte_2bit_cpx_samples.h" #include <gnuradio/blocks/file_sink.h> @@ -41,7 +42,7 @@ #include <gnuradio/blocks/interleaved_short_to_complex.h> #include <gnuradio/blocks/throttle.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <string> @@ -59,7 +60,7 @@ public: const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~TwoBitCpxFileSignalSource(); inline std::string role() override @@ -127,7 +128,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; diff --git a/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.cc b/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.cc index 684cb5b86..4b0c00345 100644 --- a/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.cc +++ b/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.cc @@ -47,7 +47,7 @@ TwoBitPackedFileSignalSource::TwoBitPackedFileSignalSource(ConfigurationInterfac const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue)) diff --git a/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.h b/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.h index 1e98d737b..ea2bb2d5a 100644 --- a/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.h +++ b/src/algorithms/signal_source/adapters/two_bit_packed_file_signal_source.h @@ -35,6 +35,7 @@ #ifndef GNSS_SDR_TWO_BIT_PACKED_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_TWO_BIT_PACKED_FILE_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "unpack_2bit_samples.h" #include <gnuradio/blocks/file_sink.h> @@ -42,7 +43,7 @@ #include <gnuradio/blocks/interleaved_char_to_complex.h> #include <gnuradio/blocks/throttle.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <string> @@ -58,7 +59,7 @@ class TwoBitPackedFileSignalSource : public GNSSBlockInterface public: TwoBitPackedFileSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_streams, unsigned int out_streams, - boost::shared_ptr<gr::msg_queue> queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~TwoBitPackedFileSignalSource(); inline std::string role() override @@ -146,7 +147,7 @@ private: boost::shared_ptr<gr::block> valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; size_t item_size_; bool big_endian_items_; bool big_endian_bytes_; diff --git a/src/algorithms/signal_source/adapters/uhd_signal_source.cc b/src/algorithms/signal_source/adapters/uhd_signal_source.cc index ee58eb551..646d2ad00 100644 --- a/src/algorithms/signal_source/adapters/uhd_signal_source.cc +++ b/src/algorithms/signal_source/adapters/uhd_signal_source.cc @@ -42,7 +42,7 @@ UhdSignalSource::UhdSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, unsigned int out_stream, - boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(std::move(queue)) { // DUMP PARAMETERS std::string empty = ""; diff --git a/src/algorithms/signal_source/adapters/uhd_signal_source.h b/src/algorithms/signal_source/adapters/uhd_signal_source.h index 50d233c2e..232f6934f 100644 --- a/src/algorithms/signal_source/adapters/uhd_signal_source.h +++ b/src/algorithms/signal_source/adapters/uhd_signal_source.h @@ -31,12 +31,13 @@ #ifndef GNSS_SDR_UHD_SIGNAL_SOURCE_H_ #define GNSS_SDR_UHD_SIGNAL_SOURCE_H_ +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include <boost/shared_ptr.hpp> #include <gnuradio/blocks/file_sink.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/uhd/usrp_source.h> +#include <pmt/pmt.h> #include <cstdint> #include <string> #include <vector> @@ -52,7 +53,7 @@ class UhdSignalSource : public GNSSBlockInterface public: UhdSignalSource(ConfigurationInterface* configuration, const std::string& role, unsigned int in_stream, - unsigned int out_stream, boost::shared_ptr<gr::msg_queue> queue); + unsigned int out_stream, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); virtual ~UhdSignalSource(); @@ -107,7 +108,7 @@ private: std::vector<boost::shared_ptr<gr::block>> valve_; std::vector<gr::blocks::file_sink::sptr> file_sink_; - boost::shared_ptr<gr::msg_queue> queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; }; #endif /*GNSS_SDR_UHD_SIGNAL_SOURCE_H_*/ diff --git a/src/algorithms/signal_source/gnuradio_blocks/labsat23_source.cc b/src/algorithms/signal_source/gnuradio_blocks/labsat23_source.cc index 06972a25a..366eb558f 100644 --- a/src/algorithms/signal_source/gnuradio_blocks/labsat23_source.cc +++ b/src/algorithms/signal_source/gnuradio_blocks/labsat23_source.cc @@ -30,7 +30,8 @@ #include "labsat23_source.h" -#include "control_message_factory.h" +#include "command_event.h" +#include <boost/any.hpp> #include <gnuradio/io_signature.h> #include <array> #include <exception> @@ -39,7 +40,7 @@ #include <utility> -labsat23_source_sptr labsat23_make_source_sptr(const char *signal_file_basename, int channel_selector, gr::msg_queue::sptr queue) +labsat23_source_sptr labsat23_make_source_sptr(const char *signal_file_basename, int channel_selector, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { return labsat23_source_sptr(new labsat23_source(signal_file_basename, channel_selector, std::move(queue))); } @@ -47,10 +48,10 @@ labsat23_source_sptr labsat23_make_source_sptr(const char *signal_file_basename, labsat23_source::labsat23_source(const char *signal_file_basename, int channel_selector, - gr::msg_queue::sptr queue) : gr::block("labsat23_source", - gr::io_signature::make(0, 0, 0), - gr::io_signature::make(1, 1, sizeof(gr_complex))), - d_queue(std::move(queue)) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) : gr::block("labsat23_source", + gr::io_signature::make(0, 0, 0), + gr::io_signature::make(1, 1, sizeof(gr_complex))), + d_queue(std::move(queue)) { if (channel_selector < 1 or channel_selector > 2) { @@ -467,9 +468,8 @@ int labsat23_source::general_work(int noutput_items, { std::cout << "End of file reached, LabSat source stop" << std::endl; } - auto *cmf = new ControlMessageFactory(); - d_queue->handle(cmf->GetQueueMessage(200, 0)); - delete cmf; + + d_queue->push(pmt::make_any(command_event_make(200, 0))); return -1; } } @@ -528,9 +528,7 @@ int labsat23_source::general_work(int noutput_items, { std::cout << "End of file reached, LabSat source stop" << std::endl; } - auto *cmf = new ControlMessageFactory(); - d_queue->handle(cmf->GetQueueMessage(200, 0)); - delete cmf; + d_queue->push(pmt::make_any(command_event_make(200, 0))); return -1; } } diff --git a/src/algorithms/signal_source/gnuradio_blocks/labsat23_source.h b/src/algorithms/signal_source/gnuradio_blocks/labsat23_source.h index a09c0f3a8..49c74bc61 100644 --- a/src/algorithms/signal_source/gnuradio_blocks/labsat23_source.h +++ b/src/algorithms/signal_source/gnuradio_blocks/labsat23_source.h @@ -31,8 +31,9 @@ #ifndef GNSS_SDR_LABSAT23_SOURCE_H #define GNSS_SDR_LABSAT23_SOURCE_H +#include "concurrent_queue.h" #include <gnuradio/block.h> -#include <gnuradio/msg_queue.h> // for msg_queue, msg_queue::sptr +#include <pmt/pmt.h> #include <cstdint> #include <fstream> #include <string> @@ -45,7 +46,7 @@ using labsat23_source_sptr = boost::shared_ptr<labsat23_source>; labsat23_source_sptr labsat23_make_source_sptr( const char *signal_file_basename, int channel_selector, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); /*! * \brief This class implements conversion between Labsat2 and 3 format byte packet samples to gr_complex @@ -64,11 +65,11 @@ private: friend labsat23_source_sptr labsat23_make_source_sptr( const char *signal_file_basename, int channel_selector, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); labsat23_source(const char *signal_file_basename, int channel_selector, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::string generate_filename(); void decode_samples_one_channel(int16_t input_short, gr_complex *out, int type); @@ -82,7 +83,7 @@ private: std::ifstream *binary_input_file; uint8_t d_ref_clock; uint8_t d_bits_per_sample; - gr::msg_queue::sptr d_queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> d_queue; }; #endif diff --git a/src/algorithms/signal_source/libs/CMakeLists.txt b/src/algorithms/signal_source/libs/CMakeLists.txt index f6015ec59..1045967b4 100644 --- a/src/algorithms/signal_source/libs/CMakeLists.txt +++ b/src/algorithms/signal_source/libs/CMakeLists.txt @@ -71,10 +71,10 @@ target_link_libraries(signal_source_libs PUBLIC Boost::boost Gnuradio::runtime + core_receiver PRIVATE Gflags::gflags Glog::glog - core_receiver ) if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2) diff --git a/src/algorithms/signal_source/libs/gnss_sdr_valve.cc b/src/algorithms/signal_source/libs/gnss_sdr_valve.cc index 615cb65b7..7a5fc18a9 100644 --- a/src/algorithms/signal_source/libs/gnss_sdr_valve.cc +++ b/src/algorithms/signal_source/libs/gnss_sdr_valve.cc @@ -32,17 +32,17 @@ */ #include "gnss_sdr_valve.h" -#include "control_message_factory.h" // for ControlMessageFactory -#include <glog/logging.h> // for LOG -#include <gnuradio/io_signature.h> // for io_signature -#include <algorithm> // for min -#include <cstring> // for memcpy -#include <unistd.h> // for usleep +#include "command_event.h" +#include <glog/logging.h> // for LOG +#include <gnuradio/io_signature.h> // for io_signature +#include <algorithm> // for min +#include <cstring> // for memcpy +#include <unistd.h> // for usleep #include <utility> Gnss_Sdr_Valve::Gnss_Sdr_Valve(size_t sizeof_stream_item, uint64_t nitems, - gr::msg_queue::sptr queue, + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, bool stop_flowgraph) : gr::sync_block("valve", gr::io_signature::make(1, 20, sizeof_stream_item), gr::io_signature::make(1, 20, sizeof_stream_item)), @@ -55,14 +55,14 @@ Gnss_Sdr_Valve::Gnss_Sdr_Valve(size_t sizeof_stream_item, } -boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(size_t sizeof_stream_item, uint64_t nitems, gr::msg_queue::sptr queue, bool stop_flowgraph) +boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(size_t sizeof_stream_item, uint64_t nitems, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, bool stop_flowgraph) { boost::shared_ptr<Gnss_Sdr_Valve> valve_(new Gnss_Sdr_Valve(sizeof_stream_item, nitems, std::move(queue), stop_flowgraph)); return valve_; } -boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(size_t sizeof_stream_item, uint64_t nitems, gr::msg_queue::sptr queue) +boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve(size_t sizeof_stream_item, uint64_t nitems, std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { boost::shared_ptr<Gnss_Sdr_Valve> valve_(new Gnss_Sdr_Valve(sizeof_stream_item, nitems, std::move(queue), true)); return valve_; @@ -83,10 +83,8 @@ int Gnss_Sdr_Valve::work(int noutput_items, { if (d_ncopied_items >= d_nitems) { - auto *cmf = new ControlMessageFactory(); - d_queue->handle(cmf->GetQueueMessage(200, 0)); LOG(INFO) << "Stopping receiver, " << d_ncopied_items << " samples processed"; - delete cmf; + d_queue->push(pmt::make_any(command_event_make(200, 0))); if (d_stop_flowgraph) { return -1; // Done! diff --git a/src/algorithms/signal_source/libs/gnss_sdr_valve.h b/src/algorithms/signal_source/libs/gnss_sdr_valve.h index b56807c2b..6c28f28f5 100644 --- a/src/algorithms/signal_source/libs/gnss_sdr_valve.h +++ b/src/algorithms/signal_source/libs/gnss_sdr_valve.h @@ -34,11 +34,12 @@ #ifndef GNSS_SDR_GNSS_SDR_VALVE_H_ #define GNSS_SDR_GNSS_SDR_VALVE_H_ +#include "concurrent_queue.h" #include <boost/shared_ptr.hpp> -#include <gnuradio/msg_queue.h> // for msg_queue, msg_queue::sptr #include <gnuradio/sync_block.h> // for sync_block #include <gnuradio/types.h> // for gr_vector_const_void_star -#include <cstddef> // for size_t +#include <pmt/pmt.h> +#include <cstddef> // for size_t #include <cstdint> class Gnss_Sdr_Valve; @@ -46,12 +47,12 @@ class Gnss_Sdr_Valve; boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve( size_t sizeof_stream_item, uint64_t nitems, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve( size_t sizeof_stream_item, uint64_t nitems, - gr::msg_queue::sptr queue, + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, bool stop_flowgraph); /*! @@ -71,21 +72,21 @@ private: friend boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve( size_t sizeof_stream_item, uint64_t nitems, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); friend boost::shared_ptr<Gnss_Sdr_Valve> gnss_sdr_make_valve( size_t sizeof_stream_item, uint64_t nitems, - gr::msg_queue::sptr queue, + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, bool stop_flowgraph); Gnss_Sdr_Valve(size_t sizeof_stream_item, uint64_t nitems, - gr::msg_queue::sptr queue, bool stop_flowgraph); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, bool stop_flowgraph); uint64_t d_nitems; uint64_t d_ncopied_items; - gr::msg_queue::sptr d_queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> d_queue; bool d_stop_flowgraph; bool d_open_valve; }; diff --git a/src/core/libs/CMakeLists.txt b/src/core/libs/CMakeLists.txt index a61dd6e2b..6a074d5a7 100644 --- a/src/core/libs/CMakeLists.txt +++ b/src/core/libs/CMakeLists.txt @@ -24,6 +24,8 @@ set(CORE_LIBS_SOURCES string_converter.cc gnss_sdr_supl_client.cc gnss_sdr_sample_counter.cc + channel_status_msg_receiver.cc + channel_event.cc ) set(CORE_LIBS_HEADERS @@ -32,6 +34,8 @@ set(CORE_LIBS_HEADERS string_converter.h gnss_sdr_supl_client.h gnss_sdr_sample_counter.h + channel_status_msg_receiver.h + channel_event.h ) if(ENABLE_FPGA) @@ -60,6 +64,7 @@ target_link_libraries(core_libs Gnuradio::runtime core_libs_supl core_system_parameters + pvt_libs PRIVATE Boost::serialization Gflags::gflags diff --git a/src/core/libs/channel_event.cc b/src/core/libs/channel_event.cc new file mode 100644 index 000000000..7c6862d76 --- /dev/null +++ b/src/core/libs/channel_event.cc @@ -0,0 +1,42 @@ +/*! + * \file channel_event.cc + * \brief Class that defines a channel event + * \author Javier Arribas, 2019. jarribas(at)cttc.es + * + * ------------------------------------------------------------------------- + * + * Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors) + * + * GNSS-SDR is a software defined Global Navigation + * Satellite Systems receiver + * + * This file is part of GNSS-SDR. + * + * GNSS-SDR is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GNSS-SDR is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. + * + * ------------------------------------------------------------------------- + */ + +#include "channel_event.h" + +channel_event_sptr channel_event_make(int channel_id, int event_type) +{ + return channel_event_sptr(new channel_event(channel_id, event_type)); +} + +channel_event::channel_event(int channel_id_, int event_type_) +{ + channel_id = channel_id_; + event_type = event_type_; +} diff --git a/src/core/libs/channel_event.h b/src/core/libs/channel_event.h new file mode 100644 index 000000000..51c1a3a8f --- /dev/null +++ b/src/core/libs/channel_event.h @@ -0,0 +1,53 @@ +/*! + * \file channel_event.h + * \brief Class that defines a channel event + * \author Javier Arribas, 2019. jarribas(at)cttc.es + * + * ------------------------------------------------------------------------- + * + * Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors) + * + * GNSS-SDR is a software defined Global Navigation + * Satellite Systems receiver + * + * This file is part of GNSS-SDR. + * + * GNSS-SDR is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GNSS-SDR is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. + * + * ------------------------------------------------------------------------- + */ + +#ifndef GNSS_SDR_CHANNEL_EVENT_H +#define GNSS_SDR_CHANNEL_EVENT_H + +#include <memory> + +class channel_event; + +using channel_event_sptr = std::shared_ptr<channel_event>; + +channel_event_sptr channel_event_make(int channel_id, int event_type); + +class channel_event +{ +public: + int channel_id; + int event_type; +private: + friend channel_event_sptr channel_event_make(int channel_id, int event_type); + channel_event(int channel_id_, int event_type_); + +}; + +#endif diff --git a/src/core/libs/channel_status_msg_receiver.cc b/src/core/libs/channel_status_msg_receiver.cc new file mode 100644 index 000000000..965a99a46 --- /dev/null +++ b/src/core/libs/channel_status_msg_receiver.cc @@ -0,0 +1,116 @@ +/*! + * \file channel_status_msg_receiver.cc + * \brief GNU Radio block that receives asynchronous channel messages from acquisition and tracking blocks + * \author Javier Arribas, 2016. jarribas(at)cttc.es + * + * ------------------------------------------------------------------------- + * + * Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors) + * + * GNSS-SDR is a software defined Global Navigation + * Satellite Systems receiver + * + * This file is part of GNSS-SDR. + * + * GNSS-SDR is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GNSS-SDR is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. + * + * ------------------------------------------------------------------------- + */ + + +#include "channel_status_msg_receiver.h" +#include <boost/any.hpp> +#include <boost/bind.hpp> +#include <glog/logging.h> +#include <gnuradio/gr_complex.h> +#include <gnuradio/io_signature.h> +#include <cstdint> +#include <utility> + + +channel_status_msg_receiver_sptr channel_status_msg_receiver_make() +{ + return channel_status_msg_receiver_sptr(new channel_status_msg_receiver()); +} + + +channel_status_msg_receiver::channel_status_msg_receiver() : gr::block("channel_status_msg_receiver", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)) +{ + this->message_port_register_in(pmt::mp("status")); + this->set_msg_handler(pmt::mp("status"), boost::bind(&channel_status_msg_receiver::msg_handler_events, this, _1)); + d_pvt_status.RX_time = -1; // to indicate that the PVT is not available +} + + +channel_status_msg_receiver::~channel_status_msg_receiver() = default; + + +void channel_status_msg_receiver::msg_handler_events(pmt::pmt_t msg) +{ + gr::thread::scoped_lock lock(d_setlock); // require mutex with msg_handler_events function called by the scheduler + try + { + // ************* Gnss_Synchro received ***************** + if (pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gnss_Synchro>)) + { + std::shared_ptr<Gnss_Synchro> gnss_synchro_obj; + gnss_synchro_obj = boost::any_cast<std::shared_ptr<Gnss_Synchro>>(pmt::any_ref(msg)); + if (gnss_synchro_obj->Flag_valid_pseudorange == true) + { + d_channel_status_map[gnss_synchro_obj->Channel_ID] = gnss_synchro_obj; + } + else + { + d_channel_status_map.erase(gnss_synchro_obj->Channel_ID); + } + + // std::cout << "-------- \n\n"; + // for (std::map<int, std::shared_ptr<Gnss_Synchro>>::iterator it = d_channel_status_map.begin(); it != d_channel_status_map.end(); ++it) + // { + // std::cout << " Channel: " << it->first << " => Doppler: " << it->second->Carrier_Doppler_hz << "[Hz] \n"; + // } + // std::cout << "-------- \n\n"; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr<Monitor_Pvt>)) + { + // ************* Monitor_Pvt received ***************** + std::shared_ptr<Monitor_Pvt> monitor_pvt_obj; + monitor_pvt_obj = boost::any_cast<std::shared_ptr<Monitor_Pvt>>(pmt::any_ref(msg)); + d_pvt_status = *monitor_pvt_obj.get(); + // + // std::cout << "-------- \n\n"; + // std::cout << "PVT TOW: " << d_pvt_status->TOW_at_current_symbol_ms << std::endl; + // std::cout << "-------- \n\n"; + } + else + { + LOG(WARNING) << "channel_status_msg_receiver unknown object type!"; + } + } + catch (boost::bad_any_cast& e) + { + LOG(WARNING) << "channel_status_msg_receiver Bad any cast!"; + } +} + +std::map<int, std::shared_ptr<Gnss_Synchro>> channel_status_msg_receiver::get_current_status_map() +{ + gr::thread::scoped_lock lock(d_setlock); // require mutex with msg_handler_events function called by the scheduler + return d_channel_status_map; +} +Monitor_Pvt channel_status_msg_receiver::get_current_status_pvt() +{ + gr::thread::scoped_lock lock(d_setlock); // require mutex with msg_handler_events function called by the scheduler + return d_pvt_status; +} diff --git a/src/core/libs/channel_status_msg_receiver.h b/src/core/libs/channel_status_msg_receiver.h new file mode 100644 index 000000000..283fc6f0e --- /dev/null +++ b/src/core/libs/channel_status_msg_receiver.h @@ -0,0 +1,71 @@ +/*! + * \file channel_msg_receiver_cc.h + * \brief GNU Radio block that receives asynchronous channel messages from acquisition and tracking blocks + * \author Javier Arribas, 2016. jarribas(at)cttc.es + * + * ------------------------------------------------------------------------- + * + * Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors) + * + * GNSS-SDR is a software defined Global Navigation + * Satellite Systems receiver + * + * This file is part of GNSS-SDR. + * + * GNSS-SDR is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GNSS-SDR is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. + * + * ------------------------------------------------------------------------- + */ + +#ifndef GNSS_SDR_CHANNEL_STATUS_MSG_RECEIVER_CC_H +#define GNSS_SDR_CHANNEL_STATUS_MSG_RECEIVER_CC_H + +#include "gnss_synchro.h" +#include "monitor_pvt.h" +#include <gnuradio/block.h> +#include <pmt/pmt.h> +#include <memory> + +class channel_status_msg_receiver; + +using channel_status_msg_receiver_sptr = boost::shared_ptr<channel_status_msg_receiver>; + +channel_status_msg_receiver_sptr channel_status_msg_receiver_make(); + +/*! + * \brief GNU Radio block that receives asynchronous channel messages from tlm blocks + */ +class channel_status_msg_receiver : public gr::block +{ +public: + ~channel_status_msg_receiver(); //!< Default destructor + /*! + * \brief return the current status map of all channels with valid telemetry + */ + std::map<int, std::shared_ptr<Gnss_Synchro>> get_current_status_map(); + /*! + * \brief return the current receiver PVT + */ + Monitor_Pvt get_current_status_pvt(); + +private: + friend channel_status_msg_receiver_sptr channel_status_msg_receiver_make(); + channel_status_msg_receiver(); + std::map<int, std::shared_ptr<Gnss_Synchro>> d_channel_status_map; + + Monitor_Pvt d_pvt_status; + void msg_handler_events(pmt::pmt_t msg); +}; + +#endif diff --git a/src/core/receiver/CMakeLists.txt b/src/core/receiver/CMakeLists.txt index 83d684906..20c8b7ea0 100644 --- a/src/core/receiver/CMakeLists.txt +++ b/src/core/receiver/CMakeLists.txt @@ -19,17 +19,16 @@ set(GNSS_RECEIVER_SOURCES control_thread.cc - control_message_factory.cc file_configuration.cc gnss_block_factory.cc gnss_flowgraph.cc in_memory_configuration.cc tcp_cmd_interface.cc + command_event.cc ) set(GNSS_RECEIVER_HEADERS control_thread.h - control_message_factory.h file_configuration.h gnss_block_factory.h gnss_flowgraph.h @@ -38,6 +37,7 @@ set(GNSS_RECEIVER_HEADERS concurrent_map.h concurrent_queue.h control_message.h + command_event.h ) list(SORT GNSS_RECEIVER_HEADERS) diff --git a/src/core/receiver/command_event.cc b/src/core/receiver/command_event.cc new file mode 100644 index 000000000..771061255 --- /dev/null +++ b/src/core/receiver/command_event.cc @@ -0,0 +1,42 @@ +/*! + * \file command_event.cc + * \brief Class that defines a receiver command event + * \author Javier Arribas, 2019. jarribas(at)cttc.es + * + * ------------------------------------------------------------------------- + * + * Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors) + * + * GNSS-SDR is a software defined Global Navigation + * Satellite Systems receiver + * + * This file is part of GNSS-SDR. + * + * GNSS-SDR is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GNSS-SDR is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. + * + * ------------------------------------------------------------------------- + */ + +#include "command_event.h" + +command_event_sptr command_event_make(int command_id, int event_type) +{ + return command_event_sptr(new command_event(command_id, event_type)); +} + +command_event::command_event(int command_id_, int event_type_) +{ + command_id = command_id_; + event_type = event_type_; +} diff --git a/src/core/receiver/command_event.h b/src/core/receiver/command_event.h new file mode 100644 index 000000000..094281578 --- /dev/null +++ b/src/core/receiver/command_event.h @@ -0,0 +1,53 @@ +/*! + * \file command_event.h + * \brief Class that defines a receiver command event + * \author Javier Arribas, 2019. jarribas(at)cttc.es + * + * ------------------------------------------------------------------------- + * + * Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors) + * + * GNSS-SDR is a software defined Global Navigation + * Satellite Systems receiver + * + * This file is part of GNSS-SDR. + * + * GNSS-SDR is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GNSS-SDR is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. + * + * ------------------------------------------------------------------------- + */ + +#ifndef GNSS_SDR_command_EVENT_H +#define GNSS_SDR_command_EVENT_H + +#include <memory> + +class command_event; + +using command_event_sptr = std::shared_ptr<command_event>; + +command_event_sptr command_event_make(int command_id, int event_type); + +class command_event +{ +public: + int command_id; + int event_type; + +private: + friend command_event_sptr command_event_make(int command_id, int event_type); + command_event(int command_id_, int event_type_); +}; + +#endif diff --git a/src/core/receiver/control_message_factory.cc b/src/core/receiver/control_message_factory.cc deleted file mode 100644 index 566f884a4..000000000 --- a/src/core/receiver/control_message_factory.cc +++ /dev/null @@ -1,72 +0,0 @@ -/*! - * \file control_message_factory.cc - * \brief Implementation of a Control Message Factory - * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com - * - * ------------------------------------------------------------------------- - * - * Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors) - * - * GNSS-SDR is a software defined Global Navigation - * Satellite Systems receiver - * - * This file is part of GNSS-SDR. - * - * GNSS-SDR is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GNSS-SDR is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. - * - * ------------------------------------------------------------------------- - */ - -#include "control_message_factory.h" -#include <glog/logging.h> -#include <cstring> // for memcpy -#include <ostream> // for operator<<, basic_ostream - -// Constructor -ControlMessageFactory::ControlMessageFactory() = default; - - -// Destructor -ControlMessageFactory::~ControlMessageFactory() = default; - - -gr::message::sptr ControlMessageFactory::GetQueueMessage(unsigned int who, unsigned int what) -{ - std::shared_ptr<ControlMessage> control_message = std::make_shared<ControlMessage>(); - control_message->who = who; - control_message->what = what; - gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage)); - memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage)); - return queue_message; -} - - -std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> ControlMessageFactory::GetControlMessages(const gr::message::sptr queue_message) // NOLINT(performance-unnecessary-value-param) -{ - std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages = std::make_shared<std::vector<std::shared_ptr<ControlMessage>>>(); - unsigned int control_messages_count = queue_message->length() / sizeof(ControlMessage); - if (queue_message->length() % sizeof(ControlMessage) != 0) - { - LOG(WARNING) << "Queue message has size " << queue_message->length() << ", which is not" - << " multiple of control message size " << sizeof(ControlMessage); - LOG(WARNING) << "Ignoring this queue message to prevent unexpected results."; - return control_messages; - } - for (unsigned int i = 0; i < control_messages_count; i++) - { - control_messages->push_back(std::make_shared<ControlMessage>()); - memcpy(control_messages->at(i).get(), queue_message->msg() + (i * sizeof(ControlMessage)), sizeof(ControlMessage)); - } - return control_messages; -} diff --git a/src/core/receiver/control_message_factory.h b/src/core/receiver/control_message_factory.h deleted file mode 100644 index f8a4666f6..000000000 --- a/src/core/receiver/control_message_factory.h +++ /dev/null @@ -1,64 +0,0 @@ -/*! - * \file control_message_factory.h - * \brief Interface of a factory for control messages. - * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com - * - * ------------------------------------------------------------------------- - * - * Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors) - * - * GNSS-SDR is a software defined Global Navigation - * Satellite Systems receiver - * - * This file is part of GNSS-SDR. - * - * GNSS-SDR is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GNSS-SDR is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. - * - * ------------------------------------------------------------------------- - */ - -#ifndef GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_ -#define GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_ - -#include <gnuradio/message.h> -#include <memory> -#include <vector> - -//! Message described by who sent it and what it says -typedef struct control_message -{ - unsigned int who; - unsigned int what; -} ControlMessage; - - -/*! - * \brief This class implements a factory for Control Messages. - * - * It encapsulates the complexity behind getting Queue Messages and associated Control Messages - */ -class ControlMessageFactory -{ -public: - //! Constructor - ControlMessageFactory(); - - //! Virtual destructor - virtual ~ControlMessageFactory(); - - gr::message::sptr GetQueueMessage(unsigned int who, unsigned int what); - std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> GetControlMessages(const gr::message::sptr queue_message); // NOLINT(performance-unnecessary-value-param) -}; - -#endif /*GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_*/ diff --git a/src/core/receiver/control_thread.cc b/src/core/receiver/control_thread.cc index 384d6f041..8b4a7ffc9 100644 --- a/src/core/receiver/control_thread.cc +++ b/src/core/receiver/control_thread.cc @@ -33,10 +33,10 @@ */ #include "control_thread.h" +#include "channel_event.h" +#include "command_event.h" #include "concurrent_map.h" -#include "concurrent_queue.h" #include "configuration_interface.h" -#include "control_message_factory.h" #include "file_configuration.h" #include "galileo_almanac.h" #include "galileo_ephemeris.h" @@ -62,7 +62,6 @@ #include "rtklib_rtkcmn.h" // for utc2gpst #include <boost/lexical_cast.hpp> // for bad_lexical_cast #include <glog/logging.h> // for LOG -#include <gnuradio/message.h> // for message::sptr #include <pmt/pmt.h> // for make_any #include <algorithm> // for find, min #include <chrono> // for milliseconds @@ -110,7 +109,7 @@ ControlThread::ControlThread(std::shared_ptr<ConfigurationInterface> configurati void ControlThread::init() { // Instantiates a control queue, a GNSS flowgraph, and a control message factory - control_queue_ = gr::msg_queue::make(0); + control_queue_ = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); cmd_interface_.set_msg_queue(control_queue_); //set also the queue pointer for the telecommand thread try { @@ -120,7 +119,6 @@ void ControlThread::init() { std::cout << "Caught bad lexical cast with error " << e.what() << std::endl; } - control_message_factory_ = std::make_shared<ControlMessageFactory>(); stop_ = false; processed_control_messages_ = 0; applied_actions_ = 0; @@ -226,6 +224,49 @@ void ControlThread::telecommand_listener() } } +void ControlThread::event_dispatcher(bool &valid_event, pmt::pmt_t &msg) +{ + if (valid_event) + { + if (pmt::any_ref(msg).type() == typeid(channel_event_sptr)) + { + channel_event_sptr new_event; + new_event = boost::any_cast<channel_event_sptr>(pmt::any_ref(msg)); + DLOG(INFO) << "New channel event rx from ch id: " << new_event->channel_id + << " what: " << new_event->event_type; + flowgraph_->apply_action(new_event->channel_id, new_event->event_type); + } + else if (pmt::any_ref(msg).type() == typeid(command_event_sptr)) + { + command_event_sptr new_event; + new_event = boost::any_cast<command_event_sptr>(pmt::any_ref(msg)); + DLOG(INFO) << "New command event rx from ch id: " << new_event->command_id + << " what: " << new_event->event_type; + + if (new_event->command_id == 200) + { + apply_action(new_event->event_type); + } + else + { + if (new_event->command_id == 300) // some TC commands require also actions from control_thread + { + apply_action(new_event->event_type); + } + flowgraph_->apply_action(new_event->command_id, new_event->event_type); + } + } + else + { + DLOG(INFO) << "Control Queue: unknown object type!\n"; + } + } + else + { + //perform non-priority tasks + flowgraph_->acquisition_manager(0); //start acquisition of untracked satellites + } +} /* * Runs the control thread that manages the receiver control plane @@ -285,14 +326,13 @@ int ControlThread::run() flowgraph_); #endif // Main loop to read and process the control messages + pmt::pmt_t msg; while (flowgraph_->running() && !stop_) { - //TODO re-enable the blocking read messages functions and fork the process - read_control_messages(); - if (control_messages_ != nullptr) - { - process_control_messages(); - } + //read event messages, triggered by event signaling with a 100 ms timeout to perform low priority receiver management tasks + bool valid_event = control_queue_->timed_wait_and_pop(msg, 100); + //call the new sat dispatcher and receiver controller + event_dispatcher(valid_event, msg); } std::cout << "Stopping GNSS-SDR, please wait!" << std::endl; flowgraph_->stop(); @@ -325,7 +365,7 @@ int ControlThread::run() } -void ControlThread::set_control_queue(const gr::msg_queue::sptr control_queue) // NOLINT(performance-unnecessary-value-param) +void ControlThread::set_control_queue(const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue) // NOLINT(performance-unnecessary-value-param) { if (flowgraph_->running()) { @@ -790,50 +830,6 @@ void ControlThread::assist_GNSS() } } - -void ControlThread::read_control_messages() -{ - DLOG(INFO) << "Reading control messages from queue"; - gr::message::sptr queue_message = control_queue_->delete_head(); - if (queue_message != nullptr) - { - control_messages_ = control_message_factory_->GetControlMessages(queue_message); - } - else - { - control_messages_->clear(); - } -} - - -// Apply the corresponding control actions -void ControlThread::process_control_messages() -{ - for (auto &i : *control_messages_) - { - if (stop_) - { - break; - } - if (i->who == 200) - { - apply_action(i->what); - } - else - { - if (i->who == 300) // some TC commands require also actions from control_thread - { - apply_action(i->what); - } - flowgraph_->apply_action(i->who, i->what); - } - processed_control_messages_++; - } - control_messages_->clear(); - DLOG(INFO) << "Processed all control messages"; -} - - void ControlThread::apply_action(unsigned int what) { std::shared_ptr<PvtInterface> pvt_ptr; @@ -1092,11 +1088,7 @@ void ControlThread::sysv_queue_listener() if ((std::abs(received_message - (-200.0)) < 10 * std::numeric_limits<double>::epsilon())) { std::cout << "Quit order received, stopping GNSS-SDR !!" << std::endl; - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); - if (control_queue_ != gr::msg_queue::sptr()) - { - control_queue_->handle(cmf->GetQueueMessage(200, 0)); - } + control_queue_->push(pmt::make_any(command_event_make(200, 0))); read_queue = false; } } @@ -1114,11 +1106,7 @@ void ControlThread::keyboard_listener() if (c == 'q') { std::cout << "Quit keystroke order received, stopping GNSS-SDR !!" << std::endl; - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); - if (control_queue_ != gr::msg_queue::sptr()) - { - control_queue_->handle(cmf->GetQueueMessage(200, 0)); - } + control_queue_->push(pmt::make_any(command_event_make(200, 0))); read_keys = false; } std::this_thread::sleep_for(std::chrono::milliseconds(100)); diff --git a/src/core/receiver/control_thread.h b/src/core/receiver/control_thread.h index 7d58226e9..5fa84f791 100644 --- a/src/core/receiver/control_thread.h +++ b/src/core/receiver/control_thread.h @@ -35,20 +35,20 @@ #ifndef GNSS_SDR_CONTROL_THREAD_H_ #define GNSS_SDR_CONTROL_THREAD_H_ -#include "agnss_ref_location.h" // for Agnss_Ref_Location -#include "agnss_ref_time.h" // for Agnss_Ref_Time -#include "control_message_factory.h" // for ControlMessage -#include "gnss_sdr_supl_client.h" // for Gnss_Sdr_Supl_Client -#include "tcp_cmd_interface.h" // for TcpCmdInterface -#include <armadillo> // for arma::vec -#include <boost/thread.hpp> // for boost::thread -#include <gnuradio/msg_queue.h> // for msg_queue, msg_queue::sptr -#include <ctime> // for time_t -#include <memory> // for shared_ptr -#include <string> // for string -#include <thread> // for std::thread -#include <utility> // for pair -#include <vector> // for vector +#include "agnss_ref_location.h" // for Agnss_Ref_Location +#include "agnss_ref_time.h" // for Agnss_Ref_Time +#include "concurrent_queue.h" +#include "gnss_sdr_supl_client.h" // for Gnss_Sdr_Supl_Client +#include "tcp_cmd_interface.h" // for TcpCmdInterface +#include <armadillo> // for arma::vec +#include <boost/thread.hpp> // for boost::thread +#include <pmt/pmt.h> +#include <ctime> // for time_t +#include <memory> // for shared_ptr +#include <string> // for string +#include <thread> // for std::thread +#include <utility> // for pair +#include <vector> // for vector class ConfigurationInterface; class GNSSFlowgraph; @@ -95,9 +95,9 @@ public: /*! * \brief Sets the control_queue * - * \param[in] boost::shared_ptr<gr::msg_queue> control_queue + * \param[in] std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue */ - void set_control_queue(const gr::msg_queue::sptr control_queue); // NOLINT(performance-unnecessary-value-param) + void set_control_queue(const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue); // NOLINT(performance-unnecessary-value-param) unsigned int processed_control_messages() { @@ -123,6 +123,10 @@ private: //Telecommand TCP interface TcpCmdInterface cmd_interface_; void telecommand_listener(); + /* + * New receiver event dispatcher + */ + void event_dispatcher(bool &valid_event, pmt::pmt_t &msg); std::thread cmd_interface_thread_; //SUPL assistance classes Gnss_Sdr_Supl_Client supl_client_acquisition_; @@ -140,10 +144,6 @@ private: // Save {ephemeris, iono, utc, ref loc, ref time} assistance to a local XML file //bool save_assistance_to_XML(); - void read_control_messages(); - - void process_control_messages(); - /* * Blocking function that reads the GPS assistance queue */ @@ -153,7 +153,7 @@ private: * Compute elevations for the specified time and position for all the available satellites in ephemeris and almanac queues * returns a vector filled with the available satellites ordered from high elevation to low elevation angle. */ - std::vector<std::pair<int, Gnss_Satellite>> get_visible_sats(time_t rx_utc_time, const arma::vec& LLH); + std::vector<std::pair<int, Gnss_Satellite>> get_visible_sats(time_t rx_utc_time, const arma::vec &LLH); /* * Read initial GNSS assistance from SUPL server or local XML files @@ -163,9 +163,7 @@ private: void apply_action(unsigned int what); std::shared_ptr<GNSSFlowgraph> flowgraph_; std::shared_ptr<ConfigurationInterface> configuration_; - gr::msg_queue::sptr control_queue_; - std::shared_ptr<ControlMessageFactory> control_message_factory_; - std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue_; bool stop_; bool restart_; bool delete_configuration_; diff --git a/src/core/receiver/gnss_block_factory.cc b/src/core/receiver/gnss_block_factory.cc index 7976d99da..f7574a986 100644 --- a/src/core/receiver/gnss_block_factory.cc +++ b/src/core/receiver/gnss_block_factory.cc @@ -182,7 +182,7 @@ GNSSBlockFactory::~GNSSBlockFactory() = default; std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetSignalSource( - const std::shared_ptr<ConfigurationInterface>& configuration, const gr::msg_queue::sptr queue, int ID) // NOLINT(performance-unnecessary-value-param) + const std::shared_ptr<ConfigurationInterface>& configuration, const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, int ID) // NOLINT(performance-unnecessary-value-param) { std::string default_implementation = "File_Signal_Source"; std::string role = "SignalSource"; //backwards compatibility for old conf files @@ -321,7 +321,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetPVT(const std::shared_p std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1C( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { //"appendix" is added to the "role" with the aim of Acquisition, Tracking and Telemetry Decoder adapters //can find their specific configurations when they read the config @@ -389,7 +389,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1C( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2S( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: " << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; @@ -453,7 +453,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2S( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1B( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { std::stringstream stream; stream << channel; @@ -520,7 +520,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1B( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_5X( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { std::stringstream stream; stream << channel; @@ -587,7 +587,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_5X( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1G( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { std::stringstream stream; stream << channel; @@ -655,7 +655,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1G( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2G( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { std::stringstream stream; stream << channel; @@ -723,7 +723,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2G( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_L5( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { std::stringstream stream; stream << channel; @@ -790,7 +790,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_L5( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_B1( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { std::stringstream stream; stream << channel; @@ -857,7 +857,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_B1( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_B3( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue) + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) { std::stringstream stream; stream << channel; @@ -921,7 +921,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_B3( std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GNSSBlockFactory::GetChannels( - const std::shared_ptr<ConfigurationInterface>& configuration, const gr::msg_queue::sptr queue) // NOLINT(performance-unnecessary-value-param) + const std::shared_ptr<ConfigurationInterface>& configuration, const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) // NOLINT(performance-unnecessary-value-param) { std::string default_implementation = "Pass_Through"; std::string tracking_implementation; @@ -1241,7 +1241,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock( const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& role, const std::string& implementation, unsigned int in_streams, - unsigned int out_streams, const gr::msg_queue::sptr queue) // NOLINT(performance-unnecessary-value-param) + unsigned int out_streams, const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) // NOLINT(performance-unnecessary-value-param) { std::unique_ptr<GNSSBlockInterface> block; diff --git a/src/core/receiver/gnss_block_factory.h b/src/core/receiver/gnss_block_factory.h index 3076c879d..af9889c89 100644 --- a/src/core/receiver/gnss_block_factory.h +++ b/src/core/receiver/gnss_block_factory.h @@ -37,10 +37,11 @@ #ifndef GNSS_SDR_BLOCK_FACTORY_H_ #define GNSS_SDR_BLOCK_FACTORY_H_ -#include <gnuradio/msg_queue.h> // for msg_queue::sptr -#include <memory> // for unique_ptr, shared_ptr -#include <string> // for string -#include <vector> // for vector +#include "concurrent_queue.h" +#include <pmt/pmt.h> +#include <memory> // for unique_ptr, shared_ptr +#include <string> // for string +#include <vector> // for vector class ConfigurationInterface; @@ -59,12 +60,12 @@ public: virtual ~GNSSBlockFactory(); std::unique_ptr<GNSSBlockInterface> GetSignalSource(const std::shared_ptr<ConfigurationInterface>& configuration, - const gr::msg_queue::sptr queue, int ID = -1); // NOLINT(performance-unnecessary-value-param) + const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue, int ID = -1); // NOLINT(performance-unnecessary-value-param) std::unique_ptr<GNSSBlockInterface> GetSignalConditioner(const std::shared_ptr<ConfigurationInterface>& configuration, int ID = -1); std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GetChannels(const std::shared_ptr<ConfigurationInterface>& configuration, - const gr::msg_queue::sptr queue); // NOLINT(performance-unnecessary-value-param) + const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); // NOLINT(performance-unnecessary-value-param) std::unique_ptr<GNSSBlockInterface> GetObservables(const std::shared_ptr<ConfigurationInterface>& configuration); @@ -76,44 +77,44 @@ public: std::unique_ptr<GNSSBlockInterface> GetBlock(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& role, const std::string& implementation, unsigned int in_streams, unsigned int out_streams, - const gr::msg_queue::sptr queue = nullptr); // NOLINT(performance-unnecessary-value-param) + const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = nullptr); // NOLINT(performance-unnecessary-value-param) private: std::unique_ptr<GNSSBlockInterface> GetChannel_1C(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<GNSSBlockInterface> GetChannel_2S(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<GNSSBlockInterface> GetChannel_1B(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<GNSSBlockInterface> GetChannel_5X(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<GNSSBlockInterface> GetChannel_L5(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<GNSSBlockInterface> GetChannel_1G(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<GNSSBlockInterface> GetChannel_2G(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<GNSSBlockInterface> GetChannel_B1(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - gr::msg_queue::sptr queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<GNSSBlockInterface> GetChannel_B3(const std::shared_ptr<ConfigurationInterface>& configuration, const std::string& acq, const std::string& trk, const std::string& tlm, int channel, - boost::shared_ptr<gr::msg_queue> queue); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); std::unique_ptr<AcquisitionInterface> GetAcqBlock( const std::shared_ptr<ConfigurationInterface>& configuration, diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc index 4d11c4193..fd142761a 100644 --- a/src/core/receiver/gnss_flowgraph.cc +++ b/src/core/receiver/gnss_flowgraph.cc @@ -75,7 +75,7 @@ #define GNSS_SDR_ARRAY_SIGNAL_CONDITIONER_CHANNELS 8 -GNSSFlowgraph::GNSSFlowgraph(std::shared_ptr<ConfigurationInterface> configuration, const gr::msg_queue::sptr queue) // NOLINT(performance-unnecessary-value-param) +GNSSFlowgraph::GNSSFlowgraph(std::shared_ptr<ConfigurationInterface> configuration, const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue) // NOLINT(performance-unnecessary-value-param) { connected_ = false; running_ = false; @@ -598,7 +598,11 @@ void GNSSFlowgraph::connect() } if (sat == 0) { - channels_.at(i)->set_signal(search_next_signal(gnss_signal, false)); + bool assistance_available; + float estimated_doppler; + double RX_time; + bool is_primary_freq; + channels_.at(i)->set_signal(search_next_signal(gnss_signal, false, is_primary_freq, assistance_available, estimated_doppler, RX_time)); } else { @@ -680,7 +684,11 @@ void GNSSFlowgraph::connect() top_block_->connect(observables_->get_right_block(), i, pvt_->get_left_block(), i); top_block_->msg_connect(channels_.at(i)->get_right_block(), pmt::mp("telemetry"), pvt_->get_left_block(), pmt::mp("telemetry")); } + + top_block_->msg_connect(observables_->get_right_block(), pmt::mp("status"), channels_status_, pmt::mp("status")); + top_block_->msg_connect(pvt_->get_left_block(), pmt::mp("pvt_to_observables"), observables_->get_right_block(), pmt::mp("pvt_to_observables")); + top_block_->msg_connect(pvt_->get_left_block(), pmt::mp("status"), channels_status_, pmt::mp("status")); } catch (const std::exception& e) { @@ -1053,7 +1061,184 @@ bool GNSSFlowgraph::send_telemetry_msg(const pmt::pmt_t& msg) return true; } +void GNSSFlowgraph::push_back_signal(Gnss_Signal gs) +{ + switch (mapStringValues_[gs.get_signal_str()]) + { + case evGPS_1C: + available_GPS_1C_signals_.remove(gs); + available_GPS_1C_signals_.push_back(gs); + break; + case evGPS_2S: + available_GPS_2S_signals_.remove(gs); + available_GPS_2S_signals_.push_back(gs); + break; + + case evGPS_L5: + available_GPS_L5_signals_.remove(gs); + available_GPS_L5_signals_.push_back(gs); + break; + + case evGAL_1B: + available_GAL_1B_signals_.remove(gs); + available_GAL_1B_signals_.push_back(gs); + break; + + case evGAL_5X: + available_GAL_5X_signals_.remove(gs); + available_GAL_5X_signals_.push_back(gs); + break; + + case evGLO_1G: + available_GLO_1G_signals_.remove(gs); + available_GLO_1G_signals_.push_back(gs); + break; + + case evGLO_2G: + available_GLO_2G_signals_.remove(gs); + available_GLO_2G_signals_.push_back(gs); + break; + + case evBDS_B1: + available_BDS_B1_signals_.remove(gs); + available_BDS_B1_signals_.push_back(gs); + break; + + case evBDS_B3: + available_BDS_B3_signals_.remove(gs); + available_BDS_B3_signals_.push_back(gs); + break; + + default: + LOG(ERROR) << "This should not happen :-("; + break; + } +} + +void GNSSFlowgraph::remove_signal(Gnss_Signal gs) +{ + switch (mapStringValues_[gs.get_signal_str()]) + { + case evGPS_1C: + available_GPS_1C_signals_.remove(gs); + break; + + case evGPS_2S: + available_GPS_2S_signals_.remove(gs); + break; + + case evGPS_L5: + available_GPS_L5_signals_.remove(gs); + break; + + case evGAL_1B: + available_GAL_1B_signals_.remove(gs); + break; + + case evGAL_5X: + available_GAL_5X_signals_.remove(gs); + break; + + case evGLO_1G: + available_GLO_1G_signals_.remove(gs); + break; + + case evGLO_2G: + available_GLO_2G_signals_.remove(gs); + break; + + case evBDS_B1: + available_BDS_B1_signals_.remove(gs); + break; + + case evBDS_B3: + available_BDS_B3_signals_.remove(gs); + break; + + default: + LOG(ERROR) << "This should not happen :-("; + break; + } +} + +void GNSSFlowgraph::acquisition_manager(unsigned int who) +{ + unsigned int current_channel; + for (unsigned int i = 0; i < channels_count_; i++) + { + current_channel = (i + who + 1) % channels_count_; + unsigned int sat_ = 0; + try + { + sat_ = configuration_->property("Channel" + std::to_string(current_channel) + ".satellite", 0); + } + catch (const std::exception& e) + { + LOG(WARNING) << e.what(); + } + if ((acq_channels_count_ < max_acq_channels_) && (channels_state_[current_channel] == 0)) + { + bool is_primary_freq = true; + bool assistance_available = false; + bool start_acquisition = false; + Gnss_Signal gnss_signal; + if (sat_ == 0) + { + float estimated_doppler; + double RX_time; + gnss_signal = search_next_signal(channels_[current_channel]->get_signal().get_signal_str(), + true, + is_primary_freq, + assistance_available, + estimated_doppler, + RX_time); + channels_[current_channel]->set_signal(gnss_signal); + start_acquisition = is_primary_freq or assistance_available or !configuration_->property("GNSS-SDR.assist_dual_frequency_acq", false); + // if (assistance_available) + // { + // std::cout << "Channel " << current_channel + // << " assistance available for " << channels_[current_channel]->get_signal().get_satellite() + // << ", Signal " << channels_[current_channel]->get_signal().get_signal_str() << "\n"; + // } + } + else + { + start_acquisition = true; + } + + if (start_acquisition == true) + { + channels_state_[current_channel] = 1; + acq_channels_count_++; + DLOG(INFO) << "Channel " << current_channel + << " Starting acquisition " << channels_[current_channel]->get_signal().get_satellite() + << ", Signal " << channels_[current_channel]->get_signal().get_signal_str(); +#ifndef ENABLE_FPGA + channels_[current_channel]->start_acquisition(); +#else + // create a task for the FPGA such that it doesn't stop the flow + std::thread tmp_thread(&ChannelInterface::start_acquisition, channels_[current_channel]); + tmp_thread.detach(); +#endif + } + else + { + push_back_signal(gnss_signal); + DLOG(INFO) << "Channel " << current_channel + << " secondary frequency acquisition assistance not available in " + << channels_[current_channel]->get_signal().get_satellite() + << ", Signal " << channels_[current_channel]->get_signal().get_signal_str(); + + // std::cout << "Channel " << current_channel + // << " secondary frequency acquisition assistance not available in " + // << channels_[current_channel]->get_signal().get_satellite() + // << ", Signal " << channels_[current_channel]->get_signal().get_signal_str() << "\n"; + } + } + DLOG(INFO) << "Channel " << current_channel << " in state " << channels_state_[current_channel]; + } +} /* * Applies an action to the flow graph * @@ -1065,7 +1250,7 @@ bool GNSSFlowgraph::send_telemetry_msg(const pmt::pmt_t& msg) * \param[in] what What is the action: * --- actions from channels --- * -> 0 acquisition failed - * -> 1 acquisition successful + * -> 1 acquisition succesfull * -> 2 tracking lost * --- actions from TC receiver control --- * -> 10 TC request standby mode @@ -1078,8 +1263,10 @@ bool GNSSFlowgraph::send_telemetry_msg(const pmt::pmt_t& msg) */ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) { + //todo: the acquisition events are initiated from the acquisition success or failure queued msg. If the acquisition is disabled for non-assisted secondary freq channels, the engine stops.. + std::lock_guard<std::mutex> lock(signal_list_mutex); - DLOG(INFO) << "Received " << what << " from " << who << ". Number of applied actions = " << applied_actions_; + DLOG(INFO) << "Received " << what << " from " << who; unsigned int sat = 0; if (who < 200) { @@ -1099,183 +1286,32 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) if (sat == 0) { Gnss_Signal gs = channels_[who]->get_signal(); - switch (mapStringValues_[gs.get_signal_str()]) - { - case evGPS_1C: - available_GPS_1C_signals_.remove(gs); - available_GPS_1C_signals_.push_back(gs); - break; - - case evGPS_2S: - available_GPS_2S_signals_.remove(gs); - available_GPS_2S_signals_.push_back(gs); - break; - - case evGPS_L5: - available_GPS_L5_signals_.remove(gs); - available_GPS_L5_signals_.push_back(gs); - break; - - case evGAL_1B: - available_GAL_1B_signals_.remove(gs); - available_GAL_1B_signals_.push_back(gs); - break; - - case evGAL_5X: - available_GAL_5X_signals_.remove(gs); - available_GAL_5X_signals_.push_back(gs); - break; - - case evGLO_1G: - available_GLO_1G_signals_.remove(gs); - available_GLO_1G_signals_.push_back(gs); - break; - - case evGLO_2G: - available_GLO_2G_signals_.remove(gs); - available_GLO_2G_signals_.push_back(gs); - break; - - case evBDS_B1: - available_BDS_B1_signals_.remove(gs); - available_BDS_B1_signals_.push_back(gs); - break; - - case evBDS_B3: - available_BDS_B3_signals_.remove(gs); - available_BDS_B3_signals_.push_back(gs); - break; - - default: - LOG(ERROR) << "This should not happen :-("; - break; - } + push_back_signal(gs); } channels_state_[who] = 0; - acq_channels_count_--; - for (unsigned int i = 0; i < channels_count_; i++) - { - unsigned int ch_index = (who + i + 1) % channels_count_; - unsigned int sat_ = 0; - try - { - sat_ = configuration_->property("Channel" + std::to_string(ch_index) + ".satellite", 0); - } - catch (const std::exception& e) - { - LOG(WARNING) << e.what(); - } - if ((acq_channels_count_ < max_acq_channels_) && (channels_state_[ch_index] == 0)) - { - channels_state_[ch_index] = 1; - if (sat_ == 0) - { - channels_[ch_index]->set_signal(search_next_signal(channels_[ch_index]->get_signal().get_signal_str(), true)); - } - acq_channels_count_++; - DLOG(INFO) << "Channel " << ch_index << " Starting acquisition " << channels_[ch_index]->get_signal().get_satellite() << ", Signal " << channels_[ch_index]->get_signal().get_signal_str(); -#ifndef ENABLE_FPGA - channels_[ch_index]->start_acquisition(); -#else - // create a task for the FPGA such that it doesn't stop the flow - std::thread tmp_thread(&ChannelInterface::start_acquisition, channels_[ch_index]); - tmp_thread.detach(); -#endif - } - DLOG(INFO) << "Channel " << ch_index << " in state " << channels_state_[ch_index]; - } + if (acq_channels_count_ > 0) acq_channels_count_--; + //call the acquisition manager to assign new satellite and start next acquisition (if required) + acquisition_manager(who); break; - case 1: - LOG(INFO) << "Channel " << who << " ACQ SUCCESS satellite " << channels_[who]->get_signal().get_satellite(); - + DLOG(INFO) << "Channel " << who << " ACQ SUCCESS satellite " << channels_[who]->get_signal().get_satellite(); // If the satellite is in the list of available ones, remove it. - switch (mapStringValues_[channels_[who]->get_signal().get_signal_str()]) - { - case evGPS_1C: - available_GPS_1C_signals_.remove(channels_[who]->get_signal()); - break; - - case evGPS_2S: - available_GPS_2S_signals_.remove(channels_[who]->get_signal()); - break; - - case evGPS_L5: - available_GPS_L5_signals_.remove(channels_[who]->get_signal()); - break; - - case evGAL_1B: - available_GAL_1B_signals_.remove(channels_[who]->get_signal()); - break; - - case evGAL_5X: - available_GAL_5X_signals_.remove(channels_[who]->get_signal()); - break; - - case evGLO_1G: - available_GLO_1G_signals_.remove(channels_[who]->get_signal()); - break; - - case evGLO_2G: - available_GLO_2G_signals_.remove(channels_[who]->get_signal()); - break; - - case evBDS_B1: - available_BDS_B1_signals_.remove(channels_[who]->get_signal()); - break; - - case evBDS_B3: - available_BDS_B3_signals_.remove(channels_[who]->get_signal()); - break; - - default: - LOG(ERROR) << "This should not happen :-("; - break; - } + remove_signal(channels_[who]->get_signal()); channels_state_[who] = 2; - acq_channels_count_--; - for (unsigned int i = 0; i < channels_count_; i++) - { - unsigned int sat_ = 0; - try - { - sat_ = configuration_->property("Channel" + std::to_string(i) + ".satellite", 0); - } - catch (const std::exception& e) - { - LOG(WARNING) << e.what(); - } - if ((acq_channels_count_ < max_acq_channels_) && (channels_state_[i] == 0)) - { - channels_state_[i] = 1; - if (sat_ == 0) - { - channels_[i]->set_signal(search_next_signal(channels_[i]->get_signal().get_signal_str(), true, true)); - } - acq_channels_count_++; - DLOG(INFO) << "Channel " << i << " Starting acquisition " << channels_[i]->get_signal().get_satellite() << ", Signal " << channels_[i]->get_signal().get_signal_str(); -#ifndef ENABLE_FPGA - channels_[i]->start_acquisition(); -#else - // create a task for the FPGA such that it doesn't stop the flow - std::thread tmp_thread(&ChannelInterface::start_acquisition, channels_[i]); - tmp_thread.detach(); -#endif - } - DLOG(INFO) << "Channel " << i << " in state " << channels_state_[i]; - } + if (acq_channels_count_ > 0) acq_channels_count_--; + //call the acquisition manager to assign new satellite and start next acquisition (if required) + acquisition_manager(who); break; case 2: - LOG(INFO) << "Channel " << who << " TRK FAILED satellite " << channels_[who]->get_signal().get_satellite(); - DLOG(INFO) << "Number of channels in acquisition = " << acq_channels_count_; - + DLOG(INFO) << "Channel " << who << " TRK FAILED satellite " << channels_[who]->get_signal().get_satellite(); if (acq_channels_count_ < max_acq_channels_) { + //try to acquire the same satellite channels_state_[who] = 1; acq_channels_count_++; - LOG(INFO) << "Channel " << who << " Starting acquisition " << channels_[who]->get_signal().get_satellite() << ", Signal " << channels_[who]->get_signal().get_signal_str(); + DLOG(INFO) << "Channel " << who << " Starting acquisition " << channels_[who]->get_signal().get_satellite() << ", Signal " << channels_[who]->get_signal().get_signal_str(); #ifndef ENABLE_FPGA channels_[who]->start_acquisition(); #else @@ -1290,48 +1326,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) LOG(INFO) << "Channel " << who << " Idle state"; if (sat == 0) { - switch (mapStringValues_[channels_[who]->get_signal().get_signal_str()]) - { - case evGPS_1C: - available_GPS_1C_signals_.push_back(channels_[who]->get_signal()); - break; - - case evGPS_2S: - available_GPS_2S_signals_.push_back(channels_[who]->get_signal()); - break; - - case evGPS_L5: - available_GPS_L5_signals_.push_back(channels_[who]->get_signal()); - break; - - case evGAL_1B: - available_GAL_1B_signals_.push_back(channels_[who]->get_signal()); - break; - - case evGAL_5X: - available_GAL_5X_signals_.push_back(channels_[who]->get_signal()); - break; - - case evGLO_1G: - available_GLO_1G_signals_.push_back(channels_[who]->get_signal()); - break; - - case evGLO_2G: - available_GLO_2G_signals_.push_back(channels_[who]->get_signal()); - break; - - case evBDS_B1: - available_BDS_B1_signals_.push_back(channels_[who]->get_signal()); - break; - - case evBDS_B3: - available_BDS_B3_signals_.push_back(channels_[who]->get_signal()); - break; - - default: - LOG(ERROR) << "This should not happen :-("; - break; - } + push_back_signal(channels_[who]->get_signal()); } } break; @@ -1343,57 +1338,8 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) { //recover the satellite assigned Gnss_Signal gs = channels_[n]->get_signal(); - switch (mapStringValues_[gs.get_signal_str()]) - { - case evGPS_1C: - available_GPS_1C_signals_.remove(gs); - available_GPS_1C_signals_.push_back(gs); - break; + push_back_signal(gs); - case evGPS_2S: - available_GPS_2S_signals_.remove(gs); - available_GPS_2S_signals_.push_back(gs); - break; - - case evGPS_L5: - available_GPS_L5_signals_.remove(gs); - available_GPS_L5_signals_.push_back(gs); - break; - - case evGAL_1B: - available_GAL_1B_signals_.remove(gs); - available_GAL_1B_signals_.push_back(gs); - break; - - case evGAL_5X: - available_GAL_5X_signals_.remove(gs); - available_GAL_5X_signals_.push_back(gs); - break; - - case evGLO_1G: - available_GLO_1G_signals_.remove(gs); - available_GLO_1G_signals_.push_back(gs); - break; - - case evGLO_2G: - available_GLO_2G_signals_.remove(gs); - available_GLO_2G_signals_.push_back(gs); - break; - - case evBDS_B1: - available_BDS_B1_signals_.remove(gs); - available_BDS_B1_signals_.push_back(gs); - break; - - case evBDS_B3: - available_BDS_B3_signals_.remove(gs); - available_BDS_B3_signals_.push_back(gs); - break; - - default: - LOG(ERROR) << "This should not happen :-("; - break; - } channels_[n]->stop_channel(); // stop the acquisition or tracking operation channels_state_[n] = 0; } @@ -1402,112 +1348,22 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) break; case 11: // request coldstart mode LOG(INFO) << "TC request flowgraph coldstart"; - // start again the satellite acquisitions - for (unsigned int i = 0; i < channels_count_; i++) - { - unsigned int ch_index = (who + i + 1) % channels_count_; - unsigned int sat_ = 0; - try - { - sat_ = configuration_->property("Channel" + std::to_string(ch_index) + ".satellite", 0); - } - catch (const std::exception& e) - { - LOG(WARNING) << e.what(); - } - if ((acq_channels_count_ < max_acq_channels_) && (channels_state_[ch_index] == 0)) - { - channels_state_[ch_index] = 1; - if (sat_ == 0) - { - channels_[ch_index]->set_signal(search_next_signal(channels_[ch_index]->get_signal().get_signal_str(), true)); - } - acq_channels_count_++; - DLOG(INFO) << "Channel " << ch_index << " Starting acquisition " << channels_[ch_index]->get_signal().get_satellite() << ", Signal " << channels_[ch_index]->get_signal().get_signal_str(); -#ifndef ENABLE_FPGA - channels_[ch_index]->start_acquisition(); -#else - // create a task for the FPGA such that it doesn't stop the flow - std::thread tmp_thread(&ChannelInterface::start_acquisition, channels_[ch_index]); - tmp_thread.detach(); -#endif - } - DLOG(INFO) << "Channel " << ch_index << " in state " << channels_state_[ch_index]; - } + //call the acquisition manager to assign new satellite and start next acquisition (if required) + acquisition_manager(who); break; case 12: // request hotstart mode LOG(INFO) << "TC request flowgraph hotstart"; - for (unsigned int i = 0; i < channels_count_; i++) - { - unsigned int ch_index = (who + i + 1) % channels_count_; - unsigned int sat_ = 0; - try - { - sat_ = configuration_->property("Channel" + std::to_string(ch_index) + ".satellite", 0); - } - catch (const std::exception& e) - { - LOG(WARNING) << e.what(); - } - if ((acq_channels_count_ < max_acq_channels_) && (channels_state_[ch_index] == 0)) - { - channels_state_[ch_index] = 1; - if (sat_ == 0) - { - channels_[ch_index]->set_signal(search_next_signal(channels_[ch_index]->get_signal().get_signal_str(), true)); - } - acq_channels_count_++; - DLOG(INFO) << "Channel " << ch_index << " Starting acquisition " << channels_[ch_index]->get_signal().get_satellite() << ", Signal " << channels_[ch_index]->get_signal().get_signal_str(); -#ifndef ENABLE_FPGA - channels_[ch_index]->start_acquisition(); -#else - // create a task for the FPGA such that it doesn't stop the flow - std::thread tmp_thread(&ChannelInterface::start_acquisition, channels_[ch_index]); - tmp_thread.detach(); -#endif - } - DLOG(INFO) << "Channel " << ch_index << " in state " << channels_state_[ch_index]; - } + //call the acquisition manager to assign new satellite and start next acquisition (if required) + acquisition_manager(who); break; case 13: // request warmstart mode LOG(INFO) << "TC request flowgraph warmstart"; - // start again the satellite acquisitions - for (unsigned int i = 0; i < channels_count_; i++) - { - unsigned int ch_index = (who + i + 1) % channels_count_; - unsigned int sat_ = 0; - try - { - sat_ = configuration_->property("Channel" + std::to_string(ch_index) + ".satellite", 0); - } - catch (const std::exception& e) - { - LOG(WARNING) << e.what(); - } - if ((acq_channels_count_ < max_acq_channels_) && (channels_state_[ch_index] == 0)) - { - channels_state_[ch_index] = 1; - if (sat_ == 0) - { - channels_[ch_index]->set_signal(search_next_signal(channels_[ch_index]->get_signal().get_signal_str(), true)); - } - acq_channels_count_++; - DLOG(INFO) << "Channel " << ch_index << " Starting acquisition " << channels_[ch_index]->get_signal().get_satellite() << ", Signal " << channels_[ch_index]->get_signal().get_signal_str(); -#ifndef ENABLE_FPGA - channels_[ch_index]->start_acquisition(); -#else - // create a task for the FPGA such that it doesn't stop the flow - std::thread tmp_thread(&ChannelInterface::start_acquisition, channels_[ch_index]); - tmp_thread.detach(); -#endif - } - DLOG(INFO) << "Channel " << ch_index << " in state " << channels_state_[ch_index]; - } + //call the acquisition manager to assign new satellite and start next acquisition (if required) + acquisition_manager(who); break; default: break; } - applied_actions_++; } @@ -1610,6 +1466,8 @@ void GNSSFlowgraph::init() */ std::unique_ptr<GNSSBlockFactory> block_factory_(new GNSSBlockFactory()); + channels_status_ = channel_status_msg_receiver_make(); + // 1. read the number of RF front-ends available (one file_source per RF front-end) sources_count_ = configuration_->property("Receiver.sources_count", 1); @@ -1701,7 +1559,6 @@ void GNSSFlowgraph::init() // fill the signals queue with the satellites ID's to be searched by the acquisition set_signals_list(); set_channels_state(); - applied_actions_ = 0; DLOG(INFO) << "Blocks instantiated. " << channels_count_ << " channels."; /* @@ -2010,110 +1867,124 @@ void GNSSFlowgraph::set_channels_state() } -Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal, bool pop, bool tracked) +Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal, + const bool pop, + bool& is_primary_frequency, + bool& assistance_available, + float& estimated_doppler, + double& RX_time) { + is_primary_frequency = false; + assistance_available = false; Gnss_Signal result; - bool untracked_satellite = true; + bool found_signal = false; switch (mapStringValues_[searched_signal]) { case evGPS_1C: + //todo: assist the satellite selection with almanac and current PVT here (rehuse priorize_satellite function used in control_thread) result = available_GPS_1C_signals_.front(); available_GPS_1C_signals_.pop_front(); if (!pop) { available_GPS_1C_signals_.push_back(result); } - if (tracked) - { - if ((configuration_->property("Channels_2S.count", 0) > 0) or (configuration_->property("Channels_L5.count", 0) > 0)) - { - for (unsigned int ch = 0; ch < channels_count_; ch++) - { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "1C")) - { - untracked_satellite = false; - } - } - if (untracked_satellite and configuration_->property("Channels_2S.count", 0) > 0) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "2S"); - available_GPS_2S_signals_.remove(gs); - available_GPS_2S_signals_.push_front(gs); - } - if (untracked_satellite and configuration_->property("Channels_L5.count", 0) > 0) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "L5"); - available_GPS_L5_signals_.remove(gs); - available_GPS_L5_signals_.push_front(gs); - } - } - } + is_primary_frequency = true; //indicate that the searched satellite signal belongs to "primary" link (L1, E1, B1, etc..) break; case evGPS_2S: - result = available_GPS_2S_signals_.front(); - available_GPS_2S_signals_.pop_front(); - if (!pop) + if (configuration_->property("Channels_1C.count", 0) > 0) { - available_GPS_2S_signals_.push_back(result); - } - if (tracked) - { - if ((configuration_->property("Channels_1C.count", 0) > 0) or (configuration_->property("Channels_L5.count", 0) > 0)) + //1. Get the current channel status map + std::map<int, std::shared_ptr<Gnss_Synchro>> current_channels_status = channels_status_->get_current_status_map(); + //2. search the currently tracked GPS L1 satellites and assist the GPS L2 acquisition if the satellite is not tracked on L2 + bool found_signal = false; + for (std::map<int, std::shared_ptr<Gnss_Synchro>>::iterator it = current_channels_status.begin(); it != current_channels_status.end(); ++it) { - for (unsigned int ch = 0; ch < channels_count_; ch++) + if (std::string(it->second->Signal) == "1C") { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "2S")) + std::list<Gnss_Signal>::iterator it2; + it2 = std::find_if(std::begin(available_GPS_2S_signals_), std::end(available_GPS_2S_signals_), + [&](Gnss_Signal const& sig) { return sig.get_satellite().get_PRN() == it->second->PRN; }); + + if (it2 != available_GPS_2S_signals_.end()) { - untracked_satellite = false; + estimated_doppler = it->second->Carrier_Doppler_hz; + RX_time = it->second->RX_time; + //std::cout << " Channel: " << it->first << " => Doppler: " << estimated_doppler << "[Hz] \n"; + //3. return the GPS L2 satellite and remove it from list + result = *it2; + if (pop) + { + available_GPS_2S_signals_.erase(it2); + } + found_signal = true; + assistance_available = true; + break; } } - if (untracked_satellite and configuration_->property("Channels_1C.count", 0) > 0) + } + //fallback: pick the front satellite because there is no tracked satellites in L1 to assist L2 + if (found_signal == false) + { + result = available_GPS_2S_signals_.front(); + available_GPS_2S_signals_.pop_front(); + if (!pop) { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "1C"); - available_GPS_1C_signals_.remove(gs); - available_GPS_1C_signals_.push_front(gs); - } - if (untracked_satellite and configuration_->property("Channels_L5.count", 0) > 0) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "L5"); - available_GPS_L5_signals_.remove(gs); - available_GPS_L5_signals_.push_front(gs); + available_GPS_2S_signals_.push_back(result); } } } + else + { + result = available_GPS_2S_signals_.front(); + available_GPS_2S_signals_.pop_front(); + if (!pop) + { + available_GPS_2S_signals_.push_back(result); + } + } break; case evGPS_L5: - result = available_GPS_L5_signals_.front(); - available_GPS_L5_signals_.pop_front(); - if (!pop) + if (configuration_->property("Channels_1C.count", 0) > 0) { - available_GPS_L5_signals_.push_back(result); - } - if (tracked) - { - if ((configuration_->property("Channels_1C.count", 0) > 0) or (configuration_->property("Channels_2S.count", 0) > 0)) + //1. Get the current channel status map + std::map<int, std::shared_ptr<Gnss_Synchro>> current_channels_status = channels_status_->get_current_status_map(); + //2. search the currently tracked GPS L1 satellites and assist the GPS L5 acquisition if the satellite is not tracked on L5 + for (std::map<int, std::shared_ptr<Gnss_Synchro>>::iterator it = current_channels_status.begin(); it != current_channels_status.end(); ++it) { - for (unsigned int ch = 0; ch < channels_count_; ch++) + if (std::string(it->second->Signal) == "1C") { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "L5")) + std::list<Gnss_Signal>::iterator it2; + it2 = std::find_if(std::begin(available_GPS_L5_signals_), std::end(available_GPS_L5_signals_), + [&](Gnss_Signal const& sig) { return sig.get_satellite().get_PRN() == it->second->PRN; }); + + if (it2 != available_GPS_L5_signals_.end()) { - untracked_satellite = false; + estimated_doppler = it->second->Carrier_Doppler_hz; + RX_time = it->second->RX_time; + //std::cout << " Channel: " << it->first << " => Doppler: " << estimated_doppler << "[Hz] \n"; + //3. return the GPS L5 satellite and remove it from list + result = *it2; + if (pop) + { + available_GPS_L5_signals_.erase(it2); + } + found_signal = true; + assistance_available = true; + break; } } - if (untracked_satellite and configuration_->property("Channels_1C.count", 0) > 0) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "1C"); - available_GPS_1C_signals_.remove(gs); - available_GPS_1C_signals_.push_front(gs); - } - if (untracked_satellite and configuration_->property("Channels_2S.count", 0) > 0) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "2S"); - available_GPS_2S_signals_.remove(gs); - available_GPS_2S_signals_.push_front(gs); - } + } + } + //fallback: pick the front satellite because there is no tracked satellites in L1 to assist L5 + if (found_signal == false) + { + result = available_GPS_L5_signals_.front(); + available_GPS_L5_signals_.pop_front(); + if (!pop) + { + available_GPS_L5_signals_.push_back(result); } } break; @@ -2125,51 +1996,50 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal { available_GAL_1B_signals_.push_back(result); } - if (tracked) - { - if (configuration_->property("Channels_5X.count", 0) > 0) - { - for (unsigned int ch = 0; ch < channels_count_; ch++) - { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "1B")) - { - untracked_satellite = false; - } - } - if (untracked_satellite) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "5X"); - available_GAL_5X_signals_.remove(gs); - available_GAL_5X_signals_.push_front(gs); - } - } - } + is_primary_frequency = true; //indicate that the searched satellite signal belongs to "primary" link (L1, E1, B1, etc..) break; case evGAL_5X: - result = available_GAL_5X_signals_.front(); - available_GAL_5X_signals_.pop_front(); - if (!pop) + + if (configuration_->property("Channels_1B.count", 0) > 0) { - available_GAL_5X_signals_.push_back(result); - } - if (tracked) - { - if (configuration_->property("Channels_1B.count", 0) > 0) + //1. Get the current channel status map + std::map<int, std::shared_ptr<Gnss_Synchro>> current_channels_status = channels_status_->get_current_status_map(); + //2. search the currently tracked Galileo E1 satellites and assist the Galileo E5 acquisition if the satellite is not tracked on E5 + for (std::map<int, std::shared_ptr<Gnss_Synchro>>::iterator it = current_channels_status.begin(); it != current_channels_status.end(); ++it) { - for (unsigned int ch = 0; ch < channels_count_; ch++) + if (std::string(it->second->Signal) == "1B") { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "5X")) + std::list<Gnss_Signal>::iterator it2; + it2 = std::find_if(std::begin(available_GAL_5X_signals_), std::end(available_GAL_5X_signals_), + [&](Gnss_Signal const& sig) { return sig.get_satellite().get_PRN() == it->second->PRN; }); + + if (it2 != available_GAL_5X_signals_.end()) { - untracked_satellite = false; + estimated_doppler = it->second->Carrier_Doppler_hz; + RX_time = it->second->RX_time; + //std::cout << " Channel: " << it->first << " => Doppler: " << estimated_doppler << "[Hz] \n"; + //3. return the Gal 5X satellite and remove it from list + result = *it2; + if (pop) + { + available_GAL_5X_signals_.erase(it2); + } + found_signal = true; + assistance_available = true; + break; } } - if (untracked_satellite) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "1B"); - available_GAL_1B_signals_.remove(gs); - available_GAL_1B_signals_.push_front(gs); - } + } + } + //fallback: pick the front satellite because there is no tracked satellites in E1 to assist E5 + if (found_signal == false) + { + result = available_GAL_5X_signals_.front(); + available_GAL_5X_signals_.pop_front(); + if (!pop) + { + available_GAL_5X_signals_.push_back(result); } } break; @@ -2181,25 +2051,7 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal { available_GLO_1G_signals_.push_back(result); } - if (tracked) - { - if (configuration_->property("Channels_2G.count", 0) > 0) - { - for (unsigned int ch = 0; ch < channels_count_; ch++) - { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "1G")) - { - untracked_satellite = false; - } - } - if (untracked_satellite) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "2G"); - available_GLO_2G_signals_.remove(gs); - available_GLO_2G_signals_.push_front(gs); - } - } - } + is_primary_frequency = true; //indicate that the searched satellite signal belongs to "primary" link (L1, E1, B1, etc..) break; case evGLO_2G: @@ -2209,25 +2061,6 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal { available_GLO_2G_signals_.push_back(result); } - if (tracked) - { - if (configuration_->property("Channels_1G.count", 0) > 0) - { - for (unsigned int ch = 0; ch < channels_count_; ch++) - { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "2G")) - { - untracked_satellite = false; - } - } - if (untracked_satellite) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "1G"); - available_GLO_1G_signals_.remove(gs); - available_GLO_1G_signals_.push_front(gs); - } - } - } break; case evBDS_B1: @@ -2237,25 +2070,7 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal { available_BDS_B1_signals_.push_back(result); } - if (tracked) - { - if (configuration_->property("Channels_B3.count", 0) > 0) - { - for (unsigned int ch = 0; ch < channels_count_; ch++) - { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "2G")) - { - untracked_satellite = false; - } - } - if (untracked_satellite) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "B3"); - available_BDS_B3_signals_.remove(gs); - available_BDS_B3_signals_.push_front(gs); - } - } - } + is_primary_frequency = true; //indicate that the searched satellite signal belongs to "primary" link (L1, E1, B1, etc..) break; case evBDS_B3: @@ -2265,25 +2080,6 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal { available_BDS_B3_signals_.push_back(result); } - if (tracked) - { - if (configuration_->property("Channels_B1.count", 0) > 0) - { - for (unsigned int ch = 0; ch < channels_count_; ch++) - { - if ((channels_[ch]->get_signal().get_satellite() == result.get_satellite()) and (channels_[ch]->get_signal().get_signal_str() != "2G")) - { - untracked_satellite = false; - } - } - if (untracked_satellite) - { - Gnss_Signal gs = Gnss_Signal(result.get_satellite(), "B1"); - available_BDS_B1_signals_.remove(gs); - available_BDS_B1_signals_.push_front(gs); - } - } - } break; default: diff --git a/src/core/receiver/gnss_flowgraph.h b/src/core/receiver/gnss_flowgraph.h index 7552c46a7..8d3c3fa58 100644 --- a/src/core/receiver/gnss_flowgraph.h +++ b/src/core/receiver/gnss_flowgraph.h @@ -37,11 +37,12 @@ #ifndef GNSS_SDR_GNSS_FLOWGRAPH_H_ #define GNSS_SDR_GNSS_FLOWGRAPH_H_ +#include "channel_status_msg_receiver.h" +#include "concurrent_queue.h" #include "gnss_sdr_sample_counter.h" #include "gnss_signal.h" #include "pvt_interface.h" #include <gnuradio/blocks/null_sink.h> //for null_sink -#include <gnuradio/msg_queue.h> // for msg_queue, msg_queue::sptr #include <gnuradio/runtime_types.h> // for basic_block_sptr, top_block_sptr #include <pmt/pmt.h> // for pmt_t #include <list> // for list @@ -71,7 +72,7 @@ public: /*! * \brief Constructor that initializes the receiver flow graph */ - GNSSFlowgraph(std::shared_ptr<ConfigurationInterface> configuration, const gr::msg_queue::sptr queue); // NOLINT(performance-unnecessary-value-param) + GNSSFlowgraph(std::shared_ptr<ConfigurationInterface> configuration, const std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue); // NOLINT(performance-unnecessary-value-param) /*! * \brief Destructor @@ -99,6 +100,8 @@ public: void perform_hw_reset(); #endif + + void acquisition_manager(unsigned int who); /*! * \brief Applies an action to the flow graph * @@ -107,12 +110,11 @@ public: */ void apply_action(unsigned int who, unsigned int what); - void set_configuration(std::shared_ptr<ConfigurationInterface> configuration); - unsigned int applied_actions() const - { - return applied_actions_; - } + void push_back_signal(Gnss_Signal gs); + void remove_signal(Gnss_Signal gs); + + void set_configuration(std::shared_ptr<ConfigurationInterface> configuration); bool connected() const { @@ -149,7 +151,12 @@ private: void set_signals_list(); void set_channels_state(); // Initializes the channels state (start acquisition or keep standby) // using the configuration parameters (number of channels and max channels in acquisition) - Gnss_Signal search_next_signal(const std::string& searched_signal, bool pop, bool tracked = false); + Gnss_Signal search_next_signal(const std::string& searched_signal, + const bool pop, + bool& is_primary_frequency, + bool& assistance_available, + float& estimated_doppler, + double& RX_time); bool connected_; bool running_; int sources_count_; @@ -157,7 +164,6 @@ private: unsigned int channels_count_; unsigned int acq_channels_count_; unsigned int max_acq_channels_; - unsigned int applied_actions_; std::string config_file_; std::shared_ptr<ConfigurationInterface> configuration_; @@ -175,7 +181,7 @@ private: gnss_sdr_fpga_sample_counter_sptr ch_out_fpga_sample_counter; #endif gr::top_block_sptr top_block_; - gr::msg_queue::sptr queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue_; std::list<Gnss_Signal> available_GPS_1C_signals_; std::list<Gnss_Signal> available_GPS_2S_signals_; @@ -203,6 +209,7 @@ private: std::map<std::string, StringValue> mapStringValues_; std::vector<unsigned int> channels_state_; + channel_status_msg_receiver_sptr channels_status_; //class that receives and stores the current status of the receiver channels std::mutex signal_list_mutex; bool enable_monitor_; diff --git a/src/core/receiver/tcp_cmd_interface.cc b/src/core/receiver/tcp_cmd_interface.cc index 5cac461ad..f274c82dc 100644 --- a/src/core/receiver/tcp_cmd_interface.cc +++ b/src/core/receiver/tcp_cmd_interface.cc @@ -30,7 +30,7 @@ */ #include "tcp_cmd_interface.h" -#include "control_message_factory.h" +#include "command_event.h" #include "pvt_interface.h" #include <boost/asio.hpp> #include <array> @@ -94,17 +94,16 @@ arma::vec TcpCmdInterface::get_LLH() std::string TcpCmdInterface::reset(const std::vector<std::string> &commandLine __attribute__((unused))) { std::string response; - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); if (control_queue_ != nullptr) { - control_queue_->handle(cmf->GetQueueMessage(200, 1)); //send the restart message (who=200,what=1) + command_event_sptr new_evnt = command_event_make(200, 1); //send the restart message (who=200,what=1) + control_queue_->push(pmt::make_any(new_evnt)); response = "OK\n"; } else { response = "ERROR\n"; } - return response; } @@ -112,10 +111,10 @@ std::string TcpCmdInterface::reset(const std::vector<std::string> &commandLine _ std::string TcpCmdInterface::standby(const std::vector<std::string> &commandLine __attribute__((unused))) { std::string response; - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); if (control_queue_ != nullptr) { - control_queue_->handle(cmf->GetQueueMessage(300, 10)); //send the standby message (who=300,what=10) + command_event_sptr new_evnt = command_event_make(300, 10); //send the standby message (who=300,what=10) + control_queue_->push(pmt::make_any(new_evnt)); response = "OK\n"; } else @@ -203,10 +202,10 @@ std::string TcpCmdInterface::hotstart(const std::vector<std::string> &commandLin } else { - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); if (control_queue_ != nullptr) { - control_queue_->handle(cmf->GetQueueMessage(300, 12)); //send the standby message (who=300,what=12) + command_event_sptr new_evnt = command_event_make(300, 12); //send the standby message (who=300,what=12) + control_queue_->push(pmt::make_any(new_evnt)); response = "OK\n"; } else @@ -250,10 +249,10 @@ std::string TcpCmdInterface::warmstart(const std::vector<std::string> &commandLi } else { - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); if (control_queue_ != nullptr) { - control_queue_->handle(cmf->GetQueueMessage(300, 13)); // send the warmstart message (who=300,what=13) + command_event_sptr new_evnt = command_event_make(300, 13); // send the warmstart message (who=300,what=13) + control_queue_->push(pmt::make_any(new_evnt)); response = "OK\n"; } else @@ -273,16 +272,17 @@ std::string TcpCmdInterface::warmstart(const std::vector<std::string> &commandLi std::string TcpCmdInterface::coldstart(const std::vector<std::string> &commandLine __attribute__((unused))) { std::string response; - std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); if (control_queue_ != nullptr) { - control_queue_->handle(cmf->GetQueueMessage(300, 11)); // send the coldstart message (who=300,what=11) + command_event_sptr new_evnt = command_event_make(300, 11); // send the coldstart message (who=300,what=11) + control_queue_->push(pmt::make_any(new_evnt)); response = "OK\n"; } else { response = "ERROR\n"; } + return response; } @@ -296,7 +296,7 @@ std::string TcpCmdInterface::set_ch_satellite(const std::vector<std::string> &co } -void TcpCmdInterface::set_msg_queue(gr::msg_queue::sptr control_queue) +void TcpCmdInterface::set_msg_queue(std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue) { control_queue_ = std::move(control_queue); } diff --git a/src/core/receiver/tcp_cmd_interface.h b/src/core/receiver/tcp_cmd_interface.h index e5658a6d9..0b6276e92 100644 --- a/src/core/receiver/tcp_cmd_interface.h +++ b/src/core/receiver/tcp_cmd_interface.h @@ -32,8 +32,9 @@ #define GNSS_SDR_TCP_CMD_INTERFACE_H_ +#include "concurrent_queue.h" #include <armadillo> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> #include <cstdint> #include <ctime> #include <functional> @@ -50,7 +51,7 @@ public: TcpCmdInterface(); virtual ~TcpCmdInterface(); void run_cmd_server(int tcp_port); - void set_msg_queue(gr::msg_queue::sptr control_queue); + void set_msg_queue(std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue); /*! * \brief gets the UTC time parsed from the last TC command issued @@ -77,7 +78,7 @@ private: void register_functions(); - gr::msg_queue::sptr control_queue_; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue_; bool keep_running_; time_t receiver_utc_time_; diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 8a4fb8943..021966a1a 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -869,7 +869,6 @@ endif() if(NOT ENABLE_PACKAGING AND NOT ENABLE_FPGA) add_executable(control_thread_test ${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc - ${CMAKE_CURRENT_SOURCE_DIR}/unit-tests/control-plane/control_message_factory_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/unit-tests/control-plane/control_thread_test.cc ) if(${FILESYSTEM_FOUND}) diff --git a/src/tests/data/high_dynamics_signal.bin b/src/tests/data/high_dynamics_signal.bin new file mode 100644 index 000000000..ba463e31c Binary files /dev/null and b/src/tests/data/high_dynamics_signal.bin differ diff --git a/src/tests/data/high_dynamics_signal.mat b/src/tests/data/high_dynamics_signal.mat new file mode 100644 index 000000000..39c1312d5 Binary files /dev/null and b/src/tests/data/high_dynamics_signal.mat differ diff --git a/src/tests/test_main.cc b/src/tests/test_main.cc index e20338cfa..748df14a1 100644 --- a/src/tests/test_main.cc +++ b/src/tests/test_main.cc @@ -60,7 +60,6 @@ DECLARE_string(log_dir); #include "unit-tests/arithmetic/fft_speed_test.cc" #include "unit-tests/arithmetic/magnitude_squared_test.cc" #include "unit-tests/arithmetic/multiply_test.cc" -#include "unit-tests/control-plane/control_message_factory_test.cc" #include "unit-tests/control-plane/control_thread_test.cc" #include "unit-tests/control-plane/file_configuration_test.cc" #include "unit-tests/control-plane/gnss_block_factory_test.cc" diff --git a/src/tests/unit-tests/control-plane/control_message_factory_test.cc b/src/tests/unit-tests/control-plane/control_message_factory_test.cc deleted file mode 100644 index 7440d37f4..000000000 --- a/src/tests/unit-tests/control-plane/control_message_factory_test.cc +++ /dev/null @@ -1,90 +0,0 @@ -/*! - * \file control message_factory_test.cc - * \brief This file implements tests for the ControlMessageFactory. - * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com - * Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es - * - * - * ------------------------------------------------------------------------- - * - * Copyright (C) 2010-2018 (see AUTHORS file for a list of contributors) - * - * GNSS-SDR is a software defined Global Navigation - * Satellite Systems receiver - * - * This file is part of GNSS-SDR. - * - * GNSS-SDR is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GNSS-SDR is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. - * - * ------------------------------------------------------------------------- - */ - - -#include "control_message_factory.h" -#include <gtest/gtest.h> -#include <string> - - -TEST(ControlMessageFactoryTest, GetQueueMessage) -{ - std::shared_ptr<ControlMessageFactory> factory = std::make_shared<ControlMessageFactory>(); - gr::message::sptr queue_message = factory->GetQueueMessage(0, 2); - auto control_messages = factory->GetControlMessages(queue_message); - unsigned int expected0 = 0; - unsigned int expected2 = 2; - EXPECT_EQ(expected0, control_messages->at(0)->who); - EXPECT_EQ(expected2, control_messages->at(0)->what); - EXPECT_EQ(sizeof(ControlMessage), queue_message->length()); -} - - -TEST(ControlMessageFactoryTest, GetControlMessages) -{ - std::shared_ptr<ControlMessageFactory> factory = std::make_shared<ControlMessageFactory>(); - gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage)); - std::shared_ptr<ControlMessage> control_message = std::make_shared<ControlMessage>(); - - control_message->who = 1; - control_message->what = 4; - - memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage)); - std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages = factory->GetControlMessages(queue_message); - - unsigned int expected1 = 1; - unsigned int expected4 = 4; - EXPECT_EQ(expected1, control_messages->size()); - EXPECT_EQ(expected1, control_messages->at(0)->who); - EXPECT_EQ(expected4, control_messages->at(0)->what); -} - -/* - -TEST(ControlMessageFactoryTest, GetControlMessagesWrongSize) -{ - - std::shared_ptr<ControlMessageFactory> factory = std::make_shared<ControlMessageFactory>(); - std::shared_ptr<ControlMessage> control_message = std::make_shared<ControlMessage>(); - - control_message->who = 1; - control_message->what = 4; - int another_int = 10; - - gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage) + sizeof(int)); - memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage)); - memcpy(queue_message->msg() + sizeof(ControlMessage), &another_int, sizeof(int)); - std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages = factory->GetControlMessages(queue_message); - - unsigned int expected0 = 0; - EXPECT_EQ(expected0, control_messages->size()); -} */ diff --git a/src/tests/unit-tests/control-plane/control_thread_test.cc b/src/tests/unit-tests/control-plane/control_thread_test.cc index 781a5af76..4a0ffa18e 100644 --- a/src/tests/unit-tests/control-plane/control_thread_test.cc +++ b/src/tests/unit-tests/control-plane/control_thread_test.cc @@ -32,16 +32,17 @@ #include "control_thread.h" -#include "control_message_factory.h" +#include "channel_event.h" +#include "command_event.h" +#include "concurrent_queue.h" #include "in_memory_configuration.h" #include <boost/exception/diagnostic_information.hpp> #include <boost/exception_ptr.hpp> #include <boost/lexical_cast.hpp> #include <gflags/gflags.h> #include <glog/logging.h> -#include <gnuradio/message.h> -#include <gnuradio/msg_queue.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <exception> #include <memory> @@ -121,13 +122,10 @@ TEST_F(ControlThreadTest /*unused*/, InstantiateRunControlMessages /*unused*/) std::shared_ptr<ControlThread> control_thread = std::make_shared<ControlThread>(config); - gr::msg_queue::sptr control_queue = gr::msg_queue::make(0); - - std::unique_ptr<ControlMessageFactory> control_msg_factory(new ControlMessageFactory()); - - control_queue->handle(control_msg_factory->GetQueueMessage(0, 0)); - control_queue->handle(control_msg_factory->GetQueueMessage(1, 0)); - control_queue->handle(control_msg_factory->GetQueueMessage(200, 0)); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); + control_queue->push(pmt::make_any(channel_event_make(0, 0))); + control_queue->push(pmt::make_any(channel_event_make(1, 0))); + control_queue->push(pmt::make_any(command_event_make(200, 0))); control_thread->set_control_queue(control_queue); try @@ -181,16 +179,14 @@ TEST_F(ControlThreadTest /*unused*/, InstantiateRunControlMessages2 /*unused*/) config->set_property("GNSS-SDR.internal_fs_sps", "4000000"); std::unique_ptr<ControlThread> control_thread2(new ControlThread(config)); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue2 = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); - gr::msg_queue::sptr control_queue2 = gr::msg_queue::make(0); + control_queue2->push(pmt::make_any(channel_event_make(0, 0))); + control_queue2->push(pmt::make_any(channel_event_make(2, 0))); + control_queue2->push(pmt::make_any(channel_event_make(1, 0))); + control_queue2->push(pmt::make_any(channel_event_make(3, 0))); + control_queue2->push(pmt::make_any(command_event_make(200, 0))); - std::unique_ptr<ControlMessageFactory> control_msg_factory2(new ControlMessageFactory()); - - control_queue2->handle(control_msg_factory2->GetQueueMessage(0, 0)); - control_queue2->handle(control_msg_factory2->GetQueueMessage(2, 0)); - control_queue2->handle(control_msg_factory2->GetQueueMessage(1, 0)); - control_queue2->handle(control_msg_factory2->GetQueueMessage(3, 0)); - control_queue2->handle(control_msg_factory2->GetQueueMessage(200, 0)); control_thread2->set_control_queue(control_queue2); @@ -245,7 +241,7 @@ TEST_F(ControlThreadTest /*unused*/, StopReceiverProgrammatically /*unused*/) config->set_property("GNSS-SDR.internal_fs_sps", "4000000"); std::shared_ptr<ControlThread> control_thread = std::make_shared<ControlThread>(config); - gr::msg_queue::sptr control_queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> control_queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); control_thread->set_control_queue(control_queue); std::thread stop_receiver_thread(stop_receiver); diff --git a/src/tests/unit-tests/control-plane/gnss_block_factory_test.cc b/src/tests/unit-tests/control-plane/gnss_block_factory_test.cc index 0af18c4e1..7fd850f73 100644 --- a/src/tests/unit-tests/control-plane/gnss_block_factory_test.cc +++ b/src/tests/unit-tests/control-plane/gnss_block_factory_test.cc @@ -36,14 +36,15 @@ #include "gnss_block_factory.h" #include "acquisition_interface.h" #include "channel.h" +#include "concurrent_queue.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "observables_interface.h" #include "pvt_interface.h" #include "telemetry_decoder_interface.h" #include "tracking_interface.h" -#include <gnuradio/msg_queue.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <vector> TEST(GNSSBlockFactoryTest, InstantiateFileSignalSource) @@ -53,7 +54,7 @@ TEST(GNSSBlockFactoryTest, InstantiateFileSignalSource) std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat"; configuration->set_property("SignalSource.filename", filename); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); // Example of a factory as a shared_ptr std::shared_ptr<GNSSBlockFactory> factory = std::make_shared<GNSSBlockFactory>(); // Example of a block as a shared_ptr @@ -67,7 +68,7 @@ TEST(GNSSBlockFactoryTest, InstantiateWrongSignalSource) { std::shared_ptr<InMemoryConfiguration> configuration = std::make_shared<InMemoryConfiguration>(); configuration->set_property("SignalSource.implementation", "Pepito"); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); // Example of a factory as a unique_ptr std::unique_ptr<GNSSBlockFactory> factory; // Example of a block as a unique_ptr @@ -90,7 +91,7 @@ TEST(GNSSBlockFactoryTest, InstantiateSignalConditioner) TEST(GNSSBlockFactoryTest, InstantiateFIRFilter) { std::shared_ptr<InMemoryConfiguration> configuration = std::make_shared<InMemoryConfiguration>(); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); configuration->set_property("InputFilter.implementation", "Fir_Filter"); @@ -123,7 +124,7 @@ TEST(GNSSBlockFactoryTest, InstantiateFIRFilter) TEST(GNSSBlockFactoryTest, InstantiateFreqXlatingFIRFilter) { std::shared_ptr<InMemoryConfiguration> configuration = std::make_shared<InMemoryConfiguration>(); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); configuration->set_property("InputFilter.implementation", "Freq_Xlating_Fir_Filter"); @@ -158,7 +159,7 @@ TEST(GNSSBlockFactoryTest, InstantiateFreqXlatingFIRFilter) TEST(GNSSBlockFactoryTest, InstantiatePulseBlankingFilter) { std::shared_ptr<InMemoryConfiguration> configuration = std::make_shared<InMemoryConfiguration>(); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); configuration->set_property("InputFilter.implementation", "Pulse_Blanking_Filter"); std::unique_ptr<GNSSBlockFactory> factory; @@ -171,7 +172,7 @@ TEST(GNSSBlockFactoryTest, InstantiatePulseBlankingFilter) TEST(GNSSBlockFactoryTest, InstantiateNotchFilter) { std::shared_ptr<InMemoryConfiguration> configuration = std::make_shared<InMemoryConfiguration>(); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); configuration->set_property("InputFilter.implementation", "Notch_Filter"); std::unique_ptr<GNSSBlockFactory> factory; @@ -184,7 +185,7 @@ TEST(GNSSBlockFactoryTest, InstantiateNotchFilter) TEST(GNSSBlockFactoryTest, InstantiateNotchFilterLite) { std::shared_ptr<InMemoryConfiguration> configuration = std::make_shared<InMemoryConfiguration>(); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); configuration->set_property("InputFilter.implementation", "Notch_Filter_Lite"); std::unique_ptr<GNSSBlockFactory> factory; @@ -309,7 +310,7 @@ TEST(GNSSBlockFactoryTest, InstantiateChannels) configuration->set_property("Channel0.item_type", "gr_complex"); configuration->set_property("Acquisition_1C.implementation", "GPS_L1_CA_PCPS_Acquisition"); configuration->set_property("Channel1.item_type", "gr_complex"); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::unique_ptr<GNSSBlockFactory> factory; std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> channels = factory->GetChannels(configuration, queue); EXPECT_EQ(static_cast<unsigned int>(2), channels->size()); diff --git a/src/tests/unit-tests/control-plane/gnss_flowgraph_test.cc b/src/tests/unit-tests/control-plane/gnss_flowgraph_test.cc index 711b49d5f..56a7671d1 100644 --- a/src/tests/unit-tests/control-plane/gnss_flowgraph_test.cc +++ b/src/tests/unit-tests/control-plane/gnss_flowgraph_test.cc @@ -30,17 +30,17 @@ * ------------------------------------------------------------------------- */ +#include "gnss_flowgraph.h" #include "acquisition_interface.h" #include "channel.h" #include "channel_interface.h" +#include "concurrent_queue.h" #include "file_configuration.h" #include "file_signal_source.h" #include "gnss_block_interface.h" -#include "gnss_flowgraph.h" #include "in_memory_configuration.h" #include "pass_through.h" #include "tracking_interface.h" -#include <gnuradio/msg_queue.h> #include <gtest/gtest.h> @@ -68,7 +68,7 @@ TEST(GNSSFlowgraph /*unused*/, InstantiateConnectStartStopOldNotation /*unused*/ config->set_property("Observables.implementation", "Hybrid_Observables"); config->set_property("PVT.implementation", "RTKLIB_PVT"); - std::shared_ptr<GNSSFlowgraph> flowgraph = std::make_shared<GNSSFlowgraph>(config, gr::msg_queue::make(0)); + std::shared_ptr<GNSSFlowgraph> flowgraph = std::make_shared<GNSSFlowgraph>(config, std::make_shared<Concurrent_Queue<pmt::pmt_t>>()); EXPECT_NO_THROW(flowgraph->connect()); EXPECT_TRUE(flowgraph->connected()); @@ -103,7 +103,7 @@ TEST(GNSSFlowgraph /*unused*/, InstantiateConnectStartStop /*unused*/) config->set_property("Observables.implementation", "Hybrid_Observables"); config->set_property("PVT.implementation", "RTKLIB_PVT"); - std::shared_ptr<GNSSFlowgraph> flowgraph = std::make_shared<GNSSFlowgraph>(config, gr::msg_queue::make(0)); + std::shared_ptr<GNSSFlowgraph> flowgraph = std::make_shared<GNSSFlowgraph>(config, std::make_shared<Concurrent_Queue<pmt::pmt_t>>()); EXPECT_NO_THROW(flowgraph->connect()); EXPECT_TRUE(flowgraph->connected()); @@ -137,7 +137,7 @@ TEST(GNSSFlowgraph /*unused*/, InstantiateConnectStartStopGalileoE1B /*unused*/) config->set_property("Observables.implementation", "Hybrid_Observables"); config->set_property("PVT.implementation", "RTKLIB_PVT"); - std::shared_ptr<GNSSFlowgraph> flowgraph = std::make_shared<GNSSFlowgraph>(config, gr::msg_queue::make(0)); + std::shared_ptr<GNSSFlowgraph> flowgraph = std::make_shared<GNSSFlowgraph>(config, std::make_shared<Concurrent_Queue<pmt::pmt_t>>()); EXPECT_NO_THROW(flowgraph->connect()); EXPECT_TRUE(flowgraph->connected()); @@ -253,7 +253,7 @@ TEST(GNSSFlowgraph /*unused*/, InstantiateConnectStartStopHybrid /*unused*/) config->set_property("Observables.implementation", "Hybrid_Observables"); config->set_property("PVT.implementation", "RTKLIB_PVT"); - std::shared_ptr<GNSSFlowgraph> flowgraph = std::make_shared<GNSSFlowgraph>(config, gr::msg_queue::make(0)); + std::shared_ptr<GNSSFlowgraph> flowgraph = std::make_shared<GNSSFlowgraph>(config, std::make_shared<Concurrent_Queue<pmt::pmt_t>>()); EXPECT_NO_THROW(flowgraph->connect()); EXPECT_TRUE(flowgraph->connected()); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc index 8c9c87779..94f96e4a6 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc @@ -51,6 +51,7 @@ #include <gnuradio/blocks/interleaved_char_to_complex.h> #include <gnuradio/blocks/skiphead.h> #include <gnuradio/top_block.h> +#include <pmt/pmt.h> #include <thread> #include <utility> @@ -342,7 +343,7 @@ protected: Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<AcquisitionInterface> acquisition; std::shared_ptr<InMemoryConfiguration> config; @@ -598,7 +599,7 @@ int AcquisitionPerformanceTest::run_receiver() boost::shared_ptr<AcqPerfTest_msg_rx> msg_rx = AcqPerfTest_msg_rx_make(channel_internal_queue); gr::blocks::skiphead::sptr skiphead = gr::blocks::skiphead::make(sizeof(gr_complex), FLAGS_acq_test_skiphead); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); gnss_synchro = Gnss_Synchro(); init(); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc index c2658889a..8278d3e42 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b1i_pcps_acquisition_test.cc @@ -31,9 +31,10 @@ */ +#include "beidou_b1i_pcps_acquisition.h" #include "Beidou_B1I.h" #include "acquisition_dump_reader.h" -#include "beidou_b1i_pcps_acquisition.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -46,9 +47,9 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <utility> @@ -198,7 +199,7 @@ void BeidouB1iPcpsAcquisitionTest::plot_grid() std::vector<int> *doppler = &acq_dump.doppler; std::vector<unsigned int> *samples = &acq_dump.samples; - std::vector<std::vector<float> > *mag = &acq_dump.mag; + std::vector<std::vector<float>> *mag = &acq_dump.mag; const std::string gnuplot_executable(FLAGS_gnuplot_executable); if (gnuplot_executable.empty()) @@ -261,7 +262,7 @@ TEST_F(BeidouB1iPcpsAcquisitionTest, ConnectAndRun) int nsamples = 25000; std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); init(); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b3i_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b3i_pcps_acquisition_test.cc index 725135d5b..6415b44cc 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b3i_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/beidou_b3i_pcps_acquisition_test.cc @@ -31,9 +31,10 @@ */ +#include "beidou_b3i_pcps_acquisition.h" #include "Beidou_B3I.h" #include "acquisition_dump_reader.h" -#include "beidou_b3i_pcps_acquisition.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -46,9 +47,9 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <utility> @@ -197,7 +198,7 @@ void BeidouB3iPcpsAcquisitionTest::plot_grid() std::vector<int> *doppler = &acq_dump.doppler; std::vector<unsigned int> *samples = &acq_dump.samples; - std::vector<std::vector<float> > *mag = &acq_dump.mag; + std::vector<std::vector<float>> *mag = &acq_dump.mag; const std::string gnuplot_executable(FLAGS_gnuplot_executable); if (gnuplot_executable.empty()) @@ -260,7 +261,7 @@ TEST_F(BeidouB3iPcpsAcquisitionTest, ConnectAndRun) int nsamples = 50000; std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); init(); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_8ms_ambiguous_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_8ms_ambiguous_acquisition_gsoc2013_test.cc index a1517dd8f..37c8396e0 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_8ms_ambiguous_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_8ms_ambiguous_acquisition_gsoc2013_test.cc @@ -30,8 +30,9 @@ */ -#include "fir_filter.h" #include "galileo_e1_pcps_8ms_ambiguous_acquisition.h" +#include "concurrent_queue.h" +#include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -43,8 +44,8 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> +#include <pmt/pmt.h> #include <chrono> #include <thread> #include <utility> @@ -134,7 +135,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GalileoE1Pcps8msAmbiguousAcquisition> acquisition; std::shared_ptr<GNSSBlockFactory> factory; @@ -433,7 +434,7 @@ TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ConnectAndRun) std::chrono::duration<double> elapsed_seconds(0.0); config_1(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition", 1, 0); @@ -483,7 +484,7 @@ TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ConnectAndRun) TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition", 1, 0, queue); @@ -572,7 +573,7 @@ TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1Pcps8msAmbiguousAcquisition>(acq_); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc index b9c692c4b..fc90be2ed 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc @@ -31,8 +31,9 @@ */ -#include "fir_filter.h" #include "galileo_e1_pcps_ambiguous_acquisition.h" +#include "concurrent_queue.h" +#include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -43,7 +44,6 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <chrono> #include <utility> @@ -134,7 +134,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GalileoE1PcpsAmbiguousAcquisition> acquisition; std::shared_ptr<GNSSBlockFactory> factory; @@ -435,7 +435,7 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ConnectAndRun) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); config_1(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 0); @@ -466,7 +466,7 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsAmbiguousAcquisition>(acq_); boost::shared_ptr<GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test_msg_rx> msg_rx = GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); @@ -551,7 +551,7 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsProbabi { config_2(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsAmbiguousAcquisition>(acq_); boost::shared_ptr<GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test_msg_rx> msg_rx = GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc index 591f7bf25..850367401 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc @@ -42,6 +42,7 @@ #include "galileo_e1_pcps_ambiguous_acquisition.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -52,8 +53,8 @@ #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/skiphead.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> +#include <pmt/pmt.h> #include <chrono> #include <utility> #ifdef GR_GREATER_38 @@ -140,7 +141,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GNSSBlockFactory> factory; std::shared_ptr<InMemoryConfiguration> config; @@ -217,7 +218,7 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoCTest, ConnectAndRun) int nsamples = 4 * fs_in; std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); init(); @@ -248,7 +249,7 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoCTest, ValidationOfResults) { std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); init(); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc index 58fa9b8e6..7b4815f34 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc @@ -31,9 +31,10 @@ */ +#include "galileo_e1_pcps_ambiguous_acquisition.h" #include "Galileo_E1.h" #include "acquisition_dump_reader.h" -#include "galileo_e1_pcps_ambiguous_acquisition.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -47,9 +48,9 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <utility> @@ -200,7 +201,7 @@ void GalileoE1PcpsAmbiguousAcquisitionTest::plot_grid() std::vector<int>* doppler = &acq_dump.doppler; std::vector<unsigned int>* samples = &acq_dump.samples; - std::vector<std::vector<float> >* mag = &acq_dump.mag; + std::vector<std::vector<float>>* mag = &acq_dump.mag; const std::string gnuplot_executable(FLAGS_gnuplot_executable); if (gnuplot_executable.empty()) @@ -265,7 +266,7 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionTest, ConnectAndRun) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); top_block = gr::make_top_block("Acquisition test"); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); init(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 0); std::shared_ptr<AcquisitionInterface> acquisition = std::dynamic_pointer_cast<AcquisitionInterface>(acq_); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_cccwsr_ambiguous_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_cccwsr_ambiguous_acquisition_gsoc2013_test.cc index 60d23b6ba..d69972648 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_cccwsr_ambiguous_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_cccwsr_ambiguous_acquisition_gsoc2013_test.cc @@ -31,8 +31,9 @@ */ -#include "fir_filter.h" #include "galileo_e1_pcps_cccwsr_ambiguous_acquisition.h" +#include "concurrent_queue.h" +#include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -44,8 +45,8 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> +#include <pmt/pmt.h> #include <chrono> #include <thread> #include <utility> @@ -135,7 +136,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GalileoE1PcpsCccwsrAmbiguousAcquisition> acquisition; std::shared_ptr<GNSSBlockFactory> factory; @@ -438,7 +439,7 @@ TEST_F(GalileoE1PcpsCccwsrAmbiguousAcquisitionTest, ConnectAndRun) config_1(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsCccwsrAmbiguousAcquisition>(acq_); @@ -468,7 +469,7 @@ TEST_F(GalileoE1PcpsCccwsrAmbiguousAcquisitionTest, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsCccwsrAmbiguousAcquisition>(acq_); boost::shared_ptr<GalileoE1PcpsCccwsrAmbiguousAcquisitionTest_msg_rx> msg_rx = GalileoE1PcpsCccwsrAmbiguousAcquisitionTest_msg_rx_make(channel_internal_queue); @@ -561,7 +562,7 @@ TEST_F(GalileoE1PcpsCccwsrAmbiguousAcquisitionTest, ValidationOfResultsProbabili { config_2(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsCccwsrAmbiguousAcquisition>(acq_); boost::shared_ptr<GalileoE1PcpsCccwsrAmbiguousAcquisitionTest_msg_rx> msg_rx = GalileoE1PcpsCccwsrAmbiguousAcquisitionTest_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc index 8c06a3419..45287515c 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc @@ -31,8 +31,8 @@ */ -#include "fir_filter.h" #include "galileo_e1_pcps_quicksync_ambiguous_acquisition.h" +#include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -46,6 +46,7 @@ #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/top_block.h> +#include <pmt/pmt.h> #include <chrono> #include <fstream> #include <stdexcept> @@ -142,7 +143,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GalileoE1PcpsQuickSyncAmbiguousAcquisition> acquisition; std::shared_ptr<GNSSBlockFactory> factory; @@ -560,7 +561,7 @@ TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ConnectAndRun) std::chrono::time_point<std::chrono::system_clock> begin, end; std::chrono::duration<double> elapsed_seconds(0); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); config_1(); @@ -597,7 +598,7 @@ TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ValidationOfResul LOG(INFO) << "Start validation of results test"; config_1(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsQuickSyncAmbiguousAcquisition>(acq_); @@ -688,7 +689,7 @@ TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ValidationOfResul LOG(INFO) << "Start validation of results with noise+interference test"; config_3(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsQuickSyncAmbiguousAcquisition>(acq_); @@ -776,7 +777,7 @@ TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ValidationOfResul { config_2(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsQuickSyncAmbiguousAcquisition>(acq_); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_tong_ambiguous_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_tong_ambiguous_acquisition_gsoc2013_test.cc index a021e5196..d7c414fcf 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_tong_ambiguous_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_tong_ambiguous_acquisition_gsoc2013_test.cc @@ -30,9 +30,10 @@ * ------------------------------------------------------------------------- */ +#include "galileo_e1_pcps_tong_ambiguous_acquisition.h" +#include "concurrent_queue.h" #include "configuration_interface.h" #include "fir_filter.h" -#include "galileo_e1_pcps_tong_ambiguous_acquisition.h" #include "gen_signal_source.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -44,9 +45,9 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <thread> #include <utility> @@ -135,7 +136,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GalileoE1PcpsTongAmbiguousAcquisition> acquisition; std::shared_ptr<GNSSBlockFactory> factory; @@ -438,7 +439,7 @@ TEST_F(GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test, ConnectAndRun) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0.0); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); config_1(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsTongAmbiguousAcquisition>(acq_); @@ -466,7 +467,7 @@ TEST_F(GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsTongAmbiguousAcquisition>(acq_); boost::shared_ptr<GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test_msg_rx> msg_rx = GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); @@ -555,7 +556,7 @@ TEST_F(GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsPro { config_2(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GNSSBlockInterface> acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition", 1, 0); acquisition = std::dynamic_pointer_cast<GalileoE1PcpsTongAmbiguousAcquisition>(acq_); boost::shared_ptr<GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test_msg_rx> msg_rx = GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e5a_pcps_acquisition_gsoc2014_gensource_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e5a_pcps_acquisition_gsoc2014_gensource_test.cc index 652384472..cdf5ca0c0 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e5a_pcps_acquisition_gsoc2014_gensource_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e5a_pcps_acquisition_gsoc2014_gensource_test.cc @@ -29,6 +29,7 @@ * ------------------------------------------------------------------------- */ +#include "concurrent_queue.h" #include "fir_filter.h" #include "galileo_e5a_noncoherent_iq_acquisition_caf.h" #include "gen_signal_source.h" @@ -42,8 +43,8 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> +#include <pmt/pmt.h> #include <chrono> #include <utility> #ifdef GR_GREATER_38 @@ -131,7 +132,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GalileoE5aNoncoherentIQAcquisitionCaf> acquisition; @@ -540,7 +541,7 @@ TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, ConnectAndRun) std::chrono::duration<double> elapsed_seconds(0); acquisition = std::make_shared<GalileoE5aNoncoherentIQAcquisitionCaf>(config.get(), "Acquisition_5X", 1, 0); boost::shared_ptr<GalileoE5aPcpsAcquisitionGSoC2014GensourceTest_msg_rx> msg_rx = GalileoE5aPcpsAcquisitionGSoC2014GensourceTest_msg_rx_make(channel_internal_queue); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); ASSERT_NO_THROW({ @@ -566,7 +567,7 @@ TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, ConnectAndRun) TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, ValidationOfSIM) { config_1(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); acquisition = std::make_shared<GalileoE5aNoncoherentIQAcquisitionCaf>(config.get(), "Acquisition_5X", 1, 0); boost::shared_ptr<GalileoE5aPcpsAcquisitionGSoC2014GensourceTest_msg_rx> msg_rx = GalileoE5aPcpsAcquisitionGSoC2014GensourceTest_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_gsoc2017_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_gsoc2017_test.cc index dbee4f413..6972e356b 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_gsoc2017_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_gsoc2017_test.cc @@ -31,10 +31,11 @@ */ +#include "glonass_l1_ca_pcps_acquisition.h" +#include "concurrent_queue.h" #include "configuration_interface.h" #include "freq_xlating_fir_filter.h" #include "gen_signal_source.h" -#include "glonass_l1_ca_pcps_acquisition.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" @@ -46,9 +47,9 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <thread> #include <utility> @@ -140,7 +141,7 @@ protected: Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; GlonassL1CaPcpsAcquisition* acquisition; std::shared_ptr<InMemoryConfiguration> config; @@ -442,7 +443,7 @@ TEST_F(GlonassL1CaPcpsAcquisitionGSoC2017Test, ConnectAndRun) int nsamples = floor(fs_in * integration_time_ms * 1e-3); std::chrono::time_point<std::chrono::system_clock> begin, end; std::chrono::duration<double> elapsed_seconds(0); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); config_1(); @@ -474,7 +475,7 @@ TEST_F(GlonassL1CaPcpsAcquisitionGSoC2017Test, ConnectAndRun) TEST_F(GlonassL1CaPcpsAcquisitionGSoC2017Test, ValidationOfResults) { config_1(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); acquisition = new GlonassL1CaPcpsAcquisition(config.get(), "Acquisition", 1, 0); @@ -563,7 +564,7 @@ TEST_F(GlonassL1CaPcpsAcquisitionGSoC2017Test, ValidationOfResults) TEST_F(GlonassL1CaPcpsAcquisitionGSoC2017Test, ValidationOfResultsProbabilities) { config_2(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); acquisition = new GlonassL1CaPcpsAcquisition(config.get(), "Acquisition", 1, 0); boost::shared_ptr<GlonassL1CaPcpsAcquisitionGSoC2017Test_msg_rx> msg_rx = GlonassL1CaPcpsAcquisitionGSoC2017Test_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_test.cc index 86602ec9c..e339018a4 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_test.cc @@ -30,8 +30,9 @@ * ------------------------------------------------------------------------- */ -#include "freq_xlating_fir_filter.h" #include "glonass_l1_ca_pcps_acquisition.h" +#include "concurrent_queue.h" +#include "freq_xlating_fir_filter.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -41,9 +42,9 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <cstdlib> #include <utility> @@ -184,7 +185,7 @@ TEST_F(GlonassL1CaPcpsAcquisitionTest, ConnectAndRun) int nsamples = 62314; std::chrono::time_point<std::chrono::system_clock> begin, end; std::chrono::duration<double> elapsed_seconds(0); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); init(); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l2_ca_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l2_ca_pcps_acquisition_test.cc index ba0611f90..1086d3119 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l2_ca_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l2_ca_pcps_acquisition_test.cc @@ -30,10 +30,11 @@ */ +#include "glonass_l2_ca_pcps_acquisition.h" +#include "concurrent_queue.h" #include "configuration_interface.h" #include "fir_filter.h" #include "gen_signal_source.h" -#include "glonass_l2_ca_pcps_acquisition.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" @@ -45,9 +46,9 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <thread> #ifdef GR_GREATER_38 @@ -140,9 +141,9 @@ protected: void process_message(); void stop_queue(); - concurrent_queue<int> channel_internal_queue; + Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; GlonassL2CaPcpsAcquisition* acquisition; std::shared_ptr<InMemoryConfiguration> config; @@ -440,7 +441,7 @@ TEST_F(GlonassL2CaPcpsAcquisitionTest, ConnectAndRun) int nsamples = floor(fs_in * integration_time_ms * 1e-3); std::chrono::time_point<std::chrono::system_clock> begin, end; std::chrono::duration<double> elapsed_seconds(0); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); config_1(); @@ -472,7 +473,7 @@ TEST_F(GlonassL2CaPcpsAcquisitionTest, ConnectAndRun) TEST_F(GlonassL2CaPcpsAcquisitionTest, ValidationOfResults) { config_1(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); acquisition = new GlonassL2CaPcpsAcquisition(config.get(), "Acquisition_2G", 1, 0); @@ -562,7 +563,7 @@ TEST_F(GlonassL2CaPcpsAcquisitionTest, ValidationOfResults) TEST_F(GlonassL2CaPcpsAcquisitionTest, ValidationOfResultsProbabilities) { config_2(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); acquisition = new GlonassL2CaPcpsAcquisition(config.get(), "Acquisition_2G", 1, 0); boost::shared_ptr<GlonassL2CaPcpsAcquisitionTest_msg_rx> msg_rx = GlonassL2CaPcpsAcquisitionTest_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc index e4ef9974b..b6223065b 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc @@ -31,13 +31,14 @@ */ +#include "gps_l1_ca_pcps_acquisition.h" +#include "concurrent_queue.h" #include "configuration_interface.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" -#include "gps_l1_ca_pcps_acquisition.h" #include "in_memory_configuration.h" #include "pass_through.h" #include "signal_generator.h" @@ -46,9 +47,9 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <thread> #include <utility> @@ -140,7 +141,7 @@ protected: Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; GpsL1CaPcpsAcquisition* acquisition; std::shared_ptr<InMemoryConfiguration> config; @@ -435,7 +436,7 @@ TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ConnectAndRun) int nsamples = floor(fs_in * integration_time_ms * 1e-3); std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); config_1(); @@ -467,7 +468,7 @@ TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ConnectAndRun) TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); acquisition = new GpsL1CaPcpsAcquisition(config.get(), "Acquisition_1C", 1, 0); @@ -557,7 +558,7 @@ TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ValidationOfResults) TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); acquisition = new GpsL1CaPcpsAcquisition(config.get(), "Acquisition_1C", 1, 0); boost::shared_ptr<GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx> msg_rx = GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test.cc index 0ec417ee0..541a2a3b8 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test.cc @@ -31,14 +31,15 @@ */ +#include "gps_l1_ca_pcps_acquisition.h" #include "GPS_L1_CA.h" #include "acquisition_dump_reader.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" #include "gnuplot_i.h" -#include "gps_l1_ca_pcps_acquisition.h" #include "in_memory_configuration.h" #include "test_flags.h" #include <boost/make_shared.hpp> @@ -46,7 +47,6 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -199,7 +199,7 @@ void GpsL1CaPcpsAcquisitionTest::plot_grid() std::vector<int> *doppler = &acq_dump.doppler; std::vector<unsigned int> *samples = &acq_dump.samples; - std::vector<std::vector<float> > *mag = &acq_dump.mag; + std::vector<std::vector<float>> *mag = &acq_dump.mag; const std::string gnuplot_executable(FLAGS_gnuplot_executable); if (gnuplot_executable.empty()) @@ -262,7 +262,7 @@ TEST_F(GpsL1CaPcpsAcquisitionTest, ConnectAndRun) int nsamples = 4000; std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); init(); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc index 58dd36719..dcc07a9e5 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc @@ -41,7 +41,7 @@ #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/throttle.h> -#include <gnuradio/msg_queue.h> +#include "concurrent_queue.h" #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_opencl_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_opencl_acquisition_gsoc2013_test.cc index 702b89f31..5a6bb87aa 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_opencl_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_opencl_acquisition_gsoc2013_test.cc @@ -31,13 +31,14 @@ */ +#include "gps_l1_ca_pcps_opencl_acquisition.h" +#include "concurrent_queue.h" #include "configuration_interface.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" -#include "gps_l1_ca_pcps_opencl_acquisition.h" #include "in_memory_configuration.h" #include "signal_generator.h" #include "signal_generator_c.h" @@ -45,7 +46,6 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <chrono> #include <thread> @@ -118,7 +118,7 @@ class GpsL1CaPcpsOpenClAcquisitionGSoC2013Test : public ::testing::Test protected: GpsL1CaPcpsOpenClAcquisitionGSoC2013Test() { - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); item_size = sizeof(gr_complex); stop = false; @@ -140,7 +140,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GpsL1CaPcpsOpenClAcquisition> acquisition; std::shared_ptr<InMemoryConfiguration> config; diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc index 7dfcc5ea1..3f471fa44 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc @@ -31,11 +31,12 @@ */ +#include "gps_l1_ca_pcps_quicksync_acquisition.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" -#include "gps_l1_ca_pcps_quicksync_acquisition.h" #include "in_memory_configuration.h" #include "signal_generator.h" #include "signal_generator_c.h" @@ -43,7 +44,6 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -141,7 +141,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GNSSBlockFactory> factory; std::shared_ptr<GpsL1CaPcpsQuickSyncAcquisition> acquisition; @@ -545,7 +545,7 @@ TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ConnectAndRun) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0.0); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); boost::shared_ptr<GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx> msg_rx = GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); config_1(); @@ -575,7 +575,7 @@ TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); acquisition = std::make_shared<GpsL1CaPcpsQuickSyncAcquisition>(config.get(), "Acquisition_1C", 1, 0); boost::shared_ptr<GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx> msg_rx = GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); @@ -669,7 +669,7 @@ TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ValidationOfResultsWithNoise //config_3(); config_1(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); acquisition = std::make_shared<GpsL1CaPcpsQuickSyncAcquisition>(config.get(), "Acquisition_1C", 1, 0); boost::shared_ptr<GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx> msg_rx = GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); @@ -760,7 +760,7 @@ TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ValidationOfResultsProbabili { config_2(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); acquisition = std::make_shared<GpsL1CaPcpsQuickSyncAcquisition>(config.get(), "Acquisition_1C", 1, 0); boost::shared_ptr<GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx> msg_rx = GpsL1CaPcpsAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_tong_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_tong_acquisition_gsoc2013_test.cc index b5977ff39..fd1a57464 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_tong_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_tong_acquisition_gsoc2013_test.cc @@ -31,13 +31,14 @@ */ +#include "gps_l1_ca_pcps_tong_acquisition.h" +#include "concurrent_queue.h" #include "configuration_interface.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" -#include "gps_l1_ca_pcps_tong_acquisition.h" #include "in_memory_configuration.h" #include "signal_generator.h" #include "signal_generator_c.h" @@ -45,7 +46,6 @@ #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -135,7 +135,7 @@ protected: void stop_queue(); Concurrent_Queue<int> channel_internal_queue; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GpsL1CaPcpsTongAcquisition> acquisition; std::shared_ptr<InMemoryConfiguration> config; @@ -431,7 +431,7 @@ TEST_F(GpsL1CaPcpsTongAcquisitionGSoC2013Test, ConnectAndRun) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); config_1(); acquisition = std::make_shared<GpsL1CaPcpsTongAcquisition>(config.get(), "Acquisition_1C", 1, 0); @@ -461,7 +461,7 @@ TEST_F(GpsL1CaPcpsTongAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); acquisition = std::make_shared<GpsL1CaPcpsTongAcquisition>(config.get(), "Acquisition_1C", 1, 0); boost::shared_ptr<GpsL1CaPcpsTongAcquisitionGSoC2013Test_msg_rx> msg_rx = GpsL1CaPcpsTongAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); @@ -550,7 +550,7 @@ TEST_F(GpsL1CaPcpsTongAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); acquisition = std::make_shared<GpsL1CaPcpsTongAcquisition>(config.get(), "Acquisition_1C", 1, 0); boost::shared_ptr<GpsL1CaPcpsTongAcquisitionGSoC2013Test_msg_rx> msg_rx = GpsL1CaPcpsTongAcquisitionGSoC2013Test_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc index de7bc4e27..d810a3a12 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc @@ -31,14 +31,15 @@ */ +#include "gps_l2_m_pcps_acquisition.h" #include "GPS_L2C.h" #include "acquisition_dump_reader.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" #include "gnuplot_i.h" -#include "gps_l2_m_pcps_acquisition.h" #include "in_memory_configuration.h" #include "test_flags.h" #include <boost/make_shared.hpp> @@ -47,7 +48,6 @@ #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/interleaved_short_to_complex.h> #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -143,7 +143,7 @@ protected: void init(); void plot_grid(); - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GNSSBlockFactory> factory; std::shared_ptr<InMemoryConfiguration> config; @@ -202,7 +202,7 @@ void GpsL2MPcpsAcquisitionTest::plot_grid() std::vector<int> *doppler = &acq_dump.doppler; std::vector<unsigned int> *samples = &acq_dump.samples; - std::vector<std::vector<float> > *mag = &acq_dump.mag; + std::vector<std::vector<float>> *mag = &acq_dump.mag; const std::string gnuplot_executable(FLAGS_gnuplot_executable); if (gnuplot_executable.empty()) @@ -255,7 +255,7 @@ void GpsL2MPcpsAcquisitionTest::plot_grid() TEST_F(GpsL2MPcpsAcquisitionTest, Instantiate) { init(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<GpsL2MPcpsAcquisition> acquisition = std::make_shared<GpsL2MPcpsAcquisition>(config.get(), "Acquisition_2S", 1, 0); } @@ -265,7 +265,7 @@ TEST_F(GpsL2MPcpsAcquisitionTest, ConnectAndRun) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); init(); std::shared_ptr<GpsL2MPcpsAcquisition> acquisition = std::make_shared<GpsL2MPcpsAcquisition>(config.get(), "Acquisition_2S", 1, 0); @@ -295,7 +295,7 @@ TEST_F(GpsL2MPcpsAcquisitionTest, ValidationOfResults) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); top_block = gr::make_top_block("Acquisition test"); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); double expected_delay_samples = 1; //2004; double expected_doppler_hz = 1200; //3000; diff --git a/src/tests/unit-tests/signal-processing-blocks/filter/fir_filter_test.cc b/src/tests/unit-tests/signal-processing-blocks/filter/fir_filter_test.cc index 03d055fac..32173ef44 100644 --- a/src/tests/unit-tests/signal-processing-blocks/filter/fir_filter_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/filter/fir_filter_test.cc @@ -39,6 +39,7 @@ #else #include <gnuradio/analog/sig_source_c.h> #endif +#include "concurrent_queue.h" #include "file_signal_source.h" #include "fir_filter.h" #include "gnss_block_factory.h" @@ -48,7 +49,6 @@ #include "interleaved_byte_to_complex_byte.h" #include "interleaved_short_to_complex_short.h" #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gtest/gtest.h> @@ -59,7 +59,7 @@ class FirFilterTest : public ::testing::Test protected: FirFilterTest() { - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); item_size = sizeof(gr_complex); config = std::make_shared<InMemoryConfiguration>(); } @@ -70,7 +70,7 @@ protected: void configure_cbyte_gr_complex(); void configure_gr_complex_gr_complex(); void configure_cshort_cshort(); - boost::shared_ptr<gr::msg_queue> queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<InMemoryConfiguration> config; size_t item_size; diff --git a/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_lite_test.cc b/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_lite_test.cc index 69c1dddf9..6aa42dafd 100644 --- a/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_lite_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_lite_test.cc @@ -39,6 +39,7 @@ #else #include <gnuradio/analog/sig_source_c.h> #endif +#include "concurrent_queue.h" #include "file_signal_source.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" @@ -46,7 +47,6 @@ #include "in_memory_configuration.h" #include "notch_filter_lite.h" #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gtest/gtest.h> @@ -57,7 +57,7 @@ class NotchFilterLiteTest : public ::testing::Test protected: NotchFilterLiteTest() { - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); item_size = sizeof(gr_complex); config = std::make_shared<InMemoryConfiguration>(); nsamples = FLAGS_notch_filter_lite_test_nsamples; @@ -66,7 +66,7 @@ protected: void init(); void configure_gr_complex_gr_complex(); - boost::shared_ptr<gr::msg_queue> queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<InMemoryConfiguration> config; size_t item_size; diff --git a/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_test.cc b/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_test.cc index 8fb783b5f..c20c894c6 100644 --- a/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/filter/notch_filter_test.cc @@ -39,6 +39,7 @@ #else #include <gnuradio/analog/sig_source_c.h> #endif +#include "concurrent_queue.h" #include "file_signal_source.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" @@ -46,7 +47,6 @@ #include "in_memory_configuration.h" #include "notch_filter.h" #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gtest/gtest.h> @@ -57,7 +57,7 @@ class NotchFilterTest : public ::testing::Test protected: NotchFilterTest() { - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); item_size = sizeof(gr_complex); config = std::make_shared<InMemoryConfiguration>(); nsamples = FLAGS_notch_filter_test_nsamples; @@ -66,7 +66,7 @@ protected: void init(); void configure_gr_complex_gr_complex(); - boost::shared_ptr<gr::msg_queue> queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<InMemoryConfiguration> config; size_t item_size; diff --git a/src/tests/unit-tests/signal-processing-blocks/filter/pulse_blanking_filter_test.cc b/src/tests/unit-tests/signal-processing-blocks/filter/pulse_blanking_filter_test.cc index d31b971fb..dab090737 100644 --- a/src/tests/unit-tests/signal-processing-blocks/filter/pulse_blanking_filter_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/filter/pulse_blanking_filter_test.cc @@ -39,6 +39,7 @@ #else #include <gnuradio/analog/sig_source_c.h> #endif +#include "concurrent_queue.h" #include "file_signal_source.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" @@ -46,7 +47,6 @@ #include "in_memory_configuration.h" #include "pulse_blanking_filter.h" #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> #include <gtest/gtest.h> @@ -57,7 +57,7 @@ class PulseBlankingFilterTest : public ::testing::Test protected: PulseBlankingFilterTest() { - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); item_size = sizeof(gr_complex); config = std::make_shared<InMemoryConfiguration>(); nsamples = FLAGS_pb_filter_test_nsamples; @@ -66,7 +66,7 @@ protected: void init(); void configure_gr_complex_gr_complex(); - boost::shared_ptr<gr::msg_queue> queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<InMemoryConfiguration> config; size_t item_size; diff --git a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc index 497805de7..0e7774842 100644 --- a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc @@ -30,6 +30,7 @@ * ------------------------------------------------------------------------- */ +#include "hybrid_observables.h" #include "GPS_L1_CA.h" #include "GPS_L2C.h" #include "GPS_L5.h" @@ -51,7 +52,6 @@ #include "gps_l1_ca_pcps_acquisition.h" #include "gps_l2_m_pcps_acquisition.h" #include "gps_l5i_pcps_acquisition.h" -#include "hybrid_observables.h" #include "in_memory_configuration.h" #include "observable_tests_flags.h" #include "observables_dump_reader.h" @@ -707,9 +707,9 @@ void HybridObservablesTest::configure_receiver( std::memcpy(static_cast<void*>(gnss_synchro_master.Signal), str, 3); // copy string into synchro char array: 2 char + null config->set_property("Tracking.early_late_space_chips", "0.15"); - config->set_property("Tracking.very_early_late_space_chips", "0.6"); + config->set_property("Tracking.very_early_late_space_chips", "0.5"); config->set_property("Tracking.early_late_space_narrow_chips", "0.15"); - config->set_property("Tracking.very_early_late_space_narrow_chips", "0.6"); + config->set_property("Tracking.very_early_late_space_narrow_chips", "0.5"); config->set_property("Tracking.track_pilot", "true"); config->set_property("TelemetryDecoder.implementation", "Galileo_E1B_Telemetry_Decoder"); @@ -741,7 +741,8 @@ void HybridObservablesTest::configure_receiver( } config->set_property("Tracking.early_late_space_chips", "0.5"); config->set_property("Tracking.track_pilot", "true"); - config->set_property("Tracking.order", "2"); + config->set_property("Tracking.pll_filter_order", "2"); + config->set_property("Tracking.dll_filter_order", "2"); config->set_property("TelemetryDecoder.implementation", "Galileo_E5a_Telemetry_Decoder"); } @@ -755,7 +756,8 @@ void HybridObservablesTest::configure_receiver( config->set_property("Tracking.early_late_space_chips", "0.5"); config->set_property("Tracking.track_pilot", "true"); - config->set_property("Tracking.order", "2"); + config->set_property("Tracking.pll_filter_order", "2"); + config->set_property("Tracking.dll_filter_order", "2"); config->set_property("TelemetryDecoder.implementation", "GPS_L5_Telemetry_Decoder"); } @@ -875,78 +877,81 @@ void HybridObservablesTest::check_results_carrier_phase_double_diff( int size2 = measured_ch1.col(0).n_rows; double t1 = std::min(measured_ch0(size1 - 1, 0), measured_ch1(size2 - 1, 0)); - arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); - //conversion between arma::vec and std:vector - arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); - std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); - - - arma::vec true_ch0_carrier_phase_interp; - arma::vec true_ch1_carrier_phase_interp; - arma::interp1(true_tow_ch0_s, true_ch0.col(3), t, true_ch0_carrier_phase_interp); - arma::interp1(true_tow_ch1_s, true_ch1.col(3), t, true_ch1_carrier_phase_interp); - - arma::vec meas_ch0_carrier_phase_interp; - arma::vec meas_ch1_carrier_phase_interp; - arma::interp1(measured_ch0.col(0), measured_ch0.col(3), t, meas_ch0_carrier_phase_interp); - arma::interp1(measured_ch1.col(0), measured_ch1.col(3), t, meas_ch1_carrier_phase_interp); - - // generate double difference accumulated carrier phases - //compute error without the accumulated carrier phase offsets (which depends on the receiver starting time) - arma::vec delta_true_carrier_phase_cycles = (true_ch0_carrier_phase_interp - true_ch0_carrier_phase_interp(0)) - (true_ch1_carrier_phase_interp - true_ch1_carrier_phase_interp(0)); - arma::vec delta_measured_carrier_phase_cycles = (meas_ch0_carrier_phase_interp - meas_ch0_carrier_phase_interp(0)) - (meas_ch1_carrier_phase_interp - meas_ch1_carrier_phase_interp(0)); - - //2. RMSE - arma::vec err; - - err = delta_measured_carrier_phase_cycles - delta_true_carrier_phase_cycles; - arma::vec err2 = arma::square(err); - double rmse = sqrt(arma::mean(err2)); - - //3. Mean err and variance - double error_mean = arma::mean(err); - double error_var = arma::var(err); - - // 4. Peaks - double max_error = arma::max(err); - double min_error = arma::min(err); - - //5. report - std::streamsize ss = std::cout.precision(); - std::cout << std::setprecision(10) << data_title << "Double diff Carrier Phase RMSE = " - << rmse << ", mean = " << error_mean - << ", stdev = " << sqrt(error_var) - << " (max,min) = " << max_error - << "," << min_error - << " [Cycles]" << std::endl; - std::cout.precision(ss); - - //plots - if (FLAGS_show_plots) + if ((t1 - t0) > 0) { - Gnuplot g3("linespoints"); - g3.set_title(data_title + "Double diff Carrier Phase error [Cycles]"); - g3.set_grid(); - g3.set_xlabel("Time [s]"); - g3.set_ylabel("Double diff Carrier Phase error [Cycles]"); + arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); //conversion between arma::vec and std:vector - std::vector<double> range_error_m(err.colptr(0), err.colptr(0) + err.n_rows); - g3.cmd("set key box opaque"); - g3.plot_xy(time_vector, range_error_m, - "Double diff Carrier Phase error"); - g3.set_legend(); - g3.savetops(data_title + "double_diff_carrier_phase_error"); + arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); + std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); - g3.showonscreen(); // window output + + arma::vec true_ch0_carrier_phase_interp; + arma::vec true_ch1_carrier_phase_interp; + arma::interp1(true_tow_ch0_s, true_ch0.col(3), t, true_ch0_carrier_phase_interp); + arma::interp1(true_tow_ch1_s, true_ch1.col(3), t, true_ch1_carrier_phase_interp); + + arma::vec meas_ch0_carrier_phase_interp; + arma::vec meas_ch1_carrier_phase_interp; + arma::interp1(measured_ch0.col(0), measured_ch0.col(3), t, meas_ch0_carrier_phase_interp); + arma::interp1(measured_ch1.col(0), measured_ch1.col(3), t, meas_ch1_carrier_phase_interp); + + // generate double difference accumulated carrier phases + //compute error without the accumulated carrier phase offsets (which depends on the receiver starting time) + arma::vec delta_true_carrier_phase_cycles = (true_ch0_carrier_phase_interp - true_ch0_carrier_phase_interp(0)) - (true_ch1_carrier_phase_interp - true_ch1_carrier_phase_interp(0)); + arma::vec delta_measured_carrier_phase_cycles = (meas_ch0_carrier_phase_interp - meas_ch0_carrier_phase_interp(0)) - (meas_ch1_carrier_phase_interp - meas_ch1_carrier_phase_interp(0)); + + //2. RMSE + arma::vec err; + + err = delta_measured_carrier_phase_cycles - delta_true_carrier_phase_cycles; + arma::vec err2 = arma::square(err); + double rmse = sqrt(arma::mean(err2)); + + //3. Mean err and variance + double error_mean = arma::mean(err); + double error_var = arma::var(err); + + // 4. Peaks + double max_error = arma::max(err); + double min_error = arma::min(err); + + //5. report + std::streamsize ss = std::cout.precision(); + std::cout << std::setprecision(10) << data_title << "Double diff Carrier Phase RMSE = " + << rmse << ", mean = " << error_mean + << ", stdev = " << sqrt(error_var) + << " (max,min) = " << max_error + << "," << min_error + << " [Cycles]" << std::endl; + std::cout.precision(ss); + + //plots + if (FLAGS_show_plots) + { + Gnuplot g3("linespoints"); + g3.set_title(data_title + "Double diff Carrier Phase error [Cycles]"); + g3.set_grid(); + g3.set_xlabel("Time [s]"); + g3.set_ylabel("Double diff Carrier Phase error [Cycles]"); + //conversion between arma::vec and std:vector + std::vector<double> range_error_m(err.colptr(0), err.colptr(0) + err.n_rows); + g3.cmd("set key box opaque"); + g3.plot_xy(time_vector, range_error_m, + "Double diff Carrier Phase error"); + g3.set_legend(); + g3.savetops(data_title + "double_diff_carrier_phase_error"); + + g3.showonscreen(); // window output + } + + //check results against the test tolerance + ASSERT_LT(rmse, 0.25); + ASSERT_LT(error_mean, 0.2); + ASSERT_GT(error_mean, -0.2); + ASSERT_LT(error_var, 0.5); + ASSERT_LT(max_error, 0.5); + ASSERT_GT(min_error, -0.5); } - - //check results against the test tolerance - ASSERT_LT(rmse, 0.25); - ASSERT_LT(error_mean, 0.2); - ASSERT_GT(error_mean, -0.2); - ASSERT_LT(error_var, 0.5); - ASSERT_LT(max_error, 0.5); - ASSERT_GT(min_error, -0.5); } @@ -966,78 +971,81 @@ void HybridObservablesTest::check_results_carrier_doppler_double_diff( int size2 = measured_ch1.col(0).n_rows; double t1 = std::min(measured_ch0(size1 - 1, 0), measured_ch1(size2 - 1, 0)); - arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); - //conversion between arma::vec and std:vector - arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); - std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); - - - arma::vec true_ch0_carrier_doppler_interp; - arma::vec true_ch1_carrier_doppler_interp; - arma::interp1(true_tow_ch0_s, true_ch0.col(2), t, true_ch0_carrier_doppler_interp); - arma::interp1(true_tow_ch1_s, true_ch1.col(2), t, true_ch1_carrier_doppler_interp); - - arma::vec meas_ch0_carrier_doppler_interp; - arma::vec meas_ch1_carrier_doppler_interp; - arma::interp1(measured_ch0.col(0), measured_ch0.col(2), t, meas_ch0_carrier_doppler_interp); - arma::interp1(measured_ch1.col(0), measured_ch1.col(2), t, meas_ch1_carrier_doppler_interp); - - // generate double difference carrier Doppler - arma::vec delta_true_carrier_doppler_cycles = true_ch0_carrier_doppler_interp - true_ch1_carrier_doppler_interp; - arma::vec delta_measured_carrier_doppler_cycles = meas_ch0_carrier_doppler_interp - meas_ch1_carrier_doppler_interp; - - //2. RMSE - arma::vec err; - - err = delta_measured_carrier_doppler_cycles - delta_true_carrier_doppler_cycles; - arma::vec err2 = arma::square(err); - double rmse = sqrt(arma::mean(err2)); - - //3. Mean err and variance - double error_mean = arma::mean(err); - double error_var = arma::var(err); - - // 4. Peaks - double max_error = arma::max(err); - double min_error = arma::min(err); - - //5. report - std::streamsize ss = std::cout.precision(); - std::cout << std::setprecision(10) << data_title << "Double diff Carrier Doppler RMSE = " - << rmse << ", mean = " << error_mean - << ", stdev = " << sqrt(error_var) - << " (max,min) = " << max_error - << "," << min_error - << " [Hz]" << std::endl; - std::cout.precision(ss); - - //plots - if (FLAGS_show_plots) + if ((t1 - t0) > 0) { - Gnuplot g3("linespoints"); - g3.set_title(data_title + "Double diff Carrier Doppler error [Hz]"); - g3.set_grid(); - g3.set_xlabel("Time [s]"); - g3.set_ylabel("Double diff Carrier Doppler error [Hz]"); + arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); //conversion between arma::vec and std:vector - std::vector<double> range_error_m(err.colptr(0), err.colptr(0) + err.n_rows); - g3.cmd("set key box opaque"); - g3.plot_xy(time_vector, range_error_m, - "Double diff Carrier Doppler error"); - g3.set_legend(); - g3.savetops(data_title + "double_diff_carrier_doppler_error"); + arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); + std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); - g3.showonscreen(); // window output + + arma::vec true_ch0_carrier_doppler_interp; + arma::vec true_ch1_carrier_doppler_interp; + arma::interp1(true_tow_ch0_s, true_ch0.col(2), t, true_ch0_carrier_doppler_interp); + arma::interp1(true_tow_ch1_s, true_ch1.col(2), t, true_ch1_carrier_doppler_interp); + + arma::vec meas_ch0_carrier_doppler_interp; + arma::vec meas_ch1_carrier_doppler_interp; + arma::interp1(measured_ch0.col(0), measured_ch0.col(2), t, meas_ch0_carrier_doppler_interp); + arma::interp1(measured_ch1.col(0), measured_ch1.col(2), t, meas_ch1_carrier_doppler_interp); + + // generate double difference carrier Doppler + arma::vec delta_true_carrier_doppler_cycles = true_ch0_carrier_doppler_interp - true_ch1_carrier_doppler_interp; + arma::vec delta_measured_carrier_doppler_cycles = meas_ch0_carrier_doppler_interp - meas_ch1_carrier_doppler_interp; + + //2. RMSE + arma::vec err; + + err = delta_measured_carrier_doppler_cycles - delta_true_carrier_doppler_cycles; + arma::vec err2 = arma::square(err); + double rmse = sqrt(arma::mean(err2)); + + //3. Mean err and variance + double error_mean = arma::mean(err); + double error_var = arma::var(err); + + // 4. Peaks + double max_error = arma::max(err); + double min_error = arma::min(err); + + //5. report + std::streamsize ss = std::cout.precision(); + std::cout << std::setprecision(10) << data_title << "Double diff Carrier Doppler RMSE = " + << rmse << ", mean = " << error_mean + << ", stdev = " << sqrt(error_var) + << " (max,min) = " << max_error + << "," << min_error + << " [Hz]" << std::endl; + std::cout.precision(ss); + + //plots + if (FLAGS_show_plots) + { + Gnuplot g3("linespoints"); + g3.set_title(data_title + "Double diff Carrier Doppler error [Hz]"); + g3.set_grid(); + g3.set_xlabel("Time [s]"); + g3.set_ylabel("Double diff Carrier Doppler error [Hz]"); + //conversion between arma::vec and std:vector + std::vector<double> range_error_m(err.colptr(0), err.colptr(0) + err.n_rows); + g3.cmd("set key box opaque"); + g3.plot_xy(time_vector, range_error_m, + "Double diff Carrier Doppler error"); + g3.set_legend(); + g3.savetops(data_title + "double_diff_carrier_doppler_error"); + + g3.showonscreen(); // window output + } + + //check results against the test tolerance + ASSERT_LT(error_mean, 5); + ASSERT_GT(error_mean, -5); + //assuming PLL BW=35 + ASSERT_LT(error_var, 250); + ASSERT_LT(max_error, 100); + ASSERT_GT(min_error, -100); + ASSERT_LT(rmse, 30); } - - //check results against the test tolerance - ASSERT_LT(error_mean, 5); - ASSERT_GT(error_mean, -5); - //assuming PLL BW=35 - ASSERT_LT(error_var, 250); - ASSERT_LT(max_error, 100); - ASSERT_GT(min_error, -100); - ASSERT_LT(rmse, 30); } @@ -1052,71 +1060,75 @@ void HybridObservablesTest::check_results_carrier_doppler( double t0 = measured_ch0(0, 0); int size1 = measured_ch0.col(0).n_rows; double t1 = measured_ch0(size1 - 1, 0); - arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); - //conversion between arma::vec and std:vector - arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); - std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); - arma::vec true_ch0_doppler_interp; - arma::interp1(true_tow_s, true_ch0.col(2), t, true_ch0_doppler_interp); - - arma::vec meas_ch0_doppler_interp; - arma::interp1(measured_ch0.col(0), measured_ch0.col(2), t, meas_ch0_doppler_interp); - - //2. RMSE - arma::vec err_ch0_hz; - - //compute error - err_ch0_hz = meas_ch0_doppler_interp - true_ch0_doppler_interp; - - arma::vec err2_ch0 = arma::square(err_ch0_hz); - double rmse_ch0 = sqrt(arma::mean(err2_ch0)); - - //3. Mean err and variance - double error_mean_ch0 = arma::mean(err_ch0_hz); - double error_var_ch0 = arma::var(err_ch0_hz); - - // 4. Peaks - double max_error_ch0 = arma::max(err_ch0_hz); - double min_error_ch0 = arma::min(err_ch0_hz); - - //5. report - std::streamsize ss = std::cout.precision(); - std::cout << std::setprecision(10) << data_title << "Carrier Doppler RMSE = " - << rmse_ch0 << ", mean = " << error_mean_ch0 - << ", stdev = " << sqrt(error_var_ch0) - << " (max,min) = " << max_error_ch0 - << "," << min_error_ch0 - << " [Hz]" << std::endl; - std::cout.precision(ss); - - //plots - if (FLAGS_show_plots) + if ((t1 - t0) > 0) { - Gnuplot g3("linespoints"); - g3.set_title(data_title + "Carrier Doppler error [Hz]"); - g3.set_grid(); - g3.set_xlabel("Time [s]"); - g3.set_ylabel("Carrier Doppler error [Hz]"); + arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); //conversion between arma::vec and std:vector - std::vector<double> error_vec(err_ch0_hz.colptr(0), err_ch0_hz.colptr(0) + err_ch0_hz.n_rows); - g3.cmd("set key box opaque"); - g3.plot_xy(time_vector, error_vec, - "Carrier Doppler error"); - g3.set_legend(); - g3.savetops(data_title + "Carrier_doppler_error"); + arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); + std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); - g3.showonscreen(); // window output + arma::vec true_ch0_doppler_interp; + arma::interp1(true_tow_s, true_ch0.col(2), t, true_ch0_doppler_interp); + + arma::vec meas_ch0_doppler_interp; + arma::interp1(measured_ch0.col(0), measured_ch0.col(2), t, meas_ch0_doppler_interp); + + //2. RMSE + arma::vec err_ch0_hz; + + //compute error + err_ch0_hz = meas_ch0_doppler_interp - true_ch0_doppler_interp; + + arma::vec err2_ch0 = arma::square(err_ch0_hz); + double rmse_ch0 = sqrt(arma::mean(err2_ch0)); + + //3. Mean err and variance + double error_mean_ch0 = arma::mean(err_ch0_hz); + double error_var_ch0 = arma::var(err_ch0_hz); + + // 4. Peaks + double max_error_ch0 = arma::max(err_ch0_hz); + double min_error_ch0 = arma::min(err_ch0_hz); + + //5. report + std::streamsize ss = std::cout.precision(); + std::cout << std::setprecision(10) << data_title << "Carrier Doppler RMSE = " + << rmse_ch0 << ", mean = " << error_mean_ch0 + << ", stdev = " << sqrt(error_var_ch0) + << " (max,min) = " << max_error_ch0 + << "," << min_error_ch0 + << " [Hz]" << std::endl; + std::cout.precision(ss); + + //plots + if (FLAGS_show_plots) + { + Gnuplot g3("linespoints"); + g3.set_title(data_title + "Carrier Doppler error [Hz]"); + g3.set_grid(); + g3.set_xlabel("Time [s]"); + g3.set_ylabel("Carrier Doppler error [Hz]"); + //conversion between arma::vec and std:vector + std::vector<double> error_vec(err_ch0_hz.colptr(0), err_ch0_hz.colptr(0) + err_ch0_hz.n_rows); + g3.cmd("set key box opaque"); + g3.plot_xy(time_vector, error_vec, + "Carrier Doppler error"); + g3.set_legend(); + g3.savetops(data_title + "Carrier_doppler_error"); + + g3.showonscreen(); // window output + } + + //check results against the test tolerance + ASSERT_LT(error_mean_ch0, 5); + ASSERT_GT(error_mean_ch0, -5); + //assuming PLL BW=35 + ASSERT_LT(error_var_ch0, 250); + ASSERT_LT(max_error_ch0, 100); + ASSERT_GT(min_error_ch0, -100); + ASSERT_LT(rmse_ch0, 30); } - - //check results against the test tolerance - ASSERT_LT(error_mean_ch0, 5); - ASSERT_GT(error_mean_ch0, -5); - //assuming PLL BW=35 - ASSERT_LT(error_var_ch0, 250); - ASSERT_LT(max_error_ch0, 100); - ASSERT_GT(min_error_ch0, -100); - ASSERT_LT(rmse_ch0, 30); } void HybridObservablesTest::check_results_duplicated_satellite( @@ -1156,217 +1168,220 @@ void HybridObservablesTest::check_results_duplicated_satellite( t1 = t1_sat1; } - arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); - //conversion between arma::vec and std:vector - arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); - std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); - //Doppler - arma::vec meas_sat1_doppler_interp; - arma::interp1(measured_sat1.col(0), measured_sat1.col(2), t, meas_sat1_doppler_interp); - arma::vec meas_sat2_doppler_interp; - arma::interp1(measured_sat2.col(0), measured_sat2.col(2), t, meas_sat2_doppler_interp); - - //Carrier Phase - arma::vec meas_sat1_carrier_phase_interp; - arma::vec meas_sat2_carrier_phase_interp; - arma::interp1(measured_sat1.col(0), measured_sat1.col(3), t, meas_sat1_carrier_phase_interp); - arma::interp1(measured_sat2.col(0), measured_sat2.col(3), t, meas_sat2_carrier_phase_interp); - - // generate double difference accumulated carrier phases - //compute error without the accumulated carrier phase offsets (which depends on the receiver starting time) - arma::vec delta_measured_carrier_phase_cycles = (meas_sat1_carrier_phase_interp - meas_sat1_carrier_phase_interp(0)) - (meas_sat2_carrier_phase_interp - meas_sat2_carrier_phase_interp(0)); - - //Pseudoranges - arma::vec meas_sat1_dist_interp; - arma::vec meas_sat2_dist_interp; - arma::interp1(measured_sat1.col(0), measured_sat1.col(4), t, meas_sat1_dist_interp); - arma::interp1(measured_sat2.col(0), measured_sat2.col(4), t, meas_sat2_dist_interp); - // generate delta pseudoranges - arma::vec delta_measured_dist_m = meas_sat1_dist_interp - meas_sat2_dist_interp; - - //Carrier Doppler error - //2. RMSE - arma::vec err_ch0_hz; - - //compute error - err_ch0_hz = meas_sat1_doppler_interp - meas_sat2_doppler_interp; - - //save matlab file for further analysis - std::vector<double> tmp_vector_common_time_s(t.colptr(0), - t.colptr(0) + t.n_rows); - - std::vector<double> tmp_vector_err_ch0_hz(err_ch0_hz.colptr(0), - err_ch0_hz.colptr(0) + err_ch0_hz.n_rows); - save_mat_xy(tmp_vector_common_time_s, tmp_vector_err_ch0_hz, std::string("measured_doppler_error_ch_" + std::to_string(ch_id))); - - //compute statistics - arma::vec err2_ch0 = arma::square(err_ch0_hz); - double rmse_ch0 = sqrt(arma::mean(err2_ch0)); - - //3. Mean err and variance - double error_mean_ch0 = arma::mean(err_ch0_hz); - double error_var_ch0 = arma::var(err_ch0_hz); - - // 4. Peaks - double max_error_ch0 = arma::max(err_ch0_hz); - double min_error_ch0 = arma::min(err_ch0_hz); - - //5. report - std::streamsize ss = std::cout.precision(); - std::cout << std::setprecision(10) << data_title << "Carrier Doppler RMSE = " - << rmse_ch0 << ", mean = " << error_mean_ch0 - << ", stdev = " << sqrt(error_var_ch0) - << " (max,min) = " << max_error_ch0 - << "," << min_error_ch0 - << " [Hz]" << std::endl; - std::cout.precision(ss); - - //plots - if (FLAGS_show_plots) + if ((t1 - t0) > 0) { - Gnuplot g3("linespoints"); - g3.set_title(data_title + "Carrier Doppler error [Hz]"); - g3.set_grid(); - g3.set_xlabel("Time [s]"); - g3.set_ylabel("Carrier Doppler error [Hz]"); + arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); //conversion between arma::vec and std:vector - std::vector<double> error_vec(err_ch0_hz.colptr(0), err_ch0_hz.colptr(0) + err_ch0_hz.n_rows); - g3.cmd("set key box opaque"); - g3.plot_xy(time_vector, error_vec, - "Carrier Doppler error"); - g3.set_legend(); - g3.savetops(data_title + "Carrier_doppler_error"); + arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); + std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); + //Doppler + arma::vec meas_sat1_doppler_interp; + arma::interp1(measured_sat1.col(0), measured_sat1.col(2), t, meas_sat1_doppler_interp); + arma::vec meas_sat2_doppler_interp; + arma::interp1(measured_sat2.col(0), measured_sat2.col(2), t, meas_sat2_doppler_interp); - g3.showonscreen(); // window output + //Carrier Phase + arma::vec meas_sat1_carrier_phase_interp; + arma::vec meas_sat2_carrier_phase_interp; + arma::interp1(measured_sat1.col(0), measured_sat1.col(3), t, meas_sat1_carrier_phase_interp); + arma::interp1(measured_sat2.col(0), measured_sat2.col(3), t, meas_sat2_carrier_phase_interp); + + // generate double difference accumulated carrier phases + //compute error without the accumulated carrier phase offsets (which depends on the receiver starting time) + arma::vec delta_measured_carrier_phase_cycles = (meas_sat1_carrier_phase_interp - meas_sat1_carrier_phase_interp(0)) - (meas_sat2_carrier_phase_interp - meas_sat2_carrier_phase_interp(0)); + + //Pseudoranges + arma::vec meas_sat1_dist_interp; + arma::vec meas_sat2_dist_interp; + arma::interp1(measured_sat1.col(0), measured_sat1.col(4), t, meas_sat1_dist_interp); + arma::interp1(measured_sat2.col(0), measured_sat2.col(4), t, meas_sat2_dist_interp); + // generate delta pseudoranges + arma::vec delta_measured_dist_m = meas_sat1_dist_interp - meas_sat2_dist_interp; + + //Carrier Doppler error + //2. RMSE + arma::vec err_ch0_hz; + + //compute error + err_ch0_hz = meas_sat1_doppler_interp - meas_sat2_doppler_interp; + + //save matlab file for further analysis + std::vector<double> tmp_vector_common_time_s(t.colptr(0), + t.colptr(0) + t.n_rows); + + std::vector<double> tmp_vector_err_ch0_hz(err_ch0_hz.colptr(0), + err_ch0_hz.colptr(0) + err_ch0_hz.n_rows); + save_mat_xy(tmp_vector_common_time_s, tmp_vector_err_ch0_hz, std::string("measured_doppler_error_ch_" + std::to_string(ch_id))); + + //compute statistics + arma::vec err2_ch0 = arma::square(err_ch0_hz); + double rmse_ch0 = sqrt(arma::mean(err2_ch0)); + + //3. Mean err and variance + double error_mean_ch0 = arma::mean(err_ch0_hz); + double error_var_ch0 = arma::var(err_ch0_hz); + + // 4. Peaks + double max_error_ch0 = arma::max(err_ch0_hz); + double min_error_ch0 = arma::min(err_ch0_hz); + + //5. report + std::streamsize ss = std::cout.precision(); + std::cout << std::setprecision(10) << data_title << "Carrier Doppler RMSE = " + << rmse_ch0 << ", mean = " << error_mean_ch0 + << ", stdev = " << sqrt(error_var_ch0) + << " (max,min) = " << max_error_ch0 + << "," << min_error_ch0 + << " [Hz]" << std::endl; + std::cout.precision(ss); + + //plots + if (FLAGS_show_plots) + { + Gnuplot g3("linespoints"); + g3.set_title(data_title + "Carrier Doppler error [Hz]"); + g3.set_grid(); + g3.set_xlabel("Time [s]"); + g3.set_ylabel("Carrier Doppler error [Hz]"); + //conversion between arma::vec and std:vector + std::vector<double> error_vec(err_ch0_hz.colptr(0), err_ch0_hz.colptr(0) + err_ch0_hz.n_rows); + g3.cmd("set key box opaque"); + g3.plot_xy(time_vector, error_vec, + "Carrier Doppler error"); + g3.set_legend(); + g3.savetops(data_title + "Carrier_doppler_error"); + + g3.showonscreen(); // window output + } + + //check results against the test tolerance + EXPECT_LT(error_mean_ch0, 5); + EXPECT_GT(error_mean_ch0, -5); + //assuming PLL BW=35 + EXPECT_LT(error_var_ch0, 250); + EXPECT_LT(max_error_ch0, 100); + EXPECT_GT(min_error_ch0, -100); + EXPECT_LT(rmse_ch0, 30); + + //Carrier Phase error + //2. RMSE + arma::vec err_carrier_phase; + + err_carrier_phase = delta_measured_carrier_phase_cycles; + + //save matlab file for further analysis + std::vector<double> tmp_vector_err_carrier_phase(err_carrier_phase.colptr(0), + err_carrier_phase.colptr(0) + err_carrier_phase.n_rows); + save_mat_xy(tmp_vector_common_time_s, tmp_vector_err_carrier_phase, std::string("measured_carrier_phase_error_ch_" + std::to_string(ch_id))); + + + arma::vec err2_carrier_phase = arma::square(err_carrier_phase); + double rmse_carrier_phase = sqrt(arma::mean(err2_carrier_phase)); + + //3. Mean err and variance + double error_mean_carrier_phase = arma::mean(err_carrier_phase); + double error_var_carrier_phase = arma::var(err_carrier_phase); + + // 4. Peaks + double max_error_carrier_phase = arma::max(err_carrier_phase); + double min_error_carrier_phase = arma::min(err_carrier_phase); + + //5. report + ss = std::cout.precision(); + std::cout << std::setprecision(10) << data_title << "Carrier Phase RMSE = " + << rmse_carrier_phase << ", mean = " << error_mean_carrier_phase + << ", stdev = " << sqrt(error_var_carrier_phase) + << " (max,min) = " << max_error_carrier_phase + << "," << min_error_carrier_phase + << " [Cycles]" << std::endl; + std::cout.precision(ss); + + //plots + if (FLAGS_show_plots) + { + Gnuplot g3("linespoints"); + g3.set_title(data_title + "Carrier Phase error [Cycles]"); + g3.set_grid(); + g3.set_xlabel("Time [s]"); + g3.set_ylabel("Carrier Phase error [Cycles]"); + //conversion between arma::vec and std:vector + std::vector<double> range_error_m(err_carrier_phase.colptr(0), err_carrier_phase.colptr(0) + err_carrier_phase.n_rows); + g3.cmd("set key box opaque"); + g3.plot_xy(time_vector, range_error_m, + "Carrier Phase error"); + g3.set_legend(); + g3.savetops(data_title + "duplicated_satellite_carrier_phase_error"); + + g3.showonscreen(); // window output + } + + //check results against the test tolerance + EXPECT_LT(rmse_carrier_phase, 0.25); + EXPECT_LT(error_mean_carrier_phase, 0.2); + EXPECT_GT(error_mean_carrier_phase, -0.2); + EXPECT_LT(error_var_carrier_phase, 0.5); + EXPECT_LT(max_error_carrier_phase, 0.5); + EXPECT_GT(min_error_carrier_phase, -0.5); + + //Pseudorange error + //2. RMSE + arma::vec err_pseudorange; + + err_pseudorange = delta_measured_dist_m; + + //save matlab file for further analysis + std::vector<double> tmp_vector_err_pseudorange(err_pseudorange.colptr(0), + err_pseudorange.colptr(0) + err_pseudorange.n_rows); + save_mat_xy(tmp_vector_common_time_s, tmp_vector_err_pseudorange, std::string("measured_pr_error_ch_" + std::to_string(ch_id))); + + arma::vec err2_pseudorange = arma::square(err_pseudorange); + double rmse_pseudorange = sqrt(arma::mean(err2_pseudorange)); + + //3. Mean err and variance + double error_mean_pseudorange = arma::mean(err_pseudorange); + double error_var_pseudorange = arma::var(err_pseudorange); + + // 4. Peaks + double max_error_pseudorange = arma::max(err_pseudorange); + double min_error_pseudorange = arma::min(err_pseudorange); + + //5. report + ss = std::cout.precision(); + std::cout << std::setprecision(10) << data_title << "Pseudorange RMSE = " + << rmse_pseudorange << ", mean = " << error_mean_pseudorange + << ", stdev = " << sqrt(error_var_pseudorange) + << " (max,min) = " << max_error_pseudorange + << "," << min_error_pseudorange + << " [meters]" << std::endl; + std::cout.precision(ss); + + //plots + if (FLAGS_show_plots) + { + Gnuplot g3("linespoints"); + g3.set_title(data_title + "Pseudorange error [m]"); + g3.set_grid(); + g3.set_xlabel("Time [s]"); + g3.set_ylabel("Pseudorange error [m]"); + //conversion between arma::vec and std:vector + std::vector<double> range_error_m(err_pseudorange.colptr(0), err_pseudorange.colptr(0) + err_pseudorange.n_rows); + g3.cmd("set key box opaque"); + g3.plot_xy(time_vector, range_error_m, + "Pseudorrange error"); + g3.set_legend(); + g3.savetops(data_title + "duplicated_satellite_pseudorrange_error"); + + g3.showonscreen(); // window output + } + + //check results against the test tolerance + EXPECT_LT(rmse_pseudorange, 3.0); + EXPECT_LT(error_mean_pseudorange, 1.0); + EXPECT_GT(error_mean_pseudorange, -1.0); + EXPECT_LT(error_var_pseudorange, 10.0); + EXPECT_LT(max_error_pseudorange, 10.0); + EXPECT_GT(min_error_pseudorange, -10.0); } - - //check results against the test tolerance - EXPECT_LT(error_mean_ch0, 5); - EXPECT_GT(error_mean_ch0, -5); - //assuming PLL BW=35 - EXPECT_LT(error_var_ch0, 250); - EXPECT_LT(max_error_ch0, 100); - EXPECT_GT(min_error_ch0, -100); - EXPECT_LT(rmse_ch0, 30); - - //Carrier Phase error - //2. RMSE - arma::vec err_carrier_phase; - - err_carrier_phase = delta_measured_carrier_phase_cycles; - - //save matlab file for further analysis - std::vector<double> tmp_vector_err_carrier_phase(err_carrier_phase.colptr(0), - err_carrier_phase.colptr(0) + err_carrier_phase.n_rows); - save_mat_xy(tmp_vector_common_time_s, tmp_vector_err_carrier_phase, std::string("measured_carrier_phase_error_ch_" + std::to_string(ch_id))); - - - arma::vec err2_carrier_phase = arma::square(err_carrier_phase); - double rmse_carrier_phase = sqrt(arma::mean(err2_carrier_phase)); - - //3. Mean err and variance - double error_mean_carrier_phase = arma::mean(err_carrier_phase); - double error_var_carrier_phase = arma::var(err_carrier_phase); - - // 4. Peaks - double max_error_carrier_phase = arma::max(err_carrier_phase); - double min_error_carrier_phase = arma::min(err_carrier_phase); - - //5. report - ss = std::cout.precision(); - std::cout << std::setprecision(10) << data_title << "Carrier Phase RMSE = " - << rmse_carrier_phase << ", mean = " << error_mean_carrier_phase - << ", stdev = " << sqrt(error_var_carrier_phase) - << " (max,min) = " << max_error_carrier_phase - << "," << min_error_carrier_phase - << " [Cycles]" << std::endl; - std::cout.precision(ss); - - //plots - if (FLAGS_show_plots) - { - Gnuplot g3("linespoints"); - g3.set_title(data_title + "Carrier Phase error [Cycles]"); - g3.set_grid(); - g3.set_xlabel("Time [s]"); - g3.set_ylabel("Carrier Phase error [Cycles]"); - //conversion between arma::vec and std:vector - std::vector<double> range_error_m(err_carrier_phase.colptr(0), err_carrier_phase.colptr(0) + err_carrier_phase.n_rows); - g3.cmd("set key box opaque"); - g3.plot_xy(time_vector, range_error_m, - "Carrier Phase error"); - g3.set_legend(); - g3.savetops(data_title + "duplicated_satellite_carrier_phase_error"); - - g3.showonscreen(); // window output - } - - //check results against the test tolerance - EXPECT_LT(rmse_carrier_phase, 0.25); - EXPECT_LT(error_mean_carrier_phase, 0.2); - EXPECT_GT(error_mean_carrier_phase, -0.2); - EXPECT_LT(error_var_carrier_phase, 0.5); - EXPECT_LT(max_error_carrier_phase, 0.5); - EXPECT_GT(min_error_carrier_phase, -0.5); - - //Pseudorange error - //2. RMSE - arma::vec err_pseudorange; - - err_pseudorange = delta_measured_dist_m; - - //save matlab file for further analysis - std::vector<double> tmp_vector_err_pseudorange(err_pseudorange.colptr(0), - err_pseudorange.colptr(0) + err_pseudorange.n_rows); - save_mat_xy(tmp_vector_common_time_s, tmp_vector_err_pseudorange, std::string("measured_pr_error_ch_" + std::to_string(ch_id))); - - arma::vec err2_pseudorange = arma::square(err_pseudorange); - double rmse_pseudorange = sqrt(arma::mean(err2_pseudorange)); - - //3. Mean err and variance - double error_mean_pseudorange = arma::mean(err_pseudorange); - double error_var_pseudorange = arma::var(err_pseudorange); - - // 4. Peaks - double max_error_pseudorange = arma::max(err_pseudorange); - double min_error_pseudorange = arma::min(err_pseudorange); - - //5. report - ss = std::cout.precision(); - std::cout << std::setprecision(10) << data_title << "Pseudorange RMSE = " - << rmse_pseudorange << ", mean = " << error_mean_pseudorange - << ", stdev = " << sqrt(error_var_pseudorange) - << " (max,min) = " << max_error_pseudorange - << "," << min_error_pseudorange - << " [meters]" << std::endl; - std::cout.precision(ss); - - //plots - if (FLAGS_show_plots) - { - Gnuplot g3("linespoints"); - g3.set_title(data_title + "Pseudorange error [m]"); - g3.set_grid(); - g3.set_xlabel("Time [s]"); - g3.set_ylabel("Pseudorange error [m]"); - //conversion between arma::vec and std:vector - std::vector<double> range_error_m(err_pseudorange.colptr(0), err_pseudorange.colptr(0) + err_pseudorange.n_rows); - g3.cmd("set key box opaque"); - g3.plot_xy(time_vector, range_error_m, - "Pseudorrange error"); - g3.set_legend(); - g3.savetops(data_title + "duplicated_satellite_pseudorrange_error"); - - g3.showonscreen(); // window output - } - - //check results against the test tolerance - EXPECT_LT(rmse_pseudorange, 3.0); - EXPECT_LT(error_mean_pseudorange, 1.0); - EXPECT_GT(error_mean_pseudorange, -1.0); - EXPECT_LT(error_var_pseudorange, 10.0); - EXPECT_LT(max_error_pseudorange, 10.0); - EXPECT_GT(min_error_pseudorange, -10.0); } bool HybridObservablesTest::save_mat_xy(std::vector<double>& x, std::vector<double>& y, std::string filename) @@ -1420,77 +1435,82 @@ void HybridObservablesTest::check_results_code_pseudorange( int size2 = measured_ch1.col(0).n_rows; double t1 = std::min(measured_ch0(size1 - 1, 0), measured_ch1(size2 - 1, 0)); - arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); - //conversion between arma::vec and std:vector - arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); - std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); - - - arma::vec true_ch0_dist_interp; - arma::vec true_ch1_dist_interp; - arma::interp1(true_tow_ch0_s, true_ch0.col(1), t, true_ch0_dist_interp); - arma::interp1(true_tow_ch1_s, true_ch1.col(1), t, true_ch1_dist_interp); - - arma::vec meas_ch0_dist_interp; - arma::vec meas_ch1_dist_interp; - arma::interp1(measured_ch0.col(0), measured_ch0.col(4), t, meas_ch0_dist_interp); - arma::interp1(measured_ch1.col(0), measured_ch1.col(4), t, meas_ch1_dist_interp); - - // generate delta pseudoranges - arma::vec delta_true_dist_m = true_ch0_dist_interp - true_ch1_dist_interp; - arma::vec delta_measured_dist_m = meas_ch0_dist_interp - meas_ch1_dist_interp; - - //2. RMSE - arma::vec err; - - err = delta_measured_dist_m - delta_true_dist_m; - arma::vec err2 = arma::square(err); - double rmse = sqrt(arma::mean(err2)); - - //3. Mean err and variance - double error_mean = arma::mean(err); - double error_var = arma::var(err); - - // 4. Peaks - double max_error = arma::max(err); - double min_error = arma::min(err); - - //5. report - std::streamsize ss = std::cout.precision(); - std::cout << std::setprecision(10) << data_title << "Double diff Pseudorange RMSE = " - << rmse << ", mean = " << error_mean - << ", stdev = " << sqrt(error_var) - << " (max,min) = " << max_error - << "," << min_error - << " [meters]" << std::endl; - std::cout.precision(ss); - - //plots - if (FLAGS_show_plots) + if ((t1 - t0) > 0) { - Gnuplot g3("linespoints"); - g3.set_title(data_title + "Double diff Pseudorange error [m]"); - g3.set_grid(); - g3.set_xlabel("Time [s]"); - g3.set_ylabel("Double diff Pseudorange error [m]"); + arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); //conversion between arma::vec and std:vector - std::vector<double> range_error_m(err.colptr(0), err.colptr(0) + err.n_rows); - g3.cmd("set key box opaque"); - g3.plot_xy(time_vector, range_error_m, - "Double diff Pseudorrange error"); - g3.set_legend(); - g3.savetops(data_title + "double_diff_pseudorrange_error"); + arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); + std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); + arma::vec true_ch0_dist_interp; + arma::vec true_ch1_dist_interp; + arma::interp1(true_tow_ch0_s, true_ch0.col(1), t, true_ch0_dist_interp); + arma::interp1(true_tow_ch1_s, true_ch1.col(1), t, true_ch1_dist_interp); - g3.showonscreen(); // window output + arma::vec meas_ch0_dist_interp; + arma::vec meas_ch1_dist_interp; + arma::interp1(measured_ch0.col(0), measured_ch0.col(4), t, meas_ch0_dist_interp); + arma::interp1(measured_ch1.col(0), measured_ch1.col(4), t, meas_ch1_dist_interp); + + // generate delta pseudoranges + arma::vec delta_true_dist_m = true_ch0_dist_interp - true_ch1_dist_interp; + arma::vec delta_measured_dist_m = meas_ch0_dist_interp - meas_ch1_dist_interp; + + //2. RMSE + arma::vec err; + + err = delta_measured_dist_m - delta_true_dist_m; + arma::vec err2 = arma::square(err); + double rmse = sqrt(arma::mean(err2)); + + //3. Mean err and variance + double error_mean = arma::mean(err); + double error_var = arma::var(err); + + // 4. Peaks + double max_error = arma::max(err); + double min_error = arma::min(err); + + //5. report + std::streamsize ss = std::cout.precision(); + std::cout << std::setprecision(10) << data_title << "Double diff Pseudorange RMSE = " + << rmse << ", mean = " << error_mean + << ", stdev = " << sqrt(error_var) + << " (max,min) = " << max_error + << "," << min_error + << " [meters]" << std::endl; + std::cout.precision(ss); + + //plots + if (FLAGS_show_plots) + { + Gnuplot g3("linespoints"); + g3.set_title(data_title + "Double diff Pseudorange error [m]"); + g3.set_grid(); + g3.set_xlabel("Time [s]"); + g3.set_ylabel("Double diff Pseudorange error [m]"); + //conversion between arma::vec and std:vector + std::vector<double> range_error_m(err.colptr(0), err.colptr(0) + err.n_rows); + g3.cmd("set key box opaque"); + g3.plot_xy(time_vector, range_error_m, + "Double diff Pseudorrange error"); + g3.set_legend(); + g3.savetops(data_title + "double_diff_pseudorrange_error"); + + g3.showonscreen(); // window output + } + + //check results against the test tolerance + ASSERT_LT(rmse, 3.0); + ASSERT_LT(error_mean, 1.0); + ASSERT_GT(error_mean, -1.0); + ASSERT_LT(error_var, 10.0); + ASSERT_LT(max_error, 10.0); + ASSERT_GT(min_error, -10.0); + } + else + { + std::cout << "Problem with observables in " << data_title << std::endl; } - - //check results against the test tolerance - ASSERT_LT(rmse, 3.0); - ASSERT_LT(error_mean, 1.0); - ASSERT_GT(error_mean, -1.0); - ASSERT_LT(error_var, 10.0); - ASSERT_LT(max_error, 10.0); - ASSERT_GT(min_error, -10.0); } bool HybridObservablesTest::ReadRinexObs(std::vector<arma::mat>* obs_vec, Gnss_Synchro gnss) @@ -1981,7 +2001,7 @@ TEST_F(HybridObservablesTest, ValidationOfResults) int sat2_ch_id = -1; for (unsigned int ch = 0; ch < measured_obs_vec.size(); ch++) { - if (epoch_counters_vec.at(ch) > 10) //discard non-valid channels + if (epoch_counters_vec.at(ch) > 100) //discard non-valid channels { if (gnss_synchro_vec.at(ch).PRN == prn_pairs.at(n)) { @@ -2023,7 +2043,7 @@ TEST_F(HybridObservablesTest, ValidationOfResults) unsigned int min_pr_ch_id = 0; for (unsigned int n = 0; n < measured_obs_vec.size(); n++) { - if (epoch_counters_vec.at(n) > 10) //discard non-valid channels + if (epoch_counters_vec.at(n) > 100) //discard non-valid channels { { if (measured_obs_vec.at(n)(0, 4) < min_pr) @@ -2040,8 +2060,20 @@ TEST_F(HybridObservablesTest, ValidationOfResults) } arma::vec receiver_time_offset_ref_channel_s; - receiver_time_offset_ref_channel_s = (true_obs_vec.at(min_pr_ch_id).col(1)(0) - measured_obs_vec.at(min_pr_ch_id).col(4)(0)) / GPS_C_M_S; - std::cout << "Ref. channel initial Receiver time offset " << receiver_time_offset_ref_channel_s(0) * 1e3 << " [ms]" << std::endl; + arma::uvec index2; + index2 = arma::find(true_obs_vec.at(min_pr_ch_id).col(0) >= measured_obs_vec.at(min_pr_ch_id).col(0)(0), 1, "first"); + if ((!index2.empty()) and (index2(0) > 0)) + { + receiver_time_offset_ref_channel_s = (true_obs_vec.at(min_pr_ch_id).col(1)(index2(0)) - measured_obs_vec.at(min_pr_ch_id).col(4)(0)) / GPS_C_M_S; + std::cout << "Ref. channel initial Receiver time offset " << receiver_time_offset_ref_channel_s(0) * 1e3 << " [ms]" << std::endl; + } + else + { + ASSERT_NO_THROW( + throw std::exception();) + << "Error finding observation time epoch in the reference data"; + } + for (unsigned int n = 0; n < measured_obs_vec.size(); n++) { @@ -2083,7 +2115,7 @@ TEST_F(HybridObservablesTest, ValidationOfResults) save_mat_xy(tmp_vector_x6, tmp_vector_y6, std::string("measured_cp_ch_" + std::to_string(n))); - if (epoch_counters_vec.at(n) > 10) //discard non-valid channels + if (epoch_counters_vec.at(n) > 100) //discard non-valid channels { arma::vec true_TOW_ref_ch_s = true_obs_vec.at(min_pr_ch_id).col(0) - receiver_time_offset_ref_channel_s(0); arma::vec true_TOW_ch_s = true_obs_vec.at(n).col(0) - receiver_time_offset_ref_channel_s(0); @@ -2097,7 +2129,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) measured_obs_vec.at(n), measured_obs_vec.at(min_pr_ch_id), "[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " "); - //Do not compare E5a with E5 RINEX due to the Doppler frequency discrepancy caused by the different center frequencies //E5a_fc=1176.45e6, E5b_fc=1207.14e6, E5_fc=1191.795e6; if (strcmp("5X\0", gnss_synchro_vec.at(n).Signal) != 0 or FLAGS_compare_with_5X) diff --git a/src/tests/unit-tests/signal-processing-blocks/pvt/serdes_monitor_pvt_test.cc b/src/tests/unit-tests/signal-processing-blocks/pvt/serdes_monitor_pvt_test.cc index eb586f147..647e7f245 100644 --- a/src/tests/unit-tests/signal-processing-blocks/pvt/serdes_monitor_pvt_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/pvt/serdes_monitor_pvt_test.cc @@ -29,12 +29,13 @@ */ #include "serdes_monitor_pvt.h" +#include <memory> TEST(Serdes_Monitor_Pvt_Test, Simpletest) { - Monitor_Pvt monitor = Monitor_Pvt(); + std::shared_ptr<Monitor_Pvt> monitor = std::make_shared<Monitor_Pvt>(Monitor_Pvt()); double true_latitude = 23.4; - monitor.latitude = true_latitude; + monitor->latitude = true_latitude; Serdes_Monitor_Pvt serdes = Serdes_Monitor_Pvt(); std::string serialized_data = serdes.createProtobuffer(monitor); diff --git a/src/tests/unit-tests/signal-processing-blocks/resampler/direct_resampler_conditioner_cc_test.cc b/src/tests/unit-tests/signal-processing-blocks/resampler/direct_resampler_conditioner_cc_test.cc index d8ce67450..0f4c3ad47 100644 --- a/src/tests/unit-tests/signal-processing-blocks/resampler/direct_resampler_conditioner_cc_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/resampler/direct_resampler_conditioner_cc_test.cc @@ -39,10 +39,10 @@ #else #include <gnuradio/analog/sig_source_c.h> #endif +#include "concurrent_queue.h" #include "direct_resampler_conditioner_cc.h" #include "gnss_sdr_valve.h" #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> TEST(DirectResamplerConditionerCcTest, InstantiationAndRunTest) @@ -52,7 +52,7 @@ TEST(DirectResamplerConditionerCcTest, InstantiationAndRunTest) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); int nsamples = 1000000; //Number of samples to be computed - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); gr::top_block_sptr top_block = gr::make_top_block("direct_resampler_conditioner_cc_test"); boost::shared_ptr<gr::analog::sig_source_c> source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000.0, 1.0, gr_complex(0.0)); boost::shared_ptr<gr::block> valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/resampler/mmse_resampler_test.cc b/src/tests/unit-tests/signal-processing-blocks/resampler/mmse_resampler_test.cc index 2bc26b8b4..acf888a0b 100644 --- a/src/tests/unit-tests/signal-processing-blocks/resampler/mmse_resampler_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/resampler/mmse_resampler_test.cc @@ -37,10 +37,10 @@ #else #include <gnuradio/analog/sig_source_c.h> #endif +#include "concurrent_queue.h" #include "gnss_sdr_valve.h" #include "mmse_resampler_conditioner.h" #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> TEST(MmseResamplerTest, InstantiationAndRunTestWarning) { @@ -49,7 +49,7 @@ TEST(MmseResamplerTest, InstantiationAndRunTestWarning) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); int nsamples = 1000000; //Number of samples to be computed - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); gr::top_block_sptr top_block = gr::make_top_block("mmse_resampler_conditioner_cc_test"); boost::shared_ptr<gr::analog::sig_source_c> source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000.0, 1.0, gr_complex(0.0)); boost::shared_ptr<gr::block> valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); @@ -90,7 +90,7 @@ TEST(MmseResamplerTest, InstantiationAndRunTest2) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); int nsamples = 1000000; //Number of samples to be computed - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); gr::top_block_sptr top_block = gr::make_top_block("mmse_resampler_conditioner_cc_test"); boost::shared_ptr<gr::analog::sig_source_c> source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000.0, 1.0, gr_complex(0.0)); boost::shared_ptr<gr::block> valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/sources/file_signal_source_test.cc b/src/tests/unit-tests/signal-processing-blocks/sources/file_signal_source_test.cc index dd1020249..49ea2c244 100644 --- a/src/tests/unit-tests/signal-processing-blocks/sources/file_signal_source_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/sources/file_signal_source_test.cc @@ -30,15 +30,15 @@ */ #include "file_signal_source.h" +#include "concurrent_queue.h" #include "in_memory_configuration.h" -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <stdexcept> TEST(FileSignalSource, Instantiate) { - boost::shared_ptr<gr::msg_queue> queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<InMemoryConfiguration> config = std::make_shared<InMemoryConfiguration>(); config->set_property("Test.samples", "0"); @@ -57,7 +57,7 @@ TEST(FileSignalSource, Instantiate) TEST(FileSignalSource, InstantiateFileNotExists) { - boost::shared_ptr<gr::msg_queue> queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); std::shared_ptr<InMemoryConfiguration> config = std::make_shared<InMemoryConfiguration>(); config->set_property("Test.samples", "0"); diff --git a/src/tests/unit-tests/signal-processing-blocks/sources/gnss_sdr_valve_test.cc b/src/tests/unit-tests/signal-processing-blocks/sources/gnss_sdr_valve_test.cc index 02e1b09df..52e987bf3 100644 --- a/src/tests/unit-tests/signal-processing-blocks/sources/gnss_sdr_valve_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/sources/gnss_sdr_valve_test.cc @@ -38,13 +38,14 @@ #else #include <gnuradio/analog/sig_source_f.h> #endif +#include "concurrent_queue.h" #include "gnss_sdr_valve.h" #include <gnuradio/blocks/null_sink.h> -#include <gnuradio/msg_queue.h> +#include <pmt/pmt.h> TEST(ValveTest, CheckEventSentAfter100Samples) { - gr::msg_queue::sptr queue = gr::msg_queue::make(0); + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); gr::top_block_sptr top_block = gr::make_top_block("gnss_sdr_valve_test"); @@ -52,8 +53,9 @@ TEST(ValveTest, CheckEventSentAfter100Samples) boost::shared_ptr<gr::block> valve = gnss_sdr_make_valve(sizeof(float), 100, queue); gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(float)); - unsigned int expected0 = 0; - EXPECT_EQ(expected0, queue->count()); + bool expected0 = false; + pmt::pmt_t msg; + EXPECT_EQ(expected0, queue->timed_wait_and_pop(msg, 100)); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, sink, 0); @@ -61,6 +63,6 @@ TEST(ValveTest, CheckEventSentAfter100Samples) top_block->run(); top_block->stop(); - unsigned int expected1 = 1; - EXPECT_EQ(expected1, queue->count()); + bool expected1 = true; + EXPECT_EQ(expected1, queue->timed_wait_and_pop(msg, 100)); } diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e1_dll_pll_veml_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e1_dll_pll_veml_tracking_test.cc index 469ec2c27..0b2bdd9aa 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e1_dll_pll_veml_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e1_dll_pll_veml_tracking_test.cc @@ -32,6 +32,7 @@ #include "galileo_e1_dll_pll_veml_tracking.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -41,7 +42,6 @@ #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/skiphead.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -68,7 +68,7 @@ protected: void init(); - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GNSSBlockFactory> factory; std::shared_ptr<InMemoryConfiguration> config; @@ -114,7 +114,7 @@ TEST_F(GalileoE1DllPllVemlTrackingInternalTest, ConnectAndRun) std::chrono::time_point<std::chrono::system_clock> start, end; std::chrono::duration<double> elapsed_seconds(0); init(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Tracking test"); // Example using smart pointers and the block factory @@ -161,7 +161,7 @@ TEST_F(GalileoE1DllPllVemlTrackingInternalTest, ValidationOfResults) int num_samples = 80000000; // 8 Msps unsigned int skiphead_sps = 8000000; // 8 Msps init(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Tracking test"); // Example using smart pointers and the block factory diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e5a_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e5a_tracking_test.cc index 122184eb7..92dae1d47 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e5a_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/galileo_e5a_tracking_test.cc @@ -31,6 +31,7 @@ */ +#include "concurrent_queue.h" #include "galileo_e5a_dll_pll_tracking.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" @@ -41,7 +42,6 @@ #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/skiphead.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -69,7 +69,7 @@ protected: void init(); - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GNSSBlockFactory> factory; std::shared_ptr<InMemoryConfiguration> config; @@ -110,7 +110,7 @@ TEST_F(GalileoE5aTrackingTest, ValidationOfResults) int fs_in = 32000000; int nsamples = 32000000 * 5; init(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Tracking test"); // Example using smart pointers and the block factory diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/glonass_l1_ca_dll_pll_c_aid_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/glonass_l1_ca_dll_pll_c_aid_tracking_test.cc index 003c63a9d..2a2e8d860 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/glonass_l1_ca_dll_pll_c_aid_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/glonass_l1_ca_dll_pll_c_aid_tracking_test.cc @@ -32,6 +32,7 @@ #include "glonass_l1_ca_dll_pll_c_aid_tracking.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -42,7 +43,6 @@ #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/skiphead.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -119,7 +119,7 @@ protected: void init(); - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GNSSBlockFactory> factory; std::shared_ptr<InMemoryConfiguration> config; @@ -156,7 +156,7 @@ TEST_F(GlonassL1CaDllPllCAidTrackingTest, ValidationOfResults) int nsamples = fs_in * 4e-3 * 2; init(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Tracking test"); std::shared_ptr<TrackingInterface> tracking = std::make_shared<GlonassL1CaDllPllCAidTracking>(config.get(), "Tracking_1G", 1, 1); boost::shared_ptr<GlonassL1CaDllPllCAidTrackingTest_msg_rx> msg_rx = GlonassL1CaDllPllCAidTrackingTest_msg_rx_make(); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/glonass_l1_ca_dll_pll_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/glonass_l1_ca_dll_pll_tracking_test.cc index 20a910ce4..be9128699 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/glonass_l1_ca_dll_pll_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/glonass_l1_ca_dll_pll_tracking_test.cc @@ -32,6 +32,7 @@ #include "glonass_l1_ca_dll_pll_tracking.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" @@ -42,7 +43,6 @@ #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/skiphead.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -120,7 +120,7 @@ protected: void init(); - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GNSSBlockFactory> factory; std::shared_ptr<InMemoryConfiguration> config; @@ -156,7 +156,7 @@ TEST_F(GlonassL1CaDllPllTrackingTest, ValidationOfResults) int nsamples = fs_in * 4e-3 * 2; init(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Tracking test"); std::shared_ptr<TrackingInterface> tracking = std::make_shared<GlonassL1CaDllPllTracking>(config.get(), "Tracking_1G", 1, 1); boost::shared_ptr<GlonassL1CaDllPllTrackingTest_msg_rx> msg_rx = GlonassL1CaDllPllTrackingTest_msg_rx_make(); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l2_m_dll_pll_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l2_m_dll_pll_tracking_test.cc index a640db425..2ace452e5 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l2_m_dll_pll_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l2_m_dll_pll_tracking_test.cc @@ -31,18 +31,18 @@ */ +#include "gps_l2_m_dll_pll_tracking.h" +#include "concurrent_queue.h" #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" -#include "gps_l2_m_dll_pll_tracking.h" #include "in_memory_configuration.h" #include "tracking_interface.h" #include <gnuradio/analog/sig_source_waveform.h> #include <gnuradio/blocks/file_source.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/skiphead.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> #include <chrono> @@ -123,7 +123,7 @@ protected: void init(); - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; gr::top_block_sptr top_block; std::shared_ptr<GNSSBlockFactory> factory; std::shared_ptr<InMemoryConfiguration> config; @@ -160,7 +160,7 @@ TEST_F(GpsL2MDllPllTrackingTest, ValidationOfResults) int nsamples = fs_in * 9; init(); - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Tracking test"); std::shared_ptr<TrackingInterface> tracking = std::make_shared<GpsL2MDllPllTracking>(config.get(), "Tracking_2S", 1, 1); boost::shared_ptr<GpsL2MDllPllTrackingTest_msg_rx> msg_rx = GpsL2MDllPllTrackingTest_msg_rx_make(); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc index fb38b8efa..169513401 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc @@ -36,7 +36,7 @@ #include "Galileo_E1.h" #include "Galileo_E5a.h" #include "acquisition_msg_rx.h" -#include "control_message_factory.h" +#include "concurrent_queue.h" #include "galileo_e1_pcps_ambiguous_acquisition.h" #include "galileo_e5a_noncoherent_iq_acquisition_caf.h" #include "galileo_e5a_pcps_acquisition.h" @@ -61,9 +61,9 @@ #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/skiphead.h> #include <gnuradio/filter/firdes.h> -#include <gnuradio/msg_queue.h> #include <gnuradio/top_block.h> #include <gtest/gtest.h> +#include <pmt/pmt.h> #include <chrono> #include <cstdint> #include <utility> @@ -229,7 +229,7 @@ public: Gnss_Synchro gnss_synchro; size_t item_size; - gr::msg_queue::sptr queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; }; @@ -795,14 +795,10 @@ TEST_F(TrackingPullInTest, ValidationOfResults) // create the msg queue for valve - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); long long int acq_to_trk_delay_samples = ceil(static_cast<double>(FLAGS_fs_gen_sps) * FLAGS_acq_to_trk_delay_s); auto resetable_valve_ = gnss_sdr_make_valve(sizeof(gr_complex), acq_to_trk_delay_samples, queue, false); - std::shared_ptr<ControlMessageFactory> control_message_factory_; - std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages_; - - //CN0 LOOP std::vector<std::vector<double>> pull_in_results_v_v; @@ -883,15 +879,8 @@ TEST_F(TrackingPullInTest, ValidationOfResults) top_block->start(); std::cout << " Waiting for valve...\n"; //wait the valve message indicating the circulation of the amount of samples of the delay - gr::message::sptr queue_message = queue->delete_head(); - if (queue_message != nullptr) - { - control_messages_ = control_message_factory_->GetControlMessages(queue_message); - } - else - { - control_messages_->clear(); - } + pmt::pmt_t msg; + queue->wait_and_pop(msg); std::cout << " Starting tracking...\n"; tracking->start_tracking(); resetable_valve_->open_valve(); diff --git a/src/utils/front-end-cal/main.cc b/src/utils/front-end-cal/main.cc index 54723dfc5..696abfa6c 100644 --- a/src/utils/front-end-cal/main.cc +++ b/src/utils/front-end-cal/main.cc @@ -60,9 +60,8 @@ #include <gnuradio/blocks/head.h> #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/skiphead.h> -#include <gnuradio/gr_complex.h> // for gr_complex -#include <gnuradio/io_signature.h> // for io_signature -#include <gnuradio/msg_queue.h> +#include <gnuradio/gr_complex.h> // for gr_complex +#include <gnuradio/io_signature.h> // for io_signature #include <gnuradio/runtime_types.h> // for block_sptr #include <gnuradio/top_block.h> #include <pmt/pmt.h> // for pmt_t, to_long @@ -189,9 +188,9 @@ bool front_end_capture(const std::shared_ptr<ConfigurationInterface>& configurat { gr::top_block_sptr top_block; GNSSBlockFactory block_factory; - boost::shared_ptr<gr::msg_queue> queue; + std::shared_ptr<Concurrent_Queue<pmt::pmt_t>> queue; - queue = gr::msg_queue::make(0); + queue = std::make_shared<Concurrent_Queue<pmt::pmt_t>>(); top_block = gr::make_top_block("Acquisition test"); std::shared_ptr<GNSSBlockInterface> source;