SRS configured using the UE_Capability_nr
This commit is contained in:
@@ -1062,24 +1062,58 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
|||||||
NR_ServingCellConfigCommon_t *scc = configuration ? configuration->scc : NULL;
|
NR_ServingCellConfigCommon_t *scc = configuration ? configuration->scc : NULL;
|
||||||
|
|
||||||
if(scc) {
|
if(scc) {
|
||||||
int curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,MAX_BWP_SIZE);
|
|
||||||
|
int curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
NR_UplinkConfig_t *uplinkConfig = SpCellConfig && SpCellConfig->spCellConfigDedicated ? SpCellConfig->spCellConfigDedicated->uplinkConfig : NULL;
|
NR_UplinkConfig_t *uplinkConfig = SpCellConfig && SpCellConfig->spCellConfigDedicated ? SpCellConfig->spCellConfigDedicated->uplinkConfig : NULL;
|
||||||
|
|
||||||
|
uint8_t ul_max_layers = 1;
|
||||||
|
if (uecap &&
|
||||||
|
uecap->featureSets &&
|
||||||
|
uecap->featureSets->featureSetsUplinkPerCC &&
|
||||||
|
uecap->featureSets->featureSetsUplinkPerCC->list.count > 0) {
|
||||||
|
NR_FeatureSetUplinkPerCC_t *ul_feature_setup_per_cc = uecap->featureSets->featureSetsUplinkPerCC->list.array[0];
|
||||||
|
if (ul_feature_setup_per_cc->mimo_CB_PUSCH->maxNumberMIMO_LayersCB_PUSCH) {
|
||||||
|
switch (*ul_feature_setup_per_cc->mimo_CB_PUSCH->maxNumberMIMO_LayersCB_PUSCH) {
|
||||||
|
case NR_MIMO_LayersUL_twoLayers:
|
||||||
|
ul_max_layers = 2;
|
||||||
|
break;
|
||||||
|
case NR_MIMO_LayersUL_fourLayers:
|
||||||
|
ul_max_layers = 4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ul_max_layers = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ul_max_layers = min(ul_max_layers, configuration->pusch_AntennaPorts);
|
||||||
|
if (uplinkConfig->initialUplinkBWP->pusch_Config) {
|
||||||
|
NR_PUSCH_Config_t *pusch_Config = uplinkConfig->initialUplinkBWP->pusch_Config->choice.setup;
|
||||||
|
if (pusch_Config->maxRank == NULL) {
|
||||||
|
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
||||||
|
}
|
||||||
|
*pusch_Config->maxRank = ul_max_layers;
|
||||||
|
}
|
||||||
|
if (uplinkConfig->pusch_ServingCellConfig == NULL) {
|
||||||
|
uplinkConfig->pusch_ServingCellConfig = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig));
|
||||||
|
uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
||||||
|
uplinkConfig->pusch_ServingCellConfig->choice.setup = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup));
|
||||||
|
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1 = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1));
|
||||||
|
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers));
|
||||||
|
}
|
||||||
|
*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers = ul_max_layers;
|
||||||
|
}
|
||||||
|
|
||||||
long maxMIMO_Layers = uplinkConfig &&
|
long maxMIMO_Layers = uplinkConfig &&
|
||||||
uplinkConfig->pusch_ServingCellConfig &&
|
uplinkConfig->pusch_ServingCellConfig &&
|
||||||
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1 &&
|
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1 &&
|
||||||
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers ?
|
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers ?
|
||||||
*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers : 1;
|
*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers : 1;
|
||||||
// SRS configuration
|
|
||||||
if (configuration->do_SRS &&
|
// UL and SRS configuration
|
||||||
SpCellConfig &&
|
if (configuration->do_SRS && uplinkConfig && uplinkConfig->initialUplinkBWP) {
|
||||||
SpCellConfig->spCellConfigDedicated &&
|
if (!uplinkConfig->initialUplinkBWP->srs_Config) {
|
||||||
SpCellConfig->spCellConfigDedicated->uplinkConfig &&
|
uplinkConfig->initialUplinkBWP->srs_Config = calloc(1, sizeof(*uplinkConfig->initialUplinkBWP->srs_Config));
|
||||||
SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP) {
|
|
||||||
if (!SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config) {
|
|
||||||
SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config =
|
|
||||||
calloc(1,sizeof(*SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config));
|
|
||||||
}
|
}
|
||||||
config_srs(SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config,
|
config_srs(uplinkConfig->initialUplinkBWP->srs_Config,
|
||||||
uecap,
|
uecap,
|
||||||
curr_bwp,
|
curr_bwp,
|
||||||
uid,
|
uid,
|
||||||
@@ -1093,7 +1127,7 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
|||||||
set_dl_mcs_table(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.subcarrierSpacing,
|
set_dl_mcs_table(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.subcarrierSpacing,
|
||||||
configuration->force_256qam_off ? NULL : uecap, bwp_Dedicated, scc);
|
configuration->force_256qam_off ? NULL : uecap, bwp_Dedicated, scc);
|
||||||
struct NR_ServingCellConfig__downlinkBWP_ToAddModList *DL_BWP_list = SpCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList;
|
struct NR_ServingCellConfig__downlinkBWP_ToAddModList *DL_BWP_list = SpCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList;
|
||||||
struct NR_UplinkConfig__uplinkBWP_ToAddModList *UL_BWP_list = SpCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList;
|
struct NR_UplinkConfig__uplinkBWP_ToAddModList *UL_BWP_list = uplinkConfig->uplinkBWP_ToAddModList;
|
||||||
if (DL_BWP_list) {
|
if (DL_BWP_list) {
|
||||||
for (int i=0; i<DL_BWP_list->list.count; i++){
|
for (int i=0; i<DL_BWP_list->list.count; i++){
|
||||||
NR_BWP_Downlink_t *bwp = DL_BWP_list->list.array[i];
|
NR_BWP_Downlink_t *bwp = DL_BWP_list->list.array[i];
|
||||||
@@ -1101,10 +1135,17 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
|||||||
set_dl_mcs_table(scs, configuration->force_256qam_off ? NULL : uecap, bwp->bwp_Dedicated, scc);
|
set_dl_mcs_table(scs, configuration->force_256qam_off ? NULL : uecap, bwp->bwp_Dedicated, scc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (UL_BWP_list) {
|
if (configuration->do_SRS && UL_BWP_list) {
|
||||||
for (int i=0; i<UL_BWP_list->list.count; i++) {
|
for (int i=0; i<UL_BWP_list->list.count; i++) {
|
||||||
NR_BWP_Uplink_t *ul_bwp = UL_BWP_list->list.array[i];
|
NR_BWP_Uplink_t *ul_bwp = UL_BWP_list->list.array[i];
|
||||||
int bwp_size = NRRIV2BW(ul_bwp->bwp_Common->genericParameters.locationAndBandwidth,MAX_BWP_SIZE);
|
int bwp_size = NRRIV2BW(ul_bwp->bwp_Common->genericParameters.locationAndBandwidth,MAX_BWP_SIZE);
|
||||||
|
if (ul_bwp->bwp_Dedicated->pusch_Config) {
|
||||||
|
NR_PUSCH_Config_t *pusch_Config = ul_bwp->bwp_Dedicated->pusch_Config->choice.setup;
|
||||||
|
if (pusch_Config->maxRank == NULL) {
|
||||||
|
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
||||||
|
}
|
||||||
|
*pusch_Config->maxRank = ul_max_layers;
|
||||||
|
}
|
||||||
config_srs(ul_bwp->bwp_Dedicated->srs_Config,
|
config_srs(ul_bwp->bwp_Dedicated->srs_Config,
|
||||||
uecap,
|
uecap,
|
||||||
bwp_size,
|
bwp_size,
|
||||||
|
|||||||
Reference in New Issue
Block a user