From 3178abf37b60c75a47133a8f023686d68ed9e3eb Mon Sep 17 00:00:00 2001 From: Piotr Gawlowicz Date: Mon, 31 Oct 2022 14:11:13 +0100 Subject: [PATCH] =?UTF-8?q?add=20Intra=E2=80=91band=20Non-contiguous=20CA?= =?UTF-8?q?=20band=20combinations=20to=20UE=20caps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srsue/hdr/stack/rrc/rrc_config.h | 2 ++ srsue/src/stack/rrc/rrc.cc | 32 ++++++++++++++++++++++++++++++-- srsue/src/ue.cc | 2 ++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/srsue/hdr/stack/rrc/rrc_config.h b/srsue/hdr/stack/rrc/rrc_config.h index 1f66c3eb7..1a58e2adb 100644 --- a/srsue/hdr/stack/rrc/rrc_config.h +++ b/srsue/hdr/stack/rrc/rrc_config.h @@ -27,6 +27,8 @@ struct rrc_args_t { std::array supported_bands; std::vector supported_bands_nr; uint32_t nof_supported_bands; + uint32_t nof_lte_carriers; + uint32_t nof_nr_carriers; bool support_ca; int mbms_service_id; uint32_t mbms_service_port; diff --git a/srsue/src/stack/rrc/rrc.cc b/srsue/src/stack/rrc/rrc.cc index 64ababa23..ca652aec3 100644 --- a/srsue/src/stack/rrc/rrc.cc +++ b/srsue/src/stack/rrc/rrc.cc @@ -1992,8 +1992,11 @@ void rrc::handle_ue_capability_enquiry(const ue_cap_enquiry_s& enquiry) phy_layer_params_v1020.multi_cluster_pusch_within_cc_r10_present = false; phy_layer_params_v1020.non_contiguous_ul_ra_within_cc_list_r10_present = false; + rf_params_v1020_s rf_params; band_combination_params_r10_l combination_params; if (args.support_ca) { + // add Intra‑band Contiguous or Inter‑band Non-contiguous CA band combination + // note that nof_supported_bands=1 when all cells are in the same but non-contiguous band for (uint32_t k = 0; k < args.nof_supported_bands; k++) { ca_mimo_params_dl_r10_s ca_mimo_params_dl; ca_mimo_params_dl.ca_bw_class_dl_r10 = ca_bw_class_r10_e::f; @@ -2013,10 +2016,35 @@ void rrc::handle_ue_capability_enquiry(const ue_cap_enquiry_s& enquiry) combination_params.push_back(band_params); } } - - rf_params_v1020_s rf_params; rf_params.supported_band_combination_r10.push_back(combination_params); + // add all 2CC, 3CC and 4CC Intra‑band Non-contiguous CA band combinations + for (uint32_t k = 0; k < args.nof_supported_bands; k++) { + for (uint32_t j = 2; j <= args.nof_lte_carriers; j++) { + combination_params.clear(); + + ca_mimo_params_dl_r10_s ca_mimo_params_dl; + ca_mimo_params_dl.ca_bw_class_dl_r10 = ca_bw_class_r10_e::a; + ca_mimo_params_dl.supported_mimo_cap_dl_r10_present = false; + + ca_mimo_params_ul_r10_s ca_mimo_params_ul; + ca_mimo_params_ul.ca_bw_class_ul_r10 = ca_bw_class_r10_e::a; + ca_mimo_params_ul.supported_mimo_cap_ul_r10_present = false; + + band_params_r10_s band_params; + band_params.band_eutra_r10 = args.supported_bands[k]; + band_params.band_params_dl_r10_present = true; + band_params.band_params_dl_r10.push_back(ca_mimo_params_dl); + band_params.band_params_ul_r10_present = true; + band_params.band_params_ul_r10.push_back(ca_mimo_params_ul); + + for (uint32_t l = 0; l < j; l++) { + combination_params.push_back(band_params); + } + rf_params.supported_band_combination_r10.push_back(combination_params); + } + } + ue_eutra_cap_v1020_ies_s cap_v1020; if (args.ue_category >= 6 && args.ue_category <= 8) { cap_v1020.ue_category_v1020_present = true; diff --git a/srsue/src/ue.cc b/srsue/src/ue.cc index f51ee9e47..4d26b97c7 100644 --- a/srsue/src/ue.cc +++ b/srsue/src/ue.cc @@ -268,6 +268,8 @@ int ue::parse_args(const all_args_t& args_) 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 + args.stack.rrc.nof_lte_carriers = args.phy.nof_lte_carriers; + args.stack.rrc.nof_nr_carriers = args.phy.nof_nr_carriers; args.stack.rrc.support_ca = (args.phy.nof_lte_carriers > 1); // Make sure fix sampling rate is set for SA mode