FreeCalypso > hg > fc-magnetite
view src/gpf2/inc/ccdapi.h @ 336:be011556e71f
FCHG: API implementation started
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 14 Dec 2017 21:01:59 +0000 |
parents | 864b8cc0cf63 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : | Modul : ccdapi.h +----------------------------------------------------------------------------- | 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 : Condat Coder Decoder Application Interface | | Use this header to integrate the condat coder decoder | in your target system ! | | The application must define USE_DRIVER if CCD is | not linked but used as a driver +----------------------------------------------------------------------------- */ #ifndef CCDAPI_H #define CCDAPI_H #ifdef __cplusplus extern "C" { #endif /*_cplusplus*/ /************************************************************** Types and constants for CCD used in application, in stub1 (api) and in driver body **************************************************************/ /*==== CONSTANTS ==================================================*/ /* * constants for the direction-parameter for coding/decoding */ #define UPLINK 0 #define DOWNLINK 1 #define BOTH UPLINK /* ccd Error codes */ #define ccdOK 0 #define ccdWarning 1 #define ccdError 2 #ifdef _TOOLS_ #define CCD_DLL_ERROR 23 #endif /* _TOOLS_ */ /* reentrancy */ #define CCD_REENTRANT 0 /* * Error codes to use with ccd_setError() */ #define ERR_NO_MORE_ERROR 0 /* Returned by ccd_getFirst/NextError */ /* in case of the end of the error list */ #define ERR_INVALID_CALC 1 /* Invalid combination of calculations */ /* Error params: none */ #define ERR_PATTERN_MISMATCH 2 /* A spare pattern does not match with */ /* the specified content */ /* Error params[0] = bitposition */ #define ERR_COMPREH_REQUIRED 3 /* Comprehension of an unknown TAG */ /* required. */ /* Error params[0] = TAG */ /* [1] = bitposition */ #define ERR_IE_NOT_EXPECTED 4 /* Unknown or unexpected TAG found */ /* Error params[0] = TAG */ /* [1] = bitposition */ #define ERR_IE_SEQUENCE 5 /* A valid TAG is found but not in the */ /* defined sequence. */ /* Error params[0] = TAG */ /* [1] = bitposition */ #define ERR_MAX_IE_EXCEED 6 /* A repeatable TAG is found but it */ /* occurs more often than it is defined */ /* Error params[0] = TAG */ /* [1] = bitposition */ #define ERR_MAND_ELEM_MISS 7 /* A as mandatory defined element is */ /* not in the message */ /* Error params: none */ #define ERR_EOC_TAG_MISSING 8 /* A indefinite length is specified for */ /* an ASN.1 element but the correspond. */ /* End of Component TAG is missing */ /* Error params[0] = TAG */ /* [1] = bitposition */ #define ERR_INVALID_MID 9 /* The message starts with an undefined */ /* message identifier; more exactly: */ /* with the three given parameters mId, */ /* entity, and direction for the coding */ /* or decoding of a Message functions */ /* CCD was not able to identify the */ /* Message */ /* Error params[0] = Message ID */ #define ERR_INVALID_TYPE 10 /* The actual element has an invalid */ /* type e.g. S_PADDING without a spare */ /* Error params[0] = bitposition */ #define ERR_MAX_REPEAT 11 /* A repeatable element occurs to often */ /* in the message */ #define ERR_NO_MEM 12 /* Memory allocation failed. May result */ /* occur when using pointer types. */ /* (Dynamic array addition) */ #define ERR_ADDR_INFO_PART 13 /* CCD recognizes a message with a */ /* disallowed addressing option */ #define ERR_DISTRIB_PART 14 /* CCD recognizes an error during */ /* decoding of the message distribution */ /* part */ #define ERR_NON_DISTRIB_PART 15 /* CCD recognizes an error during */ /* decoding of the message non- */ /* distribution part */ #define ERR_MESSAGE_ESCAPE 16 /* CCD detects an unknown message part, */ /* which is marked whith a message */ /* escape error label being used to */ /* provide an escape for, e.g. a future */ /* modification of the message syntax */ #define ERR_IGNORE 17 /* CCD detects a part of the message */ /* that is syntactically incorrect and */ /* is allowed to ignore this part */ #define ERR_18 18 /* dummy to complete error list - */ /* may be used in furture enhancement */ #define ERR_19 19 /* dummy to complete error list - */ /* may be used in furture enhancement */ #define ERR_INTERNAL_ERROR 20 /* An internal error occured */ /* (hopefully not!) */ /* Error params[0] = none */ #define ERR_DEFECT_CCDDATA 21 /* The value read from a ccd table */ /* (one of the *.cdg files) is not */ /* expected by CCD, e.g. extGroup has */ /* another value than ' ', '+', '-', */ /* '!' or '#'. */ /* Error params[0] = bitposition */ /* this error code is needed only in */ /* the development phase. */ #define ERR_END_OF_BUF 22 /* According to the lenght indicator */ /* there must be more bits to read but */ /* end of bit buffer is reached */ #define ERR_INT_VALUE 23 /* Error on encoding of integer value. */ /* IE of coding type ASN1_INTEGER is */ /* out of the given range. */ #define ERR_LONG_MSG 24 /* UNUSED error code */ /* According to l_buf and due to an */ /* unknown message extension there are */ /* more bits to be decoded than CCD or */ /* ccddata expects. */ #define ERR_ASN1_ENCODING 25 /* Error on IE in the outermost level. */ #define ERR_ASN1_MAND_IE 26 /* Error on mandatory IE of type */ /* ASN1_INTEGER. The decoded value is */ /* out of the range given by the loaded */ /* ccd data tables. */ /* data tables. */ #define ERR_ASN1_OPT_IE 27 /* Error on optional IE of type. */ /* ASN1_INTEGER. The decoded value is */ /* out of the range given by the loaded */ /* ccd data tables. */ #define ERR_ASN1_COND_IE 28 /* UNUSED error code */ #define ERR_COND_ELEM_MISS 29 /* UNUSED error code */ /* Condition is met but the IE is not */ /* present in the message. */ #define ERR_BUFFER_OF 30 /* On coding, more bits were written, */ /* than the input l_buf suggested. */ #define ERR_NONCRITICAL_EXT 31 /* Warning (if decoding) or error (if */ /* encoding) on inappropriate usage of */ /* a nonCriticalExtensions element. */ /* The CCDTYPE_NONCRITICAL_EXTENSIONS */ /* says the IE is not extended yet from */ /* a CCD point of view. So it needs */ /* neither to be encoded nor decoded. */ /* In the latter case additional parts */ /* at the end the message will be */ /* ignored by CCD. Known extensions are */ /* to be encoded by CCD. */ #define ERR_CRITICAL_EXT 32 /* Error on inappropriate usage of a */ /* nonCriticalExtensions element. The */ /* CCDTYPE_CRITICAL_EXTENSIONS says */ /* the IE is not extended yet, from a */ /* CCD point of view. So it needs not */ /* to be encoded or decoded. In latter */ /* case message is not comprehendable */ /* and must be rejected. */ #define ERR_INVALID_CCDID 33 /* The ccd identifier for the element */ /* to be decoded did not result a valid */ /* data table entry. */ #define ERR_MSG_LEN 34 /* Decoding is just finished. But the */ /* CCD internal bit pointer is beyond */ /* the given message length, l_buf e.g. */ #define ERR_INVALID_PTR 35 /* Pointer used in C struct for encoding*/ /* is not valid. */ #define ERR_PROTOCOL_EXTENSION 36 /* IE of type S_PADDING_0 is preceded */ /* by 1 instead of 0. */ /* Error params[0] = CCDID */ /* [1] = bitposition */ #define ERR_BITSTR_COMP 37 /* Length of bit array encoded as */ /* composition is bigger than expected */ /* Error params[0] = CCDID */ /* [1] = addr in C-struct */ #define ERR_ELEM_LEN 38 /* The current information element's */ /* length doesn't match to the length */ /* required by its nested elements */ #define ERR_LEN_MISMATCH 39 /* The length of a superordinated */ /* doesn't match to read an GSM5_V */ /* element, which extends to the */ /* message end. */ #define ERR_CONCAT_LEN 40 /* Coding of a truncated concatenation */ /* doesn't fill the rest of message */ /* buffer.(length given by l_buf) */ #define ERR_UNEXPECT_PAD 41 /* an inchoate byte is filled with */ /* padding bits which are not expected */ #define ERR_CSN1_CHOICE 42 /* the number of CHOICE components */ /* doesn't match to number of possible */ /* alternatives */ #define MAX_CCD_ERROR 43 /* * max number of parameters per error for parlist * param ccd_getFirst/NextError */ #define MAX_ERR_PAR 3 #define CCD_ERR_KIND_PARA_LIST 1 #define CCD_ERR_KIND_IE_TYPE 2 /*==== TYPES ======================================================*/ /* * T_MSGBUF contains the coded message. * o_buf specified the * offset (in Bits), * where the message * starts in the buffer. * l_buf contains the * length (in Bits) of the coded message. * buf contains the * bitcoded message as an array of Bytes. * * (Do not modify this structure !) */ typedef struct { USHORT l_buf; USHORT o_buf; UBYTE buf [1]; } T_MSGBUF; /* * new style of error information container, used in umts */ #ifdef CCD_USE_ENUM_IDS #include "ccdid.h" /* to get enumeration for fault elements */ typedef T_CCD_ID T_ERR_INFO; #else typedef ULONG T_ERR_INFO; #endif typedef struct { T_ERR_INFO err_info; ULONG err_IEaddr; } T_CCD_ERR_TYPE; /* * old style of error information container, used in gsm/gprs */ #define MAX_ERR_PAR 3 typedef struct { UBYTE num_para; USHORT err_list[MAX_ERR_PAR]; } T_CCD_PARA_LIST; /* * union supports old and new type of error information container */ typedef union { T_CCD_PARA_LIST para_list; T_CCD_ERR_TYPE err_type; } T_CCD_ERR_PARA; /* * general structure for error information passed to CCD caller */ typedef struct { UBYTE error; UBYTE kind; T_CCD_ERR_PARA para; } T_CCD_ERR_ENTRY; /************************************************************** function codes for CCD interface functions used in stub1 (application side) and stub2 (driver side) **************************************************************/ #define CCD_INIT 1 #define CCD_CODMSG 2 #define CCD_DECMSG 3 #define CCD_DECBYTE 4 #define CCD_CODBYTE 5 #define CCD_DECLONG 6 #define CCD_CODLONG 7 #define CCD_BITCOPY 8 #define CCD_FIRST_ERR 9 #define CCD_NEXT_ERR 10 #if !defined (CCDDATA_PREF) #if defined (_TOOLS_) && defined (CCDDATA_LOAD) #define CCDDATA_PREF(ccd_fun) cddl_##ccd_fun #else #define CCDDATA_PREF(ccd_fun) ccd_fun #endif /* _TOOLS_ && CCDDATA_LOAD */ #endif /* !CCDDATA_PREF */ #if defined _TOOLS_ || defined (CCD_TEST) /* * Preparation for issue patching coded bits for generating * air messages with errors. This feature is not yet supported * by CCD. */ #define CCDP_NO_ERROR 0 #define CCDP_NOT_FOUND 1 #define CCDP_VALIDFLAG_SEEN 2 #define CCDP_UNKNOWN_ERROR 3 #define MAXREC 50 typedef struct { U16 elemid[MAXREC]; U16 numelems; U16 bitwidth; U8* bits; U8 errorcode; } T_patch_info; #endif /* _TOOLS_ */ /*==================== description ===================================*/ /* * ccd_init * * Initializing the ccd-Module, must be called once before * any encoding/decoding */ /* * ccd_begin * * Returns the address of the CCD buffer for decoded * messages and locks it until ccd_end() is called */ /* * ccd_end * * Unlocks the CCD buffer for decoded * messages */ /* * ccd_codeMsg * * layer : <IN> CCDENT_CMCE, CCDENT_MLE .. * direction: <IN> UPLINK, DOWNLINK * mBuf : <IN> mBuf.o_buf - Offset in Bits from the * start of mBuf.buf. * <OUT> mBuf.l_buf - Contains the length of * the message in Bits after * coding. * <OUT> mBuf.buf - Contains the bitcoded message * after coding. * mStruct: <IN> Pointer to the message specific structure. * The first element must contain the * message-type (PDU-Type) as a UBYTE value. * * pt : <IN> If pt != 0xff the CCD will not decode the * the PDU-Type from the bitstream. In this * case pt is the coding of the PDU-Type. */ /* * ccd_decodeMsg * * layer : <IN> CCDENT_CMCE, CCDENT_MLE, ... * direction: <IN> UPLINK, DOWNLINK * mBuf : <IN> mBuf.o_buf - Offset in Bits from start * of mBuf.buf where the * message starts. * <IN> mBuf.l_buf - Contains the length of the * message in Bits. * <IN> mBuf.buf - Contains the bitcoded message. * mStruct : <OUT> Pointer to the message specific structure. * The first element contains the message-type * (PDU-Type) as a UBYTE value after decoding. * pt : <IN> If pt != 0xff the CCD will not decode the * the PDU-Type from the bitstream. In this * case pt is the coding of the PDU-Type. */ /************************************************************** function prototypes for CCD interface functions used in application, stub2 (driver side) and driver body **************************************************************/ #ifndef CCD_PATCH_C #ifdef _TOOLS_ extern int CCDDATA_PREF(ccd_set_patch_infos) (T_patch_info* pinfo); #endif /* _TOOLS_ */ #endif /* CCD_PATCH_C */ #ifndef CCD_C extern BYTE CCDDATA_PREF(ccd_init) (void); extern int CCDDATA_PREF(ccd_exit) (void); extern UBYTE* CCDDATA_PREF(ccd_begin) (void); extern void CCDDATA_PREF(ccd_end) (void); extern BYTE CCDDATA_PREF(ccd_decodeMsg) (UBYTE entity, UBYTE direction, T_MSGBUF *mBuf, UBYTE *mStruct, UBYTE pt); extern S8 CCDDATA_PREF(ccd_decodeMsgPtr) (U8 entity, U8 direction, U16 l_buf, U16 o_buf, U8 *buf, U8 **mStructPtr, U8 pt); extern BYTE CCDDATA_PREF(ccd_codeMsg) (UBYTE entity, UBYTE direction, T_MSGBUF *mBuf, UBYTE *mStruct, UBYTE pt); extern S8 CCDDATA_PREF(ccd_codeMsgPtr) (U8 entity, U8 direction, U16 *l_buf, U16 o_buf, U8 *buf, U8 *mStruct, U8 pt); extern UBYTE ccd_setStore (ULONG regNo, ULONG value); #ifdef _TOOLS_ extern ULONG CCDDATA_PREF(ccd_init_ccddata) (void); #else extern int ccd_register (int decmsgbuf_size); #endif /* _TOOLS_ */ #endif /*! CCD_C */ #ifndef CCD_ELEM_C extern int CCDDATA_PREF(ccd_encodeElem) (ULONG ccdid, USHORT *l_buf, USHORT o_buf, UCHAR *buf, UCHAR *eStruct); extern int CCDDATA_PREF(ccd_decodeElem) (ULONG ccdid, USHORT l_buf, USHORT o_buf, UCHAR *buf, UCHAR *eStruct); #endif /* CCD_ELEM_C */ #ifndef CCD_ERR_C extern UBYTE CCDDATA_PREF(ccd_getFirstError) (UBYTE entity, USHORT *parlist); extern UBYTE CCDDATA_PREF(ccd_getNextError) (UBYTE entity, USHORT *parlist); extern ULONG CCDDATA_PREF(ccd_getFirstFault) (T_CCD_ERR_ENTRY **ccd_err_entry); extern ULONG CCDDATA_PREF(ccd_getNextFault) (T_CCD_ERR_ENTRY **ccd_err_entry); extern void CCDDATA_PREF(ccd_free_faultlist) (void); extern int CCDDATA_PREF(ccd_get_numFaults) (void); #endif /*! CCD_ERR_C */ #ifndef CDC_STD_C extern BYTE CCDDATA_PREF(ccd_decodeByte) (UBYTE *bitstream, USHORT startbit, USHORT bitlen, UBYTE *value); extern BYTE CCDDATA_PREF(ccd_codeByte) (UBYTE *bitstream, USHORT startbit, USHORT bitlen, UBYTE val); extern BYTE CCDDATA_PREF(ccd_codeLong) (UBYTE *bitstream, USHORT startbit, USHORT bitlen, ULONG value); extern BYTE CCDDATA_PREF(ccd_decodeLong) (UBYTE *bitstream, USHORT startbit, USHORT bitlen, ULONG *value); extern void CCDDATA_PREF(ccd_bitcopy) (UBYTE *dest, UBYTE *source, USHORT bitlen, USHORT offset); #endif /*! CCD_STD_C */ #ifdef __cplusplus } #endif /*_cplusplus*/ #endif