From a292f1a251e3f377ff8d2274e6221c7350dfc335 Mon Sep 17 00:00:00 2001 From: Sagar Parsawar Date: Thu, 25 Aug 2022 23:01:30 +0200 Subject: [PATCH] Changes in prs config parsing function, added help string --- executables/nr-ue.c | 110 +++--- openair1/PHY/NR_REFSIG/nr_gold.c | 2 +- openair1/PHY/NR_REFSIG/nr_gold_ue.c | 2 +- openair1/PHY/NR_TRANSPORT/nr_prs.c | 22 +- .../PHY/NR_TRANSPORT/nr_transport_proto.h | 2 +- .../nr_dl_channel_estimation.c | 2 +- openair1/PHY/defs_gNB.h | 2 +- openair1/PHY/defs_nr_UE.h | 2 +- openair1/PHY/defs_nr_common.h | 22 +- openair2/COMMON/prs_nr_paramdef.h | 136 ++++++++ openair2/GNB_APP/gnb_config.c | 104 +++--- openair2/GNB_APP/prs_nr_paramdef.h | 117 ------- .../gnb.sa.band257.fr2.66PRB.usrpb210.conf | 317 ------------------ 13 files changed, 268 insertions(+), 572 deletions(-) create mode 100644 openair2/COMMON/prs_nr_paramdef.h delete mode 100644 openair2/GNB_APP/prs_nr_paramdef.h delete mode 100644 targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band257.fr2.66PRB.usrpb210.conf diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 853b51b897..f0d37d5f4c 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -34,7 +34,7 @@ #include "LAYER2/nr_pdcp/nr_pdcp_entity.h" #include "SCHED_NR_UE/pucch_uci_ue_nr.h" #include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" -#include "openair2/GNB_APP/prs_nr_paramdef.h" +#include "openair2/COMMON/prs_nr_paramdef.h" #include "PHY/NR_REFSIG/refsig_defs_ue.h" /* @@ -156,7 +156,9 @@ void RCconfig_nrUE_prs(void *cfg) { int j = 0, k = 0, gNB_id = 0; char aprefix[MAX_OPTNAME_SIZE*2 + 8]; - PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)cfg; + char str[7][100] = {'\0'}; int16_t n[7] = {0}; + PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)cfg; + prs_config_t *prs_config = NULL; paramlist_def_t gParamList = {CONFIG_STRING_PRS_LIST,NULL,0}; paramdef_t gParams[] = PRS_GLOBAL_PARAMS_DESC; @@ -167,7 +169,7 @@ void RCconfig_nrUE_prs(void *cfg) } else { - LOG_I(PHY,"%s configuration NOT found..!! Skipping configuring UE for the PRS reception\n", CONFIG_STRING_PRS_CONFIG); + LOG_E(PHY,"%s configuration NOT found..!! Skipped configuring UE for the PRS reception\n", CONFIG_STRING_PRS_CONFIG); } paramlist_def_t PRS_ParamList = {{0},NULL,0}; @@ -184,77 +186,73 @@ void RCconfig_nrUE_prs(void *cfg) gNB_id = *(PRS_ParamList.paramarray[j][PRS_GNB_ID].uptr); if(gNB_id != i) gNB_id = i; // force gNB_id to avoid mismatch + memset(n,0,sizeof(n)); 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++) { - 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]; + prs_config = &ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg; + prs_config->PRSResourceSetPeriod[0] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[0]; + prs_config->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]; + prs_config->SymbolStart = PRS_ParamList.paramarray[j][PRS_SYMBOL_START_LIST].uptr[k]; + prs_config->NumPRSSymbols = PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS_LIST].uptr[k]; + prs_config->REOffset = PRS_ParamList.paramarray[j][PRS_RE_OFFSET_LIST].uptr[k]; + prs_config->NPRSID = PRS_ParamList.paramarray[j][PRS_ID_LIST].uptr[k]; + prs_config->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); + prs_config->NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr); + prs_config->RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr); + prs_config->CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr); + prs_config->PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr); + prs_config->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); + prs_config->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]; + { + prs_config->MutingPattern1[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].uptr[l]; + if (k == 0) // print only for 0th resource + n[5] += snprintf(str[5]+n[5],sizeof(str[5]),"%d, ",prs_config->MutingPattern1[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]; + { + prs_config->MutingPattern2[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].uptr[l]; + if (k == 0) // print only for 0th resource + n[6] += snprintf(str[6]+n[6],sizeof(str[6]),"%d, ",prs_config->MutingPattern2[l]); + } + + // print to buffer + n[0] += snprintf(str[0]+n[0],sizeof(str[0]),"%d, ",prs_config->SymbolStart); + n[1] += snprintf(str[1]+n[1],sizeof(str[1]),"%d, ",prs_config->NumPRSSymbols); + n[2] += snprintf(str[2]+n[2],sizeof(str[2]),"%d, ",prs_config->REOffset); + n[3] += snprintf(str[3]+n[3],sizeof(str[3]),"%d, ",prs_config->PRSResourceOffset); + n[4] += snprintf(str[4]+n[4],sizeof(str[4]),"%d, ",prs_config->NPRSID); } // for k - k = 0; + prs_config = &ue->prs_vars[gNB_id]->prs_resource[0].prs_cfg; 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, "PRS Config for gNB_id %d @ %p\n", gNB_id, prs_config); 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, "PRSResourceSetPeriod \t[%d, %d]\n", prs_config->PRSResourceSetPeriod[0], prs_config->PRSResourceSetPeriod[1]); + LOG_I(PHY, "NumRB \t\t\t%d\n", prs_config->NumRB); + LOG_I(PHY, "RBOffset \t\t%d\n", prs_config->RBOffset); + LOG_I(PHY, "CombSize \t\t%d\n", prs_config->CombSize); + LOG_I(PHY, "PRSResourceRepetition \t%d\n", prs_config->PRSResourceRepetition); + LOG_I(PHY, "PRSResourceTimeGap \t%d\n", prs_config->PRSResourceTimeGap); + LOG_I(PHY, "MutingBitRepetition \t%d\n", prs_config->MutingBitRepetition); + LOG_I(PHY, "SymbolStart \t\t[%s\b\b]\n", str[0]); + LOG_I(PHY, "NumPRSSymbols \t\t[%s\b\b]\n", str[1]); + LOG_I(PHY, "REOffset \t\t[%s\b\b]\n", str[2]); + LOG_I(PHY, "PRSResourceOffset \t[%s\b\b]\n", str[3]); + LOG_I(PHY, "NPRS_ID \t\t[%s\b\b]\n", str[4]); + LOG_I(PHY, "MutingPattern1 \t\t[%s\b\b]\n", str[5]); + LOG_I(PHY, "MutingPattern2 \t\t[%s\b\b]\n", str[6]); LOG_I(PHY, "-----------------------------------------\n"); } } else { - LOG_I(PHY,"No %s configuration found\n", PRS_ParamList.listname); + LOG_E(PHY,"No %s configuration found..!!\n", PRS_ParamList.listname); } } } diff --git a/openair1/PHY/NR_REFSIG/nr_gold.c b/openair1/PHY/NR_REFSIG/nr_gold.c index 46bb03487a..c35bf2701c 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold.c +++ b/openair1/PHY/NR_REFSIG/nr_gold.c @@ -136,7 +136,7 @@ void nr_init_prs(PHY_VARS_gNB* gNB) for (rsc_id = 0; rsc_id < gNB->prs_vars.NumPRSResources; rsc_id++) { Nid = gNB->prs_vars.prs_cfg[rsc_id].NPRSID; // seed value - LOG_I(PHY, "Initiaized NR-PRS sequence with PRS_ID %d\n", Nid); + LOG_I(PHY, "Initiaized NR-PRS sequence with PRS_ID %3d for resource %d\n", Nid, rsc_id); for (slotNum = 0; slotNum < fp->slots_per_frame; slotNum++) { for (symNum = 0; symNum < fp->symbols_per_slot ; symNum++) { reset = 1; diff --git a/openair1/PHY/NR_REFSIG/nr_gold_ue.c b/openair1/PHY/NR_REFSIG/nr_gold_ue.c index 8c222c4bc6..4f3a7d76f0 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold_ue.c +++ b/openair1/PHY/NR_REFSIG/nr_gold_ue.c @@ -137,7 +137,7 @@ void init_nr_gold_prs(PHY_VARS_NR_UE* ue) for(gnb = 0; gnb < ue->prs_active_gNBs; gnb++) { for(rsc = 0; rsc < ue->prs_vars[gnb]->NumPRSResources; rsc++) { Nid = ue->prs_vars[gnb]->prs_resource[rsc].prs_cfg.NPRSID; // seed value - LOG_I(PHY,"Initialised NR-PRS sequence with PRS_ID %d\n",Nid); + LOG_I(PHY,"Initialised NR-PRS sequence with PRS_ID %3d for resource %d\n",Nid, rsc); for (slotNum = 0; slotNum < fp->slots_per_frame; slotNum++) { for (symNum = 0; symNum < fp->symbols_per_slot ; symNum++) { reset = 1; diff --git a/openair1/PHY/NR_TRANSPORT/nr_prs.c b/openair1/PHY/NR_TRANSPORT/nr_prs.c index 513fadab85..2167990abf 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_prs.c +++ b/openair1/PHY/NR_TRANSPORT/nr_prs.c @@ -12,7 +12,7 @@ extern short nr_qpsk_mod_table[8]; int nr_generate_prs(uint32_t **nr_gold_prs, int32_t *txdataF, int16_t amp, - prs_data_t *prs_data, + prs_config_t *prs_cfg, nfapi_nr_config_request_scf_t *config, NR_DL_FRAME_PARMS *frame_parms) { @@ -23,26 +23,26 @@ int nr_generate_prs(uint32_t **nr_gold_prs, // PRS resource mapping with combsize=k which means PRS symbols exist in every k-th subcarrier in frequency domain // According to ts138.211 sec.7.4.1.7.2 - for (int l = prs_data->SymbolStart; l < prs_data->SymbolStart + prs_data->NumPRSSymbols; l++) { + for (int l = prs_cfg->SymbolStart; l < prs_cfg->SymbolStart + prs_cfg->NumPRSSymbols; l++) { - int symInd = l-prs_data->SymbolStart; - if (prs_data->CombSize == 2) { + int symInd = l-prs_cfg->SymbolStart; + if (prs_cfg->CombSize == 2) { k_prime = k_prime_table[0][symInd]; } - else if (prs_data->CombSize == 4){ + else if (prs_cfg->CombSize == 4){ k_prime = k_prime_table[1][symInd]; } - else if (prs_data->CombSize == 6){ + else if (prs_cfg->CombSize == 6){ k_prime = k_prime_table[2][symInd]; } - else if (prs_data->CombSize == 12){ + else if (prs_cfg->CombSize == 12){ k_prime = k_prime_table[3][symInd]; } - k = (prs_data->REOffset+k_prime) % prs_data->CombSize + prs_data->RBOffset*12 + frame_parms->first_carrier_offset; + k = (prs_cfg->REOffset+k_prime) % prs_cfg->CombSize + prs_cfg->RBOffset*12 + frame_parms->first_carrier_offset; // QPSK modulation - for (int m = 0; m < (12/prs_data->CombSize) * prs_data->NumRB; m++) { + for (int m = 0; m < (12/prs_cfg->CombSize) * prs_cfg->NumRB; m++) { idx = (((nr_gold_prs[l][(m<<1)>>5])>>((m<<1)&0x1f))&3); mod_prs[m<<1] = nr_qpsk_mod_table[idx<<1]; mod_prs[(m<<1)+1] = nr_qpsk_mod_table[(idx<<1) + 1]; @@ -64,14 +64,14 @@ int nr_generate_prs(uint32_t **nr_gold_prs, ((int16_t *)txdataF)[((l*frame_parms->ofdm_symbol_size + k)<<1)+1]); #endif - k = k + prs_data->CombSize; + k = k + prs_cfg->CombSize; if (k >= frame_parms->ofdm_symbol_size) k-=frame_parms->ofdm_symbol_size; } } #ifdef DEBUG_PRS_MAP - LOG_M("nr_prs.m", "prs",(int16_t *)&txdataF[prs_data->SymbolStart*frame_parms->ofdm_symbol_size],prs_data->NumPRSSymbols*frame_parms->ofdm_symbol_size, 1, 1); + LOG_M("nr_prs.m", "prs",(int16_t *)&txdataF[prs_cfg->SymbolStart*frame_parms->ofdm_symbol_size],prs_cfg->NumPRSSymbols*frame_parms->ofdm_symbol_size, 1, 1); #endif return 0; } diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h index 58118b5381..1eb1691dde 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h @@ -42,7 +42,7 @@ int nr_generate_prs(uint32_t **nr_gold_prs, int32_t *txdataF, int16_t amp, - prs_data_t *prs_data, + prs_config_t *prs_cfg, nfapi_nr_config_request_scf_t *config, NR_DL_FRAME_PARMS *frame_parms); diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c index 0d4a2325cf..0dcbbe48f4 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c @@ -53,7 +53,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id, NR_DL_FRAME_PARMS *frame_params) { int32_t **rxdataF = ue->common_vars.common_vars_rx_data_per_thread[proc->thread_id].rxdataF; - prs_data_t *prs_cfg = &ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_cfg; + prs_config_t *prs_cfg = &ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_cfg; prs_meas_t **prs_meas = ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_meas; int32_t **prs_chestF = ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_ch_estimates; int32_t **prs_chestT = ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_ch_estimates_time; diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 8493bc57f9..f0e78e59e8 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -226,7 +226,7 @@ typedef struct { typedef struct { uint8_t NumPRSResources; - prs_data_t prs_cfg[NR_MAX_PRS_RESOURCES_PER_SET]; + prs_config_t prs_cfg[NR_MAX_PRS_RESOURCES_PER_SET]; } NR_gNB_PRS; typedef struct { diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index f1811cc932..dac6f2e762 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -348,7 +348,7 @@ typedef struct { #define NR_PRS_IDFT_OVERSAMP_FACTOR 1 // IDFT oversampling factor for NR PRS channel estimates in time domain, ALLOWED value 16x, and 1x is default(ie. IDFT size is frame_params->ofdm_symbol_size) typedef struct { - prs_data_t prs_cfg; + prs_config_t prs_cfg; int32_t **prs_ch_estimates; int32_t **prs_ch_estimates_time; int32_t reserved; diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h index 44067881e9..b08f57d06f 100644 --- a/openair1/PHY/defs_nr_common.h +++ b/openair1/PHY/defs_nr_common.h @@ -389,23 +389,23 @@ struct NR_DL_FRAME_PARMS { uint32_t ofdm_offset_divisor; }; -// PRS structures prototype +// PRS config structures typedef struct { - uint16_t PRSResourceSetPeriod[2]; // [slot period, slot offset] - uint16_t PRSResourceOffset; // array if more than one resource sets.slot offset (0...511) (default 0) - uint8_t PRSResourceRepetition; // slot offset (1 (default), 2, 4, 6, 8, 16, 32) - uint8_t PRSResourceTimeGap; // slot offset (1 (default), 2, 4, 6, 8, 16, 32) - uint16_t NumRB; // number of RBs in freq domain a scalar =< 275 RB - uint8_t NumPRSSymbols; // number of PRS symbols in time domain - uint8_t SymbolStart; // starting OFDM symbol of PRS resource in time domain + uint16_t PRSResourceSetPeriod[2]; // [slot period, slot offset] of a PRS resource set + uint16_t PRSResourceOffset; // Slot offset of each PRS resource defined relative to the slot offset of the PRS resource set (0...511) + uint8_t PRSResourceRepetition; // Repetition factor for all PRS resources in resource set (1 /*default*/, 2, 4, 6, 8, 16, 32) + uint8_t PRSResourceTimeGap; // Slot offset between two consecutive repetition indices of all PRS resources in a PRS resource set (1 /*default*/, 2, 4, 6, 8, 16, 32) + uint16_t NumRB; // Number of PRBs allocated to all PRS resources in a PRS resource set (<= 272 and multiples of 4) + uint8_t NumPRSSymbols; // Number of OFDM symbols in a slot allocated to each PRS resource in a PRS resource set + uint8_t SymbolStart; // Starting OFDM symbol of each PRS resource in a PRS resource set uint16_t RBOffset; // Starting PRB index of all PRS resources in a PRS resource set - uint8_t CombSize; // RE density of all PRS resources in a PRS resource set. i∈{2,4,6,12} + uint8_t CombSize; // RE density of all PRS resources in a PRS resource set (2, 4, 6, 12) uint8_t REOffset; // Starting RE offset in the first OFDM symbol of each PRS resource in a PRS resource set uint32_t MutingPattern1[32]; // Muting bit pattern option-1, specified as [] or a binary-valued vector of length 2, 4, 6, 8, 16, or 32 uint32_t MutingPattern2[32]; // Muting bit pattern option-2, specified as [] or a binary-valued vector of length 2, 4, 6, 8, 16, or 32 uint8_t MutingBitRepetition; // Muting bit repetition factor, specified as 1, 2, 4, or 8 - uint16_t NPRSID; // Sequence identity of each PRS resource specified as a scalar or a vector of integers in the range [0, 4095] -} prs_data_t; + uint16_t NPRSID; // Sequence identity of each PRS resource in a PRS resource set, specified in the range [0, 4095] +} prs_config_t; typedef struct { int8_t gNB_id; diff --git a/openair2/COMMON/prs_nr_paramdef.h b/openair2/COMMON/prs_nr_paramdef.h new file mode 100644 index 0000000000..d0f5b3b9bb --- /dev/null +++ b/openair2/COMMON/prs_nr_paramdef.h @@ -0,0 +1,136 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file openair2/COMMON/prs_nr_paramdef.f + * \brief definition of configuration parameters for PRS + * \author + * \date 2022 + * \version 0.1 + * \company EURECOM + * \email: + * \note + * \warning + */ + +#ifndef __PRS_NR_PARAMDEF__H__ +#define __PRS_NR_PARAMDEF__H__ + +/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/* PRS configuration section names */ +#define CONFIG_STRING_PRS_LIST "PRSs" +#define CONFIG_STRING_PRS_CONFIG "prs_config" + + +/* Global parameters */ +#define CONFIG_STRING_ACTIVE_GNBs "Active_gNBs" +#define HELP_STRING_ACTIVE_GNBs "Number of active gNBs simultaneously transmitting PRS signal to a UE" +/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* PRS configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define PRS_GLOBAL_PARAMS_DESC { \ +{CONFIG_STRING_ACTIVE_GNBs, HELP_STRING_ACTIVE_GNBs, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \ +} + +#define PRS_ACTIVE_GNBS_IDX 0 +/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/* PRS configuration parameters names */ +#define CONFIG_STRING_GNB_ID "gNB_id" +#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_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_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" + +/* Help string for PRS parameters */ +#define HELP_STRING_GNB_ID "gNB index for UE (<= CombSize)" +#define HELP_STRING_NUM_PRS_RESOURCES "Number of PRS resources in a PRS resource set" +#define HELP_STRING_PRS_RESOURCE_SET_PERIOD_LIST "[slot period, slot offset] of a PRS resource set" +#define HELP_STRING_PRS_SYMBOL_START_LIST "Starting OFDM symbol of each PRS resource in a PRS resource set" +#define HELP_STRING_PRS_NUM_SYMBOLS_LIST "Number of OFDM symbols in a slot for each PRS resource in a PRS resource set" +#define HELP_STRING_PRS_NUM_RB "Number of PRBs allocated to all PRS resources in a PRS resource set (<= 272 and multiples of 4)" +#define HELP_STRING_PRS_RB_OFFSET "Starting PRB index of all PRS resources in a PRS resource set" +#define HELP_STRING_PRS_COMB_SIZE "RE density of all PRS resources in a PRS resource set (2, 4, 6, 12)" +#define HELP_STRING_PRS_RE_OFFSET_LIST "Starting RE offset in the first OFDM symbol of each PRS resource in a PRS resource set" +#define HELP_STRING_PRS_RESOURCE_OFFSET_LIST "Slot offset of each PRS resource defined relative to the slot offset of the PRS resource set (0...511)" +#define HELP_STRING_PRS_RESOURCE_REPETITION "Repetition factor for all PRS resources in resource set (1 /*default*/, 2, 4, 6, 8, 16, 32)" +#define HELP_STRING_PRS_RESOURCE_TIME_GAP "Slot offset between two consecutive repetition indices of all PRS resources in a PRS resource set (1 /*default*/, 2, 4, 6, 8, 16, 32)" +#define HELP_STRING_PRS_ID_LIST "Sequence identity of each PRS resource in a PRS resource set, specified in the range [0, 4095]" +#define HELP_STRING_PRS_MUTING_PATTERN1_LIST "Muting bit pattern option-1, specified as [] or a binary-valued vector of length 2, 4, 6, 8, 16, or 32" +#define HELP_STRING_PRS_MUTING_PATTERN2_LIST "Muting bit pattern option-2, specified as [] or a binary-valued vector of length 2, 4, 6, 8, 16, or 32" +#define HELP_STRING_PRS_MUTING_BIT_REPETITION "Muting bit repetition factor, specified as 1, 2, 4, or 8" + + +/*----------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* PRS configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*----------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define PRS_PARAMS_DESC { \ +{CONFIG_STRING_GNB_ID, HELP_STRING_GNB_ID, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \ +{CONFIG_STRING_NUM_PRS_RESOURCES, HELP_STRING_NUM_PRS_RESOURCES, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \ +{CONFIG_STRING_PRS_RESOURCE_SET_PERIOD_LIST, HELP_STRING_PRS_RESOURCE_SET_PERIOD_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \ +{CONFIG_STRING_PRS_SYMBOL_START_LIST, HELP_STRING_PRS_SYMBOL_START_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \ +{CONFIG_STRING_PRS_NUM_SYMBOLS_LIST, HELP_STRING_PRS_NUM_SYMBOLS_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \ +{CONFIG_STRING_PRS_NUM_RB, HELP_STRING_PRS_NUM_RB, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \ +{CONFIG_STRING_PRS_RB_OFFSET, HELP_STRING_PRS_RB_OFFSET, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \ +{CONFIG_STRING_PRS_COMB_SIZE, HELP_STRING_PRS_COMB_SIZE, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \ +{CONFIG_STRING_PRS_RE_OFFSET_LIST, HELP_STRING_PRS_RE_OFFSET_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \ +{CONFIG_STRING_PRS_RESOURCE_OFFSET_LIST, HELP_STRING_PRS_RESOURCE_OFFSET_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \ +{CONFIG_STRING_PRS_RESOURCE_REPETITION, HELP_STRING_PRS_RESOURCE_REPETITION, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \ +{CONFIG_STRING_PRS_RESOURCE_TIME_GAP, HELP_STRING_PRS_RESOURCE_TIME_GAP, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \ +{CONFIG_STRING_PRS_ID_LIST, HELP_STRING_PRS_ID_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \ +{CONFIG_STRING_PRS_MUTING_PATTERN1_LIST, HELP_STRING_PRS_MUTING_PATTERN1_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \ +{CONFIG_STRING_PRS_MUTING_PATTERN2_LIST, HELP_STRING_PRS_MUTING_PATTERN2_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \ +{CONFIG_STRING_PRS_MUTING_BIT_REPETITION, HELP_STRING_PRS_MUTING_BIT_REPETITION, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \ +} + +#define PRS_GNB_ID 0 +#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_LIST 8 +#define PRS_RESOURCE_OFFSET_LIST 9 +#define PRS_RESOURCE_REPETITION 10 +#define PRS_RESOURCE_TIME_GAP 11 +#define PRS_ID_LIST 12 +#define PRS_MUTING_PATTERN1_LIST 13 +#define PRS_MUTING_PATTERN2_LIST 14 +#define PRS_MUTING_BIT_REPETITION 15 + +/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ + +#endif diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 88f547bb0b..99c042ef0d 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -674,10 +674,11 @@ void RCconfig_nr_flexran() void RCconfig_nr_prs(void) { uint16_t j = 0, k = 0; + prs_config_t *prs_config = NULL; + char str[7][100] = {'\0'}; int16_t n[7] = {0}; paramdef_t PRS_Params[] = PRS_PARAMS_DESC; paramlist_def_t PRS_ParamList = {CONFIG_STRING_PRS_CONFIG,NULL,0}; - if (RC.gNB == NULL) { RC.gNB = (PHY_VARS_gNB **)malloc((1+NUMBER_OF_gNB_MAX)*sizeof(PHY_VARS_gNB*)); LOG_I(NR_PHY,"RC.gNB = %p\n",RC.gNB); @@ -696,77 +697,72 @@ void RCconfig_nr_prs(void) RC.gNB[j]->Mod_id = j; } + memset(n,0,sizeof(n)); 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]; + prs_config = &RC.gNB[j]->prs_vars.prs_cfg[k]; + prs_config->PRSResourceSetPeriod[0] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[0]; + prs_config->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]; + prs_config->SymbolStart = PRS_ParamList.paramarray[j][PRS_SYMBOL_START_LIST].uptr[k]; + prs_config->NumPRSSymbols = PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS_LIST].uptr[k]; + prs_config->REOffset = PRS_ParamList.paramarray[j][PRS_RE_OFFSET_LIST].uptr[k]; + prs_config->PRSResourceOffset = PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET_LIST].uptr[k]; + prs_config->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); + prs_config->NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr); + prs_config->RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr); + prs_config->CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr); + prs_config->PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr); + prs_config->PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr); + prs_config->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]; + { + prs_config->MutingPattern1[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].uptr[l]; + if (k == 0) // print only for 0th resource + n[5] += snprintf(str[5]+n[5],sizeof(str[5]),"%d, ",prs_config->MutingPattern1[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]; + { + prs_config->MutingPattern2[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].uptr[l]; + if (k == 0) // print only for 0th resource + n[6] += snprintf(str[6]+n[6],sizeof(str[6]),"%d, ",prs_config->MutingPattern2[l]); + } + // print to buffer + n[0] += snprintf(str[0]+n[0],sizeof(str[0]),"%d, ",prs_config->SymbolStart); + n[1] += snprintf(str[1]+n[1],sizeof(str[1]),"%d, ",prs_config->NumPRSSymbols); + n[2] += snprintf(str[2]+n[2],sizeof(str[2]),"%d, ",prs_config->REOffset); + n[3] += snprintf(str[3]+n[3],sizeof(str[3]),"%d, ",prs_config->PRSResourceOffset); + n[4] += snprintf(str[4]+n[4],sizeof(str[4]),"%d, ",prs_config->NPRSID); } // for k - k = 0; + prs_config = &RC.gNB[j]->prs_vars.prs_cfg[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, "PRS Config for gNB_id %d @ %p\n", j, prs_config); 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, "PRSResourceSetPeriod \t[%d, %d]\n", prs_config->PRSResourceSetPeriod[0], prs_config->PRSResourceSetPeriod[1]); + LOG_I(PHY, "NumRB \t\t\t%d\n", prs_config->NumRB); + LOG_I(PHY, "RBOffset \t\t%d\n", prs_config->RBOffset); + LOG_I(PHY, "CombSize \t\t%d\n", prs_config->CombSize); + LOG_I(PHY, "PRSResourceRepetition \t%d\n", prs_config->PRSResourceRepetition); + LOG_I(PHY, "PRSResourceTimeGap \t%d\n", prs_config->PRSResourceTimeGap); + LOG_I(PHY, "MutingBitRepetition \t%d\n", prs_config->MutingBitRepetition); + LOG_I(PHY, "SymbolStart \t\t[%s\b\b]\n", str[0]); + LOG_I(PHY, "NumPRSSymbols \t\t[%s\b\b]\n", str[1]); + LOG_I(PHY, "REOffset \t\t[%s\b\b]\n", str[2]); + LOG_I(PHY, "PRSResourceOffset \t[%s\b\b]\n", str[3]); + LOG_I(PHY, "NPRS_ID \t\t[%s\b\b]\n", str[4]); + LOG_I(PHY, "MutingPattern1 \t\t[%s\b\b]\n", str[5]); + LOG_I(PHY, "MutingPattern2 \t\t[%s\b\b]\n", str[6]); LOG_I(PHY, "-----------------------------------------\n"); } // for j } else { - LOG_I(NR_PHY,"No " CONFIG_STRING_PRS_CONFIG " configuration found\n"); + LOG_E(PHY,"No " CONFIG_STRING_PRS_CONFIG " configuration found..!!\n"); } } diff --git a/openair2/GNB_APP/prs_nr_paramdef.h b/openair2/GNB_APP/prs_nr_paramdef.h deleted file mode 100644 index 0de2d36916..0000000000 --- a/openair2/GNB_APP/prs_nr_paramdef.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file openair2/GNB_APP/prs_nr_paramdef.f - * \brief definition of configuration parameters for PRS - * \author - * \date 2022 - * \version 0.1 - * \company EURECOM - * \email: - * \note - * \warning - */ - -#ifndef __GNB_APP_PRS_NR_PARAMDEF__H__ -#define __GNB_APP_PRS_NR_PARAMDEF__H__ - -/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* 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 */ -#define CONFIG_STRING_ACTIVE_GNBs "Active_gNBs" -/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ -/* PRS configuration parameters */ -/* optname helpstr paramflags XXXptr defXXXval type numelt */ -/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ -#define PRS_GLOBAL_PARAMS_DESC { \ -{CONFIG_STRING_ACTIVE_GNBs, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \ -} - -#define PRS_ACTIVE_GNBS_IDX 0 -/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* PRS configuration parameters names */ -#define CONFIG_STRING_GNB_ID "gNB_id" -#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_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_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" - - -/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ -/* PRS configuration parameters */ -/* 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_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 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_LIST 8 -#define PRS_RESOURCE_OFFSET_LIST 9 -#define PRS_RESOURCE_REPETITION 10 -#define PRS_RESOURCE_TIME_GAP 11 -#define PRS_ID_LIST 12 -#define PRS_MUTING_PATTERN1_LIST 13 -#define PRS_MUTING_PATTERN2_LIST 14 -#define PRS_MUTING_BIT_REPETITION 15 - -/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ -#endif diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band257.fr2.66PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band257.fr2.66PRB.usrpb210.conf deleted file mode 100644 index 5398599b79..0000000000 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band257.fr2.66PRB.usrpb210.conf +++ /dev/null @@ -1,317 +0,0 @@ -Active_gNBs = ( "gNB-OAI"); -# Asn1_verbosity, choice in: none, info, annoying -Asn1_verbosity = "none"; - -gNBs = -( - { - ////////// Identification parameters: - gNB_ID = 0xe00; - gNB_name = "gNB-OAI"; - - // Tracking area code, 0x0000 and 0xfffe are reserved values - tracking_area_code = 1; - plmn_list = ({ - mcc = 208; - mnc = 99; - mnc_length = 2; - snssaiList = ( - { - sst = 1; - sd = 0x1; // 0 false, else true - }, - { - sst = 1; - sd = 0x112233; // 0 false, else true - } - ); - - }); - - nr_cellid = 12345678L; - - ////////// Physical parameters: - - ssb_SubcarrierOffset = 0; - pdsch_AntennaPorts = 1; - pusch_AntennaPorts = 1; - sib1_tda = 0; - - pdcch_ConfigSIB1 = ( - { - controlResourceSetZero = 12; - searchSpaceZero = 0; - } - ); - - servingCellConfigCommon = ( - { - #spCellConfigCommon - - physCellId = 0; - -# downlinkConfigCommon - #frequencyInfoDL - # this is pointA + 23 PRBs@120kHz SCS (same as initial BWP) - absoluteFrequencySSB = 2078315; - dl_frequencyBand = 257; - # this is 27.900 GHz - dl_absoluteFrequencyPointA = 2077499; - #scs-SpecificCarrierList - dl_offstToCarrier = 0; -# subcarrierSpacing -# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - dl_subcarrierSpacing = 3; - dl_carrierBandwidth = 66; - #initialDownlinkBWP - #genericParameters - # this is RBstart=27,L=48 (275*(L-1))+RBstart - initialDLBWPlocationAndBandwidth = 13475; # 6366 12925 12956 28875 12952 -# subcarrierSpacing -# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - initialDLBWPsubcarrierSpacing = 3; - #pdcch-ConfigCommon - initialDLBWPcontrolResourceSetZero = 12; - initialDLBWPsearchSpaceZero = 0; - - #uplinkConfigCommon - #frequencyInfoUL - ul_frequencyBand = 257; - #scs-SpecificCarrierList - ul_offstToCarrier = 0; -# subcarrierSpacing -# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - ul_subcarrierSpacing = 3; - ul_carrierBandwidth = 66; - pMax = 20; - #initialUplinkBWP - #genericParameters - initialULBWPlocationAndBandwidth = 13475; -# subcarrierSpacing -# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - initialULBWPsubcarrierSpacing = 3; - #rach-ConfigCommon - #rach-ConfigGeneric - prach_ConfigurationIndex = 98; -#prach_msg1_FDM -#0 = one, 1=two, 2=four, 3=eight - prach_msg1_FDM = 0; - prach_msg1_FrequencyStart = 0; - zeroCorrelationZoneConfig = 13; - preambleReceivedTargetPower = -96; -#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200) - preambleTransMax = 6; -#powerRampingStep -# 0=dB0,1=dB2,2=dB4,3=dB6 - powerRampingStep = 1; -#ra_ReponseWindow -#1,2,4,8,10,20,40,80 - ra_ResponseWindow = 4; -#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR -#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen - ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4; -#oneHalf (0..15) 4,8,12,16,...60,64 - ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15; -#ra_ContentionResolutionTimer -#(0..7) 8,16,24,32,40,48,56,64 - ra_ContentionResolutionTimer = 7; - rsrp_ThresholdSSB = 19; -#prach-RootSequenceIndex_PR -#1 = 839, 2 = 139 - prach_RootSequenceIndex_PR = 2; - prach_RootSequenceIndex = 1; - # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex - # - msg1_SubcarrierSpacing = 3, -# restrictedSetConfig -# 0=unrestricted, 1=restricted type A, 2=restricted type B - restrictedSetConfig = 0, - - msg3_DeltaPreamble = 1; - p0_NominalWithGrant =-90; - -# pucch-ConfigCommon setup : -# pucchGroupHopping -# 0 = neither, 1= group hopping, 2=sequence hopping - pucchGroupHopping = 0; - hoppingId = 40; - p0_nominal = -90; -# ssb_PositionsInBurs_BitmapPR -# 1=short, 2=medium, 3=long - ssb_PositionsInBurst_PR = 3; - ssb_PositionsInBurst_Bitmap = 0x0001000100010001L; - -# ssb_periodicityServingCell -# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 - ssb_periodicityServingCell = 2; - -# dmrs_TypeA_position -# 0 = pos2, 1 = pos3 - dmrs_TypeA_Position = 0; - -# subcarrierSpacing -# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - subcarrierSpacing = 3; - - - #tdd-UL-DL-ConfigurationCommon -# subcarrierSpacing -# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - referenceSubcarrierSpacing = 3; - # pattern1 - # dl_UL_TransmissionPeriodicity - # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10 - dl_UL_TransmissionPeriodicity = 3; - nrofDownlinkSlots = 7; - nrofDownlinkSymbols = 6; - nrofUplinkSlots = 2; - nrofUplinkSymbols = 4; - - ssPBCH_BlockPower = -25; - } - - ); - - - # ------- SCTP definitions - SCTP : - { - # Number of streams to use in input/output - SCTP_INSTREAMS = 2; - SCTP_OUTSTREAMS = 2; - }; - - - ////////// AMF parameters: - amf_ip_address = ( { ipv4 = "192.168.70.132"; - ipv6 = "192:168:30::17"; - active = "yes"; - preference = "ipv4"; - } - ); - - - NETWORK_INTERFACES : - { - GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai"; - GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24"; - GNB_INTERFACE_NAME_FOR_NGU = "demo-oai"; - GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24"; - GNB_PORT_FOR_S1U = 2152; # Spec 2152 - }; - - } -); - -MACRLCs = ( -{ - num_cc = 1; - tr_s_preference = "local_L1"; - tr_n_preference = "local_RRC"; - pusch_TargetSNRx10 = 150; - pucch_TargetSNRx10 = 200; - ulsch_max_frame_inactivity = 1; -} -); - -prs_config = ( -{ - PRSResourceSetPeriod0 = 40; - PRSResourceSetPeriod1 = 0; - SymbolStart = 7; - NumPRSSymbols = 4; - NumRB = 56; - RBOffset = 0; - CombSize = 4; - REOffset = 0; - PRSResourceOffset = 0; - PRSResourceRepetition = 1; - PRSResourceTimeGap = 1; - NPRS_ID = 0; -} -); - -L1s = ( -{ - num_cc = 1; - tr_n_preference = "local_mac"; - pusch_proc_threads = 8; - prach_dtx_threshold = 120; - pucch0_dtx_threshold = 150; - ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0 -} -); - -RUs = ( -{ - local_rf = "yes" - nb_tx = 1 - nb_rx = 1 - att_tx = 0 - att_rx = 0; - bands = [257]; - max_pdschReferenceSignalPower = -27; - max_rxgain = 114; - sf_extension = 0; - eNB_instances = [0]; - #beamforming 1x4 matrix: - bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000]; - clock_src = "internal"; -} -); - -THREAD_STRUCT = ( -{ - #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" - parallel_config = "PARALLEL_SINGLE_THREAD"; - #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" - worker_config = "WORKER_ENABLE"; -} -); - -rfsimulator : -{ - serveraddr = "server"; - serverport = "4043"; - options = (); #("saviq"); or/and "chanmod" - modelname = "AWGN"; - IQfile = "/tmp/rfsimulator.iqs"; -}; - -security = { - # preferred ciphering algorithms - # the first one of the list that an UE supports in chosen - # valid values: nea0, nea1, nea2, nea3 - ciphering_algorithms = ( "nea0" ); - - # preferred integrity algorithms - # the first one of the list that an UE supports in chosen - # valid values: nia0, nia1, nia2, nia3 - integrity_algorithms = ( "nia2", "nia0" ); - - # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter - # what 'ciphering_algorithms' configures; same thing for 'drb_integrity' - drb_ciphering = "yes"; - drb_integrity = "no"; -}; - -log_config : -{ - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - ngap_log_level ="debug"; - ngap_log_verbosity ="medium"; -}; -