Merge remote-tracking branch 'origin/improv_TDD' into integration_2025_w07 (!3249)
Improvements in TDD configuration Including using the frame structure introduced in !2799 also at the UE
This commit is contained in:
@@ -395,7 +395,7 @@ void free_tdd_configuration_dedicated_nr(NR_DL_FRAME_PARMS *frame_parms) {
|
||||
|
||||
void do_tdd_config_sim(PHY_VARS_gNB *gNB, int mu)
|
||||
{
|
||||
frame_structure_t fs = {.is_tdd = true};
|
||||
frame_structure_t fs = {.frame_type = TDD};
|
||||
fs.numb_slots_frame = (1 << mu) * NR_NUMBER_OF_SUBFRAMES_PER_FRAME;
|
||||
fs.numb_period_frame = get_nb_periods_per_frame(gNB->gNB_config.tdd_table.tdd_period.value);
|
||||
fs.numb_slots_period = fs.numb_slots_frame / fs.numb_period_frame;
|
||||
|
||||
@@ -44,14 +44,8 @@ int nr_ue_slot_select(const fapi_nr_config_request_t *cfg, int nr_slot)
|
||||
if (cfg->cell_config.frame_duplex_type == FDD)
|
||||
return NR_UPLINK_SLOT | NR_DOWNLINK_SLOT;
|
||||
|
||||
int period = cfg->tdd_table_1.tdd_period_in_slots +
|
||||
(cfg->tdd_table_2 ? cfg->tdd_table_2->tdd_period_in_slots : 0);
|
||||
int rel_slot = nr_slot % period;
|
||||
const fapi_nr_tdd_table_t *tdd_table = &cfg->tdd_table_1;
|
||||
if (cfg->tdd_table_2 && rel_slot >= tdd_table->tdd_period_in_slots) {
|
||||
rel_slot -= tdd_table->tdd_period_in_slots;
|
||||
tdd_table = cfg->tdd_table_2;
|
||||
}
|
||||
const fapi_nr_tdd_table_t *tdd_table = &cfg->tdd_table;
|
||||
int rel_slot = nr_slot % tdd_table->tdd_period_in_slots;
|
||||
|
||||
if (tdd_table->max_tdd_periodicity_list == NULL) // this happens before receiving TDD configuration
|
||||
return NR_DOWNLINK_SLOT;
|
||||
|
||||
@@ -647,7 +647,11 @@ printf("%d\n", slot);
|
||||
|
||||
frame_structure_t frame_structure = {0};
|
||||
frame_type_t frame_type = TDD;
|
||||
config_frame_structure(mu, scc, get_tdd_period_idx(scc->tdd_UL_DL_ConfigurationCommon), frame_type, &frame_structure);
|
||||
config_frame_structure(mu,
|
||||
scc->tdd_UL_DL_ConfigurationCommon,
|
||||
get_tdd_period_idx(scc->tdd_UL_DL_ConfigurationCommon),
|
||||
frame_type,
|
||||
&frame_structure);
|
||||
AssertFatal(is_dl_slot(slot, &frame_structure), "The slot selected is not DL. Can't run DLSIM\n");
|
||||
|
||||
// TODO do a UECAP for phy-sim
|
||||
@@ -859,7 +863,7 @@ printf("%d\n", slot);
|
||||
|
||||
nr_l2_init_ue(1);
|
||||
UE_mac = get_mac_inst(0);
|
||||
ue_init_config_request(UE_mac, mu);
|
||||
ue_init_config_request(UE_mac, get_slots_per_frame_from_scs(mu));
|
||||
|
||||
UE->if_inst = nr_ue_if_module_init(0);
|
||||
UE->if_inst->scheduled_response = nr_ue_scheduled_response;
|
||||
|
||||
@@ -628,7 +628,11 @@ int main(int argc, char *argv[])
|
||||
|
||||
frame_structure_t frame_structure = {0};
|
||||
frame_type_t frame_type = TDD;
|
||||
config_frame_structure(mu, scc, get_tdd_period_idx(scc->tdd_UL_DL_ConfigurationCommon), frame_type, &frame_structure);
|
||||
config_frame_structure(mu,
|
||||
scc->tdd_UL_DL_ConfigurationCommon,
|
||||
get_tdd_period_idx(scc->tdd_UL_DL_ConfigurationCommon),
|
||||
frame_type,
|
||||
&frame_structure);
|
||||
AssertFatal(is_ul_slot(slot, &frame_structure), "The slot selected is not UL. Can't run ULSIM\n");
|
||||
|
||||
// TODO do a UECAP for phy-sim
|
||||
@@ -737,7 +741,7 @@ int main(int argc, char *argv[])
|
||||
nr_l2_init_ue(1);
|
||||
NR_UE_MAC_INST_t* UE_mac = get_mac_inst(0);
|
||||
|
||||
ue_init_config_request(UE_mac, mu);
|
||||
ue_init_config_request(UE_mac, get_slots_per_frame_from_scs(mu));
|
||||
|
||||
UE->if_inst = nr_ue_if_module_init(0);
|
||||
UE->if_inst->scheduled_response = nr_ue_scheduled_response;
|
||||
|
||||
Reference in New Issue
Block a user