comparison src/g23m-aci/aci/psa_gmmf.c @ 162:53929b40109c

src/g23m-aci: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 11 Oct 2016 02:02:43 +0000
parents
children
comparison
equal deleted inserted replaced
161:4557e2a9c18e 162:53929b40109c
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 functions for the protocol
18 | stack adapter for the registration part of mobility
19 | management ( GMM ).
20 +-----------------------------------------------------------------------------
21 */
22
23 #if defined (GPRS) && defined (DTI)
24
25 #ifndef PSA_GMMF_C
26 #define PSA_GMMF_C
27 #endif
28
29 #include "aci_all.h"
30
31 #undef TRACING
32 /*==== INCLUDES ===================================================*/
33 #include "aci_cmh.h"
34 #include "ati_cmd.h"
35 #include "aci_cmd.h"
36
37 #include "dti.h"
38 #include "dti_conn_mng.h"
39 #include "dti_cntrl_mng.h"
40
41 #include "gaci_cmh.h"
42 #include "gaci.h"
43 #include "aci.h"
44 #include "psa.h"
45 #include "psa_gmm.h"
46 #include "cmh.h"
47 #include "cmh_gmm.h"
48
49 /*==== CONSTANTS ==================================================*/
50
51 /*==== TYPES ======================================================*/
52
53
54 /*==== EXPORT =====================================================*/
55
56
57 /*==== VARIABLES ==================================================*/
58
59 /*==== FUNCTIONS ==================================================*/
60
61
62 /*
63 +-------------------------------------------------------------------+
64 | PROJECT : GPRS (8441) MODULE : PSA_GMMF |
65 | ROUTINE : psaGMM_Init |
66 +-------------------------------------------------------------------+
67
68 PURPOSE : initialize the protocol stack adapter for GMM.
69
70 */
71
72 /* MACRO: initializer for set parameter */
73 #ifdef INIT_SET_PARM
74 #undef INIT_SET_PARM
75 #endif
76
77 #define INIT_SET_PARM( dest, def )\
78 for( LpCnt = 0; LpCnt < OWN_SRC_MAX; LpCnt++ )\
79 gmmShrdPrm.setPrm[LpCnt].dest = def
80
81 GLOBAL void psaGMM_Init ( UBYTE auto_attach, UBYTE auto_detach, UBYTE mobile_class )
82 {
83 UBYTE LpCnt; /* holds loop counter for macro */
84
85 /*
86 *-------------------------------------------------------------------
87 * set default parms
88 *-------------------------------------------------------------------
89 */
90 default_mobile_class = mobile_class;
91 gmmShrdPrm.mobile_class = default_mobile_class;
92 gmmShrdPrm.requested_mobile_class = gmmShrdPrm.mobile_class;
93 gmmShrdPrm.last_attach_type = ATTACH_TYPE_DETACHED;
94 gmmShrdPrm.current_attach_type = ATTACH_TYPE_DETACHED;
95 gmmShrdPrm.requested_attach_type = ATTACH_TYPE_DETACHED;
96
97 automatic_attach_mode = (T_CGAATT_ATTACH_MODE)auto_attach;
98 automatic_detach_mode = (T_CGAATT_DETACH_MODE)auto_detach;
99
100 /*
101 * GlumPs
102 * ANS 15-Mar-00
103 * GMM knows that SIM is not inserted
104 * gmmShrdPrm.service_mode = SERVICE_MODE_LIMITED;
105 */
106 gmmShrdPrm.service_mode = SERVICE_MODE_FULL;
107
108 for (LpCnt = 0; LpCnt < MAX_PLMN_ID; LpCnt++)
109 gmmShrdPrm.gprs_status[LpCnt] = GMMREG_GSM_ONLY;
110
111 gmmShrdPrm.gprs_indicator = P_CREG_GPRS_Support_Unknown; /* ACI-SPR-24473 */
112
113 gmmShrdPrm.cgreg_stat = CGREG_STAT_NOT_REG; /* +CGREG status */
114 gmmShrdPrm.p_cgreg_stat = P_CGREG_STAT_NOT_REG; /* %CGREG status */
115 gmmShrdPrm.lac = NOT_PRESENT_16BIT; /* current cell coordinates */
116 gmmShrdPrm.cid = NOT_PRESENT_16BIT;
117
118 switch(gmmShrdPrm.mobile_class)
119 {
120 case GMMREG_CLASS_A :
121 gaciMobileClass.current = PERCENT_CGCLASS_A;
122 break;
123 case GMMREG_CLASS_B :
124 gaciMobileClass.current = PERCENT_CGCLASS_B;
125 break;
126 case GMMREG_CLASS_BC :
127 gaciMobileClass.current = PERCENT_CGCLASS_BC;
128 break;
129 case GMMREG_CLASS_BG :
130 gaciMobileClass.current = PERCENT_CGCLASS_BG;
131 break;
132 case GMMREG_CLASS_CC :
133 gaciMobileClass.current = PERCENT_CGCLASS_CC;
134 break;
135 case GMMREG_CLASS_CG :
136 gaciMobileClass.current = PERCENT_CGCLASS_CG;
137 break;
138 default:
139 gaciMobileClass.current = PERCENT_CGCLASS_MAX;
140 break;
141 }
142 }
143
144 #ifdef GMM_PRIMITIVE_TRACES_ADVANCED
145
146 char* dbg_attachType(UBYTE attach_type)
147 {
148 char* type[3] ={"GPRS", "IMSI", "COMB"};
149 return type[attach_type - 1];
150 }
151 char* dbg_detachType(UBYTE detach_type)
152 {
153 char* type[8] ={"GPRS", "IMSI", "COMB",
154 "SIM_REM", "POWER_OFF", "DISABLE_GPRS",
155 "LIM_SERV", "SOFT_OFF"};
156 return type[detach_type - 1];
157 }
158 char* dbg_mobileClass(UBYTE mobile_class)
159 {
160 char* running[6] ={"A", "B", "BC",
161 "BG", "CC", "CG"};
162 return running[mobile_class - 1];
163
164 }
165 char* dbg_searchRunning(UBYTE search_running)
166 {
167 char* running[2] ={"NOT_RUN", "SEARCH_RUN"};
168 return running[search_running];
169 }
170 char* dbg_cellState(UBYTE cell_state)
171 {
172 char* state[8] ={"FULL_SERV", "LIM_SERV", "CS_CALL",
173 "GPRS_NOT_SUP", "TRY_TO_UPD"};
174 return state[cell_state];
175 }
176
177 #endif /* GMM_PRIMITIVE_TRACES_ADVANCED */
178
179 /*
180 +-----------------------------------------------------------------------------+
181 | PROJECT : GSM-PS (6147) MODULE : PSA_GMMF |
182 | ROUTINE : is_GMM_searching_stoped |
183 +-----------------------------------------------------------------------------+
184
185 PURPOSE : Answer the Question: "Is the automatic searching from GMM stoped?"
186 */
187 LOCAL BOOL is_GMM_searching_stoped (USHORT cause)
188 {
189 switch ( cause )
190 {
191 case MMCS_IMSI_IN_HLR: /* Network cause #2 via MM */
192 /* GMMCS_IMSI_UNKNOWN: */ /* Via GMM, this doesn't stop GPRS */
193
194 case MMCS_ILLEGAL_MS: /* Network cause #3 */
195 case GMMCS_ILLEGAL_MS:
196
197 case MMCS_ILLEGAL_ME: /* Network cause #2 */
198 case GMMCS_ILLEGAL_ME:
199
200 /* No MMCS_GPRS_NOT_ALLOWED */ /* Doesn't exist in MM protocol */
201 case GMMCS_GPRS_NOT_ALLOWED: /* Network cause #7 */
202
203 /* No MMCS_GSM_GPRS_NOT_ALLOWED */ /* Doesn't exist in MM protocol */
204 case GMMCS_GSM_GPRS_NOT_ALLOWED: /* Network cause #8 */
205
206 case MMCS_SIM_REMOVED: /* SIM has been removed/disabled */
207 case GMMCS_SIM_REMOVED:
208
209 case MMCS_AUTHENTICATION_REJECTED: /* AUTHENTICATION REJECT received */
210 case GMMCS_AUTHENTICATION_REJECTED:
211
212 /* No MMCS_POWER_OFF */ /* Swiched off */
213 case GMMCS_POWER_OFF:
214 return(TRUE); /* yes, it is stoped */
215 }
216
217 return(FALSE); /* no, it isn't stoped */
218 }
219
220
221 typedef enum
222 {
223 NRS_NOT_REGISTERED,
224 NRS_SEARCHING,
225 NRS_REGISTERED
226
227 } T_NETWORK_REGISTRATION_STATUS;
228
229 /*
230 +-----------------------------------------------------------------------------+
231 | PROJECT : GSM-PS (6147) MODULE : PSA_GMMF |
232 | ROUTINE : is_GMM_searching_stoped |
233 +-----------------------------------------------------------------------------+
234
235 PURPOSE : Answer the Question: "Is the automatic searching from GMM stoped?"
236 */
237 LOCAL T_NETWORK_REGISTRATION_STATUS
238 GMM_detached ( T_NETWORK_REGISTRATION_STATUS stat,
239 BOOL suspended,
240 UBYTE detach_type,
241 USHORT cause,
242 ULONG caller )
243 {
244 if ( detach_type NEQ GMMREG_DT_IMSI )
245 {
246 /* special causes stops in every state the GMM searching*/
247 if ( is_GMM_searching_stoped(cause) )
248 {
249 if( stat NEQ NRS_NOT_REGISTERED )
250 {
251 if ( caller EQ GMMREG_ATTACH_REJ AND
252 ( gmmShrdPrm.last_attach_type EQ GMMREG_AT_IMSI OR
253 gmmShrdPrm.last_attach_type EQ ATTACH_TYPE_DETACHED ) )
254 {
255 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_DEN, P_CGREG_STAT_REG_DEN );
256 }
257 else
258 {
259 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_NOT_REG, P_CGREG_STAT_NOT_REG );
260 }
261 return NRS_NOT_REGISTERED;
262 }
263 }
264 else
265 {
266 if ( ( stat EQ NRS_REGISTERED AND !suspended ) OR /* in this state always */
267 ( stat EQ NRS_REGISTERED AND suspended ) AND /* in this state only with special detach_type */
268 ( detach_type EQ GMMREG_DT_LIMITED_SERVICE OR
269 detach_type EQ GMMREG_DT_SIM_REMOVED ) )
270 {
271 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_SEARCHING, P_CGREG_STAT_SEARCHING );
272 return NRS_SEARCHING;
273 }
274 }
275 }
276 else /* detach_type EQ GMMREG_DT_IMSI -> attach_type EQ GPRS*/
277 {
278 if( stat NEQ NRS_REGISTERED )
279 {
280 if ( cmhGMM_isPLMN_Home())
281 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_HOME, P_CGREG_STAT_REG_HOME ); }
282 else
283 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_ROAM, P_CGREG_STAT_REG_ROAM ); }
284
285 return NRS_REGISTERED;
286 }
287 }
288
289 return stat;
290 }
291
292 /*
293 +-----------------------------------------------------------------------------+
294 | PROJECT : GSM-PS (6147) MODULE : PSA_GMMF |
295 | ROUTINE : psaGMM_NetworkRegistrationStatus |
296 +-----------------------------------------------------------------------------+
297
298 PURPOSE : this function reported the network registration status for GPRS
299 (+CGREG, %CGREG).
300 */
301 GLOBAL void psaGMM_NetworkRegistrationStatus ( ULONG prim, void* para)
302 {
303 T_NETWORK_REGISTRATION_STATUS tmp_stat; /* only temporary in use*/
304 static T_NETWORK_REGISTRATION_STATUS stat = NRS_NOT_REGISTERED; /* current GPRS NRS */
305 static BOOL suspended = FALSE; /* is GPRS suspended */
306
307 TRACE_FUNCTION ("psaGMM_NetworkRegistrationStatus()");
308
309 switch ( prim )
310 {
311 case SMREG_PDP_ACTIVATE_REQ:
312 if ( stat EQ NRS_NOT_REGISTERED )
313 {
314 stat = NRS_SEARCHING;
315 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_SEARCHING, P_CGREG_STAT_SEARCHING );
316 }
317 break;
318 case GMMREG_ATTACH_REQ:
319 if ( stat EQ NRS_NOT_REGISTERED AND
320 ((T_GMMREG_ATTACH_REQ*)para)->attach_type NEQ GMMREG_AT_IMSI )
321 {
322 stat = NRS_SEARCHING;
323 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_SEARCHING, P_CGREG_STAT_SEARCHING );
324 }
325 break;
326 case GMMREG_ATTACH_CNF:
327 if ((stat EQ NRS_NOT_REGISTERED OR stat EQ NRS_SEARCHING) AND !suspended AND
328 ((T_GMMREG_ATTACH_CNF*)para)->attach_type NEQ GMMREG_AT_IMSI )
329 {
330 stat = NRS_REGISTERED;
331
332 if ( cmhGMM_isPLMN_Home())
333 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_HOME, P_CGREG_STAT_REG_HOME ); }
334 else
335 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_ROAM, P_CGREG_STAT_REG_ROAM ); }
336 }
337 else if ( (stat EQ NRS_REGISTERED) AND suspended AND
338 ((T_GMMREG_ATTACH_CNF*)para)->attach_type NEQ GMMREG_AT_IMSI AND
339 ((T_GMMREG_ATTACH_CNF*)para)->search_running EQ GMMREG_SEARCH_NOT_RUNNING )
340 {
341 if(((T_GMMREG_ATTACH_CNF*)para)->gprs_indicator NEQ GMM_GPRS_SUPP_YES)
342 {
343 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_NOT_REG, P_CGREG_STAT_NOT_REG );
344 break;
345 }
346 suspended = FALSE;
347
348 if ( cmhGMM_isPLMN_Home())
349 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_HOME, P_CGREG_STAT_REG_HOME ); }
350 else
351 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_ROAM, P_CGREG_STAT_REG_ROAM ); }
352 }
353
354 else
355 { /* answer to ATTACH_REQ->attach_type=IMSI */
356 if ( stat NEQ NRS_NOT_REGISTERED AND
357 ((T_GMMREG_ATTACH_CNF*)para)->search_running EQ GMMREG_SEARCH_NOT_RUNNING AND
358 ((T_GMMREG_ATTACH_CNF*)para)->attach_type EQ GMMREG_AT_IMSI )
359 {
360 stat = NRS_NOT_REGISTERED;
361 suspended = FALSE;
362 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_NOT_REG, P_CGREG_STAT_NOT_REG );
363 }
364 }
365 break;
366 case GMMREG_ATTACH_REJ:
367 tmp_stat = GMM_detached(stat,
368 suspended,
369 ((T_GMMREG_ATTACH_REJ*)para)->detach_type,
370 ((T_GMMREG_ATTACH_REJ*)para)->cause,
371 GMMREG_ATTACH_REJ );
372
373 if( stat NEQ tmp_stat )
374 {
375 stat = tmp_stat;
376 suspended = FALSE;
377 }
378 break;
379 case GMMREG_DETACH_CNF:
380 if ( stat NEQ NRS_NOT_REGISTERED AND
381 ((T_GMMREG_DETACH_CNF*)para)->detach_type NEQ GMMREG_DT_IMSI )
382 {
383 stat = NRS_NOT_REGISTERED;
384 suspended = FALSE;
385 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_NOT_REG, P_CGREG_STAT_NOT_REG );
386 }
387 break;
388 case GMMREG_DETACH_IND:
389 tmp_stat = GMM_detached(stat,
390 suspended,
391 ((T_GMMREG_DETACH_IND*)para)->detach_type,
392 ((T_GMMREG_DETACH_IND*)para)->cause,
393 GMMREG_DETACH_IND );
394
395 if( stat NEQ tmp_stat )
396 {
397 stat = tmp_stat;
398 suspended = FALSE;
399 }
400 break;
401 case GMMREG_SUSPEND_IND:
402 if ( ( stat EQ NRS_REGISTERED AND !suspended ) OR stat EQ NRS_SEARCHING)
403 {
404 suspended = TRUE;
405 switch ( ((T_GMMREG_SUSPEND_IND*)para)->cell_state )
406 {
407 case GMMREG_FULL_SERVICE:
408 /* nobody knows why we are not resumed */
409 suspended = FALSE;
410 break;
411 case GMMREG_LIMITED_SERVICE:
412 cmhGMM_Set_state(AS_DETACHED); // pinghua DCM_OPEN_CLOSE patch 20080429 start
413 gmmShrdPrm.current_attach_type = ATTACH_TYPE_DETACHED;
414
415 cmhGMM_send_percentNetworkRegistrationStatus( P_CGREG_STAT_LIMITED );
416 break;
417 case GMMREG_CS_CALL:
418 cmhGMM_send_percentNetworkRegistrationStatus( P_CGREG_STAT_GSM_CALL );
419 break;
420 case GMMREG_GPRS_NOT_SUPPORTED:
421 cmhGMM_Set_state(AS_DETACHED);
422 gmmShrdPrm.current_attach_type = ATTACH_TYPE_DETACHED; //// pinghua DCM_OPEN_CLOSE patch 20080429 end
423
424 cmhGMM_send_percentNetworkRegistrationStatus( P_CGREG_STAT_NO_CELL );
425 break;
426 case GMMREG_TRY_TO_UPDATE:
427 cmhGMM_send_percentNetworkRegistrationStatus( P_CGREG_STAT_TRY_TO_UPDATE );
428 break;
429 }
430 }
431 break;
432 case GMMREG_RESUME_IND:
433 if ( suspended )
434 {
435 suspended = FALSE;
436
437 if ( stat NEQ NRS_REGISTERED )
438 {
439 if ( cmhGMM_isPLMN_Home())
440 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_HOME, P_CGREG_STAT_REG_HOME ); }
441 else
442 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_ROAM, P_CGREG_STAT_REG_ROAM ); }
443 }
444 else
445 {
446 if ( cmhGMM_isPLMN_Home())
447 { cmhGMM_send_percentNetworkRegistrationStatus( P_CGREG_STAT_REG_HOME ); }
448 else
449 { cmhGMM_send_percentNetworkRegistrationStatus( P_CGREG_STAT_REG_ROAM ); }
450 }
451 stat = NRS_REGISTERED;
452 }
453 break;
454 case GMMREG_AHPLMN_IND: /* Enhancement for ActingHPLMN*/
455 if(cmhGMM_isPLMN_Valid())
456 {
457 if(cmhGMM_isPLMN_Home())
458 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_HOME, P_CGREG_STAT_REG_HOME); }
459 else
460 { cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_REG_ROAM, P_CGREG_STAT_REG_ROAM ); }
461 }
462 break;
463 case GMMREG_DETACH_REQ:
464 case GMMREG_NET_REQ:
465 case GMMREG_PLMN_IND:
466 case GMMREG_PLMN_RES:
467 case GMMREG_PLMN_MODE_REQ:
468 case GMMREG_INFO_IND:
469 case GMMREG_CONFIG_REQ:
470 case GMMREG_CIPHERING_IND:
471 break;
472 default:
473 TRACE_EVENT_P1("UNSUPPORTED PRIMITIVE: %d", prim);
474 }
475
476 }
477
478
479 #if 0
480 /*
481 +-------------------------------------------------------------------+
482 | PROJECT : GSM-PS (6147) MODULE : PSA_GMMF |
483 | ROUTINE : psaGMM_shrPrmDump |
484 +-------------------------------------------------------------------+
485
486 PURPOSE : this function dumps the shared parameter to the debug
487 output.
488 */
489
490 GLOBAL void psaGMM_shrPrmDump ( void )
491 {
492 #ifdef TRACING
493
494 char lnBuf [80]; /* holds buffer for output line */
495 char mccBuf[SIZE_MCC + 1]; /* MCC converted to printable C-string */
496 char mncBuf[SIZE_MNC + 1]; /* MNC converted to printable C-string */
497 SHORT chrNr; /* holds number of processed chars */
498 SHORT cnt; /* holds a counter */
499
500 /* --- PLMN list ------------------------------------------------*/
501 for( cnt = 0; cnt<MAX_PLMN_ID AND
502 mmShrdPrm.PLMNLst[cnt].v_plmn NEQ INVLD_PLMN; cnt++ )
503 {
504 chrNr = sprintf( lnBuf, "%*.*s[%2d]", HDR_WDT, HDR_WDT, " PLMN list",cnt );
505 utl_BCD2String (mccBuf, mmShrdPrm.PLMNLst[cnt].mcc, SIZE_MCC);
506 utl_BCD2String (mncBuf, mmShrdPrm.PLMNLst[cnt].mnc, SIZE_MNC);
507 chrNr += sprintf( lnBuf+chrNr, "%*s %*s",
508 ITM_WDT/2, ITM_WDT/2, mccBuf, mncBuf);
509 TRACE_EVENT( lnBuf );
510 }
511
512 /* --- used PLMN ------------------------------------------------*/
513 chrNr = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, " used PLMN" );
514 if( mmShrdPrm.usedPLMN.v_plmn EQ VLD_PLMN )
515 {
516 utl_BCD2String (mccBuf, mmShrdPrm.usedPLMN.mcc, SIZE_MCC);
517 utl_BCD2String (mncBuf, mmShrdPrm.usedPLMN.mnc, SIZE_MNC);
518 chrNr += sprintf( lnBuf+chrNr, "%*s %*s",
519 ITM_WDT/2, ITM_WDT/2, mccBuf, mncBuf);
520 }
521 else
522 {
523 chrNr += sprintf( lnBuf+chrNr, "%*s", ITM_WDT, "none" );
524 }
525 TRACE_EVENT( lnBuf );
526
527 /* --- registration mode ----------------------------------------*/
528 chrNr = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, "rgstr mode" );
529 chrNr += sprintf( lnBuf+chrNr, "%*hd", ITM_WDT,
530 mmShrdPrm.setPrm[0].regMode );
531 TRACE_EVENT( lnBuf );
532
533 /* --- registration status --------------------------------------*/
534 chrNr = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, "rgstr stat" );
535 chrNr += sprintf( lnBuf+chrNr, "%*hd", ITM_WDT,
536 mmShrdPrm.regStat );
537 TRACE_EVENT( lnBuf );
538
539 /* --- search result --------------------------------------------*/
540 chrNr = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, " srch rslt" );
541 chrNr += sprintf( lnBuf+chrNr, "%*hd", ITM_WDT,
542 mmShrdPrm.srchRslt );
543 TRACE_EVENT( lnBuf );
544
545 /* --- de-registration cause ------------------------------------*/
546 chrNr = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, "dereg caus" );
547 chrNr += sprintf( lnBuf+chrNr, "%*X", ITM_WDT,
548 mmShrdPrm.deregCs );
549 TRACE_EVENT( lnBuf );
550
551 #endif /* of #ifdef TRACING */
552 }
553 #endif /* #if 0 */
554
555 #endif /* GPRS */
556 /*==== EOF ========================================================*/
557