diff --git a/srsue/hdr/metrics_stdout.h b/srsue/hdr/metrics_stdout.h index b3a175e7d..1aa842a5f 100644 --- a/srsue/hdr/metrics_stdout.h +++ b/srsue/hdr/metrics_stdout.h @@ -39,7 +39,7 @@ namespace srsue { class metrics_stdout : public srslte::metrics_listener { public: - metrics_stdout(); + metrics_stdout(){}; void toggle_print(bool b); void set_metrics(const ue_metrics_t& m, const uint32_t period_usec); @@ -49,10 +49,12 @@ public: private: std::string float_to_string(float f, int digits); std::string float_to_eng_string(float f, int digits); + void print_table(const bool display_neighbours); - bool do_print; - uint8_t n_reports; - ue_metrics_interface* ue; + bool do_print = false; + bool table_has_neighbours = false; ///< state of last table head + uint8_t n_reports = 10; + ue_metrics_interface* ue = nullptr; }; } // namespace srsue diff --git a/srsue/src/metrics_stdout.cc b/srsue/src/metrics_stdout.cc index bd28ed789..f6c2e27d0 100644 --- a/srsue/src/metrics_stdout.cc +++ b/srsue/src/metrics_stdout.cc @@ -60,11 +60,6 @@ char const* const prefixes[2][9] = { }, }; -metrics_stdout::metrics_stdout() : do_print(false), n_reports(10), ue(nullptr) -{ - // Do nothing -} - void metrics_stdout::set_ue_handle(ue_metrics_interface* ue_) { ue = ue_; @@ -75,6 +70,20 @@ void metrics_stdout::toggle_print(bool b) do_print = b; } +void metrics_stdout::print_table(const bool display_neighbours) +{ + if (display_neighbours) { + cout << "--------Signal-------------Neighbour--DL-------------------------------------UL----------------------" + << endl; + cout << "cc pci rsrp pl cfo pci rsrp mcs snr turbo brate bler ta_us mcs buff brate bler" + << endl; + } else { + cout << "--------Signal--------------DL-------------------------------------UL----------------------" << endl; + cout << "cc pci rsrp pl cfo mcs snr turbo brate bler ta_us mcs buff brate bler" << endl; + } + table_has_neighbours = display_neighbours; +} + void metrics_stdout::set_metrics(const ue_metrics_t& metrics, const uint32_t period_usec) { if (ue == nullptr) { @@ -102,19 +111,18 @@ void metrics_stdout::set_metrics(const ue_metrics_t& metrics, const uint32_t per display_neighbours = metrics.stack.rrc.neighbour_cells.size() > 0; } + // print table header every 10 reports if (++n_reports > 10) { n_reports = 0; cout << endl; - if (display_neighbours) { - cout << "--------Signal--------------Neighbor----DL-------------------------------------UL----------------------" - << endl; - cout << "cc pci rsrp pl cfo pci rsrp mcs snr turbo brate bler ta_us mcs buff brate bler" - << endl; - } else { - cout << "--------Signal--------------DL-------------------------------------UL----------------------" << endl; - cout << "cc pci rsrp pl cfo mcs snr turbo brate bler ta_us mcs buff brate bler" << endl; - } + print_table(display_neighbours); } + + // also print table header if neighbours are added/removed in between + if (display_neighbours != table_has_neighbours) { + print_table(display_neighbours); + } + for (uint32_t r = 0; r < metrics.phy.nof_active_cc; r++) { cout << std::setw(2) << r; cout << std::setw(4) << metrics.phy.info[r].pci << std::setw(0);