comparison gsm-fw/ccd/gsm5_v.c @ 648:970d6199f2c5

gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Thu, 04 Sep 2014 05:48:57 +0000
parents
children
comparison
equal deleted inserted replaced
647:a60b375014e3 648:970d6199f2c5
1 /*
2 +-----------------------------------------------------------------------------
3 | Project :
4 | Modul : gsm5_v.c
5 +-----------------------------------------------------------------------------
6 | Copyright 2002 Texas Instruments Berlin, AG
7 | All rights reserved.
8 |
9 | This file is confidential and a trade secret of Texas
10 | Instruments Berlin, AG
11 | The receipt of or possession of this file does not convey
12 | any rights to reproduce or disclose its contents or to
13 | manufacture, use, or sell anything it may describe, in
14 | whole, or in part, without the specific written consent of
15 | Texas Instruments Berlin, AG.
16 +-----------------------------------------------------------------------------
17 | Purpose : Definition of encoding and decoding functions for GSM5_V elements
18 +-----------------------------------------------------------------------------
19 */
20
21
22 /*
23 * standard definitions like GLOBAL, UCHAR, ERROR etc.
24 */
25 #include "typedefs.h"
26 #include "header.h"
27
28 /*
29 * Prototypes of ccd (USE_DRIVER EQ undef) for prototypes only
30 * look at ccdapi.h
31 */
32 #undef USE_DRIVER
33 #include "ccdapi.h"
34
35 /*
36 * Types and functions for bit access and manipulation
37 */
38 #include "ccd_globs.h"
39 #include "bitfun.h"
40
41 /*
42 * Prototypes of ccd internal functions
43 */
44 #include "ccd.h"
45
46 /*
47 * Declaration of coder/decoder tables
48 */
49 #include "ccdtable.h"
50 #include "ccddata.h"
51
52 #ifndef RUN_INT_RAM
53 /*
54 +--------------------------------------------------------------------+
55 | PROJECT : CCD (6144) MODULE : CDC_GSM |
56 | STATE : code ROUTINE : cdc_gsm5v_decode |
57 +--------------------------------------------------------------------+
58
59 PURPOSE : Decoding of the GSM Type 5V element. This element
60 consists of the not decoded bits of the bitstream.
61 In the target C-structure this element is a bitbuffer
62 (T_xxx_BUF) in wich the bitstream content are written.
63
64 */
65
66 SHORT cdc_gsm5v_decode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs)
67 {
68 #ifdef DEBUG_CCD
69 #ifndef CCD_SYMBOLS
70 TRACE_CCD (globs, "cdc_gsm5v_decode()");
71 #else
72 TRACE_CCD (globs, "cdc_gsm5v_decode() %s", ccddata_get_alias((USHORT) e_ref, 1));
73 #endif
74 #endif
75
76 if (globs->bitpos >= globs->buflen)
77 {
78 return 1;
79 }
80 else
81 {
82 ULONG cix_ref;
83
84 cix_ref = melem[e_ref].calcIdxRef;
85
86 /*
87 * if this element is conditional, check the condition
88 */
89 if (calcidx[cix_ref].numCondCalcs NEQ 0
90 AND ! ccd_conditionOK (e_ref, globs))
91 {
92 return 1;
93 }
94 else
95 {
96 ULONG bits_to_read;
97 ULONG num_prolog_steps, prolog_step_ref;
98
99 num_prolog_steps = calcidx[cix_ref].numPrologSteps;
100 prolog_step_ref = calcidx[cix_ref].prologStepRef;
101
102 /* If there is a prologue given for this element, process it. */
103 if (num_prolog_steps)
104 {
105 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs);
106 }
107
108 /*
109 * Setup the offset into the C-structure for this element
110 */
111 globs->pstructOffs = melem[e_ref].structOffs;
112
113 if (melem[e_ref].optional)
114 {
115 /*
116 * for optional elements set the valid-flag in the C-struct.
117 */
118 globs->pstruct[globs->pstructOffs++] = TRUE;
119 }
120
121 if (globs->maxBitpos < globs->buflen - 16*globs->numEOCPending)
122 {
123 ccd_recordFault (globs, ERR_LEN_MISMATCH, CONTINUE, (USHORT) e_ref,
124 globs->pstruct + globs->pstructOffs);
125 }
126
127 bits_to_read = (ULONG)(globs->buflen - globs->bitpos - 16*globs->numEOCPending);
128 bf_readBitChunk (bits_to_read, globs);
129 }
130 }
131
132 return 1;
133 }
134 #endif /* !RUN_INT_RAM */
135
136 #ifndef RUN_INT_RAM
137 /*
138 +--------------------------------------------------------------------+
139 | PROJECT : CCD (6144) MODULE : CDC_GSM |
140 | STATE : code ROUTINE : cdc_gsm5v_encode |
141 +--------------------------------------------------------------------+
142
143 PURPOSE : Encoding of the GSM Type 5V element. This element
144 consists of the not decoded bits of the bitstream.
145 In the target C-structure this element is a bitbuffer
146 (T_xxx_BUF) from wich the bitstream content is read.
147
148 */
149
150 SHORT cdc_gsm5v_encode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs)
151 {
152 ULONG cix_ref, num_prolog_steps, prolog_step_ref;
153
154 #ifdef DEBUG_CCD
155 #ifndef CCD_SYMBOLS
156 TRACE_CCD (globs, "cdc_gsm5v_encode()");
157 #else
158 TRACE_CCD (globs, "cdc_gsm5v_encode() %s", ccddata_get_alias((USHORT) e_ref, 1));
159 #endif
160 #endif
161
162 cix_ref = melem[e_ref].calcIdxRef;
163 num_prolog_steps = calcidx[cix_ref].numPrologSteps;
164 prolog_step_ref = calcidx[cix_ref].prologStepRef;
165
166 /*
167 * if this element is conditional, check the condition
168 */
169 if (calcidx[cix_ref].numCondCalcs NEQ 0
170 AND ! ccd_conditionOK (e_ref, globs))
171 return 1;
172
173 /*
174 * if this element have a defined Prolog
175 * we have to process it before decoding the bitstream
176 */
177 if (num_prolog_steps)
178 {
179 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs);
180 }
181
182 /*
183 * Setup the offset into the C-structure for this element
184 */
185 globs->pstructOffs = melem[e_ref].structOffs;
186
187 if (melem[e_ref].optional)
188 {
189 /*
190 * for optional elements check the valid-flag in the C-struct.
191 * Spare elements does not have a corresponding valid flag.
192 */
193 if (globs->pstruct[globs->pstructOffs++] == FALSE)
194 {
195 return 1;
196 }
197 #ifdef DEBUG_CCD
198 else if (globs->pstruct [melem[e_ref].structOffs] != TRUE)
199 {
200 TRACE_CCD (globs, "Ambiguous value for valid flag!\n...assumed 1 for ccdID=%d",
201 e_ref);
202 }
203 #endif
204 }
205
206 bf_writeBitChunk (mvar[melem[e_ref].elemRef].bSize, globs);
207
208 return 1;
209 }
210 #endif /* !RUN_INT_RAM */