comparison src/aci2/aci/cmh_gmmr.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
comparison
equal deleted inserted replaced
2:c41a534f33c6 3:93999a60b835
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 which are responsible
18 | for the responses of the protocol stack adapter for
19 | GPRS mobility management ( GMM ).
20 +-----------------------------------------------------------------------------
21 */
22
23 #if defined (GPRS) && defined (DTI)
24
25 #ifndef CMH_GMMR_C
26 #define CMH_GMMR_C
27 #endif
28
29 #include "aci_all.h"
30 /*==== INCLUDES ===================================================*/
31 #include "dti.h" /* functionality of the dti library */
32 #include "aci_cmh.h"
33 #include "ati_cmd.h"
34 #include "aci_cmd.h"
35
36 #include "dti_conn_mng.h"
37
38 #include "aci.h"
39 #include "gaci.h"
40 #include "gaci_cmh.h"
41 #include "psa.h"
42 #include "psa_mm.h"
43 #include "psa_gmm.h"
44 #include "psa_sim.h"
45
46 #include "cmh.h"
47 #include "cmh_mm.h"
48 #include "cmh_gmm.h"
49 #include "cmh_sim.h"
50
51 #if defined (FF_WAP) || defined (FF_SAT_E)
52 #include "wap_aci.h"
53 #include "psa_sm.h"
54 #include "cmh_sm.h"
55 #endif /* WAP */
56
57 #if defined (SIM_TOOLKIT) AND defined (FF_SAT_E)
58 #include "psa_cc.h"
59 #include "psa_sat.h"
60 #include "cmh_sat.h"
61 #endif /* SIM_TOOLKIT AND FF_SAT_E */
62
63 #ifdef FF_GPF_TCPIP
64 #include "dcm_utils.h"
65 #include "dcm_state.h"
66 #include "dcm_env.h"
67 #endif
68
69 #include "dcm_f.h"
70 /*==== CONSTANTS ==================================================*/
71
72
73 /*==== TYPES ======================================================*/
74
75
76 /*==== EXPORT =====================================================*/
77
78 /*==== VARIABLES ==================================================*/
79
80
81 /*==== FUNCTIONS ==================================================*/
82
83 /*
84 +-------------------------------------------------------------------+
85 | PROJECT : GPRS (8441) MODULE : CMH_GMMR |
86 | ROUTINE : cmhGMM_Attached |
87 +-------------------------------------------------------------------+
88
89 PURPOSE : ME is attached
90
91 */
92 GLOBAL void cmhGMM_Attached ( UBYTE attach_type, T_plmn *plmn, UBYTE search_running )
93 {
94 T_CGEREP_EVENT_REP_PARAM event;
95 SHORT i;
96
97 TRACE_FUNCTION ("cmhGMM_Attached()");
98
99 /*
100 * set GPRS attach state
101 */
102 gmmShrdPrm.current_attach_type = attach_type;
103
104 switch ( attach_type )
105 {
106 case GMMREG_AT_GPRS:
107 case GMMREG_AT_COMB:
108 cmhGMM_Set_state(AS_ATTACHED);
109 break;
110 case GMMREG_AT_IMSI:
111 cmhGMM_Set_state(AS_DETACHED);
112 break;
113 }
114
115 if (search_running EQ GMMREG_SEARCH_NOT_RUNNING)
116 {
117 gmmShrdPrm.mobile_class = gmmShrdPrm.requested_mobile_class;
118
119 switch(gmmShrdPrm.requested_mobile_class)
120 {
121 case GMMREG_CLASS_A :
122 gaciMobileClass.current = PERCENT_CGCLASS_A;
123 break;
124 case GMMREG_CLASS_B :
125 gaciMobileClass.current = PERCENT_CGCLASS_B;
126 break;
127 case GMMREG_CLASS_BC :
128 gaciMobileClass.current = PERCENT_CGCLASS_BC;
129 break;
130 case GMMREG_CLASS_BG :
131 gaciMobileClass.current = PERCENT_CGCLASS_BG;
132 break;
133 case GMMREG_CLASS_CC :
134 gaciMobileClass.current = PERCENT_CGCLASS_CC;
135 break;
136 case GMMREG_CLASS_CG :
137 gaciMobileClass.current = PERCENT_CGCLASS_CG;
138 break;
139 default:
140 gaciMobileClass.current = PERCENT_CGCLASS_MAX;
141 break;
142 }
143
144 if(AT_CMD_CGCLASS EQ gmmEntStat.curCmd)
145 {
146 /*
147 * brz: 22.10.02
148 * special behaviour for NMO III
149 *
150 * In the case of NMO III a COMB reject can not be succesful.
151 *
152 * case BG requested: attach type GPRS is also OK
153 * case BC requested: attach type IMSI is also OK
154 */
155 if( GMMREG_CLASS_BG EQ gmmShrdPrm.mobile_class && GMMREG_AT_GPRS EQ attach_type OR
156 GMMREG_CLASS_BC EQ gmmShrdPrm.mobile_class && GMMREG_AT_IMSI EQ attach_type )
157 {
158 /*
159 * GPRS event reporting>
160 */
161 event.mobile_class = gmmShrdPrm.mobile_class;
162 for( i = 0 ; i < CMD_SRC_MAX; i++ )
163 {
164 R_AT( RAT_CGEREP, i ) ( CGEREP_EVENT_ME_CLASS, &event );
165 R_AT( RAT_P_CGEV, i ) ( CGEREP_EVENT_ME_CLASS, &event );
166 }
167 R_AT( RAT_OK, gmmEntStat.entOwn ) ( gmmEntStat.curCmd );
168
169 /* log result */
170 cmh_logRslt ( gmmEntStat.entOwn, RAT_OK, gmmEntStat.curCmd, -1, -1, -1 );
171
172 gmmEntStat.curCmd = AT_CMD_NONE;
173 return;
174 }
175 }
176 }
177
178 if ( attach_type EQ GMMREG_AT_IMSI &&
179 gmmShrdPrm.requested_mobile_class NEQ GMMREG_CLASS_CC)
180 {
181 /*
182 * brz: 03.05.02
183 * patch for wrong behaviour of GMM: sending attach_cnf->IMSI instead of attach_rej->GPRS
184 */
185 if (search_running EQ GMMREG_SEARCH_NOT_RUNNING)
186 {
187 cmhGMM_NoAttach(GMMREG_DT_GPRS ,GMMCS_NO_SERVICE , GMMREG_SEARCH_NOT_RUNNING);
188 }
189
190 return;
191 }
192 else /* end of +CGATT or +CGCLASS */
193 {
194 /*
195 * due to implicit attach request over CGAUTO, S0, CGDATA, ATD
196 */
197
198 cmhGMM_inform_other_psa( 1 );
199
200 switch ( gmmEntStat.curCmd )
201 {
202 case AT_CMD_CGCLASS:
203 /*
204 * GPRS event reporting
205 */
206 event.mobile_class = gmmShrdPrm.requested_mobile_class;
207 for( i = 0 ; i < CMD_SRC_MAX; i++ )
208 {
209 R_AT( RAT_CGEREP, i ) ( CGEREP_EVENT_ME_CLASS, &event );
210 R_AT( RAT_P_CGEV, i ) ( CGEREP_EVENT_ME_CLASS, &event );
211 }
212 case AT_CMD_CGATT:
213 R_AT( RAT_OK, gmmEntStat.entOwn ) ( gmmEntStat.curCmd );
214
215 /* log result */
216 cmh_logRslt ( gmmEntStat.entOwn, RAT_OK, gmmEntStat.curCmd, -1, -1, -1 );
217
218 #ifdef FF_GPF_TCPIP
219 if(is_gpf_tcpip_call())
220 {
221 T_DCM_STATUS_IND_MSG msg;
222 msg.hdr.msg_id = DCM_NEXT_CMD_READY_MSG;
223 dcm_send_message(msg, DCM_SUB_WAIT_CGATT_CNF);
224 }
225 #endif /* FF_GPF_TCPIP */
226 break;
227 }
228
229 gmmEntStat.curCmd = AT_CMD_NONE;
230 }
231 }
232
233
234 /*
235 +-------------------------------------------------------------------+
236 | PROJECT : GPRS (8441) MODULE : CMH_GMMR |
237 | ROUTINE : cmhGMM_NoAttach |
238 +-------------------------------------------------------------------+
239
240 PURPOSE : the attach fail
241
242 */
243 GLOBAL void cmhGMM_NoAttach ( UBYTE detach_type, USHORT cause, UBYTE search_running )
244 {
245 UBYTE cme_err; /* error number */
246
247 TRACE_FUNCTION ("cmhGMM_NoAttach()");
248
249 /*
250 * map error cause
251 */
252 switch(cause)
253 {
254 case GMMCS_ILLEGAL_MS:
255 case MMCS_ILLEGAL_MS:
256 cme_err = CME_ERR_GPRSBadMs;
257 break;
258 case GMMCS_ILLEGAL_ME:
259 case MMCS_ILLEGAL_ME:
260 cme_err = CME_ERR_GPRSBadMe;
261 break;
262 case GMMCS_GPRS_NOT_ALLOWED:
263 /* No corrosponding MM cause */
264 cme_err = CME_ERR_GPRSNoService;
265 break;
266 case GMMCS_PLMN_NOT_ALLOWED:
267 case MMCS_PLMN_NOT_ALLOWED:
268 cme_err = CME_ERR_GPRSBadPlmn;
269 break;
270 case GMMCS_LA_NOT_ALLOWED:
271 case MMCS_LA_NOT_ALLOWED:
272 cme_err = CME_ERR_GPRSBadLoc;
273 break;
274 case GMMCS_ROAMING_NOT_ALLOWED:
275 case MMCS_ROAMING_NOT_ALLOWED:
276 cme_err = CME_ERR_GPRSNoRoam;
277 break;
278 case GMMCS_IMPLICIT_DETACHED:
279 /* No corrosponding MM cause */
280 cme_err = CME_ERR_GPRSUnspec;
281 break;
282 case GMMCS_IMSI_UNKNOWN:
283 case MMCS_IMSI_IN_HLR:
284 case MMCS_IMEI_NOT_ACCEPTED:
285 /* No corrosponding GMM cause */
286 case GMMCS_NO_MS_ID:
287 /* No corrosponding MM cause */
288 cme_err = CME_ERR_SimFail;
289 break;
290 case GMMCS_GSM_GPRS_NOT_ALLOWED:
291 /* No corrosponding MM cause */
292 case GMMCS_NET_FAIL:
293 case MMCS_NETWORK_FAILURE:
294 case GMMCS_MSC_TEMP_NOT_REACHABLE:
295 /* No corrosponding MM cause */
296 case GMMCS_CONGESTION:
297 case MMCS_CONGESTION:
298 cme_err = CME_ERR_NoServ;
299 break;
300 /* case GMMCS_CELL_SELECTION_FAILED: */
301 /* No corrosponding MM cause */
302 /* case GMMCS_NO_SERVICE: */
303 /* No corrosponding MM cause */
304 /* case GMMCS_LIMITED_SERVICE: */
305 /* No corrosponding MM cause */
306 /* case GMMCS_SEMANTIC_INCORRECT:
307 case MMCS_INCORRECT_MESSAGE:
308 case GMMCS_INVALID_M_INFO:
309 case MMCS_INVALID_MAND_MESSAGE:
310 case GMMCS_TYPE_INVALID:
311 case MMCS_MESSAGE_TYPE_NOT_IMPLEM:
312 case GMMCS_TYPE_INCOMPATIBLE:
313 case MMCS_MESSAGE_TYPE_INCOMPAT:
314 case GMMCS_IE_INVALID:
315 case MMCS_IE_NOT_IMPLEM:
316 case GMMCS_COND_IE_ERROR:
317 case MMCS_CONDITIONAL_IE:
318 case GMMCS_MESSAGE_INVALID:
319 case MMCS_MESSAGE_INCOMPAT:
320 case GMMCS_INT_PROTOCOL_ERROR: */
321 /* No corrosponding MM cause */
322 default:
323 cme_err = CME_ERR_Unknown;
324 }
325
326 if ( search_running EQ GMMREG_SEARCH_NOT_RUNNING )
327 {
328 /*
329 * due to implicit attach request over CGAUTO, S0, CGDATA, ATD
330 */
331 cmhGMM_inform_other_psa( 0 );
332
333 switch ( gmmEntStat.curCmd )
334 {
335 case AT_CMD_CGCLASS:
336 case AT_CMD_CGATT:
337 R_AT( RAT_CME, gmmEntStat.entOwn ) ( gmmEntStat.curCmd, cme_err );
338
339 /* log result */
340 cmh_logRslt ( gmmEntStat.entOwn, RAT_CME, gmmEntStat.curCmd, -1, -1, cme_err );
341 break;
342 }
343
344 gmmEntStat.curCmd = AT_CMD_NONE;
345 }
346
347 /*
348 * set GPRS attach state
349 */
350 switch ( detach_type )
351 {
352 case GMMREG_DT_LIMITED_SERVICE:
353 case GMMREG_DT_SIM_REMOVED:
354 cmhGMM_Set_state(AS_DETACHED);
355 break;
356 case GMMREG_DT_DISABLE_GPRS:
357 cmhGMM_Set_state(AS_SUSPENTED);
358 break;
359 case GMMREG_DT_POWER_OFF:
360 break;
361 case GMMREG_DT_GPRS:
362 case GMMREG_DT_COMB:
363 cmhGMM_Set_state(AS_DETACHED);
364 break;
365 case GMMREG_DT_IMSI:
366 break;
367 }
368
369 switch ( detach_type )
370 {
371 case GMMREG_DT_GPRS:
372 gmmShrdPrm.current_attach_type = GMMREG_AT_IMSI;
373 break;
374 case GMMREG_DT_IMSI:
375 gmmShrdPrm.current_attach_type = GMMREG_AT_GPRS;
376 break;
377 case GMMREG_DT_COMB:
378 case GMMREG_DT_POWER_OFF:
379 case GMMREG_DT_LIMITED_SERVICE:
380 case GMMREG_DT_SIM_REMOVED:
381 gmmShrdPrm.current_attach_type = ATTACH_TYPE_DETACHED;
382 break;
383 }
384 }
385
386 /*
387 +-------------------------------------------------------------------+
388 | PROJECT : GPRS (8441) MODULE : CMH_GMMR |
389 | ROUTINE : cmhGMM_Detached |
390 +-------------------------------------------------------------------+
391
392 PURPOSE : ME is detached
393
394 */
395 GLOBAL void cmhGMM_Detached ( UBYTE detach_type )
396 {
397 SHORT i;
398
399 TRACE_FUNCTION ("cmhGMM_Detached()");
400
401 /*
402 *-------------------------------------------------------------------
403 * check for command context
404 *-------------------------------------------------------------------
405 */
406 switch ( detach_type )
407 {
408 case GMMREG_DT_GPRS:
409 case GMMREG_DT_COMB:
410 for( i = 0 ; i < CMD_SRC_MAX; i++ )
411 {
412 R_AT( RAT_CGEREP, i ) ( CGEREP_EVENT_ME_DETACH, NULL );
413 R_AT( RAT_P_CGEV, i ) ( CGEREP_EVENT_ME_DETACH, NULL );
414 }
415
416 cmhGMM_Set_state(AS_DETACHED);
417 break;
418 case GMMREG_DT_POWER_OFF:
419 for( i = 0 ; i < CMD_SRC_MAX; i++ )
420 {
421 R_AT( RAT_CGEREP, i ) ( CGEREP_EVENT_ME_DETACH, NULL );
422 R_AT( RAT_P_CGEV, i ) ( CGEREP_EVENT_ME_DETACH, NULL );
423 }
424
425 cmhGMM_Set_state(AS_MOBILE_OFF);
426 break;
427 case GMMREG_DT_LIMITED_SERVICE:
428 cmhGMM_Set_state(AS_DETACHED);
429 break;
430 case GMMREG_DT_SIM_REMOVED:
431 cmhGMM_Set_state(AS_DETACHED);
432 break;
433 case GMMREG_DT_IMSI:
434 cmhGMM_Set_state(AS_ATTACHED);
435 break;
436 case GMMREG_DT_DISABLE_GPRS:
437 cmhGMM_Set_state(AS_SUSPENTED);
438 break;
439 default:
440 break;
441 }
442
443 switch ( detach_type )
444 {
445 case GMMREG_DT_IMSI:
446 gmmShrdPrm.current_attach_type = GMMREG_AT_GPRS;
447 break;
448 case GMMREG_DT_GPRS:
449 gmmShrdPrm.current_attach_type = GMMREG_AT_IMSI;
450 break;
451 case GMMREG_DT_COMB:
452 case GMMREG_DT_LIMITED_SERVICE:
453 case GMMREG_DT_SIM_REMOVED:
454 case GMMREG_DT_POWER_OFF:
455 gmmShrdPrm.current_attach_type = ATTACH_TYPE_DETACHED;
456 break;
457 }
458
459 cmhGMM_inform_other_psa( 0 );
460
461 switch( gmmEntStat.curCmd )
462 {
463 case( AT_CMD_CGCLASS ):
464 case( AT_CMD_CGATT ):
465
466 R_AT( RAT_OK, gmmEntStat.entOwn ) ( gmmEntStat.curCmd );
467
468 /* log result */
469 cmh_logRslt ( gmmEntStat.entOwn, RAT_OK, gmmEntStat.curCmd, -1, -1, -1 );
470 break;
471 }
472 gmmEntStat.curCmd = AT_CMD_NONE;
473
474 }
475
476 /*
477 +-------------------------------------------------------------------+
478 | PROJECT : GPRS (8441) MODULE : CMH_GMMR |
479 | ROUTINE : cmhGMM_NetDetach |
480 +-------------------------------------------------------------------+
481
482 PURPOSE : ME is detached by the network
483
484 */
485 GLOBAL void cmhGMM_NetDetach ( UBYTE detach_type, USHORT cause, UBYTE search_running )
486 {
487 SHORT i;
488
489 TRACE_FUNCTION ("cmhGMM_NetDetach()");
490
491 switch (detach_type)
492 {
493 case GMMREG_DT_GPRS:
494 case GMMREG_DT_COMB:
495 for( i = 0 ; i < CMD_SRC_MAX; i++ )
496 {
497 R_AT( RAT_CGEREP, i ) ( CGEREP_EVENT_NW_DETACH, NULL );
498 R_AT( RAT_P_CGEV, i ) ( CGEREP_EVENT_NW_DETACH, NULL );
499 }
500
501 case GMMREG_DT_SIM_REMOVED:
502 case GMMREG_DT_LIMITED_SERVICE:
503 cmhGMM_Set_state(AS_DETACHED);
504 break;
505 case GMMREG_DT_IMSI:
506 cmhGMM_Set_state(AS_ATTACHED);
507 break;
508 case GMMREG_DT_DISABLE_GPRS:
509 cmhGMM_Set_state(AS_SUSPENTED);
510 break;
511 case GMMREG_DT_POWER_OFF:
512 default:
513 break;
514 }
515
516 switch (detach_type)
517 {
518 case GMMREG_DT_GPRS:
519 gmmShrdPrm.current_attach_type = GMMREG_AT_IMSI;
520 break;
521 case GMMREG_DT_IMSI:
522 gmmShrdPrm.current_attach_type = GMMREG_AT_GPRS;
523 break;
524 case GMMREG_DT_COMB:
525 case GMMREG_DT_SIM_REMOVED:
526 case GMMREG_DT_LIMITED_SERVICE:
527 case GMMREG_DT_POWER_OFF:
528 gmmShrdPrm.current_attach_type = ATTACH_TYPE_DETACHED;
529 break;
530 }
531
532 }
533
534 /*
535 +-------------------------------------------------------------------+
536 | PROJECT : GPRS (8441) MODULE : CMH_GMMR |
537 | ROUTINE : cmhGMM_Plmn |
538 +-------------------------------------------------------------------+
539
540 PURPOSE : reseive a PLMN list
541
542 */
543 GLOBAL SHORT cmhGMM_Plmn ( void )
544 {
545 TRACE_FUNCTION ("cmhGMM_Plmn()");
546
547
548 return GMMH_CMD_OK;
549 }
550
551 /*
552 +-------------------------------------------------------------------+
553 | PROJECT : GPRS (8441) MODULE : CMH_GMMR |
554 | ROUTINE : cmhGMM_Suspend |
555 +-------------------------------------------------------------------+
556
557 PURPOSE : full service or limited service is available
558
559 */
560 GLOBAL SHORT cmhGMM_Suspend ( UBYTE cell_state )
561 {
562
563 TRACE_FUNCTION ("cmhGMM_Suspend()");
564
565 cmhGMM_Set_state( AS_SUSPENTED );
566
567 #if defined (SIM_TOOLKIT) AND defined (FF_SAT_E)
568
569 cmhSAT_OpChnGPRSStat(SAT_GPRS_SUSPEND, SAT_GPRS_INV_CAUSE);
570
571 #endif /* SIM_TOOLKIT AND FF_SAT_E */
572
573 return GMMH_CMD_OK;
574 }
575
576 /*
577 +-------------------------------------------------------------------+
578 | PROJECT : GPRS (8441) MODULE : CMH_GMMR |
579 | ROUTINE : cmhGMM_Resume |
580 +-------------------------------------------------------------------+
581
582 PURPOSE : GPRS full service is now available
583
584 */
585 GLOBAL SHORT cmhGMM_Resume ( void )
586 {
587
588 TRACE_FUNCTION ("cmhGMM_Resume()");
589
590 cmhGMM_Set_state( AS_ATTACHED );
591
592 #if defined (SIM_TOOLKIT) AND defined (FF_SAT_E)
593
594 cmhSAT_OpChnGPRSStat(SAT_GPRS_RESUME, SAT_GPRS_INV_CAUSE);
595
596 #endif /* SIM_TOOLKIT AND FF_SAT_E */
597
598 return GMMH_CMD_OK;
599 }
600
601 /*
602 +-------------------------------------------------------------------+
603 | PROJECT : GPRS (8441) MODULE : CMH_GMMR |
604 | ROUTINE : cmhGMM_Info |
605 +-------------------------------------------------------------------+
606
607 PURPOSE : reseive the information provided by the GMM INFORMATION message.
608
609 */
610 GLOBAL SHORT cmhGMM_Info ( void )
611 {
612 TRACE_FUNCTION ("cmhGMM_Info()");
613
614
615 return GMMH_CMD_OK;
616 }
617
618
619
620 /*
621 +-------------------------------------------------------------------+
622 | PROJECT : GSM-PS (6147) MODULE : CMH_GMMR |
623 | ROUTINE : cmhGMM_CipheringInd |
624 +-------------------------------------------------------------------+
625
626 PURPOSE : ciphering indication received
627
628 */
629
630 GLOBAL SHORT cmhGMM_CipheringInd ( UBYTE gsm_ciph, UBYTE gprs_ciph )
631 {
632 SHORT idx; /* holds index counter */
633
634 TRACE_FUNCTION ("cmhGMM_CipheringInd()");
635
636 if (simShrdPrm.ciSIMEnabled NEQ TRUE)
637 {
638 return 1;
639 }
640
641 for (idx = 0; idx < CMD_SRC_MAX; idx++)
642 {
643 /*
644 *-----------------------------------------------------------------
645 * new message indication
646 *-----------------------------------------------------------------
647 */
648 R_AT(RAT_P_CPRI,idx)(gsm_ciph, gprs_ciph);
649 }
650 return 0;
651 }
652
653
654 #endif /* GPRS */
655 /*==== EOF ========================================================*/
656