srsLTE/srsue/src/ue.cc

372 lines
11 KiB
C++
Raw Normal View History

/**
2017-05-30 06:38:04 -07:00
*
* \section COPYRIGHT
2017-05-30 06:38:04 -07:00
*
2021-03-19 03:45:56 -07:00
* Copyright 2013-2021 Software Radio Systems Limited
2017-05-30 06:38:04 -07:00
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the distribution.
2017-05-30 06:38:04 -07:00
*
*/
#include "srsue/hdr/ue.h"
2021-03-19 03:45:56 -07:00
#include "srsran/build_info.h"
#include "srsran/common/standard_streams.h"
2021-03-19 03:45:56 -07:00
#include "srsran/common/string_helpers.h"
#include "srsran/radio/radio.h"
#include "srsran/radio/radio_null.h"
#include "srsran/srsran.h"
#include "srsue/hdr/phy/dummy_phy.h"
#include "srsue/hdr/phy/phy.h"
#include "srsue/hdr/phy/phy_nr_sa.h"
#include "srsue/hdr/stack/ue_stack_lte.h"
2020-06-16 04:08:34 -07:00
#include "srsue/hdr/stack/ue_stack_nr.h"
2017-05-30 06:38:04 -07:00
#include <algorithm>
#include <iostream>
#include <string>
2017-05-30 06:38:04 -07:00
2021-03-19 03:45:56 -07:00
using namespace srsran;
2017-05-30 06:38:04 -07:00
namespace srsue {
2017-05-30 06:38:04 -07:00
ue::ue() : logger(srslog::fetch_basic_logger("UE", false)), sys_proc(logger)
2017-05-30 06:38:04 -07:00
{
// print build info
Upgrade loggers in srsue (#2163) * Replaced UE logger in the ue class. * Replaced loggers in the main phy class and prach. * Replaced loggers in phy common and ta_control. * Replace loggers in cc and sf workers. * Replaced loggers in intra_measure, scell_recv, search, sfn_sync, sync. * Remove last uses of the old loggers in the main phy class. * Remove stray newline in logs. * Replaced loggers in ue gw. * - Started to replace loggers in the ue stack. - Replaced loggers in usim and pcsc. - Adapted nas and usim tests. * Replace loggers in nas. * Added missing log init calls in two previously modified tests. * Replaced logger in nas idle procs. * Replaced loggers in nas emm state. * Replaced loggers in tft packet filter and adapted tft test. * Replaced loggers in main RRC class. * Replaced loggers in RRC cell. * Replaced loggers in RRC meas. * Replaced loggers in rrc procedures. * Started logger replacement in MAC layer, more precisely in demux and dl_harq classes. Been unable to inject loggers in construction for dl_tb_process due to very weird static assertions in the std::vector code being the type not constructible which is not true, so instead use the main MAC logger directly. * Replaced loggers in mac mux class. * Replaced loggers in mac pro_bsr. * Replaced loggers in mac proc phr. * Replaced loggers in mac proc SR and RA. * Replace loggers in mac UL HARQ. * Replaced loggers in main ue stack class. * Fixed nas test crashing due to a null string. * Ported mac_test to use the new loggers. * Removed TTI reporting for the PHY log as the old logger did. * Replaced loggers in UE phy tests. * Configure loggers in nas_test. * Replaced loggers in rrc_meas_test. * Replaced loggers in rrc_reconfig_test. * Added missing newline in tft_test. * Fix compilation errors in TTCN3 tests. * Fix linker error detected in CI and warning. * Replaced loggers in TTCN3 tests. * Fix a text replace error in some log messages. * Remove trailing newlines from log entries. * Remove old logger from rrc. * Flush backend before printing the test status. * - Fix compilation error from previous rebase. - Remove trailing newlines from some missing log entries.
2021-01-28 08:17:43 -08:00
std::cout << std::endl << get_build_string() << std::endl << std::endl;
2017-05-30 06:38:04 -07:00
}
ue::~ue()
{
stack.reset();
}
2018-06-06 07:59:00 -07:00
int ue::init(const all_args_t& args_)
{
2021-03-19 03:45:56 -07:00
int ret = SRSRAN_SUCCESS;
// Init UE log
Upgrade loggers in srsue (#2163) * Replaced UE logger in the ue class. * Replaced loggers in the main phy class and prach. * Replaced loggers in phy common and ta_control. * Replace loggers in cc and sf workers. * Replaced loggers in intra_measure, scell_recv, search, sfn_sync, sync. * Remove last uses of the old loggers in the main phy class. * Remove stray newline in logs. * Replaced loggers in ue gw. * - Started to replace loggers in the ue stack. - Replaced loggers in usim and pcsc. - Adapted nas and usim tests. * Replace loggers in nas. * Added missing log init calls in two previously modified tests. * Replaced logger in nas idle procs. * Replaced loggers in nas emm state. * Replaced loggers in tft packet filter and adapted tft test. * Replaced loggers in main RRC class. * Replaced loggers in RRC cell. * Replaced loggers in RRC meas. * Replaced loggers in rrc procedures. * Started logger replacement in MAC layer, more precisely in demux and dl_harq classes. Been unable to inject loggers in construction for dl_tb_process due to very weird static assertions in the std::vector code being the type not constructible which is not true, so instead use the main MAC logger directly. * Replaced loggers in mac mux class. * Replaced loggers in mac pro_bsr. * Replaced loggers in mac proc phr. * Replaced loggers in mac proc SR and RA. * Replace loggers in mac UL HARQ. * Replaced loggers in main ue stack class. * Fixed nas test crashing due to a null string. * Ported mac_test to use the new loggers. * Removed TTI reporting for the PHY log as the old logger did. * Replaced loggers in UE phy tests. * Configure loggers in nas_test. * Replaced loggers in rrc_meas_test. * Replaced loggers in rrc_reconfig_test. * Added missing newline in tft_test. * Fix compilation errors in TTCN3 tests. * Fix linker error detected in CI and warning. * Replaced loggers in TTCN3 tests. * Fix a text replace error in some log messages. * Remove trailing newlines from log entries. * Remove old logger from rrc. * Flush backend before printing the test status. * - Fix compilation error from previous rebase. - Remove trailing newlines from some missing log entries.
2021-01-28 08:17:43 -08:00
logger.set_level(srslog::basic_levels::info);
logger.info("%s", get_build_string().c_str());
2017-09-20 10:57:43 -07:00
// Validate arguments
if (parse_args(args_)) {
2021-03-19 03:45:56 -07:00
srsran::console("Error processing arguments. Please check %s for more details.\n", args_.log.filename.c_str());
return SRSRAN_ERROR;
}
// Instantiate layers and stack together our UE
std::unique_ptr<ue_stack_lte> lte_stack(new ue_stack_lte);
if (!lte_stack) {
srsran::console("Error creating LTE stack instance.\n");
return SRSRAN_ERROR;
}
2019-04-23 01:53:11 -07:00
std::unique_ptr<gw> gw_ptr(new gw(srslog::fetch_basic_logger("GW")));
if (!gw_ptr) {
srsran::console("Error creating a GW instance.\n");
return SRSRAN_ERROR;
}
std::unique_ptr<srsran::radio> lte_radio = std::unique_ptr<srsran::radio>(new srsran::radio);
if (!lte_radio) {
srsran::console("Error creating radio multi instance.\n");
return SRSRAN_ERROR;
}
srsue::phy_args_nr_t phy_args_nr = {};
phy_args_nr.max_nof_prb = args.phy.nr_max_nof_prb;
phy_args_nr.rf_channel_offset = args.phy.nof_lte_carriers;
phy_args_nr.nof_carriers = args.phy.nof_nr_carriers;
phy_args_nr.nof_phy_threads = args.phy.nof_phy_threads;
phy_args_nr.worker_cpu_mask = args.phy.worker_cpu_mask;
phy_args_nr.log = args.phy.log;
phy_args_nr.store_pdsch_ko = args.phy.nr_store_pdsch_ko;
phy_args_nr.srate_hz = args.rf.srate_hz;
2020-06-16 04:08:34 -07:00
// init layers
if (args.phy.nof_lte_carriers == 0) {
// SA mode
std::unique_ptr<srsue::phy_nr_sa> nr_phy = std::unique_ptr<srsue::phy_nr_sa>(new srsue::phy_nr_sa("PHY-SA"));
if (!nr_phy) {
2021-12-15 03:15:33 -08:00
srsran::console("Error creating NR PHY instance.\n");
return SRSRAN_ERROR;
}
// In SA mode, pass the NR SA phy to the radio
if (lte_radio->init(args.rf, nr_phy.get())) {
srsran::console("Error initializing radio.\n");
return SRSRAN_ERROR;
}
if (nr_phy->init(phy_args_nr, lte_stack.get(), lte_radio.get())) {
srsran::console("Error initializing PHY NR SA.\n");
ret = SRSRAN_ERROR;
}
std::unique_ptr<srsue::dummy_phy> dummy_lte_phy = std::unique_ptr<srsue::dummy_phy>(new srsue::dummy_phy);
if (!dummy_lte_phy) {
2021-12-15 03:15:33 -08:00
srsran::console("Error creating dummy LTE PHY instance.\n");
return SRSRAN_ERROR;
}
// In SA mode, pass NR PHY pointer to stack
args.stack.attach_on_nr = true;
if (lte_stack->init(args.stack, dummy_lte_phy.get(), nr_phy.get(), gw_ptr.get())) {
srsran::console("Error initializing stack.\n");
ret = SRSRAN_ERROR;
}
phy = std::move(nr_phy);
dummy_phy = std::move(dummy_lte_phy);
} else {
// LTE or NSA mode
std::unique_ptr<srsue::phy> lte_phy = std::unique_ptr<srsue::phy>(new srsue::phy);
if (!lte_phy) {
srsran::console("Error creating LTE PHY instance.\n");
return SRSRAN_ERROR;
}
if (lte_radio->init(args.rf, lte_phy.get())) {
srsran::console("Error initializing radio.\n");
return SRSRAN_ERROR;
}
// from here onwards do not exit immediately if something goes wrong as sub-layers may already use interfaces
if (lte_phy->init(args.phy, lte_stack.get(), lte_radio.get())) {
srsran::console("Error initializing PHY.\n");
ret = SRSRAN_ERROR;
}
if (args.phy.nof_nr_carriers > 0) {
if (lte_phy->init(phy_args_nr, lte_stack.get(), lte_radio.get())) {
srsran::console("Error initializing NR PHY.\n");
ret = SRSRAN_ERROR;
}
}
if (lte_stack->init(args.stack, lte_phy.get(), lte_phy.get(), gw_ptr.get())) {
srsran::console("Error initializing stack.\n");
ret = SRSRAN_ERROR;
}
phy = std::move(lte_phy);
}
2020-06-16 04:08:34 -07:00
if (gw_ptr->init(args.gw, lte_stack.get())) {
srsran::console("Error initializing GW.\n");
2021-03-19 03:45:56 -07:00
ret = SRSRAN_ERROR;
2019-04-23 01:53:11 -07:00
}
// move ownership
stack = std::move(lte_stack);
gw_inst = std::move(gw_ptr);
radio = std::move(lte_radio);
if (phy) {
2021-03-19 03:45:56 -07:00
srsran::console("Waiting PHY to initialize ... ");
phy->wait_initialize();
2021-03-19 03:45:56 -07:00
srsran::console("done!\n");
}
return ret;
}
int ue::parse_args(const all_args_t& args_)
{
// set member variable
args = args_;
2019-04-23 01:53:11 -07:00
// carry out basic sanity checks
if (args.stack.rrc.mbms_service_id > -1) {
if (!args.phy.interpolate_subframe_enabled) {
Upgrade loggers in srsue (#2163) * Replaced UE logger in the ue class. * Replaced loggers in the main phy class and prach. * Replaced loggers in phy common and ta_control. * Replace loggers in cc and sf workers. * Replaced loggers in intra_measure, scell_recv, search, sfn_sync, sync. * Remove last uses of the old loggers in the main phy class. * Remove stray newline in logs. * Replaced loggers in ue gw. * - Started to replace loggers in the ue stack. - Replaced loggers in usim and pcsc. - Adapted nas and usim tests. * Replace loggers in nas. * Added missing log init calls in two previously modified tests. * Replaced logger in nas idle procs. * Replaced loggers in nas emm state. * Replaced loggers in tft packet filter and adapted tft test. * Replaced loggers in main RRC class. * Replaced loggers in RRC cell. * Replaced loggers in RRC meas. * Replaced loggers in rrc procedures. * Started logger replacement in MAC layer, more precisely in demux and dl_harq classes. Been unable to inject loggers in construction for dl_tb_process due to very weird static assertions in the std::vector code being the type not constructible which is not true, so instead use the main MAC logger directly. * Replaced loggers in mac mux class. * Replaced loggers in mac pro_bsr. * Replaced loggers in mac proc phr. * Replaced loggers in mac proc SR and RA. * Replace loggers in mac UL HARQ. * Replaced loggers in main ue stack class. * Fixed nas test crashing due to a null string. * Ported mac_test to use the new loggers. * Removed TTI reporting for the PHY log as the old logger did. * Replaced loggers in UE phy tests. * Configure loggers in nas_test. * Replaced loggers in rrc_meas_test. * Replaced loggers in rrc_reconfig_test. * Added missing newline in tft_test. * Fix compilation errors in TTCN3 tests. * Fix linker error detected in CI and warning. * Replaced loggers in TTCN3 tests. * Fix a text replace error in some log messages. * Remove trailing newlines from log entries. * Remove old logger from rrc. * Flush backend before printing the test status. * - Fix compilation error from previous rebase. - Remove trailing newlines from some missing log entries.
2021-01-28 08:17:43 -08:00
logger.error("interpolate_subframe_enabled = %d, While using MBMS, "
"please set interpolate_subframe_enabled to true",
args.phy.interpolate_subframe_enabled);
2021-03-19 03:45:56 -07:00
return SRSRAN_ERROR;
2019-04-23 01:53:11 -07:00
}
if (args.phy.nof_phy_threads > 2) {
Upgrade loggers in srsue (#2163) * Replaced UE logger in the ue class. * Replaced loggers in the main phy class and prach. * Replaced loggers in phy common and ta_control. * Replace loggers in cc and sf workers. * Replaced loggers in intra_measure, scell_recv, search, sfn_sync, sync. * Remove last uses of the old loggers in the main phy class. * Remove stray newline in logs. * Replaced loggers in ue gw. * - Started to replace loggers in the ue stack. - Replaced loggers in usim and pcsc. - Adapted nas and usim tests. * Replace loggers in nas. * Added missing log init calls in two previously modified tests. * Replaced logger in nas idle procs. * Replaced loggers in nas emm state. * Replaced loggers in tft packet filter and adapted tft test. * Replaced loggers in main RRC class. * Replaced loggers in RRC cell. * Replaced loggers in RRC meas. * Replaced loggers in rrc procedures. * Started logger replacement in MAC layer, more precisely in demux and dl_harq classes. Been unable to inject loggers in construction for dl_tb_process due to very weird static assertions in the std::vector code being the type not constructible which is not true, so instead use the main MAC logger directly. * Replaced loggers in mac mux class. * Replaced loggers in mac pro_bsr. * Replaced loggers in mac proc phr. * Replaced loggers in mac proc SR and RA. * Replace loggers in mac UL HARQ. * Replaced loggers in main ue stack class. * Fixed nas test crashing due to a null string. * Ported mac_test to use the new loggers. * Removed TTI reporting for the PHY log as the old logger did. * Replaced loggers in UE phy tests. * Configure loggers in nas_test. * Replaced loggers in rrc_meas_test. * Replaced loggers in rrc_reconfig_test. * Added missing newline in tft_test. * Fix compilation errors in TTCN3 tests. * Fix linker error detected in CI and warning. * Replaced loggers in TTCN3 tests. * Fix a text replace error in some log messages. * Remove trailing newlines from log entries. * Remove old logger from rrc. * Flush backend before printing the test status. * - Fix compilation error from previous rebase. - Remove trailing newlines from some missing log entries.
2021-01-28 08:17:43 -08:00
logger.error("nof_phy_threads = %d, While using MBMS, please set "
"number of phy threads to 1 or 2",
args.phy.nof_phy_threads);
2021-03-19 03:45:56 -07:00
return SRSRAN_ERROR;
2019-04-23 01:53:11 -07:00
}
if ((0 == args.phy.snr_estim_alg.find("refs"))) {
Upgrade loggers in srsue (#2163) * Replaced UE logger in the ue class. * Replaced loggers in the main phy class and prach. * Replaced loggers in phy common and ta_control. * Replace loggers in cc and sf workers. * Replaced loggers in intra_measure, scell_recv, search, sfn_sync, sync. * Remove last uses of the old loggers in the main phy class. * Remove stray newline in logs. * Replaced loggers in ue gw. * - Started to replace loggers in the ue stack. - Replaced loggers in usim and pcsc. - Adapted nas and usim tests. * Replace loggers in nas. * Added missing log init calls in two previously modified tests. * Replaced logger in nas idle procs. * Replaced loggers in nas emm state. * Replaced loggers in tft packet filter and adapted tft test. * Replaced loggers in main RRC class. * Replaced loggers in RRC cell. * Replaced loggers in RRC meas. * Replaced loggers in rrc procedures. * Started logger replacement in MAC layer, more precisely in demux and dl_harq classes. Been unable to inject loggers in construction for dl_tb_process due to very weird static assertions in the std::vector code being the type not constructible which is not true, so instead use the main MAC logger directly. * Replaced loggers in mac mux class. * Replaced loggers in mac pro_bsr. * Replaced loggers in mac proc phr. * Replaced loggers in mac proc SR and RA. * Replace loggers in mac UL HARQ. * Replaced loggers in main ue stack class. * Fixed nas test crashing due to a null string. * Ported mac_test to use the new loggers. * Removed TTI reporting for the PHY log as the old logger did. * Replaced loggers in UE phy tests. * Configure loggers in nas_test. * Replaced loggers in rrc_meas_test. * Replaced loggers in rrc_reconfig_test. * Added missing newline in tft_test. * Fix compilation errors in TTCN3 tests. * Fix linker error detected in CI and warning. * Replaced loggers in TTCN3 tests. * Fix a text replace error in some log messages. * Remove trailing newlines from log entries. * Remove old logger from rrc. * Flush backend before printing the test status. * - Fix compilation error from previous rebase. - Remove trailing newlines from some missing log entries.
2021-01-28 08:17:43 -08:00
logger.error("snr_estim_alg = refs, While using MBMS, please set "
"algorithm to pss or empty");
2021-03-19 03:45:56 -07:00
return SRSRAN_ERROR;
2019-04-23 01:53:11 -07:00
}
2017-05-30 06:38:04 -07:00
}
2019-04-23 01:53:11 -07:00
2021-03-19 03:45:56 -07:00
if (args.rf.nof_antennas > SRSRAN_MAX_PORTS) {
fprintf(stderr, "Maximum number of antennas exceeded (%d > %d)\n", args.rf.nof_antennas, SRSRAN_MAX_PORTS);
return SRSRAN_ERROR;
}
args.rf.nof_carriers = args.phy.nof_lte_carriers + args.phy.nof_nr_carriers;
if (args.rf.nof_carriers > SRSRAN_MAX_CARRIERS) {
2020-11-20 03:12:29 -08:00
fprintf(stderr,
"Maximum number of carriers exceeded (%d > %d) (nof_lte_carriers %d + nof_nr_carriers %d)\n",
2020-11-20 03:12:29 -08:00
args.rf.nof_carriers,
SRSRAN_MAX_CARRIERS,
args.phy.nof_lte_carriers,
2020-11-20 03:12:29 -08:00
args.phy.nof_nr_carriers);
2021-03-19 03:45:56 -07:00
return SRSRAN_ERROR;
2020-11-20 03:12:29 -08:00
}
// replicate some RF parameter to make them available to PHY
args.phy.nof_rx_ant = args.rf.nof_antennas;
args.phy.agc_enable = args.rf.rx_gain < 0.0f;
// populate DL EARFCN list
if (not args.phy.dl_earfcn.empty()) {
// Parse DL-EARFCN list
2021-03-19 03:45:56 -07:00
srsran::string_parse_list(args.phy.dl_earfcn, ',', args.phy.dl_earfcn_list);
// Populates supported bands
args.stack.rrc.nof_supported_bands = 0;
for (uint32_t& earfcn : args.phy.dl_earfcn_list) {
2021-03-19 03:45:56 -07:00
uint8_t band = srsran_band_get_band(earfcn);
// Try to find band, if not appends it
if (std::find(args.stack.rrc.supported_bands.begin(), args.stack.rrc.supported_bands.end(), band) ==
args.stack.rrc.supported_bands.end()) {
args.stack.rrc.supported_bands[args.stack.rrc.nof_supported_bands++] = band;
}
// RRC NR needs also information about supported eutra bands
if (std::find(args.stack.rrc_nr.supported_bands_eutra.begin(),
args.stack.rrc_nr.supported_bands_eutra.end(),
band) == args.stack.rrc_nr.supported_bands_eutra.end()) {
args.stack.rrc_nr.supported_bands_eutra.push_back(band);
}
}
} else {
Upgrade loggers in srsue (#2163) * Replaced UE logger in the ue class. * Replaced loggers in the main phy class and prach. * Replaced loggers in phy common and ta_control. * Replace loggers in cc and sf workers. * Replaced loggers in intra_measure, scell_recv, search, sfn_sync, sync. * Remove last uses of the old loggers in the main phy class. * Remove stray newline in logs. * Replaced loggers in ue gw. * - Started to replace loggers in the ue stack. - Replaced loggers in usim and pcsc. - Adapted nas and usim tests. * Replace loggers in nas. * Added missing log init calls in two previously modified tests. * Replaced logger in nas idle procs. * Replaced loggers in nas emm state. * Replaced loggers in tft packet filter and adapted tft test. * Replaced loggers in main RRC class. * Replaced loggers in RRC cell. * Replaced loggers in RRC meas. * Replaced loggers in rrc procedures. * Started logger replacement in MAC layer, more precisely in demux and dl_harq classes. Been unable to inject loggers in construction for dl_tb_process due to very weird static assertions in the std::vector code being the type not constructible which is not true, so instead use the main MAC logger directly. * Replaced loggers in mac mux class. * Replaced loggers in mac pro_bsr. * Replaced loggers in mac proc phr. * Replaced loggers in mac proc SR and RA. * Replace loggers in mac UL HARQ. * Replaced loggers in main ue stack class. * Fixed nas test crashing due to a null string. * Ported mac_test to use the new loggers. * Removed TTI reporting for the PHY log as the old logger did. * Replaced loggers in UE phy tests. * Configure loggers in nas_test. * Replaced loggers in rrc_meas_test. * Replaced loggers in rrc_reconfig_test. * Added missing newline in tft_test. * Fix compilation errors in TTCN3 tests. * Fix linker error detected in CI and warning. * Replaced loggers in TTCN3 tests. * Fix a text replace error in some log messages. * Remove trailing newlines from log entries. * Remove old logger from rrc. * Flush backend before printing the test status. * - Fix compilation error from previous rebase. - Remove trailing newlines from some missing log entries.
2021-01-28 08:17:43 -08:00
logger.error("Error: dl_earfcn list is empty");
2021-03-19 03:45:56 -07:00
srsran::console("Error: dl_earfcn list is empty\n");
return SRSRAN_ERROR;
2018-02-13 06:06:22 -08:00
}
// populate UL EARFCN list
if (not args.phy.ul_earfcn.empty()) {
std::vector<uint32_t> ul_earfcn_list;
2021-03-19 03:45:56 -07:00
srsran::string_parse_list(args.phy.ul_earfcn, ',', ul_earfcn_list);
// For each parsed UL-EARFCN links it to the corresponding DL-EARFCN
args.phy.ul_earfcn_map.clear();
2021-03-19 03:45:56 -07:00
for (size_t i = 0; i < SRSRAN_MIN(ul_earfcn_list.size(), args.phy.dl_earfcn_list.size()); i++) {
args.phy.ul_earfcn_map[args.phy.dl_earfcn_list[i]] = ul_earfcn_list[i];
}
}
// populate NR DL ARFCNs
if (args.phy.nof_nr_carriers > 0) {
if (not args.stack.rrc_nr.supported_bands_nr_str.empty()) {
// Populates supported bands
srsran::string_parse_list(args.stack.rrc_nr.supported_bands_nr_str, ',', args.stack.rrc_nr.supported_bands_nr);
args.stack.rrc.supported_bands_nr = args.stack.rrc_nr.supported_bands_nr;
} else {
logger.error("Error: rat.nr.bands list is empty");
srsran::console("Error: rat.nr.bands list is empty\n");
2021-03-19 03:45:56 -07:00
return SRSRAN_ERROR;
}
}
// Set UE category
2019-05-27 01:24:08 -07:00
args.stack.rrc.ue_category = (uint32_t)strtoul(args.stack.rrc.ue_category_str.c_str(), nullptr, 10);
// Consider Carrier Aggregation support if more than one
2020-11-20 03:12:29 -08:00
args.stack.rrc.support_ca = (args.phy.nof_lte_carriers > 1);
2017-05-30 06:38:04 -07:00
// Make sure fix sampling rate is set for SA mode
if (args.phy.nof_lte_carriers == 0 and not std::isnormal(args.rf.srate_hz)) {
srsran::console("Error. NR Standalone PHY requires a fix RF sampling rate.\n");
return SRSRAN_ERROR;
}
2021-03-19 03:45:56 -07:00
return SRSRAN_SUCCESS;
2017-05-30 06:38:04 -07:00
}
void ue::stop()
{
// tear down UE in reverse order
if (stack) {
stack->stop();
}
2019-04-23 01:53:11 -07:00
if (gw_inst) {
gw_inst->stop();
}
if (phy) {
phy->stop();
}
if (radio) {
radio->stop();
2017-05-30 06:38:04 -07:00
}
}
bool ue::switch_on()
{
return stack->switch_on();
}
bool ue::switch_off()
{
if (gw_inst) {
gw_inst->stop();
}
// send switch off
stack->switch_off();
// wait for max. 5s for it to be sent (according to TS 24.301 Sec 25.5.2.2)
int cnt = 0, timeout_s = 5;
stack_metrics_t metrics = {};
stack->get_metrics(&metrics);
while (metrics.rrc.state != RRC_STATE_IDLE && ++cnt <= timeout_s) {
std::this_thread::sleep_for(std::chrono::seconds(1));
stack->get_metrics(&metrics);
}
if (metrics.rrc.state != RRC_STATE_IDLE) {
srslog::fetch_basic_logger("NAS").warning("Detach couldn't be sent after %ds.", timeout_s);
return false;
}
return true;
}
void ue::start_plot()
{
phy->start_plot();
}
bool ue::get_metrics(ue_metrics_t* m)
2017-05-30 06:38:04 -07:00
{
*m = {};
2021-04-13 03:21:26 -07:00
phy->get_metrics(srsran::srsran_rat_t::lte, &m->phy);
phy->get_metrics(srsran::srsran_rat_t::nr, &m->phy_nr);
radio->get_metrics(&m->rf);
stack->get_metrics(&m->stack);
gw_inst->get_metrics(m->gw, m->stack.mac[0].nof_tti);
m->sys = sys_proc.get_metrics();
return true;
2017-05-30 06:38:04 -07:00
}
std::string ue::get_build_mode()
{
2021-03-19 03:45:56 -07:00
return std::string(srsran_get_build_mode());
}
std::string ue::get_build_info()
{
2021-03-19 03:45:56 -07:00
if (std::string(srsran_get_build_info()).find(" ") != std::string::npos) {
return std::string(srsran_get_version());
}
2021-03-19 03:45:56 -07:00
return std::string(srsran_get_build_info());
}
2018-02-02 01:58:40 -08:00
std::string ue::get_build_string()
2017-05-30 06:38:04 -07:00
{
std::stringstream ss;
Upgrade loggers in srsue (#2163) * Replaced UE logger in the ue class. * Replaced loggers in the main phy class and prach. * Replaced loggers in phy common and ta_control. * Replace loggers in cc and sf workers. * Replaced loggers in intra_measure, scell_recv, search, sfn_sync, sync. * Remove last uses of the old loggers in the main phy class. * Remove stray newline in logs. * Replaced loggers in ue gw. * - Started to replace loggers in the ue stack. - Replaced loggers in usim and pcsc. - Adapted nas and usim tests. * Replace loggers in nas. * Added missing log init calls in two previously modified tests. * Replaced logger in nas idle procs. * Replaced loggers in nas emm state. * Replaced loggers in tft packet filter and adapted tft test. * Replaced loggers in main RRC class. * Replaced loggers in RRC cell. * Replaced loggers in RRC meas. * Replaced loggers in rrc procedures. * Started logger replacement in MAC layer, more precisely in demux and dl_harq classes. Been unable to inject loggers in construction for dl_tb_process due to very weird static assertions in the std::vector code being the type not constructible which is not true, so instead use the main MAC logger directly. * Replaced loggers in mac mux class. * Replaced loggers in mac pro_bsr. * Replaced loggers in mac proc phr. * Replaced loggers in mac proc SR and RA. * Replace loggers in mac UL HARQ. * Replaced loggers in main ue stack class. * Fixed nas test crashing due to a null string. * Ported mac_test to use the new loggers. * Removed TTI reporting for the PHY log as the old logger did. * Replaced loggers in UE phy tests. * Configure loggers in nas_test. * Replaced loggers in rrc_meas_test. * Replaced loggers in rrc_reconfig_test. * Added missing newline in tft_test. * Fix compilation errors in TTCN3 tests. * Fix linker error detected in CI and warning. * Replaced loggers in TTCN3 tests. * Fix a text replace error in some log messages. * Remove trailing newlines from log entries. * Remove old logger from rrc. * Flush backend before printing the test status. * - Fix compilation error from previous rebase. - Remove trailing newlines from some missing log entries.
2021-01-28 08:17:43 -08:00
ss << "Built in " << get_build_mode() << " mode using " << get_build_info() << ".";
return ss.str();
2017-05-30 06:38:04 -07:00
}
} // namespace srsue