29 #include <arpa/inet.h> 47 {25, 52, 79, 106, 133, 160, 216, 270, 0, 0, 0, 0, 0},
48 {11, 24, 38, 51, 65, 78, 106, 133, 162, 0, 217, 245, 273},
49 {0, 11, 18, 24, 31, 38, 51, 65, 79, 0, 107, 121, 135}
83 {{40, 36}, {80, 72}, {120, 108}, {160, 144}, {160, 144}, {240, 216}, {320, 288}, {320, 288}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
84 {{22, 18}, {44, 36}, {66, 54}, {88, 72}, {88, 72}, {132, 108}, {176, 144}, {176, 144}, {264, 216}, {264, 216}, {352, 288}, {352, 288}, {352, 288}},
85 { {0, 0}, {26, 18}, {39, 27}, {52, 36}, {52, 36}, {78, 54}, {104, 72}, {104, 72}, {156, 108}, {156, 108}, {208, 144}, {208, 144}, {208, 144}},
92 { {0, 0}, {104, 72}, {208, 144}, {416, 288}},
93 {{68, 36}, {136, 72}, {272, 144}, {544, 288}},
96 static uint32_t xran_fs_max_slot_num = 8000;
97 static uint32_t xran_fs_max_slot_num_SFN = 20480;
116 printf(
"ERROR: %s Mu[%d] is not valid, setting to 0\n",__FUNCTION__, nMu);
129 printf(
"ERROR: %s Mu[%d] is not valid\n",__FUNCTION__, nMu);
154 if (nAbsFrePointA <= 6000000)
221 if ((nNumerology >= 2) && (nNumerology <= 3))
252 printf(
"ERROR: %s: nNumerology[%d] nBandwidth[%d] nAbsFrePointA[%d]\n",__FUNCTION__, nNumerology, nBandwidth, nAbsFrePointA);
256 printf(
"%s: nNumerology[%d] nBandwidth[%d] nAbsFrePointA[%d] numRBs[%d]\n",__FUNCTION__, nNumerology, nBandwidth, nAbsFrePointA, numRBs);
276 uint32_t nDeltaFglobal,nFoffs,nNoffs;
277 uint32_t nNRARFCN = 0;
279 if(nCenterFreq > 0 && nCenterFreq < 3000*1000)
285 else if(nCenterFreq >= 3000*1000 && nCenterFreq < 24250*1000)
291 else if(nCenterFreq >= 24250*1000 && nCenterFreq <= 100000*1000)
299 printf(
"@@@@ incorrect center frerquency %d\n",nCenterFreq);
303 nNRARFCN = ((nCenterFreq - nFoffs)/nDeltaFglobal) + nNoffs;
305 printf(
"%s: nCenterFreq[%d] nDeltaFglobal[%d] nFoffs[%d] nNoffs[%d] nNRARFCN[%d]\n", __FUNCTION__, nCenterFreq, nDeltaFglobal, nFoffs, nNoffs, nNRARFCN);
311 xran_fs_max_slot_num = (1000/tti_interval_us)*1000;
312 xran_fs_max_slot_num_SFN = (1000/tti_interval_us)*(
xran_max_frame+1)*10;
313 return xran_fs_max_slot_num;
318 return xran_fs_max_slot_num;
323 return xran_fs_max_slot_num_SFN;
329 nSfIdx += xran_fs_max_slot_num;
332 while (nSfIdx >= xran_fs_max_slot_num) {
333 nSfIdx -= xran_fs_max_slot_num;
341 xran_fs_ul_rate[nPhyInstanceId] = 0.0;
342 xran_fs_dl_rate[nPhyInstanceId] = 0.0;
343 xran_fs_num_slot_tdd_loop[nPhyInstanceId] = 1;
348 uint32_t nSlotNum, nSymNum, nVal, i, j;
349 uint32_t numDlSym, numUlSym, numGuardSym;
350 uint32_t numDlSlots = 0, numUlSlots = 0, numSpDlSlots = 0, numSpUlSlots = 0, numSpSlots = 0;
358 xran_fs_ul_rate[nPhyInstanceId] = 0.0;
359 xran_fs_dl_rate[nPhyInstanceId] = 0.0;
360 xran_fs_num_slot_tdd_loop[nPhyInstanceId] = nTddPeriod;
365 xran_fs_num_dl_sym_sp[nPhyInstanceId][i] = 0;
366 xran_fs_num_ul_sym_sp[nPhyInstanceId][i] = 0;
377 xran_fs_num_slot_tdd_loop[nPhyInstanceId] = 1;
378 xran_fs_dl_rate[nPhyInstanceId] = 1.0;
379 xran_fs_ul_rate[nPhyInstanceId] = 1.0;
383 for (nSlotNum = 0; nSlotNum < nTddPeriod; nSlotNum++)
390 switch(psSlotConfig[nSlotNum].nSymbolType[nSymNum])
407 print_dbg(
"nSlotNum[%d] : numDlSym[%d] numGuardSym[%d] numUlSym[%d] ", nSlotNum, numDlSym, numGuardSym, numUlSym);
409 if ((numUlSym == 0) && (numGuardSym == 0))
415 else if ((numDlSym == 0) && (numGuardSym == 0))
430 xran_fs_num_dl_sym_sp[nPhyInstanceId][nSlotNum] = numDlSym;
435 xran_fs_num_ul_sym_sp[nPhyInstanceId][nSlotNum] = numUlSym;
438 print_dbg(
" numDlSlots[%d] numUlSlots[%d] numSpSlots[%d] numSpDlSlots[%d] numSpUlSlots[%d]\n", numDlSlots, numUlSlots, numSpSlots, numSpDlSlots, numSpUlSlots);
441 xran_fs_dl_rate[nPhyInstanceId] = (float)(numDlSlots + numSpDlSlots) / (float)nTddPeriod;
442 xran_fs_ul_rate[nPhyInstanceId] = (float)(numUlSlots + numSpUlSlots) / (float)nTddPeriod;
445 print_dbg(
"%s: nPhyInstanceId[%d] nFrameDuplexType[%d], nTddPeriod[%d]\n",
446 __FUNCTION__, nPhyInstanceId, nFrameDuplexType, nTddPeriod);
448 print_dbg(
"DLRate[%f] ULRate[%f]\n", xran_fs_dl_rate[nPhyInstanceId], xran_fs_ul_rate[nPhyInstanceId]);
450 nVal = (xran_fs_num_slot_tdd_loop[nPhyInstanceId] < 10) ? xran_fs_num_slot_tdd_loop[nPhyInstanceId] : 10;
454 for (nSlotNum = 0; nSlotNum < nVal; nSlotNum++)
461 for (nSlotNum = 0, i = 0; nSlotNum < xran_fs_num_slot_tdd_loop[nPhyInstanceId]; nSlotNum++)
463 print_dbg(
"%s ", sSlotPattern[xran_fs_slot_type[nPhyInstanceId][nSlotNum]]);
465 if ((i == 10) && ((nSlotNum+1) < xran_fs_num_slot_tdd_loop[nPhyInstanceId]))
479 int32_t nSfIdxMod, nSfType, ret = 0;
481 nSfIdxMod =
xran_fs_slot_limit(nSlotdx) % ((xran_fs_num_slot_tdd_loop[nCellIdx] > 0) ? xran_fs_num_slot_tdd_loop[nCellIdx]: 1);
482 nSfType = xran_fs_slot_type[nCellIdx][nSfIdxMod];
484 if (nSfType == nType)
510 int32_t nSfIdxMod, nSfType, ret = 0;
512 nSfIdxMod =
xran_fs_slot_limit(nSlotdx) % ((xran_fs_num_slot_tdd_loop[nCellIdx] > 0) ? xran_fs_num_slot_tdd_loop[nCellIdx]: 1);
514 return xran_fs_slot_symb_type[nCellIdx][nSfIdxMod][nSymbIdx];
uint32_t xran_fs_get_max_slot(void)
#define XRAN_SYMBOL_TYPE_GUARD
#define XRAN_SYMBOL_TYPE_UL
#define XRAN_SLOT_TYPE_LAST
#define print_dbg(fmt, args...)
uint32_t xran_fs_slot_limit_init(int32_t tti_interval_us)
MHz MHz MHz MHz MHz MHz MHz MHz MHz nNumRbsPerSymF1
#define XRAN_SLOT_TYPE_DL
uint16_t xran_fs_get_num_rbs(uint32_t nNumerology, uint32_t nBandwidth, uint32_t nAbsFrePointA)
#define XRAN_MAX_SECTOR_NR
#define XRAN_NUM_OF_SLOT_IN_TDD_LOOP
uint32_t xran_fs_get_tti_interval(uint8_t nMu)
#define XRAN_SLOT_TYPE_INVALID
int16_t nCpSizeF2[2][4][2]
int32_t xran_fs_set_slot_type(uint32_t nPhyInstanceId, uint32_t nFrameDuplexType, uint32_t nTddPeriod, struct xran_slot_config *psSlotConfig)
uint32_t xran_fs_cal_nrarfcn(uint32_t nCenterFreq)
uint32_t xran_fs_get_max_slot_SFN(void)
uint32_t xran_fs_get_scs(uint8_t nMu)
Header file for function to work with 5G NR frame structure and related routines. ...
#define XRAN_SYMBOL_TYPE_DL
Modules provide debug prints and utility functions.
#define XRAN_SLOT_TYPE_FDD
uint16_t nSubCarrierSpacing[5]
uint16_t nCpSizeF1[3][13][2]
#define XRAN_NUM_OF_SYMBOL_PER_SLOT
int32_t xran_fs_slot_limit(int32_t nSfIdx)
void xran_fs_clear_slot_type(uint32_t nPhyInstanceId)
#define XRAN_SLOT_TYPE_SP
int32_t xran_fs_get_slot_type(int32_t nCellIdx, int32_t nSlotdx, int32_t nType)
#define XRAN_SYMBOL_TYPE_FDD
int32_t xran_fs_get_symbol_type(int32_t nCellIdx, int32_t nSlotdx, int32_t nSymbIdx)
#define XRAN_SLOT_TYPE_UL