Epic-ID: ODUHIGH-463][Task-ID: ODUHIGH-504]Dummy Handover Request/Response and UE...
[o-du/l2.git] / src / cm / common_def.c
index 2321783..4b974c3 100644 (file)
 
 #include "common_def.h"
 
+/*Spec 38.104, Table 5.4.2.1-1 ARFCN - FREQ mapping*/
+/*{  F_REF(Mhz), ΔF_Global, F_REF-Offs, N_REF-offs, Range of N_REF }*/
+uint32_t arfcnFreqTable[3][5] = {
+  {   3000,   5,         0,        0,   599999 }, /*index 0*/
+  {  24250,  15,      3000,   600000,  2016666 }, /*index 1*/
+  { 100000,  60,  24250.08,  2016667,  3279165 }, /*index 2*/
+};
+
 /**
  * @brief frequency domain allocation function. 
  *
@@ -155,7 +163,7 @@ uint8_t buildPlmnId(Plmn plmn, uint8_t *buf)
  *
  * @details
  *
- *    Function : fetchScsValue
+ *    Function : convertScsEnumValToScsVal
  *
  *    Functionality:
  *       Function to map Sub carrier spacing enum value to value in kHz
@@ -164,7 +172,7 @@ uint8_t buildPlmnId(Plmn plmn, uint8_t *buf)
  * @return sub-carrier spacing value in kHz
  *
  * ****************************************************************/
-uint16_t fetchScsValue(uint8_t scsEnumValue)
+uint16_t convertScsEnumValToScsVal(uint8_t scsEnumValue)
 {
    switch(scsEnumValue)
    {
@@ -179,6 +187,87 @@ uint16_t fetchScsValue(uint8_t scsEnumValue)
    }
 }
 
+/*******************************************************************
+ * @brief convert scs offset value into the enum value received from O1 
+ *
+ * @details
+ *
+ *    Function : convertScsValToScsEnum
+ *
+ *    Functionality:
+ *       - convert scs periodicity value 
+ *
+ * @params[in] uint32_t num
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+
+uint8_t convertScsValToScsEnum(uint32_t num)
+{
+   switch(num)
+   {
+      case 15:
+         return SCS_15KHZ;
+
+      case 30:
+         return SCS_30KHZ;
+
+      case 60:
+         return SCS_60KHZ;
+
+      case 120:
+         return SCS_120KHZ;
+      
+      case 240:
+         return SCS_240KHZ;
+      
+      default:
+         return SCS_15KHZ;
+   }
+}
+
+/*******************************************************************
+ * @brief convert SSB periodicity value into the enum value received from O1 
+ *
+ * @details
+ *
+ *    Function : convertSSBPeriodicityToEnum
+ *
+ *    Functionality:
+ *       - convert scs periodicity value 
+ *
+ * @params[in] uint32_t num
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t convertSSBPeriodicityToEnum(uint32_t num)
+{
+   switch(num)
+   {
+      case 5:
+         return SSB_5MS;
+
+      case 10:
+         return SSB_10MS;
+
+      case 20:
+         return SSB_20MS;
+
+      case 40:
+         return SSB_40MS;
+
+      case 80:
+         return SSB_80MS;
+
+      case 160:
+         return SSB_160MS;
+
+      default:
+         return SSB_5MS;
+   }
+}
 /*******************************************************************
 *
 * @brief  SGetSBuf with debug logs
@@ -195,13 +284,16 @@ uint16_t fetchScsValue(uint8_t scsEnumValue)
 *         RFAILED - failure
 *
 * ****************************************************************/
-uint8_t SGetSBufNewForDebug(char *file, char *func, char *line, Region region, Pool pool, Data **ptr, Size size)
+uint8_t SGetSBufNewForDebug(char *file, const char *func, int line, Region region, Pool pool, Data **ptr, Size size)
 {
    if(SGetSBuf(region, pool, ptr, size) == ROK)
    {
 #ifdef ODU_MEMORY_DEBUG_LOG
-      printf("\nCM_ALLOC=== SGetSBufNewForDebug %s +%d, %s, %d, %p\n",\
+      if (strncmp(func,"cmInetRecvMsg",sizeof("cmInetRecvMsg")))
+      {
+         printf("\nCM,ALLOC,=== SGetSBufNewForDebug %s +%d, %s, %d, %p \n",\
          file, line, func, size, *ptr);
+      }
 #endif
       return ROK;
    }
@@ -225,13 +317,16 @@ uint8_t SGetSBufNewForDebug(char *file, char *func, char *line, Region region, P
 *         RFAILED - failure
 *
 * ****************************************************************/
-uint8_t SPutSBufNewForDebug(char *file, char *func, char *line, Region region, Pool pool, Data *ptr, Size size)
+uint8_t SPutSBufNewForDebug(char *file, const char *func, int line, Region region, Pool pool, Data *ptr, Size size)
 {
    if(SPutSBuf(region, pool, ptr, size) == ROK)
    {
 #ifdef ODU_MEMORY_DEBUG_LOG
-      printf("\nCM_FREE=== SPutSBufNewForDebug %s +%d, %s, %d, %p\n",\
+      if (strncmp(func,"cmInetRecvMsg",sizeof("cmInetRecvMsg")))
+      {
+         printf("\nCM,FREE,=== SPutSBufNewForDebug %s +%d, %s, %d, %p \n",\
          file, line, func, size, ptr);
+      }
 #endif
       return ROK;
    }
@@ -256,13 +351,13 @@ uint8_t SPutSBufNewForDebug(char *file, char *func, char *line, Region region, P
 *         RFAILED - failure
 *
 * ****************************************************************/
-uint8_t SGetStaticBufNewForDebug(char *file, char *func, char *line, \
+uint8_t SGetStaticBufNewForDebug(char *file, const char *func, int line, \
 Region region, Pool pool, Data **ptr, Size size, uint8_t memType)
 {
    if(SGetStaticBuffer(region, pool, ptr, size, memType) == ROK)
    {
 #ifdef ODU_MEMORY_DEBUG_LOG
-      printf("\nCM_ALLOC=== SGetStaticBufNewForDebug %s +%d, %s, %d, %p\n",\
+      printf("\nCM,ALLOC,=== SGetStaticBufNewForDebug %s +%d, %s, %d, %p \n",\
          file, line, func, size, *ptr);
 #endif
       return ROK;
@@ -287,13 +382,13 @@ Region region, Pool pool, Data **ptr, Size size, uint8_t memType)
 *         RFAILED - failure
 *
 * ****************************************************************/
-uint8_t SPutStaticBufNewForDebug(char *file, char *func, char *line, \
+uint8_t SPutStaticBufNewForDebug(char *file, const char *func, int line, \
 Region region, Pool pool, Data *ptr, Size size, uint8_t memType)
 {
    if(SPutStaticBuffer(region, pool, ptr, size, memType) == ROK)
    {
 #ifdef ODU_MEMORY_DEBUG_LOG
-      printf("\nCM_FREE=== SPutStaticBufNewForDebug %s +%d, %s, %d, %p\n",\
+      printf("\nCM,FREE,=== SPutStaticBufNewForDebug %s +%d, %s, %d, %p \n",\
          file, line, func, size, ptr);
 #endif
       return ROK;
@@ -301,6 +396,104 @@ Region region, Pool pool, Data *ptr, Size size, uint8_t memType)
    else
       return RFAILED;
 }
+
+
+/*******************************************************************
+*
+* @brief  countSetBits in an integer
+*
+* @details
+*
+*    Function : countSetBits 
+*
+*    Functionality: countSetBits in unsigned integer
+*
+* @params[in] uint32_t number/Bitmask
+*
+* @return [out] uint8_t count of Set Bits
+*
+* ****************************************************************/
+uint8_t countSetBits(uint32_t num)
+{
+   uint8_t count = 0;
+
+   while(num)
+   {
+      count += num & 1;
+      num >>= 1;
+   }
+   return(count);
+}
+
+/*******************************************************************
+*
+* @brief  convert ARFCN to freq in kHZ
+*
+* @details
+*
+*    Function : convertArfcnToFreqKhz
+*
+*    Functionality: convert ARFCN to freq in kHZ as per Table below
+*                  3GPP TS 38.104, Table 5.4.2.1-1
+*       Formula: F_REF = F_REF-Offs + ΔF_Global (N_REF – N_REF-Offs)
+*
+* @params[in] uint32_t number
+*
+* @return [out] uint32_t Freq in kHZ
+*
+* ****************************************************************/
+uint32_t convertArfcnToFreqKhz(uint32_t arfcn)
+{
+   uint8_t indexTable = 0;
+   uint32_t freq = 0;
+
+   for(indexTable = 0; indexTable < 3; indexTable++)
+   {
+      if(arfcn <= arfcnFreqTable[indexTable][4])
+      {
+         freq = (arfcnFreqTable[indexTable][2] * 1000) + (arfcnFreqTable[indexTable][1] * (arfcn - arfcnFreqTable[indexTable][3]));
+         return (freq);
+      }
+   }
+   DU_LOG("ERROR  -->  DUAPP: ARFCN vaid range is between 0 and 3279165");
+   return (freq);
+}
+
+
+/*******************************************************************
+*
+* @brief  convert Freq(MHZ) to ARFCN
+*
+* @details
+*
+*    Function : convertFreqToArfcn
+*
+*    Functionality: convert freq to ARFCN as per Table below
+*                  3GPP TS 38.104, Table 5.4.2.1-1
+*       Formula: NREF = NREF-Offs +  (FREF – FREF-Offs) / ΔFGlobal
+*
+* @params[in] uint32_t Freq(kHZ)
+*
+* @return [out] uint32_t ARFCN(number)
+*
+* ****************************************************************/
+uint32_t convertFreqToArfcn(uint32_t freq)
+{
+   uint8_t indexTable = 0;
+   uint32_t arfcn = 0;
+
+   for(indexTable = 0; indexTable < 3; indexTable++)
+   {
+      if(freq < (arfcnFreqTable[indexTable][0] * 1000))
+      {
+         arfcn = arfcnFreqTable[indexTable][3] + ((freq - (arfcnFreqTable[indexTable][2] * 1000)) / (arfcnFreqTable[indexTable][1]));
+         return (arfcn);
+      }
+   }
+   DU_LOG("ERROR  -->  DUAPP: FREQ vaid range is between 0 and 100000 MHz");
+   return (arfcn);
+}
+
 /**********************************************************************
          End of file
 **********************************************************************/