X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcodec_utils%2Fcommon%2Fodu_common_codec.c;h=a65aefc9e3c94f6fa35596bd1f5c600b38625e8a;hb=41eaaec52d3fe0d5c003e6c0676e9a18fc8ba37a;hp=92667dd2fdc3fb11418bb0889059637b1bdf501c;hpb=50ea541f2514f9c801736504a02671ada0643dfa;p=o-du%2Fl2.git diff --git a/src/codec_utils/common/odu_common_codec.c b/src/codec_utils/common/odu_common_codec.c index 92667dd2f..a65aefc9e 100644 --- a/src/codec_utils/common/odu_common_codec.c +++ b/src/codec_utils/common/odu_common_codec.c @@ -28,40 +28,6 @@ int PrepFinalEncBuf(const void *buffer, size_t size, void *encodedBuf) 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, uint8_t *buf) -{ - uint8_t mncCnt; - mncCnt = 2; - buf[0] = ((plmn.mcc[1] << 4) | (plmn.mcc[0])); - if(mncCnt == 2) - { - buf[1] = ((0xf0) | (plmn.mcc[2])); - buf[2] = ((plmn.mnc[1] << 4) | (plmn.mnc[0])); - } - else - { - buf[1] = ((plmn.mnc[0] << 4) | (plmn.mcc[2])); - buf[2] = ((plmn.mnc[2] << 4) | (plmn.mnc[1])); - } - return ROK; -} - /******************************************************************* * * @brief Fills the RicId @@ -82,19 +48,29 @@ uint8_t buildPlmnId(Plmn plmn, uint8_t *buf) * * ****************************************************************/ -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; } @@ -115,27 +91,92 @@ uint8_t fillBitString(BIT_STRING_t *id, uint8_t unusedBits, uint8_t byteSize, ui * 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