gNB & nrUE: Added multiple PRS resources scheduling

This commit is contained in:
Sagar Parsawar
2022-05-06 18:03:48 +02:00
parent 8b9c76be88
commit 4e86919060
15 changed files with 319 additions and 188 deletions
+66 -30
View File
@@ -605,7 +605,7 @@ void RCconfig_nr_flexran()
void RCconfig_nr_prs(void)
{
uint16_t j;
uint16_t j = 0, k = 0;
paramdef_t PRS_Params[] = PRS_PARAMS_DESC;
paramlist_def_t PRS_ParamList = {CONFIG_STRING_PRS_CONFIG,NULL,0};
@@ -619,7 +619,6 @@ void RCconfig_nr_prs(void)
config_getlist( &PRS_ParamList,PRS_Params,sizeof(PRS_Params)/sizeof(paramdef_t), NULL);
if (PRS_ParamList.numelt > 0) {
for (j = 0; j < RC.nb_nr_L1_inst; j++) {
if (RC.gNB[j] == NULL) {
@@ -629,35 +628,72 @@ void RCconfig_nr_prs(void)
RC.gNB[j]->Mod_id = j;
}
RC.gNB[j]->prs_cfg.PRSResourceSetPeriod[0] = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD0].uptr);
RC.gNB[j]->prs_cfg.PRSResourceSetPeriod[1] = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD1].uptr);
RC.gNB[j]->prs_cfg.SymbolStart = *(PRS_ParamList.paramarray[j][PRS_SYMBOL_START].uptr);
RC.gNB[j]->prs_cfg.NumPRSSymbols = *(PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS].uptr);
RC.gNB[j]->prs_cfg.NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr);
RC.gNB[j]->prs_cfg.RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr);
RC.gNB[j]->prs_cfg.CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr);
RC.gNB[j]->prs_cfg.REOffset = *(PRS_ParamList.paramarray[j][PRS_RE_OFFSET].uptr);
RC.gNB[j]->prs_cfg.PRSResourceOffset = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET].uptr);
RC.gNB[j]->prs_cfg.PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr);
RC.gNB[j]->prs_cfg.PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr);
RC.gNB[j]->prs_cfg.NPRSID = *(PRS_ParamList.paramarray[j][PRS_ID].uptr);
RC.gNB[j]->prs_vars.NumPRSResources = *(PRS_ParamList.paramarray[j][NUM_PRS_RESOURCES].uptr);
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
{
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceSetPeriod[0] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[0];
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceSetPeriod[1] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[1];
// per PRS resources parameters
RC.gNB[j]->prs_vars.prs_cfg[k].SymbolStart = PRS_ParamList.paramarray[j][PRS_SYMBOL_START_LIST].uptr[k];
RC.gNB[j]->prs_vars.prs_cfg[k].NumPRSSymbols = PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS_LIST].uptr[k];
RC.gNB[j]->prs_vars.prs_cfg[k].REOffset = PRS_ParamList.paramarray[j][PRS_RE_OFFSET_LIST].uptr[k];
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceOffset = PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET_LIST].uptr[k];
RC.gNB[j]->prs_vars.prs_cfg[k].NPRSID = PRS_ParamList.paramarray[j][PRS_ID_LIST].uptr[k];
// Common parameters to all PRS resources
RC.gNB[j]->prs_vars.prs_cfg[k].NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr);
RC.gNB[j]->prs_vars.prs_cfg[k].RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr);
RC.gNB[j]->prs_vars.prs_cfg[k].CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr);
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr);
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr);
RC.gNB[j]->prs_vars.prs_cfg[k].MutingBitRepetition = *(PRS_ParamList.paramarray[j][PRS_MUTING_BIT_REPETITION].uptr);
for (int l = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].numelt; l++)
RC.gNB[j]->prs_vars.prs_cfg[k].MutingPattern1[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].uptr[l];
for (int l = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].numelt; l++)
RC.gNB[j]->prs_vars.prs_cfg[k].MutingPattern2[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].uptr[l];
LOG_I(PHY, "--------------------------\n");
LOG_I(PHY, "PRS Config for gNB_ID %d\n", j);
LOG_I(PHY, "--------------------------\n");
LOG_I(PHY, "PRSResourceSetPeriod0 %d\n", RC.gNB[j]->prs_cfg.PRSResourceSetPeriod[0]);
LOG_I(PHY, "PRSResourceSetPeriod1 %d\n", RC.gNB[j]->prs_cfg.PRSResourceSetPeriod[1]);
LOG_I(PHY, "SymbolStart %d\n", RC.gNB[j]->prs_cfg.SymbolStart);
LOG_I(PHY, "NumPRSSymbols %d\n", RC.gNB[j]->prs_cfg.NumPRSSymbols);
LOG_I(PHY, "NumRB %d\n", RC.gNB[j]->prs_cfg.NumRB);
LOG_I(PHY, "RBOffset %d\n", RC.gNB[j]->prs_cfg.RBOffset);
LOG_I(PHY, "CombSize %d\n", RC.gNB[j]->prs_cfg.CombSize);
LOG_I(PHY, "REOffset %d\n", RC.gNB[j]->prs_cfg.REOffset);
LOG_I(PHY, "PRSResourceOffset %d\n", RC.gNB[j]->prs_cfg.PRSResourceOffset);
LOG_I(PHY, "PRSResourceRepetition %d\n", RC.gNB[j]->prs_cfg.PRSResourceRepetition);
LOG_I(PHY, "PRSResourceTimeGap %d\n", RC.gNB[j]->prs_cfg.PRSResourceTimeGap);
LOG_I(PHY, "NPRS_ID %d\n", RC.gNB[j]->prs_cfg.NPRSID);
LOG_I(PHY, "--------------------------\n");
} // for k
k = 0;
LOG_I(PHY, "-----------------------------------------\n");
LOG_I(PHY, "PRS Config for gNB_id %d @ %p\n", j, &RC.gNB[j]->prs_vars.prs_cfg[k]);
LOG_I(PHY, "-----------------------------------------\n");
LOG_I(PHY, "NumPRSResources \t%d\n", RC.gNB[j]->prs_vars.NumPRSResources);
LOG_I(PHY, "PRSResourceSetPeriod \t[%d, %d]\n", RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceSetPeriod[0], RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceSetPeriod[1]);
LOG_I(PHY, "NumRB \t\t\t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].NumRB);
LOG_I(PHY, "RBOffset \t\t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].RBOffset);
LOG_I(PHY, "CombSize \t\t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].CombSize);
LOG_I(PHY, "PRSResourceRepetition \t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceRepetition);
LOG_I(PHY, "PRSResourceTimeGap \t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceTimeGap);
LOG_I(PHY, "MutingBitRepetition \t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].MutingBitRepetition);
LOG_I(PHY, "SymbolStart \t\t[");
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].SymbolStart);
printf("\b\b]\n");
LOG_I(PHY, "NumPRSSymbols \t\t[");
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].NumPRSSymbols);
printf("\b\b]\n");
LOG_I(PHY, "REOffset \t\t[");
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].REOffset);
printf("\b\b]\n");
LOG_I(PHY, "PRSResourceOffset \t[");
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceOffset);
printf("\b\b]\n");
LOG_I(PHY, "NPRS_ID \t\t[");
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].NPRSID);
printf("\b\b]\n");
LOG_I(PHY, "MutingPattern1 \t\t[");
for (int l = 0, k = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].numelt; l++)
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].MutingPattern1[l]);
printf("\b\b]\n");
LOG_I(PHY, "MutingPattern2 \t\t[");
for (int l = 0, k = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].numelt; l++)
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].MutingPattern2[l]);
printf("\b\b]\n");
LOG_I(PHY, "-----------------------------------------\n");
} // for j
}
else
+37 -27
View File
@@ -38,6 +38,7 @@
/* PRS configuration section names */
#define CONFIG_STRING_PRS_LIST "PRSs"
#define CONFIG_STRING_PRS_CONFIG "prs_config"
#define CONFIG_STRING_MQTT_CONFIG "mqtt_config"
/* Global parameters */
@@ -55,18 +56,21 @@
/* PRS configuration parameters names */
#define CONFIG_STRING_GNB_ID "gNB_id"
#define CONFIG_STRING_PRS_RESOURCE_SET_PERIOD0 "PRSResourceSetPeriod0"
#define CONFIG_STRING_PRS_RESOURCE_SET_PERIOD1 "PRSResourceSetPeriod1"
#define CONFIG_STRING_PRS_SYMBOL_START "SymbolStart"
#define CONFIG_STRING_PRS_NUM_SYMBOLS "NumPRSSymbols"
#define CONFIG_STRING_NUM_PRS_RESOURCES "NumPRSResources"
#define CONFIG_STRING_PRS_RESOURCE_SET_PERIOD_LIST "PRSResourceSetPeriod"
#define CONFIG_STRING_PRS_SYMBOL_START_LIST "SymbolStart"
#define CONFIG_STRING_PRS_NUM_SYMBOLS_LIST "NumPRSSymbols"
#define CONFIG_STRING_PRS_NUM_RB "NumRB"
#define CONFIG_STRING_PRS_RB_OFFSET "RBOffset"
#define CONFIG_STRING_PRS_COMB_SIZE "CombSize"
#define CONFIG_STRING_PRS_RE_OFFSET "REOffset"
#define CONFIG_STRING_PRS_RESOURCE_OFFSET "PRSResourceOffset"
#define CONFIG_STRING_PRS_RE_OFFSET_LIST "REOffset"
#define CONFIG_STRING_PRS_RESOURCE_OFFSET_LIST "PRSResourceOffset"
#define CONFIG_STRING_PRS_RESOURCE_REPETITION "PRSResourceRepetition"
#define CONFIG_STRING_PRS_RESOURCE_TIME_GAP "PRSResourceTimeGap"
#define CONFIG_STRING_PRS_ID "NPRS_ID"
#define CONFIG_STRING_PRS_ID_LIST "NPRS_ID"
#define CONFIG_STRING_PRS_MUTING_PATTERN1_LIST "MutingPattern1"
#define CONFIG_STRING_PRS_MUTING_PATTERN2_LIST "MutingPattern2"
#define CONFIG_STRING_PRS_MUTING_BIT_REPETITION "MutingBitRepetition"
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
@@ -74,34 +78,40 @@
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
#define PRS_PARAMS_DESC { \
{CONFIG_STRING_GNB_ID, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RESOURCE_SET_PERIOD0, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RESOURCE_SET_PERIOD1, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_SYMBOL_START, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_NUM_SYMBOLS, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_NUM_RB, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RB_OFFSET, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_COMB_SIZE, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RE_OFFSET, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RESOURCE_OFFSET, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RESOURCE_REPETITION, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RESOURCE_TIME_GAP, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_ID, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \
{CONFIG_STRING_GNB_ID, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_NUM_PRS_RESOURCES, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RESOURCE_SET_PERIOD_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
{CONFIG_STRING_PRS_SYMBOL_START_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
{CONFIG_STRING_PRS_NUM_SYMBOLS_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
{CONFIG_STRING_PRS_NUM_RB, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RB_OFFSET, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_COMB_SIZE, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RE_OFFSET_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
{CONFIG_STRING_PRS_RESOURCE_OFFSET_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
{CONFIG_STRING_PRS_RESOURCE_REPETITION, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_RESOURCE_TIME_GAP, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
{CONFIG_STRING_PRS_ID_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
{CONFIG_STRING_PRS_MUTING_PATTERN1_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
{CONFIG_STRING_PRS_MUTING_PATTERN2_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
{CONFIG_STRING_PRS_MUTING_BIT_REPETITION, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \
}
#define PRS_GNB_ID 0
#define PRS_RESOURCE_SET_PERIOD0 1
#define PRS_RESOURCE_SET_PERIOD1 2
#define PRS_SYMBOL_START 3
#define PRS_NUM_SYMBOLS 4
#define NUM_PRS_RESOURCES 1
#define PRS_RESOURCE_SET_PERIOD_LIST 2
#define PRS_SYMBOL_START_LIST 3
#define PRS_NUM_SYMBOLS_LIST 4
#define PRS_NUM_RB 5
#define PRS_RB_OFFSET 6
#define PRS_COMB_SIZE 7
#define PRS_RE_OFFSET 8
#define PRS_RESOURCE_OFFSET 9
#define PRS_RE_OFFSET_LIST 8
#define PRS_RESOURCE_OFFSET_LIST 9
#define PRS_RESOURCE_REPETITION 10
#define PRS_RESOURCE_TIME_GAP 11
#define PRS_ID 12
#define PRS_ID_LIST 12
#define PRS_MUTING_PATTERN1_LIST 13
#define PRS_MUTING_PATTERN2_LIST 14
#define PRS_MUTING_BIT_REPETITION 15
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
#endif
+81 -39
View File
@@ -1278,7 +1278,7 @@ void RCconfig_nr_ue_L1(void) {
void RCconfig_nrUE_prs(void *cfg)
{
int j = 0, gNB_id = 0, prs_start = 0, prs_end = 0;
int j = 0, k = 0, gNB_id = 0, prs_start = 0, prs_end = 0;
char aprefix[MAX_OPTNAME_SIZE*2 + 8];
PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)cfg;
@@ -1298,45 +1298,86 @@ void RCconfig_nrUE_prs(void *cfg)
if (PRS_ParamList.numelt > 0) {
for (j = 0; j < PRS_ParamList.numelt; j++) {
gNB_id = *(PRS_ParamList.paramarray[j][PRS_GNB_ID].uptr);
ue->prs_vars[gNB_id]->prs_cfg.PRSResourceSetPeriod[0] = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD0].uptr);
ue->prs_vars[gNB_id]->prs_cfg.PRSResourceSetPeriod[1] = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD1].uptr);
ue->prs_vars[gNB_id]->prs_cfg.SymbolStart = *(PRS_ParamList.paramarray[j][PRS_SYMBOL_START].uptr);
ue->prs_vars[gNB_id]->prs_cfg.NumPRSSymbols = *(PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS].uptr);
ue->prs_vars[gNB_id]->prs_cfg.NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr);
ue->prs_vars[gNB_id]->prs_cfg.RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr);
ue->prs_vars[gNB_id]->prs_cfg.CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr);
ue->prs_vars[gNB_id]->prs_cfg.REOffset = *(PRS_ParamList.paramarray[j][PRS_RE_OFFSET].uptr);
ue->prs_vars[gNB_id]->prs_cfg.PRSResourceOffset = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET].uptr);
ue->prs_vars[gNB_id]->prs_cfg.PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr);
ue->prs_vars[gNB_id]->prs_cfg.PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr);
ue->prs_vars[gNB_id]->prs_cfg.NPRSID = *(PRS_ParamList.paramarray[j][PRS_ID].uptr);
if(gNB_id==0)
gNB_id = *(PRS_ParamList.paramarray[j][PRS_GNB_ID].uptr);
if(gNB_id != i) gNB_id = i; // force gNB_id to avoid mismatch
ue->prs_vars[gNB_id]->NumPRSResources = *(PRS_ParamList.paramarray[j][NUM_PRS_RESOURCES].uptr);
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
{
prs_start = ue->prs_vars[gNB_id]->prs_cfg.SymbolStart;
prs_end = ue->prs_vars[gNB_id]->prs_cfg.SymbolStart+ue->prs_vars[gNB_id]->prs_cfg.NumPRSSymbols;
}
else
{
prs_start = MIN((prs_start), (ue->prs_vars[gNB_id]->prs_cfg.SymbolStart));
prs_end = MAX((prs_end), (ue->prs_vars[gNB_id]->prs_cfg.SymbolStart+ue->prs_vars[gNB_id]->prs_cfg.NumPRSSymbols));
}
LOG_I(PHY, "--------------------------\n");
LOG_I(PHY, "PRS Config for gNB_id %d @ %p\n", gNB_id, &ue->prs_vars[gNB_id]->prs_cfg);
LOG_I(PHY, "--------------------------\n");
LOG_I(PHY, "PRSResourceSetPeriod0 %d\n", ue->prs_vars[gNB_id]->prs_cfg.PRSResourceSetPeriod[0]);
LOG_I(PHY, "PRSResourceSetPeriod1 %d\n", ue->prs_vars[gNB_id]->prs_cfg.PRSResourceSetPeriod[1]);
LOG_I(PHY, "SymbolStart %d\n", ue->prs_vars[gNB_id]->prs_cfg.SymbolStart);
LOG_I(PHY, "NumPRSSymbols %d\n", ue->prs_vars[gNB_id]->prs_cfg.NumPRSSymbols);
LOG_I(PHY, "NumRB %d\n", ue->prs_vars[gNB_id]->prs_cfg.NumRB);
LOG_I(PHY, "RBOffset %d\n", ue->prs_vars[gNB_id]->prs_cfg.RBOffset);
LOG_I(PHY, "CombSize %d\n", ue->prs_vars[gNB_id]->prs_cfg.CombSize);
LOG_I(PHY, "REOffset %d\n", ue->prs_vars[gNB_id]->prs_cfg.REOffset);
LOG_I(PHY, "PRSResourceOffset %d\n", ue->prs_vars[gNB_id]->prs_cfg.PRSResourceOffset);
LOG_I(PHY, "PRSResourceRepetition %d\n", ue->prs_vars[gNB_id]->prs_cfg.PRSResourceRepetition);
LOG_I(PHY, "PRSResourceTimeGap %d\n", ue->prs_vars[gNB_id]->prs_cfg.PRSResourceTimeGap);
LOG_I(PHY, "NPRS_ID %d\n", ue->prs_vars[gNB_id]->prs_cfg.NPRSID);
LOG_I(PHY, "--------------------------\n");
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceSetPeriod[0] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[0];
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceSetPeriod[1] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[1];
// per PRS resources parameters
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.SymbolStart = PRS_ParamList.paramarray[j][PRS_SYMBOL_START_LIST].uptr[k];
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumPRSSymbols = PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS_LIST].uptr[k];
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.REOffset = PRS_ParamList.paramarray[j][PRS_RE_OFFSET_LIST].uptr[k];
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NPRSID = PRS_ParamList.paramarray[j][PRS_ID_LIST].uptr[k];
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceOffset = PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET_LIST].uptr[k];
// Common parameters to all PRS resources
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr);
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr);
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr);
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr);
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr);
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingBitRepetition = *(PRS_ParamList.paramarray[j][PRS_MUTING_BIT_REPETITION].uptr);
for (int l = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].numelt; l++)
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingPattern1[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].uptr[l];
for (int l = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].numelt; l++)
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingPattern2[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].uptr[l];
if(gNB_id==0 && k==0)
{
prs_start = ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.SymbolStart;
prs_end = (ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.SymbolStart+ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumPRSSymbols)%NR_SYMBOLS_PER_SLOT;
}
else
{
prs_start = MIN((prs_start), (ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.SymbolStart));
prs_end = MAX((prs_end), (ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.SymbolStart+ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumPRSSymbols)%NR_SYMBOLS_PER_SLOT);
}
} // for k
k = 0;
LOG_I(PHY, "-----------------------------------------\n");
LOG_I(PHY, "PRS Config for gNB_id %d @ %p\n", gNB_id, &ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg);
LOG_I(PHY, "-----------------------------------------\n");
LOG_I(PHY, "NumPRSResources \t%d\n", ue->prs_vars[gNB_id]->NumPRSResources);
LOG_I(PHY, "PRSResourceSetPeriod \t[%d, %d]\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceSetPeriod[0], ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceSetPeriod[1]);
LOG_I(PHY, "NumRB \t\t\t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumRB);
LOG_I(PHY, "RBOffset \t\t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.RBOffset);
LOG_I(PHY, "CombSize \t\t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.CombSize);
LOG_I(PHY, "PRSResourceRepetition \t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceRepetition);
LOG_I(PHY, "PRSResourceTimeGap \t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceTimeGap);
LOG_I(PHY, "MutingBitRepetition \t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingBitRepetition);
LOG_I(PHY, "SymbolStart \t\t[");
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.SymbolStart);
printf("\b\b]\n");
LOG_I(PHY, "NumPRSSymbols \t\t[");
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumPRSSymbols);
printf("\b\b]\n");
LOG_I(PHY, "REOffset \t\t[");
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.REOffset);
printf("\b\b]\n");
LOG_I(PHY, "PRSResourceOffset \t[");
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceOffset);
printf("\b\b]\n");
LOG_I(PHY, "NPRS_ID \t\t[");
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NPRSID);
printf("\b\b]\n");
LOG_I(PHY, "MutingPattern1 \t\t[");
for (int l = 0, k = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].numelt; l++)
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingPattern1[l]);
printf("\b\b]\n");
LOG_I(PHY, "MutingPattern2 \t\t[");
for (int l = 0, k = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].numelt; l++)
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingPattern2[l]);
printf("\b\b]\n");
LOG_I(PHY, "-----------------------------------------\n");
}
}
else
@@ -1347,4 +1388,5 @@ void RCconfig_nrUE_prs(void *cfg)
ue->prs_start_symb = prs_start;
ue->prs_end_symb = prs_end;
LOG_I(PHY, "prs_active_gNBs %d, prs_start_symb %d, prs_end_symb %d\n", ue->prs_active_gNBs, ue->prs_start_symb, ue->prs_end_symb);
AssertFatal(prs_start <= prs_end, "Invalid PRS symbol allocation, please check the start and end symbols\n");
}