Created an asn1 conversions file in common utils to perform conversion from ASN1 structure to integers.
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4412 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -8,5 +8,6 @@ ITTI_OBJS += $(ITTI_DIR)/timer.o
|
||||
|
||||
UTILS_OBJS = $(ITTI_OBJS)
|
||||
|
||||
UTILS_incl = \
|
||||
UTILS_incl = \
|
||||
-I$(COMMON_UTILS_DIR) \
|
||||
-I$(ITTI_DIR)
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
/*******************************************************************************
|
||||
|
||||
Eurecom OpenAirInterface 3
|
||||
Copyright(c) 1999 - 2010 Eurecom
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
version 2, as published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
The full GNU General Public License is included in this distribution in
|
||||
the file called "COPYING".
|
||||
|
||||
Contact Information
|
||||
Openair Admin: openair_admin@eurecom.fr
|
||||
Openair Tech : openair_tech@eurecom.fr
|
||||
Forums : http://forums.eurecom.fsr/openairinterface
|
||||
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef ASN1_CONVERSIONS_H_
|
||||
#define ASN1_CONVERSIONS_H_
|
||||
|
||||
#include "BIT_STRING.h"
|
||||
#include "UTIL/assertions.h"
|
||||
|
||||
//-----------------------begin func -------------------
|
||||
|
||||
/*! \fn uint8_t BIT_STRING_to_uint8(BIT_STRING_t *)
|
||||
*\brief This function extract at most a 8 bits value from a BIT_STRING_t object, the exact bits number depend on the BIT_STRING_t contents.
|
||||
*\param[in] pointer to the BIT_STRING_t object.
|
||||
*\return the extracted value.
|
||||
*/
|
||||
inline uint8_t BIT_STRING_to_uint8(BIT_STRING_t *asn) {
|
||||
DevCheck ((asn->size == 1), asn->size, 0, 0);
|
||||
|
||||
return asn->buf[0] >> asn->bits_unused;
|
||||
}
|
||||
|
||||
/*! \fn uint16_t BIT_STRING_to_uint16(BIT_STRING_t *)
|
||||
*\brief This function extract at most a 16 bits value from a BIT_STRING_t object, the exact bits number depend on the BIT_STRING_t contents.
|
||||
*\param[in] pointer to the BIT_STRING_t object.
|
||||
*\return the extracted value.
|
||||
*/
|
||||
inline uint16_t BIT_STRING_to_uint16(BIT_STRING_t *asn) {
|
||||
uint16_t result = 0;
|
||||
int index = 0;
|
||||
|
||||
DevCheck ((asn->size > 0) && (asn->size <= 2), asn->size, 0, 0);
|
||||
|
||||
switch (asn->size) {
|
||||
case 2:
|
||||
result |= asn->buf[index++] << (8 - asn->bits_unused);
|
||||
|
||||
case 1:
|
||||
result |= asn->buf[index] >> asn->bits_unused;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*! \fn uint32_t BIT_STRING_to_uint32(BIT_STRING_t *)
|
||||
*\brief This function extract at most a 32 bits value from a BIT_STRING_t object, the exact bits number depend on the BIT_STRING_t contents.
|
||||
*\param[in] pointer to the BIT_STRING_t object.
|
||||
*\return the extracted value.
|
||||
*/
|
||||
inline uint32_t BIT_STRING_to_uint32(BIT_STRING_t *asn) {
|
||||
uint32_t result = 0;
|
||||
int index;
|
||||
int shift;
|
||||
|
||||
DevCheck ((asn->size > 0) && (asn->size <= 4), asn->size, 0, 0);
|
||||
|
||||
shift = ((asn->size - 1) * 8) - asn->bits_unused;
|
||||
for (index = 0; index < (asn->size - 1); index++) {
|
||||
result |= asn->buf[index] << shift;
|
||||
shift -= 8;
|
||||
}
|
||||
|
||||
result |= asn->buf[index] >> asn->bits_unused;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*! \fn uint64_t BIT_STRING_to_uint64(BIT_STRING_t *)
|
||||
*\brief This function extract at most a 64 bits value from a BIT_STRING_t object, the exact bits number depend on the BIT_STRING_t contents.
|
||||
*\param[in] pointer to the BIT_STRING_t object.
|
||||
*\return the extracted value.
|
||||
*/
|
||||
inline uint64_t BIT_STRING_to_uint64(BIT_STRING_t *asn) {
|
||||
uint64_t result = 0;
|
||||
int index;
|
||||
int shift;
|
||||
|
||||
DevCheck ((asn->size > 0) && (asn->size <= 8), asn->size, 0, 0);
|
||||
|
||||
shift = ((asn->size - 1) * 8) - asn->bits_unused;
|
||||
for (index = 0; index < (asn->size - 1); index++) {
|
||||
result |= asn->buf[index] << shift;
|
||||
shift -= 8;
|
||||
}
|
||||
|
||||
result |= asn->buf[index] >> asn->bits_unused;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user