FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/ccd/csn1_sx.c @ 661:c36fe9d1da7e
gsm-fw/ccd/README: added paragraph explaining how ccddata depends on cdginc
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> | 
|---|---|
| date | Fri, 26 Sep 2014 00:49:59 +0000 | 
| parents | 970d6199f2c5 | 
| children | 
| rev | line source | 
|---|---|
| 648 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 1 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 2 +----------------------------------------------------------------------------- | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 3 | Project : CCD | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 4 | Modul : csn1_sx.c | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 5 +----------------------------------------------------------------------------- | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 6 | Copyright 2002 Texas Instruments Berlin, AG | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 7 | All rights reserved. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 8 | | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 9 | This file is confidential and a trade secret of Texas | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 10 | Instruments Berlin, AG | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 11 | The receipt of or possession of this file does not convey | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 12 | any rights to reproduce or disclose its contents or to | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 13 | manufacture, use, or sell anything it may describe, in | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 14 | whole, or in part, without the specific written consent of | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 15 | Texas Instruments Berlin, AG. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 16 +----------------------------------------------------------------------------- | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 17 | Purpose : Definition of encoding and decoding functions for CSN1_S0 elements | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 18 +----------------------------------------------------------------------------- | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 19 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 20 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 21 * standard definitions like GLOBAL, UCHAR, ERROR etc. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 22 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 23 #include "typedefs.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 24 #include "header.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 25 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 26 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 27 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 28 * Prototypes of ccd (USE_DRIVER EQ undef) for prototypes only | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 29 * look at ccdapi.h | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 30 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 31 #undef USE_DRIVER | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 32 #include "ccdapi.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 33 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 34 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 35 * Types and functions for bit access and manipulation | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 36 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 37 #include "ccd_globs.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 38 #include "bitfun.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 39 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 40 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 41 * Prototypes of ccd internal functions | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 42 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 43 #include "ccd.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 44 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 45 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 46 * Declaration of coder/decoder tables | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 47 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 48 #include "ccdtable.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 49 #include "ccddata.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 50 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 51 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 52 * Need memory allocation functions for dynamic arrays (pointers) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 53 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 54 #ifdef DYNAMIC_ARRAYS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 55 #include "vsi.h" | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 56 #include <string.h> | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 57 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 58 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 59 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 60 #ifndef RUN_FLASH | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 61 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 62 +--------------------------------------------------------------------+ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 63 | PROJECT : CCD (6144) MODULE : CCD | | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 64 | STATE : code ROUTINE : cdc_csn1_sx_decode | | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 65 +--------------------------------------------------------------------+ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 66 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 67 PURPOSE : The encoded IE consists of one bit for presence flag and | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 68 a value part. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 69 In case of CSN1_S1 only if the flag bit is equal 1 the | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 70 value part will follow it. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 71 In case of CSN1_S0 only if the flag bit is equal 0 the | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 72 value part will follow it. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 73 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 74 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 75 SHORT cdc_csn1_sx_decode (int flag, const ULONG e_ref, T_CCD_Globs *globs) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 76 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 77 ULONG repeat, max_rep, act_offset; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 78 ULONG amount = 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 79 BOOL is_variable; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 80 ULONG cix_ref, num_prolog_steps, prolog_step_ref; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 81 #ifdef DYNAMIC_ARRAYS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 82 U8 *old_pstruct = NULL; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 83 U8 *addr = NULL; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 84 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 85 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 86 #ifdef DEBUG_CCD | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 87 #ifndef CCD_SYMBOLS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 88 TRACE_CCD (globs, "cdc_csn1_sx_decode()"); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 89 #else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 90 TRACE_CCD (globs, "cdc_csn1_sx_decode() %s", ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 91 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 92 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 93 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 94 globs->SeekTLVExt = FALSE; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 95 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 96 cix_ref = melem[e_ref].calcIdxRef; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 97 num_prolog_steps = calcidx[cix_ref].numPrologSteps; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 98 prolog_step_ref = calcidx[cix_ref].prologStepRef; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 99 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 100 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 101 * If this element is conditional, check the condition. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 102 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 103 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 104 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 105 return 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 106 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 107 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 108 * If this element has a defined prologue | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 109 * we have to process it before decoding the bitstream. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 110 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 111 if (num_prolog_steps) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 112 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 113 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 114 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 115 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 116 if (melem[e_ref].repType NEQ ' ') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 117 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 118 is_variable = ccd_calculateRep (e_ref, &repeat, &max_rep, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 119 /* Structured IE is to be handeled as bitstring.*/ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 120 if (melem[e_ref].repType == 's') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 121 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 122 repeat--; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 123 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 124 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 125 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 126 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 127 is_variable = FALSE; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 128 repeat = 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 129 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 130 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 131 #ifdef DYNAMIC_ARRAYS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 132 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 133 * Check for pointer types; allocate memory if necessary. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 134 * May overwrite globs->pstruct (and initialize globs->pstructOffs to 0). | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 135 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 136 if ( is_pointer_type(e_ref) ) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 137 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 138 U32 cSize; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 139 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 140 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 141 * Find size to allocate; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 142 * - Read from mcomp or mvar according to type | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 143 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 144 cSize = (ULONG)((melem[e_ref].elemType EQ 'F' OR | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 145 melem[e_ref].elemType EQ 'R') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 146 ? mvar[melem[e_ref].elemRef].cSize | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 147 : mcomp[melem[e_ref].elemRef].cSize | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 148 ) * repeat; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 149 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 150 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 151 * Allocate additional memory | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 152 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 153 addr = (U8 *)DP_ALLOC( cSize, globs->alloc_head, DP_NO_FRAME_GUESS); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 154 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 155 /* If no memory, log error and return immediately */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 156 if (addr EQ NULL) { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 157 ccd_setError (globs, ERR_NO_MEM, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 158 BREAK, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 159 (USHORT) -1); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 160 return 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 161 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 162 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 163 memset (addr, 0, (size_t)cSize); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 164 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 165 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 166 * Memory allocated; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 167 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 168 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 169 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 170 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 171 if (melem[e_ref].elemType NEQ 'S') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 172 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 173 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 174 * Element is not a SPARE. Setup the struct pointer. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 175 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 176 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 177 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 178 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 179 if (is_variable) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 180 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 181 UBYTE *addr_v_xxx = NULL; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 182 UBYTE *addr_c_xxx; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 183 UBYTE act_continue_array; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 184 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 185 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 186 if (melem[e_ref].optional) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 187 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 188 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 189 * For optional elements we must set the valid-flag, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 190 * if there is at least one element in the message. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 191 * Therefore we store the address of the valid flag. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 192 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 193 /* Dynamic array addition. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 194 * Postpone optional flag setting for non-code transparent | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 195 * pointer types ('P', 'Q', 'R'). | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 196 * For these types, the optional flag is the pointer itself. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 197 * These types cannot be set yet, as the pointer may be | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 198 * preceeded by a counter octet, a union tag id octet etc. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 199 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 200 if (melem[e_ref].elemType < 'P' OR melem[e_ref].elemType > 'R') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 201 addr_v_xxx = (UBYTE *) (globs->pstruct + globs->pstructOffs++); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 202 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 203 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 204 * For variable sized elements store the min-value | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 205 * as counter into the C-Structure (c_xxx). | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 206 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 207 addr_c_xxx = (UBYTE *) (globs->pstruct + globs->pstructOffs++); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 208 if (max_rep > 255) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 209 globs->pstructOffs++; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 210 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 211 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 212 * Store the initial offset | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 213 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 214 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 215 act_offset = (ULONG) globs->pstructOffs; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 216 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 217 #ifdef DYNAMIC_ARRAYS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 218 if ( is_pointer_type(e_ref) ) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 219 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 220 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 221 * 1. Save old "globs->pstruct" variables | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 222 * 2. Store pointer to freshly allocated memory area in structure | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 223 * 3. Initialize pstruct to point to the freshly allocated memory area. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 224 * 4. Initialize pstructOffs to 0 to start decoding at offset 0 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 225 * in the new memory area. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 226 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 227 old_pstruct = globs->pstruct; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 228 *(U8 **)(globs->pstruct + globs->pstructOffs) = addr; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 229 globs->pstruct = addr; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 230 globs->pstructOffs = 0; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 231 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 232 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 233 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 234 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 235 * repType ='i': | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 236 * Repeat this element (if it is an array) until we detect a | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 237 * flag indicating absence. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 238 * | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 239 * repType ='v' and 'c': | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 240 * Repeat the IE and leave the loop. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 241 * | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 242 * In both cases we expect a 0 at first. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 243 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 244 if ((melem[e_ref].repType == 'v') || (melem[e_ref].repType == 'c')) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 245 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 246 amount = repeat; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 247 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 248 repeat = 0; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 249 act_continue_array = globs->continue_array; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 250 globs->continue_array = TRUE; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 251 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 252 while (globs->continue_array) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 253 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 254 if (flag == 0xFF) /* CSN1_SH type*/ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 255 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 256 if (bf_readBit(globs) != GET_HL_PREV(1)) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 257 break; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 258 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 259 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 260 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 261 if (bf_readBit(globs) != flag) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 262 break; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 263 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 264 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 265 * Flag is set, we must decode the element | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 266 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 267 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 268 cdc_decodeElemvalue (e_ref, &amount, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 269 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 270 if (++repeat > max_rep) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 271 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 272 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 273 * Too many repetitions means error in encoded message. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 274 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 275 ccd_setError (globs, ERR_MAX_REPEAT, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 276 BREAK, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 277 (USHORT) (globs->bitpos), | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 278 (USHORT) -1); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 279 return 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 280 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 281 else if (melem[e_ref].repType EQ 'v') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 282 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 283 repeat = amount; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 284 break; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 285 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 286 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 287 * Recalculate the struct offset for repeatable IEs. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 288 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 289 if (is_variable_type(e_ref)) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 290 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 291 globs->pstructOffs = (USHORT)(act_offset + | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 292 (repeat * mvar[melem[e_ref].elemRef].cSize)); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 293 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 294 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 295 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 296 globs->pstructOffs = (USHORT)(act_offset + | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 297 (repeat * mcomp[melem[e_ref].elemRef].cSize)); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 298 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 299 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 300 globs->continue_array = act_continue_array; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 301 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 302 #ifdef DYNAMIC_ARRAYS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 303 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 304 * Restore globs->pstruct | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 305 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 306 if (old_pstruct NEQ NULL) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 307 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 308 globs->pstruct = old_pstruct; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 309 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 310 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 311 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 312 if (addr_v_xxx NEQ NULL) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 313 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 314 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 315 * For optional elements set the valid-flag | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 316 * In this case the pointer addr_c_xxx does not mark | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 317 * the counter. It points to the valid flag. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 318 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 319 if (repeat > 0) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 320 *addr_v_xxx++ = (UBYTE) TRUE; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 321 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 322 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 323 * Store the number of digits into the c_xxx variable if there is one. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 324 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 325 if (max_rep > 65535) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 326 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 327 ULONG *addr_c_xxx_u32; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 328 addr_c_xxx_u32 = (ULONG *)addr_c_xxx; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 329 *addr_c_xxx_u32 = repeat; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 330 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 331 else if (max_rep > 255) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 332 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 333 USHORT *addr_c_xxx_u16; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 334 addr_c_xxx_u16 = (USHORT *)addr_c_xxx; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 335 *addr_c_xxx_u16 = (USHORT) repeat; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 336 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 337 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 338 *addr_c_xxx = (UBYTE) repeat; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 339 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 340 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 341 * IE is not defined as an array. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 342 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 343 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 344 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 345 BOOL elemPresent; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 346 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 347 if (flag == 0xFF) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 348 elemPresent = (bf_readBit(globs) EQ GET_HL_PREV(1)); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 349 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 350 elemPresent = (bf_readBit(globs) == flag); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 351 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 352 if (elemPresent) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 353 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 354 if (melem[e_ref].optional) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 355 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 356 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 357 * For optional elements set the valid-flag. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 358 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 359 globs->pstruct[globs->pstructOffs++] = (UBYTE) TRUE; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 360 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 361 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 362 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 363 * Flag is set, we must decode the element. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 364 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 365 cdc_decodeElemvalue (e_ref, &repeat, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 366 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 367 * process the epilogue expression for this element if there is any | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 368 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 369 if (num_prolog_steps) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 370 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 371 if ( (calc[prolog_step_ref+1].operation EQ 'K') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 372 || (calc[prolog_step_ref+1].operation EQ 'C') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 373 || (calc[prolog_step_ref+1].operation EQ 's')) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 374 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 375 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 376 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 377 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 378 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 379 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 380 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 381 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 382 return 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 383 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 384 #endif /* !RUN_FLASH */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 385 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 386 #ifndef RUN_FLASH | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 387 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 388 +--------------------------------------------------------------------+ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 389 | PROJECT : CCD (6144) MODULE : CDC_GSM | | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 390 | STATE : code ROUTINE : cdc_csn1_sx_encode | | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 391 +--------------------------------------------------------------------+ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 392 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 393 PURPOSE : Encoding of the CSN1 element. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 394 1) GSM Type CSN1 S1 element | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 395 This element consists of a 1 bit valid flag and a | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 396 value part. If the element is valid (the v_xxx | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 397 components is TRUE in the decoded message) a 1 bit will | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 398 be coded followed by the coding of the value part. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 399 Otherwise a 0 bit will be coded. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 400 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 401 2) GSM Type CSN1 S0 element | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 402 This element consists of a single bit valid flag and a | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 403 value part, too. But in this case the presence flag is | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 404 set to 0. If the element is present (the v_xxx component | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 405 is TRUE in the decoded message) a 0 bit will be coded | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 406 followed by the encoded value part. Otherwise a 1 bit | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 407 will be encoded. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 408 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 409 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 410 SHORT cdc_csn1_sx_encode (int flag, const ULONG e_ref, T_CCD_Globs *globs) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 411 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 412 ULONG i, repeat=1, amount=1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 413 USHORT cSize = 0, startOffset; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 414 int elemPresent; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 415 ULONG cix_ref, num_prolog_steps, prolog_step_ref; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 416 #ifdef DYNAMIC_ARRAYS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 417 U8 *old_pstruct = NULL; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 418 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 419 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 420 #ifdef DEBUG_CCD | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 421 #ifndef CCD_SYMBOLS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 422 TRACE_CCD (globs, "cdc_csn1_sx_encode()"); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 423 #else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 424 TRACE_CCD (globs, "cdc_csn1_sx_encode() %s", ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 425 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 426 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 427 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 428 cix_ref = melem[e_ref].calcIdxRef; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 429 num_prolog_steps = calcidx[cix_ref].numPrologSteps; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 430 prolog_step_ref = calcidx[cix_ref].prologStepRef; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 431 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 432 * If this element is conditional, check the condition. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 433 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 434 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 435 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 436 return 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 437 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 438 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 439 * If this element has a defined prologue | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 440 * we have to process it before decoding the bitstream. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 441 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 442 if (num_prolog_steps) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 443 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 444 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 445 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 446 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 447 if (melem[e_ref].elemType NEQ 'S') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 448 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 449 UBYTE act_continue_array; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 450 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 451 act_continue_array = globs->continue_array; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 452 globs->continue_array = TRUE; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 453 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 454 * Element is not a SPARE. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 455 * Setup the offset into the C-structure for this element | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 456 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 457 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 458 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 459 if (melem[e_ref].optional) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 460 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 461 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 462 * For optional elements check the valid-flag in the C-struct. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 463 * Spare elements does not have a corresponding valid flag. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 464 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 465 /* Dynamic array addition. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 466 * Postpone optional flag setting for non-code transparent | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 467 * pointer types ('P', 'Q', 'R'). | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 468 * For these types, the optional flag is the pointer itself. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 469 * These types cannot be set yet, as the pointer may be | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 470 * preceeded by a counter octet, a union tag id octet etc. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 471 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 472 if (melem[e_ref].elemType < 'P' OR melem[e_ref].elemType > 'R') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 473 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 474 if (globs->pstruct[globs->pstructOffs++] == FALSE) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 475 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 476 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 477 * The IE should not be present in the message so we code | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 478 * a single bit | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 479 * for CSN1_S1 as 0, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 480 * for CSN1_S0 as 1 and | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 481 * for CSN1_SH as GET_HL(0) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 482 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 483 if (flag == 0xFF) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 484 elemPresent = GET_HL(0); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 485 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 486 elemPresent = flag ^ 0x00000001; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 487 bf_writeBit (elemPresent, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 488 return 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 489 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 490 #ifdef DEBUG_CCD | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 491 else if (globs->pstruct [melem[e_ref].structOffs] != TRUE) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 492 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 493 TRACE_CCD (globs, "Ambiguous value for valid flag!\n...assumed 1 for ccdID=%d", | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 494 e_ref); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 495 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 496 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 497 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 498 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 499 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 500 /* As a default amount =1 due to initialization. */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 501 if (melem[e_ref].repType EQ 'i') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 502 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 503 /* The actual number of elements belonging to the array is unknown. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 504 * The user should have written the desired number to the C-Structure | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 505 * (c_xxx). CCD reads the number of these variable repeatable elements | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 506 * out of this C-Structure (c_xxx) and encodes each element with a | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 507 * preceeding bit set to '0'. The last element is followed by a bit | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 508 * set to '1' to indicate the end of this array. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 509 * If the number of repeats given by the C-Structure exceeds the | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 510 * allowed value (maxRepeat) CCD gives a warning! | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 511 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 512 if (melem[e_ref].maxRepeat > 255) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 513 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 514 ULONG count = (ULONG) (* (USHORT *)(globs->pstruct + globs->pstructOffs++)); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 515 repeat = MINIMUM (count, (ULONG) melem[e_ref].maxRepeat); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 516 if (repeat < count) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 517 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 518 (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 519 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 520 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 521 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 522 repeat = (ULONG) MINIMUM (globs->pstruct[globs->pstructOffs], | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 523 melem[e_ref].maxRepeat); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 524 if ( repeat < (ULONG) (globs->pstruct[globs->pstructOffs]) ) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 525 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 526 (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 527 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 528 amount = 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 529 globs->pstructOffs++; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 530 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 531 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 532 if (melem[e_ref].repType EQ 'v') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 533 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 534 /* The number of elements belonging to the array depends on the value | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 535 * of another element. The user should have written this number to the | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 536 * C-Structure (c_xxx). | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 537 * CCD reads the number of these variable repeatable elements out of | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 538 * this C-Structure (c_xxx). | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 539 * If the number of repetitions given by the C-Structure exceeds the | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 540 * allowed value (maxRepeat) CCD gives a warning! | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 541 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 542 if (melem[e_ref].maxRepeat > 255) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 543 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 544 ULONG count = (ULONG) (* (USHORT *)(globs->pstruct + globs->pstructOffs++)); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 545 amount = MINIMUM (count, (ULONG) melem[e_ref].maxRepeat); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 546 if (amount < count) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 547 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 548 (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 549 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 550 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 551 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 552 amount = (ULONG)MINIMUM (globs->pstruct[globs->pstructOffs], | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 553 melem[e_ref].maxRepeat); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 554 if ( amount < (ULONG) (globs->pstruct[globs->pstructOffs]) ) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 555 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 556 (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 557 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 558 repeat = 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 559 globs->pstructOffs++; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 560 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 561 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 562 if (melem[e_ref].repType EQ 'c') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 563 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 564 amount = (ULONG) melem[e_ref].maxRepeat; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 565 repeat = 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 566 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 567 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 568 if (melem[e_ref].repType == 's') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 569 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 570 BOOL is_variable; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 571 ULONG max_rep; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 572 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 573 is_variable = ccd_calculateRep (e_ref, &repeat, &max_rep, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 574 /* Substract one bit which will be spent on the (CSN.1) flag. */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 575 amount = repeat - 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 576 repeat = 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 577 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 578 if (melem[e_ref].repType EQ 'v' OR melem[e_ref].repType EQ 'i') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 579 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 580 cSize = (USHORT)((melem[e_ref].elemType EQ 'V' OR | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 581 melem[e_ref].elemType EQ 'R' OR melem[e_ref].elemType EQ 'F') | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 582 ? mvar[melem[e_ref].elemRef].cSize | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 583 : mcomp[melem[e_ref].elemRef].cSize | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 584 ); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 585 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 586 startOffset = (USHORT) globs->pstructOffs; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 587 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 588 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 589 /* Dynamic array addition. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 590 * Check for non-code transparent pointer types ('P', 'Q', 'R'). | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 591 * For these types, the optional flag is the pointer itself. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 592 * ASSUMPTION: The pointer may be preceeded by a counter octet, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 593 * a union tag id octet etc., but it is up to CCDGEN to ensure | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 594 * word alignment (by inserting alignment bytes). Therefore | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 595 * we just read from globs->pstruct[globs->pstructOffs]. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 596 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 597 #ifdef DEBUG_CCD | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 598 /* Check pointer alignment and re-align if necessary (should never happen) */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 599 if ( is_pointer_type(e_ref) AND ((globs->pstructOffs & 3) NEQ 0)) { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 600 TRACE_CCD (globs, "cdc_csn1_sx_encode(): Pointer misaligned! pstruct=0x08x," | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 601 " pstructOffs=0x%08x", globs->pstruct, globs->pstructOffs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 602 globs->pstructOffs = (globs->pstructOffs + 3) & 3; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 603 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 604 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 605 #ifdef DYNAMIC_ARRAYS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 606 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 607 * Perform pointer dereference for pointer types. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 608 * Also, check optionality for these types. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 609 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 610 if ( is_pointer_type(e_ref) ) { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 611 U8 *deref_pstruct; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 612 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 613 /* Get pointer value */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 614 deref_pstruct = *(U8 **)&globs->pstruct[globs->pstructOffs]; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 615 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 616 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 617 * Strictly speaking the 'D' to 'F' types should not need this | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 618 * check (should have returned after the optionality check above), | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 619 * but it will catch stray NULL pointers (or uninitialized | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 620 * valid flags) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 621 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 622 if (ccd_check_pointer(deref_pstruct) != ccdOK ) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 623 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 624 ccd_recordFault (globs, ERR_INVALID_PTR, BREAK, (USHORT) e_ref, | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 625 &globs->pstruct[globs->pstructOffs]); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 626 return 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 627 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 628 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 629 * Pointer not NULL; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 630 * 1. Save old globs->pstruct and assign pointer to globs->pstruct | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 631 * as new base. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 632 * 2. Set pstructOffs to 0 (zero) as the next offset will start | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 633 * in the new memory area. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 634 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 635 old_pstruct = globs->pstruct; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 636 globs->pstruct = deref_pstruct; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 637 startOffset = 0; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 638 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 639 #endif /* DYNAMIC_ARRAYS */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 640 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 641 for (i=0; i < repeat; i++) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 642 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 643 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 644 * The IE should be present in the message so we code 0 bit. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 645 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 646 if (flag == 0xFF) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 647 elemPresent = GET_HL(1); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 648 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 649 elemPresent = flag; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 650 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 651 bf_writeBit (elemPresent, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 652 if (cSize) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 653 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 654 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 655 * Calculate the offset if it is an array. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 656 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 657 globs->pstructOffs = (USHORT)(startOffset + (i * cSize)); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 658 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 659 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 660 * Encode the value. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 661 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 662 cdc_encodeElemvalue (e_ref, amount, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 663 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 664 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 665 #ifdef DYNAMIC_ARRAYS | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 666 if ( old_pstruct NEQ NULL ) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 667 globs->pstruct = old_pstruct; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 668 #endif | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 669 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 670 if ((melem[e_ref].repType == 'i') && (globs->continue_array == TRUE)) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 671 { | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 672 /* | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 673 * For fields of variable length we code a 1 flag | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 674 * to mark the end of the array. | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 675 */ | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 676 if (flag == 0xFF) | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 677 elemPresent = GET_HL(0); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 678 else | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 679 elemPresent = flag ^ 0x00000001; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 680 bf_writeBit (elemPresent, globs); | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 681 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 682 globs->continue_array = act_continue_array; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 683 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 684 | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 685 return 1; | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 686 } | 
| 
970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
 Michael Spacefalcon <msokolov@ivan.Harhan.ORG> parents: diff
changeset | 687 #endif /* !RUN_FLASH */ | 
