diff --git a/lib/include/srsran/asn1/rrc_nr_utils.h b/lib/include/srsran/asn1/rrc_nr_utils.h index 60657b918..f3453b951 100644 --- a/lib/include/srsran/asn1/rrc_nr_utils.h +++ b/lib/include/srsran/asn1/rrc_nr_utils.h @@ -51,6 +51,7 @@ struct uci_on_pusch_s; struct zp_csi_rs_res_s; struct nzp_csi_rs_res_s; struct pdsch_serving_cell_cfg_s; +struct freq_info_dl_s; } // namespace rrc_nr } // namespace asn1 @@ -93,6 +94,7 @@ bool make_phy_beta_offsets(const asn1::rrc_nr::beta_offsets_s& beta_offsets, bool make_phy_pusch_scaling(const asn1::rrc_nr::uci_on_pusch_s& uci_on_pusch, float* scaling); bool make_phy_zp_csi_rs_resource(const asn1::rrc_nr::zp_csi_rs_res_s & zp_csi_rs_res, srsran_csi_rs_zp_resource_t* zp_csi_rs_resource); bool make_phy_nzp_csi_rs_resource(const asn1::rrc_nr::nzp_csi_rs_res_s & nzp_csi_rs_res, srsran_csi_rs_nzp_resource_t* csi_rs_nzp_resource); +bool make_phy_carrier_cfg(const asn1::rrc_nr::freq_info_dl_s &freq_info_dl, srsran_carrier_nr_t* carrier_nr); /*************************** * MAC Config **************************/ diff --git a/lib/include/srsran/interfaces/rrc_nr_interface_types.h b/lib/include/srsran/interfaces/rrc_nr_interface_types.h index 20d900d2c..0f796b646 100644 --- a/lib/include/srsran/interfaces/rrc_nr_interface_types.h +++ b/lib/include/srsran/interfaces/rrc_nr_interface_types.h @@ -32,11 +32,9 @@ struct phy_cfg_nr_t { srsran_pdcch_cfg_nr_t pdcch = {}; srsran_ue_dl_nr_harq_ack_cfg_t harq_ack = {}; srsran_csi_hl_cfg_t csi = {}; - - phy_cfg_nr_t() - { - - } + srsran_carrier_nr_t carrier = {}; + + phy_cfg_nr_t() {} /** * @param carrier diff --git a/lib/src/asn1/rrc_nr_utils.cc b/lib/src/asn1/rrc_nr_utils.cc index 3c6e42fa6..f5965107c 100644 --- a/lib/src/asn1/rrc_nr_utils.cc +++ b/lib/src/asn1/rrc_nr_utils.cc @@ -323,7 +323,7 @@ bool make_phy_tdd_cfg(const tdd_ul_dl_cfg_common_s& tdd_ul_dl_cfg_common, bool make_phy_harq_ack_cfg(const phys_cell_group_cfg_s& phys_cell_group_cfg, srsran_ue_dl_nr_harq_ack_cfg_t* in_srsran_ue_dl_nr_harq_ack_cfg) { - srsran_ue_dl_nr_harq_ack_cfg_t srsran_ue_dl_nr_harq_ack_cfg; + srsran_ue_dl_nr_harq_ack_cfg_t srsran_ue_dl_nr_harq_ack_cfg = {}; switch (phys_cell_group_cfg.pdsch_harq_ack_codebook) { case phys_cell_group_cfg_s::pdsch_harq_ack_codebook_opts::dynamic_value: srsran_ue_dl_nr_harq_ack_cfg.harq_ack_codebook = srsran_pdsch_harq_ack_codebook_dynamic; @@ -1174,6 +1174,46 @@ bool make_phy_nzp_csi_rs_resource(const asn1::rrc_nr::nzp_csi_rs_res_s& asn1_nz *out_csi_rs_nzp_resource = csi_rs_nzp_resource; return true; } + +bool make_phy_carrier_cfg(const freq_info_dl_s& asn1_freq_info_dl, srsran_carrier_nr_t* out_carrier_nr) +{ + srsran_carrier_nr_t carrier_nr = {}; + if (asn1_freq_info_dl.absolute_freq_ssb_present) { + carrier_nr.absolute_frequency_ssb = asn1_freq_info_dl.absolute_freq_ssb_present; + } else { + asn1::log_warning("Option absolute_freq_ssb not present"); + return false; + } + carrier_nr.absolute_frequency_point_a = asn1_freq_info_dl.absolute_freq_point_a; + if (asn1_freq_info_dl.scs_specific_carrier_list.size() != 1) { + asn1::log_warning("Option absolute_freq_ssb not present"); + return false; + } + + carrier_nr.nof_prb = asn1_freq_info_dl.scs_specific_carrier_list[0].carrier_bw; + + switch (asn1_freq_info_dl.scs_specific_carrier_list[0].subcarrier_spacing) { + case subcarrier_spacing_opts::options::khz15: + carrier_nr.scs = srsran_subcarrier_spacing_15kHz; + break; + case subcarrier_spacing_opts::options::khz30: + carrier_nr.scs = srsran_subcarrier_spacing_30kHz; + break; + case subcarrier_spacing_opts::options::khz60: + carrier_nr.scs = srsran_subcarrier_spacing_60kHz; + break; + case subcarrier_spacing_opts::options::khz120: + carrier_nr.scs = srsran_subcarrier_spacing_120kHz; + break; + case subcarrier_spacing_opts::options::khz240: + carrier_nr.scs = srsran_subcarrier_spacing_240kHz; + break; + default: + asn1::log_warning("Not supported subcarrier spacing "); + } + *out_carrier_nr = carrier_nr; + return true; +} } // namespace srsran namespace srsenb { diff --git a/srsue/src/stack/rrc/rrc_nr.cc b/srsue/src/stack/rrc/rrc_nr.cc index efaea6a05..dd7e94ed6 100644 --- a/srsue/src/stack/rrc/rrc_nr.cc +++ b/srsue/src/stack/rrc/rrc_nr.cc @@ -722,6 +722,15 @@ bool rrc_nr::apply_csi_meas_cfg(const asn1::rrc_nr::csi_meas_cfg_s& csi_meas_cfg bool rrc_nr::apply_dl_common_cfg(const asn1::rrc_nr::dl_cfg_common_s& dl_cfg_common) { if (dl_cfg_common.init_dl_bwp_present) { + if (dl_cfg_common.freq_info_dl_present) { + if (make_phy_carrier_cfg(dl_cfg_common.freq_info_dl, &phy_cfg.carrier) == false) { + logger.warning("Warning while making carrier phy config"); + return false; + } + } else { + logger.warning("Option freq_info_dl not present"); + return false; + } if (dl_cfg_common.init_dl_bwp.pdsch_cfg_common_present) { if (dl_cfg_common.init_dl_bwp.pdsch_cfg_common.type() == asn1::rrc_nr::setup_release_c::types_opts::setup) { @@ -1031,8 +1040,13 @@ bool rrc_nr::apply_sp_cell_cfg(const sp_cell_cfg_s& sp_cell_cfg) if (sp_cell_cfg.recfg_with_sync_present) { const recfg_with_sync_s& recfg_with_sync = sp_cell_cfg.recfg_with_sync; mac->set_crnti(recfg_with_sync.new_ue_id); - // Common config if (recfg_with_sync.sp_cell_cfg_common_present) { + if (recfg_with_sync.sp_cell_cfg_common.pci_present) { + phy_cfg.carrier.pci = recfg_with_sync.sp_cell_cfg_common.pci; + } else { + logger.warning("Option PCI not present"); + return false; + } if (recfg_with_sync.sp_cell_cfg_common.ul_cfg_common_present) { if (apply_ul_common_cfg(recfg_with_sync.sp_cell_cfg_common.ul_cfg_common) == false) { return false;