FreeCalypso > hg > leo2moko-debug
comparison g23m/condat/ms/src/aci/cmh_simq.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:509db1a7b7b8 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : GSM-PS (6147) | |
4 | Modul : CMH_SIMQ | |
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 provides the query functions related to the | |
18 | protocol stack adapter for subscriber identity module. | |
19 +----------------------------------------------------------------------------- | |
20 */ | |
21 | |
22 #ifndef CMH_SIMQ_C | |
23 #define CMH_SIMQ_C | |
24 #endif | |
25 | |
26 #include "aci_all.h" | |
27 | |
28 #include "aci_cmh.h" | |
29 | |
30 #ifdef FAX_AND_DATA | |
31 #include "aci_fd.h" | |
32 #endif /* of #ifdef FAX_AND_DATA */ | |
33 | |
34 #ifdef UART | |
35 #include "dti.h" | |
36 #include "dti_conn_mng.h" | |
37 #endif | |
38 | |
39 #include "psa.h" | |
40 #include "psa_sim.h" | |
41 #include "cmh.h" | |
42 #include "cmh_sim.h" | |
43 #include "cmh_sms.h" | |
44 | |
45 /* To include AciSLockShrd */ | |
46 #include "aci_ext_pers.h" | |
47 #include "aci_slock.h" | |
48 | |
49 | |
50 #include "aoc.h" | |
51 | |
52 /*==== CONSTANTS ==================================================*/ | |
53 | |
54 /*==== EXPORT =====================================================*/ | |
55 | |
56 /*==== VARIABLES ==================================================*/ | |
57 | |
58 /*==== FUNCTIONS ==================================================*/ | |
59 | |
60 | |
61 /* | |
62 +--------------------------------------------------------------------+ | |
63 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMS | | |
64 | STATE : code ROUTINE : qAT_PercentSECS | | |
65 +--------------------------------------------------------------------+ | |
66 | |
67 PURPOSE : This is the functional counterpart to the %SECS? AT command | |
68 which is responsible to query the status of the Security Code. | |
69 | |
70 */ | |
71 | |
72 | |
73 GLOBAL T_ACI_RETURN qAT_PercentSECS ( T_ACI_CMD_SRC srcId,T_ACI_SECS_STA *status) | |
74 { | |
75 T_SIMLOCK_STATUS result = SIMLOCK_FAIL; | |
76 | |
77 TRACE_FUNCTION ("qAT_PercentSECS()"); | |
78 | |
79 result = aci_ext_personalisation_CS_get_status(); | |
80 | |
81 switch (result) | |
82 { | |
83 case SIMLOCK_ENABLED: | |
84 *status = SECS_STA_Enable; | |
85 return AT_CMPL; | |
86 case SIMLOCK_DISABLED: | |
87 *status = SECS_STA_Disable; | |
88 return AT_CMPL; | |
89 default: | |
90 *status = SECS_STA_NotPresent; | |
91 return AT_FAIL; | |
92 } | |
93 } | |
94 | |
95 | |
96 /* | |
97 +--------------------------------------------------------------------+ | |
98 | PROJECT : GSM-PS (6147) MODULE : CMH_CCQ | | |
99 | STATE : code ROUTINE : qAT_PlusCFUN | | |
100 +--------------------------------------------------------------------+ | |
101 | |
102 PURPOSE : This is the functional counterpart to the +CFUN? AT command | |
103 which returns the current setting for phone functionality. | |
104 | |
105 <fun>: phone functionality. | |
106 */ | |
107 | |
108 GLOBAL T_ACI_RETURN qAT_PlusCFUN ( T_ACI_CMD_SRC srcId, | |
109 T_ACI_CFUN_FUN *fun ) | |
110 { | |
111 TRACE_FUNCTION ("qAT_PlusCFUN()"); | |
112 | |
113 /* | |
114 *------------------------------------------------------------------- | |
115 * check command source | |
116 *------------------------------------------------------------------- | |
117 */ | |
118 if(!cmh_IsVldCmdSrc (srcId)) | |
119 { | |
120 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
121 return( AT_FAIL ); | |
122 } | |
123 | |
124 /* | |
125 *------------------------------------------------------------------- | |
126 * fill in parameters | |
127 *------------------------------------------------------------------- | |
128 */ | |
129 *fun = CFUNfun; | |
130 | |
131 return( AT_CMPL ); | |
132 } | |
133 | |
134 /* | |
135 +--------------------------------------------------------------------+ | |
136 | PROJECT : GSM-PS (6147) MODULE : CMH_CCQ | | |
137 | STATE : code ROUTINE : qAT_PlusCPIN | | |
138 +--------------------------------------------------------------------+ | |
139 | |
140 PURPOSE : This is the functional counterpart to the +CPIN? AT command | |
141 which returns the current PIN status. | |
142 | |
143 <code>: PIN status. | |
144 */ | |
145 | |
146 GLOBAL T_ACI_RETURN qAT_PlusCPIN (T_ACI_CMD_SRC srcId, | |
147 T_ACI_CPIN_RSLT *code) | |
148 { | |
149 T_SIM_SET_PRM * pSIMSetPrm; /* points to SIM parameter set */ | |
150 | |
151 TRACE_FUNCTION ("qAT_PlusCPIN()"); | |
152 | |
153 /* | |
154 *------------------------------------------------------------------- | |
155 * check command source | |
156 *------------------------------------------------------------------- | |
157 */ | |
158 if(!cmh_IsVldCmdSrc (srcId)) | |
159 { | |
160 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
161 return( AT_FAIL ); | |
162 } | |
163 | |
164 pSIMSetPrm = &simShrdPrm.setPrm[srcId]; | |
165 | |
166 /* | |
167 *------------------------------------------------------------------- | |
168 * check SIM status | |
169 *------------------------------------------------------------------- | |
170 */ | |
171 if( simShrdPrm.SIMStat NEQ SS_OK AND | |
172 simShrdPrm.SIMStat NEQ SS_BLKD ) | |
173 { | |
174 pSIMSetPrm -> actProc = SIM_INITIALISATION; | |
175 | |
176 simEntStat.curCmd = AT_CMD_CPIN; | |
177 simEntStat.entOwn = simShrdPrm.owner = srcId; | |
178 simShrdPrm.PINQuery = 1; | |
179 | |
180 if( psaSIM_ActivateSIM() < 0 ) /* activate SIM card */ | |
181 { | |
182 TRACE_EVENT( "FATAL RETURN psaSIM in +CPIN" ); | |
183 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Internal ); | |
184 simShrdPrm.PINQuery = 0; | |
185 return( AT_FAIL ); | |
186 } | |
187 return( AT_EXCT ); | |
188 } | |
189 | |
190 #ifdef SIM_PERS | |
191 /* | |
192 *------------------------------------------------------------------- | |
193 * check PIN status | |
194 *------------------------------------------------------------------- | |
195 */ | |
196 /* OVK Check first if any Personalisations are active */ | |
197 if ( AciSLockShrd.blocked EQ TRUE) | |
198 { | |
199 TRACE_EVENT_P3("qAT_PlusCPIN: Curr Lock = %d, Status = %d %s", AciSLockShrd.current_lock, AciSLockShrd.status[AciSLockShrd.current_lock],"" ); | |
200 | |
201 switch (AciSLockShrd.current_lock) | |
202 { | |
203 case SIMLOCK_NETWORK: | |
204 if (AciSLockShrd.status[AciSLockShrd.current_lock] EQ SIMLOCK_BLOCKED) | |
205 *code = CPIN_RSLT_PhNetPukReq; | |
206 else | |
207 *code = CPIN_RSLT_PhNetPinReq; | |
208 break; | |
209 case SIMLOCK_NETWORK_SUBSET: | |
210 if (AciSLockShrd.status[AciSLockShrd.current_lock] EQ SIMLOCK_BLOCKED) | |
211 *code = CPIN_RSLT_PhNetSubPukReq; | |
212 else | |
213 *code = CPIN_RSLT_PhNetSubPinReq; | |
214 break; | |
215 case SIMLOCK_SERVICE_PROVIDER: | |
216 if (AciSLockShrd.status[AciSLockShrd.current_lock] EQ SIMLOCK_BLOCKED) | |
217 *code = CPIN_RSLT_PhSPPukReq; | |
218 else | |
219 *code = CPIN_RSLT_PhSPPinReq; | |
220 break; | |
221 case SIMLOCK_CORPORATE: | |
222 if (AciSLockShrd.status[AciSLockShrd.current_lock] EQ SIMLOCK_BLOCKED) | |
223 *code = CPIN_RSLT_PhCorpPukReq; | |
224 else | |
225 *code = CPIN_RSLT_PhCorpPinReq; | |
226 break; | |
227 case SIMLOCK_SIM: | |
228 | |
229 *code = CPIN_RSLT_PhSimPinReq; | |
230 break; | |
231 case SIMLOCK_FIRST_SIM: | |
232 if (AciSLockShrd.status[AciSLockShrd.current_lock] EQ SIMLOCK_BLOCKED) | |
233 *code = CPIN_RSLT_PhFSimPukReq; | |
234 else | |
235 *code = CPIN_RSLT_PhFSimPinReq; | |
236 break; | |
237 default: | |
238 *code = CPIN_RSLT_NotPresent; | |
239 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_DataCorrupt ); | |
240 return( AT_FAIL ); | |
241 } | |
242 } | |
243 else | |
244 #endif | |
245 { | |
246 switch( simShrdPrm.PINStat ) | |
247 { | |
248 case( PS_RDY ): | |
249 | |
250 *code = CPIN_RSLT_SimReady; | |
251 break; | |
252 | |
253 case( PS_PIN1 ): | |
254 | |
255 *code = CPIN_RSLT_SimPinReq; | |
256 break; | |
257 | |
258 case( PS_PUK1 ): | |
259 | |
260 *code = CPIN_RSLT_SimPukReq; | |
261 break; | |
262 | |
263 case( PS_PIN2 ): | |
264 | |
265 *code = CPIN_RSLT_SimPin2Req; | |
266 break; | |
267 | |
268 case( PS_PUK2 ): | |
269 | |
270 *code = CPIN_RSLT_SimPuk2Req; | |
271 break; | |
272 | |
273 default: | |
274 | |
275 TRACE_EVENT("UNEXPECTED PIN STATUS"); | |
276 *code = CPIN_RSLT_NotPresent; | |
277 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_DataCorrupt ); | |
278 return( AT_FAIL ); | |
279 } | |
280 | |
281 | |
282 } | |
283 | |
284 return( AT_CMPL ); | |
285 } | |
286 | |
287 /* | |
288 +--------------------------------------------------------------------+ | |
289 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
290 | STATE : code ROUTINE : qAT_PlusCAOC | | |
291 +--------------------------------------------------------------------+ | |
292 | |
293 PURPOSE : This is the functional counterpart to the +CAOC AT command | |
294 which is responsible to query the current call meter value. | |
295 | |
296 <ccm> : CCM value. | |
297 */ | |
298 | |
299 GLOBAL T_ACI_RETURN qAT_PlusCAOC ( T_ACI_CMD_SRC srcId, | |
300 LONG * ccm) | |
301 { | |
302 TRACE_FUNCTION ("qAT_PlusCAOC ()"); | |
303 | |
304 /* | |
305 *------------------------------------------------------------------- | |
306 * request value from advice of charge module. | |
307 *------------------------------------------------------------------- | |
308 */ | |
309 aoc_get_values (AOC_CCM, (void *)ccm); | |
310 | |
311 return( AT_CMPL ); | |
312 } | |
313 | |
314 /* | |
315 +--------------------------------------------------------------------+ | |
316 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
317 | STATE : code ROUTINE : qAT_PlusCACM | | |
318 +--------------------------------------------------------------------+ | |
319 | |
320 PURPOSE : This is the functional counterpart to the +CACM AT command | |
321 which is responsible to query the accumulated call meter value. | |
322 | |
323 <acm> : ACM value. | |
324 */ | |
325 | |
326 GLOBAL T_ACI_RETURN qAT_PlusCACM ( T_ACI_CMD_SRC srcId, | |
327 LONG * acm) | |
328 { | |
329 TRACE_FUNCTION ("qAT_PlusCACM ()"); | |
330 | |
331 /* | |
332 *------------------------------------------------------------------- | |
333 * request value from advice of charge module. | |
334 *------------------------------------------------------------------- | |
335 */ | |
336 aoc_get_values (AOC_ACM, (ULONG *)acm); | |
337 | |
338 return( AT_CMPL ); | |
339 } | |
340 | |
341 /* | |
342 +--------------------------------------------------------------------+ | |
343 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
344 | STATE : code ROUTINE : qAT_PlusCAMM | | |
345 +--------------------------------------------------------------------+ | |
346 | |
347 PURPOSE : This is the functional counterpart to the +CAMM AT command | |
348 which is responsible to query the maximum of the | |
349 accumulated call meter value. | |
350 | |
351 <acmmax> : ACMMax value. | |
352 */ | |
353 | |
354 GLOBAL T_ACI_RETURN qAT_PlusCAMM ( T_ACI_CMD_SRC srcId, | |
355 LONG * acmmax) | |
356 { | |
357 TRACE_FUNCTION ("qAT_PlusCAMM ()"); | |
358 | |
359 /* | |
360 *------------------------------------------------------------------- | |
361 * request value from advice of charge module. | |
362 *------------------------------------------------------------------- | |
363 */ | |
364 aoc_get_values (AOC_ACMMAX, (ULONG *)acmmax); | |
365 | |
366 return( AT_CMPL ); | |
367 } | |
368 | |
369 /* | |
370 +--------------------------------------------------------------------+ | |
371 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
372 | STATE : code ROUTINE : qAT_PlusCPUC | | |
373 +--------------------------------------------------------------------+ | |
374 | |
375 PURPOSE : This is the functional counterpart to the +CPUC AT command | |
376 which is responsible to query the price per unit and | |
377 currency. | |
378 | |
379 <cuurency> : Currency | |
380 <ppu> : Price per Unit | |
381 */ | |
382 | |
383 GLOBAL T_ACI_RETURN qAT_PlusCPUC ( T_ACI_CMD_SRC srcId, | |
384 CHAR *currency, | |
385 CHAR *ppu) | |
386 { | |
387 T_puct puct; | |
388 | |
389 TRACE_FUNCTION ("qAT_PlusCPUC ()"); | |
390 | |
391 /* | |
392 *------------------------------------------------------------------- | |
393 * request value from advice of charge module. | |
394 *------------------------------------------------------------------- | |
395 */ | |
396 aoc_get_values (AOC_PUCT, (void *)&puct); | |
397 | |
398 strcpy ((char *) currency, (char *) puct.currency); | |
399 strcpy ((char *) ppu, (char *) puct.value); | |
400 | |
401 return( AT_CMPL ); | |
402 } | |
403 | |
404 /* | |
405 +--------------------------------------------------------------------+ | |
406 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMS | | |
407 | STATE : code ROUTINE : sAT_PlusCIMI | | |
408 +--------------------------------------------------------------------+ | |
409 | |
410 PURPOSE : This is the functional counterpart to the +CIMI AT command | |
411 which is responsible to request the IMSI. | |
412 | |
413 */ | |
414 | |
415 GLOBAL T_ACI_RETURN qAT_PlusCIMI ( T_ACI_CMD_SRC srcId, | |
416 CHAR * imsi ) | |
417 { | |
418 T_SIM_SET_PRM * pSIMSetPrm; /* points to SIM parameter set */ | |
419 | |
420 TRACE_FUNCTION ("qAT_PlusCIMI()"); | |
421 | |
422 /* | |
423 *------------------------------------------------------------------- | |
424 * check command source | |
425 *------------------------------------------------------------------- | |
426 */ | |
427 if(!cmh_IsVldCmdSrc (srcId)) | |
428 { | |
429 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
430 return( AT_FAIL ); | |
431 } | |
432 | |
433 pSIMSetPrm = &simShrdPrm.setPrm[srcId]; | |
434 | |
435 /* | |
436 *------------------------------------------------------------------- | |
437 * check entity status | |
438 *------------------------------------------------------------------- | |
439 */ | |
440 switch( simShrdPrm.SIMStat ) | |
441 { | |
442 case( SS_OK ): | |
443 /* | |
444 *----------------------------------------------------------------- | |
445 * check if command executable | |
446 *----------------------------------------------------------------- | |
447 */ | |
448 if((simShrdPrm.PINStat NEQ PS_RDY) AND (!cmhSMS_checkSIM ())) | |
449 { | |
450 return AT_FAIL; | |
451 } | |
452 | |
453 /* | |
454 * Check required for CIMI after SIM_REMOVE_IND and SIM_ACTIVATE_IND | |
455 * with SIMStat as SS_OK and PINStat as PS_RDY | |
456 * but before receiving SIM_MMI_INSERT_IND | |
457 */ | |
458 else if(simShrdPrm.imsi.c_field EQ 0) | |
459 { | |
460 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown); | |
461 return AT_FAIL; | |
462 } | |
463 else | |
464 { | |
465 psaSIM_cnvrtIMSI2ASCII( imsi ); | |
466 return( AT_CMPL ); | |
467 } | |
468 | |
469 case( NO_VLD_SS ): | |
470 | |
471 if( simEntStat.curCmd NEQ AT_CMD_NONE ) return( AT_BUSY ); | |
472 | |
473 pSIMSetPrm -> actProc = SIM_INITIALISATION; | |
474 | |
475 simEntStat.curCmd = AT_CMD_CIMI; | |
476 simEntStat.entOwn = simShrdPrm.owner = srcId; | |
477 | |
478 if( psaSIM_ActivateSIM() < 0 ) /* activate SIM card */ | |
479 { | |
480 simEntStat.curCmd = AT_CMD_NONE; | |
481 TRACE_EVENT( "FATAL RETURN psaSIM in +CIMI" ); | |
482 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown); | |
483 return( AT_FAIL ); | |
484 } | |
485 | |
486 return( AT_EXCT ); | |
487 | |
488 default: /* SIM failure */ | |
489 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_SimFail ); | |
490 return( AT_FAIL ); | |
491 } | |
492 } | |
493 | |
494 /* | |
495 +--------------------------------------------------------------------+ | |
496 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
497 | STATE : code ROUTINE : qAT_PercentCACM | | |
498 +--------------------------------------------------------------------+ | |
499 | |
500 PURPOSE : This is the functional counterpart to the %CACM AT command | |
501 which is responsible to query the accumulated call meter value | |
502 using PUCT. | |
503 | |
504 <cur> : currency. | |
505 <val> : ACM value. | |
506 */ | |
507 | |
508 GLOBAL T_ACI_RETURN qAT_PercentCACM( T_ACI_CMD_SRC srcId, | |
509 CHAR *cur, | |
510 CHAR *val) | |
511 { | |
512 T_puct puct; | |
513 | |
514 TRACE_FUNCTION ("qAT_PercentCACM ()"); | |
515 | |
516 /* | |
517 *------------------------------------------------------------------- | |
518 * request value from advice of charge module. | |
519 *------------------------------------------------------------------- | |
520 */ | |
521 aoc_get_values (AOC_ACM_PUCT, (T_puct *)&puct); | |
522 | |
523 strcpy (cur, (char *) puct.currency); | |
524 strcpy (val, (char *) puct.value); | |
525 | |
526 return( AT_CMPL ); | |
527 } | |
528 | |
529 /* | |
530 +--------------------------------------------------------------------+ | |
531 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
532 | STATE : code ROUTINE : qAT_PercentCAOC | | |
533 +--------------------------------------------------------------------+ | |
534 | |
535 PURPOSE : This is the functional counterpart to the %CAOC AT command | |
536 which is responsible to query the current call meter value | |
537 using PUCT. | |
538 | |
539 <cur> : currency. | |
540 <val> : CCM value. | |
541 */ | |
542 | |
543 GLOBAL T_ACI_RETURN qAT_PercentCAOC( T_ACI_CMD_SRC srcId, | |
544 CHAR *cur, | |
545 CHAR *val) | |
546 { | |
547 T_puct puct; | |
548 | |
549 TRACE_FUNCTION ("qAT_PercentCAOC ()"); | |
550 | |
551 /* | |
552 *------------------------------------------------------------------- | |
553 * request value from advice of charge module. | |
554 *------------------------------------------------------------------- | |
555 */ | |
556 aoc_get_values (AOC_CCM_PUCT, (T_puct *)&puct); | |
557 | |
558 strcpy (cur, (char *) puct.currency); | |
559 strcpy (val, (char *) puct.value); | |
560 | |
561 return( AT_CMPL ); | |
562 } | |
563 | |
564 /* | |
565 +--------------------------------------------------------------------+ | |
566 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
567 | STATE : code ROUTINE : qAT_PercentCTV | | |
568 +--------------------------------------------------------------------+ | |
569 | |
570 PURPOSE : This is the functional counterpart to the %CTV AT command | |
571 which is responsible to query the current call timer value. | |
572 | |
573 <ctv> : CTV value. | |
574 */ | |
575 | |
576 GLOBAL T_ACI_RETURN qAT_PercentCTV ( T_ACI_CMD_SRC srcId, | |
577 LONG * ctv) | |
578 { | |
579 TRACE_FUNCTION ("qAT_PercentCTV ()"); | |
580 | |
581 /* | |
582 *------------------------------------------------------------------- | |
583 * request value from advice of charge module. | |
584 *------------------------------------------------------------------- | |
585 */ | |
586 aoc_get_values (AOC_CTV, (void *)ctv); | |
587 | |
588 return( AT_CMPL ); | |
589 } | |
590 | |
591 /* | |
592 +--------------------------------------------------------------------+ | |
593 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
594 | STATE : code ROUTINE : qAT_PercentRPCT | | |
595 +--------------------------------------------------------------------+ | |
596 | |
597 PURPOSE : This is the functional counterpart to the %RPCT AT command | |
598 which is responsible to query the raw SIM data for PUCT. | |
599 | |
600 <rpuct> : PUCT values. | |
601 */ | |
602 | |
603 GLOBAL T_ACI_RETURN qAT_PercentRPCT( T_ACI_CMD_SRC srcId, | |
604 T_ACI_RPCT_VAL *rpuct) | |
605 { | |
606 T_puct_raw raw_puct; | |
607 | |
608 TRACE_FUNCTION ("qAT_PercentRPCT ()"); | |
609 | |
610 /* | |
611 *------------------------------------------------------------------- | |
612 * request value from advice of charge module. | |
613 *------------------------------------------------------------------- | |
614 */ | |
615 aoc_get_values (AOC_PUCT_RAW, (T_puct_raw *)&raw_puct); | |
616 | |
617 memcpy(rpuct->currency, raw_puct.currency, MAX_CUR_LEN); | |
618 rpuct->eppu = raw_puct.eppu; | |
619 rpuct->exp = raw_puct.exp; | |
620 rpuct->sexp = raw_puct.sexp; | |
621 | |
622 return( AT_CMPL ); | |
623 } | |
624 | |
625 /* | |
626 +--------------------------------------------------------------------+ | |
627 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
628 | STATE : code ROUTINE : qAT_PercentPVRF | | |
629 +--------------------------------------------------------------------+ | |
630 | |
631 PURPOSE : This is the functional counterpart to the %PVRF AT command | |
632 which is responsible to query the current counter for | |
633 PIN and PUK. | |
634 | |
635 <pn1Cnt> : PIN 1 counter. | |
636 <pn2Cnt> : PIN 2 counter. | |
637 <pk1Cnt> : PUK 1 counter. | |
638 <pk2Cnt> : PUK 2 counter. | |
639 <ps1> : PIN 1 status. | |
640 <ps2> : PIN 2 status. | |
641 */ | |
642 | |
643 GLOBAL T_ACI_RETURN qAT_PercentPVRF( T_ACI_CMD_SRC srcId, | |
644 SHORT *pn1Cnt, | |
645 SHORT *pn2Cnt, | |
646 SHORT *pk1Cnt, | |
647 SHORT *pk2Cnt, | |
648 T_ACI_PVRF_STAT *ps1, | |
649 T_ACI_PVRF_STAT *ps2 ) | |
650 { | |
651 TRACE_FUNCTION ("qAT_PercentPVRF ()"); | |
652 | |
653 /* | |
654 *------------------------------------------------------------------- | |
655 * read PIN/PUK counter values | |
656 *------------------------------------------------------------------- | |
657 */ | |
658 if( simShrdPrm.SIMStat NEQ SS_OK AND | |
659 simShrdPrm.SIMStat NEQ SS_BLKD ) | |
660 { | |
661 *pn1Cnt = ACI_NumParmNotPresent; | |
662 *pn2Cnt = ACI_NumParmNotPresent; | |
663 *pk1Cnt = ACI_NumParmNotPresent; | |
664 *pk2Cnt = ACI_NumParmNotPresent; | |
665 *ps1 = PVRF_STAT_NotPresent; | |
666 *ps2 = PVRF_STAT_NotPresent; | |
667 } | |
668 else | |
669 { | |
670 *pn1Cnt = simShrdPrm.pn1Cnt; | |
671 *pn2Cnt = simShrdPrm.pn2Cnt; | |
672 *pk1Cnt = simShrdPrm.pk1Cnt; | |
673 *pk2Cnt = simShrdPrm.pk2Cnt; | |
674 | |
675 switch( simShrdPrm.pn1Stat ) | |
676 { | |
677 case( PS_RDY ): *ps1 = PVRF_STAT_NotRequired; break; | |
678 case( PS_PIN1 ): *ps1 = PVRF_STAT_Required; break; | |
679 default: *ps1 = PVRF_STAT_NotPresent; | |
680 } | |
681 | |
682 switch( simShrdPrm.pn2Stat ) | |
683 { | |
684 case( PS_RDY ): *ps2 = PVRF_STAT_NotRequired; break; | |
685 case( PS_PIN2 ): *ps2 = PVRF_STAT_Required; break; | |
686 default: *ps2 = PVRF_STAT_NotPresent; | |
687 } | |
688 } | |
689 | |
690 return( AT_CMPL ); | |
691 } | |
692 | |
693 /* | |
694 +--------------------------------------------------------------------+ | |
695 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMS | | |
696 | STATE : code ROUTINE : qAT_PlusCNUM | | |
697 +--------------------------------------------------------------------+ | |
698 | |
699 PURPOSE : This is the functional counterpart to the +CNUM AT command | |
700 which is responsible for reading the subscriber number. | |
701 | |
702 <mode>: indicates whether reading starts or continues | |
703 */ | |
704 GLOBAL T_ACI_RETURN qAT_PlusCNUM ( T_ACI_CMD_SRC srcId, | |
705 T_ACI_CNUM_MOD mode ) | |
706 { | |
707 T_SIM_CMD_PRM * pSIMCmdPrm; /* points to SIM command parameters */ | |
708 | |
709 UBYTE i; /* used for counting */ | |
710 | |
711 TRACE_FUNCTION ("qAT_PlusCNUM()"); | |
712 | |
713 /* | |
714 *------------------------------------------------------------------- | |
715 * check command source | |
716 *------------------------------------------------------------------- | |
717 */ | |
718 if(!cmh_IsVldCmdSrc (srcId)) | |
719 { | |
720 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
721 return( AT_FAIL ); | |
722 } | |
723 | |
724 pSIMCmdPrm = &cmhPrm[srcId].simCmdPrm; | |
725 | |
726 /* | |
727 *------------------------------------------------------------------- | |
728 * check entity status | |
729 *------------------------------------------------------------------- | |
730 */ | |
731 if( simEntStat.curCmd NEQ AT_CMD_NONE ) | |
732 | |
733 return( AT_BUSY ); | |
734 | |
735 /* | |
736 *------------------------------------------------------------------- | |
737 * check whether there are more EF to read | |
738 *------------------------------------------------------------------- | |
739 */ | |
740 if ( mode EQ CNUM_MOD_NextRead AND | |
741 pSIMCmdPrm -> CNUMActRec EQ CNUMMaxRec ) | |
742 { | |
743 return ( AT_CMPL ); | |
744 } | |
745 | |
746 /* | |
747 *------------------------------------------------------------------- | |
748 * process parameter <mode> | |
749 *------------------------------------------------------------------- | |
750 */ | |
751 switch ( mode ) | |
752 { | |
753 case ( CNUM_MOD_NewRead ): | |
754 pSIMCmdPrm -> CNUMActRec = 1; | |
755 pSIMCmdPrm -> CNUMOutput = 0; | |
756 break; | |
757 | |
758 case ( CNUM_MOD_NextRead ): | |
759 pSIMCmdPrm -> CNUMActRec++; | |
760 break; | |
761 | |
762 default: | |
763 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
764 return( AT_FAIL ); | |
765 } | |
766 | |
767 /* | |
768 *------------------------------------------------------------------- | |
769 * reset to start of MSISDN list | |
770 *------------------------------------------------------------------- | |
771 */ | |
772 CNUMMsisdnIdx = 0; | |
773 | |
774 /* | |
775 *------------------------------------------------------------------- | |
776 * invalidate contents of MSISDN list | |
777 *------------------------------------------------------------------- | |
778 */ | |
779 for ( i = 0; i < MAX_MSISDN; i++ ) | |
780 | |
781 CNUMMsisdn[i].vldFlag = FALSE; | |
782 | |
783 /* | |
784 *------------------------------------------------------------------- | |
785 * request EF MSISDN from SIM | |
786 *------------------------------------------------------------------- | |
787 */ | |
788 return cmhSIM_ReqMsisdn ( srcId, pSIMCmdPrm -> CNUMActRec ); | |
789 } | |
790 | |
791 /* | |
792 +--------------------------------------------------------------------+ | |
793 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMS | | |
794 | STATE : code ROUTINE : cmhSIM_ReqMsisdn | | |
795 +--------------------------------------------------------------------+ | |
796 | |
797 PURPOSE : This function starts reading of EF MSISDN from SIM. | |
798 */ | |
799 | |
800 GLOBAL T_ACI_RETURN cmhSIM_ReqMsisdn ( T_ACI_CMD_SRC srcId, | |
801 UBYTE record ) | |
802 { | |
803 UBYTE length; | |
804 | |
805 TRACE_FUNCTION ("cmhSIM_ReqMsisdn()"); | |
806 | |
807 if (record EQ 1) | |
808 length = NOT_PRESENT_8BIT; | |
809 else | |
810 length = CNUMLenEfMsisdn; | |
811 | |
812 return cmhSIM_ReadRecordEF (srcId, AT_CMD_CNUM, SIM_MSISDN, | |
813 record, length, NULL, cmhSIM_CnfMsisdn); | |
814 } | |
815 | |
816 /* | |
817 +--------------------------------------------------------------------+ | |
818 | PROJECT : GSM-F&D (8411) MODULE : CMH_SIMS | | |
819 | STATE : code ROUTINE : cmhSIM_ReqCcp | | |
820 +--------------------------------------------------------------------+ | |
821 | |
822 PURPOSE : This function starts reading of EF CCP from SIM. | |
823 */ | |
824 | |
825 GLOBAL T_ACI_RETURN cmhSIM_ReqCcp ( T_ACI_CMD_SRC srcId, | |
826 UBYTE record ) | |
827 { | |
828 TRACE_FUNCTION ("cmhSIM_ReqCcp()"); | |
829 | |
830 return cmhSIM_ReadRecordEF (srcId, AT_CMD_CNUM, SIM_CCP, record, | |
831 ACI_SIZE_EF_CCP, NULL, cmhSIM_CnfCcp); | |
832 } | |
833 | |
834 /* | |
835 +--------------------------------------------------------------------+ | |
836 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
837 | STATE : code ROUTINE : qAT_PlusCPOL | | |
838 +--------------------------------------------------------------------+ | |
839 | |
840 PURPOSE : This is the functional counterpart to the +CPOL AT command | |
841 which is responsible for reading the preferred operator | |
842 list. | |
843 | |
844 <startIdx>: start index to read from | |
845 <lastIdx>: buffer for last index read | |
846 <operLst>: buffer for operator list | |
847 <mode>: supplemental read mode | |
848 */ | |
849 | |
850 GLOBAL T_ACI_RETURN qAT_PlusCPOL ( T_ACI_CMD_SRC srcId, | |
851 SHORT startIdx, | |
852 SHORT *lastIdx, | |
853 T_ACI_CPOL_OPDESC *operLst, | |
854 T_ACI_CPOL_MOD mode ) | |
855 | |
856 { | |
857 T_SIM_CMD_PRM * pSIMCmdPrm; /* points to SIM command parameters */ | |
858 | |
859 TRACE_FUNCTION ("qAT_PlusCPOL()"); | |
860 | |
861 /* | |
862 *------------------------------------------------------------------- | |
863 * check command source | |
864 *------------------------------------------------------------------- | |
865 */ | |
866 if(!cmh_IsVldCmdSrc (srcId)) | |
867 { | |
868 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
869 return( AT_FAIL ); | |
870 } | |
871 | |
872 pSIMCmdPrm = &cmhPrm[srcId].simCmdPrm; | |
873 | |
874 /* | |
875 *------------------------------------------------------------------- | |
876 * check <mode> parameter | |
877 *------------------------------------------------------------------- | |
878 */ | |
879 switch( mode ) | |
880 { | |
881 case( CPOL_MOD_NotPresent ): | |
882 case( CPOL_MOD_CompactList ): | |
883 | |
884 break; | |
885 | |
886 case( CPOL_MOD_Insert ): | |
887 default: | |
888 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
889 return( AT_FAIL ); | |
890 } | |
891 | |
892 /* | |
893 *------------------------------------------------------------------- | |
894 * check if PLMNsel EF has to be read | |
895 *------------------------------------------------------------------- | |
896 */ | |
897 if( startIdx EQ 0 OR EfPLMNselStat EQ EF_STAT_UNKNWN ) | |
898 { | |
899 /* | |
900 *------------------------------------------------------------- | |
901 * check entity status | |
902 *------------------------------------------------------------- | |
903 */ | |
904 if( simEntStat.curCmd NEQ AT_CMD_NONE ) | |
905 | |
906 return( AT_BUSY ); | |
907 | |
908 pSIMCmdPrm -> CPOLidx = (startIdx EQ 0)?1:startIdx; | |
909 pSIMCmdPrm -> CPOLmode = mode; | |
910 pSIMCmdPrm -> CPOLact = CPOL_ACT_Read; | |
911 | |
912 /* | |
913 *------------------------------------------------------------- | |
914 * request EF PLMN SEL from SIM | |
915 *------------------------------------------------------------- | |
916 */ | |
917 return cmhSIM_ReqPlmnSel ( srcId ); | |
918 } | |
919 | |
920 /* | |
921 *------------------------------------------------------------- | |
922 * fill PLMN SEL list | |
923 *------------------------------------------------------------- | |
924 */ | |
925 if( startIdx * ACI_LEN_PLMN_SEL_NTRY > CPOLSimEfDataLen ) | |
926 { | |
927 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_InvIdx ); | |
928 return( AT_FAIL ); | |
929 } | |
930 | |
931 if( mode EQ CPOL_MOD_CompactList ) | |
932 { | |
933 cmhSIM_CmpctPlmnSel( CPOLSimEfDataLen, CPOLSimEfData ); | |
934 } | |
935 | |
936 *lastIdx = cmhSIM_FillPlmnSelList((UBYTE)startIdx, | |
937 pSIMCmdPrm->CPOLfrmt, | |
938 operLst, | |
939 CPOLSimEfDataLen, | |
940 CPOLSimEfData); | |
941 return ( AT_CMPL ); | |
942 | |
943 } | |
944 | |
945 /* | |
946 +--------------------------------------------------------------------+ | |
947 | PROJECT : GSM-PS (6147) MODULE : CMH_SSQ | | |
948 | STATE : code ROUTINE : tAT_PlusCPOL | | |
949 +--------------------------------------------------------------------+ | |
950 | |
951 PURPOSE : This is the functional counterpart to the +CPOL AT command | |
952 which is responsible for testing the supported preferred | |
953 operator list length. | |
954 | |
955 <lastIdx>: maximum number of entries | |
956 <usdNtry>: number of used entries | |
957 */ | |
958 | |
959 GLOBAL T_ACI_RETURN tAT_PlusCPOL ( T_ACI_CMD_SRC srcId, | |
960 SHORT * lastIdx, | |
961 SHORT * usdNtry ) | |
962 { | |
963 T_SIM_CMD_PRM * pSIMCmdPrm; /* points to SIM command parameters */ | |
964 | |
965 TRACE_FUNCTION ("tAT_PlusCPOL()"); | |
966 | |
967 /* | |
968 *------------------------------------------------------------------- | |
969 * check command source | |
970 *------------------------------------------------------------------- | |
971 */ | |
972 if(!cmh_IsVldCmdSrc (srcId)) | |
973 { | |
974 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
975 return( AT_FAIL ); | |
976 } | |
977 | |
978 pSIMCmdPrm = &cmhPrm[srcId].simCmdPrm; | |
979 | |
980 /* | |
981 *------------------------------------------------------------------- | |
982 * check if PLMNsel EF has to be read | |
983 *------------------------------------------------------------------- | |
984 */ | |
985 if( EfPLMNselStat EQ EF_STAT_UNKNWN ) | |
986 { | |
987 /* | |
988 *------------------------------------------------------------- | |
989 * check entity status | |
990 *------------------------------------------------------------- | |
991 */ | |
992 if( simEntStat.curCmd NEQ AT_CMD_NONE ) | |
993 | |
994 return( AT_BUSY ); | |
995 | |
996 pSIMCmdPrm -> CPOLact = CPOL_ACT_Test; | |
997 | |
998 /* | |
999 *------------------------------------------------------------- | |
1000 * request EF PLMN SEL from SIM | |
1001 *------------------------------------------------------------- | |
1002 */ | |
1003 return cmhSIM_ReqPlmnSel ( srcId ); | |
1004 } | |
1005 | |
1006 /* | |
1007 *------------------------------------------------------------- | |
1008 * return number of supported entries | |
1009 *------------------------------------------------------------- | |
1010 */ | |
1011 *lastIdx = CPOLSimEfDataLen / ACI_LEN_PLMN_SEL_NTRY; | |
1012 | |
1013 *usdNtry = cmhSIM_UsdPlmnSelNtry( CPOLSimEfDataLen, CPOLSimEfData ); | |
1014 | |
1015 return ( AT_CMPL ); | |
1016 | |
1017 } | |
1018 | |
1019 | |
1020 /* | |
1021 +-------------------------------------------------------------------+ | |
1022 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMQ | | |
1023 | ROUTINE : qAT_PercentCPRI | | |
1024 +-------------------------------------------------------------------+ | |
1025 | |
1026 PURPOSE : This is the functional counterpart to the %CPRI AT command | |
1027 which is responsible for reading the ciphering indicator | |
1028 mode. | |
1029 */ | |
1030 GLOBAL T_ACI_RETURN qAT_PercentCPRI( T_ACI_CMD_SRC srcId, | |
1031 UBYTE *mode ) | |
1032 { | |
1033 TRACE_FUNCTION ("qAT_PercentCPRI()"); | |
1034 | |
1035 if( !cmh_IsVldCmdSrc( srcId ) ) | |
1036 { | |
1037 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1038 return( AT_FAIL ); | |
1039 } | |
1040 *mode = simShrdPrm.ciSIMEnabled; | |
1041 return( AT_CMPL ); | |
1042 } | |
1043 | |
1044 | |
1045 /* | |
1046 +-------------------------------------------------------------------+ | |
1047 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMQ | | |
1048 | ROUTINE : qAT_PercentATR | | |
1049 +-------------------------------------------------------------------+ | |
1050 | |
1051 PURPOSE : This is the functional counterpart to the %ATR AT command | |
1052 which is responsible for reading the SIM phase and ATR | |
1053 (answer to reset information). | |
1054 */ | |
1055 GLOBAL T_ACI_RETURN qAT_PercentATR( T_ACI_CMD_SRC srcId, | |
1056 UBYTE *phase, | |
1057 UBYTE *atr_len, | |
1058 UBYTE *atr_info) | |
1059 { | |
1060 TRACE_FUNCTION ("qAT_PercentATR()"); | |
1061 | |
1062 if( !cmh_IsVldCmdSrc( srcId ) ) | |
1063 { | |
1064 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1065 return( AT_FAIL ); | |
1066 } | |
1067 | |
1068 *phase = simShrdPrm.crdPhs; /* SIM Phase... value is 0xFF if no phase is available*/ | |
1069 | |
1070 | |
1071 *atr_len = simShrdPrm.atr.len; /* ATR length... 0 if no ATR data is available*/ | |
1072 if (simShrdPrm.atr.len) | |
1073 { | |
1074 memcpy(atr_info, simShrdPrm.atr.data, simShrdPrm.atr.len); | |
1075 } | |
1076 | |
1077 return( AT_CMPL ); | |
1078 } | |
1079 | |
1080 #ifdef FF_DUAL_SIM | |
1081 /* | |
1082 +--------------------------------------------------------------------+ | |
1083 | PROJECT : GSM-PS (6147) MODULE : CMH_SIMQ | | |
1084 | STATE : code ROUTINE : qAT_PercentSIM | | |
1085 +--------------------------------------------------------------------+ | |
1086 | |
1087 PURPOSE : This is the functional counterpart to the %SIM? AT command | |
1088 which returns the currently powered on SIM Number. | |
1089 | |
1090 <sim_num>: sim_number. | |
1091 */ | |
1092 | |
1093 GLOBAL T_ACI_RETURN qAT_PercentSIM ( T_ACI_CMD_SRC srcId, | |
1094 UBYTE *sim_num ) | |
1095 { | |
1096 TRACE_FUNCTION ("qAT_PercentSIM()"); | |
1097 | |
1098 /* | |
1099 *------------------------------------------------------------------- | |
1100 * check command source | |
1101 *------------------------------------------------------------------- | |
1102 */ | |
1103 if(!cmh_IsVldCmdSrc (srcId)) | |
1104 { | |
1105 ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); | |
1106 return( AT_FAIL ); | |
1107 } | |
1108 | |
1109 /* | |
1110 *------------------------------------------------------------------- | |
1111 * fill in parameters | |
1112 *------------------------------------------------------------------- | |
1113 */ | |
1114 *sim_num = simShrdPrm.SIM_Powered_on; | |
1115 | |
1116 return( AT_CMPL ); | |
1117 } | |
1118 #endif /*FF_DUAL_SIM*/ | |
1119 /*==== EOF ========================================================*/ |