comparison src/aci2/aci/psa_simp.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 : GSM-PS (6147)
4 | Modul : PSA_SIMP
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 processing functions for the
18 | primitives send to the protocol stack adapter by the
19 | subscriber identity module.
20 +-----------------------------------------------------------------------------
21 */
22
23 #ifndef PSA_SIMP_C
24 #define PSA_SIMP_C
25 #endif
26
27 #include "aci_all.h"
28
29 /*==== INCLUDES ===================================================*/
30 #include "aci_cmh.h"
31 #include "ati_cmd.h"
32 #include "aci_cmd.h"
33
34 #ifdef FAX_AND_DATA
35 #include "aci_fd.h"
36 #endif /* of #ifdef FAX_AND_DATA */
37
38 #ifdef DTI
39 #include "dti.h"
40 #include "dti_conn_mng.h"
41 #include "dti_cntrl_mng.h"
42 #endif
43
44 #include "aci.h"
45 #include "psa.h"
46 #include "psa_sim.h"
47 #include "psa_sms.h"
48 #include "psa_mmi.h"
49 #include "cmh.h"
50 #include "cmh_mm.h"
51 #include "cmh_sim.h"
52 #include "phb.h"
53 #include "aoc.h"
54
55 #ifdef SIM_TOOLKIT
56 #include "psa_cc.h"
57 #include "aci_mem.h"
58 #include "psa_sat.h"
59 #include "cmh_sat.h"
60 #endif /* SIM_TOOLKIT */
61
62 #include "aci_ext_pers.h" /* for SIM locking constants and prototypes. */
63 #include "aci_slock.h" /* for SIM locking constants and prototypes. */
64
65 #ifdef SIM_PERS
66 #include "general.h" // included for compilation error UINT8 in sec_drv.h
67 #include "sec_drv.h"
68 #endif
69 /*==== CONSTANTS ==================================================*/
70
71
72 /*==== TYPES ======================================================*/
73
74
75 /*==== EXPORT =====================================================*/
76
77
78 /*==== VARIABLES ==================================================*/
79
80 /* Remember the last catched T_SIM_MMI_INSERT_IND, null if the last one as not remembered or freed */
81 T_SIM_MMI_INSERT_IND *last_sim_mmi_insert_ind = NULL;
82 #ifdef SIM_PERS
83 EXTERN T_SEC_DRV_CONFIGURATION *cfg_data ;
84 EXTERN T_ACI_SIM_CONFIG aci_slock_sim_config;
85 #endif
86 EXTERN void psaSIM_Insert_Continued(T_SIM_MMI_INSERT_IND *sim_mmi_insert_ind);
87
88
89 /*==== FUNCTIONS ==================================================*/
90
91
92 /*
93 +-------------------------------------------------------------------+
94 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
95 | ROUTINE : psa_sim_read_cnf |
96 +-------------------------------------------------------------------+
97
98 PURPOSE : processes the SIM_READ_CNF primitive send by SIM.
99 this is the confirmation to the SIM read data operation.
100
101 */
102 GLOBAL const void psa_sim_read_cnf ( T_SIM_READ_CNF *sim_read_cnf )
103 {
104 SHORT aId; /* holds access id */
105
106 TRACE_FUNCTION ("psa_sim_read_cnf()");
107
108 /*
109 *-------------------------------------------------------------------
110 * find entry in access parameter table
111 *-------------------------------------------------------------------
112 */
113 aId = psaSIM_atbFindDatFld( sim_read_cnf -> datafield,
114 ACT_RD_DAT, -1 );
115
116 if( aId NEQ NO_ENTRY )
117 {
118 /*
119 *---------------------------------------------------------------
120 * update access parameter and notify caller
121 *---------------------------------------------------------------
122 */
123 simShrdPrm.atb[aId].errCode = sim_read_cnf -> cause;
124 simShrdPrm.atb[aId].dataLen = sim_read_cnf -> length;
125
126 if( simShrdPrm.atb[aId].exchData )
127 memcpy (simShrdPrm.atb[aId].exchData, sim_read_cnf -> trans_data,
128 sim_read_cnf->length);
129 else
130 simShrdPrm.atb[aId].exchData = sim_read_cnf -> trans_data;
131
132 if( simShrdPrm.atb[aId].rplyCB )
133 simShrdPrm.atb[aId].rplyCB( aId );
134 else
135 simShrdPrm.atb[aId].ntryUsdFlg = FALSE;
136 }
137
138 /*
139 *-------------------------------------------------------------------
140 * free the primitive buffer
141 *-------------------------------------------------------------------
142 */
143 PFREE (sim_read_cnf);
144 }
145
146 /*
147 +-------------------------------------------------------------------+
148 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
149 | ROUTINE : psa_sim_update_cnf |
150 +-------------------------------------------------------------------+
151
152 PURPOSE : processes the SIM_READ_CNF primitive send by SIM.
153 this is the confirmation to the SIM update data operation.
154
155 */
156
157 GLOBAL const void psa_sim_update_cnf ( T_SIM_UPDATE_CNF *sim_update_cnf )
158 {
159 SHORT aId; /* holds access id */
160
161 TRACE_FUNCTION ("psa_sim_update_cnf()");
162
163 /*
164 *-------------------------------------------------------------------
165 * find entry in access parameter table
166 *-------------------------------------------------------------------
167 */
168 aId = psaSIM_atbFindDatFld( sim_update_cnf -> datafield,
169 ACT_WR_DAT, -1 );
170 if( aId NEQ NO_ENTRY )
171 {
172 /*
173 *---------------------------------------------------------------
174 * update access parameter and notify caller
175 *---------------------------------------------------------------
176 */
177 simShrdPrm.atb[aId].errCode = sim_update_cnf -> cause;
178
179 if( simShrdPrm.atb[aId].rplyCB )
180 simShrdPrm.atb[aId].rplyCB( aId );
181 else
182 simShrdPrm.atb[aId].ntryUsdFlg = FALSE;
183 }
184 /*
185 *-------------------------------------------------------------------
186 * free the primitive buffer
187 *-------------------------------------------------------------------
188 */
189 PFREE (sim_update_cnf);
190
191 }
192
193 /*
194 +-------------------------------------------------------------------+
195 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
196 | ROUTINE : psa_sim_read_record_cnf |
197 +-------------------------------------------------------------------+
198
199 PURPOSE : processes the SIM_READ_RECORD_CNF primitive send by SIM.
200 this is the confirmation to the SIM read absolute record
201 operation.
202
203 */
204
205 GLOBAL const void psa_sim_read_record_cnf
206 ( T_SIM_READ_RECORD_CNF *sim_read_record_cnf )
207 {
208 SHORT aId; /* holds access id */
209
210 TRACE_FUNCTION ("psa_sim_read_record_cnf()");
211
212 /*
213 *-------------------------------------------------------------------
214 * find entry in access parameter table
215 *-------------------------------------------------------------------
216 */
217 aId = psaSIM_atbFindDatFld( sim_read_record_cnf -> datafield,
218 ACT_RD_REC,
219 sim_read_record_cnf -> record );
220
221 if( aId NEQ NO_ENTRY )
222 {
223 /*
224 *---------------------------------------------------------------
225 * update access parameter and notify caller
226 *---------------------------------------------------------------
227 */
228 simShrdPrm.atb[aId].errCode = sim_read_record_cnf -> cause;
229 simShrdPrm.atb[aId].recMax = sim_read_record_cnf -> max_record;
230 if(simShrdPrm.atb[aId].check_dataLen AND
231 simShrdPrm.atb[aId].dataLen < sim_read_record_cnf->length)
232 {
233 TRACE_EVENT_P1("Read record is too big for buffer !!! size: %d", sim_read_record_cnf->length);
234 }
235 else
236 {
237 simShrdPrm.atb[aId].dataLen = sim_read_record_cnf -> length;
238 }
239
240 if( simShrdPrm.atb[aId].exchData )
241
242 memcpy (simShrdPrm.atb[aId].exchData, sim_read_record_cnf -> linear_data,
243 sim_read_record_cnf->length);
244 else
245
246 simShrdPrm.atb[aId].exchData = sim_read_record_cnf -> linear_data;
247
248 if( simShrdPrm.atb[aId].rplyCB )
249 simShrdPrm.atb[aId].rplyCB( aId );
250 else
251 simShrdPrm.atb[aId].ntryUsdFlg = FALSE;
252 }
253 /*
254 *-------------------------------------------------------------------
255 * free the primitive buffer
256 *-------------------------------------------------------------------
257 */
258 PFREE (sim_read_record_cnf);
259
260 }
261
262
263 /*
264 +-------------------------------------------------------------------+
265 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
266 | ROUTINE : psa_sim_update_record_cnf|
267 +-------------------------------------------------------------------+
268
269 PURPOSE : processes the SIM_READ_CNF primitive send by SIM.
270 this is the confirmation to the SIM update absolute
271 record operation.
272
273 */
274
275 GLOBAL const void psa_sim_update_record_cnf
276 ( T_SIM_UPDATE_RECORD_CNF *sim_update_record_cnf )
277 {
278 SHORT aId; /* holds access id */
279
280 TRACE_FUNCTION ("psa_sim_update_record_cnf()");
281
282 /*
283 *-------------------------------------------------------------------
284 * find entry in access parameter table
285 *-------------------------------------------------------------------
286 */
287 aId = psaSIM_atbFindDatFld( sim_update_record_cnf -> datafield,
288 ACT_WR_REC,
289 sim_update_record_cnf -> record );
290
291 if( aId NEQ NO_ENTRY )
292 {
293 /*
294 *---------------------------------------------------------------
295 * update access parameter and notify caller
296 *---------------------------------------------------------------
297 */
298 simShrdPrm.atb[aId].errCode = sim_update_record_cnf -> cause;
299
300 if( simShrdPrm.atb[aId].rplyCB )
301 simShrdPrm.atb[aId].rplyCB( aId );
302 else
303 simShrdPrm.atb[aId].ntryUsdFlg = FALSE;
304 }
305 /*
306 *-------------------------------------------------------------------
307 * free the primitive buffer
308 *-------------------------------------------------------------------
309 */
310 PFREE (sim_update_record_cnf);
311
312 }
313
314 /*
315 +-------------------------------------------------------------------+
316 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
317 | ROUTINE : psa_sim_increment_cnf |
318 +-------------------------------------------------------------------+
319
320 PURPOSE : processes the SIM_READ_CNF primitive send by SIM.
321 this is the confirmation to the SIM increment data
322 operation.
323
324 */
325
326 GLOBAL const void psa_sim_increment_cnf
327 ( T_SIM_INCREMENT_CNF *sim_increment_cnf )
328 {
329 SHORT aId; /* holds access id */
330
331 TRACE_FUNCTION ("psa_sim_increment_cnf()");
332
333 /*
334 *-------------------------------------------------------------------
335 * find entry in access parameter table
336 *-------------------------------------------------------------------
337 */
338 aId = psaSIM_atbFindDatFld( sim_increment_cnf -> datafield,
339 ACT_INC_DAT, -1 );
340
341 if( aId NEQ NO_ENTRY )
342 {
343 /*
344 *---------------------------------------------------------------
345 * update access parameter and notify caller
346 *---------------------------------------------------------------
347 */
348 simShrdPrm.atb[aId].errCode = sim_increment_cnf -> cause;
349 simShrdPrm.atb[aId].dataLen = sim_increment_cnf -> length;
350
351 if( simShrdPrm.atb[aId].exchData )
352
353 memcpy( simShrdPrm.atb[aId].exchData,
354 sim_increment_cnf -> linear_data,
355 sim_increment_cnf -> length );
356 else
357
358 simShrdPrm.atb[aId].exchData = sim_increment_cnf -> linear_data;
359
360 if( simShrdPrm.atb[aId].rplyCB )
361 simShrdPrm.atb[aId].rplyCB( aId );
362 else
363 simShrdPrm.atb[aId].ntryUsdFlg = FALSE;
364 }
365 /*
366 *-------------------------------------------------------------------
367 * free the primitive buffer
368 *-------------------------------------------------------------------
369 */
370 PFREE (sim_increment_cnf);
371
372 }
373
374 /*
375 +-------------------------------------------------------------------+
376 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
377 | ROUTINE : psa_sim_verify_pin_cnf |
378 +-------------------------------------------------------------------+
379
380 PURPOSE : processes the SIM_VERIFY_PIN_CNF primitive send by SIM.
381 this is the confirmation to the PIN verify operation.
382
383 */
384
385 GLOBAL const void psa_sim_verify_pin_cnf
386 ( T_SIM_VERIFY_PIN_CNF *sim_verify_pin_cnf )
387 {
388
389 TRACE_FUNCTION ("psa_sim_verify_pin_cnf()");
390
391 /*
392 *-------------------------------------------------------------------
393 * update shared parameter and notify ACI
394 *-------------------------------------------------------------------
395 */
396 simShrdPrm.rslt = sim_verify_pin_cnf -> cause;
397 simShrdPrm.pn1Cnt = sim_verify_pin_cnf -> pin_cnt;
398 simShrdPrm.pn2Cnt = sim_verify_pin_cnf -> pin2_cnt;
399 simShrdPrm.pk1Cnt = sim_verify_pin_cnf -> puk_cnt;
400 simShrdPrm.pk2Cnt = sim_verify_pin_cnf -> puk2_cnt;
401
402 TRACE_EVENT_P1("SIM answered with 0x%4.4X", sim_verify_pin_cnf -> cause);
403
404 switch( sim_verify_pin_cnf -> cause )
405 {
406 case( SIM_NO_ERROR ):
407 simShrdPrm.PINStat = PS_RDY;
408 if( sim_verify_pin_cnf -> pin_id EQ PHASE_2_PIN_1 )
409 simShrdPrm.pn1Stat = PS_RDY;
410 else if( sim_verify_pin_cnf -> pin_id EQ PHASE_2_PIN_2 )
411 simShrdPrm.pn2Stat = PS_RDY;
412 break;
413
414 case( SIM_CAUSE_PIN1_EXPECT ):
415 simShrdPrm.PINStat = simShrdPrm.pn1Stat = PS_PIN1;
416 break;
417
418 case( SIM_CAUSE_PIN2_EXPECT ):
419 simShrdPrm.PINStat = simShrdPrm.pn2Stat = PS_PIN2;
420 break;
421
422 case( SIM_CAUSE_PUK1_EXPECT ):
423 case( SIM_CAUSE_PIN1_BLOCKED):
424 simShrdPrm.PINStat = PS_PUK1;
425 break;
426
427 case( SIM_CAUSE_PUK2_EXPECT ):
428 case( SIM_CAUSE_PIN2_BLOCKED):
429 simShrdPrm.PINStat = PS_PUK2;
430 break;
431 }
432
433 cmhSIM_PINVerified();
434
435 /*
436 *-------------------------------------------------------------------
437 * free the primitive buffer
438 *-------------------------------------------------------------------
439 */
440 PFREE (sim_verify_pin_cnf);
441
442 }
443
444 /*
445 +-------------------------------------------------------------------+
446 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
447 | ROUTINE : psa_sim_change_pin_cnf |
448 +-------------------------------------------------------------------+
449
450 PURPOSE : processes the SIM_CHANGE_PIN_CNF primitive send by SIM.
451 this is the confirmation to the PIN change operation.
452
453 */
454
455 GLOBAL const void psa_sim_change_pin_cnf
456 ( T_SIM_CHANGE_PIN_CNF *sim_change_pin_cnf )
457 {
458
459 TRACE_FUNCTION ("psa_sim_change_pin_cnf()");
460
461 /*
462 *-------------------------------------------------------------------
463 * update shared parameter and notify ACI
464 *-------------------------------------------------------------------
465 */
466 simShrdPrm.rslt = sim_change_pin_cnf -> cause;
467 simShrdPrm.pn1Cnt = sim_change_pin_cnf -> pin_cnt;
468 simShrdPrm.pn2Cnt = sim_change_pin_cnf -> pin2_cnt;
469 simShrdPrm.pk1Cnt = sim_change_pin_cnf -> puk_cnt;
470 simShrdPrm.pk2Cnt = sim_change_pin_cnf -> puk2_cnt;
471
472 switch( sim_change_pin_cnf -> cause )
473 {
474 case( SIM_NO_ERROR ):
475 simShrdPrm.PINStat = PS_RDY;
476 if( sim_change_pin_cnf -> pin_id EQ PHASE_2_PIN_1 )
477 simShrdPrm.pn1Stat = PS_RDY;
478 else if( sim_change_pin_cnf -> pin_id EQ PHASE_2_PIN_2 )
479 simShrdPrm.pn2Stat = PS_RDY;
480 break;
481
482 case( SIM_CAUSE_PIN1_EXPECT ):
483 simShrdPrm.PINStat = simShrdPrm.pn1Stat = PS_PIN1;
484 break;
485
486 case( SIM_CAUSE_PIN2_EXPECT ):
487 simShrdPrm.PINStat = simShrdPrm.pn2Stat = PS_PIN2;
488 break;
489
490 case( SIM_CAUSE_PUK1_EXPECT ):
491 case( SIM_CAUSE_PIN1_BLOCKED):
492 simShrdPrm.PINStat = PS_PUK1;
493 break;
494
495 case( SIM_CAUSE_PUK2_EXPECT ):
496 case( SIM_CAUSE_PIN2_BLOCKED):
497 simShrdPrm.PINStat = PS_PUK2;
498 break;
499 }
500
501
502 cmhSIM_PINChanged();
503
504 /*
505 *-------------------------------------------------------------------
506 * free the primitive buffer
507 *-------------------------------------------------------------------
508 */
509 PFREE (sim_change_pin_cnf);
510
511 }
512
513 /*
514 +-------------------------------------------------------------------+
515 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
516 | ROUTINE : psa_sim_disable_pin_cnf |
517 +-------------------------------------------------------------------+
518
519 PURPOSE : processes the SIM_DISABLE_PIN_CNF primitive send by SIM.
520 this is the confirmation to the PIN disable operation.
521
522 */
523
524 GLOBAL const void psa_sim_disable_pin_cnf
525 ( T_SIM_DISABLE_PIN_CNF *sim_disable_pin_cnf )
526 {
527
528 TRACE_FUNCTION ("psa_sim_disable_pin_cnf()");
529
530 /*
531 *-------------------------------------------------------------------
532 * update shared parameter and notify ACI
533 *-------------------------------------------------------------------
534 */
535 simShrdPrm.rslt = sim_disable_pin_cnf -> cause;
536 simShrdPrm.pn1Cnt = sim_disable_pin_cnf -> pin_cnt;
537 simShrdPrm.pn2Cnt = sim_disable_pin_cnf -> pin2_cnt;
538 simShrdPrm.pk1Cnt = sim_disable_pin_cnf -> puk_cnt;
539 simShrdPrm.pk2Cnt = sim_disable_pin_cnf -> puk2_cnt;
540
541 switch( sim_disable_pin_cnf -> cause )
542 {
543 case( SIM_CAUSE_PUK1_EXPECT ):
544 case( SIM_CAUSE_PIN1_BLOCKED):
545 simShrdPrm.PINStat = PS_PUK1;
546 break;
547 }
548
549 if( sim_disable_pin_cnf -> cause EQ SIM_NO_ERROR )
550 {
551 simShrdPrm.PEDStat = PEDS_DIS;
552 }
553
554 cmhSIM_PINDisabled();
555
556 /*
557 *-------------------------------------------------------------------
558 * free the primitive buffer
559 *-------------------------------------------------------------------
560 */
561 PFREE (sim_disable_pin_cnf);
562
563 }
564
565 /*
566 +-------------------------------------------------------------------+
567 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
568 | ROUTINE : psa_sim_enable_pin_cnf |
569 +-------------------------------------------------------------------+
570
571 PURPOSE : processes the SIM_ENABLE_PIN_CNF primitive send by SIM.
572 this is the confirmation to the PIN enable operation.
573
574 */
575
576 GLOBAL const void psa_sim_enable_pin_cnf
577 ( T_SIM_ENABLE_PIN_CNF *sim_enable_pin_cnf )
578 {
579
580 TRACE_FUNCTION ("psa_sim_enable_pin_cnf()");
581
582 /*
583 *-------------------------------------------------------------------
584 * update shared parameter and notify ACI
585 *-------------------------------------------------------------------
586 */
587 simShrdPrm.rslt = sim_enable_pin_cnf -> cause;
588 simShrdPrm.pn1Cnt = sim_enable_pin_cnf -> pin_cnt;
589 simShrdPrm.pn2Cnt = sim_enable_pin_cnf -> pin2_cnt;
590 simShrdPrm.pk1Cnt = sim_enable_pin_cnf -> puk_cnt;
591 simShrdPrm.pk2Cnt = sim_enable_pin_cnf -> puk2_cnt;
592
593 switch( sim_enable_pin_cnf -> cause )
594 {
595 case( SIM_CAUSE_PUK1_EXPECT ):
596 case( SIM_CAUSE_PIN1_BLOCKED):
597 simShrdPrm.PINStat = PS_PUK1;
598 break;
599 }
600
601 if( sim_enable_pin_cnf -> cause EQ SIM_NO_ERROR )
602 {
603 simShrdPrm.PEDStat = PEDS_ENA;
604 }
605
606 cmhSIM_PINEnabled();
607
608 /*
609 *-------------------------------------------------------------------
610 * free the primitive buffer
611 *-------------------------------------------------------------------
612 */
613 PFREE (sim_enable_pin_cnf);
614
615 }
616
617 /*
618 +-------------------------------------------------------------------+
619 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
620 | ROUTINE : psa_sim_unblock_cnf |
621 +-------------------------------------------------------------------+
622
623 PURPOSE : processes the SIM_UNBLOCK_CNF primitive send by SIM.
624 this is the confirmation to the card unblock operation.
625
626 */
627
628 GLOBAL const void psa_sim_unblock_cnf
629 ( T_SIM_UNBLOCK_CNF *sim_unblock_cnf )
630 {
631
632 TRACE_FUNCTION ("psa_sim_unblock_cnf()");
633
634 /*
635 *-------------------------------------------------------------------
636 * update shared parameter and notify ACI
637 *-------------------------------------------------------------------
638 */
639 simShrdPrm.rslt = sim_unblock_cnf -> cause;
640 simShrdPrm.pn1Cnt = sim_unblock_cnf -> pin_cnt;
641 simShrdPrm.pn2Cnt = sim_unblock_cnf -> pin2_cnt;
642 simShrdPrm.pk1Cnt = sim_unblock_cnf -> puk_cnt;
643 simShrdPrm.pk2Cnt = sim_unblock_cnf -> puk2_cnt;
644
645 TRACE_EVENT_P1("SIM answered with 0x%4.4X", sim_unblock_cnf -> cause);
646
647 switch( sim_unblock_cnf -> cause )
648 {
649 case( SIM_NO_ERROR ):
650 simShrdPrm.PINStat = PS_RDY;
651
652 if( sim_unblock_cnf -> pin_id EQ PHASE_2_PUK_1 )
653 {
654 simShrdPrm.pn1Stat = PS_RDY;
655 /* 11.11/8.13 "After a successful unblocking attempt the CHV is enabled..." */
656 simShrdPrm.PEDStat = PEDS_ENA;
657 }
658 else if( sim_unblock_cnf -> pin_id EQ PHASE_2_PUK_2 )
659 simShrdPrm.pn2Stat = PS_RDY;
660 break;
661
662 case( SIM_CAUSE_PUK1_EXPECT ):
663 simShrdPrm.PINStat = PS_PUK1;
664 break;
665
666 case( SIM_CAUSE_PUK2_EXPECT ):
667 simShrdPrm.PINStat = PS_PUK2;
668 break;
669 }
670
671 cmhSIM_CardUnblocked();
672
673 /*
674 *-------------------------------------------------------------------
675 * free the primitive buffer
676 *-------------------------------------------------------------------
677 */
678 PFREE (sim_unblock_cnf);
679
680 }
681
682 /*
683 +-------------------------------------------------------------------+
684 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
685 | ROUTINE : psa_sim_sync_cnf |
686 +-------------------------------------------------------------------+
687
688 PURPOSE : processes the SIM_SYNC_CNF primitive send by SIM.
689 this is the confirmation to the data synchronization
690 operation.
691
692 */
693
694 GLOBAL const void psa_sim_sync_cnf ( T_SIM_SYNC_CNF *sim_sync_cnf )
695 {
696
697 TRACE_FUNCTION ("psa_sim_sync_cnf()");
698
699 /* disable SMS */
700 if (simShrdPrm.synCs EQ SYNC_DEACTIVATE)
701 {
702 cmhSMS_disableAccess();
703 psaSIM_Init (ACI_INIT_TYPE_SOFT_OFF);
704 percentCSTAT_indication(STATE_MSG_PBOOK, ENTITY_STATUS_NotReady);
705 }
706
707 /* notify ACI */
708 cmhSIM_SIMSync();
709
710 /* free the primitive buffer */
711 PFREE (sim_sync_cnf);
712
713 }
714
715 /*
716 +-------------------------------------------------------------------+
717 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
718 | ROUTINE : psa_sim_activate_cnf |
719 +-------------------------------------------------------------------+
720
721 PURPOSE : processes the SIM_ACTIVATE_CNF primitive send by SIM.
722 this is the confirmation to the SIM activate operation.
723
724 */
725
726 GLOBAL const void psa_sim_activate_cnf
727 ( T_SIM_ACTIVATE_CNF *sim_activate_cnf )
728 {
729 TRACE_FUNCTION ("psa_sim_activate_cnf()");
730
731 #ifdef FF_DUAL_SIM
732 if(simShrdPrm.SIM_Selection)
733 {
734 simShrdPrm.rslt = sim_activate_cnf -> cause;
735 simShrdPrm.SIM_Powered_on = sim_activate_cnf->sim_num;
736
737 cmhSIM_SIMSelected();
738 simShrdPrm.SIM_Selection = FALSE;
739
740 PFREE (sim_activate_cnf);
741
742 return;
743
744 }
745 #endif /*FF_DUAL_SIM*/
746 /*
747 *-------------------------------------------------------------------
748 * update shared parameter and notify ACI
749 *-------------------------------------------------------------------
750 */
751
752 if (simShrdPrm.setPrm[simEntStat.entOwn].actProc EQ SIM_INITIALISATION)
753 {
754 simShrdPrm.pn1Cnt = sim_activate_cnf -> pin_cnt;
755 simShrdPrm.pn2Cnt = sim_activate_cnf -> pin2_cnt;
756 simShrdPrm.pk1Cnt = sim_activate_cnf -> puk_cnt;
757 simShrdPrm.pk2Cnt = sim_activate_cnf -> puk2_cnt;
758 }
759
760 /*
761 * Build emergency call phonebook
762 */
763 #ifdef TI_PS_FFS_PHB
764 pb_set_sim_ecc (sim_activate_cnf->cause,
765 MAX_ECC,
766 sim_activate_cnf->ec_code);
767 #else
768 pb_init();
769 pb_read_ecc(sim_activate_cnf -> cause, MAX_ECC,
770 sim_activate_cnf->ec_code);
771 #endif
772
773 simShrdPrm.rslt = sim_activate_cnf -> cause;
774 TRACE_EVENT_P1("SIM answered with 0x%4.4X", sim_activate_cnf -> cause);
775
776 simShrdPrm.atr.len = MINIMUM(sim_activate_cnf->c_atr, MAX_SIM_ATR);
777 memcpy (simShrdPrm.atr.data, sim_activate_cnf -> atr, MINIMUM(sim_activate_cnf->c_atr, MAX_SIM_ATR));
778
779 switch( simShrdPrm.rslt )
780 {
781 case( SIM_NO_ERROR ):
782 simShrdPrm.SIMStat = SS_OK;
783 simShrdPrm.PINStat = simShrdPrm.pn1Stat = PS_RDY;
784 if (simShrdPrm.setPrm[simEntStat.entOwn].actProc EQ SIM_INITIALISATION)
785 simShrdPrm.PEDStat = PEDS_DIS;
786 break;
787
788 case( SIM_CAUSE_PIN1_EXPECT ):
789
790 simShrdPrm.SIMStat = SS_OK;
791 simShrdPrm.PINStat = simShrdPrm.pn1Stat = PS_PIN1;
792 simShrdPrm.PEDStat = PEDS_ENA;
793 break;
794
795 case( SIM_CAUSE_PIN2_EXPECT ):
796
797 simShrdPrm.SIMStat = SS_OK;
798 simShrdPrm.PINStat = simShrdPrm.pn2Stat = PS_PIN2;
799 break;
800
801 case( SIM_CAUSE_PIN1_BLOCKED ):
802 case( SIM_CAUSE_PUK1_EXPECT ):
803
804 simShrdPrm.SIMStat = SS_BLKD;
805 simShrdPrm.PINStat = PS_PUK1;
806 simShrdPrm.PEDStat = PEDS_ENA;
807 break;
808
809 case( SIM_CAUSE_PIN2_BLOCKED ):
810 case( SIM_CAUSE_PUK2_EXPECT ):
811
812 simShrdPrm.SIMStat = SS_BLKD;
813 simShrdPrm.PINStat = PS_PUK2;
814 break;
815
816 case( SIM_CAUSE_PUK1_BLOCKED ):
817 simShrdPrm.SIMStat = SS_INV;
818 simShrdPrm.pn1Stat = NO_VLD_PS;
819 break;
820
821 case( SIM_CAUSE_PUK2_BLOCKED ):
822 simShrdPrm.SIMStat = SS_INV;
823 simShrdPrm.pn2Stat = NO_VLD_PS;
824 break;
825
826 default:
827 if (GET_CAUSE_DEFBY(simShrdPrm.rslt) NEQ DEFBY_CONDAT AND
828 GET_CAUSE_ORIGSIDE(simShrdPrm.rslt) NEQ ORIGSIDE_MS)
829 {
830 /* unexpected result */
831 simShrdPrm.SIMStat = NO_VLD_SS;
832 TRACE_ERROR("psa_sim_activate_cnf: NO_VLD_SS");
833 break;
834 } /* no break: SIM driver error */
835 /*lint -fallthrough*/
836 case( SIM_CAUSE_CARD_REMOVED ):
837 simShrdPrm.SIMStat = SS_URCHB;
838 simShrdPrm.pn1Stat = simShrdPrm.pn2Stat = NO_VLD_PS;
839 break;
840 }
841
842 cmhSIM_SIMActivated();
843
844 /*
845 *-------------------------------------------------------------------
846 * free the primitive buffer
847 *-------------------------------------------------------------------
848 */
849 PFREE (sim_activate_cnf);
850
851 }
852
853 /*
854 +-------------------------------------------------------------------+
855 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
856 | ROUTINE : psa_sim_activate_ind |
857 +-------------------------------------------------------------------+
858
859 PURPOSE : processes the SIM_ACTIVATE_IND primitive send by SIM.
860 This is the indication about the recognition of a SIM
861 card after a previous SIM_REMOVE_IND or failed
862 SIM_ACTIVATE_REQ
863 */
864
865 GLOBAL const void psa_sim_activate_ind
866 ( T_SIM_ACTIVATE_IND *sim_activate_ind )
867 {
868
869 TRACE_FUNCTION ("psa_sim_activate_ind()");
870
871 simShrdPrm.pn1Cnt = sim_activate_ind -> pin_cnt;
872 simShrdPrm.pn2Cnt = sim_activate_ind -> pin2_cnt;
873 simShrdPrm.pk1Cnt = sim_activate_ind -> puk_cnt;
874 simShrdPrm.pk2Cnt = sim_activate_ind -> puk2_cnt;
875
876 /*
877 * Build emergency call phonebook
878 */
879 #ifdef TI_PS_FFS_PHB
880 pb_set_sim_ecc (sim_activate_ind->cause,
881 MAX_ECC,
882 sim_activate_ind->ec_code);
883 #else
884 pb_read_ecc(sim_activate_ind->cause, MAX_ECC,
885 sim_activate_ind->ec_code);
886 #endif
887
888 simShrdPrm.rslt = sim_activate_ind -> cause;
889
890 simShrdPrm.atr.len = MINIMUM(sim_activate_ind->c_atr, MAX_SIM_ATR);
891 memcpy (simShrdPrm.atr.data, sim_activate_ind -> atr, MINIMUM(sim_activate_ind->c_atr, MAX_SIM_ATR));
892
893 switch( simShrdPrm.rslt )
894 {
895 case( SIM_NO_ERROR ):
896 simShrdPrm.rslt = SIM_NO_ERROR;
897 simShrdPrm.SIMStat = SS_OK;
898 simShrdPrm.PINStat = simShrdPrm.pn1Stat = PS_RDY;
899 simShrdPrm.PEDStat = PEDS_DIS;
900 break;
901
902 case( SIM_CAUSE_PIN1_EXPECT ):
903 simShrdPrm.SIMStat = SS_OK;
904 simShrdPrm.PINStat = simShrdPrm.pn1Stat = PS_PIN1;
905 simShrdPrm.PEDStat = PEDS_ENA;
906 break;
907
908 case( SIM_CAUSE_PIN2_EXPECT ):
909 simShrdPrm.SIMStat = SS_OK;
910 simShrdPrm.PINStat = simShrdPrm.pn2Stat = PS_PIN2;
911 break;
912
913 case( SIM_CAUSE_PIN1_BLOCKED ):
914 case( SIM_CAUSE_PUK1_EXPECT ):
915 simShrdPrm.SIMStat = SS_BLKD;
916 simShrdPrm.PINStat = PS_PUK1;
917 simShrdPrm.PEDStat = PEDS_ENA;
918 break;
919
920 case( SIM_CAUSE_PIN2_BLOCKED ):
921 case( SIM_CAUSE_PUK2_EXPECT ):
922 simShrdPrm.SIMStat = SS_BLKD;
923 simShrdPrm.PINStat = PS_PUK2;
924 break;
925
926 default: /* unexpected error */
927 simShrdPrm.SIMStat = NO_VLD_SS;
928 simShrdPrm.pn1Stat = simShrdPrm.pn2Stat = NO_VLD_PS;
929 }
930
931 cmhSIM_SIMActivated();
932
933 /*
934 *-------------------------------------------------------------------
935 * free the primitive buffer
936 *-------------------------------------------------------------------
937 */
938 PFREE (sim_activate_ind);
939 }
940
941
942 /*
943 +-------------------------------------------------------------------+
944 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
945 | ROUTINE : psa_sim_mmi_insert_ind |
946 +-------------------------------------------------------------------+
947
948 PURPOSE : processes the SIM_MMI_INSERT_IND primitive send by SIM.
949 This is an indication that the SIM card was inserted
950 and verified.
951 */
952
953 GLOBAL const void psa_sim_mmi_insert_ind
954 ( T_SIM_MMI_INSERT_IND *sim_mmi_insert_ind )
955 {
956 TRACE_FUNCTION ("psa_sim_mmi_insert_ind()");
957
958 /*
959 *-------------------------------------------------------------------
960 * update shared parameter and notify ACI
961 *-------------------------------------------------------------------
962 */
963
964 if(simShrdPrm.PINStat EQ PS_PUK1)
965 {
966 TRACE_ERROR("Simcard is blocked !!! sim_mmi_insert_ind should no come before PUK");
967 PFREE (sim_mmi_insert_ind);
968 return;
969 }
970
971 simShrdPrm.SIMStat = SS_OK; /* moved here */ /* ACI-SPR-10214 */
972 simShrdPrm.crdPhs = sim_mmi_insert_ind -> phase;
973 simShrdPrm.crdFun = sim_mmi_insert_ind -> func;
974 simShrdPrm.imsi = sim_mmi_insert_ind -> imsi_field;
975
976 memcpy( simShrdPrm.srvTab, sim_mmi_insert_ind -> sim_serv,SRV_TAB_LEN );
977
978 /* disable SMS access (can be SIM Re-Initialosation) */
979 cmhSMS_disableAccess();
980
981 psaSMS_InitParams(); /* Reset SIM Parameters */
982 #ifdef SIM_PERS_OTA
983 aci_slock_ota_init();
984 #endif
985
986 /* Initialize Advice of Charge */
987 aoc_init (sim_mmi_insert_ind->phase,
988 sim_mmi_insert_ind->sim_serv);
989
990 /*
991 * Start to build phonebook
992 */
993 pb_reset();
994
995 #ifndef TI_PS_FFS_PHB
996 pb_init();
997 pb_update_ecc();
998 #endif
999
1000 cmhSIM_Read_AD();
1001 last_sim_mmi_insert_ind = sim_mmi_insert_ind ;
1002 }
1003
1004 /*
1005 +-------------------------------------------------------------------+
1006 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
1007 | ROUTINE : psa_sim_remove_ind |
1008 +-------------------------------------------------------------------+
1009
1010 PURPOSE : processes the SIM_REMOVE_IND primitive send by SIM.
1011 this is an indication that the SIM card was removed.
1012
1013 */
1014
1015 GLOBAL const void psa_sim_remove_ind
1016 ( T_SIM_REMOVE_IND *sim_remove_ind )
1017 {
1018
1019 TRACE_FUNCTION ("psa_sim_remove_ind()");
1020
1021 /*
1022 *-------------------------------------------------------------------
1023 * disable SMS access
1024 *-------------------------------------------------------------------
1025 */
1026 cmhSMS_disableAccess();
1027
1028 smsShrdPrm.cbmPrm.cbmHndl = BM0; /* switch off CBCH */
1029 smsShrdPrm.cbmPrm.cbchOwner = OWN_SAT;
1030 psaMMI_Cbch();
1031 smsShrdPrm.cbmPrm.cbchOwner = OWN_NONE;
1032 /*
1033 * reset phonebook, AOC, ...
1034 */
1035 pb_reset();
1036 aoc_reset();
1037
1038 #ifdef SIM_PERS
1039 /*
1040 * reset aci_slock
1041 */
1042 aci_slock_reset();
1043
1044 #endif
1045
1046
1047 /*
1048 * erase event list for SAT event download
1049 */
1050 #ifdef SIM_TOOLKIT
1051 satShrdPrm.event.list = 0L;
1052 satShrdPrm.event.temp_list = 0L; /* in case a setup list was in process */
1053 #endif /* SIM_TOOLKIT */
1054
1055 /*
1056 * close all open SIM accesses
1057 */
1058 psaSIM_CloseAtb ((USHORT)((sim_remove_ind->cause EQ SIM_NO_ERROR)?
1059 SIM_CAUSE_SAT_BUSY: sim_remove_ind->cause));
1060
1061 /* Issue OMAPS00058768: Reset ONSDesc */
1062 cmhMM_Reset_ONSDesc();
1063
1064 /*
1065 *-------------------------------------------------------------------
1066 * Notification is sent for reason of SIM remove ind and SIM shared
1067 * parameters are reset
1068 *-------------------------------------------------------------------
1069 */
1070 simShrdPrm.rslt = sim_remove_ind->cause;
1071 cmhSIM_SIMRemoved();
1072 psaSIM_Init(ACI_INIT_TYPE_SOFT_OFF);
1073
1074 /*
1075 *-------------------------------------------------------------------
1076 * free the primitive buffer
1077 *-------------------------------------------------------------------
1078 */
1079 PFREE (sim_remove_ind);
1080
1081 }
1082
1083 /*
1084 +-------------------------------------------------------------------+
1085 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
1086 | ROUTINE : psa_access_cnf |
1087 +-------------------------------------------------------------------+
1088
1089 PURPOSE : processes the SIM_ACCESS_IND primitive send by SIM.
1090 this is a confirmation to a previous SIM access request.
1091
1092 */
1093
1094 GLOBAL const void psa_sim_access_cnf
1095 ( T_SIM_ACCESS_CNF *sim_access_cnf )
1096 {
1097 T_SIM_TRNS_RSP_PRM rsp;
1098
1099 TRACE_FUNCTION ("psa_sim_access_cnf()");
1100
1101 /*
1102 *-------------------------------------------------------------------
1103 * update shared parameter and notify ACI
1104 *-------------------------------------------------------------------
1105 */
1106 simShrdPrm.rslt = sim_access_cnf -> cause;
1107
1108 rsp.sw1 = sim_access_cnf -> sw1;
1109 rsp.sw2 = sim_access_cnf -> sw2;
1110 rsp.rspLen = MINIMUM(sim_access_cnf -> c_trans_data, MAX_SIM_CMD);
1111 rsp.rsp = sim_access_cnf -> trans_data;
1112
1113 switch( simShrdPrm.rslt )
1114 {
1115 case( SIM_CAUSE_PIN1_EXPECT ):
1116 simShrdPrm.SIMStat = SS_OK;
1117 simShrdPrm.PINStat = simShrdPrm.pn1Stat = PS_PIN1;
1118 simShrdPrm.PEDStat = PEDS_ENA;
1119 break;
1120
1121 case( SIM_CAUSE_PIN2_EXPECT ):
1122 simShrdPrm.SIMStat = SS_OK;
1123 simShrdPrm.PINStat = simShrdPrm.pn2Stat = PS_PIN2;
1124 break;
1125
1126 case( SIM_CAUSE_PIN1_BLOCKED ):
1127 case( SIM_CAUSE_PUK1_EXPECT ):
1128 simShrdPrm.SIMStat = SS_BLKD;
1129 simShrdPrm.PINStat = PS_PUK1;
1130 simShrdPrm.PEDStat = PEDS_ENA;
1131 break;
1132
1133 case( SIM_CAUSE_PIN2_BLOCKED ):
1134 case( SIM_CAUSE_PUK2_EXPECT ):
1135 simShrdPrm.SIMStat = SS_BLKD;
1136 simShrdPrm.PINStat = PS_PUK2;
1137 break;
1138 }
1139
1140 cmhSIM_SIMResponseData( &rsp );
1141
1142 /*
1143 *-------------------------------------------------------------------
1144 * free the primitive buffer
1145 *-------------------------------------------------------------------
1146 */
1147
1148 PFREE (sim_access_cnf);
1149
1150 }
1151
1152 /*
1153 +-------------------------------------------------------------------+
1154 | PROJECT : GSM-PS () MODULE : PSA_SIMP |
1155 | ROUTINE : psa_sim_bip_config_cnf |
1156 +-------------------------------------------------------------------+
1157
1158 PURPOSE : processes the SIM_BIP_CONFIG_CNF primitive sent by SIM.
1159 Signal application about (un-)successful processing of AT_A
1160 command. Clean-up the temporal parameters.
1161 The primitive has no content!
1162 */
1163
1164 #ifdef FF_SAT_E
1165 #ifdef DTI
1166 GLOBAL const void psa_sim_bip_config_cnf(T_SIM_BIP_CONFIG_CNF *sim_bip_config_cnf)
1167 {
1168
1169 T_ACI_SAT_TERM_RESP resp_data; /* holds terminal response parms */
1170 UBYTE res;
1171
1172 TRACE_FUNCTION("psa_sim_bip_config_cnf()");
1173
1174 /* Since there is no content within this primitive, free it */
1175 PFREE(sim_bip_config_cnf);
1176
1177 /* check for OPEN CHANNEL command context, immediate channel */
1178 if( satShrdPrm.opchStat EQ OPCH_EST_REQ AND
1179 satShrdPrm.cmdDet.cmdType EQ SAT_CMD_OPEN_CHANNEL )
1180 {
1181 /* command: OPEN CHANNEL IMMEDIATELY */
1182
1183 /* init terminal response */
1184 psaSAT_InitTrmResp( &resp_data );
1185 resp_data.chnStat = TRUE;
1186 resp_data.bufSize = TRUE;
1187 resp_data.bearDesc = TRUE;
1188
1189 /* check for modification of bearer parameters */
1190 res = (satShrdPrm.opchPrmMdf)?RSLT_PERF_MDFIED:
1191 (satShrdPrm.opchCCMdfy)?RSLT_PERF_MDFY_SIM:RSLT_PERF_SUCCESS;
1192
1193 /* send terminal response to SAT */
1194 psaSAT_SendTrmResp( res, &resp_data );
1195
1196 /* finish command AT_A command */
1197 R_AT( RAT_OK, satShrdPrm.opchAcptSrc ) ( AT_CMD_A );
1198
1199 /* log result */
1200 cmh_logRslt ( satShrdPrm.opchAcptSrc, RAT_OK, AT_CMD_A, -1, -1, -1 );
1201
1202 /* reset/free satShrdPrm.opch* parameters */
1203 cmhSAT_cleanupOpChnPrms();
1204 }
1205 /* check for SEND DATA command context, on-demand channel */
1206 else if( satShrdPrm.opchStat EQ OPCH_EST_REQ AND
1207 satShrdPrm.cmdDet.cmdType EQ SAT_CMD_SEND_DATA )
1208 {
1209 /* command: SEND DATA immediately */
1210
1211 /* NO terminal response and no response to Application needed */
1212
1213 /* reset/free satShrdPrm.opch* parameters */
1214 cmhSAT_cleanupOpChnPrms();
1215 }
1216
1217 /* FREE channel parameter */
1218 if (simShrdPrm.sim_dti_chPrm NEQ NULL)
1219 {
1220 ACI_MFREE(simShrdPrm.sim_dti_chPrm);
1221 simShrdPrm.sim_dti_chPrm = NULL;
1222 TRACE_EVENT("FREE sim_dti_chPrm");
1223 }
1224 }
1225
1226 /*
1227 +-------------------------------------------------------------------+
1228 | PROJECT : GSM-PS () MODULE : PSA_SIMP |
1229 | ROUTINE : psa_sim_bip_cnf |
1230 +-------------------------------------------------------------------+
1231
1232 PURPOSE : processes the SIM_BIP_CNF primitive sent by SIM.
1233
1234 */
1235
1236 GLOBAL const void psa_sim_bip_cnf(T_SIM_BIP_CNF *sim_bip_cnf)
1237 {
1238 /* The callback function is used to proceed the action that has been triggered,
1239 * for instance, OPEN BIP channel. The result given by the bip connection
1240 * qualifier may differ from the intended action, because this is actually
1241 * the indicator whether SIM has processed it correctly! */
1242
1243 TRACE_FUNCTION ("psa_sim_bip_cnf()");
1244
1245 if((sim_bip_cnf->bip_conn & simShrdPrm.sim_dti_chPrm->sat_chn_prm.bipConn) > 0)
1246 {
1247 TRACE_EVENT("psa_sim_bip_cnf: BIP operation successful");
1248 }
1249 else
1250 {
1251 TRACE_EVENT("psa_sim_bip_cnf: BIP operation not successful");
1252 }
1253
1254 /*
1255 * go on with requested action
1256 */
1257 if( simShrdPrm.sim_dti_chPrm->bip_cb )
1258 {
1259 /* FREE BIP channel parameter */
1260 simShrdPrm.sim_dti_chPrm->bip_cb(sim_bip_cnf->bip_conn,
1261 sim_bip_cnf->bip_ch_id);
1262 }
1263
1264 }
1265
1266 /*
1267 +-------------------------------------------------------------------+
1268 | PROJECT : GSM-PS () MODULE : PSA_SIMP |
1269 | ROUTINE : psa_sim_dti_cnf |
1270 +-------------------------------------------------------------------+
1271
1272 PURPOSE : processes the SIM_DTI_CNF primitive sent by SIM.
1273
1274 */
1275
1276 GLOBAL const void psa_sim_dti_cnf (T_SIM_DTI_CNF *sim_dti_cnf)
1277 {
1278 UBYTE dti_id;
1279 void (*sat_cb)(UBYTE dtiConn, UBYTE chnId);
1280
1281 TRACE_FUNCTION ("psa_sim_dti_cnf()");
1282
1283 if(sim_dti_cnf->dti_conn EQ simShrdPrm.sim_dti_chPrm->sat_chn_prm.dtiConn)
1284 {
1285 /* REQUEST SUCCESSFUL */
1286 if( sim_dti_cnf->dti_conn EQ (SIM_DTI_CONNECT) )
1287 {
1288 /* SUCCESSFUL DTI CONNECTION */
1289 /*
1290 * inform dti manager about successfull connection,
1291 * call cb of DTI initiator
1292 */
1293 dti_cntrl_entity_connected (sim_dti_cnf->link_id, DTI_ENTITY_SIM, DTI_OK);
1294 }
1295 else if( sim_dti_cnf->dti_conn EQ SIM_DTI_DISCONNECT )
1296 {
1297 /* SUCCESSFUL DTI DISCONNECTON */
1298 /* check whether the BIP channel has to be dropped */
1299 if( simShrdPrm.sim_dti_chPrm->sat_chn_prm.bipConn
1300 EQ SIM_BIP_CLOSE_CHANNEL )
1301 {
1302 /* resetting stored SIM DTI ID */
1303 psaSIM_Bip_Req();
1304 }
1305 /*
1306 *inform dti manager about successfull disconnection,
1307 * call cb of DTI function
1308 */
1309
1310 dti_cntrl_entity_disconnected (sim_dti_cnf->link_id, DTI_ENTITY_SIM);
1311
1312 }
1313 /* callback to SAT Source */
1314 if( simShrdPrm.sim_dti_chPrm->dti_cb )
1315 {
1316 simShrdPrm.sim_dti_chPrm->dti_cb(sim_dti_cnf->dti_conn,
1317 sim_dti_cnf->link_id);
1318 }
1319 }
1320 else
1321 {
1322 /* UNSUCCESSFUL DTI CONNECTION OR DISCONNECTION*/
1323 if(sim_dti_cnf->dti_conn EQ SIM_DTI_DISCONNECT)
1324 {
1325 /* UNSUCCESSFUL CONNECTION */
1326 /* inform dti manager that connection request failed */
1327 dti_cntrl_entity_connected (sim_dti_cnf->link_id, DTI_ENTITY_SIM, DTI_ERROR);
1328 }
1329 /*
1330 * error --> callback to SAT Source but not ACI_FREE of
1331 * simShrdPrm.sim_dti_chPrm
1332 */
1333 if( simShrdPrm.sim_dti_chPrm->dti_cb )
1334 {
1335 simShrdPrm.sim_dti_chPrm->dti_cb(sim_dti_cnf->dti_conn,
1336 sim_dti_cnf->link_id);
1337 }
1338 }
1339
1340 PFREE(sim_dti_cnf);
1341 }
1342
1343 #endif /* DTI */
1344 #endif /* #ifdef FF_SAT_E */
1345 /*
1346 +-------------------------------------------------------------------+
1347 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
1348 | ROUTINE : psa_sim_eventlist_cnf |
1349 +-------------------------------------------------------------------+
1350
1351 PURPOSE : processes the SIM_EVENTLIST_CNF primitive sent by SIM.
1352 This is the confirmation of the changed
1353 data available event status(send in SIM_EVENTLIST_REQ)
1354 */
1355
1356 GLOBAL const void psa_sim_eventlist_cnf ( T_SIM_EVENTLIST_CNF *sim_eventlist_cnf )
1357 {
1358
1359 TRACE_FUNCTION ("psa_sim_eventlist_cnf()");
1360
1361 switch(sim_eventlist_cnf->event_data_avail)
1362 {
1363 case SIM_EVENT_DISABLE:
1364 case SIM_EVENT_ENABLE:
1365 break;
1366 default:
1367 TRACE_EVENT("psa_sim_eventlist_cnf:not valid event_data_avail");
1368 }
1369 /*
1370 *-------------------------------------------------------------------
1371 * free the primitive buffer
1372 *-------------------------------------------------------------------
1373 */
1374 PFREE (sim_eventlist_cnf);
1375
1376 }
1377
1378 /*
1379 +-------------------------------------------------------------------+
1380 | PROJECT : GSM-PS (6147) MODULE : PSA_SIMP |
1381 | ROUTINE : psa_sim_dti_ind |
1382 +-------------------------------------------------------------------+
1383
1384 PURPOSE : processes the SIM_DTI_IND primitive sent by SIM
1385 indicating closing of BIP channel and dti connection
1386 (because the release timer is expired)
1387 */
1388 #ifdef FF_SAT_E
1389 #ifdef DTI
1390 GLOBAL const void psa_sim_dti_bip_ind ( T_SIM_DTI_BIP_IND *sim_dti_bip_ind )
1391 {
1392
1393 TRACE_FUNCTION ("psa_sim_dti_bip_ind()");
1394
1395 /* inform SAT Source about bip_ch_id and dti_conn*/
1396
1397 if((sim_dti_bip_ind->dti_conn NEQ SIM_DTI_DISCONNECT) OR
1398 (sim_dti_bip_ind->dti_conn NEQ SIM_BIP_CLOSE_CHANNEL))
1399 {
1400 TRACE_FUNCTION ("psa_sim_dti_bip_ind: bip/dti parameter combination received!");
1401 }
1402
1403 cmhSAT_OpChnSIMFail( sim_dti_bip_ind->dti_conn,
1404 sim_dti_bip_ind->bip_conn,
1405 sim_dti_bip_ind->bip_ch_id );
1406
1407 /*
1408 *-------------------------------------------------------------------
1409 * free the primitive buffer
1410 *-------------------------------------------------------------------
1411 */
1412 PFREE (sim_dti_bip_ind);
1413
1414 }
1415 #endif /* DTI */
1416 #endif /* #ifdef FF_SAT_E */
1417
1418 /*
1419 +------------------------------------------------------------------------------
1420 | Function : psaSIM_Insert_Continued
1421 +------------------------------------------------------------------------------
1422 | Description : For loading phone book
1423 |
1424 | Parameters :sim_mmi_insert_ind - Primitive
1425 |
1426 | Return : Void
1427 |
1428 +------------------------------------------------------------------------------
1429 */
1430
1431
1432 void psaSIM_Insert_Continued(T_SIM_MMI_INSERT_IND *sim_mmi_insert_ind )
1433 {
1434 #ifdef TI_PS_FFS_PHB
1435 /* Inform the phonebook module about all SIM parameters except ECC */
1436 pb_inserted_sim (MAX_SRV_TBL,
1437 sim_mmi_insert_ind->sim_serv,
1438 &sim_mmi_insert_ind->imsi_field,
1439 sim_mmi_insert_ind->func,
1440 sim_mmi_insert_ind->phase);
1441 #else
1442 pb_build_req(sim_mmi_insert_ind);
1443 #endif
1444 cmhSIM_SIMInserted();
1445 }
1446 /*==== EOF =========================================================*/
1447
1448