Commit af95f834 authored by Roberto Louro Magueta's avatar Roberto Louro Magueta

Fix scheduling SRS reception at gNB when there is Dedicated BWPs

parent 5092eca8
...@@ -41,15 +41,16 @@ void nr_configure_srs(nfapi_nr_srs_pdu_t *srs_pdu, int module_id, int CC_id, int ...@@ -41,15 +41,16 @@ void nr_configure_srs(nfapi_nr_srs_pdu_t *srs_pdu, int module_id, int CC_id, int
NR_UE_info_t *UE_info = &nrmac->UE_info; NR_UE_info_t *UE_info = &nrmac->UE_info;
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id]; NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
NR_BWP_t ubwp = sched_ctrl->active_ubwp ? const NR_SIB1_t *sib1 = nrmac->common_channels[0].sib1 ? nrmac->common_channels[0].sib1->message.choice.c1->choice.systemInformationBlockType1 : NULL;
sched_ctrl->active_ubwp->bwp_Common->genericParameters : NR_BWP_t *genericParameters = get_ul_bwp_genericParameters(sched_ctrl->active_ubwp,
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters; scc,
sib1);
srs_pdu->rnti = UE_info->rnti[UE_id]; srs_pdu->rnti = UE_info->rnti[UE_id];
srs_pdu->handle = 0; srs_pdu->handle = 0;
srs_pdu->bwp_size = NRRIV2BW(ubwp.locationAndBandwidth, MAX_BWP_SIZE);; srs_pdu->bwp_size = NRRIV2BW(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);;
srs_pdu->bwp_start = NRRIV2PRBOFFSET(ubwp.locationAndBandwidth, MAX_BWP_SIZE);; srs_pdu->bwp_start = NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);;
srs_pdu->subcarrier_spacing = ubwp.subcarrierSpacing; srs_pdu->subcarrier_spacing = genericParameters->subcarrierSpacing;
srs_pdu->cyclic_prefix = 0; srs_pdu->cyclic_prefix = 0;
srs_pdu->num_ant_ports = srs_resource->nrofSRS_Ports; srs_pdu->num_ant_ports = srs_resource->nrofSRS_Ports;
srs_pdu->num_symbols = srs_resource->resourceMapping.nrofSymbols; srs_pdu->num_symbols = srs_resource->resourceMapping.nrofSymbols;
...@@ -131,13 +132,20 @@ void nr_schedule_srs(int module_id, frame_t frame) { ...@@ -131,13 +132,20 @@ void nr_schedule_srs(int module_id, frame_t frame) {
} }
NR_SRS_Config_t *srs_config = NULL; NR_SRS_Config_t *srs_config = NULL;
if (cg && if (sched_ctrl->active_ubwp) {
cg->spCellConfig && if (sched_ctrl->active_ubwp->bwp_Dedicated &&
cg->spCellConfig->spCellConfigDedicated && sched_ctrl->active_ubwp->bwp_Dedicated->srs_Config) {
cg->spCellConfig->spCellConfigDedicated->uplinkConfig && srs_config = sched_ctrl->active_ubwp->bwp_Dedicated->srs_Config->choice.setup;
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP) { }
} else if (cg &&
cg->spCellConfig &&
cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP) {
srs_config = cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config->choice.setup; srs_config = cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config->choice.setup;
} else { }
if (!srs_config) {
continue; continue;
} }
...@@ -167,14 +175,15 @@ void nr_schedule_srs(int module_id, frame_t frame) { ...@@ -167,14 +175,15 @@ void nr_schedule_srs(int module_id, frame_t frame) {
continue; continue;
} }
NR_BWP_t ubwp = sched_ctrl->active_ubwp ? const NR_SIB1_t *sib1 = nrmac->common_channels[0].sib1 ? nrmac->common_channels[0].sib1->message.choice.c1->choice.systemInformationBlockType1 : NULL;
sched_ctrl->active_ubwp->bwp_Common->genericParameters : NR_BWP_t *genericParameters = get_ul_bwp_genericParameters(sched_ctrl->active_ubwp,
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters; scc,
sib1);
uint16_t period = srs_period[srs_resource->resourceType.choice.periodic->periodicityAndOffset_p.present]; uint16_t period = srs_period[srs_resource->resourceType.choice.periodic->periodicityAndOffset_p.present];
uint16_t offset = get_nr_srs_offset(srs_resource->resourceType.choice.periodic->periodicityAndOffset_p); uint16_t offset = get_nr_srs_offset(srs_resource->resourceType.choice.periodic->periodicityAndOffset_p);
int n_slots_frame = nr_slots_per_frame[ubwp.subcarrierSpacing]; int n_slots_frame = nr_slots_per_frame[genericParameters->subcarrierSpacing];
// Check if UE will transmit the SRS in this frame // Check if UE will transmit the SRS in this frame
if ( ((frame - offset/n_slots_frame)*n_slots_frame)%period == 0) { if ( ((frame - offset/n_slots_frame)*n_slots_frame)%period == 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment