return 0;
} /* PrepFinalEncBuf */
-/*******************************************************************
- *
- * @brief Builds PLMN ID
- *
- * @details
- *
- * Function : plmnBuildId
- *
- * Functionality: Building the PLMN ID
- *
- * @params[in] PLMNID plmn
- * OCTET_STRING_t *octe
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-uint8_t buildPlmnId(Plmn plmn, OCTET_STRING_t *octe)
-{
- uint8_t mncCnt;
- mncCnt = 2;
- octe->buf[0] = ((plmn.mcc[1] << 4) | (plmn.mcc[0]));
- if(mncCnt == 2)
- {
- octe->buf[1] = ((0xf0) | (plmn.mcc[2]));
- octe->buf[2] = ((plmn.mnc[1] << 4) | (plmn.mnc[0]));
- }
- else
- {
- octe->buf[1] = ((plmn.mnc[0] << 4) | (plmn.mcc[2]));
- octe->buf[2] = ((plmn.mnc[2] << 4) | (plmn.mnc[1]));
- }
- return ROK;
-}
-
/*******************************************************************
*
* @brief Fills the RicId
*
* ****************************************************************/
-uint8_t fillBitString(BIT_STRING_t *id, uint8_t unusedBits, uint8_t byteSize, uint8_t val)
+uint8_t fillBitString(BIT_STRING_t *id, uint8_t unusedBits, uint8_t byteSize, uint64_t data)
{
- uint8_t tmp;
+ uint64_t tmp = 0;
+ uint8_t byteIdx = 0;
+
if(id->buf == NULLP)
{
+ DU_LOG("\nERROR --> DU_APP : Buffer allocation is empty");
return RFAILED;
}
-
- for (tmp = 0 ; tmp < (byteSize-1); tmp++)
+ memset(id->buf, 0, byteSize);
+ data = data << unusedBits;
+
+ /*Now, seggregate the value into 'byteSize' number of Octets in sequence:
+ * 1. Pull out a byte of value (Starting from MSB) and put in the 0th Octet
+ * 2. Fill the buffer/String Octet one by one until LSB is reached*/
+ for(byteIdx = 1; byteIdx <= byteSize; byteIdx++)
{
- id->buf[tmp] = tmp;
+ tmp = (uint64_t)0xFF;
+ tmp = (tmp << (8 * (byteSize - byteIdx)));
+ tmp = (data & tmp) >> (8 * (byteSize - byteIdx));
+ id->buf[byteIdx - 1] = tmp;
}
- id->buf[byteSize-1] = val;
id->bits_unused = unusedBits;
return ROK;
}
* RFAILED - failure
*
* ****************************************************************/
-uint8_t bitStringToInt(BIT_STRING_t *bitString, uint16_t *val)
+uint8_t bitStringToInt(BIT_STRING_t *bitString, void *value)
{
uint16_t idx;
+ uint64_t *val = NULLP;
+
if(bitString->buf == NULL || bitString->size <= 0)
{
- DU_LOG("\nDU_APP : Bit string is empty");
+ DU_LOG("\nERROR --> DU_APP : Bit string is empty");
return RFAILED;
}
+ if(value)
+ val = (uint64_t *)value;
+ else
+ return RFAILED;
+
for(idx=0; idx< bitString->size-1; idx++)
{
*val |= bitString->buf[idx];
*val <<= 8;
- }
+ }
*val |= bitString->buf[idx];
*val >>= bitString->bits_unused;
return ROK;
}
+/*******************************************************************
+ *
+ * @brief Function to decode teId value from the octect String
+ *
+ * @details
+ *
+ * Function : teIdStringToInt
+ *
+ * Functionality: Function to decode teId value from the octect string
+ * It can used as generic function to convert
+ * octect string to uint32_t value
+ *
+ * @params[in] buf, value
+ * @return void
+ *
+ * ****************************************************************/
+void teIdStringToInt(uint8_t *buf, uint32_t *val)
+{
+ uint32_t temp1 = 0, temp2 = 0, temp3 = 0;
+
+ temp1 |= buf[0];
+ temp1 <<= 24;
+
+ temp2 |= buf[1];
+ temp2 <<= 16;
+
+ temp3 |= buf[2];
+ temp3 <<= 8;
+
+ *val = temp1|temp2|temp3|buf[3];
+}
+
+/*******************************************************************
+ *
+ * @brief Function to encode teId value to the octect String
+ *
+ * @details
+ *
+ * Function : fillTeIdString
+ *
+ * Functionality: Function to encode teId value to the octect String
+ * It can used as generic function to encode
+ * uint32_t value to octect string
+ *
+ * @params[in] bufSize, value, buf
+ * @return void
+ *
+ * ****************************************************************/
+
+void fillTeIdString(uint8_t bufSize, uint32_t val, uint8_t *buf)
+{
+ uint8_t bitPos;
+ for(bitPos = 0; bitPos < TEID_BIT_SIZE; bitPos += 8, bufSize--)
+ {
+ /*extracting bitBits from the bitPos*/
+ buf[bufSize] = (((1 << 8) - 1) & (val >> (bitPos)));
+ }
+}
/**********************************************************************
End of file