FreeCalypso > hg > fc-magnetite
comparison src/aci2/aci/cmh_simr.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 : CMH_SIMR | |
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 | the subscriber identity module. | |
20 +----------------------------------------------------------------------------- | |
21 */ | |
22 | |
23 #ifndef CMH_SIMR_C | |
24 #define CMH_SIMR_C | |
25 #endif | |
26 | |
27 #include "aci_all.h" | |
28 /*==== INCLUDES ===================================================*/ | |
29 #include "aci_mem.h" | |
30 | |
31 #include "aci_cmh.h" | |
32 #include "ati_cmd.h" | |
33 #include "aci_cmd.h" | |
34 #include "pcm.h" | |
35 | |
36 #ifdef FAX_AND_DATA | |
37 #include "aci_fd.h" | |
38 #endif /* of #ifdef FAX_AND_DATA */ | |
39 | |
40 #ifndef _SIMULATION_ | |
41 #include "ffs/ffs.h" | |
42 #include "ffs_coat.h" | |
43 #endif | |
44 | |
45 #ifdef DTI | |
46 #include "dti.h" /* functionality of the dti library */ | |
47 #include "dti_conn_mng.h" | |
48 #include "dti_cntrl_mng.h" | |
49 #endif /* DTI */ | |
50 | |
51 #include "phb.h" | |
52 #include "ksd.h" | |
53 #include "aci.h" | |
54 #include "psa.h" | |
55 #include "psa_sim.h" | |
56 #include "psa_cc.h" | |
57 #include "psa_sat.h" | |
58 #include "psa_mm.h" | |
59 #include "cmh.h" | |
60 #include "cmh_sim.h" | |
61 #include "cmh_mm.h" | |
62 #include "cmh_phb.h" | |
63 | |
64 #include "aci_ext_pers.h" | |
65 #include "aci_slock.h" | |
66 | |
67 #ifdef SIM_PERS | |
68 #include "general.h" // included for compilation error UNIT8 in sec_drv.h | |
69 #include "sec_drv.h" | |
70 #endif | |
71 | |
72 #ifdef GPRS | |
73 #include "gaci.h" | |
74 #include "gaci_cmh.h" | |
75 #include "psa_gmm.h" | |
76 #include "cmh_gmm.h" | |
77 #endif | |
78 | |
79 #include "p_mmcc.h" | |
80 #include "m_cc.h" | |
81 | |
82 #include "aoc.h" | |
83 | |
84 #ifdef DTI | |
85 #include "wap_aci.h" | |
86 #include "psa_tcpip.h" | |
87 #include "psa_l2r.h" | |
88 #endif | |
89 | |
90 #ifdef SIM_PERS | |
91 EXTERN T_ACI_SIM_CONFIG aci_slock_sim_config; /* SIM configuration, initialised by a T_SIM_MMI_INSERT_IND */ | |
92 EXTERN T_SEC_DRV_CONFIGURATION *cfg_data ; | |
93 #endif | |
94 | |
95 /*==== CONSTANTS ==================================================*/ | |
96 | |
97 | |
98 /*==== TYPES ======================================================*/ | |
99 | |
100 | |
101 /*==== EXPORT =====================================================*/ | |
102 | |
103 | |
104 /*==== VARIABLES ==================================================*/ | |
105 | |
106 /*==== FUNCTIONS ==================================================*/ | |
107 | |
108 /* | |
109 +-------------------------------------------------------------------+ | |
110 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
111 | ROUTINE : cmhSIM_SIMSync | | |
112 +-------------------------------------------------------------------+ | |
113 | |
114 PURPOSE : SIM data synchronized | |
115 | |
116 */ | |
117 | |
118 GLOBAL void cmhSIM_SIMSync ( void ) | |
119 { | |
120 TRACE_FUNCTION ("cmhSIM_SIMSync()"); | |
121 | |
122 /* process event */ | |
123 switch( simEntStat.curCmd ) | |
124 { | |
125 case( AT_CMD_CFUN ): | |
126 if (mmEntStat.curCmd NEQ AT_CMD_CFUN) /* Has MM already deregistered? */ | |
127 { | |
128 R_AT( RAT_OK, simEntStat.entOwn ) | |
129 ( AT_CMD_CFUN ); | |
130 | |
131 /* log result */ | |
132 cmh_logRslt ( simEntStat.entOwn, RAT_OK, AT_CMD_CFUN, -1, -1, -1 ); | |
133 } | |
134 /*lint -fallthrough*/ | |
135 case( AT_CMD_COPS ): | |
136 case( AT_CMD_P_COPS ): | |
137 | |
138 simEntStat.curCmd = AT_CMD_NONE; | |
139 break; | |
140 } | |
141 } | |
142 | |
143 /* | |
144 +-------------------------------------------------------------------+ | |
145 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
146 | ROUTINE : clck_fdn_accepted() | | |
147 +-------------------------------------------------------------------+ | |
148 | |
149 PURPOSE : PIN2 status allows CLCK changing the status concerning FDN. | |
150 | |
151 */ | |
152 | |
153 LOCAL void clck_fdn_accepted ( void ) | |
154 { | |
155 switch( simShrdPrm.setPrm[simEntStat.entOwn].actProc ) | |
156 { | |
157 case( SIM_FDN_ENABLE ): | |
158 if( simShrdPrm.crdFun EQ SIM_ADN_ENABLED ) | |
159 { | |
160 simShrdPrm.crdFun = SIM_FDN_ENABLED; | |
161 } | |
162 if( simShrdPrm.crdFun EQ SIM_ADN_BDN_ENABLED ) | |
163 { | |
164 simShrdPrm.crdFun = SIM_FDN_BDN_ENABLED; | |
165 } | |
166 | |
167 pb_switch_adn_fdn( FDN_ENABLE, simShrdPrm.classFDN ); /* inform PHB */ | |
168 break; | |
169 | |
170 case( SIM_FDN_DISABLE ): | |
171 if( simShrdPrm.crdFun EQ SIM_FDN_ENABLED ) | |
172 { | |
173 simShrdPrm.crdFun = SIM_ADN_ENABLED; | |
174 } | |
175 if( simShrdPrm.crdFun EQ SIM_FDN_BDN_ENABLED ) | |
176 { | |
177 simShrdPrm.crdFun = SIM_ADN_BDN_ENABLED; | |
178 } | |
179 pb_switch_adn_fdn( FDN_DISABLE, simShrdPrm.classFDN ); /* inform PHB */ | |
180 break; | |
181 } | |
182 } | |
183 | |
184 /* | |
185 +-------------------------------------------------------------------+ | |
186 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
187 | ROUTINE : cmhsim_simactivated_clck | | |
188 +-------------------------------------------------------------------+ | |
189 PURPOSE : SIM activated after AT+CLCK | |
190 */ | |
191 | |
192 LOCAL void cmhsim_simactivated_clck( void ) | |
193 { | |
194 T_ACI_CME_ERR err = CME_ERR_Unknown; | |
195 T_SIM_SET_PRM *sim_set_prm; | |
196 | |
197 TRACE_FUNCTION ("cmhsim_simactivated_clck()"); | |
198 | |
199 simEntStat.curCmd = AT_CMD_NONE; | |
200 sim_set_prm = &simShrdPrm.setPrm[simEntStat.entOwn]; | |
201 | |
202 switch( simShrdPrm.rslt ) | |
203 { | |
204 case( SIM_NO_ERROR ): | |
205 clck_fdn_accepted(); | |
206 | |
207 R_AT( RAT_OK, simEntStat.entOwn ) | |
208 ( AT_CMD_CLCK ); | |
209 cmh_logRslt ( simEntStat.entOwn, RAT_OK, AT_CMD_CLCK, -1, -1, -1 ); | |
210 return; | |
211 | |
212 case( SIM_CAUSE_PIN2_EXPECT ): | |
213 TRACE_EVENT_P1("simShrdPrm.pn2Stat: %d", simShrdPrm.pn2Stat); | |
214 | |
215 if ( simShrdPrm.pn2Stat EQ PS_PIN2 ) | |
216 { | |
217 if ( ( simShrdPrm.setPrm[simEntStat.entOwn].curPIN[0] NEQ 0x00 ) AND | |
218 ( simShrdPrm.setPrm[simEntStat.entOwn].curPIN[0] NEQ NOT_PRESENT_CHAR ) ) | |
219 { | |
220 /* if PIN2 is required and a pin is given, then check pin with PIN2 */ | |
221 simEntStat.curCmd = AT_CMD_CLCK; /* further processing */ | |
222 | |
223 simShrdPrm.setPrm[simEntStat.entOwn].PINType = PHASE_2_PIN_2; | |
224 psaSIM_VerifyPIN(); /* verify PIN */ | |
225 return; | |
226 } | |
227 else | |
228 { | |
229 /* if PIN2 is required and no pin is given, then send cme_err with PIN2 | |
230 required message code */ | |
231 if ( simShrdPrm.PINStat EQ PS_RDY ) | |
232 { | |
233 simShrdPrm.PINStat = PS_PIN2; | |
234 } | |
235 err = CME_ERR_SimPin2Req; | |
236 } | |
237 } | |
238 else | |
239 { | |
240 err = CME_ERR_WrongPasswd; | |
241 } | |
242 break; | |
243 | |
244 /*case( SIM_CAUSE_PIN1_EXPECT ): | |
245 case( SIM_CAUSE_PUK1_EXPECT ):*/ | |
246 | |
247 /* Should be CME_ERR_SimPuk2Req, and it is done | |
248 in the default case | |
249 case( SIM_CAUSE_PIN2_BLOCKED): | |
250 case( SIM_CAUSE_PUK2_EXPECT ): | |
251 err = CME_ERR_WrongPasswd; | |
252 break;*/ | |
253 | |
254 default: | |
255 err = cmhSIM_GetCmeFromSim( simShrdPrm.rslt ); | |
256 break; | |
257 } | |
258 | |
259 R_AT( RAT_CME, simEntStat.entOwn ) | |
260 ( AT_CMD_CLCK, err ); | |
261 cmh_logRslt ( simEntStat.entOwn, RAT_CME, AT_CMD_CLCK, | |
262 -1, -1, err ); | |
263 | |
264 } | |
265 | |
266 /* | |
267 +-------------------------------------------------------------------+ | |
268 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
269 | ROUTINE : cmhsim_simactivated_start | | |
270 +-------------------------------------------------------------------+ | |
271 PURPOSE : SIM activated after AT+CFUN, +CPIN, +CIMI and %NRG | |
272 */ | |
273 LOCAL void simactivated_cpinresult( T_ACI_CPIN_RSLT cpin_result ) | |
274 { | |
275 R_AT( RAT_CPIN, simEntStat.entOwn ) | |
276 ( cpin_result ); | |
277 R_AT( RAT_OK, simEntStat.entOwn ) | |
278 ( AT_CMD_CPIN ); | |
279 cmh_logRslt ( simEntStat.entOwn, RAT_OK, AT_CMD_CPIN, | |
280 -1, -1, -1 ); | |
281 } | |
282 | |
283 LOCAL void simactivated_errorresult( T_ACI_CME_ERR error_result, UBYTE cmdBuf ) | |
284 { | |
285 R_AT( RAT_CME, simEntStat.entOwn ) | |
286 ( cmdBuf, error_result ); | |
287 | |
288 if( cmdBuf NEQ AT_CMD_CIMI ) | |
289 { | |
290 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
291 -1, -1, error_result ); | |
292 } | |
293 } | |
294 | |
295 LOCAL void cmhsim_simactivated_start( void ) | |
296 { | |
297 UBYTE cmdBuf = simEntStat.curCmd; /* buffers current command */ | |
298 | |
299 TRACE_FUNCTION ("cmhsim_simactivated_start()"); | |
300 | |
301 simEntStat.curCmd = AT_CMD_NONE; | |
302 | |
303 switch( simShrdPrm.SIMStat ) | |
304 { | |
305 case( SS_INV ): | |
306 simactivated_errorresult( CME_ERR_SimWrong, cmdBuf ); | |
307 return; | |
308 | |
309 case( SS_URCHB ): | |
310 simactivated_errorresult( CME_ERR_SimNotIns, cmdBuf ); | |
311 return; | |
312 | |
313 case( NO_VLD_SS ): | |
314 simactivated_errorresult( CME_ERR_NotPresent, cmdBuf ); | |
315 return; | |
316 | |
317 case( SS_OK ): | |
318 switch( simShrdPrm.PINStat ) | |
319 { | |
320 case( PS_PIN1 ): | |
321 if( cmdBuf EQ AT_CMD_CPIN ) | |
322 { | |
323 simactivated_cpinresult( CPIN_RSLT_SimPinReq ); | |
324 } | |
325 else | |
326 { | |
327 simactivated_errorresult( CME_ERR_SimPinReq, cmdBuf ); | |
328 } | |
329 break; | |
330 | |
331 case( PS_PIN2 ): | |
332 if( cmdBuf EQ AT_CMD_CPIN ) | |
333 { | |
334 simactivated_cpinresult( CPIN_RSLT_SimPin2Req ); | |
335 } | |
336 else | |
337 { | |
338 simactivated_errorresult( CME_ERR_SimPin2Req, cmdBuf ); | |
339 } | |
340 break; | |
341 | |
342 case( PS_RDY ): | |
343 /* wait for SIM insert indication to complete command */ | |
344 simEntStat.curCmd = cmdBuf; | |
345 break; | |
346 } | |
347 break; | |
348 | |
349 case( SS_BLKD ): | |
350 | |
351 switch( simShrdPrm.PINStat ) | |
352 { | |
353 case( PS_PUK1 ): | |
354 if( cmdBuf EQ AT_CMD_CPIN ) | |
355 { | |
356 simactivated_cpinresult( CPIN_RSLT_SimPukReq ); | |
357 } | |
358 else | |
359 { | |
360 simactivated_errorresult( CME_ERR_SimPukReq, cmdBuf ); | |
361 } | |
362 break; | |
363 | |
364 case( PS_PUK2 ): | |
365 if( cmdBuf EQ AT_CMD_CPIN ) | |
366 { | |
367 simactivated_cpinresult( CPIN_RSLT_SimPuk2Req ); | |
368 } | |
369 else | |
370 { | |
371 simactivated_errorresult( CME_ERR_SimPuk2Req, cmdBuf ); | |
372 } | |
373 break; | |
374 } | |
375 break; | |
376 | |
377 } | |
378 } | |
379 | |
380 /* | |
381 +-------------------------------------------------------------------+ | |
382 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
383 | ROUTINE : cmhSIM_SIMActivated | | |
384 +-------------------------------------------------------------------+ | |
385 | |
386 PURPOSE : SIM activated | |
387 | |
388 */ | |
389 | |
390 GLOBAL void cmhSIM_SIMActivated ( void ) | |
391 { | |
392 T_ACI_CMD_SRC idx; | |
393 | |
394 TRACE_FUNCTION ("cmhSIM_SIMActivated()"); | |
395 | |
396 /* check for command context */ | |
397 switch( simEntStat.curCmd ) | |
398 { | |
399 case( AT_CMD_CFUN ): | |
400 case( AT_CMD_CPIN ): | |
401 case( AT_CMD_CIMI ): | |
402 case( AT_CMD_NRG ): | |
403 case( AT_CMD_SIMRST): | |
404 /* process event for +CFUN, +CPIN, +CIMI and for %NRG command */ | |
405 cmhsim_simactivated_start( ); | |
406 break; | |
407 | |
408 case( AT_CMD_CLCK ): | |
409 /* process event for +CLCK command */ | |
410 cmhsim_simactivated_clck( ); | |
411 break; | |
412 | |
413 case( AT_CMD_NONE ): | |
414 /* process event spontaneous insertion */ | |
415 if (simShrdPrm.rslt EQ SIM_NO_ERROR) | |
416 { | |
417 ; /* do nothing right now since the %SIMINS: -1 must be | |
418 syncronized with SIM_MMI_INSERT_IND which will come later! */ | |
419 } | |
420 else | |
421 { | |
422 for( idx = 0; idx < CMD_SRC_MAX; idx++ ) | |
423 { | |
424 R_AT( RAT_SIMINS, idx )(cmhSIM_GetCmeFromSim (simShrdPrm.rslt)); | |
425 } | |
426 } | |
427 break; | |
428 } | |
429 } | |
430 | |
431 /* | |
432 +-------------------------------------------------------------------+ | |
433 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
434 | ROUTINE : cmhSIM_SIMInserted | | |
435 +-------------------------------------------------------------------+ | |
436 | |
437 PURPOSE : SIM inserted | |
438 | |
439 */ | |
440 | |
441 GLOBAL void cmhSIM_SIMInserted ( void ) | |
442 { | |
443 UBYTE cmdBuf; /* buffers current command */ | |
444 CHAR imsiBuf[MAX_IMSI_LEN+1]; /* buffer IMSI representation +1 for '\0'*/ | |
445 T_ACI_CME_ERR err_code = CME_ERR_NotPresent; /* code holding the correct error code calculated */ | |
446 BOOL return_rat_ok = 1; /* return ok? */ | |
447 | |
448 TRACE_FUNCTION ("cmhSIM_SIMInserted()"); | |
449 | |
450 /* Check if the SIM is functional and the IMSI value is valid*/ | |
451 if ( simShrdPrm.crdFun EQ SIM_NO_OPERATION OR | |
452 simShrdPrm.imsi.c_field EQ 0 ) | |
453 { | |
454 simShrdPrm.SIMStat = SS_INV; | |
455 err_code = CME_ERR_SimWrong; | |
456 } | |
457 | |
458 switch( simEntStat.curCmd ) | |
459 { | |
460 case( AT_CMD_CFUN ): | |
461 case( AT_CMD_CPIN ): | |
462 case( AT_CMD_PVRF ): | |
463 case( AT_CMD_SIMRST): | |
464 case( KSD_CMD_UBLK): | |
465 /* | |
466 *---------------------------------------------------------------- | |
467 * process event for +CFUN, +CPIN, %PVRF commands and for the | |
468 SIM reset condition | |
469 *---------------------------------------------------------------- | |
470 */ | |
471 | |
472 cmdBuf = simEntStat.curCmd; | |
473 simEntStat.curCmd = AT_CMD_NONE; | |
474 #ifdef SIM_PERS | |
475 if((aci_slock_sim_config.sim_type EQ SIM_TYPEAPPROVAL) AND AciSLockShrd.blocked) | |
476 { | |
477 simShrdPrm.SIMStat = SS_INV; | |
478 err_code = CME_ERR_SimWrong; | |
479 } | |
480 if(cfg_data EQ NULL) | |
481 { | |
482 simShrdPrm.SIMStat = SS_INV; | |
483 err_code = CME_ERR_Unknown; | |
484 R_AT( RAT_CME, simEntStat.entOwn ) ( cmdBuf, err_code ); | |
485 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, -1, -1, err_code ); | |
486 simShrdPrm.PINQuery = 0; | |
487 return; | |
488 } | |
489 #endif | |
490 | |
491 if( err_code EQ CME_ERR_SimWrong ) | |
492 { | |
493 R_AT( RAT_CME, simEntStat.entOwn ) ( cmdBuf, err_code ); | |
494 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, -1, -1, err_code ); | |
495 simShrdPrm.PINQuery = 0; | |
496 return; | |
497 } | |
498 | |
499 #ifdef SIM_PERS | |
500 /* check for personalisation locking. If SIM was detected as not correct, do signal AT_CPIN */ | |
501 | |
502 if ( AciSLockShrd.blocked) | |
503 { | |
504 /* @GBR: Alternativly CME_ERR_SimWrong might be returned, but this way is telling the MMI mor specific, what went wrong. */ | |
505 aci_set_cme_error_code(AciSLockShrd.current_lock,&err_code); | |
506 | |
507 return_rat_ok = 0; | |
508 R_AT( RAT_CME, simEntStat.entOwn ) | |
509 ( cmdBuf, err_code ); | |
510 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, -1, -1, err_code ); | |
511 } | |
512 | |
513 #endif | |
514 if ( (cmdBuf EQ AT_CMD_CPIN) AND (simShrdPrm.PINQuery EQ 1) ) /* Case when PIN is disabled and CFUN=0 */ | |
515 { | |
516 R_AT( RAT_CPIN, simEntStat.entOwn ) | |
517 ( CPIN_RSLT_SimReady ); | |
518 simShrdPrm.PINQuery = 0; | |
519 } | |
520 | |
521 #if defined (GPRS) AND defined (DTI) | |
522 gprs_sim_inserted(); | |
523 #endif /* GPRS */ | |
524 | |
525 if (return_rat_ok EQ 1) /* @gbr: only send ok, if everhing went okay. The +CFUN might not be ready here, so don't send something! */ | |
526 { | |
527 | |
528 R_AT( RAT_OK, simEntStat.entOwn ) ( cmdBuf ); | |
529 cmh_logRslt ( simEntStat.entOwn, RAT_OK, cmdBuf, -1, -1, -1 ); | |
530 } | |
531 break; | |
532 | |
533 case( AT_CMD_CIMI ): | |
534 /* | |
535 *---------------------------------------------------------------- | |
536 * process event for +CIMI command | |
537 *---------------------------------------------------------------- | |
538 */ | |
539 | |
540 | |
541 if( err_code EQ CME_ERR_SimWrong ) | |
542 { | |
543 R_AT( RAT_CME, simEntStat.entOwn ) ( AT_CMD_CIMI, err_code ); | |
544 cmh_logRslt ( simEntStat.entOwn, RAT_CME, AT_CMD_CIMI, -1, -1, err_code ); | |
545 return; | |
546 } | |
547 | |
548 R_AT( RAT_CIMI, simEntStat.entOwn ) | |
549 ( psaSIM_cnvrtIMSI2ASCII( imsiBuf )); | |
550 | |
551 simEntStat.curCmd = AT_CMD_NONE; | |
552 | |
553 R_AT( RAT_OK, simEntStat.entOwn ) | |
554 ( AT_CMD_CIMI ); | |
555 break; | |
556 | |
557 case( AT_CMD_NRG ): | |
558 /* | |
559 *---------------------------------------------------------------- | |
560 * process event for %NRG | |
561 *---------------------------------------------------------------- | |
562 */ | |
563 cmdBuf = simEntStat.curCmd; | |
564 if( err_code EQ CME_ERR_SimWrong ) | |
565 { | |
566 simEntStat.curCmd = AT_CMD_NONE; | |
567 mmEntStat.curCmd = AT_CMD_NONE; | |
568 R_AT( RAT_CME, simEntStat.entOwn ) ( cmdBuf, err_code ); | |
569 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, -1, -1, err_code ); | |
570 return; | |
571 } | |
572 | |
573 switch( cmhPrm[simShrdPrm.owner].mmCmdPrm.NRGregMode ) | |
574 { | |
575 case( NRG_RGMD_Auto ): | |
576 | |
577 mmShrdPrm.regMode = MODE_AUTO; | |
578 | |
579 simEntStat.curCmd = AT_CMD_NONE; | |
580 mmEntStat.curCmd = AT_CMD_NRG; | |
581 mmEntStat.entOwn = mmShrdPrm.owner = simShrdPrm.owner; | |
582 | |
583 #if defined (GPRS) AND defined (DTI) | |
584 (void)psaG_MM_CMD_REG (); /* register to network */ | |
585 #else | |
586 (void)psaMM_Registrate (); /* register to network */ | |
587 #endif | |
588 | |
589 cmhMM_Ntfy_NtwRegistrationStatus(CREG_STAT_Search); | |
590 break; | |
591 | |
592 case( NRG_RGMD_Manual ): | |
593 | |
594 mmShrdPrm.regMode = MODE_MAN; | |
595 | |
596 simEntStat.curCmd = AT_CMD_NONE; | |
597 mmEntStat.curCmd = AT_CMD_NRG; | |
598 mmEntStat.entOwn = mmShrdPrm.owner = simShrdPrm.owner; | |
599 | |
600 #if defined (GPRS) && defined (DTI) | |
601 psaG_MM_CMD_NET_SEL ( ); /* register to network */ | |
602 #else | |
603 psaMM_NetSel (); /* register to network */ | |
604 #endif | |
605 | |
606 cmhMM_Ntfy_NtwRegistrationStatus(CREG_STAT_Search); | |
607 break; | |
608 } | |
609 break; | |
610 | |
611 case( AT_CMD_NONE ): | |
612 { | |
613 T_ACI_CMD_SRC idx; | |
614 /* process event spontaneous insertion */ | |
615 for( idx = 0; idx < CMD_SRC_MAX; idx++ ) | |
616 { | |
617 R_AT( RAT_SIMINS, idx )( err_code ); | |
618 } | |
619 } | |
620 break; | |
621 | |
622 } | |
623 } | |
624 | |
625 /* | |
626 +-------------------------------------------------------------------+ | |
627 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
628 | ROUTINE : cmhSIM_SIMRemoved | | |
629 +-------------------------------------------------------------------+ | |
630 | |
631 PURPOSE : SIM removed | |
632 | |
633 */ | |
634 | |
635 GLOBAL void cmhSIM_SIMRemoved ( void ) | |
636 { | |
637 UBYTE cmdBuf; /* buffers command */ | |
638 T_ACI_CMD_SRC idx; | |
639 T_ACI_CME_ERR cme_error; /* CME error code */ | |
640 T_ACI_SIMREM_TYPE srt; /* type of SIM remove */ | |
641 | |
642 TRACE_FUNCTION ("cmhSIM_SIMRemoved()"); | |
643 | |
644 if (simEntStat.curCmd NEQ AT_CMD_NONE) | |
645 { | |
646 cmdBuf = simEntStat.curCmd; | |
647 simEntStat.curCmd = AT_CMD_NONE; | |
648 | |
649 if (simShrdPrm.rslt EQ SIM_NO_ERROR) | |
650 cme_error = CME_ERR_SimBusy; | |
651 else | |
652 cme_error = cmhSIM_GetCmeFromSim (simShrdPrm.rslt); | |
653 | |
654 R_AT( RAT_CME, simEntStat.entOwn ) | |
655 ( cmdBuf, cme_error ); | |
656 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
657 -1, -1, cme_error ); | |
658 } | |
659 EfPLMNselStat = EF_STAT_UNKNWN; | |
660 /* | |
661 *---------------------------------------------------------------- | |
662 * send unsolicited result | |
663 *---------------------------------------------------------------- | |
664 */ | |
665 TRACE_EVENT_P1("Result of SIM remove indication: %x", simShrdPrm.rslt); | |
666 switch (simShrdPrm.rslt) | |
667 { | |
668 case SIM_NO_ERROR: | |
669 /* In this case the AT command state is set to SIM RESET */ | |
670 /* NO, don't do this! | |
671 This line would prevent a %SIMIND: 11 and instead leads to | |
672 "+CME ERROR: SIM PIN required" without any command context which is wrong */ | |
673 /* simEntStat.curCmd = AT_CMD_SIMRST; */ | |
674 srt = SIMREM_RESET; | |
675 break; | |
676 case SIM_CAUSE_DRV_TEMPFAIL: | |
677 srt = SIMREM_RETRY; | |
678 break; | |
679 default: | |
680 srt = SIMREM_FAILURE; | |
681 break; | |
682 } | |
683 | |
684 for( idx = 0; idx < CMD_SRC_MAX; idx++ ) | |
685 { | |
686 R_AT( RAT_SIMREM, idx )(srt); | |
687 } | |
688 } | |
689 | |
690 /* | |
691 +-------------------------------------------------------------------+ | |
692 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
693 | ROUTINE : cmhSIM_PINVerified | | |
694 +-------------------------------------------------------------------+ | |
695 | |
696 PURPOSE : SIM verified | |
697 | |
698 */ | |
699 LOCAL void pin_verified_clck (USHORT sim_result) | |
700 { | |
701 TRACE_FUNCTION ("pin_verified_clck()"); | |
702 | |
703 switch(sim_result) | |
704 { | |
705 case( SIM_NO_ERROR ): | |
706 /* now do it ! */ | |
707 | |
708 /* Check if we want to do FDN Lock or ALS Lock */ | |
709 switch (simShrdPrm.setPrm[simShrdPrm.owner].actProc) | |
710 { | |
711 case SIM_FDN_ENABLE: | |
712 case SIM_FDN_DISABLE: | |
713 /* FDN Lock */ | |
714 if( psaSIM_ActivateSIM() < 0 ) /* activate SIM card */ | |
715 { | |
716 simEntStat.curCmd = AT_CMD_NONE; | |
717 | |
718 R_AT( RAT_CME, simEntStat.entOwn ) | |
719 ( AT_CMD_CLCK, CME_ERR_Unknown ); | |
720 cmh_logRslt ( simEntStat.entOwn, RAT_CME, AT_CMD_CLCK, | |
721 -1, -1, CME_ERR_Unknown ); | |
722 } | |
723 break; | |
724 | |
725 case SIM_ALS_LOCK: | |
726 case SIM_ALS_UNLOCK: | |
727 /* ALS Lock to PIN2 */ | |
728 if (simShrdPrm.setPrm[simShrdPrm.owner].actProc EQ SIM_ALS_LOCK) | |
729 { | |
730 ALSlock = cmhPrm[simShrdPrm.owner].ccCmdPrm.ALSmode; | |
731 /* pull all sources to the current ALSmode, otherwise a lock won't make sense */ | |
732 { | |
733 int i; | |
734 for (i=0; i<OWN_MAX; i++) | |
735 cmhPrm[i].ccCmdPrm.ALSmode = ALSlock; | |
736 /* and lock them all */ | |
737 } | |
738 #ifndef _SIMULATION_ | |
739 /* write Lock to FFS */ | |
740 FFS_fwrite("/gsm/com/ALSlock", &ALSlock, sizeof(ALSlock)); | |
741 #endif | |
742 } | |
743 else | |
744 /* unlock ALS */ | |
745 { | |
746 ALSlock = ALS_MOD_NOTPRESENT; | |
747 #ifndef _SIMULATION_ | |
748 /* remove lock from FFS */ | |
749 FFS_remove("/gsm/com/ALSlock"); | |
750 #endif | |
751 } | |
752 | |
753 simEntStat.curCmd = AT_CMD_NONE; | |
754 | |
755 R_AT( RAT_OK, simEntStat.entOwn ) | |
756 ( AT_CMD_CLCK ); | |
757 cmh_logRslt ( simEntStat.entOwn, RAT_OK, AT_CMD_CLCK, -1, -1, -1 ); | |
758 break; | |
759 | |
760 } | |
761 break; /* SIM_NO_ERROR */ | |
762 | |
763 case( SIM_CAUSE_PIN1_EXPECT ): | |
764 case( SIM_CAUSE_PIN2_EXPECT ): | |
765 case( SIM_CAUSE_PIN1_BLOCKED ): | |
766 case( SIM_CAUSE_PUK1_EXPECT ): | |
767 case( SIM_CAUSE_PIN2_BLOCKED ): | |
768 case( SIM_CAUSE_PUK2_EXPECT ): | |
769 simEntStat.curCmd = AT_CMD_NONE; | |
770 | |
771 R_AT( RAT_CME, simEntStat.entOwn ) | |
772 ( AT_CMD_CLCK, cmhSIM_GetCmeFromSim ( sim_result ) /*CME_ERR_WrongPasswd*/ ); | |
773 cmh_logRslt ( simEntStat.entOwn, RAT_CME, AT_CMD_CLCK, | |
774 -1, -1, CME_ERR_WrongPasswd ); | |
775 break; | |
776 | |
777 default: | |
778 simEntStat.curCmd = AT_CMD_NONE; | |
779 R_AT( RAT_CME, simEntStat.entOwn ) | |
780 ( AT_CMD_CLCK, CME_ERR_SimFail ); | |
781 cmh_logRslt ( simEntStat.entOwn, RAT_CME, AT_CMD_CLCK, | |
782 -1, -1, CME_ERR_SimFail ); | |
783 break; | |
784 } | |
785 } | |
786 | |
787 GLOBAL void cmhSIM_PINVerified ( void ) | |
788 { | |
789 UBYTE cmdBuf; /* buffers command */ | |
790 T_PHB_CMD_PRM * pPHBCmdPrm; /* points to PHB command parameters */ | |
791 | |
792 TRACE_FUNCTION ("cmhSIM_PINVerified()"); | |
793 | |
794 pPHBCmdPrm = &cmhPrm[simShrdPrm.owner].phbCmdPrm; | |
795 | |
796 /* | |
797 *------------------------------------------------------------------- | |
798 * check for command context | |
799 *------------------------------------------------------------------- | |
800 */ | |
801 switch( simEntStat.curCmd ) | |
802 { | |
803 case( AT_CMD_CLCK ): | |
804 /* process event for +CLCK command */ | |
805 pin_verified_clck( simShrdPrm.rslt ); | |
806 return; | |
807 | |
808 case( AT_CMD_CPIN ): | |
809 case( AT_CMD_PVRF ): | |
810 /* | |
811 *---------------------------------------------------------------- | |
812 * process event for +CPIN and %PVRF command | |
813 *---------------------------------------------------------------- | |
814 */ | |
815 switch( simShrdPrm.rslt ) | |
816 { | |
817 case( SIM_NO_ERROR ): | |
818 | |
819 /* if verified PIN was PIN 2 or PIN 1 was already entered */ | |
820 if( simShrdPrm.setPrm[simEntStat.entOwn].PINType EQ | |
821 PHASE_2_PIN_2 OR | |
822 simShrdPrm.crdPhs NEQ 0xFF ) | |
823 { | |
824 cmdBuf = simEntStat.curCmd; | |
825 simEntStat.curCmd = AT_CMD_NONE; | |
826 | |
827 R_AT( RAT_OK, simEntStat.entOwn ) | |
828 ( cmdBuf ); | |
829 cmh_logRslt ( simEntStat.entOwn, RAT_OK, cmdBuf, -1, -1, -1 ); | |
830 } | |
831 /* otherwise wait for SIM insert indication to complete command */ | |
832 break; | |
833 | |
834 case( SIM_CAUSE_PIN1_EXPECT ): | |
835 case( SIM_CAUSE_PIN2_EXPECT ): | |
836 case( SIM_CAUSE_PUK1_EXPECT ): | |
837 case( SIM_CAUSE_PUK2_EXPECT ): | |
838 cmdBuf = simEntStat.curCmd; | |
839 simEntStat.curCmd = AT_CMD_NONE; | |
840 | |
841 R_AT( RAT_CME, simEntStat.entOwn ) | |
842 ( cmdBuf, CME_ERR_WrongPasswd ); | |
843 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
844 -1, -1, CME_ERR_WrongPasswd ); | |
845 break; | |
846 case( SIM_CAUSE_PIN1_BLOCKED): | |
847 cmdBuf = simEntStat.curCmd; | |
848 simEntStat.curCmd = AT_CMD_NONE; | |
849 | |
850 R_AT( RAT_CME, simEntStat.entOwn ) | |
851 ( cmdBuf, CME_ERR_SimPukReq ); | |
852 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
853 -1, -1, CME_ERR_SimPukReq ); | |
854 break; | |
855 case( SIM_CAUSE_PIN2_BLOCKED): | |
856 cmdBuf = simEntStat.curCmd; | |
857 simEntStat.curCmd = AT_CMD_NONE; | |
858 | |
859 R_AT( RAT_CME, simEntStat.entOwn ) | |
860 ( cmdBuf, CME_ERR_SimPuk2Req ); | |
861 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
862 -1, -1, CME_ERR_SimPuk2Req ); | |
863 break; | |
864 default: | |
865 cmdBuf = simEntStat.curCmd; | |
866 simEntStat.curCmd = AT_CMD_NONE; | |
867 R_AT( RAT_CME, simEntStat.entOwn ) | |
868 ( cmdBuf, CME_ERR_SimFail ); | |
869 break; | |
870 } | |
871 break; | |
872 | |
873 case( AT_CMD_CAMM ): | |
874 /* | |
875 *---------------------------------------------------------------- | |
876 * process event for +CAMM command | |
877 *---------------------------------------------------------------- | |
878 */ | |
879 switch( simShrdPrm.rslt ) | |
880 { | |
881 case( SIM_NO_ERROR ): | |
882 /* | |
883 * Try it again | |
884 */ | |
885 simEntStat.curCmd = AT_CMD_NONE; | |
886 aoc_update_acmmax (SECOND_UPDATE, 0L); | |
887 break; | |
888 | |
889 default: | |
890 simEntStat.curCmd = AT_CMD_NONE; | |
891 R_AT( RAT_CME, simEntStat.entOwn ) | |
892 ( AT_CMD_CAMM, CME_ERR_WrongPasswd ); | |
893 break; | |
894 } | |
895 break; | |
896 | |
897 case( AT_CMD_CPUC ): | |
898 /* | |
899 *---------------------------------------------------------------- | |
900 * process event for +CPUC command | |
901 *---------------------------------------------------------------- | |
902 */ | |
903 switch( simShrdPrm.rslt ) | |
904 { | |
905 case( SIM_NO_ERROR ): | |
906 /* | |
907 * Try it again | |
908 */ | |
909 simEntStat.curCmd = AT_CMD_NONE; | |
910 aoc_update_puct (SECOND_UPDATE, 0L); | |
911 break; | |
912 | |
913 default: | |
914 simEntStat.curCmd = AT_CMD_NONE; | |
915 R_AT( RAT_CME, simEntStat.entOwn ) | |
916 ( AT_CMD_CPUC, CME_ERR_WrongPasswd ); | |
917 break; | |
918 } | |
919 break; | |
920 | |
921 case( AT_CMD_CACM ): | |
922 /* | |
923 *---------------------------------------------------------------- | |
924 * process event for +CACM command | |
925 *---------------------------------------------------------------- | |
926 */ | |
927 switch( simShrdPrm.rslt ) | |
928 { | |
929 case( SIM_NO_ERROR ): | |
930 /* | |
931 * Try it again | |
932 */ | |
933 simEntStat.curCmd = AT_CMD_NONE; | |
934 aoc_update_acm (SECOND_UPDATE, 0L); | |
935 break; | |
936 | |
937 default: | |
938 simEntStat.curCmd = AT_CMD_NONE; | |
939 R_AT( RAT_CME, simEntStat.entOwn ) | |
940 ( AT_CMD_CACM, CME_ERR_WrongPasswd ); | |
941 break; | |
942 } | |
943 break; | |
944 | |
945 /*----------------------------------------------------------* | |
946 * The below code is for CPBW SIM verification response * | |
947 *----------------------------------------------------------*/ | |
948 | |
949 case( AT_CMD_CPBS ): | |
950 /* | |
951 *---------------------------------------------------------------- | |
952 * process event for +CPBW command | |
953 *---------------------------------------------------------------- | |
954 */ | |
955 switch( simShrdPrm.rslt ) | |
956 { | |
957 case( SIM_NO_ERROR ): | |
958 | |
959 /*-----------------------------------------------* | |
960 * if verified PIN was PIN 2 was already entered * | |
961 *-----------------------------------------------*/ | |
962 | |
963 cmdBuf = simEntStat.curCmd; | |
964 simEntStat.curCmd = AT_CMD_NONE; | |
965 | |
966 pPHBCmdPrm->cmhStor = pPHBCmdPrm->temp_cmhStor; | |
967 pPHBCmdPrm->phbStor = pPHBCmdPrm->temp_phbStor; | |
968 | |
969 R_AT( RAT_OK, simEntStat.entOwn ) | |
970 ( cmdBuf ); | |
971 | |
972 cmh_logRslt ( simEntStat.entOwn, RAT_OK, cmdBuf, -1, -1, -1 ); | |
973 | |
974 /*---------------------------------------------------------------* | |
975 * otherwise wait for SIM insert indication to complete command * | |
976 *---------------------------------------------------------------*/ | |
977 | |
978 break; | |
979 | |
980 case( SIM_CAUSE_PUK2_EXPECT ): | |
981 case( SIM_CAUSE_PIN2_BLOCKED): | |
982 case( SIM_CAUSE_PIN2_EXPECT ): | |
983 | |
984 cmdBuf = simEntStat.curCmd; | |
985 simEntStat.curCmd = AT_CMD_NONE; | |
986 | |
987 R_AT( RAT_CME, simEntStat.entOwn ) | |
988 ( cmdBuf, CME_ERR_WrongPasswd ); | |
989 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
990 -1, -1, CME_ERR_WrongPasswd ); | |
991 break; | |
992 | |
993 default: | |
994 cmdBuf = simEntStat.curCmd; | |
995 simEntStat.curCmd = AT_CMD_NONE; | |
996 R_AT( RAT_CME, simEntStat.entOwn ) | |
997 ( cmdBuf, CME_ERR_SimFail ); | |
998 break; | |
999 } | |
1000 break; | |
1001 | |
1002 default: | |
1003 | |
1004 simEntStat.curCmd = AT_CMD_NONE; | |
1005 R_AT( RAT_CME, simEntStat.entOwn ) | |
1006 ( AT_CMD_CPIN, CME_ERR_Unknown ); | |
1007 cmh_logRslt ( simEntStat.entOwn, RAT_CME, AT_CMD_CPIN, | |
1008 -1, -1, CME_ERR_Unknown ); | |
1009 break; | |
1010 } | |
1011 } | |
1012 | |
1013 /* | |
1014 +-------------------------------------------------------------------+ | |
1015 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
1016 | ROUTINE : cmhSIM_PINChanged | | |
1017 +-------------------------------------------------------------------+ | |
1018 | |
1019 PURPOSE : SIM changed | |
1020 | |
1021 */ | |
1022 | |
1023 GLOBAL void cmhSIM_PINChanged ( void ) | |
1024 { | |
1025 T_ACI_CME_ERR err; | |
1026 UBYTE cmdBuf; | |
1027 | |
1028 TRACE_FUNCTION ("cmhSIM_PINChanged()"); | |
1029 | |
1030 /* | |
1031 *------------------------------------------------------------------- | |
1032 * check for command context | |
1033 *------------------------------------------------------------------- | |
1034 */ | |
1035 switch( simEntStat.curCmd ) | |
1036 { | |
1037 case( AT_CMD_CPWD ): | |
1038 /*lint -e{408} */ | |
1039 case( KSD_CMD_PWD ): /* KSD_CMD_* extends AT_CMD_* */ | |
1040 /* | |
1041 *---------------------------------------------------------------- | |
1042 * process event for +CPWD and KSD PWD command | |
1043 *---------------------------------------------------------------- | |
1044 */ | |
1045 switch( simShrdPrm.rslt ) | |
1046 { | |
1047 case( SIM_NO_ERROR ): | |
1048 | |
1049 cmdBuf = simEntStat.curCmd; | |
1050 simEntStat.curCmd = AT_CMD_NONE; | |
1051 | |
1052 R_AT( RAT_OK, simEntStat.entOwn ) | |
1053 ( cmdBuf ); | |
1054 cmh_logRslt ( simEntStat.entOwn, RAT_OK, cmdBuf, -1, -1, -1 ); | |
1055 return; | |
1056 | |
1057 /* why not use a meaningful CME error code? | |
1058 case( SIM_CAUSE_PUK1_EXPECT ): | |
1059 case( SIM_CAUSE_PUK2_EXPECT ): */ | |
1060 case( SIM_CAUSE_PIN1_EXPECT ): | |
1061 case( SIM_CAUSE_PIN2_EXPECT ): | |
1062 err = CME_ERR_WrongPasswd; | |
1063 break; | |
1064 | |
1065 default: | |
1066 err = cmhSIM_GetCmeFromSim ( simShrdPrm.rslt ); | |
1067 break; | |
1068 } | |
1069 | |
1070 cmdBuf = simEntStat.curCmd; | |
1071 simEntStat.curCmd = AT_CMD_NONE; | |
1072 | |
1073 R_AT( RAT_CME, simEntStat.entOwn ) | |
1074 ( cmdBuf, err ); | |
1075 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
1076 -1, -1, err ); | |
1077 break; | |
1078 } | |
1079 } | |
1080 | |
1081 /* | |
1082 +-------------------------------------------------------------------+ | |
1083 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
1084 | ROUTINE : cmhSIM_PINEnabled | | |
1085 +-------------------------------------------------------------------+ | |
1086 | |
1087 PURPOSE : SIM enabled | |
1088 | |
1089 */ | |
1090 | |
1091 GLOBAL void cmhSIM_PINEnabled ( void ) | |
1092 { | |
1093 T_ACI_CME_ERR err; | |
1094 | |
1095 TRACE_FUNCTION ("cmhSIM_PINEnabled()"); | |
1096 | |
1097 /* | |
1098 *------------------------------------------------------------------- | |
1099 * check for command context | |
1100 *------------------------------------------------------------------- | |
1101 */ | |
1102 switch( simEntStat.curCmd ) | |
1103 { | |
1104 case( AT_CMD_CLCK ): | |
1105 /* | |
1106 *---------------------------------------------------------------- | |
1107 * process event for +CLCK command | |
1108 *---------------------------------------------------------------- | |
1109 */ | |
1110 switch( simShrdPrm.rslt ) | |
1111 { | |
1112 case( SIM_NO_ERROR ): | |
1113 | |
1114 simEntStat.curCmd = AT_CMD_NONE; | |
1115 | |
1116 R_AT( RAT_OK, simEntStat.entOwn ) | |
1117 ( AT_CMD_CLCK ); | |
1118 cmh_logRslt ( simEntStat.entOwn, RAT_OK, AT_CMD_CLCK, -1, -1, -1 ); | |
1119 return; | |
1120 | |
1121 case( SIM_CAUSE_PIN1_EXPECT ): | |
1122 case( SIM_CAUSE_PIN1_BLOCKED ): | |
1123 err = CME_ERR_WrongPasswd; | |
1124 break; | |
1125 | |
1126 default: | |
1127 err = cmhSIM_GetCmeFromSim ( simShrdPrm.rslt ); | |
1128 break; | |
1129 } | |
1130 | |
1131 simEntStat.curCmd = AT_CMD_NONE; | |
1132 | |
1133 R_AT( RAT_CME, simEntStat.entOwn ) | |
1134 ( AT_CMD_CLCK, err ); | |
1135 cmh_logRslt ( simEntStat.entOwn, RAT_CME, AT_CMD_CLCK, | |
1136 -1, -1, err ); | |
1137 break; | |
1138 } | |
1139 } | |
1140 | |
1141 /* | |
1142 +-------------------------------------------------------------------+ | |
1143 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
1144 | ROUTINE : cmhSIM_PINDisabled | | |
1145 +-------------------------------------------------------------------+ | |
1146 | |
1147 PURPOSE : SIM disabled | |
1148 | |
1149 */ | |
1150 | |
1151 GLOBAL void cmhSIM_PINDisabled ( void ) | |
1152 { | |
1153 T_ACI_CME_ERR err; | |
1154 | |
1155 TRACE_FUNCTION ("cmhSIM_PINDisabled()"); | |
1156 | |
1157 /* | |
1158 *------------------------------------------------------------------- | |
1159 * check for command context | |
1160 *------------------------------------------------------------------- | |
1161 */ | |
1162 switch( simEntStat.curCmd ) | |
1163 { | |
1164 case( AT_CMD_CLCK ): | |
1165 /* | |
1166 *---------------------------------------------------------------- | |
1167 * process event for +CLCK command | |
1168 *---------------------------------------------------------------- | |
1169 */ | |
1170 switch( simShrdPrm.rslt ) | |
1171 { | |
1172 case( SIM_NO_ERROR ): | |
1173 | |
1174 simEntStat.curCmd = AT_CMD_NONE; | |
1175 | |
1176 R_AT( RAT_OK, simEntStat.entOwn ) | |
1177 ( AT_CMD_CLCK ); | |
1178 cmh_logRslt ( simEntStat.entOwn, RAT_OK, AT_CMD_CLCK, -1, -1, -1 ); | |
1179 return; | |
1180 | |
1181 case( SIM_CAUSE_PIN1_EXPECT ): | |
1182 case( SIM_CAUSE_PIN1_BLOCKED ): | |
1183 err = CME_ERR_WrongPasswd; | |
1184 break; | |
1185 | |
1186 default: | |
1187 err = cmhSIM_GetCmeFromSim ( simShrdPrm.rslt ); | |
1188 break; | |
1189 } | |
1190 | |
1191 simEntStat.curCmd = AT_CMD_NONE; | |
1192 | |
1193 R_AT( RAT_CME, simEntStat.entOwn ) | |
1194 ( AT_CMD_CLCK, err ); | |
1195 cmh_logRslt ( simEntStat.entOwn, RAT_CME, AT_CMD_CLCK, | |
1196 -1, -1, err ); | |
1197 break; | |
1198 } | |
1199 } | |
1200 | |
1201 /* | |
1202 +-------------------------------------------------------------------+ | |
1203 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
1204 | ROUTINE : cmhSIM_CardUnblocked | | |
1205 +-------------------------------------------------------------------+ | |
1206 | |
1207 PURPOSE : Card unblocked | |
1208 | |
1209 */ | |
1210 | |
1211 GLOBAL void cmhSIM_CardUnblocked ( void ) | |
1212 { | |
1213 UBYTE cmdBuf; | |
1214 T_ACI_CME_ERR err; | |
1215 | |
1216 TRACE_FUNCTION ("cmhSIM_CardUnblocked()"); | |
1217 | |
1218 /* | |
1219 *------------------------------------------------------------------- | |
1220 * check for command context | |
1221 *------------------------------------------------------------------- | |
1222 */ | |
1223 switch( simEntStat.curCmd ) | |
1224 { | |
1225 case( AT_CMD_CPIN ): | |
1226 case( AT_CMD_PVRF ): | |
1227 /*lint -e{408} */ | |
1228 case( KSD_CMD_UBLK ): | |
1229 /* | |
1230 *---------------------------------------------------------------- | |
1231 * process event for +CPIN, %PVRF and KSD UBLK command | |
1232 *---------------------------------------------------------------- | |
1233 */ | |
1234 switch( simShrdPrm.rslt ) | |
1235 { | |
1236 case( SIM_NO_ERROR ): | |
1237 | |
1238 if(simShrdPrm.crdPhs NEQ 0xFF)/* If SIM insert indication is already received*/ | |
1239 { | |
1240 cmdBuf = simEntStat.curCmd; | |
1241 simEntStat.curCmd = AT_CMD_NONE; | |
1242 | |
1243 R_AT( RAT_OK, simEntStat.entOwn ) | |
1244 ( cmdBuf ); | |
1245 cmh_logRslt ( simEntStat.entOwn, RAT_OK, cmdBuf, -1, -1, -1 ); | |
1246 }/* else wait till SIM insert indication is received*/ | |
1247 return; | |
1248 | |
1249 /* why not use a meaningful CME error code? | |
1250 case( SIM_CAUSE_PUK1_EXPECT ): | |
1251 case( SIM_CAUSE_PUK2_EXPECT ): */ | |
1252 case( SIM_CAUSE_PIN1_EXPECT ): | |
1253 case( SIM_CAUSE_PIN2_EXPECT ): | |
1254 err = CME_ERR_WrongPasswd; | |
1255 break; | |
1256 | |
1257 default: | |
1258 err = cmhSIM_GetCmeFromSim ( simShrdPrm.rslt ); | |
1259 break; | |
1260 } | |
1261 | |
1262 cmdBuf = simEntStat.curCmd; | |
1263 simEntStat.curCmd = AT_CMD_NONE; | |
1264 | |
1265 R_AT( RAT_CME, simEntStat.entOwn ) | |
1266 ( cmdBuf, err ); | |
1267 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
1268 -1, -1, err ); | |
1269 break; | |
1270 } | |
1271 } | |
1272 | |
1273 /* | |
1274 +-------------------------------------------------------------------+ | |
1275 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
1276 | ROUTINE : cmhSIM_SIMResponseData | | |
1277 +-------------------------------------------------------------------+ | |
1278 | |
1279 PURPOSE : SIM response data | |
1280 | |
1281 */ | |
1282 | |
1283 GLOBAL void cmhSIM_SIMResponseData( T_SIM_TRNS_RSP_PRM* rsp ) | |
1284 { | |
1285 UBYTE cmdBuf; /* buffers command */ | |
1286 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
1287 UBYTE *rspData; | |
1288 | |
1289 TRACE_FUNCTION ("cmhSIM_SIMResponseData()"); | |
1290 | |
1291 cmdBuf = simEntStat.curCmd; | |
1292 simEntStat.curCmd = AT_CMD_NONE; | |
1293 | |
1294 ownBuf = simEntStat.entOwn; | |
1295 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1296 | |
1297 /* | |
1298 *------------------------------------------------------------------- | |
1299 * check for command context | |
1300 *------------------------------------------------------------------- | |
1301 */ | |
1302 switch( cmdBuf ) | |
1303 { | |
1304 case( AT_CMD_CRSM ): | |
1305 if (simShrdPrm.rslt NEQ SIM_NO_ERROR AND | |
1306 GET_CAUSE_DEFBY(simShrdPrm.rslt) EQ DEFBY_CONDAT ) | |
1307 { | |
1308 /* | |
1309 *---------------------------------------------------------------- | |
1310 * error event for +CRSM | |
1311 *---------------------------------------------------------------- | |
1312 */ | |
1313 R_AT( RAT_CME, ownBuf ) | |
1314 ( | |
1315 cmdBuf, | |
1316 cmhSIM_GetCmeFromSim ( simShrdPrm.rslt ) | |
1317 ); | |
1318 } | |
1319 else | |
1320 { | |
1321 /* | |
1322 *---------------------------------------------------------------- | |
1323 * process event for +CRSM | |
1324 *---------------------------------------------------------------- | |
1325 */ | |
1326 R_AT( RAT_CRSM, ownBuf ) | |
1327 ( rsp->sw1, rsp->sw2, rsp->rspLen, ((rsp->rspLen)?rsp->rsp:NULL)); | |
1328 | |
1329 R_AT( RAT_OK, ownBuf ) | |
1330 ( cmdBuf ); | |
1331 } | |
1332 break; | |
1333 | |
1334 case( AT_CMD_CSIM ): | |
1335 /* | |
1336 *---------------------------------------------------------------- | |
1337 * error event for +CSIM | |
1338 *---------------------------------------------------------------- | |
1339 */ | |
1340 if (simShrdPrm.rslt NEQ SIM_NO_ERROR) | |
1341 { | |
1342 R_AT( RAT_CME, ownBuf ) | |
1343 ( | |
1344 cmdBuf, | |
1345 cmhSIM_GetCmeFromSim ( simShrdPrm.rslt ) | |
1346 ); | |
1347 | |
1348 return; | |
1349 } | |
1350 /* | |
1351 *---------------------------------------------------------------- | |
1352 * process event for +CSIM | |
1353 *---------------------------------------------------------------- | |
1354 */ | |
1355 ACI_MALLOC(rspData, MAX_SIM_CMD+2); /* alloc 2 byte more for sw1 and sw2 */ | |
1356 memcpy (rspData, rsp->rsp, rsp->rspLen); | |
1357 rspData[rsp->rspLen++] = rsp->sw1; | |
1358 rspData[rsp->rspLen++] = rsp->sw2; | |
1359 | |
1360 R_AT( RAT_CSIM, ownBuf ) | |
1361 ( rsp->rspLen, rspData); | |
1362 | |
1363 ACI_MFREE(rspData); | |
1364 | |
1365 R_AT( RAT_OK, ownBuf ) | |
1366 ( cmdBuf ); | |
1367 break; | |
1368 | |
1369 default: | |
1370 TRACE_EVENT("wrong command context (+CRSM or +CSIM expected)"); | |
1371 break; | |
1372 } | |
1373 } | |
1374 | |
1375 /* | |
1376 +--------------------------------------------------------------------+ | |
1377 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
1378 | ROUTINE : cmhSIM_CnfMsisdn | | |
1379 +--------------------------------------------------------------------+ | |
1380 | |
1381 PURPOSE : This function handles the confirmation of reading | |
1382 EF MSISDN from SIM. | |
1383 */ | |
1384 GLOBAL void cmhSIM_CnfMsisdn ( SHORT table_id ) | |
1385 { | |
1386 T_SIM_CMD_PRM* pSIMCmdPrm; /* points to SIM command parameters */ | |
1387 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
1388 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
1389 | |
1390 UBYTE* ptr; /* pointer to decoded data */ | |
1391 UBYTE alphaLen; /* max. length of alpha identifier */ | |
1392 UBYTE tmpActRec; /* actual record number */ | |
1393 UBYTE* pExchData; /* points to exchange data buffer */ | |
1394 UBYTE dataLen; /* holds length of data */ | |
1395 | |
1396 TRACE_FUNCTION ("cmhSIM_CnfMsisdn()"); | |
1397 | |
1398 pSIMCmdPrm = &cmhPrm[simEntStat.entOwn].simCmdPrm; | |
1399 cmdBuf = simEntStat.curCmd; | |
1400 ownBuf = simEntStat.entOwn; | |
1401 pExchData = simShrdPrm.atb[table_id].exchData; | |
1402 dataLen = simShrdPrm.atb[table_id].dataLen; | |
1403 | |
1404 | |
1405 switch ( simShrdPrm.atb[table_id].errCode ) | |
1406 { | |
1407 case ( SIM_NO_ERROR ): | |
1408 { | |
1409 /* | |
1410 *------------------------------------------------------------- | |
1411 * check basic consistency of read data | |
1412 *------------------------------------------------------------- | |
1413 */ | |
1414 if ( pExchData EQ NULL OR | |
1415 dataLen < ACI_MIN_SIZE_EF_MSISDN ) | |
1416 { | |
1417 simEntStat.curCmd = AT_CMD_NONE; | |
1418 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1419 | |
1420 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_Unknown ); | |
1421 } | |
1422 else | |
1423 { | |
1424 ptr = pExchData; | |
1425 alphaLen = dataLen - ACI_MIN_SIZE_EF_MSISDN; | |
1426 | |
1427 /* | |
1428 *----------------------------------------------------------- | |
1429 * process parameter <lenEfMsisdn> | |
1430 *----------------------------------------------------------- | |
1431 */ | |
1432 CNUMLenEfMsisdn = dataLen; | |
1433 | |
1434 /* | |
1435 *----------------------------------------------------------- | |
1436 * process parameter <cnumMaxRec> | |
1437 *----------------------------------------------------------- | |
1438 */ | |
1439 if ( pSIMCmdPrm -> CNUMActRec EQ 1 ) | |
1440 CNUMMaxRec = simShrdPrm.atb[table_id].recMax; | |
1441 | |
1442 /* | |
1443 *----------------------------------------------------------- | |
1444 * process parameter <alpha> | |
1445 *----------------------------------------------------------- | |
1446 */ | |
1447 cmhPHB_getTagNt ( ptr, | |
1448 alphaLen, | |
1449 CNUMMsisdn[CNUMMsisdnIdx].alpha, | |
1450 MAX_ALPHA_LEN ); | |
1451 | |
1452 ptr += alphaLen; | |
1453 | |
1454 /* | |
1455 *----------------------------------------------------------- | |
1456 * process parameter <number> | |
1457 *----------------------------------------------------------- | |
1458 */ | |
1459 cmhPHB_getAdrStr ( CNUMMsisdn[CNUMMsisdnIdx].number, | |
1460 MAX_PHB_NUM_LEN - 1, | |
1461 ptr + 2, | |
1462 *ptr ); | |
1463 | |
1464 /* | |
1465 *----------------------------------------------------------- | |
1466 * validate entry of MSISDN list | |
1467 *----------------------------------------------------------- | |
1468 */ | |
1469 /* VO patch 14.03.01 | |
1470 * move validate entry to after decoding alpha and number | |
1471 * and set the vldFlag only when the alpha or the number exists. */ | |
1472 if ( strlen(CNUMMsisdn[CNUMMsisdnIdx].number) OR | |
1473 strlen(CNUMMsisdn[CNUMMsisdnIdx].alpha) ) | |
1474 { | |
1475 CNUMMsisdn[CNUMMsisdnIdx].vldFlag = TRUE; | |
1476 pSIMCmdPrm -> CNUMOutput++; | |
1477 } | |
1478 | |
1479 /* | |
1480 *----------------------------------------------------------- | |
1481 * process parameter <type> | |
1482 *----------------------------------------------------------- | |
1483 */ | |
1484 cmhPHB_toaDmrg ( *( ptr + 1 ), | |
1485 &CNUMMsisdn[CNUMMsisdnIdx].type ); | |
1486 | |
1487 ptr += 12; | |
1488 | |
1489 /* | |
1490 *----------------------------------------------------------- | |
1491 * invalidate parameter <speed>, <service>, <itc> | |
1492 *----------------------------------------------------------- | |
1493 */ | |
1494 CNUMMsisdn[CNUMMsisdnIdx].speed = BS_SPEED_NotPresent; | |
1495 CNUMMsisdn[CNUMMsisdnIdx].service = CNUM_SERV_NotPresent; | |
1496 CNUMMsisdn[CNUMMsisdnIdx].itc = CNUM_ITC_NotPresent; | |
1497 | |
1498 if ( *ptr NEQ 0xFF ) | |
1499 { | |
1500 /* | |
1501 *--------------------------------------------------------- | |
1502 * bearer capability EF present | |
1503 *--------------------------------------------------------- | |
1504 */ | |
1505 if ( cmhSIM_ReqCcp ( ownBuf, *ptr++ ) NEQ AT_EXCT ) | |
1506 { | |
1507 simEntStat.curCmd = AT_CMD_NONE; | |
1508 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1509 | |
1510 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_Unknown ); | |
1511 } | |
1512 } | |
1513 else | |
1514 { | |
1515 /* | |
1516 *--------------------------------------------------------- | |
1517 * tmpActRec is used to prevent conflicts with global | |
1518 * variable pSIMCmdPrm -> CNUMActRec | |
1519 *--------------------------------------------------------- | |
1520 */ | |
1521 tmpActRec = pSIMCmdPrm -> CNUMActRec; | |
1522 | |
1523 /* | |
1524 *--------------------------------------------------------- | |
1525 * bearer capability EF abscent | |
1526 *--------------------------------------------------------- | |
1527 */ | |
1528 /* VO patch 14.03.01 - check vldFlag when it isn't TRUE decrease CNUMMsisdnIdx. | |
1529 * read the next entry and write the entry in the CNUMMsisdnIdx again */ | |
1530 if ( CNUMMsisdn[CNUMMsisdnIdx].vldFlag EQ FALSE ) | |
1531 CNUMMsisdnIdx--; | |
1532 | |
1533 if ( CNUMMsisdnIdx EQ MAX_MSISDN - 1 OR | |
1534 tmpActRec EQ CNUMMaxRec ) | |
1535 { | |
1536 simEntStat.curCmd = AT_CMD_NONE; | |
1537 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1538 | |
1539 R_AT( RAT_CNUM, ownBuf ) ( &CNUMMsisdn[0], CNUMMaxRec ); | |
1540 | |
1541 if ( tmpActRec EQ CNUMMaxRec ) | |
1542 { | |
1543 if (pSIMCmdPrm -> CNUMOutput) | |
1544 { | |
1545 R_AT( RAT_OK, ownBuf ) ( cmdBuf ); | |
1546 } | |
1547 else | |
1548 { | |
1549 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_NotFound ); | |
1550 } | |
1551 } | |
1552 } | |
1553 else | |
1554 { | |
1555 CNUMMsisdnIdx++; | |
1556 pSIMCmdPrm -> CNUMActRec++; | |
1557 | |
1558 if ( cmhSIM_ReqMsisdn | |
1559 ( ownBuf, pSIMCmdPrm -> CNUMActRec ) NEQ AT_EXCT ) | |
1560 { | |
1561 simEntStat.curCmd = AT_CMD_NONE; | |
1562 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1563 | |
1564 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_Unknown ); | |
1565 } | |
1566 } | |
1567 } | |
1568 } | |
1569 | |
1570 break; | |
1571 } | |
1572 | |
1573 default: | |
1574 { | |
1575 simEntStat.curCmd = AT_CMD_NONE; | |
1576 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1577 | |
1578 R_AT( RAT_CME, ownBuf ) | |
1579 ( | |
1580 cmdBuf, | |
1581 cmhSIM_GetCmeFromSim ( simShrdPrm.atb[table_id].errCode ) | |
1582 ); | |
1583 break; | |
1584 } | |
1585 | |
1586 } | |
1587 | |
1588 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE; | |
1589 } | |
1590 | |
1591 /* | |
1592 +--------------------------------------------------------------------+ | |
1593 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
1594 | STATE : code ROUTINE : cmhSIM_CnfCcp | | |
1595 +--------------------------------------------------------------------+ | |
1596 | |
1597 PURPOSE : This function handles the confirmation of reading | |
1598 EF CCP from SIM. | |
1599 */ | |
1600 GLOBAL void cmhSIM_CnfCcp ( SHORT table_id ) | |
1601 { | |
1602 T_SIM_CMD_PRM* pSIMCmdPrm; /* points to SIM command parameters */ | |
1603 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
1604 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
1605 | |
1606 T_U_CALL_CONF* callCnf; /* call confirm message */ | |
1607 T_bearer_cap* bearCap; /* bearer capability */ | |
1608 UBYTE tmpActRec; /* actual record number */ | |
1609 UBYTE* pExchData; /* points to exchange data buffer */ | |
1610 UBYTE dataLen; /* holds length of data */ | |
1611 | |
1612 TRACE_FUNCTION ("cmhSIM_CnfCcp()"); | |
1613 | |
1614 pSIMCmdPrm = &cmhPrm[simEntStat.entOwn].simCmdPrm; | |
1615 cmdBuf = simEntStat.curCmd; | |
1616 ownBuf = simEntStat.entOwn; | |
1617 dataLen = simShrdPrm.atb[table_id].dataLen; | |
1618 pExchData = simShrdPrm.atb[table_id].exchData; | |
1619 | |
1620 switch ( simShrdPrm.atb[table_id].errCode ) | |
1621 { | |
1622 case ( SIM_NO_ERROR ): | |
1623 { | |
1624 /* | |
1625 *------------------------------------------------------------- | |
1626 * check basic consistency of read data | |
1627 *------------------------------------------------------------- | |
1628 */ | |
1629 if ( pExchData EQ NULL OR | |
1630 dataLen NEQ ACI_SIZE_EF_CCP ) | |
1631 { | |
1632 simEntStat.curCmd = AT_CMD_NONE; | |
1633 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1634 | |
1635 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_Unknown ); | |
1636 } | |
1637 else | |
1638 { | |
1639 /* | |
1640 *----------------------------------------------------------- | |
1641 * extracting the relevant data from bearer capability IE | |
1642 *----------------------------------------------------------- | |
1643 */ | |
1644 UBYTE bearCapLen = pExchData[0]; | |
1645 | |
1646 if (bearCapLen <= 13 ) /* do not decode empty or invalid entries, | |
1647 see 11.11/10.5.4.1 max 14 bytes */ | |
1648 { | |
1649 PALLOC_MSG ( msg, MMCC_DATA_REQ, U_CALL_CONF); | |
1650 | |
1651 msg -> sdu.l_buf = bearCapLen * 0x08; | |
1652 msg -> sdu.o_buf = 0x08; | |
1653 msg -> sdu.buf[0] = 0x83; | |
1654 msg -> sdu.buf[1] = U_CALL_CONF; | |
1655 | |
1656 memcpy ( &msg -> sdu.buf[2], | |
1657 pExchData, | |
1658 bearCapLen + 1 ); | |
1659 | |
1660 /* | |
1661 *----------------------------------------------------------- | |
1662 * use of CCD for decoding of bearer capability | |
1663 *----------------------------------------------------------- | |
1664 */ | |
1665 CCD_START; | |
1666 | |
1667 memset (_decodedMsg, 0, sizeof (_decodedMsg)); | |
1668 | |
1669 if ( ccd_decodeMsg ( CCDENT_CC, | |
1670 UPLINK, | |
1671 (T_MSGBUF *) &msg->sdu, | |
1672 (UBYTE *) _decodedMsg, | |
1673 NOT_PRESENT_8BIT) EQ ccdOK | |
1674 AND | |
1675 | |
1676 _decodedMsg[0] EQ U_CALL_CONF ) | |
1677 { | |
1678 callCnf = ( T_U_CALL_CONF * )&_decodedMsg[0]; | |
1679 | |
1680 if ( callCnf -> v_bearer_cap ) | |
1681 { | |
1682 bearCap = &callCnf -> bearer_cap; | |
1683 | |
1684 /* | |
1685 *------------------------------------------------------- | |
1686 * process parameter <speed> of MSISDN | |
1687 *------------------------------------------------------- | |
1688 */ | |
1689 if ( bearCap -> v_user_rate ) | |
1690 { | |
1691 CNUMMsisdn[CNUMMsisdnIdx].speed = | |
1692 cmhSIM_GetUserRate ( bearCap -> user_rate ); | |
1693 } | |
1694 | |
1695 /* | |
1696 *------------------------------------------------------- | |
1697 * process parameter <itc> and <service> of MSISDN | |
1698 *------------------------------------------------------- | |
1699 */ | |
1700 if ( bearCap -> v_trans_cap ) | |
1701 { | |
1702 CNUMMsisdn[CNUMMsisdnIdx].itc = | |
1703 cmhSIM_GetItc ( bearCap -> trans_cap ); | |
1704 } | |
1705 | |
1706 if ( bearCap -> v_user_inf_l2_prot AND | |
1707 bearCap -> user_inf_l2_prot EQ L2_X25 AND | |
1708 bearCap -> v_sync_async AND | |
1709 bearCap -> sync_async EQ SYNCHRONOUS ) | |
1710 { | |
1711 CNUMMsisdn[CNUMMsisdnIdx].service = | |
1712 CNUM_SERV_PacketSynch; | |
1713 } | |
1714 else if | |
1715 ( bearCap -> v_sig_access_prot | |
1716 AND | |
1717 ( bearCap -> sig_access_prot EQ SIAP_X28_INDIV_NUI OR | |
1718 bearCap -> sig_access_prot EQ SIAP_X28_UNIV_NUI OR | |
1719 bearCap -> sig_access_prot EQ SIAP_X28_NON_DEDIC | |
1720 ) | |
1721 AND | |
1722 bearCap -> v_sync_async | |
1723 AND | |
1724 bearCap -> sync_async EQ ASYNCHRONOUS | |
1725 ) | |
1726 { | |
1727 CNUMMsisdn[CNUMMsisdnIdx].service = | |
1728 CNUM_SERV_PadAsynch; | |
1729 } | |
1730 else if ( bearCap -> v_sync_async ) | |
1731 { | |
1732 CNUMMsisdn[CNUMMsisdnIdx].service = | |
1733 cmhSIM_GetSrvFromSync ( bearCap -> sync_async ); | |
1734 | |
1735 } | |
1736 else if ( bearCap -> v_trans_cap ) | |
1737 { | |
1738 CNUMMsisdn[CNUMMsisdnIdx].service = | |
1739 cmhSIM_GetSrvFromItc ( bearCap -> trans_cap ); | |
1740 } | |
1741 } | |
1742 } | |
1743 CCD_END; | |
1744 | |
1745 PFREE ( msg ); | |
1746 } | |
1747 | |
1748 /* | |
1749 *----------------------------------------------------------- | |
1750 * tmpActRec is used to prevent conflicts with global | |
1751 * variable pSIMCmdPrm -> CNUMActRec | |
1752 *----------------------------------------------------------- | |
1753 */ | |
1754 tmpActRec = pSIMCmdPrm -> CNUMActRec; | |
1755 | |
1756 if ( CNUMMsisdnIdx EQ MAX_MSISDN - 1 OR | |
1757 tmpActRec EQ CNUMMaxRec ) | |
1758 { | |
1759 simEntStat.curCmd = AT_CMD_NONE; | |
1760 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1761 | |
1762 R_AT( RAT_CNUM, ownBuf ) ( &CNUMMsisdn[0], CNUMMaxRec ); | |
1763 | |
1764 if ( tmpActRec EQ CNUMMaxRec ) | |
1765 { | |
1766 if (pSIMCmdPrm -> CNUMOutput) | |
1767 { | |
1768 R_AT( RAT_OK, ownBuf ) ( cmdBuf ); | |
1769 } | |
1770 else | |
1771 { | |
1772 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_NotFound ); | |
1773 } | |
1774 } | |
1775 } | |
1776 else | |
1777 { | |
1778 CNUMMsisdnIdx++; | |
1779 pSIMCmdPrm -> CNUMActRec++; | |
1780 | |
1781 if ( cmhSIM_ReqMsisdn | |
1782 ( ownBuf, pSIMCmdPrm -> CNUMActRec ) NEQ AT_EXCT ) | |
1783 { | |
1784 simEntStat.curCmd = AT_CMD_NONE; | |
1785 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1786 | |
1787 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_Unknown ); | |
1788 } | |
1789 } | |
1790 } | |
1791 | |
1792 break; | |
1793 } | |
1794 | |
1795 default: | |
1796 { | |
1797 simEntStat.curCmd = AT_CMD_NONE; | |
1798 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1799 | |
1800 R_AT( RAT_CME, ownBuf ) | |
1801 ( | |
1802 cmdBuf, | |
1803 cmhSIM_GetCmeFromSim ( simShrdPrm.atb[table_id].errCode ) | |
1804 ); | |
1805 break; | |
1806 } | |
1807 | |
1808 } | |
1809 | |
1810 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE; | |
1811 } | |
1812 | |
1813 /* | |
1814 +--------------------------------------------------------------------+ | |
1815 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
1816 | STATE : code ROUTINE : cmhSIM_RdCnfPlmnSel| | |
1817 +--------------------------------------------------------------------+ | |
1818 | |
1819 PURPOSE : This function handles the confirmation of reading | |
1820 EF PLMN SEL from SIM. | |
1821 */ | |
1822 GLOBAL void cmhSIM_RdCnfPlmnSel ( SHORT table_id ) | |
1823 { | |
1824 T_SIM_CMD_PRM * pSIMCmdPrm; /* points to SIM command parameters */ | |
1825 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
1826 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
1827 T_ACI_CPOL_LST CPOLPlmnSelLst; /* PLMN SEL list */ | |
1828 T_ACI_RETURN ret; | |
1829 SHORT lastIdx; /* holds last index */ | |
1830 SHORT usdNtry; /* holds number of used entries */ | |
1831 | |
1832 TRACE_FUNCTION ("cmhSIM_RdCnfPlmnSel()"); | |
1833 | |
1834 pSIMCmdPrm = &cmhPrm[simEntStat.entOwn].simCmdPrm; | |
1835 cmdBuf = simEntStat.curCmd; | |
1836 ownBuf = simEntStat.entOwn; | |
1837 | |
1838 | |
1839 switch ( simShrdPrm.atb[table_id].errCode ) | |
1840 { | |
1841 case ( SIM_NO_ERROR ): | |
1842 { | |
1843 /* | |
1844 *------------------------------------------------------------- | |
1845 * check basic consistency of read data | |
1846 *------------------------------------------------------------- | |
1847 */ | |
1848 if ( simShrdPrm.atb[table_id].exchData EQ NULL OR | |
1849 simShrdPrm.atb[table_id].dataLen < ACI_MIN_SIZE_EF_PLMN_SEL) | |
1850 { | |
1851 pSIMCmdPrm->CPOLact = CPOL_ACT_None; | |
1852 simEntStat.curCmd = AT_CMD_NONE; | |
1853 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1854 | |
1855 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_Unknown ); | |
1856 break; | |
1857 } | |
1858 | |
1859 EfPLMNselStat = EF_STAT_READ; | |
1860 CPOLSimEfDataLen = simShrdPrm.atb[table_id].dataLen; | |
1861 | |
1862 if( pSIMCmdPrm->CPOLmode EQ CPOL_MOD_CompactList ) | |
1863 { | |
1864 cmhSIM_CmpctPlmnSel( simShrdPrm.atb[table_id].dataLen, | |
1865 simShrdPrm.atb[table_id].exchData ); | |
1866 } | |
1867 | |
1868 /* | |
1869 *----------------------------------------------------------- | |
1870 * what is to do ? | |
1871 *----------------------------------------------------------- | |
1872 */ | |
1873 switch( pSIMCmdPrm->CPOLact ) | |
1874 { | |
1875 /* | |
1876 *----------------------------------------------------------- | |
1877 * read out PLMN SEL list | |
1878 *----------------------------------------------------------- | |
1879 */ | |
1880 case( CPOL_ACT_Read ): | |
1881 | |
1882 /* fill in buffer */ | |
1883 lastIdx = cmhSIM_FillPlmnSelList(pSIMCmdPrm->CPOLidx, | |
1884 pSIMCmdPrm->CPOLfrmt, | |
1885 &CPOLPlmnSelLst[0], | |
1886 simShrdPrm.atb[table_id].dataLen, | |
1887 (UBYTE *)simShrdPrm.atb[table_id].exchData); | |
1888 /* notify about PLMN SEL list */ | |
1889 simEntStat.curCmd = AT_CMD_NONE; | |
1890 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1891 | |
1892 R_AT( RAT_CPOL, ownBuf ) ( ACI_NumParmNotPresent, | |
1893 lastIdx, | |
1894 &CPOLPlmnSelLst[0], | |
1895 ACI_NumParmNotPresent ); | |
1896 | |
1897 R_AT( RAT_OK, ownBuf )( AT_CMD_CPOL ); | |
1898 break; | |
1899 | |
1900 /* | |
1901 *----------------------------------------------------------- | |
1902 * write PLMN SEL list | |
1903 *----------------------------------------------------------- | |
1904 */ | |
1905 case( CPOL_ACT_Write ): | |
1906 | |
1907 if( pSIMCmdPrm->CPOLidx EQ NOT_PRESENT_8BIT ) | |
1908 | |
1909 ret = cmhSIM_FndEmptyPlmnSel( simEntStat.entOwn, | |
1910 pSIMCmdPrm->CPOLplmn ); | |
1911 else | |
1912 | |
1913 ret = cmhSIM_UpdPlmnSel( simEntStat.entOwn, | |
1914 pSIMCmdPrm->CPOLidx, | |
1915 pSIMCmdPrm->CPOLplmn, | |
1916 pSIMCmdPrm->CPOLmode); | |
1917 if( ret EQ AT_FAIL ) | |
1918 { | |
1919 pSIMCmdPrm->CPOLact = CPOL_ACT_None; | |
1920 simEntStat.curCmd = AT_CMD_NONE; | |
1921 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1922 | |
1923 R_AT( RAT_CME, simEntStat.entOwn ) | |
1924 ( | |
1925 AT_CMD_CPOL, | |
1926 ACI_ERR_DESC_NR( aciErrDesc ) | |
1927 ); | |
1928 } | |
1929 break; | |
1930 | |
1931 /* | |
1932 *----------------------------------------------------------- | |
1933 * delete PLMN SEL entry | |
1934 *----------------------------------------------------------- | |
1935 */ | |
1936 case( CPOL_ACT_Delete ): | |
1937 | |
1938 if( pSIMCmdPrm->CPOLidx2 EQ NOT_PRESENT_8BIT ) | |
1939 | |
1940 ret = cmhSIM_DelPlmnSel( simEntStat.entOwn, | |
1941 pSIMCmdPrm->CPOLidx, | |
1942 pSIMCmdPrm->CPOLmode ); | |
1943 else | |
1944 | |
1945 ret = cmhSIM_ChgPlmnSel( simEntStat.entOwn, | |
1946 pSIMCmdPrm->CPOLidx, | |
1947 pSIMCmdPrm->CPOLidx2 ); | |
1948 | |
1949 if( ret EQ AT_FAIL ) | |
1950 { | |
1951 pSIMCmdPrm->CPOLact = CPOL_ACT_None; | |
1952 simEntStat.curCmd = AT_CMD_NONE; | |
1953 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1954 | |
1955 R_AT( RAT_CME, simEntStat.entOwn ) | |
1956 ( | |
1957 AT_CMD_CPOL, | |
1958 ACI_ERR_DESC_NR( aciErrDesc ) | |
1959 ); | |
1960 } | |
1961 break; | |
1962 | |
1963 /* | |
1964 *----------------------------------------------------------- | |
1965 * test PLMN SEL entry number | |
1966 *----------------------------------------------------------- | |
1967 */ | |
1968 case( CPOL_ACT_Test ): | |
1969 | |
1970 /* notify about PLMN SEL entry number */ | |
1971 simEntStat.curCmd = AT_CMD_NONE; | |
1972 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1973 | |
1974 lastIdx = CPOLSimEfDataLen / ACI_LEN_PLMN_SEL_NTRY; | |
1975 usdNtry = cmhSIM_UsdPlmnSelNtry( CPOLSimEfDataLen, | |
1976 (UBYTE *)simShrdPrm.atb[table_id].exchData ); | |
1977 | |
1978 R_AT( RAT_CPOL, ownBuf ) ( ACI_NumParmNotPresent, | |
1979 lastIdx, | |
1980 NULL, | |
1981 usdNtry ); | |
1982 | |
1983 R_AT( RAT_OK, ownBuf )( AT_CMD_CPOL ); | |
1984 break; | |
1985 } | |
1986 break; | |
1987 } | |
1988 | |
1989 case ( SIM_CAUSE_UNKN_FILE_ID ): | |
1990 EfPLMNselStat = EF_STAT_NOT_AVAIL; | |
1991 /*lint -fallthrough*/ | |
1992 /*lint -fallthrough*/ | |
1993 default: | |
1994 { | |
1995 pSIMCmdPrm->CPOLact = CPOL_ACT_None; | |
1996 simEntStat.curCmd = AT_CMD_NONE; | |
1997 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
1998 | |
1999 R_AT( RAT_CME, ownBuf ) | |
2000 ( | |
2001 cmdBuf, | |
2002 cmhSIM_GetCmeFromSim ( simShrdPrm.atb[table_id].errCode ) | |
2003 ); | |
2004 break; | |
2005 } | |
2006 | |
2007 } | |
2008 | |
2009 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE; | |
2010 | |
2011 } | |
2012 | |
2013 /* | |
2014 +--------------------------------------------------------------------+ | |
2015 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
2016 | STATE : code ROUTINE : cmhSIM_WrCnfPlmnSel| | |
2017 +--------------------------------------------------------------------+ | |
2018 | |
2019 PURPOSE : This function handles the confirmation of writing | |
2020 EF PLMN SEL to SIM. | |
2021 */ | |
2022 GLOBAL void cmhSIM_WrCnfPlmnSel ( SHORT table_id ) | |
2023 { | |
2024 T_SIM_CMD_PRM * pSIMCmdPrm; /* points to SIM command parameters */ | |
2025 UBYTE ownBuf; | |
2026 | |
2027 TRACE_FUNCTION ("cmhSIM_WrCnfPlmnSel()"); | |
2028 | |
2029 pSIMCmdPrm = &cmhPrm[simEntStat.entOwn].simCmdPrm; | |
2030 ownBuf = simEntStat.entOwn; | |
2031 | |
2032 switch ( simShrdPrm.atb[table_id].errCode ) | |
2033 { | |
2034 /* successful PLMN SEL list update */ | |
2035 case ( SIM_NO_ERROR ): | |
2036 { | |
2037 pSIMCmdPrm->CPOLact = CPOL_ACT_None; | |
2038 simEntStat.curCmd = AT_CMD_NONE; | |
2039 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2040 | |
2041 R_AT( RAT_OK, ownBuf )( AT_CMD_CPOL ); | |
2042 break; | |
2043 } | |
2044 case SIM_CAUSE_ACCESS_PROHIBIT: | |
2045 { | |
2046 pSIMCmdPrm->CPOLact = CPOL_ACT_None; | |
2047 simEntStat.curCmd = AT_CMD_NONE; | |
2048 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2049 | |
2050 R_AT( RAT_CME, ownBuf /*simEntStat.entOwn*/ ) | |
2051 ( | |
2052 AT_CMD_CPOL, | |
2053 CME_ERR_OpNotAllow | |
2054 ); | |
2055 break; | |
2056 } | |
2057 | |
2058 /* unsuccessful PLMN SEL list update */ | |
2059 default: | |
2060 { | |
2061 pSIMCmdPrm->CPOLact = CPOL_ACT_None; | |
2062 simEntStat.curCmd = AT_CMD_NONE; | |
2063 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2064 | |
2065 R_AT( RAT_CME, ownBuf /*simEntStat.entOwn*/ ) | |
2066 ( | |
2067 AT_CMD_CPOL, | |
2068 cmhSIM_GetCmeFromSim ( simShrdPrm.atb[table_id].errCode ) | |
2069 ); | |
2070 break; | |
2071 } | |
2072 } | |
2073 | |
2074 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE; | |
2075 } | |
2076 | |
2077 /* | |
2078 +--------------------------------------------------------------------+ | |
2079 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
2080 | STATE : code ROUTINE : cmhSIM_RdCnfLangELP| | |
2081 +--------------------------------------------------------------------+ | |
2082 | |
2083 PURPOSE : This function handles the confirmation of reading | |
2084 from the SIM (EF ELP). | |
2085 */ | |
2086 GLOBAL void cmhSIM_RdCnfLangELP ( SHORT table_id ) | |
2087 { | |
2088 T_SIM_CMD_PRM *pSIMCmdPrm; /* points to SIM command parameters */ | |
2089 T_PHB_CMD_PRM *pPHBCmdPrm; /* points to PHB command parameter */ | |
2090 | |
2091 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
2092 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
2093 CHAR Clang_buffer[3]={0};/* Current language */ | |
2094 T_ACI_LAN_SUP clng; | |
2095 CHAR *ef = EF_CLNG_ID; | |
2096 EF_CLNG lng; | |
2097 BOOL Suplng = FALSE; | |
2098 T_ACI_LAN_SUP LngPCMsupLst[MAX_LAN]; | |
2099 SHORT lastIdx; | |
2100 T_ACI_RETURN ret ; | |
2101 | |
2102 TRACE_FUNCTION ("cmhSIM_RdCnfLangELP()"); | |
2103 | |
2104 pSIMCmdPrm = &cmhPrm[simEntStat.entOwn].simCmdPrm; | |
2105 cmdBuf = simEntStat.curCmd; | |
2106 ownBuf = simEntStat.entOwn; | |
2107 pPHBCmdPrm = &cmhPrm[ownBuf].phbCmdPrm; | |
2108 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE; | |
2109 simEntStat.curCmd = AT_CMD_NONE; | |
2110 | |
2111 clng.str = Clang_buffer; | |
2112 | |
2113 switch ( simShrdPrm.atb[table_id].errCode ) | |
2114 { | |
2115 case ( SIM_NO_ERROR ): | |
2116 /* | |
2117 *------------------------------------------------------------- | |
2118 * check basic consistency of read data | |
2119 *------------------------------------------------------------- | |
2120 */ | |
2121 if ( simShrdPrm.atb[table_id].exchData EQ NULL OR | |
2122 simShrdPrm.atb[table_id].dataLen < ACI_MIN_SIZE_EF_LAN) | |
2123 | |
2124 { | |
2125 pSIMCmdPrm->CLANact = CLAN_ACT_None; | |
2126 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2127 | |
2128 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_Unknown ); | |
2129 return; | |
2130 } | |
2131 | |
2132 memcpy(clng.str, (UBYTE *)simShrdPrm.atb[table_id].exchData, CLAN_CODE_LEN); | |
2133 ret=getSupLangFromPCM(&LngPCMsupLst[0], &lastIdx); | |
2134 if (ret EQ AT_FAIL) | |
2135 { | |
2136 return; | |
2137 } | |
2138 Suplng=checkSuppLang(&LngPCMsupLst[0],lastIdx, &clng); | |
2139 | |
2140 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2141 | |
2142 /* | |
2143 *--------------------------------------------------------------------- | |
2144 * check if the language,which was read from EF ELP is supported in PCM | |
2145 *--------------------------------------------------------------------- | |
2146 */ | |
2147 if(Suplng) | |
2148 { | |
2149 switch( pSIMCmdPrm->CLANact ) | |
2150 { | |
2151 case( CLAN_ACT_Read ): | |
2152 R_AT( RAT_CLAN, ownBuf ) (&clng); | |
2153 R_AT( RAT_OK, ownBuf )( AT_CMD_CLAN ); | |
2154 break; | |
2155 case( CLAN_ACT_Write ): | |
2156 memcpy(lng.data,clng.str ,CLAN_CODE_LEN); | |
2157 pcm_WriteFile (( UBYTE* )ef,SIZE_EF_CLNG,( UBYTE*) &lng); | |
2158 | |
2159 if (pPHBCmdPrm->CLAEmode EQ CLAE_MOD_Enable) | |
2160 R_AT( RAT_CLAE, ownBuf ) (&clng); | |
2161 | |
2162 R_AT( RAT_OK, ownBuf )( AT_CMD_CLAN ); | |
2163 break; | |
2164 } | |
2165 } | |
2166 else | |
2167 /* | |
2168 *------------------------------------------------------------- | |
2169 * read the EF LP if the language is not supported in PCM | |
2170 *------------------------------------------------------------- | |
2171 */ | |
2172 cmhSIM_ReqLanguageLP (ownBuf ); | |
2173 break; | |
2174 | |
2175 /* | |
2176 *------------------------------------------------------------- | |
2177 * read the EF LP if the EF ELP not available | |
2178 *------------------------------------------------------------- | |
2179 */ | |
2180 case ( SIM_CAUSE_UNKN_FILE_ID ): | |
2181 cmhSIM_ReqLanguageLP (ownBuf ); | |
2182 break; | |
2183 | |
2184 default: | |
2185 pSIMCmdPrm->CLANact = CLAN_ACT_None; | |
2186 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2187 | |
2188 R_AT( RAT_CME, ownBuf) ( AT_CMD_CLAN, CME_ERR_Unknown ); | |
2189 break; | |
2190 | |
2191 } | |
2192 | |
2193 } | |
2194 | |
2195 | |
2196 /* | |
2197 +------------------------------------------------------------------------+ | |
2198 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
2199 | STATE : code ROUTINE : cmhSIM_RdCnfLangPrfELP | | |
2200 +------------------------------------------------------------------------+ | |
2201 | |
2202 PURPOSE : This function handles the confirmation of reading | |
2203 from the SIM (EF ELP) for SAT feature LS. | |
2204 */ | |
2205 GLOBAL void cmhSIM_RdCnfLangPrfELP ( SHORT table_id ) | |
2206 { | |
2207 | |
2208 T_ACI_SAT_TERM_RESP resp_data; | |
2209 CHAR Clang_buffer[3]={0};/* Current language */ | |
2210 T_ACI_LAN_SUP clng; | |
2211 BOOL Suplng = FALSE; | |
2212 T_ACI_LAN_SUP LngPCMsupLst[MAX_LAN]; | |
2213 SHORT lastIdx; | |
2214 T_ACI_RETURN ret ; | |
2215 | |
2216 | |
2217 TRACE_FUNCTION ("cmhSIM_RdCnfLangPrfELP()"); | |
2218 | |
2219 psaSAT_InitTrmResp( &resp_data ); | |
2220 | |
2221 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE; | |
2222 | |
2223 clng.str = Clang_buffer; | |
2224 | |
2225 switch ( simShrdPrm.atb[table_id].errCode ) | |
2226 { | |
2227 case ( SIM_NO_ERROR ): | |
2228 /* | |
2229 *------------------------------------------------------------- | |
2230 * check basic consistency of read data | |
2231 *------------------------------------------------------------- | |
2232 */ | |
2233 if ( simShrdPrm.atb[table_id].exchData EQ NULL OR | |
2234 simShrdPrm.atb[table_id].dataLen < ACI_MIN_SIZE_EF_LAN) | |
2235 | |
2236 { | |
2237 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data ); | |
2238 return; | |
2239 } | |
2240 | |
2241 memcpy(clng.str, (UBYTE *)simShrdPrm.atb[table_id].exchData, CLAN_CODE_LEN); | |
2242 ret=getSupLangFromPCM(&LngPCMsupLst[0], &lastIdx); | |
2243 if (ret EQ AT_FAIL) | |
2244 { | |
2245 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data ); | |
2246 return; | |
2247 } | |
2248 | |
2249 Suplng=checkSuppLang(&LngPCMsupLst[0],lastIdx, &clng); | |
2250 | |
2251 | |
2252 /* | |
2253 *--------------------------------------------------------------------- | |
2254 * check if the language,which was read from EF ELP is supported in PCM | |
2255 *--------------------------------------------------------------------- | |
2256 */ | |
2257 if(Suplng) | |
2258 { | |
2259 /* Send Terminal resp*/ | |
2260 memcpy(&resp_data.lang, (UBYTE *)simShrdPrm.atb[table_id].exchData, CLAN_CODE_LEN); | |
2261 | |
2262 #ifdef _SIMULATION_ | |
2263 memset(resp_data.lang, 0xA0, 2); | |
2264 #endif | |
2265 | |
2266 psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data ); | |
2267 | |
2268 } | |
2269 else | |
2270 { | |
2271 /* | |
2272 *------------------------------------------------------------- | |
2273 * read the EF LP if the language is not supported in PCM | |
2274 *------------------------------------------------------------- | |
2275 */ | |
2276 if (cmhSIM_ReqLanguagePrfLP () EQ FALSE) | |
2277 { | |
2278 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data ); | |
2279 } | |
2280 } | |
2281 break; | |
2282 | |
2283 /* | |
2284 *------------------------------------------------------------- | |
2285 * read the EF LP if the EF ELP not available | |
2286 *------------------------------------------------------------- | |
2287 */ | |
2288 case ( SIM_CAUSE_UNKN_FILE_ID ): | |
2289 if (cmhSIM_ReqLanguagePrfLP () EQ FALSE) | |
2290 { | |
2291 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data ); | |
2292 } | |
2293 break; | |
2294 | |
2295 default: | |
2296 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data ); | |
2297 break; | |
2298 | |
2299 } | |
2300 } | |
2301 | |
2302 | |
2303 /* | |
2304 +--------------------------------------------------------------------+ | |
2305 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
2306 | STATE : code ROUTINE : cmhSIM_RdCnfLangLP | | |
2307 +--------------------------------------------------------------------+ | |
2308 | |
2309 PURPOSE : This function handles the confirmation of reading | |
2310 EF LP from SIM. | |
2311 */ | |
2312 GLOBAL void cmhSIM_RdCnfLangLP ( SHORT table_id ) | |
2313 { | |
2314 T_SIM_CMD_PRM * pSIMCmdPrm; /* points to SIM command parameters */ | |
2315 T_PHB_CMD_PRM * pPHBCmdPrm; /* points to PHB command parameter */ | |
2316 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
2317 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
2318 T_ACI_LAN_SUP clng; | |
2319 CHAR* ef = EF_CLNG_ID; | |
2320 EF_CLNG lng; | |
2321 BOOL Suplng= FALSE; | |
2322 SHORT lastIdx; | |
2323 T_ACI_LAN_SUP LngPCMsupLst[MAX_LAN]; | |
2324 | |
2325 | |
2326 TRACE_FUNCTION ("cmhSIM_RdCnfLangLP()"); | |
2327 | |
2328 pSIMCmdPrm = &cmhPrm[simEntStat.entOwn].simCmdPrm; | |
2329 cmdBuf = simEntStat.curCmd; | |
2330 ownBuf = simEntStat.entOwn; | |
2331 pPHBCmdPrm = &cmhPrm[ownBuf].phbCmdPrm; | |
2332 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE; | |
2333 simEntStat.curCmd = AT_CMD_NONE; | |
2334 | |
2335 clng.lng=(UBYTE )simShrdPrm.atb[table_id].exchData[0]; | |
2336 | |
2337 getSupLangFromPCM(&LngPCMsupLst[0], &lastIdx); | |
2338 Suplng=checkSuppLangInLP(&LngPCMsupLst[0],lastIdx, &clng); | |
2339 | |
2340 if ( simShrdPrm.atb[table_id].errCode EQ SIM_NO_ERROR AND | |
2341 Suplng ) | |
2342 { | |
2343 | |
2344 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2345 /* | |
2346 *------------------------------------------------------------- | |
2347 * check basic consistency of read data | |
2348 *------------------------------------------------------------- | |
2349 */ | |
2350 if ( simShrdPrm.atb[table_id].exchData EQ NULL OR | |
2351 simShrdPrm.atb[table_id].dataLen < ACI_LEN_LAN_LP_NTRY) | |
2352 | |
2353 { | |
2354 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2355 pSIMCmdPrm->CLANact = CLAN_ACT_None; | |
2356 R_AT( RAT_CME, ownBuf ) ( cmdBuf, CME_ERR_Unknown ); | |
2357 return; | |
2358 } | |
2359 | |
2360 #ifdef SIM_TOOLKIT | |
2361 if (simShrdPrm.fuRef >= 0) | |
2362 { | |
2363 psaSAT_FUConfirm (simShrdPrm.fuRef, SIM_FU_SUCCESS); | |
2364 } | |
2365 #endif | |
2366 | |
2367 /* | |
2368 *----------------------------------------------------- | |
2369 * read the supported laguage or write it PCM | |
2370 *----------------------------------------------------- | |
2371 */ | |
2372 switch( pSIMCmdPrm->CLANact ) | |
2373 { | |
2374 case( CLAN_ACT_Read ): | |
2375 R_AT( RAT_CLAN, ownBuf ) (&clng); | |
2376 R_AT( RAT_OK, ownBuf )( AT_CMD_CLAN ); | |
2377 break; | |
2378 case( CLAN_ACT_Write ): | |
2379 memcpy(lng.data,(UBYTE *) clng.str,CLAN_CODE_LEN); | |
2380 pcm_WriteFile (( UBYTE* )ef,SIZE_EF_CLNG,( UBYTE*) &lng); | |
2381 if (pPHBCmdPrm->CLAEmode EQ CLAE_MOD_Enable) | |
2382 { R_AT( RAT_CLAE, ownBuf ) (&clng);} | |
2383 | |
2384 R_AT( RAT_OK, ownBuf )( AT_CMD_CLAN ); | |
2385 break; | |
2386 | |
2387 } | |
2388 } | |
2389 else | |
2390 { | |
2391 | |
2392 #ifdef SIM_TOOLKIT | |
2393 if (simShrdPrm.fuRef >= 0) | |
2394 { | |
2395 psaSAT_FUConfirm (simShrdPrm.fuRef, SIM_FU_ERROR); | |
2396 } | |
2397 #endif | |
2398 /* | |
2399 *--------------------------------------------------------------- | |
2400 * Preferred language is not supported in MS | |
2401 *--------------------------------------------------------------- | |
2402 */ | |
2403 if ( simShrdPrm.atb[table_id].errCode EQ SIM_CAUSE_UNKN_FILE_ID OR | |
2404 !Suplng ) | |
2405 { | |
2406 TRACE_FUNCTION ("preferred language not supported"); | |
2407 | |
2408 switch( pSIMCmdPrm->CLANact ) | |
2409 { | |
2410 case( CLAN_ACT_Read ): | |
2411 R_AT( RAT_CLAN, ownBuf ) (&LngPCMsupLst[0]); | |
2412 R_AT( RAT_OK, ownBuf )( AT_CMD_CLAN ); | |
2413 break; | |
2414 case( CLAN_ACT_Write ): /* Preferred Language not supported,so not change CLAN */ | |
2415 R_AT( RAT_OK, ownBuf )( AT_CMD_CLAN ); | |
2416 break; | |
2417 } | |
2418 } | |
2419 else | |
2420 { | |
2421 pSIMCmdPrm->CLANact = CLAN_ACT_None; | |
2422 simEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
2423 R_AT( RAT_CME, ownBuf) ( AT_CMD_CLAN, CME_ERR_Unknown ); | |
2424 } | |
2425 } | |
2426 } | |
2427 | |
2428 | |
2429 /* | |
2430 +-----------------------------------------------------------------------+ | |
2431 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
2432 | STATE : code ROUTINE : cmhSIM_RdCnfLangPrfLP | | |
2433 +-----------------------------------------------------------------------+ | |
2434 | |
2435 PURPOSE : This function handles the confirmation of reading | |
2436 EF LP from SIM for SAT feature LS. | |
2437 */ | |
2438 GLOBAL void cmhSIM_RdCnfLangPrfLP ( SHORT table_id ) | |
2439 { | |
2440 | |
2441 T_ACI_SAT_TERM_RESP resp_data; | |
2442 T_ACI_LAN_SUP clng; | |
2443 BOOL Suplng= FALSE; | |
2444 SHORT lastIdx; | |
2445 T_ACI_LAN_SUP lngPCMsupLst[MAX_LAN]; | |
2446 T_ACI_RETURN ret; | |
2447 | |
2448 TRACE_FUNCTION ("cmhSIM_RdCnfLangPrfLP()"); | |
2449 | |
2450 psaSAT_InitTrmResp( &resp_data ); | |
2451 | |
2452 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE; | |
2453 | |
2454 clng.lng=(UBYTE )simShrdPrm.atb[table_id].exchData[0]; | |
2455 ret = getSupLangFromPCM(&lngPCMsupLst[0], &lastIdx); | |
2456 if(ret EQ AT_FAIL) | |
2457 { | |
2458 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data ); | |
2459 return; | |
2460 } | |
2461 | |
2462 Suplng=checkSuppLangInLP(&lngPCMsupLst[0],lastIdx, &clng); | |
2463 | |
2464 if ( simShrdPrm.atb[table_id].errCode EQ SIM_NO_ERROR AND | |
2465 Suplng ) | |
2466 { | |
2467 | |
2468 | |
2469 /* | |
2470 *------------------------------------------------------------- | |
2471 * check basic consistency of read data | |
2472 *------------------------------------------------------------- | |
2473 */ | |
2474 if ( simShrdPrm.atb[table_id].exchData EQ NULL OR | |
2475 simShrdPrm.atb[table_id].dataLen < ACI_LEN_LAN_LP_NTRY) | |
2476 | |
2477 { | |
2478 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data ); | |
2479 return; | |
2480 } | |
2481 | |
2482 | |
2483 #ifdef SIM_TOOLKIT | |
2484 if (simShrdPrm.fuRef >= 0) | |
2485 { | |
2486 psaSAT_FUConfirm (simShrdPrm.fuRef, SIM_FU_SUCCESS); | |
2487 } | |
2488 #endif | |
2489 | |
2490 /* | |
2491 *----------------------------------------------------- | |
2492 * Send the Terminal Response | |
2493 *----------------------------------------------------- | |
2494 */ | |
2495 memcpy(&resp_data.lang, (UBYTE* )simShrdPrm.atb[table_id].exchData, CLAN_CODE_LEN); | |
2496 #ifdef _SIMULATION_ | |
2497 memset(resp_data.lang, 0xA0, 2); | |
2498 #endif | |
2499 psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data ); | |
2500 } | |
2501 else | |
2502 { | |
2503 | |
2504 #ifdef SIM_TOOLKIT | |
2505 if (simShrdPrm.fuRef >= 0) | |
2506 { | |
2507 psaSAT_FUConfirm (simShrdPrm.fuRef, SIM_FU_ERROR); | |
2508 } | |
2509 #endif | |
2510 /* | |
2511 *--------------------------------------------------------------- | |
2512 * read default language from ME | |
2513 *--------------------------------------------------------------- | |
2514 */ | |
2515 | |
2516 if ( simShrdPrm.atb[table_id].errCode EQ SIM_CAUSE_UNKN_FILE_ID OR | |
2517 !Suplng ) | |
2518 { | |
2519 TRACE_FUNCTION ("default language is selected"); | |
2520 memcpy(&resp_data.lang, &lngPCMsupLst[0].str, CLAN_CODE_LEN); | |
2521 #ifdef _SIMULATION_ | |
2522 memset(resp_data.lang, 0xA0, 2); | |
2523 #endif | |
2524 psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data ); | |
2525 | |
2526 } | |
2527 else | |
2528 { | |
2529 psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data ); | |
2530 } | |
2531 | |
2532 } | |
2533 | |
2534 } | |
2535 | |
2536 | |
2537 /* | |
2538 +--------------------------------------------------------------------------+ | |
2539 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
2540 | STATE : code ROUTINE : SIM_ENT_CSDconnect_dti_cb | | |
2541 +--------------------------------------------------------------------------+ | |
2542 | |
2543 PURPOSE : Callback for connection between SIM and TRA/L2R for CSD. | |
2544 | |
2545 */ | |
2546 #ifdef FF_SAT_E | |
2547 #ifdef DTI | |
2548 GLOBAL BOOL SIM_ENT_CSDconnect_dti_cb(UBYTE dti_id, T_DTI_CONN_STATE result_type) | |
2549 { | |
2550 TRACE_FUNCTION("SIM_ENT_CSDconnect_dti_cb"); | |
2551 | |
2552 switch( result_type) | |
2553 { | |
2554 case DTI_CONN_STATE_DISCONNECTING: | |
2555 break; | |
2556 case DTI_CONN_STATE_DISCONNECTED: | |
2557 /* wap_state is set to IPA_Deactivated in psaTCPIP_config_dispatch() */ | |
2558 if (wap_state EQ UDPA_Deactivation) | |
2559 { | |
2560 wap_state = IPA_Deactivation; | |
2561 psaUDPIP_config_dispatch(); | |
2562 } | |
2563 dti_cntrl_erase_entry(dti_id); | |
2564 dti_cntrl_clear_conn_parms(dti_id); | |
2565 if (simShrdPrm.sat_class_e_dti_id EQ dti_id) | |
2566 { | |
2567 simShrdPrm.sat_class_e_dti_id = DTI_DTI_ID_NOTPRESENT; | |
2568 TRACE_EVENT("sat_class_e_dti_id reset"); | |
2569 } | |
2570 break; | |
2571 case DTI_CONN_STATE_CONNECTING: | |
2572 break; | |
2573 case DTI_CONN_STATE_CONNECTED: | |
2574 /* the SIM-SNDCP connection has been established, now send SIM_BIP_CONFIG | |
2575 * request to SIM */ | |
2576 psaSIM_Bip_Config_Req(); | |
2577 | |
2578 break; | |
2579 case DTI_CONN_STATE_ERROR: | |
2580 /* connection not possible: disconnect UDP, L2R or TRA */ | |
2581 TRACE_EVENT("SIM_ENT_CSDconnect_dti_cb connection not possible: disconnect UDP,L2R or TRA"); | |
2582 dti_cntrl_close_dpath_from_dti_id( dti_id ); | |
2583 break; | |
2584 case DTI_CONN_STATE_UNKNOWN: | |
2585 default: | |
2586 TRACE_EVENT("SIM_ENT_CSDconnect_dti_cb call with not awaited value"); | |
2587 break; | |
2588 } | |
2589 return TRUE; | |
2590 } | |
2591 #endif /* DTI */ | |
2592 | |
2593 #if defined (GPRS) AND defined (DTI) | |
2594 /* | |
2595 +---------------------------------------------------------------------------+ | |
2596 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
2597 | STATE : code ROUTINE : SIM_SNDCP_connect_dti_cb | | |
2598 +---------------------------------------------------------------------------+ | |
2599 | |
2600 PURPOSE : Callback for connection between SIM and SNDCP. | |
2601 | |
2602 */ | |
2603 GLOBAL BOOL SIM_SNDCP_connect_dti_cb(UBYTE dti_id, T_DTI_CONN_STATE result_type) | |
2604 { | |
2605 TRACE_FUNCTION("SIM_SNDCP_connect_dti_cb"); | |
2606 | |
2607 switch( result_type) | |
2608 { | |
2609 case DTI_CONN_STATE_DISCONNECTING: | |
2610 break; | |
2611 case DTI_CONN_STATE_DISCONNECTED: | |
2612 dti_cntrl_erase_entry(dti_id); | |
2613 if (simShrdPrm.sat_class_e_dti_id EQ dti_id) | |
2614 { | |
2615 simShrdPrm.sat_class_e_dti_id = DTI_DTI_ID_NOTPRESENT; | |
2616 TRACE_EVENT("sat_class_e_dti_id reset"); | |
2617 } | |
2618 break; | |
2619 case DTI_CONN_STATE_CONNECTING: | |
2620 break; | |
2621 case DTI_CONN_STATE_CONNECTED: | |
2622 /* the SIM-SNDCP connection has been established, now send SIM_BIP_CONFIG | |
2623 * request to SIM */ | |
2624 psaSIM_Bip_Config_Req(); | |
2625 break; | |
2626 case DTI_CONN_STATE_ERROR: | |
2627 /* connection not possible: disconnect SNDCP */ | |
2628 dti_cntrl_close_dpath_from_dti_id( dti_id ); | |
2629 break; | |
2630 case DTI_CONN_STATE_UNKNOWN: | |
2631 default: | |
2632 TRACE_EVENT("SIM_SNDCP_connect_dti_cb call with not awaited value"); | |
2633 break; | |
2634 } | |
2635 return TRUE; | |
2636 } | |
2637 | |
2638 | |
2639 /* | |
2640 +--------------------------------------------------------------------------+ | |
2641 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMR | | |
2642 | STATE : code ROUTINE : SIM_ENT_GPRSconnect_dti_cb| | |
2643 +--------------------------------------------------------------------------+ | |
2644 | |
2645 PURPOSE : Callback for connection between SIM and UDP/SNDCP for GPRS. | |
2646 | |
2647 */ | |
2648 | |
2649 GLOBAL BOOL SIM_ENT_GPRSconnect_dti_cb(UBYTE dti_id, T_DTI_CONN_STATE result_type) | |
2650 { | |
2651 TRACE_FUNCTION("SIM_ENT_GPRSconnect_dti_cb"); | |
2652 | |
2653 switch( result_type) | |
2654 { | |
2655 case DTI_CONN_STATE_DISCONNECTING: | |
2656 break; | |
2657 case DTI_CONN_STATE_DISCONNECTED: | |
2658 dti_cntrl_erase_entry(dti_id); | |
2659 if (simShrdPrm.sat_class_e_dti_id EQ dti_id) | |
2660 { | |
2661 simShrdPrm.sat_class_e_dti_id = DTI_DTI_ID_NOTPRESENT; | |
2662 TRACE_EVENT("sat_class_e_dti_id reset"); | |
2663 } | |
2664 break; | |
2665 case DTI_CONN_STATE_CONNECTING: | |
2666 case DTI_CONN_STATE_CONNECTED: | |
2667 break; | |
2668 case DTI_CONN_STATE_ERROR: | |
2669 /* connection not possible: disconnect UDP or SNDCP */ | |
2670 TRACE_EVENT("SIM_ENT_GPRSconnect_dti_cb connection not possible: disconnect UDP or SNDCP"); | |
2671 dti_cntrl_close_dpath_from_dti_id( dti_id ); | |
2672 break; | |
2673 case DTI_CONN_STATE_UNKNOWN: | |
2674 default: | |
2675 TRACE_EVENT("SIM_ENT_GPRSconnect_dti_cb call with not awaited value"); | |
2676 break; | |
2677 } | |
2678 return TRUE; | |
2679 } | |
2680 | |
2681 #endif /* GPRS */ | |
2682 | |
2683 #endif /* FF_SAT_E */ | |
2684 | |
2685 #ifdef FF_DUAL_SIM | |
2686 | |
2687 /* | |
2688 +-------------------------------------------------------------------+ | |
2689 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMR | | |
2690 | ROUTINE : cmhSIM_SIMSelected | | |
2691 +-------------------------------------------------------------------+ | |
2692 | |
2693 PURPOSE : Informs the upper layer the result of the SIM Selection process. | |
2694 | |
2695 */ | |
2696 GLOBAL void cmhSIM_SIMSelected ( void ) | |
2697 { | |
2698 UBYTE cmdBuf; | |
2699 T_ACI_CME_ERR err; | |
2700 | |
2701 TRACE_FUNCTION("cmhSIM_SIMSelected()"); | |
2702 | |
2703 switch(simEntStat.curCmd) | |
2704 { | |
2705 case(AT_CMD_SIM): | |
2706 | |
2707 switch( simShrdPrm.rslt ) | |
2708 { | |
2709 case( SIM_NO_ERROR ): | |
2710 | |
2711 simEntStat.curCmd = AT_CMD_NONE; | |
2712 | |
2713 R_AT( RAT_OK, simEntStat.entOwn ) | |
2714 ( AT_CMD_SIM ); | |
2715 cmh_logRslt ( simEntStat.entOwn, RAT_OK, AT_CMD_SIM, -1, -1, -1 ); | |
2716 return; | |
2717 | |
2718 default: | |
2719 err = cmhSIM_GetCmeFromSim ( simShrdPrm.rslt ); | |
2720 break; | |
2721 } | |
2722 | |
2723 cmdBuf = simEntStat.curCmd; | |
2724 simEntStat.curCmd = AT_CMD_NONE; | |
2725 | |
2726 R_AT( RAT_CME, simEntStat.entOwn ) | |
2727 ( cmdBuf, err ); | |
2728 cmh_logRslt ( simEntStat.entOwn, RAT_CME, cmdBuf, | |
2729 -1, -1, err ); | |
2730 break; | |
2731 } | |
2732 } | |
2733 #endif /*FF_DUAL_SIM*/ | |
2734 | |
2735 /*==== EOF ========================================================*/ | |
2736 |