FreeCalypso > hg > freecalypso-sw
diff gsm-fw/ccd/asn1_objid.c @ 648:970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Thu, 04 Sep 2014 05:48:57 +0000 |
parents | |
children | 0dc6f9e8e980 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/ccd/asn1_objid.c Thu Sep 04 05:48:57 2014 +0000 @@ -0,0 +1,141 @@ + +/* ++------------------------------------------------------------------------------ +| File: asn1_objid.c ++------------------------------------------------------------------------------ +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG. +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++------------------------------------------------------------------------------ +| Purpose: Encoding and decoding functions for ASN1_OBJ_ID type +| +| $Identity:$ ++------------------------------------------------------------------------------ +*/ + +/* + * Standard definitions like UCHAR, ERROR etc. + */ +#include "typedefs.h" +#include "header.h" + +/* + * Prototypes of ccd (USE_DRIVER EQ undef) for prototypes only + * look at ccdapi.h + */ +#undef USE_DRIVER +#include "ccdapi.h" + +/* + * Types and functions for bit access and manipulation + */ +#include "ccd_globs.h" +#include "bitfun.h" + +/* + * Prototypes and constants in the common part of ccd + */ +#include "ccd.h" + +/* + * Declaration of coder/decoder tables + */ +#include "ccdtable.h" +#include "ccddata.h" + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------+ +| PROJECT : CCD (6144) MODULE : asn1_objid | +| STATE : code ROUTINE : cdc_asn1_obj_id_decode | ++------------------------------------------------------------------------+ + + PURPOSE : Decode PER OBJECT IDENTIFIER type + + The PER encoding of an object identifier type uses the + content octets of BER preceded by a length determinant + that will in practice be a single octet. +*/ +SHORT cdc_asn1_obj_id_decode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs) +{ + U8 BER_Len; + +#ifdef DEBUG_CCD + #ifndef CCD_SYMBOLS + TRACE_CCD (globs, "cdc_asn1_obj_id_decode()"); + #else + TRACE_CCD (globs, "cdc_asn1_obj_id_decode() %s", mcomp[melem[e_ref].elemRef].name); + #endif +#endif + + globs->pstructOffs = melem[e_ref].structOffs; + + /* For optional elements we have already set the valid flag in the + * C-structure. We have done it while processing ASN1_SEQ. + */ + if ( ! cdc_isPresent(e_ref, globs) ) { + return 1; + } + + /* + * Skip over PER length octet and BER tag octet. + */ + bf_incBitpos (16, globs); + + /* + * For unknown extension read the length and skip over the octets. + */ + BER_Len = (U8) bf_getBits (8, globs); + *(U8 *)(globs->pstruct + globs->pstructOffs++) = BER_Len; + + /* + * Copy the content of object identifier bytes into the C-Structure. + */ +#ifdef _TMS470 + bf_incBitpos (8 * BER_Len, globs); +#else + { + int i; + for (i=0; i < BER_Len; i++) + *(U8 *)(globs->pstruct + globs->pstructOffs++) = (U8) bf_getBits (8, globs); + } +#endif + + return 1; +} +#endif /* !RUN_INT_RAM */ + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------+ +| PROJECT : CCD (6144) MODULE : asn1_objid | +| STATE : code ROUTINE : cdc_asn1_obj_id_encode | ++------------------------------------------------------------------------+ + + PURPOSE : Encode PER OBJECT IDENTIFIER type + + The PER encoding of an object identifier type uses the + content octets of BER preceded by a length determinant + that will in practice be a single octet. +*/ +SHORT cdc_asn1_obj_id_encode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs) +{ + +#ifdef DEBUG_CCD + #ifndef CCD_SYMBOLS + TRACE_CCD (globs, "cdc_asn1_obj_id_encode()"); + #else + TRACE_CCD (globs, "cdc_asn1_obj_id_encode() %s", mcomp[melem[e_ref].elemRef].name); + #endif +#endif + + return 1; +} +#endif /* !RUN_INT_RAM */