Fix scheduling SRS reception at gNB when there is Dedicated BWPs
This commit is contained in:
@@ -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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
|||||||
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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user