Skip to content

Commit 18792ba

Browse files
frankistcodebot
authored andcommitted
gnb: enable to option to set TDD pattern2
1 parent a5915bc commit 18792ba

File tree

4 files changed

+59
-15
lines changed

4 files changed

+59
-15
lines changed

apps/gnb/gnb_appconfig.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ struct prach_appconfig {
5151
optional<unsigned> prach_frequency_start;
5252
};
5353

54-
/// TDD configuration. See TS 38.331, \c TDD-UL-DL-Pattern.
55-
struct tdd_ul_dl_appconfig {
54+
/// TDD pattern configuration. See TS 38.331, \c TDD-UL-DL-Pattern.
55+
struct tdd_ul_dl_pattern_appconfig {
5656
/// Periodicity of the DL-UL pattern in Milliseconds. Values {0.5, 0.625, 1, 1.25, 2, 2.5, 5, 10}.
5757
float dl_ul_tx_period = 5.0F;
5858
/// Values: {0,...,maxNrofSlots=80}.
@@ -65,6 +65,12 @@ struct tdd_ul_dl_appconfig {
6565
unsigned nof_ul_symbols = 0;
6666
};
6767

68+
/// TDD configuration. See TS 38.331, \c TDD-UL-DL-ConfigCommon.
69+
struct tdd_ul_dl_appconfig {
70+
tdd_ul_dl_pattern_appconfig pattern1;
71+
optional<tdd_ul_dl_pattern_appconfig> pattern2;
72+
};
73+
6874
/// Paging related configuration. See TS 38.331, PCCH-Config.
6975
struct paging_appconfig {
7076
/// SearchSpace to use for Paging. Values {0, 1}.

apps/gnb/gnb_appconfig_cli11_schema.cpp

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -489,29 +489,44 @@ static void configure_cli11_amplitude_control_args(CLI::App& app, amplitude_cont
489489
->capture_default_str();
490490
}
491491

492-
static void configure_cli11_tdd_ul_dl_args(CLI::App& app, tdd_ul_dl_appconfig& tdd_ul_dl_params)
492+
static void configure_cli11_tdd_ul_dl_pattern_args(CLI::App& app, tdd_ul_dl_pattern_appconfig& pattern_params)
493493
{
494-
app.add_option("--dl_ul_tx_period", tdd_ul_dl_params.dl_ul_tx_period, "TDD pattern periodicity in milliseconds")
494+
app.add_option("--dl_ul_tx_period", pattern_params.dl_ul_tx_period, "TDD pattern periodicity in milliseconds")
495495
->capture_default_str()
496496
->check(CLI::Range(0.0, 10.0));
497-
app.add_option("--nof_dl_slots", tdd_ul_dl_params.nof_dl_slots, "TDD pattern nof. consecutive full DL slots")
497+
app.add_option("--nof_dl_slots", pattern_params.nof_dl_slots, "TDD pattern nof. consecutive full DL slots")
498498
->capture_default_str()
499499
->check(CLI::Range(0, 80));
500500
app.add_option("--nof_dl_symbols",
501-
tdd_ul_dl_params.nof_dl_symbols,
501+
pattern_params.nof_dl_symbols,
502502
"TDD pattern nof. DL symbols at the beginning of the slot following full DL slots")
503503
->capture_default_str()
504504
->check(CLI::Range(0, 13));
505-
app.add_option("--nof_ul_slots", tdd_ul_dl_params.nof_ul_slots, "TDD pattern nof. consecutive full UL slots")
505+
app.add_option("--nof_ul_slots", pattern_params.nof_ul_slots, "TDD pattern nof. consecutive full UL slots")
506506
->capture_default_str()
507507
->check(CLI::Range(0, 80));
508508
app.add_option("--nof_ul_symbols",
509-
tdd_ul_dl_params.nof_ul_symbols,
509+
pattern_params.nof_ul_symbols,
510510
"TDD pattern nof. UL symbols at the end of the slot preceding the first full UL slot")
511511
->capture_default_str()
512512
->check(CLI::Range(0, 13));
513513
}
514514

515+
static void configure_cli11_tdd_ul_dl_args(CLI::App& app, tdd_ul_dl_appconfig& tdd_ul_dl_params)
516+
{
517+
configure_cli11_tdd_ul_dl_pattern_args(app, tdd_ul_dl_params.pattern1);
518+
CLI::App* pattern2_subcmd =
519+
app.add_subcommand("pattern2", "TDD UL DL pattern2 configuration parameters")->configurable();
520+
configure_cli11_tdd_ul_dl_pattern_args(*pattern2_subcmd, tdd_ul_dl_params.pattern2.emplace());
521+
auto tdd_ul_dl_verify_callback = [&]() {
522+
CLI::App* tdd_cfg = app.get_subcommand("pattern2");
523+
if (tdd_cfg->count_all() == 0) {
524+
tdd_ul_dl_params.pattern2.reset();
525+
}
526+
};
527+
app.callback(tdd_ul_dl_verify_callback);
528+
}
529+
515530
static void configure_cli11_paging_args(CLI::App& app, paging_appconfig& pg_params)
516531
{
517532
app.add_option("--pg_search_space_id", pg_params.paging_search_space_id, "SearchSpace to use for Paging")

apps/gnb/gnb_appconfig_translators.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,21 @@ std::vector<du_cell_config> srsran::generate_du_cell_config(const gnb_appconfig&
225225
const auto& tdd_cfg = config.common_cell_cfg.tdd_ul_dl_cfg.value();
226226

227227
out_cell.tdd_ul_dl_cfg_common.value().pattern1.dl_ul_tx_period_nof_slots = (unsigned)std::round(
228-
tdd_cfg.dl_ul_tx_period * get_nof_slots_per_subframe(out_cell.tdd_ul_dl_cfg_common.value().ref_scs));
229-
out_cell.tdd_ul_dl_cfg_common.value().pattern1.nof_dl_slots = tdd_cfg.nof_dl_slots;
230-
out_cell.tdd_ul_dl_cfg_common.value().pattern1.nof_dl_symbols = tdd_cfg.nof_dl_symbols;
231-
out_cell.tdd_ul_dl_cfg_common.value().pattern1.nof_ul_slots = tdd_cfg.nof_ul_slots;
232-
out_cell.tdd_ul_dl_cfg_common.value().pattern1.nof_ul_symbols = tdd_cfg.nof_ul_symbols;
228+
tdd_cfg.pattern1.dl_ul_tx_period * get_nof_slots_per_subframe(out_cell.tdd_ul_dl_cfg_common.value().ref_scs));
229+
out_cell.tdd_ul_dl_cfg_common.value().pattern1.nof_dl_slots = tdd_cfg.pattern1.nof_dl_slots;
230+
out_cell.tdd_ul_dl_cfg_common.value().pattern1.nof_dl_symbols = tdd_cfg.pattern1.nof_dl_symbols;
231+
out_cell.tdd_ul_dl_cfg_common.value().pattern1.nof_ul_slots = tdd_cfg.pattern1.nof_ul_slots;
232+
out_cell.tdd_ul_dl_cfg_common.value().pattern1.nof_ul_symbols = tdd_cfg.pattern1.nof_ul_symbols;
233+
234+
if (tdd_cfg.pattern2.has_value()) {
235+
out_cell.tdd_ul_dl_cfg_common.value().pattern2->dl_ul_tx_period_nof_slots =
236+
(unsigned)std::round(tdd_cfg.pattern2->dl_ul_tx_period *
237+
get_nof_slots_per_subframe(out_cell.tdd_ul_dl_cfg_common.value().ref_scs));
238+
out_cell.tdd_ul_dl_cfg_common.value().pattern2->nof_dl_slots = tdd_cfg.pattern2->nof_dl_slots;
239+
out_cell.tdd_ul_dl_cfg_common.value().pattern2->nof_dl_symbols = tdd_cfg.pattern2->nof_dl_symbols;
240+
out_cell.tdd_ul_dl_cfg_common.value().pattern2->nof_ul_slots = tdd_cfg.pattern2->nof_ul_slots;
241+
out_cell.tdd_ul_dl_cfg_common.value().pattern2->nof_ul_symbols = tdd_cfg.pattern2->nof_ul_symbols;
242+
}
233243
}
234244

235245
// PCCH-Config.

apps/gnb/gnb_appconfig_validators.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ static bool validate_prach_cell_app_config(const prach_appconfig& config, nr_ban
168168
return true;
169169
}
170170

171-
/// Validates the given TDD UL DL pattern application configuration. Returns true on success, otherwise false.
172-
static bool validate_tdd_ul_dl_appconfig(const tdd_ul_dl_appconfig& config, subcarrier_spacing common_scs)
171+
static bool validate_tdd_ul_dl_pattern_appconfig(const tdd_ul_dl_pattern_appconfig& config,
172+
subcarrier_spacing common_scs)
173173
{
174174
// NOTE: TDD pattern is assumed to use common SCS as reference SCS.
175175
if (common_scs > subcarrier_spacing::kHz60) {
@@ -184,6 +184,7 @@ static bool validate_tdd_ul_dl_appconfig(const tdd_ul_dl_appconfig& config, subc
184184
config.dl_ul_tx_period);
185185
return false;
186186
}
187+
187188
// See TS 38.213, clause 11.1.
188189
if (config.dl_ul_tx_period == 0.625F and common_scs != subcarrier_spacing::kHz120) {
189190
fmt::print("Invalid reference SCS={} for TDD pattern 1. Must be 120 kHz when using "
@@ -213,6 +214,18 @@ static bool validate_tdd_ul_dl_appconfig(const tdd_ul_dl_appconfig& config, subc
213214
return true;
214215
}
215216

217+
/// Validates the given TDD UL DL pattern application configuration. Returns true on success, otherwise false.
218+
static bool validate_tdd_ul_dl_appconfig(const tdd_ul_dl_appconfig& config, subcarrier_spacing common_scs)
219+
{
220+
if (not validate_tdd_ul_dl_pattern_appconfig(config.pattern1, common_scs)) {
221+
return false;
222+
}
223+
if (config.pattern2.has_value() and not validate_tdd_ul_dl_pattern_appconfig(config.pattern2.value(), common_scs)) {
224+
return false;
225+
}
226+
return true;
227+
}
228+
216229
static bool validate_dl_arfcn_and_band(const base_cell_appconfig& config)
217230
{
218231
nr_band band = config.band.has_value() ? config.band.value() : band_helper::get_band_from_dl_arfcn(config.dl_arfcn);

0 commit comments

Comments
 (0)