Added fix for SSB and SIB1 repeatition
[o-du/l2.git] / src / 5gnrsch / sch_utils.c
index f2c9c84..713e2a8 100644 (file)
@@ -467,8 +467,8 @@ uint8_t pucchResourceSet[MAX_PUCCH_RES_SET_IDX][4] = {
  *     
  *     This function finds the TBSize from table Table 5.1.3.2-1 spec 38.214
  *     
- *  @param[in]  payLoadSize - size of payload
- *  @return     TBsize from the Table
+ *  @param[in]  payLoadSize - size of payload in bytes
+ *  @return     TBsize from the Table in bytes
  **/
 uint16_t schCalcTbSize(uint16_t payLoadSize)
 {
@@ -481,7 +481,7 @@ uint16_t schCalcTbSize(uint16_t payLoadSize)
    }
 
    /* return the TBsize in bytes */
-   return (tbSizeTable[tbsIndex]);
+   return (tbSizeTable[tbsIndex]/8);
 }
 
 /**
@@ -493,7 +493,7 @@ uint16_t schCalcTbSize(uint16_t payLoadSize)
  *     
  *     This function calculates the number of PRbs 
  *     
- *  @param[in]  tbSize
+ *  @param[in]  tbSize in bytes
  *  @param[in]  mcs
  *  @param[in]  number of symbols
  *  @return   number PRBs
@@ -507,6 +507,8 @@ uint16_t schCalcNumPrb(uint16_t tbSize, uint16_t mcs, uint8_t numSymbols)
    uint16_t rValue = mcsTable[mcs][2];
    uint8_t  numLayer = 1;       /* v value */
 
+   tbSize = tbSize * 8; //Calculate tbSize in bits
+
    /* formula used for calculation of rbSize, 38.213 section 5.1.3.2 *
     * Ninfo = Nre . R . Qm . v                                       *
     * Nre' = Nsc . NsymPdsch - NdmrsSymb - Noh                       *
@@ -522,7 +524,53 @@ uint16_t schCalcNumPrb(uint16_t tbSize, uint16_t mcs, uint8_t numSymbols)
    numPrb = ceil((float)nre / nreDash);   
    return numPrb;
 }
+/**
+* @brief calculation of transport block size.
+*
+* @details
+*
+*     Function: schCalcTbSizeFromNPrb
+*
+*     This function calculates the transport block size
+*
+*  @param[in]  nPrb is num PRB
+*  @param[in]  mcs
+*  @param[in]  number of symbols
+*  @return   tbSize
+**/
+uint16_t schCalcTbSizeFromNPrb(uint16_t numPrb, uint16_t mcs, uint8_t numSymbols)
+{   
+   uint16_t tbSize = 0;
+   uint16_t tbsIndex = 0;
+   uint16_t nre = 0;
+   uint16_t nreDash = 0;
+   uint8_t  qm     = mcsTable[mcs][1];
+   uint16_t rValue = mcsTable[mcs][2];
+   uint8_t  numLayer = 1;       /* v value */
+   
+   /* formula used for calculation of rbSize, 38.213 section 5.1.3.2 *
+   * Ninfo = Nre . R . Qm . v   where [ NInfo is tbSize]                *
+   * Nre' = Nsc . NsymPdsch - NdmrsSymb - Noh                        *
+   * Nre = min(156,Nre') . nPrb                                      */
+   
+   nreDash = ceil( (12 * numSymbols) - NUM_DMRS_SYMBOLS - 0);
+  
+   if(nreDash > 156)
+      nreDash = 156;
+
+   nre = nreDash * numPrb;
+   tbSize = ceil(nre * qm * numLayer * rValue/1024.0);
+   tbSize = ceil(tbSize/8.0);
+   
+   while(tbSize > tbSizeTable[tbsIndex])
+   {
+      tbsIndex++;
+   }
+   tbSize = tbSizeTable[tbsIndex];
 
+   return tbSize;
+
+}
 /**
  * @brief fetching ueCb from cellCb
  *
@@ -593,9 +641,42 @@ void schInitDlSlot(SchDlSlotInfo *schDlSlotInfo)
    {
       memset(&schDlSlotInfo->ssbInfo[itr], 0, sizeof(SsbInfo));
    }
+}
 
+#ifdef NR_TDD
 
+/**
+ * @brief determines slot format
+ *
+ * @details
+ *
+ *     Function : schGetSlotFrmt 
+ *      
+ *      This API is invoked to determine if current slot is DL or UL
+ *           
+ *  @param[in]  uint16_t slot
+ *  @param[in]  uint32_t slotBitMap from cellCb
+ *  @return  SlotConfig
+ *      -# DL    - 0 
+ *      -# UL    - 1
+ *      -# FLEXI - 2
+ **/
+SlotConfig schGetSlotFrmt(uint16_t slot, uint32_t slotBitMap)
+{
+   SlotConfig slotFrmt;
+   int mask1 = 0, mask2 = 0;
+
+   slot = (slot%10)*2;
+   mask1 = 1<<(slot);
+   mask2 = 1<<(slot+1);
+   slotFrmt = ((mask1 & slotBitMap)>>slot) + (2*((mask2 & slotBitMap)>>(slot+1)));
+
+   //printf("\n\n\n\n*****FormatType:%d Slot:%d****\n\n\n\n", slotFrmt, slot/2);
+
+   return slotFrmt;
 }
+
+#endif
 /**********************************************************************
          End of file
 **********************************************************************/