diff --git a/srsenb/src/phy/nr/cc_worker.cc b/srsenb/src/phy/nr/cc_worker.cc index 3d543187e..f68a5f613 100644 --- a/srsenb/src/phy/nr/cc_worker.cc +++ b/srsenb/src/phy/nr/cc_worker.cc @@ -24,8 +24,8 @@ namespace srsenb { namespace nr { -cc_worker::cc_worker(uint32_t cc_idx_, srslte::log* log, phy_nr_state* phy_state_) : - cc_idx(cc_idx_), phy_state(phy_state_), log_h(log) +cc_worker::cc_worker(uint32_t cc_idx_, srslog::basic_logger& log, phy_nr_state* phy_state_) : + cc_idx(cc_idx_), phy_state(phy_state_), logger(log) { cf_t* buffer_c[SRSLTE_MAX_PORTS] = {}; @@ -108,7 +108,6 @@ uint32_t cc_worker::get_buffer_len() int cc_worker::encode_pdcch_dl(stack_interface_phy_nr::dl_sched_grant_t* grants, uint32_t nof_grants) { for (uint32_t i = 0; i < nof_grants; i++) { - // Get PHY config for UE // ... @@ -118,8 +117,8 @@ int cc_worker::encode_pdcch_dl(stack_interface_phy_nr::dl_sched_grant_t* grants, return SRSLTE_ERROR; } - if (log_h->get_level() >= srslte::LOG_LEVEL_INFO) { - log_h->info("PDCCH: cc=%d, ...", cc_idx); + if (logger.info.enabled()) { + logger.info("PDCCH: cc=%d, ...", cc_idx); } } @@ -129,7 +128,6 @@ int cc_worker::encode_pdcch_dl(stack_interface_phy_nr::dl_sched_grant_t* grants, int cc_worker::encode_pdsch(stack_interface_phy_nr::dl_sched_grant_t* grants, uint32_t nof_grants) { for (uint32_t i = 0; i < nof_grants; i++) { - // Get PHY config for UE // ... srslte_pdsch_cfg_nr_t pdsch_hl_cfg = {}; @@ -151,10 +149,10 @@ int cc_worker::encode_pdsch(stack_interface_phy_nr::dl_sched_grant_t* grants, ui } // Logging - if (log_h->get_level() >= srslte::LOG_LEVEL_INFO) { + if (logger.info.enabled()) { char str[512]; srslte_enb_dl_nr_pdsch_info(&enb_dl, &pdsch_cfg, str, sizeof(str)); - log_h->info("PDSCH: cc=%d, %s", cc_idx, str); + logger.info("PDSCH: cc=%d, %s", cc_idx, str); } } diff --git a/srsue/hdr/phy/nr/cc_worker.h b/srsue/hdr/phy/nr/cc_worker.h index 8dea39372..b41adc156 100644 --- a/srsue/hdr/phy/nr/cc_worker.h +++ b/srsue/hdr/phy/nr/cc_worker.h @@ -147,7 +147,7 @@ public: class cc_worker { public: - cc_worker(uint32_t cc_idx, srslte::log* log, phy_nr_state* phy_state_); + cc_worker(uint32_t cc_idx, srslog::basic_logger& log, phy_nr_state* phy_state_); ~cc_worker(); bool set_carrier(const srslte_carrier_nr_t* carrier); @@ -168,7 +168,7 @@ private: uint32_t buffer_sz = 0; phy_nr_state* phy_state = nullptr; srslte_ue_dl_nr_t ue_dl = {}; - srslte::log* log_h = nullptr; + srslog::basic_logger& logger; // Temporal attributes srslte_softbuffer_rx_t softbuffer_rx = {}; diff --git a/srsue/hdr/phy/nr/sf_worker.h b/srsue/hdr/phy/nr/sf_worker.h index 4833a57a9..e1abb855a 100644 --- a/srsue/hdr/phy/nr/sf_worker.h +++ b/srsue/hdr/phy/nr/sf_worker.h @@ -40,7 +40,7 @@ namespace nr { class sf_worker final : public srslte::thread_pool::worker { public: - sf_worker(phy_common* phy, phy_nr_state* phy_state_, srslte::log* log); + sf_worker(phy_common* phy, phy_nr_state* phy_state_, srslog::basic_logger& logger); ~sf_worker() = default; bool set_carrier_unlocked(uint32_t cc_idx, const srslte_carrier_nr_t* carrier_); @@ -60,9 +60,9 @@ private: std::vector > cc_workers; - phy_common* phy = nullptr; - phy_nr_state* phy_state = nullptr; - srslte::log* log_h = nullptr; + phy_common* phy = nullptr; + phy_nr_state* phy_state = nullptr; + srslog::basic_logger& logger; cf_t* prach_ptr = nullptr; float prach_power = 0; diff --git a/srsue/hdr/phy/nr/worker_pool.h b/srsue/hdr/phy/nr/worker_pool.h index 7ab0ec0ca..136e0aa0e 100644 --- a/srsue/hdr/phy/nr/worker_pool.h +++ b/srsue/hdr/phy/nr/worker_pool.h @@ -31,20 +31,17 @@ namespace nr { class worker_pool { - private: - std::vector > log_vec; - srslte::thread_pool pool; std::vector > workers; phy_nr_state phy_state; - prach prach_buffer; + std::unique_ptr prach_buffer = nullptr; public: sf_worker* operator[](std::size_t pos) { return workers.at(pos).get(); } worker_pool(uint32_t max_workers); - bool init(phy_common* common, srslte::logger* logger, int prio); + bool init(phy_common* common, srslog::sink& log_sink, int prio); sf_worker* wait_worker(uint32_t tti); void start_worker(sf_worker* w); void stop(); diff --git a/srsue/src/phy/nr/cc_worker.cc b/srsue/src/phy/nr/cc_worker.cc index 9cc0f5bcf..7b64ae793 100644 --- a/srsue/src/phy/nr/cc_worker.cc +++ b/srsue/src/phy/nr/cc_worker.cc @@ -24,8 +24,8 @@ namespace srsue { namespace nr { -cc_worker::cc_worker(uint32_t cc_idx_, srslte::log* log, phy_nr_state* phy_state_) : - cc_idx(cc_idx_), phy_state(phy_state_), log_h(log) +cc_worker::cc_worker(uint32_t cc_idx_, srslog::basic_logger& log, phy_nr_state* phy_state_) : + cc_idx(cc_idx_), phy_state(phy_state_), logger(log) { cf_t* buffer_c[SRSLTE_MAX_PORTS] = {}; @@ -151,10 +151,10 @@ bool cc_worker::work_dl() const srslte_dci_dl_nr_t* dci_dl = &dci_dl_rx[i]; // Log found DCI - if (log_h->get_level() >= srslte::LOG_LEVEL_INFO) { + if (logger.info.enabled()) { std::array str; srslte_dci_nr_to_str(dci_dl, str.data(), str.size()); - log_h->info("PDCCH: cc=%d, %s", cc_idx, str.data()); + logger.info("PDCCH: cc=%d, %s", cc_idx, str.data()); } // Compute DL grant @@ -180,10 +180,10 @@ bool cc_worker::work_dl() // ... // Logging - if (log_h->get_level() >= srslte::LOG_LEVEL_INFO) { + if (logger.info.enabled()) { std::array str; srslte_ue_dl_nr_pdsch_info(&ue_dl, &pdsch_cfg, pdsch_res.data(), str.data(), str.size()); - log_h->info("PDSCH: cc=%d, %s", cc_idx, str.data()); + logger.info("PDSCH: cc=%d, %s", cc_idx, str.data()); } } diff --git a/srsue/src/phy/nr/sf_worker.cc b/srsue/src/phy/nr/sf_worker.cc index 207e5deee..842a33e41 100644 --- a/srsue/src/phy/nr/sf_worker.cc +++ b/srsue/src/phy/nr/sf_worker.cc @@ -35,8 +35,8 @@ static int plot_worker_id = -1; namespace srsue { namespace nr { -sf_worker::sf_worker(phy_common* phy_, phy_nr_state* phy_state_, srslte::log* log) : - phy_state(phy_state_), phy(phy_), log_h(log) +sf_worker::sf_worker(phy_common* phy_, phy_nr_state* phy_state_, srslog::basic_logger& log) : + phy_state(phy_state_), phy(phy_), logger(log) { for (uint32_t i = 0; i < phy_state->args.nof_carriers; i++) { cc_worker* w = new cc_worker(i, log, phy_state); @@ -69,7 +69,7 @@ uint32_t sf_worker::get_buffer_len() void sf_worker::set_tti(uint32_t tti) { - log_h->step(tti); + logger.set_context(tti); for (auto& w : cc_workers) { w->set_tti(tti); } diff --git a/srsue/src/phy/nr/worker_pool.cc b/srsue/src/phy/nr/worker_pool.cc index 4d7d0daee..ff80cefdb 100644 --- a/srsue/src/phy/nr/worker_pool.cc +++ b/srsue/src/phy/nr/worker_pool.cc @@ -25,7 +25,7 @@ namespace nr { worker_pool::worker_pool(uint32_t max_workers) : pool(max_workers) {} -bool worker_pool::init(phy_common* common, srslte::logger* logger, int prio) +bool worker_pool::init(phy_common* common, srslog::sink& log_sink, int prio) { // Set carrier attributes phy_state.carrier.id = 500; @@ -40,21 +40,13 @@ bool worker_pool::init(phy_common* common, srslte::logger* logger, int prio) return true; } - // Create logs - // Create array of pointers to phy_logs - for (uint32_t i = 0; i < common->args->nof_phy_threads; i++) { - auto* mylog = new srslte::log_filter; - char tmp[16]; - sprintf(tmp, "PHY%d", i); - mylog->init(tmp, logger, true); - mylog->set_level(common->args->log.phy_level); - mylog->set_hex_limit(common->args->log.phy_hex_limit); - log_vec.push_back(std::unique_ptr(mylog)); - } - // Add workers to workers pool and start threads for (uint32_t i = 0; i < common->args->nof_phy_threads; i++) { - auto w = new sf_worker(common, &phy_state, (srslte::log*)log_vec[i].get()); + auto& log = srslog::fetch_basic_logger(fmt::format("PHY{}", i), log_sink); + log.set_level(srslog::str_to_basic_level(common->args->log.phy_level)); + log.set_hex_dump_max_size(common->args->log.phy_hex_limit); + + auto w = new sf_worker(common, &phy_state, log); pool.init_worker(i, w, prio, common->args->worker_cpu_mask); workers.push_back(std::unique_ptr(w)); @@ -64,19 +56,17 @@ bool worker_pool::init(phy_common* common, srslte::logger* logger, int prio) } // Initialise PRACH - auto* prach_log = new srslte::log_filter; - prach_log->init("NR-PRACH", logger, false); - prach_log->set_level(common->args->log.phy_level); - prach_log->set_hex_limit(common->args->log.phy_hex_limit); - log_vec.push_back(std::unique_ptr(prach_log)); - prach_buffer.init(phy_state.args.dl.nof_max_prb, prach_log); + auto& prach_log = srslog::fetch_basic_logger("NR-PRACH", log_sink); + prach_log.set_level(srslog::str_to_basic_level(common->args->log.phy_level)); + prach_buffer = std::unique_ptr(new prach(prach_log)); + prach_buffer->init(phy_state.args.dl.nof_max_prb); // Set PRACH hard-coded cell srslte_cell_t cell = {}; cell.nof_prb = 50; cell.id = phy_state.carrier.id; - if (not prach_buffer.set_cell(cell, phy_state.cfg.prach)) { - prach_log->error("Setting PRACH cell\n"); + if (not prach_buffer->set_cell(cell, phy_state.cfg.prach)) { + prach_log.error("Setting PRACH cell"); return false; } @@ -93,15 +83,14 @@ sf_worker* worker_pool::wait_worker(uint32_t tti) sf_worker* worker = (sf_worker*)pool.wait_worker(tti); // Prepare PRACH, send always sequence 0 - prach_buffer.prepare_to_send(0); + prach_buffer->prepare_to_send(0); // Generate PRACH if ready - if (prach_buffer.is_ready_to_send(tti, phy_state.carrier.id)) { + if (prach_buffer->is_ready_to_send(tti, phy_state.carrier.id)) { uint32_t nof_prach_sf = 0; float prach_target_power = 0.0f; - cf_t* prach_ptr = prach_buffer.generate(0.0f, &nof_prach_sf, &prach_target_power); + cf_t* prach_ptr = prach_buffer->generate(0.0f, &nof_prach_sf, &prach_target_power); worker->set_prach(prach_ptr, prach_target_power); - log_vec.front().get()->info("tti=%d; Sending PRACH\n", tti); } return worker; diff --git a/srsue/src/phy/phy.cc b/srsue/src/phy/phy.cc index 6a9911708..4595bcdbd 100644 --- a/srsue/src/phy/phy.cc +++ b/srsue/src/phy/phy.cc @@ -148,7 +148,7 @@ void phy::run_thread() // Initialise workers lte_workers.init(&common, log_sink, WORKERS_THREAD_PRIO); - nr_workers.init(&common, logger, WORKERS_THREAD_PRIO); + nr_workers.init(&common, log_sink, WORKERS_THREAD_PRIO); // Warning this must be initialized after all workers have been added to the pool sfsync.init(