comparison g23m-gsm/sms/sms_em.c @ 0:75a11d740a02

initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 09 Jun 2016 00:02:41 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:75a11d740a02
1 /*
2 +-----------------------------------------------------------------------------
3 | Project :
4 | Modul :
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 : This Module defines the engineering mode (EM) device driver for the
18 | G23 protocol stack. This driver is used to control all engineering
19 | mode related functions.
20 +-----------------------------------------------------------------------------
21 */
22
23 #ifndef SMS_EM_C
24 #define SMS_EM_C
25
26 #include "config.h"
27 #include "fixedconf.h"
28 #include "condat-features.h"
29
30 #define ENTITY_SMS
31
32 /*==== INCLUDES ===================================================*/
33
34 #include <string.h>
35 #include <stdlib.h>
36 #include <stddef.h>
37 #include "typedefs.h"
38 #include "pcm.h"
39 #include "vsi.h"
40 #include "custom.h"
41 #include "gsm.h"
42 #include "message.h"
43 #include "ccdapi.h"
44 #include "prim.h"
45 #include "cus_sms.h"
46 #include "cnf_sms.h"
47 #include "mon_sms.h"
48 #include "pei.h"
49 #include "tok.h"
50 #include "sms.h"
51 #include "sms_em.h"
52
53 /*==== EXPORT =====================================================*/
54
55 /*==== PRIVAT =====================================================*/
56
57 /*==== VARIABLES ==================================================*/
58
59 #ifdef FF_EM_MODE
60 GLOBAL UBYTE em_sms_event_buffer[EM_SMS_BUFFER_SIZE];
61 GLOBAL UBYTE em_sms_buffer_write;
62
63 /* Event tracing flags for EM */
64 GLOBAL BOOL sms_v[EM_MAX_SMS_EVENTS];
65
66 static UBYTE em_sms_trace_occured;
67
68 GLOBAL UBYTE em_change_flag = 0;
69
70 #endif /* FF_EM_MODE */
71
72 /*==== FUNCTIONS ==================================================*/
73
74 #ifdef FF_EM_MODE
75 LOCAL UBYTE check_write_index (UBYTE n);
76
77 /*
78 +------------------------------------------------------------------------------
79 | Function : em_write_buffer_2
80 +------------------------------------------------------------------------------
81 | Description : Perform buffer check and store corresponding data in it.
82 |
83 | Parameters : Event number and length of data
84 |
85 | Return : TRUE/FALSE
86 |
87 +------------------------------------------------------------------------------
88 */
89
90 GLOBAL UBYTE em_write_buffer_2 (UBYTE event_no)
91 {
92 TRACE_FUNCTION ("sms_em_write_buffer_2()");
93
94 if(check_write_index(2)) { /* Check write index */
95 em_sms_event_buffer[em_sms_buffer_write++] = event_no; /* Event number */
96 em_sms_event_buffer[em_sms_buffer_write++] = 0; /* Indicates the length of the data value */
97 return FALSE; /* Data is stored inside buffer, reset flag */
98 }
99 else
100 return TRUE; /* No more space inside buffer, serve flag next time */
101 }
102
103 /*
104 +------------------------------------------------------------------------------
105 | Function : em_write_buffer_3
106 +------------------------------------------------------------------------------
107 | Description : Perform buffer check and store corresponding data in it.
108 |
109 | Parameters : Event number, length of data and value
110 |
111 | Return : TRUE/FALSE
112 |
113 +------------------------------------------------------------------------------
114 */
115
116 GLOBAL UBYTE em_write_buffer_3 (UBYTE event_no, UBYTE value)
117 {
118 TRACE_FUNCTION ("sms_em_write_buffer_3()");
119
120 if(check_write_index(3)) { /* Check write index */
121 em_sms_event_buffer[em_sms_buffer_write++] = event_no; /* Event number */
122 em_sms_event_buffer[em_sms_buffer_write++] = 1; /* Indicates the length of the data value */
123 em_sms_event_buffer[em_sms_buffer_write++] = value; /* Data to be stored */
124 return FALSE; /* Data is stored inside buffer, reset flag */
125 }
126 else
127 return TRUE; /* No more space inside buffer, serve flag next time */
128 }
129
130 /*
131 +------------------------------------------------------------------------------
132 | Function : em_write_buffer_3a
133 +------------------------------------------------------------------------------
134 | Description : Perform buffer check and store corresponding data in it.
135 |
136 | Parameters : Event number, length of data and value (USHORT)
137 |
138 | Return : TRUE/FALSE
139 |
140 +------------------------------------------------------------------------------
141 */
142
143 GLOBAL UBYTE em_write_buffer_3a (UBYTE event_no, USHORT value)
144 {
145 TRACE_FUNCTION ("sms_em_write_buffer_3a()");
146
147 if(check_write_index(4)) { /* Check write index */
148 em_sms_event_buffer[em_sms_buffer_write++] = event_no; /* Event number */
149 em_sms_event_buffer[em_sms_buffer_write++] = 2; /* Indicates the length of the data value */
150 em_sms_event_buffer[em_sms_buffer_write++] = (UBYTE)(value >> 8); /* Data to be stored - MSB first */
151 em_sms_event_buffer[em_sms_buffer_write++] = (UBYTE)(value); /* LSB second */
152 return FALSE; /* Data is stored inside buffer, reset flag */
153 }
154 else
155 return TRUE; /* No more space inside buffer, serve flag next time */
156 }
157
158 /*
159 +------------------------------------------------------------------------------
160 | Function : em_write_buffer_4
161 +------------------------------------------------------------------------------
162 | Description : Perform buffer check and store corresponding data in it.
163 |
164 | Parameters : Event number, length of data, data value1 and value2
165 |
166 | Return : TRUE/FALSE
167 |
168 +------------------------------------------------------------------------------
169 */
170
171 GLOBAL UBYTE em_write_buffer_4 (UBYTE event_no, UBYTE value1, UBYTE value2)
172 {
173 TRACE_FUNCTION ("sms_em_write_buffer_4()");
174
175 if(check_write_index(4)) { /* Check write index */
176 em_sms_event_buffer[em_sms_buffer_write++] = event_no; /* Event number */
177 em_sms_event_buffer[em_sms_buffer_write++] = 2; /* Indicates the length of the data value */
178 em_sms_event_buffer[em_sms_buffer_write++] = value1; /* Value 1 */
179 em_sms_event_buffer[em_sms_buffer_write++] = value2; /* Value 2 */
180 return FALSE; /* Data is stored inside buffer, reset flag */
181 }
182 else
183 return TRUE; /* No more space inside buffer, serve flag next time */
184 }
185
186 /*
187 +------------------------------------------------------------------------------
188 | Function : em_write_buffer_4a
189 +------------------------------------------------------------------------------
190 | Description : Perform buffer check and store corresponding data in it.
191 |
192 | Parameters : Event number, length of data, data value and cs (USHORT)
193 |
194 | Return : TRUE/FALSE
195 |
196 +------------------------------------------------------------------------------
197 */
198
199 GLOBAL UBYTE em_write_buffer_4a (UBYTE event_no, UBYTE value, USHORT cs)
200 {
201 TRACE_FUNCTION ("sms_em_write_buffer_4a()");
202
203 if(check_write_index(5)) { /* Check write index */
204 em_sms_event_buffer[em_sms_buffer_write++] = event_no; /* Event number */
205 em_sms_event_buffer[em_sms_buffer_write++] = 3; /* Indicates the length of the data value */
206 em_sms_event_buffer[em_sms_buffer_write++] = value; /* Data */
207 em_sms_event_buffer[em_sms_buffer_write++] = (UBYTE)(cs >> 8); /* Data to be stored - MSB first */
208 em_sms_event_buffer[em_sms_buffer_write++] = (UBYTE)(cs); /* LSB second */
209 return FALSE; /* Data is stored inside buffer, reset flag */
210 }
211 else
212 return TRUE; /* No more space inside buffer, serve flag next time */
213 }
214
215 /*
216 +------------------------------------------------------------------------------
217 | Function : em_write_buffer_5
218 +------------------------------------------------------------------------------
219 | Description : Perform buffer check and store corresponding data in it.
220 |
221 | Parameters : Event number, length of data, data value1 and value2
222 |
223 | Return : TRUE/FALSE
224 |
225 +------------------------------------------------------------------------------
226 */
227
228 GLOBAL UBYTE em_write_buffer_5 (UBYTE event_no, UBYTE value1, UBYTE value2, UBYTE value3)
229 {
230 TRACE_FUNCTION ("sms_em_write_buffer_5()");
231
232 if(check_write_index(5)) { /* Check write index */
233 em_sms_event_buffer[em_sms_buffer_write++] = event_no; /* Event number */
234 em_sms_event_buffer[em_sms_buffer_write++] = 3; /* Indicates the length of the data value */
235 em_sms_event_buffer[em_sms_buffer_write++] = value1; /* Value 1 */
236 em_sms_event_buffer[em_sms_buffer_write++] = value2; /* Value 2 */
237 em_sms_event_buffer[em_sms_buffer_write++] = value3; /* Value 3 */
238 return FALSE; /* Data is stored inside buffer, reset flag */
239 }
240 else
241 return TRUE; /* No more space inside buffer, serve flag next time */
242 }
243
244 /*
245 +------------------------------------------------------------------------------
246 | Function : em_write_buffer_6
247 +------------------------------------------------------------------------------
248 | Description : Perform buffer check and store corresponding data in it.
249 |
250 | Parameters : Event number, length of data, data value and cs (USHORT)
251 |
252 | Return : TRUE/FALSE
253 |
254 +------------------------------------------------------------------------------
255 */
256
257 GLOBAL UBYTE em_write_buffer_6 (UBYTE event_no, UBYTE value, UBYTE value1, UBYTE value2, UBYTE value3)
258 {
259 TRACE_FUNCTION ("sms_em_write_buffer_6()");
260
261 if(check_write_index(6)) { /* Check write index */
262 em_sms_event_buffer[em_sms_buffer_write++] = event_no; /* Event number */
263 em_sms_event_buffer[em_sms_buffer_write++] = 4; /* Indicates the length of the data value */
264 em_sms_event_buffer[em_sms_buffer_write++] = value; /* Data */
265 em_sms_event_buffer[em_sms_buffer_write++] = value1; /* Data 1 */
266 em_sms_event_buffer[em_sms_buffer_write++] = value2; /* Data 2 */
267 em_sms_event_buffer[em_sms_buffer_write++] = value3; /* Data 3 */
268 return FALSE; /* Data is stored inside buffer, reset flag */
269 }
270 else
271 return TRUE; /* No more space inside buffer, serve flag next time */
272 }
273 /*
274 +------------------------------------------------------------------------------
275 | Function : check_write_index
276 +------------------------------------------------------------------------------
277 | Description : Checks the write index inside the buffer. No reset when
278 | buffer is full.
279 |
280 | Parameters : Number of bytes to be stored in buffer
281 |
282 | Return : TRUE/FALSE
283 |
284 +------------------------------------------------------------------------------
285 */
286
287 LOCAL UBYTE check_write_index (UBYTE n)
288 {
289 TRACE_FUNCTION ("sms_check_write_index()");
290
291 if (em_sms_buffer_write + n < EM_SMS_BUFFER_SIZE)
292 {
293 /*
294 ACI is informed about the first event trace, used for later data processing.
295 */
296 if(em_sms_trace_occured == 0)
297 {
298 PALLOC(em_notification, EM_DATA_IND);
299 em_notification->entity = EM_SMS;
300 PSENDX(MMI, em_notification);
301 em_sms_trace_occured++;
302 }
303 return TRUE;
304 }
305 else
306 return FALSE;
307 }
308
309 /*
310 +------------------------------------------------------------------------------
311 | Function : em_init_sms_event_trace
312 +------------------------------------------------------------------------------
313 | Description : Initialize the event tracing flags for SMS
314 |
315 | Parameters :
316 |
317 | Return :
318 |
319 +------------------------------------------------------------------------------
320 */
321 GLOBAL void em_init_sms_event_trace(void)
322 {
323 UBYTE i;
324
325 TRACE_FUNCTION ("em_init_sms_event_trace()");
326
327 for(i=1; i<EM_MAX_SMS_EVENTS; i++)
328 sms_v[i] = 0;
329
330 em_sms_buffer_write = 0;
331 }
332
333 /*
334 +------------------------------------------------------------------------------
335 | Function : sms_em_sms_event_req
336 +------------------------------------------------------------------------------
337 | Description : Set the event tracing flags according the bitmask
338 |
339 | Parameters : Primitive - Bitmask
340 |
341 | Return :
342 |
343 +------------------------------------------------------------------------------
344 */
345
346 GLOBAL void sms_em_sms_event_req (T_EM_SMS_EVENT_REQ *em_sms_event_req)
347 {
348 UBYTE i;
349
350 TRACE_FUNCTION ("sms_em_sms_event_req()");
351 /*
352 * The event tracing flags are set according the bitmask. sms_v[i] are
353 * the flags belonging to the event number described in 8443.601
354 */
355 for(i=1; i<33; i++) {
356 sms_v[i] = ((em_sms_event_req->bitmask_sms_l & (0x01<<(i-1))) > 0) ? TRUE : FALSE;
357 }
358
359 for(i=33; i<(EM_MAX_SMS_EVENTS); i++) {
360 sms_v[i] = ((em_sms_event_req->bitmask_sms_h & (0x01<<(i-1))) > 0) ? TRUE : FALSE;
361 }
362
363 /*
364 A new event trace is generated therefor the flag is set to 0.
365 */
366 em_sms_trace_occured = 0;
367
368 PFREE(em_sms_event_req);
369 }
370 #endif /* FF_EM_MODE */
371
372 #endif /* SMS_EM_C */