comparison src/aci2/mfw/mfw_ss.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: MMI-Framework (8417) $Workfile:: mfw_ss.c $|
4 | $Author:: Vo $Revision:: 1 $|
5 | CREATED: 25.1.99 $Modtime:: 24.03.00 9:48 $|
6 | STATE : code |
7 +--------------------------------------------------------------------+
8
9 MODULE : MFW_SS
10
11 PURPOSE : This modul contains the functions for supplementary management.
12
13
14 $History:: mfw_ss.c $
15
16 Dec 16, 2005 REF: OMAPS00053316 x0018858
17 Description: E-Sample 2.58 compiler code crashes when accessing the Voicemail service in the Messages
18 Solution: Added a NULL Check for the USSD pointer that is being received.
19
20 Jul 05, 2005 REF: CRR 22565 a0876501
21 Description: IMEI display on handset through atd*#06# was swapped.
22 Solution: Byte swapping corrected for IMEI decoding.
23
24 Mar 30, 2005 REF: CRR 29986 xpradipg
25 Description: Optimisation 1: Removal of unused variables and dynamically
26 allocate/ deallocate mbndata
27 Solution: unused variables are removed
28
29 Apr 06 2005 REF: CRR 29989 xpradipg
30 Description: Optimisation 3: replace the static global data with dynamic
31 allocation / deallocation
32 Solution: The static global variables are dynamically allocated and
33 deallocated
34
35 Aug 16, 2004 REF: CRR 24323 Deepa M.D
36 Bug:Clenup of sprintf used for tracing
37 Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX
38
39 Jul 15, 2004 REF: CRR 13873 xkundadu
40 Description: Make an incoming call, the end user pressing 0+send will
41 pick up the call. Instead, 0+send should reject the incoming
42 call.
43 Solution: Added the handling of 0/1/2 SEND for a waiting call.
44 Modified the ss_decode() function in the
45 mfw_ss.c file to search the sequential table in the case of
46 waiting call also. Made changes in mfw_cm.c file also
47 *
48 * ***************** Version 24 *****************
49 * User: Vo Date: 24.03.00 Time: 10:18
50 * Updated in $/GSM/Condat/MS/SRC/MFW
51 * Bug fix: result of IMEI
52 * New: notice PIN type of SS string for PIN change/PIN unblock
53 *
54 * ***************** Version 23 *****************
55 * User: Vo Date: 10.01.00 Time: 16:09
56 * Updated in $/GSM/Condat/MS/SRC/MFW
57 * new function ss_exit()
58 *
59 * ***************** Version 22 *****************
60 * User: Vo Date: 10.01.00 Time: 13:32
61 * Updated in $/GSM/Condat/MS/SRC/MFW
62 *
63 * ***************** Version 21 *****************
64 * User: Ak Date: 10.01.00 Time: 13:14
65 * Updated in $/GSM/Condat/MS/SRC/MFW
66 *
67 * ***************** Version 20 *****************
68 * User: Ak Date: 21.10.99 Time: 11:56
69 * Updated in $/GSM/Condat/MS/SRC/MFW
70 * Why: Improvement
71 * What: Passing of network basic service codes instead of GSM 2.30
72 * codes for SS control string results and invocations
73 *
74 * ***************** Version 19 *****************
75 * User: Ak Date: 29.09.99 Time: 8:37
76 * Updated in $/GSM/DEV/MS/SRC/MFW
77 * Why: bug fix
78 * What: strcpy do not check a NULL pointer argument, corrected
79 *
80 * ***************** Version 18 *****************
81 * User: Ak Date: 28.09.99 Time: 14:16
82 * Updated in $/GSM/DEV/MS/SRC/MFW
83 * Why: bug fix
84 * What: strcpy do not check a NULL pointer argument, corrected
85 *
86 * ***************** Version 17 *****************
87 * User: Es Date: 16.09.99 Time: 17:25
88 * Updated in $/GSM/DEV/MS/SRC/MFW
89 * include SENSEI patch 13/09/99
90 * two minor fixes
91 *
92 * ***************** Version 16 *****************
93 * User: Vo Date: 12.09.99 Time: 14:16
94 * Updated in $/GSM/DEV/MS/SRC/MFW
95 * New: USSD handle
96 *
97 * ***************** Version 15 *****************
98 * User: Vo Date: 30.08.99 Time: 12:08
99 * Updated in $/GSM/DEV/MS/SRC/MFW
100 * SS string for PIN unblock
101 *
102 * ***************** Version 14 *****************
103 * User: Vo Date: 9.08.99 Time: 16:53
104 * Updated in $/GSM/DEV/MS/SRC/MFW
105 * SS result from network
106 * present IMEI
107 * different handling of network password and PIN1/PIN2 password
108 *
109 * ***************** Version 13 *****************
110 * User: Vo Date: 21.07.99 Time: 14:44
111 * Updated in $/GSM/DEV/MS/SRC/MFW
112 *
113 * ***************** Version 12 *****************
114 * User: Vo Date: 16.07.99 Time: 10:39
115 * Updated in $/GSM/DEV/MS/SRC/MFW
116 *
117 * ***************** Version 11 *****************
118 * User: Vo Date: 9.07.99 Time: 14:56
119 * Updated in $/GSM/DEV/MS/SRC/MFW
120 *
121 * ***************** Version 1 *****************
122 * User: Vo Date: 10.02.99 Time: 12:41
123 * Created in $/GSM/DEV/MS/SRC/MFW
124
125 */
126 #define ENTITY_MFW
127
128 #include <string.h>
129 #include <stdio.h>
130 #include <stdlib.h>
131
132 #if defined (NEW_FRAME)
133
134 #include "typedefs.h"
135 #include "vsi.h"
136 #include "custom.h"
137 #include "gsm.h"
138
139 #else
140
141 #include "STDDEFS.H"
142 #include "custom.h"
143 #include "gsm.h"
144 #include "vsi.h"
145
146 #endif
147
148 #include "message.h"
149 #include "prim.h"
150 #include "aci_cmh.h"
151
152 #include "cus_aci.h"
153 #include "ksd.h"
154 #include "prim.h"
155 #ifndef PCM_2_FFS
156 #include "pcm.h"
157 #else
158 #include "prim.h"
159 #include "Gsm.h"
160 #endif
161
162
163 #include "psa.h"
164 #include "psa_sim.h"
165
166 #include "mfw_mfw.h"
167 #include "mfw_nm.h"
168 #include "mfw_sim.h"
169 #include "mfw_sima.h"
170 #include "mfw_nmi.h"
171 #include "mfw_simi.h"
172 #include "mfw_nma.h"
173 #include "mfw_phb.h"
174 #include "mfw_cm.h"
175 #include "mfw_cmi.h"
176 #include "mfw_ss.h"
177 #include "mfw_ssi.h"
178 #include "mfw_win.h"
179 #include "mfw_phbi.h"
180
181 #include <string.h>
182
183
184 /*************** Variables ******************************************/
185 // Mar 30, 2005 REF: CRR 29986 xpradipg
186 // remove unused variables
187 #ifndef FF_MMI_OPTIM
188 static T_MFW_SS_SUPORT ss_suport;
189 #endif
190 // Apr 06 2005 REF: CRR 29989 xpradipg
191 // This scope of the variable lies within a function hence it is made as local
192 #ifndef FF_MMI_OPTIM
193 static T_MFW_SS_NOTIFY notify;
194 #endif
195
196 // Apr 06 2005 REF: CRR 29989 xpradipg
197 // The below static globals are dynamically allocated in rAT_PercentKSIR where
198 // the data is populated for the supplementary services response and
199 // deallocated once the ss_signal function is executed where in the contents
200 // are copied onto another variable
201 #ifdef FF_MMI_OPTIM
202 T_MFW_SS_CF_CNF *cf_cnf = NULL;
203 T_MFW_SS_CB_CNF *cb_cnf = NULL;
204 T_MFW_SS_CLI_CNF *cli_cnf = NULL;
205 T_MFW_SS_CW_CNF *cw_cnf = NULL;
206 T_MFW_SS_PW_CNF *pw_cnf = NULL;
207 T_MFW_IMEI *imei_info = NULL;
208 #else
209 static T_MFW_SS_CF_CNF cf_cnf;
210 static T_MFW_SS_CB_CNF cb_cnf;
211 static T_MFW_SS_CLI_CNF cli_cnf;
212 static T_MFW_SS_CW_CNF cw_cnf;
213 static T_MFW_SS_PW_CNF pw_cnf;
214 static T_MFW_SS_RES ss_res;
215 static T_MFW_IMEI imei_info;
216 #endif
217 static T_MFW_SS_USSD ussd_info;
218 // Mar 30, 2005 REF: CRR 29986 xpradipg
219 // remove unused variables
220 #ifndef FF_MMI_OPTIM
221 static U8 clip_status;
222 static U8 colp_status;
223 static U8 clir_status;
224 static U8 clir_prefix;
225 static U8 colr_status;
226 #endif
227 static U8 clck_flag;
228 static U8 pwd_flag; /* 1 for change PIN */
229
230
231
232 #define CF_LST_SIZE (sizeof(T_MFW_FEATURE) *MFW_MAX_FEAT_NR)
233 #define CB_LST_SIZE (sizeof(T_MFW_TELECOM) *MFW_MAX_TELE_NR)
234 #define CW_LST_SIZE (sizeof(T_MFW_SRV_GROUP)*MFW_MAX_SRV_NR)
235
236 #define MAX_LST_BUF (MAXIMUM(MAXIMUM(CF_LST_SIZE,\
237 CB_LST_SIZE),\
238 CW_LST_SIZE))
239
240 #define LANG_RESET "*#0" /*mc, SPR 1111 beginning of language reset pseudo-SS string*/
241 #define TTY_NEXTCALL_ON "*55#" /* SPR#1352 - SH - Pseudo-SS string to switch on TTY on next call */
242 #define TTY_NEXTCALL_OFF "#55#" /* SPR#1352 - SH - Pseudo-SS string to switch off TTY on next call */
243
244 static ULONG ssLstBuf[MAX_LST_BUF/sizeof(ULONG)];
245 EXTERN MfwHdr * current_mfw_elem;
246
247 // July 09, 2005 REF : MMI-22565 - a0876501
248 extern UBYTE cmhSS_getCdFromImei (T_ACI_IMEI* imei);
249
250
251 /*
252 +--------------------------------------------------------------------+
253 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
254 | STATE : code ROUTINE: ss_mfw_init |
255 +--------------------------------------------------------------------+
256
257
258 PURPOSE :
259
260 */
261
262 void ss_mfw_init(void)
263 {
264 // Mar 30, 2005 REF: CRR 29986 xpradipg
265 // remove reundant code since the values assigned here are never referenced
266
267 #ifndef PCM_2_FFS
268
269 #ifndef FF_MMI_OPTIM
270 EF_MSCAP mscap;
271 EF_MSSUP mssup;
272 EF_MSSET msset;
273 UBYTE version;
274
275 /* Read the Mobile Capabilities from EEPROM */
276
277 if (pcm_ReadFile((UBYTE *)EF_MSCAP_ID,
278 SIZE_EF_MSCAP,
279 (UBYTE *)&mscap,
280 &version) EQ PCM_OK)
281 {
282 ss_suport.speech = (UBYTE)FldGet(mscap.chnMode,spchSupV1);
283 ss_suport.data = (UBYTE)FldGet(mscap.datCap1,datSup);
284 ss_suport.asyn = (UBYTE)FldGet(mscap.datCap1,AsySup);
285 ss_suport.syn = (UBYTE)FldGet(mscap.datCap1,NTSynSup);
286 }
287
288 if (pcm_ReadFile((UBYTE *)EF_MSSUP_ID,
289 SIZE_EF_MSSUP,
290 (UBYTE *)&mssup,
291 &version) EQ PCM_OK)
292 {
293 ss_suport.aoc = (UBYTE)FldGet(mssup.feat1,AoC);
294 ss_suport.dtmf = (UBYTE)FldGet(mssup.feat1,DTMF);
295 ss_suport.cf = (UBYTE)FldGet(mssup.feat1,CF);
296 ss_suport.cb = (UBYTE)FldGet(mssup.feat1,CB);
297 ss_suport.ussd = (UBYTE)FldGet(mssup.feat1,USSD);
298 ss_suport.etc = (UBYTE)FldGet(mssup.feat1,ETC);
299 }
300
301 if (pcm_ReadFile((UBYTE *)EF_MSSET_ID,
302 SIZE_EF_MSSET,
303 (UBYTE *)&msset,
304 &version) EQ PCM_OK)
305 {
306 ss_suport.clire = (UBYTE)FldGet(msset.misc,clir);
307 ss_suport.clipr = (UBYTE)FldGet(msset.misc,clip);
308 }
309 #endif
310 #endif
311 pwd_flag = 0;
312 }
313
314 /*
315 +--------------------------------------------------------------------+
316 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
317 | STATE : code ROUTINE: ss_exit |
318 +--------------------------------------------------------------------+
319
320
321 PURPOSE :
322
323 */
324
325 void ss_exit(void)
326 {
327 TRACE_FUNCTION("ss_exit()");
328 }
329
330 /*
331 +--------------------------------------------------------------------+
332 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
333 | STATE : code ROUTINE: ss_create |
334 +--------------------------------------------------------------------+
335
336
337 PURPOSE : create event for supplementary management
338
339 */
340
341 T_MFW_HND ss_create(T_MFW_HND hWin, T_MFW_EVENT event, T_MFW_CB cbfunc)
342 {
343 T_MFW_HDR *hdr;
344 T_MFW_SS *ss_para;
345 MfwHdr * insert_status =0;
346
347 TRACE_FUNCTION("ss_create()");
348
349 hdr = (T_MFW_HDR *) mfwAlloc(sizeof (T_MFW_HDR));
350 ss_para = (T_MFW_SS *) mfwAlloc(sizeof (T_MFW_SS));
351
352 if (!hdr OR !ss_para)
353 {
354 TRACE_ERROR("ERROR: ss_create() Mem Alloc Failed.");
355
356 if(hdr)
357 mfwFree((U8*)hdr,sizeof(MfwHdr));
358
359 if(ss_para)
360 mfwFree((U8*)ss_para,sizeof(T_MFW_SS));
361
362 return FALSE;
363 }
364
365 /*
366 * initialisation of the handler
367 */
368 ss_para->emask = event;
369 ss_para->handler = cbfunc;
370
371 hdr->data = ss_para; /* store parameter in node */
372 hdr->type = MFW_TYP_SS; /* store type of event handler */
373
374 /*
375 * installation of the handler
376 */
377 insert_status = mfwInsert((T_MFW_HDR *)hWin, hdr);
378
379 if(!insert_status)
380 {
381 TRACE_ERROR("ERROR: ss_create() Failed to Install Handler. ");
382 mfwFree((U8*)hdr,sizeof(MfwHdr));
383 mfwFree((U8*)ss_para,sizeof(T_MFW_SS));
384 return 0;
385 }
386 return insert_status;
387 }
388
389
390 /*
391 +--------------------------------------------------------------------+
392 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
393 | STATE : code ROUTINE: ss_delete |
394 +--------------------------------------------------------------------+
395
396
397 PURPOSE : delete a event for supplementary management
398
399 */
400
401 T_MFW_RES ss_delete(T_MFW_HND h)
402 {
403 TRACE_FUNCTION("ss_delete()");
404
405 if (!h OR !((T_MFW_HDR *)h)->data)
406 return MFW_RES_ILL_HND;
407
408 if (!mfwRemove((T_MFW_HDR *)h))
409 return MFW_RES_ILL_HND;
410
411 mfwFree((U8 *)(((T_MFW_HDR *) h)->data),sizeof(T_MFW_SS));
412 mfwFree((U8 *)h,sizeof(T_MFW_HDR));
413
414 return MFW_RES_OK;
415 }
416
417
418 /*
419 +--------------------------------------------------------------------+
420 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
421 | STATE : code ROUTINE: ss_sign_exec |
422 +--------------------------------------------------------------------+
423
424
425 PURPOSE : Send a signal if SS management handler.
426
427 */
428
429 BOOL ss_sign_exec (T_MFW_HDR * cur_elem, T_MFW_EVENT event, T_MFW_SS_PARA * para)
430 {
431 TRACE_FUNCTION ("ss_sign_exec()");
432
433 while (cur_elem)
434 {
435 /*
436 * event handler is available
437 */
438 if (cur_elem->type EQ MFW_TYP_SS)
439 {
440 T_MFW_SS * ss_data;
441 /*
442 * handler is SS management handler
443 */
444 ss_data = (T_MFW_SS *)cur_elem->data;
445 if (ss_data->emask & event)
446 {
447 /*
448 * event is expected by the call back function
449 */
450 ss_data->event = event;
451 switch (event)
452 {
453 case E_SS_NOTIFY:
454 memcpy (&ss_data->para.notify, para, sizeof (T_MFW_SS_NOTIFY));
455 break;
456
457 case E_SS_CF_CNF:
458 case E_SS_CF_ICN_UPD:
459 memcpy (&ss_data->para.cf_cnf, para, sizeof (T_MFW_SS_CF_CNF));
460 break;
461
462 case E_SS_CB_CNF:
463 memcpy (&ss_data->para.cb_cnf, para, sizeof (T_MFW_SS_CB_CNF));
464 break;
465
466 case E_SS_CW_CNF:
467 memcpy (&ss_data->para.cw_cnf, para, sizeof (T_MFW_SS_CW_CNF));
468 break;
469
470 case E_SS_CLI_CNF:
471 memcpy (&ss_data->para.cli_cnf, para, sizeof (T_MFW_SS_CLI_CNF));
472 break;
473
474 case E_SS_RES:
475 memcpy (&ss_data->para.ss_res, para, sizeof (T_MFW_SS_RES));
476 break;
477
478 case E_SS_GET_PW:
479 memcpy (&ss_data->para.pw_cnf, para, sizeof (T_MFW_SS_PW_CNF));
480 break;
481
482 case E_SS_IMEI:
483 memcpy (&ss_data->para.imei_info, para, sizeof (T_MFW_IMEI));
484 break;
485
486 case E_SS_USSD_REQ:
487 memcpy (&ss_data->para.ussd_info, para, sizeof (T_MFW_SS_USSD));
488 break;
489
490 case E_SS_USSD_CNF:
491 memcpy (&ss_data->para.ussd_info, para, sizeof (T_MFW_SS_USSD));
492 break;
493 }
494
495 /*
496 * if call back defined, call it
497 */
498 if (ss_data->handler)
499 {
500 // PATCH LE 06.06.00
501 // store current mfw elem
502 current_mfw_elem = cur_elem;
503 // END PATCH LE 06.06.00
504
505 if ((*(ss_data->handler)) (ss_data->event, (void *)&ss_data->para))
506 return TRUE;
507 }
508 }
509 }
510 cur_elem = cur_elem->next;
511 }
512 return FALSE;
513 }
514
515 /*
516 +--------------------------------------------------------------------+
517 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
518 | STATE : code ROUTINE: ss_signal |
519 +--------------------------------------------------------------------+
520
521 PURPOSE : send a event signal.
522
523 */
524
525 void ss_signal(T_MFW_EVENT event, void * para)
526 {
527 UBYTE temp;
528 TRACE_FUNCTION ("ss_signal()");
529
530 temp = dspl_Enable(0);
531 if (mfwSignallingMethod EQ 0)
532 {
533 /*
534 * focus is on a window
535 */
536 if (mfwFocus)
537 /*
538 * send event to sim management
539 * handler if available
540 */
541 if (ss_sign_exec (mfwFocus, event, para))
542 {
543 dspl_Enable(temp);
544 return;
545 }
546
547 /*
548 * acutal focussed window is not available
549 * or has no network management registration
550 * handler, then search all nodes from the root.
551 */
552 if (mfwRoot)
553 ss_sign_exec (mfwRoot, event, para);
554 }
555 else
556 {
557 MfwHdr * h = 0;
558
559 /*
560 * Focus set, then start here
561 */
562 if (mfwFocus)
563 h = mfwFocus;
564 /*
565 * Focus not set, then start root
566 */
567 if (!h)
568 h = mfwRoot;
569
570 /*
571 * No elements available, return
572 */
573
574 while (h)
575
576
577 {
578 /*
579 * Signal consumed, then return
580 */
581 if (ss_sign_exec (h, event, para))
582 {
583 dspl_Enable(temp);
584 return;
585 }
586
587 /*
588 * All windows tried inclusive root
589 */
590 if (h == mfwRoot)
591 {
592 dspl_Enable(temp);
593 return;
594 }
595 /*
596 * get parent window
597 */
598 h = mfwParent(mfwParent(h));
599 if(h)
600 h = ((MfwWin * )(h->data))->elems;
601 }
602 ss_sign_exec (mfwRoot, event, para);
603 }
604 dspl_Enable(temp);
605 }
606
607
608
609 /*
610 +--------------------------------------------------------------------+
611 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
612 | STATE : code ROUTINE: ss_check_ss_string |
613 +--------------------------------------------------------------------+
614
615
616 PURPOSE : Check SS string
617
618 */
619
620 T_MFW_SS_RETURN ss_check_ss_string(UBYTE *string)
621 {
622 T_MFW_SS_RETURN ss_group;
623 T_KSD_SEQGRP grp;
624 CHAR *rest;
625 T_KSD_SEQPARAM para;
626 SHORT id;
627 int string_length;
628 UBYTE call_active=FALSE;
629
630 TRACE_FUNCTION("ss_check_ss_string");
631
632 #define MFW_MAX_DIAL_SHORT_STRING_LEN 2
633
634 /* check the type of destination address */
635 if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
636 OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK))
637 {
638 call_active = TRUE;
639 ksd_decode((CHAR *)string, TRUE, &grp, &rest, &para);
640 }
641 else
642 ksd_decode((CHAR *)string, FALSE, &grp, &rest, &para);
643
644 /* check short string */
645
646 string_length = strlen((char*)string);
647
648 TRACE_EVENT_P2("ksd_decode(""%s"") returns -> %d",(char*)string,grp);
649
650
651 switch (grp)
652 {
653 case (SEQGRP_DIAL): /*JVJ CQ 6242 */
654 if (string_length<=MFW_MAX_DIAL_SHORT_STRING_LEN)
655 {
656 /* If the call is active, the short string will be USSD in all the cases not described in ETSI 2.30*/
657 if (call_active)
658 grp = SEQGRP_USSD;
659 /* If the call is not active, the short strings 1x will be DIAL, the rest USSD*/
660 else if ((string_length EQ 1)||(*(string) NEQ '1'))
661 grp = SEQGRP_USSD;
662 }
663 break;
664 case (SEQGRP_SUP_CLIR): /* JGG/JVJ - CQ 6537 */
665 case (SEQGRP_INV_CLIR):
666 if (strlen(rest)!=0)
667 {
668 T_MFW_SS_RETURN rest_ss_group;
669
670 /*check to make sure that the number is a real dial string */
671 rest_ss_group = ss_check_ss_string((UBYTE*)rest);
672 if (rest_ss_group EQ MFW_SS_DIAL) /*If rest is a dial string, then the whole string is dial */
673 ss_group = MFW_SS_DIAL;
674 else
675 ss_group = MFW_SS_UNKNOWN;
676
677 TRACE_EVENT_P2("ss_check_ss_string(""%s"") returns -> %d",(char*)string,ss_group);
678 return ss_group;
679 }
680 break;
681 default:
682 break;
683 }
684
685 ss_group = ss_check_group(grp, para);
686
687 TRACE_EVENT_P2("ss_check_ss_string(""%s"") returns -> %d",(char*)string,ss_group);
688
689 return ss_group;
690 }
691
692
693 /*
694 +--------------------------------------------------------------------+
695 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
696 | STATE : code ROUTINE: ss_decode |
697 +--------------------------------------------------------------------+
698
699
700 PURPOSE : Decode SS string
701
702 */
703
704 T_MFW_SS_RETURN ss_decode(UBYTE *string, CHAR **rt, T_KSD_SEQPARAM *p)
705 {
706 T_KSD_SEQGRP grp;
707 CHAR *rest;
708 T_KSD_SEQPARAM para;
709 SHORT id;
710 BOOL bRetVal;
711
712 TRACE_FUNCTION("ss_decode()");
713
714 // Added the checking of wait call to solve the bug MMI-SPR 13873.
715 // If the call is a waiting also pass TRUE as the second parameter to the
716 // function ksd_decode() to decode the entered number. In ksd_decode only if
717 // the second parameter is TRUE the sequential table is searched to find out
718 // the group where the user entered string belongs to.
719 if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
720 OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
721 OR (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK))
722 {
723 bRetVal = ksd_decode((CHAR *)string, TRUE, &grp, &rest, &para);
724 if (!bRetVal)
725 *rest = 0;
726 }
727 else
728 {
729 bRetVal = ksd_decode((CHAR *)string, FALSE, &grp, &rest, &para);
730 if (!bRetVal)
731 *rest = 0;
732 }
733
734 if (!bRetVal)
735 return MFW_SS_FAIL;
736
737 *rt = rest;
738
739 if (grp == SEQGRP_UNKNOWN)
740 return MFW_SS_UNKNOWN;
741
742 memcpy(p, &para, sizeof(T_KSD_SEQPARAM));
743 return(ss_check_group(grp, para));
744 }
745
746
747
748 /*
749 +--------------------------------------------------------------------+
750 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
751 | STATE : code ROUTINE: ss_check_group |
752 +--------------------------------------------------------------------+
753
754
755 PURPOSE : returns the group of SS string
756
757 */
758
759 T_MFW_SS_RETURN ss_check_group(T_KSD_SEQGRP grp, T_KSD_SEQPARAM para)
760 {
761 TRACE_EVENT_P1("ss_check_group: grp=%d", grp);
762
763 switch (grp)
764 {
765 case SEQGRP_DIAL:
766 /*SPR#1352 - SH - Check for TTY On Next Call psuedo-ss strings*/
767 if (!strncmp((char*)para.ussd.ussd, TTY_NEXTCALL_ON, strlen(TTY_NEXTCALL_ON)))
768 return MFW_SS_TTY_NEXTCALL_ON;
769 if (!strncmp((char*)para.ussd.ussd, TTY_NEXTCALL_OFF, strlen(TTY_NEXTCALL_OFF)))
770 return MFW_SS_TTY_NEXTCALL_OFF;
771 /*SH end*/
772 return MFW_SS_DIAL;
773
774 case SEQGRP_DIAL_IDX:
775 return MFW_SS_DIAL_IDX;
776
777 case SEQGRP_DTMF:
778 return MFW_SS_DTMF;
779
780 case SEQGRP_USSD:
781 /*MC, SPR 1111 check for LANGUAGE reset code*/
782
783 if (!strncmp((char*)para.ussd.ussd, LANG_RESET, strlen(LANG_RESET)) && para.ussd.ussd[6]=='#')
784 return MFW_SS_LANG_RESET;
785 /*MC end*/
786 return MFW_SS_USSD;
787
788 case SEQGRP_ACT_SIM_LOCK: /* lock SIM card */
789 case SEQGRP_DEACT_SIM_LOCK: /* unlock SIM card */
790 case SEQGRP_INTRGT_SIM_LOCK:
791 return MFW_SS_SIM_LOCK;
792
793 case SEQGRP_CHANGE_REGISTER:
794 case SEQGRP_SET_REGISTER:
795 case SEQGRP_START_REGISTER:
796 return MFW_SS_REG_PW;
797
798 case SEQGRP_CF:
799 return MFW_SS_CF;
800
801 case SEQGRP_CB: /* barring services */
802 return MFW_SS_CB;
803
804 case SEQGRP_SUP_CLIR:
805 case SEQGRP_INV_CLIR:
806 return MFW_SS_CLIR;
807
808 case SEQGRP_SUP_CLIP:
809 case SEQGRP_INV_CLIP:
810 return MFW_SS_CLIP;
811
812 case SEQGRP_SUP_COLR:
813 case SEQGRP_INV_COLR:
814 return MFW_SS_COLR;
815
816 case SEQGRP_SUP_COLP:
817 case SEQGRP_INV_COLP:
818 return MFW_SS_COLP;
819
820 case SEQGRP_CL:
821 switch (para.cl.ssCd)
822 {
823 case KSD_SS_CLIP:
824 return MFW_SS_CLIP;
825 case KSD_SS_CLIR:
826 return MFW_SS_CLIR;
827 case KSD_SS_COLP:
828 return MFW_SS_COLP;
829 case KSD_SS_COLR:
830 return MFW_SS_COLR;
831 }
832 return MFW_SS_UNKNOWN;
833
834 case SEQGRP_PWD:
835 switch(para.pwd.ssCd)
836 {
837 /* case KSD_SS_CCBS: CCBS has nothing to do with PWD! */
838 case KSD_SS_ALL_CBSS:
839 case KSD_SS_BOC:
840 case KSD_SS_BAOC:
841 case KSD_SS_BOIC:
842 case KSD_SS_BOICXH:
843 case KSD_SS_BIC:
844 case KSD_SS_BAIC:
845 case KSD_SS_BICRM:
846
847 /*NM 190602*/
848 case KSD_SS_ALL_SERV:
849
850 return MFW_SS_REG_PW;
851
852 case KSD_SS_PIN1:
853 case KSD_SS_PIN2:
854 return MFW_SS_SIM_REG_PW;
855 }
856 return MFW_SS_UNKNOWN;
857
858 case SEQGRP_UBLK:
859 return MFW_SS_SIM_UNBLCK_PIN;
860
861 case SEQGRP_CW:
862 return MFW_SS_WAIT;
863
864 case SEQGRP_CCBS:
865 return MFW_SS_CCBS;
866
867 case SEQGRP_PRSNT_IMEI:
868 return MFW_SS_MMI;
869
870 case SEQGRP_CHLD:
871 /*MC 11.04.02 */
872 if (para.chld.mode == CHLD_MOD_Ect)
873 return MFW_SS_ECT;
874 else if (para.chld.mode == CHLD_MOD_Ccbs)
875 return MFW_SS_CCBS;
876 else
877 /*MC*/
878 return MFW_SS_HOLD;
879
880 case SEQGRP_UNKNOWN:
881 return MFW_SS_UNKNOWN;
882
883 default:
884 return MFW_SS_UNKNOWN;
885 }
886 }
887
888 /*
889 +-------------------------------------------------------------------+
890 | PROJECT : MMI-Framework (8417) MODULE : MFW_SS |
891 | STATE : code ROUTINE : ss_execute_transaction |
892 +-------------------------------------------------------------------+
893
894 PURPOSE : Start a SS transaction
895
896 */
897
898 T_MFW_SS_RETURN ss_execute_transaction(UBYTE *ss_string,
899 UBYTE ussd_mand)
900 {
901 T_ACI_RETURN res;
902
903 TRACE_FUNCTION("ss_execute_transaction()");
904
905 res = sAT_Dn(CMD_SRC_LCL, (CHAR *)ss_string, -1, -1, -1);
906 if( (res != AT_EXCT) AND (res != AT_CMPL))
907 {
908 TRACE_EVENT("sAT_D error");
909 return MFW_SS_FAIL;
910 }
911
912 return ss_check_ss_string(ss_string);
913 }
914
915
916 /*
917 +--------------------------------------------------------------------+
918 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
919 | STATE : code ROUTINE: ss_cvtCssuCodes |
920 +--------------------------------------------------------------------+
921
922
923 PURPOSE : This function is used to convert the CSSU mode
924 used by ACI to the CSSU mode used by MFW.
925
926 */
927
928 T_MFW_SS_NOTIFY_CODES ss_cvtCssuCodes(T_ACI_CSSU_CODE code)
929 {
930 switch (code)
931 {
932 case CSSU_CODE_ForwardedCall: return MFW_SS_MT_FORWARDED;
933 case CSSU_CODE_CUGCall: return MFW_SS_MT_CUG_CALL;
934 case CSSU_CODE_Multiparty: return MFW_SS_NOTIFY_MULTIPARTY;
935 case CSSU_CODE_HeldCallRel: return MFW_SS_NOTIFY_holdRELEASED;
936 case CSSU_CODE_FwrdCheckSS: return MFW_SS_NOTIFY_checkSS;
937 case CSSU_CODE_ECTAlert: return MFW_SS_NOTIFY_ectALERT;
938 case CSSU_CODE_ECTConnect: return MFW_SS_NOTIFY_ectCONNECT;
939 case CSSU_CODE_DeflectedCall: return MFW_SS_MT_DEFLECTED;
940 default: return MFW_SS_NOTIFY_UNKNOWN;
941 }
942 }
943
944
945 /*
946 +--------------------------------------------------------------------+
947 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
948 | STATE : code ROUTINE: ss_cvtCssiCodes |
949 +--------------------------------------------------------------------+
950
951
952 PURPOSE : This function is used to convert the CSSI mode
953 used by ACI to the CSSI mode used by MFW.
954
955 */
956
957 T_MFW_SS_NOTIFY_CODES ss_cvtCssiCodes(T_ACI_CSSI_CODE code)
958 {
959 switch (code)
960 {
961 case CSSI_CODE_CFUActive: return MFW_SS_MO_unconFORWARD;
962 case CSSI_CODE_SomeCCFActive: return MFW_SS_MO_conFORWARD;
963 case CSSI_CODE_ForwardedCall: return MFW_SS_MO_FORWARDED;
964 case CSSI_CODE_CallWaiting: return MFW_SS_MO_WAITING;
965 case CSSI_CODE_CUGCall: return MFW_SS_MO_CUG_CALL;
966 case CSSI_CODE_OutCallsBarred: return MFW_SS_MO_moBARRED;
967 case CSSI_CODE_IncCallsBarred: return MFW_SS_MO_mtBARRED;
968 case CSSI_CODE_CLIRSupRej: return MFW_SS_MO_CLIR;
969 case CSSI_CODE_DeflectedCall: return MFW_SS_MO_DEFLECTED;
970 default: return MFW_SS_NOTIFY_UNKNOWN;
971 }
972 }
973
974
975 /*
976 +--------------------------------------------------------------------+
977 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
978 | STATE : code ROUTINE: ss_notify |
979 +--------------------------------------------------------------------+
980
981
982 PURPOSE : Change of SS status from the network.
983
984 */
985
986 void ss_notify(T_MFW_SS_NOTIFY_CODES code,
987 SHORT index,
988 UBYTE *number,
989 UBYTE *subaddr)
990 {
991 // Apr 06 2005 REF: CRR 29989 xpradipg
992 // defined the variable locally since the scope lies within this function
993 #ifdef FF_MMI_OPTIM
994 T_MFW_SS_NOTIFY notify;
995 #endif
996 memset(&notify, 0, sizeof(T_MFW_SS_NOTIFY));
997
998 notify.code = code;
999
1000 if(number)
1001 strcpy((char *)notify.number, (char *)number);
1002 if (subaddr)
1003 strcpy((char *)notify.subaddr, (char *)subaddr);
1004
1005 //PATCH TB 1309: Wrong codes tested
1006 if ((code == MFW_SS_MO_CUG_CALL) OR
1007 (code == MFW_SS_MT_CUG_CALL))
1008 notify.index = (UBYTE)index;
1009 /* END PATCH TB */
1010
1011 {
1012 /***************************Go-lite Optimization changes Start***********************/
1013 //Aug 16, 2004 REF: CRR 24323 Deepa M.D
1014 TRACE_EVENT_P1 ("SS notify code = %d", notify.code);
1015 /***************************Go-lite Optimization changes end***********************/
1016 }
1017
1018 ss_signal(E_SS_NOTIFY, &notify);
1019 }
1020
1021
1022 /*
1023 +--------------------------------------------------------------------+
1024 | PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
1025 | STATE : code ROUTINE : ss_cvtOCode |
1026 +--------------------------------------------------------------------+
1027
1028
1029 PURPOSE : Convert operation codes
1030
1031 */
1032
1033 T_MFW ss_cvtOCode(T_ACI_KSD_OP code)
1034 {
1035 switch (code)
1036 {
1037 case KSD_OP_IRGT: return SS_INTERROGATION;
1038 case KSD_OP_REG: return SS_REGISTRATION;
1039 case KSD_OP_ERS: return SS_ERASURE;
1040 case KSD_OP_ACT: return SS_ACTIVATION;
1041 case KSD_OP_DEACT: return SS_DEACTIVATION;
1042 default: return SS_CODES_UNKNOWN;
1043 }
1044 }
1045
1046
1047 /*
1048 +--------------------------------------------------------------------+
1049 | PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
1050 | STATE : code ROUTINE : ss_cvtSCodes |
1051 +--------------------------------------------------------------------+
1052
1053
1054 PURPOSE : This function is used to convert the SS code
1055 used by ACI to the SS code used by MFW.
1056
1057 */
1058
1059 T_MFW ss_cvtSCode(T_ACI_KSD_SS code)
1060 {
1061 switch (code)
1062 {
1063 case KSD_SS_CLIP: return SS_CLIP;
1064 case KSD_SS_CLIR: return SS_CLIR;
1065 case KSD_SS_COLP: return SS_COLP;
1066 case KSD_SS_COLR: return SS_COLR;
1067 case KSD_SS_CW: return SS_CW;
1068 case KSD_SS_BAIC: return SS_CB_BAIC;
1069 case KSD_SS_BAOC: return SS_CB_BAOC;
1070 case KSD_SS_ALL_CBSS: return SS_CB_ALL;
1071 case KSD_SS_BICRM: return SS_CB_BAICroam;
1072 case KSD_SS_BIC: return SS_CB_ALL_BAIC;
1073 case KSD_SS_BOICXH: return SS_CB_BAOICexH;
1074 case KSD_SS_BOIC: return SS_CB_BAOIC;
1075 case KSD_SS_BOC: return SS_CB_ALL_BAOC;
1076 case KSD_SS_CFB: return SS_CF_CFB;
1077 case KSD_SS_CFNRC: return SS_CF_CFNR;
1078 case KSD_SS_CFNRY: return SS_CF_CFNRy;
1079 case KSD_SS_CFU: return SS_CF_CFU;
1080 case KSD_SS_ALL_CFWSS: return SS_CF_ALL_COND;
1081 case KSD_SS_ALL_FWSS: return SS_CF_ALL;
1082 case KSD_SS_CCBS: return SS_CCBS;
1083 case KSD_SS_PIN1: return SS_PIN1;
1084 case KSD_SS_PIN2: return SS_PIN2;
1085 default: return SS_CODES_UNKNOWN;
1086 }
1087 }
1088
1089
1090 /*
1091 +--------------------------------------------------------------------+
1092 | PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
1093 | STATE : code ROUTINE : ss_cvtCLStatus |
1094 +--------------------------------------------------------------------+
1095
1096
1097 PURPOSE : This function is used to convert the CL status
1098 used by ACI to the CL status used by MFW.
1099
1100 */
1101
1102 T_MFW ss_cvtCLStatus(T_ACI_KSD_CLIR_OP stat)
1103 {
1104 switch (stat)
1105 {
1106 case KSD_CO_PERMANENT: return MFW_CL_PERM;
1107 case KSD_CO_TEMPORARY: return MFW_CL_TEMP_DEF_REST;
1108 case KSD_CO_ALLOWED: return MFW_CL_TEMP_DEF_ALLOWED;
1109 default: return MFW_CL_UNKNOWN;
1110 }
1111 }
1112
1113 /*
1114 +--------------------------------------------------------------------+
1115 | PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
1116 | STATE : code ROUTINE : ss_cvtCLOvrd |
1117 +--------------------------------------------------------------------+
1118
1119
1120 PURPOSE : This function is used to convert the override status of
1121 CLIR used by ACI to the override status of CLIR used by
1122 MFW.
1123
1124 */
1125
1126 T_MFW ss_cvtCLOvrd(T_ACI_KSD_OVRD_CTG ovrd)
1127 {
1128 switch (ovrd)
1129 {
1130 case KSD_OVR_CAT_ENABLED: return MFW_OV_ENABLED;
1131 case KSD_OVR_CAT_DISABLED: return MFW_OV_DISABLED;
1132 default: return MFW_OV_UNKNOWN;
1133 }
1134 }
1135
1136 /*
1137 +--------------------------------------------------------------------+
1138 | PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
1139 | STATE : code ROUTINE : ss_cvtErrCode |
1140 +--------------------------------------------------------------------+
1141
1142
1143 PURPOSE : This function is used to convert the error code used
1144 by ACI to the error code used by MFW.
1145
1146 */
1147
1148 T_MFW ss_cvtErrCode(T_ACI_KSD_ERR err)
1149 {
1150 switch (err)
1151 {
1152 case KSD_NO_ERROR: return MFW_SS_NO_ERROR;
1153 case KSD_ERR_UNKNOWN_SUBSCRIBER: return MFW_SS_ERR_UNKNOWN_SUBSCRIBER;
1154 case KSD_ERR_ILLEGAL_SUBSCRIBER: return MFW_SS_ERR_ILLEGAL_SUBSCRIBER;
1155 case KSD_ERR_BEARER_SVC_NOT_PROV: return MFW_SS_ERR_BEARER_SVC_NOT_PROV;
1156 case KSD_ERR_TELE_SVC_NOT_PROV: return MFW_SS_ERR_TELE_SVC_NOT_PROV;
1157 case KSD_ERR_ILLEGAL_EQUIPMENT: return MFW_SS_ERR_ILLEGAL_EQUIPMENT;
1158 case KSD_ERR_CALL_BARRED: return MFW_SS_ERR_CALL_BARRED;
1159 case KSD_ERR_ILLEGAL_SS_OPERATION: return MFW_SS_ERR_ILLEGAL_SS_OPERATION;
1160 case KSD_ERR_SS_ERR_STATUS: return MFW_SS_ERR_SS_ERR_STATUS;
1161 case KSD_ERR_SS_NOT_AVAIL: return MFW_SS_ERR_SS_NOT_AVAIL;
1162 case KSD_ERR_SS_SUBS_VIOLATION: return MFW_SS_ERR_SS_SUBS_VIOLATION;
1163 case KSD_ERR_SS_INCOMP: return MFW_SS_ERR_SS_INCOMP;
1164 case KSD_ERR_FAC_NOT_SUPPORTED: return MFW_SS_ERR_FAC_NOT_SUPPORTED;
1165 case KSD_ERR_ABSENT_SUBS: return MFW_SS_ERR_ABSENT_SUBS;
1166 case KSD_ERR_SYSTEM_FAIL: return MFW_SS_ERR_SYSTEM_FAIL;
1167 case KSD_ERR_DATA_MISSING: return MFW_SS_ERR_DATA_MISSING;
1168 case KSD_ERR_UNEXPECT_DATA: return MFW_SS_ERR_UNEXPECT_DATA;
1169 case KSD_ERR_PWD_REG_FAIL: return MFW_SS_ERR_PWD_REG_FAIL;
1170 case KSD_ERR_NEG_PWD_CHECK: return MFW_SS_ERR_NEG_PWD_CHECK;
1171 case KSD_ERR_NUM_PWD_VIOLATION: return MFW_SS_ERR_NUM_PWD_VIOLATION;
1172 case KSD_ERR_UNKNOWN_ALPHA: return MFW_SS_ERR_UNKNOWN_ALPHA;
1173 case KSD_ERR_USSD_BUSY: return MFW_SS_ERR_USSD_BUSY;
1174 case KSD_ERR_MAX_NUM_MPTY_EXCEED: return MFW_SS_ERR_MAX_NUM_MPTY_EXCEED;
1175 case KSD_ERR_RESOURCE_NOT_AVAIL: return MFW_SS_ERR_RESOURCE_NOT_AVAIL;
1176 case KSD_GEN_PROB_UNRECOG_CMP: return MFW_SS_GEN_PROB_UNRECOG_CMP;
1177 case KSD_GEN_PROB_MISTYPED_CMP: return MFW_SS_GEN_PROB_MISTYPED_CMP;
1178 case KSD_GEN_PROB_BAD_STRUCT_CMP: return MFW_SS_GEN_PROB_BAD_STRUCT_CMP;
1179 case KSD_INV_PROB_DUPL_INV_ID: return MFW_SS_INV_PROB_DUPL_INV_ID;
1180 case KSD_INV_PROB_UNRECOG_OP: return MFW_SS_INV_PROB_UNRECOG_OP;
1181 case KSD_INV_PROB_MISTYPED_PAR: return MFW_SS_INV_PROB_MISTYPED_PAR;
1182 case KSD_INV_PROB_RESOURCE_LIM: return MFW_SS_INV_PROB_RESOURCE_LIM;
1183 case KSD_INV_PROB_INIT_RELEASE: return MFW_SS_INV_PROB_INIT_RELEASE;
1184 case KSD_INV_PROB_UNRECOG_LNK_ID: return MFW_SS_INV_PROB_UNRECOG_LNK_ID;
1185 case KSD_INV_PROB_LNK_RES_UNEXP: return MFW_SS_INV_PROB_LNK_RES_UNEXP;
1186 case KSD_INV_PROB_UNEXP_LNK_OP: return MFW_SS_INV_PROB_UNEXP_LNK_OP;
1187 case KSD_RES_PROB_UNRECOG_INV_ID: return MFW_SS_RES_PROB_UNRECOG_INV_ID;
1188 case KSD_RES_PROB_RET_RES_UNEXP: return MFW_SS_RES_PROB_RET_RES_UNEXP;
1189 case KSD_RES_PROB_MISTYPED_PAR: return MFW_SS_RES_PROB_MISTYPED_PAR;
1190 case KSD_ERR_PROB_UNRECOG_INV_ID: return MFW_SS_ERR_PROB_UNRECOG_INV_ID;
1191 case KSD_ERR_PROB_RET_ERR_UNEXP: return MFW_SS_ERR_PROB_RET_ERR_UNEXP;
1192 case KSD_ERR_PROB_UNRECOG_ERR: return MFW_SS_ERR_PROB_UNRECOG_ERR;
1193 case KSD_ERR_PROB_UNEXP_ERR: return MFW_SS_ERR_PROB_UNEXP_ERR;
1194 case KSD_ERR_PROB_MISTYPED_PAR: return MFW_SS_ERR_PROB_MISTYPED_PAR;
1195 case KSD_ERR_FATAL_INV_RESULT: return MFW_SS_ERR_FATAL_INV_RESULT;
1196 case KSD_ERR_FATAL_CCD_DEC: return MFW_SS_ERR_FATAL_CCD_DEC;
1197 case KSD_ERR_FATAL_SS_ENT: return MFW_SS_ERR_FATAL_SS_ENT;
1198 default: return MFW_SS_ERR_UNKNOWN;
1199 }
1200 }
1201
1202
1203 /*
1204 +--------------------------------------------------------------------+
1205 | PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
1206 | STATE : code ROUTINE : ss_decode_imei |
1207 +--------------------------------------------------------------------+
1208
1209
1210 PURPOSE : convert imei (packed bcd to ASCII)
1211
1212 */
1213
1214 void ss_decode_imei(T_ACI_KSIR *ksStat)
1215 {
1216 // Apr 06 2005 REF: CRR 29989 xpradipg
1217 #ifdef FF_MMI_OPTIM
1218 memset(imei_info, 0, sizeof(T_MFW_IMEI));
1219
1220 imei_info->imei_number[0] = ( ksStat->ir.rKSIMEI.tac1 & 0xF0 ) >> 4 | 0x30;
1221 imei_info->imei_number[1] = ( ksStat->ir.rKSIMEI.tac1 ) & 0x0F | 0x30;
1222 imei_info->imei_number[2] = ( ksStat->ir.rKSIMEI.tac2 & 0xF0 ) >> 4 | 0x30;
1223 imei_info->imei_number[3] = ( ksStat->ir.rKSIMEI.tac2 ) & 0x0F | 0x30;
1224 imei_info->imei_number[4] = ( ksStat->ir.rKSIMEI.tac3 & 0xF0 ) >> 4 | 0x30;
1225 imei_info->imei_number[5] = ( ksStat->ir.rKSIMEI.tac3 ) & 0x0F | 0x30;
1226 imei_info->imei_number[6] = ( ksStat->ir.rKSIMEI.fac & 0xF0 ) >> 4 | 0x30;
1227 imei_info->imei_number[7] = ( ksStat->ir.rKSIMEI.fac ) & 0x0F | 0x30;
1228 imei_info->imei_number[8] = ( ksStat->ir.rKSIMEI.snr1 & 0xF0 ) >> 4 | 0x30;
1229 imei_info->imei_number[9] = ( ksStat->ir.rKSIMEI.snr1 ) & 0x0F | 0x30;
1230 imei_info->imei_number[10] = ( ksStat->ir.rKSIMEI.snr2 & 0xF0 ) >> 4 | 0x30;
1231 imei_info->imei_number[11] = ( ksStat->ir.rKSIMEI.snr2 ) & 0x0F | 0x30;
1232 imei_info->imei_number[12] = ( ksStat->ir.rKSIMEI.snr3 & 0xF0 ) >> 4 | 0x30;
1233 imei_info->imei_number[13] = ( ksStat->ir.rKSIMEI.snr3 ) & 0x0F | 0x30;
1234 //a0876501 - Check byte comes before the Software version during display.
1235 imei_info->imei_number[14] = ( ksStat->ir.rKSIMEI.cd & 0x0F ) | 0x30;
1236 imei_info->imei_number[15] = ( ksStat->ir.rKSIMEI.svn & 0xF0 ) >> 4 | 0x30;
1237 imei_info->imei_number[16] = ( ksStat->ir.rKSIMEI.svn ) & 0x0F | 0x30;
1238 imei_info->imei_number[17] = '\0';
1239 #else
1240 memset(&imei_info, 0, sizeof(imei_info));
1241 // Jul 05 2005 REF: CRR 22565 a0876501
1242 // Fixed the issue of byte swapping.
1243
1244 imei_info.imei_number[0] = ( ksStat->ir.rKSIMEI.tac1 & 0xF0 ) >> 4 | 0x30;
1245 imei_info.imei_number[1] = ( ksStat->ir.rKSIMEI.tac1 ) & 0x0F | 0x30;
1246 imei_info.imei_number[2] = ( ksStat->ir.rKSIMEI.tac2 & 0xF0 ) >> 4 | 0x30;
1247 imei_info.imei_number[3] = ( ksStat->ir.rKSIMEI.tac2 ) & 0x0F | 0x30;
1248 imei_info.imei_number[4] = ( ksStat->ir.rKSIMEI.tac3 & 0xF0 ) >> 4 | 0x30;
1249 imei_info.imei_number[5] = ( ksStat->ir.rKSIMEI.tac3 ) & 0x0F | 0x30;
1250 imei_info.imei_number[6] = ( ksStat->ir.rKSIMEI.fac & 0xF0 ) >> 4 | 0x30;
1251 imei_info.imei_number[7] = ( ksStat->ir.rKSIMEI.fac ) & 0x0F | 0x30;
1252 imei_info.imei_number[8] = ( ksStat->ir.rKSIMEI.snr1 & 0xF0 ) >> 4 | 0x30;
1253 imei_info.imei_number[9] = ( ksStat->ir.rKSIMEI.snr1 ) & 0x0F | 0x30;
1254 imei_info.imei_number[10] = ( ksStat->ir.rKSIMEI.snr2 & 0xF0 ) >> 4 | 0x30;
1255 imei_info.imei_number[11] = ( ksStat->ir.rKSIMEI.snr2 ) & 0x0F | 0x30;
1256 imei_info.imei_number[12] = ( ksStat->ir.rKSIMEI.snr3 & 0xF0 ) >> 4 | 0x30;
1257 imei_info.imei_number[13] = ( ksStat->ir.rKSIMEI.snr3 ) & 0x0F | 0x30;
1258 //a0876501 - Check byte comes before the Software version during display.
1259 imei_info.imei_number[14] = ( ksStat->ir.rKSIMEI.cd & 0x0F ) | 0x30;
1260 imei_info.imei_number[15] = ( ksStat->ir.rKSIMEI.svn & 0xF0 ) >> 4 | 0x30;
1261 imei_info.imei_number[16] = ( ksStat->ir.rKSIMEI.svn ) & 0x0F | 0x30;
1262 imei_info.imei_number[17] = '\0';
1263
1264 TRACE_EVENT_P8("ss_decode_imei IMEI: TAC %1c%1c%1c%1c%1c%1c%1c%1c",
1265 imei_info.imei_number[0], imei_info.imei_number[1], imei_info.imei_number[2], imei_info.imei_number[3],
1266 imei_info.imei_number[4], imei_info.imei_number[5], imei_info.imei_number[6], imei_info.imei_number[7]);
1267 TRACE_EVENT_P6("ss_decode_imei IMEI: SNR %1c%1c%1c%1c%1c%1c",
1268 imei_info.imei_number[8], imei_info.imei_number[9], imei_info.imei_number[10], imei_info.imei_number[11],
1269 imei_info.imei_number[12], imei_info.imei_number[13]);
1270 TRACE_EVENT_P4("ss_decode_imei IMEI: SV CD %1c%1c%1c%1c",
1271 imei_info.imei_number[14], imei_info.imei_number[15], imei_info.imei_number[16],imei_info.imei_number[17]);
1272
1273 #endif
1274 }
1275
1276 /*
1277 +--------------------------------------------------------------------+
1278 | PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
1279 | STATE : code ROUTINE : getCdByteFromImei |
1280 +--------------------------------------------------------------------+
1281
1282
1283 PURPOSE : Get CD byte from IMEI.
1284 // July 23, 2005 REF : MMI-22565 - a0876501
1285 */
1286
1287 UBYTE getCdByteFromImei(UBYTE *imei)
1288 {
1289 T_ACI_IMEI aci_imei;
1290
1291 // July 23, 2005 REF : MMI-22565 - a0876501
1292 // For calculating the Cd byte, copy the buffer contents.
1293 aci_imei.tac1 = imei[0];
1294 aci_imei.tac2 = imei[1];
1295 aci_imei.tac3 = imei[2];
1296 aci_imei.fac = imei[3];
1297 aci_imei.snr1 = imei[4];
1298 aci_imei.snr2 = imei[5];
1299 aci_imei.snr3 = imei[6];
1300 aci_imei.svn = imei[7];
1301 #ifndef NEPTUNE_BOARD
1302
1303 return(cmhSS_getCdFromImei(&aci_imei));
1304
1305 #endif
1306
1307 }
1308
1309 /*
1310 +--------------------------------------------------------------------+
1311 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
1312 | STATE : code ROUTINE: rAT_PercentKSIR |
1313 +--------------------------------------------------------------------+
1314
1315
1316 PURPOSE : Network response for key sequences
1317
1318 */
1319
1320 void rAT_PercentKSIR ( T_ACI_KSIR *ksStat)
1321 {
1322 UBYTE idx;
1323 T_MFW_TELECOM *p_tele;
1324 T_MFW_FEATURE *p_feat;
1325 T_MFW_SRV_GROUP *p_srv;
1326
1327 TRACE_FUNCTION("rAT_PercentKSIR()");
1328 TRACE_EVENT_P1("ksStat->ksdCmd %d", ksStat->ksdCmd);
1329
1330 switch (ksStat->ksdCmd)
1331 {
1332 case KSD_CMD_CB:
1333 TRACE_EVENT("KSD_CMD_CB");
1334 TRACE_EVENT_P1("ksStat->ir.rKSCB.ssCd %d", ksStat->ir.rKSCB.ssCd);
1335 TRACE_EVENT_P1("ksStat->ir.rKSCB.opCd %d", ksStat->ir.rKSCB.opCd);
1336 TRACE_EVENT_P1("ksStat->ir.rKSCB.ssErr %d", ksStat->ir.rKSCB.ssErr);
1337 TRACE_EVENT_P1("ksStat->ir.rKSCB.c_cbInfoLst %d", ksStat->ir.rKSCB.c_cbInfoLst);
1338 if (ksStat->ir.rKSCB.c_cbInfoLst)
1339 {
1340 int i;
1341 for (i = 0; i < ksStat->ir.rKSCB.c_cbInfoLst; i++)
1342 {
1343 TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].bsTp %d", i, ksStat->ir.rKSCB.cbInfoLst[i].bsTp);
1344 TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].bsCd %d", i, ksStat->ir.rKSCB.cbInfoLst[i].bsCd);
1345 TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].ssSt %d", i, ksStat->ir.rKSCB.cbInfoLst[i].ssSt);
1346 }
1347 }
1348 p_tele = (T_MFW_TELECOM *) ssLstBuf;
1349 // Apr 06 2005 REF: CRR 29989 xpradipg
1350 #ifdef FF_MMI_OPTIM
1351 cb_cnf = (T_MFW_SS_CB_CNF*)mfwAlloc(sizeof(T_MFW_SS_CB_CNF));
1352 if(NULL != cb_cnf)
1353 {
1354 TRACE_EVENT_P2("Mem Aloc for cb_cnf = %x Size = %d",cb_cnf,sizeof(T_MFW_SS_CB_CNF));
1355 cb_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCB.ssCd);
1356 cb_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCB.opCd);
1357 cb_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCB.ssErr);
1358 cb_cnf->ss_telecom_list = p_tele;
1359 }
1360 else
1361 return;
1362 #else
1363 cb_cnf.ss_code = (T_MFW_SS_CODES) ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCB.ssCd);
1364 cb_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCB.opCd);
1365 cb_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCB.ssErr);
1366 cb_cnf.ss_telecom_list = p_tele;
1367 #endif
1368
1369 for( idx = 0;
1370 idx < ksStat->ir.rKSCB.c_cbInfoLst AND
1371 idx < MFW_MAX_TELE_NR;
1372 idx++, p_tele++ )
1373 {
1374 p_tele->ss_telecom_type = ksStat->ir.rKSCB.
1375 cbInfoLst[idx].bsTp;
1376 p_tele->ss_telecom_service = ksStat->ir.rKSCB.
1377 cbInfoLst[idx].bsCd;
1378 p_tele->ss_status = ksStat->ir.rKSCB.
1379 cbInfoLst[idx].ssSt;
1380 }
1381 // Apr 06 2005 REF: CRR 29989 xpradipg
1382 #ifdef FF_MMI_OPTIM
1383 if(NULL != cb_cnf)
1384 cb_cnf->ss_telecom_count = idx;
1385 #else
1386 cb_cnf.ss_telecom_count = idx;
1387 #endif
1388 break;
1389
1390 case KSD_CMD_CF:
1391 TRACE_EVENT("KSD_CMD_CF");
1392 TRACE_EVENT_P1("ksStat->ir.rKSCF.ssCd %d", ksStat->ir.rKSCF.ssCd);
1393 TRACE_EVENT_P1("ksStat->ir.rKSCF.opCd %d", ksStat->ir.rKSCF.opCd);
1394 TRACE_EVENT_P1("ksStat->ir.rKSCF.ssErr %d", ksStat->ir.rKSCF.ssErr);
1395 TRACE_EVENT_P1("ksStat->ir.rKSCF.c_cfFeatLst %d", ksStat->ir.rKSCF.c_cfFeatLst);
1396 if (ksStat->ir.rKSCF.c_cfFeatLst)
1397 {
1398 int i;
1399 for (i = 0; i < ksStat->ir.rKSCF.c_cfFeatLst; i++)
1400 {
1401 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].bsTp %d", i, ksStat->ir.rKSCF.cfFeatLst[i].bsTp);
1402 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].bsCd %d", i, ksStat->ir.rKSCF.cfFeatLst[i].bsCd);
1403 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].ssSt %d", i, ksStat->ir.rKSCF.cfFeatLst[i].ssSt);
1404 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].num %s", i, ksStat->ir.rKSCF.cfFeatLst[i].num);
1405 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].ton 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].ton);
1406 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].npi 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].npi);
1407 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].sub %s", i, ksStat->ir.rKSCF.cfFeatLst[i].sub);
1408 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].tos 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].tos);
1409 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].oe 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].oe);
1410 TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].time 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].time);
1411 }
1412 }
1413 p_feat = (T_MFW_FEATURE *) ssLstBuf;
1414 // Apr 06 2005 REF: CRR 29989 xpradipg
1415 #ifdef FF_MMI_OPTIM
1416 cf_cnf = (T_MFW_SS_CF_CNF*)mfwAlloc(sizeof(T_MFW_SS_CF_CNF));
1417 if(NULL != cf_cnf)
1418 {
1419 TRACE_EVENT_P2("Mem Loc = %x, allocates size = %d",cf_cnf,sizeof(T_MFW_SS_CF_CNF));
1420 cf_cnf->ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCF.ssCd);
1421 cf_cnf->ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCF.opCd);
1422 cf_cnf->ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCF.ssErr);
1423 cf_cnf->ss_feature_list = p_feat;
1424 }
1425 #else
1426 cf_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCF.ssCd);
1427 cf_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCF.opCd);
1428 cf_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCF.ssErr);
1429
1430 cf_cnf.ss_feature_list = p_feat;
1431 #endif
1432 for( idx = 0;
1433 idx < ksStat->ir.rKSCF.c_cfFeatLst AND
1434 idx < MFW_MAX_FEAT_NR;
1435 idx++, p_feat++ )
1436 {
1437 p_feat->ss_telecom_type = ksStat->ir.rKSCF.
1438 cfFeatLst[idx].bsTp;
1439 p_feat->ss_telecom_service = ksStat->ir.rKSCF.
1440 cfFeatLst[idx].bsCd;
1441 p_feat->ss_status = ksStat->ir.rKSCF.cfFeatLst[idx].ssSt;
1442 p_feat->ss_numbering_type = phb_cvtTon(ksStat->ir.rKSCF.
1443 cfFeatLst[idx].ton);
1444 p_feat->ss_numbering_plan = (UBYTE)phb_cvtNpi(ksStat->ir.rKSCF.
1445 cfFeatLst[idx].npi);
1446 strncpy((char *)p_feat->ss_forwarded_to_number,
1447 (char *)ksStat->ir.rKSCF.cfFeatLst[idx].num,
1448 MFW_SS_NUM_LEN);
1449 strncpy((char *)p_feat->ss_forwarded_to_subaddress,
1450 (char *)ksStat->ir.rKSCF.cfFeatLst[idx].sub,
1451 MFW_SS_SUBADR_LEN);
1452 p_feat->ss_no_reply_condition_time = ksStat->ir.rKSCF.
1453 cfFeatLst[idx].time;
1454 }
1455 // Apr 06 2005 REF: CRR 29989 xpradipg
1456 #ifdef FF_MMI_OPTIM
1457 if(NULL != cf_cnf)
1458 cf_cnf->ss_feature_count = idx;
1459 #else
1460 cf_cnf.ss_feature_count = idx;
1461 #endif
1462 TRACE_EVENT("rat_percentksir->KSD_CMD_CF");
1463 if (ksStat->srcId != CMD_SRC_LCL)
1464 // Apr 06 2005 REF: CRR 29989 xpradipg
1465 #ifdef FF_MMI_OPTIM
1466 {
1467
1468 ss_signal(E_SS_CF_ICN_UPD,cf_cnf);
1469 }
1470 #else
1471 ss_signal(E_SS_CF_ICN_UPD, &cf_cnf);
1472 #endif
1473
1474 break;
1475
1476 case KSD_CMD_CL:
1477 TRACE_EVENT("KSD_CMD_CL");
1478 TRACE_EVENT_P1("ksStat->ir.rKSCL.ssCd %d", ksStat->ir.rKSCL.ssCd);
1479 TRACE_EVENT_P1("ksStat->ir.rKSCL.opCd %d", ksStat->ir.rKSCL.opCd);
1480 TRACE_EVENT_P1("ksStat->ir.rKSCL.ssErr %d", ksStat->ir.rKSCL.ssErr);
1481 TRACE_EVENT_P1("ksStat->ir.rKSCL.ssSt %d", ksStat->ir.rKSCL.ssSt);
1482 TRACE_EVENT_P1("ksStat->ir.rKSCL.mode %d", ksStat->ir.rKSCL.mode);
1483 TRACE_EVENT_P1("ksStat->ir.rKSCL.clirOpt %d", ksStat->ir.rKSCL.clirOpt);
1484 TRACE_EVENT_P1("ksStat->ir.rKSCL.ovrdCtg %d", ksStat->ir.rKSCL.ovrdCtg);
1485 // Apr 06 2005 REF: CRR 29989 xpradipg
1486 #ifdef FF_MMI_OPTIM
1487 cli_cnf = (T_MFW_SS_CLI_CNF*)mfwAlloc(sizeof(T_MFW_SS_CLI_CNF));
1488 if(NULL != cli_cnf)
1489 {
1490 cli_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCL.ssCd);
1491 cli_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCL.opCd);
1492 cli_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCL.ssErr);
1493 cli_cnf->ss_status = ksStat->ir.rKSCL.ssSt;
1494 cli_cnf->ss_clir_option = ss_cvtCLStatus(ksStat->ir.rKSCL.clirOpt);
1495 cli_cnf->ss_ovrd_ctgry = ss_cvtCLOvrd(ksStat->ir.rKSCL.ovrdCtg);
1496 }
1497 #else
1498 cli_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCL.ssCd);
1499 cli_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCL.opCd);
1500 cli_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCL.ssErr);
1501
1502 cli_cnf.ss_status = ksStat->ir.rKSCL.ssSt;
1503 cli_cnf.ss_clir_option = (T_MFW_SS_ERROR)ss_cvtCLStatus((T_ACI_KSD_CLIR_OP)ksStat->ir.rKSCL.clirOpt);
1504 cli_cnf.ss_ovrd_ctgry = (T_MFW_OV_CTGRY)ss_cvtCLOvrd((T_ACI_KSD_OVRD_CTG)ksStat->ir.rKSCL.ovrdCtg);
1505 #endif
1506 break;
1507
1508 case KSD_CMD_CW:
1509 TRACE_EVENT("KSD_CMD_CW");
1510 TRACE_EVENT_P1("ksStat->ir.rKSCW.ssCd %d", ksStat->ir.rKSCW.ssCd);
1511 TRACE_EVENT_P1("ksStat->ir.rKSCW.opCd %d", ksStat->ir.rKSCW.opCd);
1512 TRACE_EVENT_P1("ksStat->ir.rKSCW.ssErr %d", ksStat->ir.rKSCW.ssErr);
1513 TRACE_EVENT_P1("ksStat->ir.rKSCW.ssSt %d", ksStat->ir.rKSCW.ssSt);
1514 TRACE_EVENT_P1("ksStat->ir.rKSCW.c_cwBSGLst %d", ksStat->ir.rKSCW.c_cwBSGLst);
1515 if (ksStat->ir.rKSCW.c_cwBSGLst)
1516 {
1517 int i;
1518 for (i = 0; i < ksStat->ir.rKSCW.c_cwBSGLst; i++)
1519 {
1520 TRACE_EVENT_P2("ksStat->ir.rKSCW.cwBSGLst[%d].bsTp %d", i, ksStat->ir.rKSCW.cwBSGLst[i].bsTp);
1521 TRACE_EVENT_P2("ksStat->ir.rKSCW.cwBSGLst[%d].bsCd %d", i, ksStat->ir.rKSCW.cwBSGLst[i].bsCd);
1522 }
1523 }
1524 p_srv = (T_MFW_SRV_GROUP *) ssLstBuf;
1525 // Apr 06 2005 REF: CRR 29989 xpradipg
1526 #ifdef FF_MMI_OPTIM
1527 cw_cnf = (T_MFW_SS_CW_CNF*)mfwAlloc(sizeof(T_MFW_SS_CW_CNF));
1528 if(cw_cnf != NULL)
1529 {
1530 cw_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCW.ssCd);
1531 cw_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCW.opCd);
1532 cw_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCW.ssErr);
1533 cw_cnf->ss_status = ksStat->ir.rKSCW.ssSt;
1534 cw_cnf->ss_service_list = p_srv;
1535 }
1536
1537 #else
1538 cw_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCW.ssCd);
1539 cw_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCW.opCd);
1540 cw_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCW.ssErr);
1541 cw_cnf.ss_status = ksStat->ir.rKSCW.ssSt;
1542
1543 cw_cnf.ss_service_list = p_srv;
1544 #endif
1545 for( idx = 0;
1546 idx < ksStat->ir.rKSCW.c_cwBSGLst AND
1547 idx < MFW_MAX_SRV_NR;
1548 idx++, p_srv++ )
1549 {
1550 p_srv->ss_telecom_type = ksStat->ir.rKSCW.
1551 cwBSGLst[idx].bsTp;
1552 p_srv->ss_telecom_service = ksStat->ir.rKSCW.
1553 cwBSGLst[idx].bsCd;
1554 }
1555 // Apr 06 2005 REF: CRR 29989 xpradipg
1556 #ifdef FF_MMI_OPTIM
1557 if(NULL != cw_cnf)
1558 cw_cnf->ss_service_count = idx;
1559 #else
1560 cw_cnf.ss_service_count = idx;
1561 #endif
1562 break;
1563
1564 case KSD_CMD_PWD:
1565 TRACE_EVENT("KSD_CMD_PWD");
1566 TRACE_EVENT_P1("ksStat->ir.rKSPW.ssCd %d", ksStat->ir.rKSPW.ssCd);
1567 TRACE_EVENT_P1("ksStat->ir.rKSPW.opCd %d", ksStat->ir.rKSPW.opCd);
1568 TRACE_EVENT_P1("ksStat->ir.rKSPW.ssErr %d", ksStat->ir.rKSPW.ssErr);
1569 TRACE_EVENT_P1("ksStat->ir.rKSPW.newPwd %s", ksStat->ir.rKSPW.newPwd);
1570 // Apr 06 2005 REF: CRR 29989 xpradipg
1571 #ifdef FF_MMI_OPTIM
1572 pw_cnf = (T_MFW_SS_PW_CNF*)mfwAlloc(sizeof(T_MFW_SS_PW_CNF));
1573 if( NULL != pw_cnf)
1574 {
1575 pw_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSPW.ssCd);
1576 pw_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSPW.opCd);
1577 pw_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSPW.ssErr);
1578
1579 strncpy( (char *)pw_cnf->ss_new_pwd, (char *)ksStat->ir.rKSPW.newPwd,
1580 MFW_SS_PWD_LEN);
1581 }
1582 #else
1583 pw_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSPW.ssCd);
1584 pw_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSPW.opCd);
1585 pw_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSPW.ssErr);
1586
1587 strncpy( (char *)pw_cnf.ss_new_pwd, (char *)ksStat->ir.rKSPW.newPwd,
1588 MFW_SS_PWD_LEN);
1589 #endif
1590 break;
1591
1592 case KSD_CMD_IMEI:
1593 TRACE_EVENT("KSD_CMD_IMEI");
1594 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac1 %d", ksStat->ir.rKSIMEI.tac1);
1595 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac2 %d", ksStat->ir.rKSIMEI.tac2);
1596 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac3 %d", ksStat->ir.rKSIMEI.tac3);
1597 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.fac %d", ksStat->ir.rKSIMEI.fac);
1598 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr1 %d", ksStat->ir.rKSIMEI.snr1);
1599 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr2 %d", ksStat->ir.rKSIMEI.snr2);
1600 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr3 %d", ksStat->ir.rKSIMEI.snr3);
1601 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.svn %d", ksStat->ir.rKSIMEI.svn);
1602 TRACE_EVENT_P1("ksStat->ir.rKSIMEI.cd %d", ksStat->ir.rKSIMEI.cd);
1603 // Apr 06 2005 REF: CRR 29989 xpradipg
1604 #ifdef FF_MMI_OPTIM
1605 imei_info = (T_MFW_IMEI*)mfwAlloc(sizeof(T_MFW_IMEI));
1606 if( NULL != imei_info)
1607 {
1608 #endif
1609 ss_decode_imei(ksStat);
1610 // Apr 06 2005 REF: CRR 29989 xpradipg
1611 #ifdef FF_MMI_OPTIM
1612 imei_info->error = MFW_SS_NO_ERROR;
1613 ss_signal(E_SS_IMEI, imei_info);
1614 }
1615 #else
1616 imei_info.error = MFW_SS_NO_ERROR;
1617 ss_signal(E_SS_IMEI, &imei_info);
1618 #endif
1619 break;
1620
1621 case KSD_CMD_USSD:
1622 TRACE_EVENT("KSD_CMD_USSD");
1623 TRACE_EVENT_P1("ksStat->ir.rKSUS.ussd %s", ksStat->ir.rKSUS.ussd);
1624 TRACE_EVENT_P1("ksStat->ir.rKSUS.dcs 0x%02X", ksStat->ir.rKSUS.dcs);
1625 TRACE_EVENT_P1("ksStat->ir.rKSUS.mode %d", ksStat->ir.rKSUS.mode);
1626 TRACE_EVENT_P1("ksStat->ir.rKSUS.ssErr %d", ksStat->ir.rKSUS.ssErr);
1627 memset(&ussd_info, 0, sizeof(ussd_info));
1628 ussd_info.len = strlen((char *)ksStat->ir.rKSUS.ussd);
1629 strcpy((char*)ussd_info.ussd, (char *)ksStat->ir.rKSUS.ussd);
1630 ussd_info.dcs = MFW_ASCII;
1631 ussd_info.error = ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSUS.ssErr);
1632 break;
1633
1634 default:
1635 TRACE_EVENT("default");
1636 break;
1637 }
1638 }
1639
1640 /*
1641 +--------------------------------------------------------------------+
1642 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
1643 | STATE : code ROUTINE: ss_command_info |
1644 +--------------------------------------------------------------------+
1645
1646
1647 PURPOSE : Notify for send a SS string from ACI
1648
1649 */
1650
1651 void ss_command_info(T_ACI_CLOG* cmd)
1652 {
1653 // Apr 06 2005 REF: CRR 29989 xpradipg
1654 // the variable is made local since the scope lies within this function
1655 #ifdef FF_MMI_OPTIM
1656 T_MFW_SS_RES ss_res;
1657 #endif
1658 TRACE_FUNCTION("ss_command_info()");
1659
1660 if (cmd->cmdPrm.sCFUN.srcId != CMD_SRC_LCL)
1661 return;
1662
1663 switch (cmd->atCmd)
1664 {
1665 case KSD_CMD_CB:
1666 ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCB.ssCd);
1667 ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCB.opCd);
1668 if( cmd->cmdPrm.sKSCB.pwd )
1669 strncpy(ss_res.ppn, (char *)cmd->cmdPrm.sKSCB.pwd,
1670 MAX_PWD_LEN);
1671 else
1672 ss_res.ppn[0] = 0;
1673 ss_res.pwd[0] = 0;
1674 ss_res.bs = cmd->cmdPrm.sKSCB.bsCd;
1675 ss_res.time = 0;
1676 ss_signal(E_SS_RES, &ss_res);
1677 break;
1678
1679 case KSD_CMD_CF:
1680 ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCF.ssCd);
1681 ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCF.opCd);
1682 ss_res.ppn[0] = 0;
1683 ss_res.pwd[0] = 0;
1684 ss_res.bs = cmd->cmdPrm.sKSCF.bsCd;
1685 ss_res.time = cmd->cmdPrm.sKSCF.time;
1686 ss_signal(E_SS_RES, &ss_res);
1687 break;
1688
1689 case KSD_CMD_CW:
1690 ss_res.type = SS_CW;
1691 ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCW.opCd);
1692 ss_res.ppn[0] = 0;
1693 ss_res.pwd[0] = 0;
1694 ss_res.bs = cmd->cmdPrm.sKSCW.bsCd;
1695 ss_res.time = 0;
1696 ss_signal(E_SS_RES, &ss_res);
1697 break;
1698
1699 case KSD_CMD_PWD:
1700 switch(cmd->cmdPrm.sKSPW.ssCd)
1701 {
1702 case KSD_SS_CCBS:
1703 case KSD_SS_ALL_CBSS:
1704 case KSD_SS_BOC:
1705 case KSD_SS_BAOC:
1706 case KSD_SS_BOIC:
1707 case KSD_SS_BOICXH:
1708 case KSD_SS_BIC:
1709 case KSD_SS_BAIC:
1710 case KSD_SS_BICRM:
1711
1712
1713 /*NM 190602*/
1714 case KSD_SS_ALL_SERV :
1715
1716
1717 ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSPW.ssCd);
1718 ss_res.category = SS_REGISTRATION;
1719 if( cmd->cmdPrm.sKSPW.oldPwd )
1720 strncpy(ss_res.ppn, (char *)cmd->cmdPrm.sKSPW.oldPwd,
1721 MAX_PWD_LEN);
1722 else
1723 ss_res.ppn[0] = 0;
1724 if( cmd->cmdPrm.sKSPW.newPwd )
1725 strncpy(ss_res.pwd, (char *)cmd->cmdPrm.sKSPW.newPwd,
1726 MAX_PWD_LEN);
1727 else
1728 ss_res.pwd[0] = 0;
1729 ss_res.bs = 0;
1730 ss_res.time = 0;
1731 ss_signal(E_SS_RES, &ss_res);
1732 break;
1733
1734 case KSD_SS_PIN1:
1735 pwd_flag = 1;
1736 sim_pin_ident(MFW_SIM_PIN1);
1737 break;
1738 case KSD_SS_PIN2:
1739 pwd_flag = 1;
1740 sim_pin_ident(MFW_SIM_PIN2);
1741 break;
1742 }
1743 break;
1744
1745 case KSD_CMD_UBLK:
1746 switch(cmd->cmdPrm.sKSPW.ssCd)
1747 {
1748 case KSD_SS_PIN1:
1749 pwd_flag = 1;
1750 sim_pin_ident(MFW_SIM_PUK1);
1751 break;
1752 case KSD_SS_PIN2:
1753 pwd_flag = 1;
1754 sim_pin_ident(MFW_SIM_PUK2);
1755 break;
1756 }
1757 break;
1758
1759 case KSD_CMD_CL:
1760 ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCL.ssCd);
1761 ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCL.opCd);
1762 ss_res.ppn[0] = 0;
1763 ss_res.pwd[0] = 0;
1764 ss_res.bs = 0;
1765 ss_res.time = 0;
1766 ss_signal(E_SS_RES, &ss_res);
1767 break;
1768
1769 case KSD_CMD_USSD:
1770 memset(&ussd_info, 0, sizeof(ussd_info));
1771 if( cmd->cmdPrm.sKSUS.ussd )
1772 {
1773 ussd_info.len = strlen((char *)cmd->cmdPrm.sKSUS.ussd);
1774 strcpy((char*)ussd_info.ussd, (char *)cmd->cmdPrm.sKSUS.ussd);
1775 }
1776 else
1777 ussd_info.ussd[0] = 0;
1778 ussd_info.dcs = MFW_ASCII;
1779 //PATCH TB 1509
1780 ss_res.type = SS_USSD;
1781 ss_res.category = SS_CTG_UNKNOWN;
1782 ss_res.ppn[0] = 0;
1783 ss_res.pwd[0] = 0;
1784 ss_res.bs = 0;
1785 ss_res.time = 0;
1786 ss_signal(E_SS_RES, &ss_res);
1787 //END PATCH TB
1788 break;
1789
1790 case AT_CMD_CUSD:
1791 memset(&ussd_info, 0, sizeof(ussd_info));
1792 ussd_info.len = cmd->cmdPrm.sCUSD.str->len;
1793 memcpy((char*)ussd_info.ussd, cmd->cmdPrm.sCUSD.str->data, cmd->cmdPrm.sCUSD.str->len);
1794 ussd_info.dcs = (T_MFW_DCS)cmd->cmdPrm.sCUSD.dcs;
1795 /* SPR#CQ3204 -JVJ - USSD call back sent to MMI */
1796 ss_res.type = SS_USSD;
1797 ss_res.category = SS_CTG_UNKNOWN;
1798 ss_res.ppn[0] = 0;
1799 ss_res.pwd[0] = 0;
1800 ss_res.bs = 0;
1801 ss_res.time = 0;
1802 ss_signal(E_SS_RES, &ss_res);
1803 /* SPR#CQ3204 -JVJ */
1804 break;
1805 default:
1806 break;
1807 }
1808 }
1809
1810 /*
1811 +--------------------------------------------------------------------+
1812 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
1813 | STATE : code ROUTINE: ss_ok_string |
1814 +--------------------------------------------------------------------+
1815
1816
1817 PURPOSE : Send of SS string is successful.
1818
1819 */
1820
1821 void ss_ok_string(T_ACI_AT_CMD cmdId)
1822 {
1823 TRACE_FUNCTION("ss_ok_string()");
1824
1825 switch (cmdId)
1826 {
1827 case KSD_CMD_CB:
1828 // Apr 06 2005 REF: CRR 29989 xpradipg
1829 // free the allocated memory once the ss_signal() execution is done
1830 #ifdef FF_MMI_OPTIM
1831 TRACE_EVENT("KSD_CMD_CB");
1832 if(cb_cnf)
1833 {
1834 ss_signal(E_SS_CB_CNF, cb_cnf);
1835 mfwFree((U8*)cb_cnf, sizeof(T_MFW_SS_CB_CNF));
1836 }
1837 #else
1838 ss_signal(E_SS_CB_CNF, &cb_cnf);
1839 #endif
1840 break;
1841 case KSD_CMD_CF:
1842 // Apr 06 2005 REF: CRR 29989 xpradipg
1843 #ifdef FF_MMI_OPTIM
1844 TRACE_EVENT("KSD_CMD_CF");
1845 if(cf_cnf)
1846 {
1847 ss_signal(E_SS_CF_CNF, cf_cnf);
1848 mfwFree((U8*)cf_cnf, sizeof(T_MFW_SS_CF_CNF));
1849 }
1850 #else
1851 ss_signal(E_SS_CF_CNF, &cf_cnf);
1852 #endif
1853
1854 break;
1855 case KSD_CMD_CW:
1856 // Apr 06 2005 REF: CRR 29989 xpradipg
1857 #ifdef FF_MMI_OPTIM
1858 TRACE_EVENT("KSD_CMD_CW");
1859 if(cw_cnf)
1860 {
1861 ss_signal(E_SS_CW_CNF, cw_cnf);
1862 mfwFree((U8*)cw_cnf, sizeof(T_MFW_SS_CW_CNF));
1863 }
1864 #else
1865 ss_signal(E_SS_CW_CNF, &cw_cnf);
1866 #endif
1867 break;
1868 case KSD_CMD_PWD:
1869 // Apr 06 2005 REF: CRR 29989 xpradipg
1870 #ifdef FF_MMI_OPTIM
1871 TRACE_EVENT("KSD_CMD_PW");
1872 if(pw_cnf)
1873 {
1874 if (!pwd_flag)
1875 ss_signal(E_SS_GET_PW, pw_cnf);
1876 mfwFree((U8*)pw_cnf,sizeof(T_MFW_SS_PW_CNF));
1877 }
1878 #else
1879 if (!pwd_flag)
1880 ss_signal(E_SS_GET_PW, &pw_cnf);
1881 #endif
1882
1883 if (pwd_flag == 1)
1884 {
1885 pwd_flag = 0;
1886 sim_ok_cpinc();
1887 }
1888 break;
1889 case KSD_CMD_UBLK:
1890 sim_ss_unblock(SIM_UBLK_OK, CME_ERR_NotPresent);
1891 break;
1892 case KSD_CMD_CL:
1893 // Apr 06 2005 REF: CRR 29989 xpradipg
1894 #ifdef FF_MMI_OPTIM
1895 TRACE_EVENT("KSD_CMD_CLI");
1896 if(cli_cnf)
1897 {
1898 ss_signal(E_SS_CLI_CNF,(void*) cli_cnf);
1899 mfwFree((U8*)cli_cnf, sizeof(T_MFW_SS_CLI_CNF));
1900 }
1901 #else
1902 ss_signal(E_SS_CLI_CNF,&cli_cnf);
1903 #endif
1904 break;
1905 case KSD_CMD_IMEI:
1906 // Apr 06 2005 REF: CRR 29989 xpradipg
1907 #ifdef FF_MMI_OPTIM
1908 if( imei_info)
1909 {
1910 imei_info->error = MFW_SS_NO_ERROR;
1911 ss_signal(E_SS_IMEI, imei_info);
1912 mfwFree((U8*)imei_info,sizeof(T_MFW_IMEI));
1913 }
1914 #else
1915 imei_info.error = MFW_SS_NO_ERROR;
1916 ss_signal(E_SS_IMEI, &imei_info);
1917 #endif
1918 break;
1919 default:
1920 break;
1921 }
1922 }
1923
1924
1925 /*
1926 +--------------------------------------------------------------------+
1927 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
1928 | STATE : code ROUTINE: ss_error_string |
1929 +--------------------------------------------------------------------+
1930
1931
1932 PURPOSE : Send of SS string is failed.
1933
1934 */
1935
1936 void ss_error_string(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR reason)
1937 {
1938 TRACE_FUNCTION("ss_error_string()");
1939
1940 switch (cmdId)
1941 {
1942 case KSD_CMD_CB:
1943 // Apr 06 2005 REF: CRR 29989 xpradipg
1944 // deallocation occurs either in ok/ error since the response is always is
1945 // either one of them
1946 #ifdef FF_MMI_OPTIM
1947 TRACE_EVENT("KSD_CMD_CB");
1948 if(cb_cnf)
1949 {
1950 ss_signal(E_SS_CB_CNF, cb_cnf);
1951 mfwFree((U8*)cb_cnf,sizeof(T_MFW_SS_CB_CNF));
1952 }
1953 #else
1954 ss_signal(E_SS_CB_CNF, &cb_cnf);
1955 #endif
1956 break;
1957 case KSD_CMD_CF:
1958 // Apr 06 2005 REF: CRR 29989 xpradipg
1959 #ifdef FF_MMI_OPTIM
1960 TRACE_EVENT("KSD_CMD_CF");
1961 if(cf_cnf)
1962 {
1963 ss_signal(E_SS_CF_CNF, cf_cnf);
1964 mfwFree((U8*)cf_cnf,sizeof(T_MFW_SS_CF_CNF));
1965 TRACE_FUNCTION("memory freed for cf_cnf");
1966 }
1967 #else
1968 ss_signal(E_SS_CF_CNF, &cf_cnf);
1969 #endif
1970 break;
1971 case KSD_CMD_CW:
1972 // Apr 06 2005 REF: CRR 29989 xpradipg
1973 #ifdef FF_MMI_OPTIM
1974 TRACE_EVENT("KSD_CMD_CW");
1975 if(cw_cnf)
1976 {
1977 ss_signal(E_SS_CW_CNF, cw_cnf);
1978 mfwFree((U8*)E_SS_CW_CNF,sizeof(T_MFW_SS_CW_CNF));
1979 }
1980 #else
1981 ss_signal(E_SS_CW_CNF, &cw_cnf);
1982 #endif
1983 break;
1984 case KSD_CMD_PWD:
1985 // Apr 06 2005 REF: CRR 29989 xpradipg
1986 #ifdef FF_MMI_OPTIM
1987 TRACE_EVENT("KSD_CMD_PW");
1988 if(pw_cnf)
1989 {
1990 if (!pwd_flag)
1991 ss_signal(E_SS_GET_PW, pw_cnf);
1992 mfwFree((U8*)pw_cnf,sizeof(T_MFW_SS_PW_CNF));
1993 }
1994 #else
1995 if (!pwd_flag)
1996 ss_signal(E_SS_GET_PW, &pw_cnf);
1997 #endif
1998 if (pwd_flag == 1)
1999 {
2000 pwd_flag = 0;
2001 sim_error_cpinc();
2002 }
2003 break;
2004 case KSD_CMD_UBLK:
2005 sim_ss_unblock(SIM_UBLK_ERROR, reason);
2006 break;
2007 case KSD_CMD_CL:
2008 // Apr 06 2005 REF: CRR 29989 xpradipg
2009 #ifdef FF_MMI_OPTIM
2010 TRACE_EVENT("KSD_CMD_CLI");
2011 if(cli_cnf)
2012 {
2013 ss_signal(E_SS_CLI_CNF, cli_cnf);
2014 mfwFree((U8*)cli_cnf,sizeof(T_MFW_SS_CLI_CNF));
2015 }
2016 #else
2017 ss_signal(E_SS_CLI_CNF,&cli_cnf);
2018 #endif
2019 case KSD_CMD_IMEI:
2020 // Apr 06 2005 REF: CRR 29989 xpradipg
2021 #ifdef FF_MMI_OPTIM
2022 if( imei_info)
2023 {
2024 imei_info->error = MFW_SS_ERROR;
2025 ss_signal(E_SS_IMEI, imei_info);
2026 mfwFree((U8*)imei_info,sizeof(T_MFW_IMEI));
2027 }
2028 #else
2029 imei_info.error = MFW_SS_ERROR;
2030 ss_signal(E_SS_IMEI, &imei_info);
2031 #endif
2032 break;
2033 default:
2034 break;
2035 }
2036 }
2037
2038
2039 /*
2040 +--------------------------------------------------------------------+
2041 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
2042 | STATE : code ROUTINE: ss_set_clck |
2043 +--------------------------------------------------------------------+
2044
2045
2046 PURPOSE : This function execute the facility lock command.
2047
2048 */
2049
2050 T_MFW ss_set_clck(T_ACI_CLCK_FAC fac,
2051 T_ACI_CLCK_MOD mode,
2052 CHAR *passwd,
2053 T_ACI_CLASS class_type,
2054 UBYTE modul)
2055 {
2056 TRACE_EVENT("ss_set_clck()");
2057
2058 clck_flag = modul;
2059
2060 if (sAT_PlusCLCK(CMD_SRC_LCL, fac,mode, passwd, class_type) != AT_EXCT)
2061 return MFW_SS_FAIL;
2062 return MFW_SS_OK;
2063 }
2064
2065
2066 /*
2067 +--------------------------------------------------------------------+
2068 | PROJECT : MMI-Framework (8417) MODULE : MFW_SS |
2069 | STATE : code ROUTINE : ss_ok_clck |
2070 +--------------------------------------------------------------------+
2071
2072 PURPOSE : The executing of the facility lock command is successful.
2073
2074 */
2075
2076 void ss_ok_clck()
2077 {
2078 TRACE_FUNCTION("ss_ok_clck()");
2079
2080 switch (clck_flag)
2081 {
2082 case MFW_PHB:
2083 phb_ok_clck();
2084 break;
2085 case MFW_SIM_CPIND:
2086 sim_ok_cpind();
2087 break;
2088 case MFW_SIM_CPINE:
2089 sim_ok_cpine();
2090 break;
2091 }
2092 clck_flag = MFW_MODUL_UNKNOWN;
2093 }
2094
2095
2096 /*
2097 +--------------------------------------------------------------------+
2098 | PROJECT : MMI-Framework (8417) MODULE : MFW_SS |
2099 | STATE : code ROUTINE : ss_error_clck |
2100 +--------------------------------------------------------------------+
2101
2102 PURPOSE : The executing of the facility lock command is failed.
2103
2104 */
2105
2106 void ss_error_clck()
2107 {
2108 TRACE_FUNCTION("ss_error_clck()");
2109
2110 switch (clck_flag)
2111 {
2112 case MFW_PHB:
2113 phb_error_clck();
2114 break;
2115 case MFW_SIM_CPIND:
2116 sim_error_cpind();
2117 break;
2118 case MFW_SIM_CPINE:
2119 sim_error_cpine();
2120 break;
2121 }
2122 clck_flag = MFW_MODUL_UNKNOWN;
2123 }
2124
2125
2126 /*
2127 +--------------------------------------------------------------------+
2128 | PROJECT: MMI-Framework (8417) MODULE: MFW_DMY |
2129 | STATE : code ROUTINE: ss_send_ussd |
2130 +--------------------------------------------------------------------+
2131
2132
2133 PURPOSE : Send USSD string.
2134 Note: ASCII is not allowed to use.
2135
2136 */
2137
2138 T_MFW ss_send_ussd(T_MFW_SS_USSD *ussd_info)
2139 {
2140 T_ACI_USSD_DATA str;
2141 T_ACI_RETURN res;
2142
2143 TRACE_FUNCTION("ss_send_ussd()");
2144
2145 if (!ussd_info->len OR !ussd_info->ussd)
2146 return MFW_SS_FAIL;
2147
2148 if (ussd_info->dcs == MFW_ASCII)
2149 return MFW_SS_FAIL;
2150
2151 if (ussd_info->len > MAX_USSD_LEN)
2152 {
2153 str.len = MAX_USSD_LEN;
2154 memcpy(str.data, ussd_info->ussd, MAX_USSD_LEN);
2155 }
2156 else
2157 {
2158 str.len = ussd_info->len;
2159 memcpy(str.data, ussd_info->ussd, ussd_info->len);
2160 }
2161
2162 res = sAT_PlusCUSD(CMD_SRC_LCL, &str, (SHORT)ussd_info->dcs);
2163 if ((res != AT_EXCT) AND (res != AT_CMPL))
2164 return MFW_SS_FAIL;
2165
2166 return MFW_SS_OK;
2167 }
2168
2169
2170 /*
2171 +--------------------------------------------------------------------+
2172 | PROJECT: MMI-Framework (8417) MODULE: MFW_DMY |
2173 | STATE : code ROUTINE: rAT_PlusCUSD |
2174 +--------------------------------------------------------------------+
2175
2176
2177 PURPOSE : Notify or response for USSD from ACI
2178
2179 */
2180
2181 void rAT_PlusCUSD(T_ACI_CUSD_MOD m, T_ACI_USSD_DATA *ussd, SHORT dcs)
2182 {
2183 TRACE_FUNCTION("rAT_PlusCUSD()");
2184 //Dec 16, 2005 OMAPS00053316 x0018858
2185 //Added the NullCheck to ensure that we dont access the elements when the pointer is NULL.
2186 //Begin OMAPS00053316
2187 if(ussd != NULL)
2188 {
2189 ussd_info.len = ussd->len;
2190 memcpy(ussd_info.ussd, ussd->data, sizeof(ussd_info.ussd));
2191
2192 }
2193 else
2194 {
2195 ussd_info.len = 0;
2196 memset(ussd_info.ussd, 0x00, sizeof(ussd_info.ussd));
2197 }
2198 //End OMAPS00053316
2199 ussd_info.dcs = (T_MFW_DCS)dcs;
2200 ussd_info.error = MFW_SS_NO_ERROR;
2201
2202 if (m == CUSD_MOD_YesActReq)
2203 ss_signal(E_SS_USSD_REQ, &ussd_info);
2204 if (m == CUSD_MOD_NoActReq)
2205 ss_signal(E_SS_USSD_CNF, &ussd_info);
2206 }
2207
2208
2209 /*
2210 +--------------------------------------------------------------------+
2211 | PROJECT: MMI-Framework (8417) MODULE: MFW_DMY |
2212 | STATE : code ROUTINE: ss_ok_ussd |
2213 +--------------------------------------------------------------------+
2214
2215
2216 PURPOSE : USSD process is successful.
2217
2218 */
2219
2220 void ss_ok_ussd(T_ACI_AT_CMD cmdId)
2221 {
2222 TRACE_FUNCTION("ss_ok_ussd()");
2223
2224 if (cmdId == KSD_CMD_USSD)
2225 {
2226 ussd_info.error = MFW_SS_NO_ERROR;
2227 ss_signal(E_SS_USSD_CNF, &ussd_info);
2228 }
2229 }
2230
2231
2232 /*
2233 +--------------------------------------------------------------------+
2234 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
2235 | STATE : code ROUTINE: ss_error_ussd |
2236 +--------------------------------------------------------------------+
2237
2238
2239 PURPOSE : USSD process is failed.
2240
2241 */
2242
2243 void ss_error_ussd(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR reason)
2244 {
2245 TRACE_FUNCTION("ss_error_ussd()");
2246
2247 // ussd_info.error = ss_cvtErrCode(reason);
2248 ss_signal(E_SS_USSD_CNF, &ussd_info);
2249 }
2250
2251 /*
2252 +---------------------------------------------------------------------+
2253 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
2254 | STATE : code ROUTINE: ss_abort_transaction |
2255 +---------------------------------------------------------------------+
2256
2257
2258 PURPOSE : Abort executing of SS transaction
2259
2260 */
2261
2262 T_MFW ss_abort_transaction(void)
2263 {
2264 TRACE_FUNCTION("ss_abort_transaction()");
2265
2266 if (sAT_Abort(CMD_SRC_LCL, AT_CMD_CUSD) EQ AT_CMPL)
2267 return TRUE;
2268 else
2269 {
2270 if (sAT_Abort(CMD_SRC_LCL, AT_CMD_D) EQ AT_CMPL)
2271 return TRUE;
2272 }
2273 return FALSE;
2274 }
2275
2276
2277 /*
2278 +--------------------------------------------------------------------+
2279 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
2280 | STATE : code ROUTINE: ss_set_cug |
2281 +--------------------------------------------------------------------+
2282
2283
2284 PURPOSE : set parameter of close user group
2285
2286 */
2287 T_MFW_SS_RETURN ss_set_cug (T_MFW_SS_CUG_PARA *cug_param)
2288 {
2289 T_ACI_CCUG_MOD cug_mode = CCUG_MOD_NotPresent;
2290 T_ACI_CCUG_IDX cug_index = CCUG_IDX_NotPresent;
2291 T_ACI_CCUG_INFO cug_info = CCUG_INFO_NotPresent;
2292
2293 TRACE_FUNCTION("ss_set_cug()");
2294
2295 /* check cug mode */
2296 switch(cug_param->mode)
2297 {
2298 case MFW_SS_CUG_TMP_DISABLE:
2299 cug_mode = CCUG_MOD_DisableTmp;
2300 break;
2301 case MFW_SS_CUG_TMP_ENABLE:
2302 cug_mode = CCUG_MOD_EnableTmp; /* enable to control cug info */
2303 break;
2304 default: /* ACI keep last valid value */
2305 break;
2306 }
2307 /* check cug index */
2308 switch(cug_param->index)
2309 {
2310 case MFW_SS_CUG_INDEX0:
2311 cug_index = CCUG_IDX_0;
2312 break;
2313 case MFW_SS_CUG_INDEX1:
2314 cug_index = CCUG_IDX_1;
2315 break;
2316 case MFW_SS_CUG_INDEX2:
2317 cug_index = CCUG_IDX_2;
2318 break;
2319 case MFW_SS_CUG_INDEX3:
2320 cug_index = CCUG_IDX_3;
2321 break;
2322 case MFW_SS_CUG_INDEX4:
2323 cug_index = CCUG_IDX_4;
2324 break;
2325 case MFW_SS_CUG_INDEX5:
2326 cug_index = CCUG_IDX_5;
2327 break;
2328 case MFW_SS_CUG_INDEX6:
2329 cug_index = CCUG_IDX_6;
2330 break;
2331 case MFW_SS_CUG_INDEX7:
2332 cug_index = CCUG_IDX_7;
2333 break;
2334 case MFW_SS_CUG_INDEX8:
2335 cug_index = CCUG_IDX_8;
2336 break;
2337 case MFW_SS_CUG_INDEX9:
2338 cug_index = CCUG_IDX_9;
2339 break;
2340 case MFW_SS_CUG_NO_INDEX:
2341 cug_index = CCUG_IDX_No; /* preferred CUG taken from subscriber data */
2342 break;
2343 default: /* ACI keep last valid value */
2344 break;
2345 }
2346
2347 /* check cug info */
2348 switch(cug_param->info)
2349 {
2350 case MFW_SS_CUG_SUPP_OA:
2351 cug_info = CCUG_INFO_SuppOa; /* suppress outgoing access */
2352 break;
2353 case MFW_SS_CUG_SUPP_PREF:
2354 cug_info = CCUG_INFO_SuppPrefCug; /* suppress preferential closed user group */
2355 break;
2356 case MFW_SS_CUG_SUPP_BOTH:
2357 cug_info = CCUG_INFO_SuppBoth; /* suppress outgoing access and preferential cug */
2358 break;
2359 case MFW_SS_CUG_INFO_NO: /* no cug info */
2360 cug_info = CCUG_INFO_No;
2361 break;
2362 default: /* ACI keep last valid value */
2363 break;
2364 }
2365 if(sAT_PlusCCUG(CMD_SRC_LCL,cug_mode,cug_index,cug_info) EQ AT_CMPL) /* set in ACI cug parameters */
2366 return MFW_SS_OK;
2367 else
2368 return MFW_SS_FAIL;
2369 }
2370
2371 /*
2372 +--------------------------------------------------------------------+
2373 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
2374 | STATE : code ROUTINE: ss_get_cug |
2375 +--------------------------------------------------------------------+
2376
2377
2378 PURPOSE : get parameter of close user group
2379
2380 */
2381
2382 T_MFW_SS_RETURN ss_get_cug(T_MFW_SS_CUG_PARA *cug_param)
2383 {
2384 T_ACI_CCUG_MOD cug_mode;
2385 T_ACI_CCUG_IDX cug_index;
2386 T_ACI_CCUG_INFO cug_info;
2387
2388 cug_param->mode = MFW_SS_CUG_MODE_Not_Present;
2389 cug_param->index = MFW_SS_CUG_INDEX_Not_Present;
2390 cug_param->info = MFW_SS_CUG_INFO_Not_Present;
2391
2392 TRACE_FUNCTION("ss_get_cug()");
2393
2394 if(qAT_PlusCCUG(CMD_SRC_LCL,&cug_mode,&cug_index,&cug_info) NEQ AT_CMPL) /* get cug parameters of ACI */
2395 return MFW_SS_FAIL;
2396 else
2397 {
2398 cug_param->mode = (T_MFW_SS_CUG_MODE)cug_mode;
2399 cug_param->index = (T_MFW_SS_CUG_INDEX)cug_index;
2400 cug_param->info = (T_MFW_SS_CUG_INFO)cug_info;
2401 return MFW_SS_OK;
2402 }
2403 }
2404 //PATCH TB 1309
2405 /*
2406 +--------------------------------------------------------------------+
2407 | PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
2408 | STATE : code ROUTINE: ss_command_abort |
2409 +--------------------------------------------------------------------+
2410
2411
2412 PURPOSE :
2413
2414 */
2415 T_MFW ss_command_abort(void)
2416 {
2417 TRACE_FUNCTION ("ss_command_abort()");
2418
2419 // Abort SS transaction.
2420 // Any SS AT_CMD will clear all SS (any) transaction(s)
2421 if (sAT_Abort(CMD_SRC_LCL, AT_CMD_CUSD) == AT_CMPL)
2422 return TRUE;
2423 else
2424 return FALSE;
2425 }
2426 //END PATCH TB
2427 //CQ-16432 start
2428 void ss_sat_passwdReqd(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR err)
2429 {
2430 TRACE_FUNCTION("ss_sat_passwdReqd");
2431 ss_signal(E_SS_SAT_CPWD,&cmdId);
2432 return;
2433 }
2434 //CQ-16432 end