2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 | Project :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 | Modul : no_code.c
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 | Copyright 2002 Texas Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 | All rights reserved.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 | This file is confidential and a trade secret of Texas
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 | Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 | The receipt of or possession of this file does not convey
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 | any rights to reproduce or disclose its contents or to
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 | manufacture, use, or sell anything it may describe, in
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 | whole, or in part, without the specific written consent of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 | Texas Instruments Berlin, AG.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 | Purpose : Definition of encoding and decoding functions for NO_CODE elements
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 * standard definitions like GLOBAL, UCHAR, ERROR etc.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #include "typedefs.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 #include "header.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 * Prototypes of ccd (USE_DRIVER EQ undef) for prototypes only
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 * look at ccdapi.h
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #undef USE_DRIVER
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "ccdapi.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 * Types and functions for bit access and manipulation
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "ccd_globs.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #include "bitfun.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 * Prototypes of ccd internal functions
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 #include "ccd.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 * Declaration of coder/decoder tables
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 #include "ccdtable.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 #include "ccddata.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 #ifndef RUN_INT_RAM
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 | PROJECT : CCD (6144) MODULE : CDC_GSM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 | STATE : code ROUTINE : cdc_no_decode |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 PURPOSE : Either reading a value from the stack and writing it into
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 the C structure or processing the error branch in case of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 a message escape error label.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 An IE of this type does not occur in the air message.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 EXAMPLE (reading stack value):
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 The first usage of this type is the IE "tlv_len" in a
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 Multi Rate Configuration. In this case "tlv_len" is to be
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 used for evaluating conditions which decide for the content
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 of Multi Rate Configuration IE.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 EXMAPLE (message escape):
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 A part of a message, which depends on a certain protocol
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 status, is marked by the 'Message escape' error label. It
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 is preceeded by an amount of bits given by the specification.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 Some of these bit combinations are concatenated with a
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 well-defined message structure. All the rest of combinations
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 are expected to provide an escape
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 -> use coding type 'NO_CODE'.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 SHORT cdc_no_decode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 U16 cixRef = melem[e_ref].calcIdxRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 #ifdef DEBUG_CCD
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 #ifndef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 TRACE_CCD (globs, "cdc_no_decode()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 * if this element is conditional, check the condition
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 if (calcidx[cixRef].numCondCalcs != 0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 AND ! ccd_conditionOK (e_ref, globs))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 if (calcidx[cixRef].numPrologSteps)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 switch (calc[calcidx[cixRef].prologStepRef].operation)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 case 'Z': /* address information part error */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 globs->errLabel = ERR_ADDR_INFO_PART;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 case 'D': /* distribution part error */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 globs->errLabel = ERR_DISTRIB_PART;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 case 'N': /* non distribution part error */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 globs->errLabel = ERR_NON_DISTRIB_PART;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 case 'M': /* message escape */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 globs->errLabel = ERR_MESSAGE_ESCAPE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 if (globs->errLabel)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 #ifdef DEBUG_CCD
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 TRACE_CCD (globs, "cdc_no_decode() %s", ccddata_get_alias((USHORT) e_ref, 1));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 ccd_setError (globs, globs->errLabel, BREAK, globs->bitpos, (USHORT) -1);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 #ifdef DEBUG_CCD
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 if (calcidx[cixRef].numPrologSteps == 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 TRACE_CCD (globs, "writing 2 bytes (%ld) to struct", globs->KeepReg[0]);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 TRACE_CCD (globs, "cdc_no_decode() %s", ccddata_get_alias((USHORT) e_ref, 1));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 globs->pstructOffs = melem[e_ref].structOffs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 *(U16*) (globs->pstruct + globs->pstructOffs) = (U16) globs->KeepReg[0];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 #endif /* !RUN_INT_RAM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 #ifndef RUN_INT_RAM
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 | PROJECT : CCD (6144) MODULE : CDC_GSM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 | STATE : code ROUTINE : cdc_no_encode |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 PURPOSE : An IE of this type does not occure in the air message.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 Nevertheless the variable in the C structure must be
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 written by the caller entity.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 EXAMPLE:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 The first usage of this type is the IE "tlv_len" in a
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 Multi Rate Configuration. In this case "tlv_len" is to be used
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 for evaluating conditions which decide for the content of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 Multi Rate Configuration IE.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 SHORT cdc_no_encode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 #ifdef DEBUG_CCD
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 #ifndef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 TRACE_CCD (globs, "cdc_no_encode()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 TRACE_CCD (globs, "cdc_no_encode() %s", ccddata_get_alias((USHORT) e_ref, 1));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 #endif /* !RUN_INT_RAM */
|