From e8a03c485531fc7ebfe0fce7d703692605734db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Cebri=C3=A1n=20Juan?= Date: Mon, 31 Aug 2020 14:12:12 +0200 Subject: [PATCH 1/5] Telecommand status: print basic channel information Available info: channel number, system, signal and PRN. Missing info: mode, telemetry status, ephemeris status, Doppler and CN0 --- src/core/receiver/control_thread.cc | 1 + src/core/receiver/gnss_flowgraph.h | 8 ++++ src/core/receiver/tcp_cmd_interface.cc | 52 ++++++++++++++++++++------ src/core/receiver/tcp_cmd_interface.h | 3 ++ 4 files changed, 53 insertions(+), 11 deletions(-) diff --git a/src/core/receiver/control_thread.cc b/src/core/receiver/control_thread.cc index 2569c69e6..ea650ecaa 100644 --- a/src/core/receiver/control_thread.cc +++ b/src/core/receiver/control_thread.cc @@ -326,6 +326,7 @@ int ControlThread::run() // start the telecommand listener thread cmd_interface_.set_pvt(flowgraph_->get_pvt()); + cmd_interface_.set_channels(flowgraph_->get_channels()); cmd_interface_thread_ = std::thread(&ControlThread::telecommand_listener, this); #ifdef ENABLE_FPGA diff --git a/src/core/receiver/gnss_flowgraph.h b/src/core/receiver/gnss_flowgraph.h index eaac8c6fb..a53565577 100644 --- a/src/core/receiver/gnss_flowgraph.h +++ b/src/core/receiver/gnss_flowgraph.h @@ -145,6 +145,14 @@ public: return std::dynamic_pointer_cast(pvt_); } + /*! + * \brief Returns a smart pointer to the Channels object + */ + std::shared_ptr>> get_channels() + { + return std::make_shared>>(channels_); + } + /*! * \brief Priorize visible satellites in the specified vector */ diff --git a/src/core/receiver/tcp_cmd_interface.cc b/src/core/receiver/tcp_cmd_interface.cc index 4278fcc6e..6cec0808e 100644 --- a/src/core/receiver/tcp_cmd_interface.cc +++ b/src/core/receiver/tcp_cmd_interface.cc @@ -19,6 +19,7 @@ */ #include "tcp_cmd_interface.h" +#include "channel.h" #include "command_event.h" #include "pvt_interface.h" #include @@ -74,6 +75,12 @@ void TcpCmdInterface::set_pvt(std::shared_ptr PVT_sptr) } +void TcpCmdInterface::set_channels(std::shared_ptr>> channels_sptr) +{ + channels_sptr_ = std::move(channels_sptr); +} + + time_t TcpCmdInterface::get_utc_time() const { return receiver_utc_time_; @@ -123,18 +130,41 @@ std::string TcpCmdInterface::standby(const std::vector &commandLine std::string TcpCmdInterface::status(const std::vector &commandLine __attribute__((unused))) { std::stringstream str_stream; - // todo: implement the receiver status report - // str_stream << "-------------------------------------------------------\n"; - // str_stream << "ch | sys | sig | mode | Tlm | Eph | Doppler | CN0 |\n"; - // str_stream << " | | | | | | [Hz] | [dB - Hz] |\n"; - // str_stream << "-------------------------------------------------------\n"; - // int n_ch = 10; - // for (int n = 0; n < n_ch; n++) - // { - // str_stream << n << "GPS | L1CA | TRK | YES | YES | 23412.4 | 44.3 |\n"; - // } - // str_stream << "--------------------------------------------------------\n"; + str_stream << "----------------------------------------------------------------------------\n"; + str_stream << "| Ch | System | Signal | PRN | Mode | Tlm | Eph | Doppler | CN0 |\n"; + str_stream << "| | | | | | | | [Hz] | [dB-Hz] |\n"; + str_stream << "----------------------------------------------------------------------------\n"; + + int n_ch = static_cast(channels_sptr_->size()); + for (int n = 0; n < n_ch; n++) + { + std::shared_ptr + ch_sptr = std::dynamic_pointer_cast(channels_sptr_->at(n)); + + str_stream << std::fixed << std::setprecision(1) + << "| " + << std::right << std::setw(3) << n + << " | " + << std::left << std::setw(7) << ch_sptr->get_signal().get_satellite().get_system() + << " | " + << std::left << std::setw(9) << ch_sptr->get_signal().get_signal_str() + << " | " + << std::right << std::setw(3) << ch_sptr->get_signal().get_satellite().get_PRN() + << " | " + << std::left << std::setw(4) << "---" + << " | " + << std::left << std::setw(3) << "---" + << " | " + << std::left << std::setw(3) << "---" + << " | " + << std::right << std::setw(9) << 23412.46 + << " | " + << std::right << std::setw(7) << 44.32 + << " |" + << "\n"; + } + str_stream << "----------------------------------------------------------------------------\n"; double longitude_deg; double latitude_deg; diff --git a/src/core/receiver/tcp_cmd_interface.h b/src/core/receiver/tcp_cmd_interface.h index a8bcc0d37..2c7499aa3 100644 --- a/src/core/receiver/tcp_cmd_interface.h +++ b/src/core/receiver/tcp_cmd_interface.h @@ -33,6 +33,7 @@ #include class PvtInterface; +class ChannelInterface; class TcpCmdInterface { @@ -53,6 +54,7 @@ public: std::array get_LLH() const; void set_pvt(std::shared_ptr PVT_sptr); + void set_channels(std::shared_ptr>> channels_sptr); private: std::unordered_map &)>> @@ -69,6 +71,7 @@ private: std::shared_ptr> control_queue_; std::shared_ptr PVT_sptr_; + std::shared_ptr>> channels_sptr_; float rx_latitude_; float rx_longitude_; From 6a16813483b7fe96e687f73e377f20227844eaaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Cebri=C3=A1n=20Juan?= Date: Mon, 31 Aug 2020 20:36:58 +0200 Subject: [PATCH 2/5] Telecommand status: show pretty signal names --- src/core/receiver/tcp_cmd_interface.cc | 33 +++++++++++++++++++------- src/core/receiver/tcp_cmd_interface.h | 3 +++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/core/receiver/tcp_cmd_interface.cc b/src/core/receiver/tcp_cmd_interface.cc index 6cec0808e..6a5ec2be3 100644 --- a/src/core/receiver/tcp_cmd_interface.cc +++ b/src/core/receiver/tcp_cmd_interface.cc @@ -44,6 +44,17 @@ TcpCmdInterface::TcpCmdInterface() rx_longitude_ = 0.0; rx_altitude_ = 0.0; receiver_utc_time_ = 0; + + map_signal_pretty_name_["1C"] = "L1 C/A"; + map_signal_pretty_name_["1B"] = "E1"; + map_signal_pretty_name_["1G"] = "L1 C/A"; + map_signal_pretty_name_["2S"] = "L2C"; + map_signal_pretty_name_["2G"] = "L2 C/A"; + map_signal_pretty_name_["5X"] = "E5a"; + map_signal_pretty_name_["7X"] = "E5b"; + map_signal_pretty_name_["L5"] = "L5"; + map_signal_pretty_name_["B1"] = "B1I"; + map_signal_pretty_name_["B3"] = "B3I"; } @@ -131,10 +142,10 @@ std::string TcpCmdInterface::status(const std::vector &commandLine { std::stringstream str_stream; - str_stream << "----------------------------------------------------------------------------\n"; - str_stream << "| Ch | System | Signal | PRN | Mode | Tlm | Eph | Doppler | CN0 |\n"; - str_stream << "| | | | | | | | [Hz] | [dB-Hz] |\n"; - str_stream << "----------------------------------------------------------------------------\n"; + str_stream << "-------------------------------------------------------------------------\n"; + str_stream << "| Ch | System | Signal | PRN | Mode | Tlm | Eph | Doppler | CN0 |\n"; + str_stream << "| | | | | | | | [Hz] | [dB-Hz] |\n"; + str_stream << "-------------------------------------------------------------------------\n"; int n_ch = static_cast(channels_sptr_->size()); for (int n = 0; n < n_ch; n++) @@ -142,17 +153,21 @@ std::string TcpCmdInterface::status(const std::vector &commandLine std::shared_ptr ch_sptr = std::dynamic_pointer_cast(channels_sptr_->at(n)); + std::string sys = ch_sptr->get_signal().get_satellite().get_system(); + std::string sig = map_signal_pretty_name_.at(ch_sptr->get_signal().get_signal_str()); + uint32_t prn = ch_sptr->get_signal().get_satellite().get_PRN(); + str_stream << std::fixed << std::setprecision(1) << "| " << std::right << std::setw(3) << n << " | " - << std::left << std::setw(7) << ch_sptr->get_signal().get_satellite().get_system() + << std::left << std::setw(7) << sys << " | " - << std::left << std::setw(9) << ch_sptr->get_signal().get_signal_str() + << std::left << std::setw(6) << sig << " | " - << std::right << std::setw(3) << ch_sptr->get_signal().get_satellite().get_PRN() + << std::right << std::setw(3) << prn << " | " - << std::left << std::setw(4) << "---" + << std::left << std::setw(4) << "----" << " | " << std::left << std::setw(3) << "---" << " | " @@ -164,7 +179,7 @@ std::string TcpCmdInterface::status(const std::vector &commandLine << " |" << "\n"; } - str_stream << "----------------------------------------------------------------------------\n"; + str_stream << "-------------------------------------------------------------------------\n"; double longitude_deg; double latitude_deg; diff --git a/src/core/receiver/tcp_cmd_interface.h b/src/core/receiver/tcp_cmd_interface.h index 2c7499aa3..17be611bb 100644 --- a/src/core/receiver/tcp_cmd_interface.h +++ b/src/core/receiver/tcp_cmd_interface.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -73,6 +74,8 @@ private: std::shared_ptr PVT_sptr_; std::shared_ptr>> channels_sptr_; + std::map map_signal_pretty_name_; + float rx_latitude_; float rx_longitude_; float rx_altitude_; From 15713fc4bb897bfffe4bf0cc81824ce2ea5521e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Cebri=C3=A1n=20Juan?= Date: Tue, 1 Sep 2020 12:53:10 +0200 Subject: [PATCH 3/5] Telecommand status: show mode information (channel FSM state) --- src/algorithms/channel/adapters/channel.h | 2 ++ src/algorithms/channel/libs/channel_fsm.h | 2 ++ src/core/receiver/tcp_cmd_interface.cc | 15 ++++++++++----- src/core/receiver/tcp_cmd_interface.h | 1 + 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/algorithms/channel/adapters/channel.h b/src/algorithms/channel/adapters/channel.h index 0775c915b..64cc81e36 100644 --- a/src/algorithms/channel/adapters/channel.h +++ b/src/algorithms/channel/adapters/channel.h @@ -86,6 +86,8 @@ public: inline std::shared_ptr tracking() const { return trk_; } inline std::shared_ptr telemetry() const { return nav_; } + inline uint32_t fsm_state() { return channel_fsm_->state(); } + private: std::shared_ptr channel_fsm_; std::shared_ptr acq_; diff --git a/src/algorithms/channel/libs/channel_fsm.h b/src/algorithms/channel/libs/channel_fsm.h index e09e680f7..15d5595ee 100644 --- a/src/algorithms/channel/libs/channel_fsm.h +++ b/src/algorithms/channel/libs/channel_fsm.h @@ -58,6 +58,8 @@ public: virtual bool Event_failed_acquisition_repeat(); virtual bool Event_failed_acquisition_no_repeat(); + inline uint32_t state() { return state_; } + private: void start_tracking(); void stop_acquisition(); diff --git a/src/core/receiver/tcp_cmd_interface.cc b/src/core/receiver/tcp_cmd_interface.cc index 6a5ec2be3..18ec9d7f3 100644 --- a/src/core/receiver/tcp_cmd_interface.cc +++ b/src/core/receiver/tcp_cmd_interface.cc @@ -55,6 +55,10 @@ TcpCmdInterface::TcpCmdInterface() map_signal_pretty_name_["L5"] = "L5"; map_signal_pretty_name_["B1"] = "B1I"; map_signal_pretty_name_["B3"] = "B3I"; + + map_state_name_[0] = "STBY"; + map_state_name_[1] = "ACQ"; + map_state_name_[2] = "TRK"; } @@ -153,21 +157,22 @@ std::string TcpCmdInterface::status(const std::vector &commandLine std::shared_ptr ch_sptr = std::dynamic_pointer_cast(channels_sptr_->at(n)); - std::string sys = ch_sptr->get_signal().get_satellite().get_system(); - std::string sig = map_signal_pretty_name_.at(ch_sptr->get_signal().get_signal_str()); + std::string system = ch_sptr->get_signal().get_satellite().get_system(); + std::string signal = map_signal_pretty_name_.at(ch_sptr->get_signal().get_signal_str()); uint32_t prn = ch_sptr->get_signal().get_satellite().get_PRN(); + std::string state = map_state_name_.at(ch_sptr->fsm_state()); str_stream << std::fixed << std::setprecision(1) << "| " << std::right << std::setw(3) << n << " | " - << std::left << std::setw(7) << sys + << std::left << std::setw(7) << system << " | " - << std::left << std::setw(6) << sig + << std::left << std::setw(6) << signal << " | " << std::right << std::setw(3) << prn << " | " - << std::left << std::setw(4) << "----" + << std::left << std::setw(4) << state << " | " << std::left << std::setw(3) << "---" << " | " diff --git a/src/core/receiver/tcp_cmd_interface.h b/src/core/receiver/tcp_cmd_interface.h index 17be611bb..8f20db106 100644 --- a/src/core/receiver/tcp_cmd_interface.h +++ b/src/core/receiver/tcp_cmd_interface.h @@ -75,6 +75,7 @@ private: std::shared_ptr>> channels_sptr_; std::map map_signal_pretty_name_; + std::map map_state_name_; float rx_latitude_; float rx_longitude_; From 585754a665345c9629dd327d1d81dfc568cdf722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Cebri=C3=A1n=20Juan?= Date: Wed, 2 Sep 2020 01:10:46 +0200 Subject: [PATCH 4/5] Telecommand status: mark functions as const --- src/algorithms/channel/adapters/channel.h | 2 +- src/algorithms/channel/libs/channel_fsm.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/algorithms/channel/adapters/channel.h b/src/algorithms/channel/adapters/channel.h index 64cc81e36..bfbe9977d 100644 --- a/src/algorithms/channel/adapters/channel.h +++ b/src/algorithms/channel/adapters/channel.h @@ -86,7 +86,7 @@ public: inline std::shared_ptr tracking() const { return trk_; } inline std::shared_ptr telemetry() const { return nav_; } - inline uint32_t fsm_state() { return channel_fsm_->state(); } + inline uint32_t fsm_state() const { return channel_fsm_->state(); } private: std::shared_ptr channel_fsm_; diff --git a/src/algorithms/channel/libs/channel_fsm.h b/src/algorithms/channel/libs/channel_fsm.h index 15d5595ee..eb31013a7 100644 --- a/src/algorithms/channel/libs/channel_fsm.h +++ b/src/algorithms/channel/libs/channel_fsm.h @@ -58,7 +58,7 @@ public: virtual bool Event_failed_acquisition_repeat(); virtual bool Event_failed_acquisition_no_repeat(); - inline uint32_t state() { return state_; } + inline uint32_t state() const { return state_; } private: void start_tracking(); From b6b7cc76a351bea1bd25d7eb37e2e441bba968a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Cebri=C3=A1n=20Juan?= Date: Wed, 2 Sep 2020 02:18:38 +0200 Subject: [PATCH 5/5] Telecommand status: add DROP state and make map members const --- src/core/receiver/tcp_cmd_interface.cc | 16 +--------------- src/core/receiver/tcp_cmd_interface.h | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/core/receiver/tcp_cmd_interface.cc b/src/core/receiver/tcp_cmd_interface.cc index 18ec9d7f3..8eb997c88 100644 --- a/src/core/receiver/tcp_cmd_interface.cc +++ b/src/core/receiver/tcp_cmd_interface.cc @@ -35,6 +35,7 @@ using b_io_context = boost::asio::io_context; using b_io_context = boost::asio::io_service; #endif + TcpCmdInterface::TcpCmdInterface() { register_functions(); @@ -44,21 +45,6 @@ TcpCmdInterface::TcpCmdInterface() rx_longitude_ = 0.0; rx_altitude_ = 0.0; receiver_utc_time_ = 0; - - map_signal_pretty_name_["1C"] = "L1 C/A"; - map_signal_pretty_name_["1B"] = "E1"; - map_signal_pretty_name_["1G"] = "L1 C/A"; - map_signal_pretty_name_["2S"] = "L2C"; - map_signal_pretty_name_["2G"] = "L2 C/A"; - map_signal_pretty_name_["5X"] = "E5a"; - map_signal_pretty_name_["7X"] = "E5b"; - map_signal_pretty_name_["L5"] = "L5"; - map_signal_pretty_name_["B1"] = "B1I"; - map_signal_pretty_name_["B3"] = "B3I"; - - map_state_name_[0] = "STBY"; - map_state_name_[1] = "ACQ"; - map_state_name_[2] = "TRK"; } diff --git a/src/core/receiver/tcp_cmd_interface.h b/src/core/receiver/tcp_cmd_interface.h index 8f20db106..9d27fa6c4 100644 --- a/src/core/receiver/tcp_cmd_interface.h +++ b/src/core/receiver/tcp_cmd_interface.h @@ -74,8 +74,23 @@ private: std::shared_ptr PVT_sptr_; std::shared_ptr>> channels_sptr_; - std::map map_signal_pretty_name_; - std::map map_state_name_; + const std::map map_signal_pretty_name_{ + {"1C", "L1 C/A"}, + {"1B", "E1"}, + {"1G", "L1 C/A"}, + {"2S", "L2C"}, + {"2G", "L2 C/A"}, + {"5X", "E5a"}, + {"7X", "E5b"}, + {"L5", "L5"}, + {"B1", "B1I"}, + {"B3", "B3I"}}; + + const std::map map_state_name_{ + {0, "STBY"}, + {1, "ACQ"}, + {2, "TRK"}, + {3, "DROP"}}; float rx_latitude_; float rx_longitude_;