line source
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) $Workfile:: mfw_ss.c $|
| $Author:: Vo $Revision:: 1 $|
| CREATED: 25.1.99 $Modtime:: 24.03.00 9:48 $|
| STATE : code |
+--------------------------------------------------------------------+
MODULE : MFW_SS
PURPOSE : This modul contains the functions for supplementary management.
$History:: mfw_ss.c $
Dec 16, 2005 REF: OMAPS00053316 x0018858
Description: E-Sample 2.58 compiler code crashes when accessing the Voicemail service in the Messages
Solution: Added a NULL Check for the USSD pointer that is being received.
Jul 05, 2005 REF: CRR 22565 a0876501
Description: IMEI display on handset through atd*#06# was swapped.
Solution: Byte swapping corrected for IMEI decoding.
Mar 30, 2005 REF: CRR 29986 xpradipg
Description: Optimisation 1: Removal of unused variables and dynamically
allocate/ deallocate mbndata
Solution: unused variables are removed
Apr 06 2005 REF: CRR 29989 xpradipg
Description: Optimisation 3: replace the static global data with dynamic
allocation / deallocation
Solution: The static global variables are dynamically allocated and
deallocated
Aug 16, 2004 REF: CRR 24323 Deepa M.D
Bug:Clenup of sprintf used for tracing
Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX
Jul 15, 2004 REF: CRR 13873 xkundadu
Description: Make an incoming call, the end user pressing 0+send will
pick up the call. Instead, 0+send should reject the incoming
call.
Solution: Added the handling of 0/1/2 SEND for a waiting call.
Modified the ss_decode() function in the
mfw_ss.c file to search the sequential table in the case of
waiting call also. Made changes in mfw_cm.c file also
*
* ***************** Version 24 *****************
* User: Vo Date: 24.03.00 Time: 10:18
* Updated in $/GSM/Condat/MS/SRC/MFW
* Bug fix: result of IMEI
* New: notice PIN type of SS string for PIN change/PIN unblock
*
* ***************** Version 23 *****************
* User: Vo Date: 10.01.00 Time: 16:09
* Updated in $/GSM/Condat/MS/SRC/MFW
* new function ss_exit()
*
* ***************** Version 22 *****************
* User: Vo Date: 10.01.00 Time: 13:32
* Updated in $/GSM/Condat/MS/SRC/MFW
*
* ***************** Version 21 *****************
* User: Ak Date: 10.01.00 Time: 13:14
* Updated in $/GSM/Condat/MS/SRC/MFW
*
* ***************** Version 20 *****************
* User: Ak Date: 21.10.99 Time: 11:56
* Updated in $/GSM/Condat/MS/SRC/MFW
* Why: Improvement
* What: Passing of network basic service codes instead of GSM 2.30
* codes for SS control string results and invocations
*
* ***************** Version 19 *****************
* User: Ak Date: 29.09.99 Time: 8:37
* Updated in $/GSM/DEV/MS/SRC/MFW
* Why: bug fix
* What: strcpy do not check a NULL pointer argument, corrected
*
* ***************** Version 18 *****************
* User: Ak Date: 28.09.99 Time: 14:16
* Updated in $/GSM/DEV/MS/SRC/MFW
* Why: bug fix
* What: strcpy do not check a NULL pointer argument, corrected
*
* ***************** Version 17 *****************
* User: Es Date: 16.09.99 Time: 17:25
* Updated in $/GSM/DEV/MS/SRC/MFW
* include SENSEI patch 13/09/99
* two minor fixes
*
* ***************** Version 16 *****************
* User: Vo Date: 12.09.99 Time: 14:16
* Updated in $/GSM/DEV/MS/SRC/MFW
* New: USSD handle
*
* ***************** Version 15 *****************
* User: Vo Date: 30.08.99 Time: 12:08
* Updated in $/GSM/DEV/MS/SRC/MFW
* SS string for PIN unblock
*
* ***************** Version 14 *****************
* User: Vo Date: 9.08.99 Time: 16:53
* Updated in $/GSM/DEV/MS/SRC/MFW
* SS result from network
* present IMEI
* different handling of network password and PIN1/PIN2 password
*
* ***************** Version 13 *****************
* User: Vo Date: 21.07.99 Time: 14:44
* Updated in $/GSM/DEV/MS/SRC/MFW
*
* ***************** Version 12 *****************
* User: Vo Date: 16.07.99 Time: 10:39
* Updated in $/GSM/DEV/MS/SRC/MFW
*
* ***************** Version 11 *****************
* User: Vo Date: 9.07.99 Time: 14:56
* Updated in $/GSM/DEV/MS/SRC/MFW
*
* ***************** Version 1 *****************
* User: Vo Date: 10.02.99 Time: 12:41
* Created in $/GSM/DEV/MS/SRC/MFW
*/
#define ENTITY_MFW
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#if defined (NEW_FRAME)
#include "typedefs.h"
#include "vsi.h"
#include "custom.h"
#include "gsm.h"
#else
#include "STDDEFS.H"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"
#endif
#include "message.h"
#include "prim.h"
#include "aci_cmh.h"
#include "cus_aci.h"
#include "ksd.h"
#include "prim.h"
#ifndef PCM_2_FFS
#include "pcm.h"
#else
#include "prim.h"
#include "Gsm.h"
#endif
#include "psa.h"
#include "psa_sim.h"
#include "mfw_mfw.h"
#include "mfw_nm.h"
#include "mfw_sim.h"
#include "mfw_sima.h"
#include "mfw_nmi.h"
#include "mfw_simi.h"
#include "mfw_nma.h"
#include "mfw_phb.h"
#include "mfw_cm.h"
#include "mfw_cmi.h"
#include "mfw_ss.h"
#include "mfw_ssi.h"
#include "mfw_win.h"
#include "mfw_phbi.h"
#include <string.h>
/*************** Variables ******************************************/
// Mar 30, 2005 REF: CRR 29986 xpradipg
// remove unused variables
#ifndef FF_MMI_OPTIM
static T_MFW_SS_SUPORT ss_suport;
#endif
// Apr 06 2005 REF: CRR 29989 xpradipg
// This scope of the variable lies within a function hence it is made as local
#ifndef FF_MMI_OPTIM
static T_MFW_SS_NOTIFY notify;
#endif
// Apr 06 2005 REF: CRR 29989 xpradipg
// The below static globals are dynamically allocated in rAT_PercentKSIR where
// the data is populated for the supplementary services response and
// deallocated once the ss_signal function is executed where in the contents
// are copied onto another variable
#ifdef FF_MMI_OPTIM
T_MFW_SS_CF_CNF *cf_cnf = NULL;
T_MFW_SS_CB_CNF *cb_cnf = NULL;
T_MFW_SS_CLI_CNF *cli_cnf = NULL;
T_MFW_SS_CW_CNF *cw_cnf = NULL;
T_MFW_SS_PW_CNF *pw_cnf = NULL;
T_MFW_IMEI *imei_info = NULL;
#else
static T_MFW_SS_CF_CNF cf_cnf;
static T_MFW_SS_CB_CNF cb_cnf;
static T_MFW_SS_CLI_CNF cli_cnf;
static T_MFW_SS_CW_CNF cw_cnf;
static T_MFW_SS_PW_CNF pw_cnf;
static T_MFW_SS_RES ss_res;
static T_MFW_IMEI imei_info;
#endif
static T_MFW_SS_USSD ussd_info;
// Mar 30, 2005 REF: CRR 29986 xpradipg
// remove unused variables
#ifndef FF_MMI_OPTIM
static U8 clip_status;
static U8 colp_status;
static U8 clir_status;
static U8 clir_prefix;
static U8 colr_status;
#endif
static U8 clck_flag;
static U8 pwd_flag; /* 1 for change PIN */
#define CF_LST_SIZE (sizeof(T_MFW_FEATURE) *MFW_MAX_FEAT_NR)
#define CB_LST_SIZE (sizeof(T_MFW_TELECOM) *MFW_MAX_TELE_NR)
#define CW_LST_SIZE (sizeof(T_MFW_SRV_GROUP)*MFW_MAX_SRV_NR)
#define MAX_LST_BUF (MAXIMUM(MAXIMUM(CF_LST_SIZE,\
CB_LST_SIZE),\
CW_LST_SIZE))
#define LANG_RESET "*#0" /*mc, SPR 1111 beginning of language reset pseudo-SS string*/
#define TTY_NEXTCALL_ON "*55#" /* SPR#1352 - SH - Pseudo-SS string to switch on TTY on next call */
#define TTY_NEXTCALL_OFF "#55#" /* SPR#1352 - SH - Pseudo-SS string to switch off TTY on next call */
static ULONG ssLstBuf[MAX_LST_BUF/sizeof(ULONG)];
EXTERN MfwHdr * current_mfw_elem;
// July 09, 2005 REF : MMI-22565 - a0876501
extern UBYTE cmhSS_getCdFromImei (T_ACI_IMEI* imei);
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_mfw_init |
+--------------------------------------------------------------------+
PURPOSE :
*/
void ss_mfw_init(void)
{
// Mar 30, 2005 REF: CRR 29986 xpradipg
// remove reundant code since the values assigned here are never referenced
#ifndef PCM_2_FFS
#ifndef FF_MMI_OPTIM
EF_MSCAP mscap;
EF_MSSUP mssup;
EF_MSSET msset;
UBYTE version;
/* Read the Mobile Capabilities from EEPROM */
if (pcm_ReadFile((UBYTE *)EF_MSCAP_ID,
SIZE_EF_MSCAP,
(UBYTE *)&mscap,
&version) EQ PCM_OK)
{
ss_suport.speech = (UBYTE)FldGet(mscap.chnMode,spchSupV1);
ss_suport.data = (UBYTE)FldGet(mscap.datCap1,datSup);
ss_suport.asyn = (UBYTE)FldGet(mscap.datCap1,AsySup);
ss_suport.syn = (UBYTE)FldGet(mscap.datCap1,NTSynSup);
}
if (pcm_ReadFile((UBYTE *)EF_MSSUP_ID,
SIZE_EF_MSSUP,
(UBYTE *)&mssup,
&version) EQ PCM_OK)
{
ss_suport.aoc = (UBYTE)FldGet(mssup.feat1,AoC);
ss_suport.dtmf = (UBYTE)FldGet(mssup.feat1,DTMF);
ss_suport.cf = (UBYTE)FldGet(mssup.feat1,CF);
ss_suport.cb = (UBYTE)FldGet(mssup.feat1,CB);
ss_suport.ussd = (UBYTE)FldGet(mssup.feat1,USSD);
ss_suport.etc = (UBYTE)FldGet(mssup.feat1,ETC);
}
if (pcm_ReadFile((UBYTE *)EF_MSSET_ID,
SIZE_EF_MSSET,
(UBYTE *)&msset,
&version) EQ PCM_OK)
{
ss_suport.clire = (UBYTE)FldGet(msset.misc,clir);
ss_suport.clipr = (UBYTE)FldGet(msset.misc,clip);
}
#endif
#endif
pwd_flag = 0;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_exit |
+--------------------------------------------------------------------+
PURPOSE :
*/
void ss_exit(void)
{
TRACE_FUNCTION("ss_exit()");
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_create |
+--------------------------------------------------------------------+
PURPOSE : create event for supplementary management
*/
T_MFW_HND ss_create(T_MFW_HND hWin, T_MFW_EVENT event, T_MFW_CB cbfunc)
{
T_MFW_HDR *hdr;
T_MFW_SS *ss_para;
MfwHdr * insert_status =0;
TRACE_FUNCTION("ss_create()");
hdr = (T_MFW_HDR *) mfwAlloc(sizeof (T_MFW_HDR));
ss_para = (T_MFW_SS *) mfwAlloc(sizeof (T_MFW_SS));
if (!hdr OR !ss_para)
{
TRACE_ERROR("ERROR: ss_create() Mem Alloc Failed.");
if(hdr)
mfwFree((U8*)hdr,sizeof(MfwHdr));
if(ss_para)
mfwFree((U8*)ss_para,sizeof(T_MFW_SS));
return FALSE;
}
/*
* initialisation of the handler
*/
ss_para->emask = event;
ss_para->handler = cbfunc;
hdr->data = ss_para; /* store parameter in node */
hdr->type = MFW_TYP_SS; /* store type of event handler */
/*
* installation of the handler
*/
insert_status = mfwInsert((T_MFW_HDR *)hWin, hdr);
if(!insert_status)
{
TRACE_ERROR("ERROR: ss_create() Failed to Install Handler. ");
mfwFree((U8*)hdr,sizeof(MfwHdr));
mfwFree((U8*)ss_para,sizeof(T_MFW_SS));
return 0;
}
return insert_status;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_delete |
+--------------------------------------------------------------------+
PURPOSE : delete a event for supplementary management
*/
T_MFW_RES ss_delete(T_MFW_HND h)
{
TRACE_FUNCTION("ss_delete()");
if (!h OR !((T_MFW_HDR *)h)->data)
return MFW_RES_ILL_HND;
if (!mfwRemove((T_MFW_HDR *)h))
return MFW_RES_ILL_HND;
mfwFree((U8 *)(((T_MFW_HDR *) h)->data),sizeof(T_MFW_SS));
mfwFree((U8 *)h,sizeof(T_MFW_HDR));
return MFW_RES_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_sign_exec |
+--------------------------------------------------------------------+
PURPOSE : Send a signal if SS management handler.
*/
BOOL ss_sign_exec (T_MFW_HDR * cur_elem, T_MFW_EVENT event, T_MFW_SS_PARA * para)
{
TRACE_FUNCTION ("ss_sign_exec()");
while (cur_elem)
{
/*
* event handler is available
*/
if (cur_elem->type EQ MFW_TYP_SS)
{
T_MFW_SS * ss_data;
/*
* handler is SS management handler
*/
ss_data = (T_MFW_SS *)cur_elem->data;
if (ss_data->emask & event)
{
/*
* event is expected by the call back function
*/
ss_data->event = event;
switch (event)
{
case E_SS_NOTIFY:
memcpy (&ss_data->para.notify, para, sizeof (T_MFW_SS_NOTIFY));
break;
case E_SS_CF_CNF:
case E_SS_CF_ICN_UPD:
memcpy (&ss_data->para.cf_cnf, para, sizeof (T_MFW_SS_CF_CNF));
break;
case E_SS_CB_CNF:
memcpy (&ss_data->para.cb_cnf, para, sizeof (T_MFW_SS_CB_CNF));
break;
case E_SS_CW_CNF:
memcpy (&ss_data->para.cw_cnf, para, sizeof (T_MFW_SS_CW_CNF));
break;
case E_SS_CLI_CNF:
memcpy (&ss_data->para.cli_cnf, para, sizeof (T_MFW_SS_CLI_CNF));
break;
case E_SS_RES:
memcpy (&ss_data->para.ss_res, para, sizeof (T_MFW_SS_RES));
break;
case E_SS_GET_PW:
memcpy (&ss_data->para.pw_cnf, para, sizeof (T_MFW_SS_PW_CNF));
break;
case E_SS_IMEI:
memcpy (&ss_data->para.imei_info, para, sizeof (T_MFW_IMEI));
break;
case E_SS_USSD_REQ:
memcpy (&ss_data->para.ussd_info, para, sizeof (T_MFW_SS_USSD));
break;
case E_SS_USSD_CNF:
memcpy (&ss_data->para.ussd_info, para, sizeof (T_MFW_SS_USSD));
break;
}
/*
* if call back defined, call it
*/
if (ss_data->handler)
{
// PATCH LE 06.06.00
// store current mfw elem
current_mfw_elem = cur_elem;
// END PATCH LE 06.06.00
if ((*(ss_data->handler)) (ss_data->event, (void *)&ss_data->para))
return TRUE;
}
}
}
cur_elem = cur_elem->next;
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_signal |
+--------------------------------------------------------------------+
PURPOSE : send a event signal.
*/
void ss_signal(T_MFW_EVENT event, void * para)
{
UBYTE temp;
TRACE_FUNCTION ("ss_signal()");
temp = dspl_Enable(0);
if (mfwSignallingMethod EQ 0)
{
/*
* focus is on a window
*/
if (mfwFocus)
/*
* send event to sim management
* handler if available
*/
if (ss_sign_exec (mfwFocus, event, para))
{
dspl_Enable(temp);
return;
}
/*
* acutal focussed window is not available
* or has no network management registration
* handler, then search all nodes from the root.
*/
if (mfwRoot)
ss_sign_exec (mfwRoot, event, para);
}
else
{
MfwHdr * h = 0;
/*
* Focus set, then start here
*/
if (mfwFocus)
h = mfwFocus;
/*
* Focus not set, then start root
*/
if (!h)
h = mfwRoot;
/*
* No elements available, return
*/
while (h)
{
/*
* Signal consumed, then return
*/
if (ss_sign_exec (h, event, para))
{
dspl_Enable(temp);
return;
}
/*
* All windows tried inclusive root
*/
if (h == mfwRoot)
{
dspl_Enable(temp);
return;
}
/*
* get parent window
*/
h = mfwParent(mfwParent(h));
if(h)
h = ((MfwWin * )(h->data))->elems;
}
ss_sign_exec (mfwRoot, event, para);
}
dspl_Enable(temp);
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_check_ss_string |
+--------------------------------------------------------------------+
PURPOSE : Check SS string
*/
T_MFW_SS_RETURN ss_check_ss_string(UBYTE *string)
{
T_MFW_SS_RETURN ss_group;
T_KSD_SEQGRP grp;
CHAR *rest;
T_KSD_SEQPARAM para;
SHORT id;
int string_length;
UBYTE call_active=FALSE;
TRACE_FUNCTION("ss_check_ss_string");
#define MFW_MAX_DIAL_SHORT_STRING_LEN 2
/* check the type of destination address */
if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK))
{
call_active = TRUE;
ksd_decode((CHAR *)string, TRUE, &grp, &rest, ¶);
}
else
ksd_decode((CHAR *)string, FALSE, &grp, &rest, ¶);
/* check short string */
string_length = strlen((char*)string);
TRACE_EVENT_P2("ksd_decode(""%s"") returns -> %d",(char*)string,grp);
switch (grp)
{
case (SEQGRP_DIAL): /*JVJ CQ 6242 */
if (string_length<=MFW_MAX_DIAL_SHORT_STRING_LEN)
{
/* If the call is active, the short string will be USSD in all the cases not described in ETSI 2.30*/
if (call_active)
grp = SEQGRP_USSD;
/* If the call is not active, the short strings 1x will be DIAL, the rest USSD*/
else if ((string_length EQ 1)||(*(string) NEQ '1'))
grp = SEQGRP_USSD;
}
break;
case (SEQGRP_SUP_CLIR): /* JGG/JVJ - CQ 6537 */
case (SEQGRP_INV_CLIR):
if (strlen(rest)!=0)
{
T_MFW_SS_RETURN rest_ss_group;
/*check to make sure that the number is a real dial string */
rest_ss_group = ss_check_ss_string((UBYTE*)rest);
if (rest_ss_group EQ MFW_SS_DIAL) /*If rest is a dial string, then the whole string is dial */
ss_group = MFW_SS_DIAL;
else
ss_group = MFW_SS_UNKNOWN;
TRACE_EVENT_P2("ss_check_ss_string(""%s"") returns -> %d",(char*)string,ss_group);
return ss_group;
}
break;
default:
break;
}
ss_group = ss_check_group(grp, para);
TRACE_EVENT_P2("ss_check_ss_string(""%s"") returns -> %d",(char*)string,ss_group);
return ss_group;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_decode |
+--------------------------------------------------------------------+
PURPOSE : Decode SS string
*/
T_MFW_SS_RETURN ss_decode(UBYTE *string, CHAR **rt, T_KSD_SEQPARAM *p)
{
T_KSD_SEQGRP grp;
CHAR *rest;
T_KSD_SEQPARAM para;
SHORT id;
BOOL bRetVal;
TRACE_FUNCTION("ss_decode()");
// Added the checking of wait call to solve the bug MMI-SPR 13873.
// If the call is a waiting also pass TRUE as the second parameter to the
// function ksd_decode() to decode the entered number. In ksd_decode only if
// the second parameter is TRUE the sequential table is searched to find out
// the group where the user entered string belongs to.
if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
OR (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK))
{
bRetVal = ksd_decode((CHAR *)string, TRUE, &grp, &rest, ¶);
if (!bRetVal)
*rest = 0;
}
else
{
bRetVal = ksd_decode((CHAR *)string, FALSE, &grp, &rest, ¶);
if (!bRetVal)
*rest = 0;
}
if (!bRetVal)
return MFW_SS_FAIL;
*rt = rest;
if (grp == SEQGRP_UNKNOWN)
return MFW_SS_UNKNOWN;
memcpy(p, ¶, sizeof(T_KSD_SEQPARAM));
return(ss_check_group(grp, para));
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_check_group |
+--------------------------------------------------------------------+
PURPOSE : returns the group of SS string
*/
T_MFW_SS_RETURN ss_check_group(T_KSD_SEQGRP grp, T_KSD_SEQPARAM para)
{
TRACE_EVENT_P1("ss_check_group: grp=%d", grp);
switch (grp)
{
case SEQGRP_DIAL:
/*SPR#1352 - SH - Check for TTY On Next Call psuedo-ss strings*/
if (!strncmp((char*)para.ussd.ussd, TTY_NEXTCALL_ON, strlen(TTY_NEXTCALL_ON)))
return MFW_SS_TTY_NEXTCALL_ON;
if (!strncmp((char*)para.ussd.ussd, TTY_NEXTCALL_OFF, strlen(TTY_NEXTCALL_OFF)))
return MFW_SS_TTY_NEXTCALL_OFF;
/*SH end*/
return MFW_SS_DIAL;
case SEQGRP_DIAL_IDX:
return MFW_SS_DIAL_IDX;
case SEQGRP_DTMF:
return MFW_SS_DTMF;
case SEQGRP_USSD:
/*MC, SPR 1111 check for LANGUAGE reset code*/
if (!strncmp((char*)para.ussd.ussd, LANG_RESET, strlen(LANG_RESET)) && para.ussd.ussd[6]=='#')
return MFW_SS_LANG_RESET;
/*MC end*/
return MFW_SS_USSD;
case SEQGRP_ACT_SIM_LOCK: /* lock SIM card */
case SEQGRP_DEACT_SIM_LOCK: /* unlock SIM card */
case SEQGRP_INTRGT_SIM_LOCK:
return MFW_SS_SIM_LOCK;
case SEQGRP_CHANGE_REGISTER:
case SEQGRP_SET_REGISTER:
case SEQGRP_START_REGISTER:
return MFW_SS_REG_PW;
case SEQGRP_CF:
return MFW_SS_CF;
case SEQGRP_CB: /* barring services */
return MFW_SS_CB;
case SEQGRP_SUP_CLIR:
case SEQGRP_INV_CLIR:
return MFW_SS_CLIR;
case SEQGRP_SUP_CLIP:
case SEQGRP_INV_CLIP:
return MFW_SS_CLIP;
case SEQGRP_SUP_COLR:
case SEQGRP_INV_COLR:
return MFW_SS_COLR;
case SEQGRP_SUP_COLP:
case SEQGRP_INV_COLP:
return MFW_SS_COLP;
case SEQGRP_CL:
switch (para.cl.ssCd)
{
case KSD_SS_CLIP:
return MFW_SS_CLIP;
case KSD_SS_CLIR:
return MFW_SS_CLIR;
case KSD_SS_COLP:
return MFW_SS_COLP;
case KSD_SS_COLR:
return MFW_SS_COLR;
}
return MFW_SS_UNKNOWN;
case SEQGRP_PWD:
switch(para.pwd.ssCd)
{
/* case KSD_SS_CCBS: CCBS has nothing to do with PWD! */
case KSD_SS_ALL_CBSS:
case KSD_SS_BOC:
case KSD_SS_BAOC:
case KSD_SS_BOIC:
case KSD_SS_BOICXH:
case KSD_SS_BIC:
case KSD_SS_BAIC:
case KSD_SS_BICRM:
/*NM 190602*/
case KSD_SS_ALL_SERV:
return MFW_SS_REG_PW;
case KSD_SS_PIN1:
case KSD_SS_PIN2:
return MFW_SS_SIM_REG_PW;
}
return MFW_SS_UNKNOWN;
case SEQGRP_UBLK:
return MFW_SS_SIM_UNBLCK_PIN;
case SEQGRP_CW:
return MFW_SS_WAIT;
case SEQGRP_CCBS:
return MFW_SS_CCBS;
case SEQGRP_PRSNT_IMEI:
return MFW_SS_MMI;
case SEQGRP_CHLD:
/*MC 11.04.02 */
if (para.chld.mode == CHLD_MOD_Ect)
return MFW_SS_ECT;
else if (para.chld.mode == CHLD_MOD_Ccbs)
return MFW_SS_CCBS;
else
/*MC*/
return MFW_SS_HOLD;
case SEQGRP_UNKNOWN:
return MFW_SS_UNKNOWN;
default:
return MFW_SS_UNKNOWN;
}
}
/*
+-------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_execute_transaction |
+-------------------------------------------------------------------+
PURPOSE : Start a SS transaction
*/
T_MFW_SS_RETURN ss_execute_transaction(UBYTE *ss_string,
UBYTE ussd_mand)
{
T_ACI_RETURN res;
TRACE_FUNCTION("ss_execute_transaction()");
res = sAT_Dn(CMD_SRC_LCL, (CHAR *)ss_string, -1, -1, -1);
if( (res != AT_EXCT) AND (res != AT_CMPL))
{
TRACE_EVENT("sAT_D error");
return MFW_SS_FAIL;
}
return ss_check_ss_string(ss_string);
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_cvtCssuCodes |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the CSSU mode
used by ACI to the CSSU mode used by MFW.
*/
T_MFW_SS_NOTIFY_CODES ss_cvtCssuCodes(T_ACI_CSSU_CODE code)
{
switch (code)
{
case CSSU_CODE_ForwardedCall: return MFW_SS_MT_FORWARDED;
case CSSU_CODE_CUGCall: return MFW_SS_MT_CUG_CALL;
case CSSU_CODE_Multiparty: return MFW_SS_NOTIFY_MULTIPARTY;
case CSSU_CODE_HeldCallRel: return MFW_SS_NOTIFY_holdRELEASED;
case CSSU_CODE_FwrdCheckSS: return MFW_SS_NOTIFY_checkSS;
case CSSU_CODE_ECTAlert: return MFW_SS_NOTIFY_ectALERT;
case CSSU_CODE_ECTConnect: return MFW_SS_NOTIFY_ectCONNECT;
case CSSU_CODE_DeflectedCall: return MFW_SS_MT_DEFLECTED;
default: return MFW_SS_NOTIFY_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_cvtCssiCodes |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the CSSI mode
used by ACI to the CSSI mode used by MFW.
*/
T_MFW_SS_NOTIFY_CODES ss_cvtCssiCodes(T_ACI_CSSI_CODE code)
{
switch (code)
{
case CSSI_CODE_CFUActive: return MFW_SS_MO_unconFORWARD;
case CSSI_CODE_SomeCCFActive: return MFW_SS_MO_conFORWARD;
case CSSI_CODE_ForwardedCall: return MFW_SS_MO_FORWARDED;
case CSSI_CODE_CallWaiting: return MFW_SS_MO_WAITING;
case CSSI_CODE_CUGCall: return MFW_SS_MO_CUG_CALL;
case CSSI_CODE_OutCallsBarred: return MFW_SS_MO_moBARRED;
case CSSI_CODE_IncCallsBarred: return MFW_SS_MO_mtBARRED;
case CSSI_CODE_CLIRSupRej: return MFW_SS_MO_CLIR;
case CSSI_CODE_DeflectedCall: return MFW_SS_MO_DEFLECTED;
default: return MFW_SS_NOTIFY_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_notify |
+--------------------------------------------------------------------+
PURPOSE : Change of SS status from the network.
*/
void ss_notify(T_MFW_SS_NOTIFY_CODES code,
SHORT index,
UBYTE *number,
UBYTE *subaddr)
{
// Apr 06 2005 REF: CRR 29989 xpradipg
// defined the variable locally since the scope lies within this function
#ifdef FF_MMI_OPTIM
T_MFW_SS_NOTIFY notify;
#endif
memset(¬ify, 0, sizeof(T_MFW_SS_NOTIFY));
notify.code = code;
if(number)
strcpy((char *)notify.number, (char *)number);
if (subaddr)
strcpy((char *)notify.subaddr, (char *)subaddr);
//PATCH TB 1309: Wrong codes tested
if ((code == MFW_SS_MO_CUG_CALL) OR
(code == MFW_SS_MT_CUG_CALL))
notify.index = (UBYTE)index;
/* END PATCH TB */
{
/***************************Go-lite Optimization changes Start***********************/
//Aug 16, 2004 REF: CRR 24323 Deepa M.D
TRACE_EVENT_P1 ("SS notify code = %d", notify.code);
/***************************Go-lite Optimization changes end***********************/
}
ss_signal(E_SS_NOTIFY, ¬ify);
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtOCode |
+--------------------------------------------------------------------+
PURPOSE : Convert operation codes
*/
T_MFW ss_cvtOCode(T_ACI_KSD_OP code)
{
switch (code)
{
case KSD_OP_IRGT: return SS_INTERROGATION;
case KSD_OP_REG: return SS_REGISTRATION;
case KSD_OP_ERS: return SS_ERASURE;
case KSD_OP_ACT: return SS_ACTIVATION;
case KSD_OP_DEACT: return SS_DEACTIVATION;
default: return SS_CODES_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtSCodes |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the SS code
used by ACI to the SS code used by MFW.
*/
T_MFW ss_cvtSCode(T_ACI_KSD_SS code)
{
switch (code)
{
case KSD_SS_CLIP: return SS_CLIP;
case KSD_SS_CLIR: return SS_CLIR;
case KSD_SS_COLP: return SS_COLP;
case KSD_SS_COLR: return SS_COLR;
case KSD_SS_CW: return SS_CW;
case KSD_SS_BAIC: return SS_CB_BAIC;
case KSD_SS_BAOC: return SS_CB_BAOC;
case KSD_SS_ALL_CBSS: return SS_CB_ALL;
case KSD_SS_BICRM: return SS_CB_BAICroam;
case KSD_SS_BIC: return SS_CB_ALL_BAIC;
case KSD_SS_BOICXH: return SS_CB_BAOICexH;
case KSD_SS_BOIC: return SS_CB_BAOIC;
case KSD_SS_BOC: return SS_CB_ALL_BAOC;
case KSD_SS_CFB: return SS_CF_CFB;
case KSD_SS_CFNRC: return SS_CF_CFNR;
case KSD_SS_CFNRY: return SS_CF_CFNRy;
case KSD_SS_CFU: return SS_CF_CFU;
case KSD_SS_ALL_CFWSS: return SS_CF_ALL_COND;
case KSD_SS_ALL_FWSS: return SS_CF_ALL;
case KSD_SS_CCBS: return SS_CCBS;
case KSD_SS_PIN1: return SS_PIN1;
case KSD_SS_PIN2: return SS_PIN2;
default: return SS_CODES_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtCLStatus |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the CL status
used by ACI to the CL status used by MFW.
*/
T_MFW ss_cvtCLStatus(T_ACI_KSD_CLIR_OP stat)
{
switch (stat)
{
case KSD_CO_PERMANENT: return MFW_CL_PERM;
case KSD_CO_TEMPORARY: return MFW_CL_TEMP_DEF_REST;
case KSD_CO_ALLOWED: return MFW_CL_TEMP_DEF_ALLOWED;
default: return MFW_CL_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtCLOvrd |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the override status of
CLIR used by ACI to the override status of CLIR used by
MFW.
*/
T_MFW ss_cvtCLOvrd(T_ACI_KSD_OVRD_CTG ovrd)
{
switch (ovrd)
{
case KSD_OVR_CAT_ENABLED: return MFW_OV_ENABLED;
case KSD_OVR_CAT_DISABLED: return MFW_OV_DISABLED;
default: return MFW_OV_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtErrCode |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the error code used
by ACI to the error code used by MFW.
*/
T_MFW ss_cvtErrCode(T_ACI_KSD_ERR err)
{
switch (err)
{
case KSD_NO_ERROR: return MFW_SS_NO_ERROR;
case KSD_ERR_UNKNOWN_SUBSCRIBER: return MFW_SS_ERR_UNKNOWN_SUBSCRIBER;
case KSD_ERR_ILLEGAL_SUBSCRIBER: return MFW_SS_ERR_ILLEGAL_SUBSCRIBER;
case KSD_ERR_BEARER_SVC_NOT_PROV: return MFW_SS_ERR_BEARER_SVC_NOT_PROV;
case KSD_ERR_TELE_SVC_NOT_PROV: return MFW_SS_ERR_TELE_SVC_NOT_PROV;
case KSD_ERR_ILLEGAL_EQUIPMENT: return MFW_SS_ERR_ILLEGAL_EQUIPMENT;
case KSD_ERR_CALL_BARRED: return MFW_SS_ERR_CALL_BARRED;
case KSD_ERR_ILLEGAL_SS_OPERATION: return MFW_SS_ERR_ILLEGAL_SS_OPERATION;
case KSD_ERR_SS_ERR_STATUS: return MFW_SS_ERR_SS_ERR_STATUS;
case KSD_ERR_SS_NOT_AVAIL: return MFW_SS_ERR_SS_NOT_AVAIL;
case KSD_ERR_SS_SUBS_VIOLATION: return MFW_SS_ERR_SS_SUBS_VIOLATION;
case KSD_ERR_SS_INCOMP: return MFW_SS_ERR_SS_INCOMP;
case KSD_ERR_FAC_NOT_SUPPORTED: return MFW_SS_ERR_FAC_NOT_SUPPORTED;
case KSD_ERR_ABSENT_SUBS: return MFW_SS_ERR_ABSENT_SUBS;
case KSD_ERR_SYSTEM_FAIL: return MFW_SS_ERR_SYSTEM_FAIL;
case KSD_ERR_DATA_MISSING: return MFW_SS_ERR_DATA_MISSING;
case KSD_ERR_UNEXPECT_DATA: return MFW_SS_ERR_UNEXPECT_DATA;
case KSD_ERR_PWD_REG_FAIL: return MFW_SS_ERR_PWD_REG_FAIL;
case KSD_ERR_NEG_PWD_CHECK: return MFW_SS_ERR_NEG_PWD_CHECK;
case KSD_ERR_NUM_PWD_VIOLATION: return MFW_SS_ERR_NUM_PWD_VIOLATION;
case KSD_ERR_UNKNOWN_ALPHA: return MFW_SS_ERR_UNKNOWN_ALPHA;
case KSD_ERR_USSD_BUSY: return MFW_SS_ERR_USSD_BUSY;
case KSD_ERR_MAX_NUM_MPTY_EXCEED: return MFW_SS_ERR_MAX_NUM_MPTY_EXCEED;
case KSD_ERR_RESOURCE_NOT_AVAIL: return MFW_SS_ERR_RESOURCE_NOT_AVAIL;
case KSD_GEN_PROB_UNRECOG_CMP: return MFW_SS_GEN_PROB_UNRECOG_CMP;
case KSD_GEN_PROB_MISTYPED_CMP: return MFW_SS_GEN_PROB_MISTYPED_CMP;
case KSD_GEN_PROB_BAD_STRUCT_CMP: return MFW_SS_GEN_PROB_BAD_STRUCT_CMP;
case KSD_INV_PROB_DUPL_INV_ID: return MFW_SS_INV_PROB_DUPL_INV_ID;
case KSD_INV_PROB_UNRECOG_OP: return MFW_SS_INV_PROB_UNRECOG_OP;
case KSD_INV_PROB_MISTYPED_PAR: return MFW_SS_INV_PROB_MISTYPED_PAR;
case KSD_INV_PROB_RESOURCE_LIM: return MFW_SS_INV_PROB_RESOURCE_LIM;
case KSD_INV_PROB_INIT_RELEASE: return MFW_SS_INV_PROB_INIT_RELEASE;
case KSD_INV_PROB_UNRECOG_LNK_ID: return MFW_SS_INV_PROB_UNRECOG_LNK_ID;
case KSD_INV_PROB_LNK_RES_UNEXP: return MFW_SS_INV_PROB_LNK_RES_UNEXP;
case KSD_INV_PROB_UNEXP_LNK_OP: return MFW_SS_INV_PROB_UNEXP_LNK_OP;
case KSD_RES_PROB_UNRECOG_INV_ID: return MFW_SS_RES_PROB_UNRECOG_INV_ID;
case KSD_RES_PROB_RET_RES_UNEXP: return MFW_SS_RES_PROB_RET_RES_UNEXP;
case KSD_RES_PROB_MISTYPED_PAR: return MFW_SS_RES_PROB_MISTYPED_PAR;
case KSD_ERR_PROB_UNRECOG_INV_ID: return MFW_SS_ERR_PROB_UNRECOG_INV_ID;
case KSD_ERR_PROB_RET_ERR_UNEXP: return MFW_SS_ERR_PROB_RET_ERR_UNEXP;
case KSD_ERR_PROB_UNRECOG_ERR: return MFW_SS_ERR_PROB_UNRECOG_ERR;
case KSD_ERR_PROB_UNEXP_ERR: return MFW_SS_ERR_PROB_UNEXP_ERR;
case KSD_ERR_PROB_MISTYPED_PAR: return MFW_SS_ERR_PROB_MISTYPED_PAR;
case KSD_ERR_FATAL_INV_RESULT: return MFW_SS_ERR_FATAL_INV_RESULT;
case KSD_ERR_FATAL_CCD_DEC: return MFW_SS_ERR_FATAL_CCD_DEC;
case KSD_ERR_FATAL_SS_ENT: return MFW_SS_ERR_FATAL_SS_ENT;
default: return MFW_SS_ERR_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_decode_imei |
+--------------------------------------------------------------------+
PURPOSE : convert imei (packed bcd to ASCII)
*/
void ss_decode_imei(T_ACI_KSIR *ksStat)
{
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
memset(imei_info, 0, sizeof(T_MFW_IMEI));
imei_info->imei_number[0] = ( ksStat->ir.rKSIMEI.tac1 & 0xF0 ) >> 4 | 0x30;
imei_info->imei_number[1] = ( ksStat->ir.rKSIMEI.tac1 ) & 0x0F | 0x30;
imei_info->imei_number[2] = ( ksStat->ir.rKSIMEI.tac2 & 0xF0 ) >> 4 | 0x30;
imei_info->imei_number[3] = ( ksStat->ir.rKSIMEI.tac2 ) & 0x0F | 0x30;
imei_info->imei_number[4] = ( ksStat->ir.rKSIMEI.tac3 & 0xF0 ) >> 4 | 0x30;
imei_info->imei_number[5] = ( ksStat->ir.rKSIMEI.tac3 ) & 0x0F | 0x30;
imei_info->imei_number[6] = ( ksStat->ir.rKSIMEI.fac & 0xF0 ) >> 4 | 0x30;
imei_info->imei_number[7] = ( ksStat->ir.rKSIMEI.fac ) & 0x0F | 0x30;
imei_info->imei_number[8] = ( ksStat->ir.rKSIMEI.snr1 & 0xF0 ) >> 4 | 0x30;
imei_info->imei_number[9] = ( ksStat->ir.rKSIMEI.snr1 ) & 0x0F | 0x30;
imei_info->imei_number[10] = ( ksStat->ir.rKSIMEI.snr2 & 0xF0 ) >> 4 | 0x30;
imei_info->imei_number[11] = ( ksStat->ir.rKSIMEI.snr2 ) & 0x0F | 0x30;
imei_info->imei_number[12] = ( ksStat->ir.rKSIMEI.snr3 & 0xF0 ) >> 4 | 0x30;
imei_info->imei_number[13] = ( ksStat->ir.rKSIMEI.snr3 ) & 0x0F | 0x30;
//a0876501 - Check byte comes before the Software version during display.
imei_info->imei_number[14] = ( ksStat->ir.rKSIMEI.cd & 0x0F ) | 0x30;
imei_info->imei_number[15] = ( ksStat->ir.rKSIMEI.svn & 0xF0 ) >> 4 | 0x30;
imei_info->imei_number[16] = ( ksStat->ir.rKSIMEI.svn ) & 0x0F | 0x30;
imei_info->imei_number[17] = '\0';
#else
memset(&imei_info, 0, sizeof(imei_info));
// Jul 05 2005 REF: CRR 22565 a0876501
// Fixed the issue of byte swapping.
imei_info.imei_number[0] = ( ksStat->ir.rKSIMEI.tac1 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[1] = ( ksStat->ir.rKSIMEI.tac1 ) & 0x0F | 0x30;
imei_info.imei_number[2] = ( ksStat->ir.rKSIMEI.tac2 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[3] = ( ksStat->ir.rKSIMEI.tac2 ) & 0x0F | 0x30;
imei_info.imei_number[4] = ( ksStat->ir.rKSIMEI.tac3 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[5] = ( ksStat->ir.rKSIMEI.tac3 ) & 0x0F | 0x30;
imei_info.imei_number[6] = ( ksStat->ir.rKSIMEI.fac & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[7] = ( ksStat->ir.rKSIMEI.fac ) & 0x0F | 0x30;
imei_info.imei_number[8] = ( ksStat->ir.rKSIMEI.snr1 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[9] = ( ksStat->ir.rKSIMEI.snr1 ) & 0x0F | 0x30;
imei_info.imei_number[10] = ( ksStat->ir.rKSIMEI.snr2 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[11] = ( ksStat->ir.rKSIMEI.snr2 ) & 0x0F | 0x30;
imei_info.imei_number[12] = ( ksStat->ir.rKSIMEI.snr3 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[13] = ( ksStat->ir.rKSIMEI.snr3 ) & 0x0F | 0x30;
//a0876501 - Check byte comes before the Software version during display.
imei_info.imei_number[14] = ( ksStat->ir.rKSIMEI.cd & 0x0F ) | 0x30;
imei_info.imei_number[15] = ( ksStat->ir.rKSIMEI.svn & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[16] = ( ksStat->ir.rKSIMEI.svn ) & 0x0F | 0x30;
imei_info.imei_number[17] = '\0';
TRACE_EVENT_P8("ss_decode_imei IMEI: TAC %1c%1c%1c%1c%1c%1c%1c%1c",
imei_info.imei_number[0], imei_info.imei_number[1], imei_info.imei_number[2], imei_info.imei_number[3],
imei_info.imei_number[4], imei_info.imei_number[5], imei_info.imei_number[6], imei_info.imei_number[7]);
TRACE_EVENT_P6("ss_decode_imei IMEI: SNR %1c%1c%1c%1c%1c%1c",
imei_info.imei_number[8], imei_info.imei_number[9], imei_info.imei_number[10], imei_info.imei_number[11],
imei_info.imei_number[12], imei_info.imei_number[13]);
TRACE_EVENT_P4("ss_decode_imei IMEI: SV CD %1c%1c%1c%1c",
imei_info.imei_number[14], imei_info.imei_number[15], imei_info.imei_number[16],imei_info.imei_number[17]);
#endif
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : getCdByteFromImei |
+--------------------------------------------------------------------+
PURPOSE : Get CD byte from IMEI.
// July 23, 2005 REF : MMI-22565 - a0876501
*/
UBYTE getCdByteFromImei(UBYTE *imei)
{
T_ACI_IMEI aci_imei;
// July 23, 2005 REF : MMI-22565 - a0876501
// For calculating the Cd byte, copy the buffer contents.
aci_imei.tac1 = imei[0];
aci_imei.tac2 = imei[1];
aci_imei.tac3 = imei[2];
aci_imei.fac = imei[3];
aci_imei.snr1 = imei[4];
aci_imei.snr2 = imei[5];
aci_imei.snr3 = imei[6];
aci_imei.svn = imei[7];
#ifndef NEPTUNE_BOARD
return(cmhSS_getCdFromImei(&aci_imei));
#endif
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: rAT_PercentKSIR |
+--------------------------------------------------------------------+
PURPOSE : Network response for key sequences
*/
void rAT_PercentKSIR ( T_ACI_KSIR *ksStat)
{
UBYTE idx;
T_MFW_TELECOM *p_tele;
T_MFW_FEATURE *p_feat;
T_MFW_SRV_GROUP *p_srv;
TRACE_FUNCTION("rAT_PercentKSIR()");
TRACE_EVENT_P1("ksStat->ksdCmd %d", ksStat->ksdCmd);
switch (ksStat->ksdCmd)
{
case KSD_CMD_CB:
TRACE_EVENT("KSD_CMD_CB");
TRACE_EVENT_P1("ksStat->ir.rKSCB.ssCd %d", ksStat->ir.rKSCB.ssCd);
TRACE_EVENT_P1("ksStat->ir.rKSCB.opCd %d", ksStat->ir.rKSCB.opCd);
TRACE_EVENT_P1("ksStat->ir.rKSCB.ssErr %d", ksStat->ir.rKSCB.ssErr);
TRACE_EVENT_P1("ksStat->ir.rKSCB.c_cbInfoLst %d", ksStat->ir.rKSCB.c_cbInfoLst);
if (ksStat->ir.rKSCB.c_cbInfoLst)
{
int i;
for (i = 0; i < ksStat->ir.rKSCB.c_cbInfoLst; i++)
{
TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].bsTp %d", i, ksStat->ir.rKSCB.cbInfoLst[i].bsTp);
TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].bsCd %d", i, ksStat->ir.rKSCB.cbInfoLst[i].bsCd);
TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].ssSt %d", i, ksStat->ir.rKSCB.cbInfoLst[i].ssSt);
}
}
p_tele = (T_MFW_TELECOM *) ssLstBuf;
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
cb_cnf = (T_MFW_SS_CB_CNF*)mfwAlloc(sizeof(T_MFW_SS_CB_CNF));
if(NULL != cb_cnf)
{
TRACE_EVENT_P2("Mem Aloc for cb_cnf = %x Size = %d",cb_cnf,sizeof(T_MFW_SS_CB_CNF));
cb_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCB.ssCd);
cb_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCB.opCd);
cb_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCB.ssErr);
cb_cnf->ss_telecom_list = p_tele;
}
else
return;
#else
cb_cnf.ss_code = (T_MFW_SS_CODES) ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCB.ssCd);
cb_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCB.opCd);
cb_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCB.ssErr);
cb_cnf.ss_telecom_list = p_tele;
#endif
for( idx = 0;
idx < ksStat->ir.rKSCB.c_cbInfoLst AND
idx < MFW_MAX_TELE_NR;
idx++, p_tele++ )
{
p_tele->ss_telecom_type = ksStat->ir.rKSCB.
cbInfoLst[idx].bsTp;
p_tele->ss_telecom_service = ksStat->ir.rKSCB.
cbInfoLst[idx].bsCd;
p_tele->ss_status = ksStat->ir.rKSCB.
cbInfoLst[idx].ssSt;
}
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
if(NULL != cb_cnf)
cb_cnf->ss_telecom_count = idx;
#else
cb_cnf.ss_telecom_count = idx;
#endif
break;
case KSD_CMD_CF:
TRACE_EVENT("KSD_CMD_CF");
TRACE_EVENT_P1("ksStat->ir.rKSCF.ssCd %d", ksStat->ir.rKSCF.ssCd);
TRACE_EVENT_P1("ksStat->ir.rKSCF.opCd %d", ksStat->ir.rKSCF.opCd);
TRACE_EVENT_P1("ksStat->ir.rKSCF.ssErr %d", ksStat->ir.rKSCF.ssErr);
TRACE_EVENT_P1("ksStat->ir.rKSCF.c_cfFeatLst %d", ksStat->ir.rKSCF.c_cfFeatLst);
if (ksStat->ir.rKSCF.c_cfFeatLst)
{
int i;
for (i = 0; i < ksStat->ir.rKSCF.c_cfFeatLst; i++)
{
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].bsTp %d", i, ksStat->ir.rKSCF.cfFeatLst[i].bsTp);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].bsCd %d", i, ksStat->ir.rKSCF.cfFeatLst[i].bsCd);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].ssSt %d", i, ksStat->ir.rKSCF.cfFeatLst[i].ssSt);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].num %s", i, ksStat->ir.rKSCF.cfFeatLst[i].num);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].ton 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].ton);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].npi 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].npi);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].sub %s", i, ksStat->ir.rKSCF.cfFeatLst[i].sub);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].tos 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].tos);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].oe 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].oe);
TRACE_EVENT_P2("ksStat->ir.rKSCF.cfFeatLst[%d].time 0x%02X", i, ksStat->ir.rKSCF.cfFeatLst[i].time);
}
}
p_feat = (T_MFW_FEATURE *) ssLstBuf;
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
cf_cnf = (T_MFW_SS_CF_CNF*)mfwAlloc(sizeof(T_MFW_SS_CF_CNF));
if(NULL != cf_cnf)
{
TRACE_EVENT_P2("Mem Loc = %x, allocates size = %d",cf_cnf,sizeof(T_MFW_SS_CF_CNF));
cf_cnf->ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCF.ssCd);
cf_cnf->ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCF.opCd);
cf_cnf->ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCF.ssErr);
cf_cnf->ss_feature_list = p_feat;
}
#else
cf_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCF.ssCd);
cf_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCF.opCd);
cf_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCF.ssErr);
cf_cnf.ss_feature_list = p_feat;
#endif
for( idx = 0;
idx < ksStat->ir.rKSCF.c_cfFeatLst AND
idx < MFW_MAX_FEAT_NR;
idx++, p_feat++ )
{
p_feat->ss_telecom_type = ksStat->ir.rKSCF.
cfFeatLst[idx].bsTp;
p_feat->ss_telecom_service = ksStat->ir.rKSCF.
cfFeatLst[idx].bsCd;
p_feat->ss_status = ksStat->ir.rKSCF.cfFeatLst[idx].ssSt;
p_feat->ss_numbering_type = phb_cvtTon(ksStat->ir.rKSCF.
cfFeatLst[idx].ton);
p_feat->ss_numbering_plan = (UBYTE)phb_cvtNpi(ksStat->ir.rKSCF.
cfFeatLst[idx].npi);
strncpy((char *)p_feat->ss_forwarded_to_number,
(char *)ksStat->ir.rKSCF.cfFeatLst[idx].num,
MFW_SS_NUM_LEN);
strncpy((char *)p_feat->ss_forwarded_to_subaddress,
(char *)ksStat->ir.rKSCF.cfFeatLst[idx].sub,
MFW_SS_SUBADR_LEN);
p_feat->ss_no_reply_condition_time = ksStat->ir.rKSCF.
cfFeatLst[idx].time;
}
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
if(NULL != cf_cnf)
cf_cnf->ss_feature_count = idx;
#else
cf_cnf.ss_feature_count = idx;
#endif
TRACE_EVENT("rat_percentksir->KSD_CMD_CF");
if (ksStat->srcId != CMD_SRC_LCL)
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
{
ss_signal(E_SS_CF_ICN_UPD,cf_cnf);
}
#else
ss_signal(E_SS_CF_ICN_UPD, &cf_cnf);
#endif
break;
case KSD_CMD_CL:
TRACE_EVENT("KSD_CMD_CL");
TRACE_EVENT_P1("ksStat->ir.rKSCL.ssCd %d", ksStat->ir.rKSCL.ssCd);
TRACE_EVENT_P1("ksStat->ir.rKSCL.opCd %d", ksStat->ir.rKSCL.opCd);
TRACE_EVENT_P1("ksStat->ir.rKSCL.ssErr %d", ksStat->ir.rKSCL.ssErr);
TRACE_EVENT_P1("ksStat->ir.rKSCL.ssSt %d", ksStat->ir.rKSCL.ssSt);
TRACE_EVENT_P1("ksStat->ir.rKSCL.mode %d", ksStat->ir.rKSCL.mode);
TRACE_EVENT_P1("ksStat->ir.rKSCL.clirOpt %d", ksStat->ir.rKSCL.clirOpt);
TRACE_EVENT_P1("ksStat->ir.rKSCL.ovrdCtg %d", ksStat->ir.rKSCL.ovrdCtg);
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
cli_cnf = (T_MFW_SS_CLI_CNF*)mfwAlloc(sizeof(T_MFW_SS_CLI_CNF));
if(NULL != cli_cnf)
{
cli_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCL.ssCd);
cli_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCL.opCd);
cli_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCL.ssErr);
cli_cnf->ss_status = ksStat->ir.rKSCL.ssSt;
cli_cnf->ss_clir_option = ss_cvtCLStatus(ksStat->ir.rKSCL.clirOpt);
cli_cnf->ss_ovrd_ctgry = ss_cvtCLOvrd(ksStat->ir.rKSCL.ovrdCtg);
}
#else
cli_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCL.ssCd);
cli_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCL.opCd);
cli_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCL.ssErr);
cli_cnf.ss_status = ksStat->ir.rKSCL.ssSt;
cli_cnf.ss_clir_option = (T_MFW_SS_ERROR)ss_cvtCLStatus((T_ACI_KSD_CLIR_OP)ksStat->ir.rKSCL.clirOpt);
cli_cnf.ss_ovrd_ctgry = (T_MFW_OV_CTGRY)ss_cvtCLOvrd((T_ACI_KSD_OVRD_CTG)ksStat->ir.rKSCL.ovrdCtg);
#endif
break;
case KSD_CMD_CW:
TRACE_EVENT("KSD_CMD_CW");
TRACE_EVENT_P1("ksStat->ir.rKSCW.ssCd %d", ksStat->ir.rKSCW.ssCd);
TRACE_EVENT_P1("ksStat->ir.rKSCW.opCd %d", ksStat->ir.rKSCW.opCd);
TRACE_EVENT_P1("ksStat->ir.rKSCW.ssErr %d", ksStat->ir.rKSCW.ssErr);
TRACE_EVENT_P1("ksStat->ir.rKSCW.ssSt %d", ksStat->ir.rKSCW.ssSt);
TRACE_EVENT_P1("ksStat->ir.rKSCW.c_cwBSGLst %d", ksStat->ir.rKSCW.c_cwBSGLst);
if (ksStat->ir.rKSCW.c_cwBSGLst)
{
int i;
for (i = 0; i < ksStat->ir.rKSCW.c_cwBSGLst; i++)
{
TRACE_EVENT_P2("ksStat->ir.rKSCW.cwBSGLst[%d].bsTp %d", i, ksStat->ir.rKSCW.cwBSGLst[i].bsTp);
TRACE_EVENT_P2("ksStat->ir.rKSCW.cwBSGLst[%d].bsCd %d", i, ksStat->ir.rKSCW.cwBSGLst[i].bsCd);
}
}
p_srv = (T_MFW_SRV_GROUP *) ssLstBuf;
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
cw_cnf = (T_MFW_SS_CW_CNF*)mfwAlloc(sizeof(T_MFW_SS_CW_CNF));
if(cw_cnf != NULL)
{
cw_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSCW.ssCd);
cw_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSCW.opCd);
cw_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSCW.ssErr);
cw_cnf->ss_status = ksStat->ir.rKSCW.ssSt;
cw_cnf->ss_service_list = p_srv;
}
#else
cw_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSCW.ssCd);
cw_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSCW.opCd);
cw_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSCW.ssErr);
cw_cnf.ss_status = ksStat->ir.rKSCW.ssSt;
cw_cnf.ss_service_list = p_srv;
#endif
for( idx = 0;
idx < ksStat->ir.rKSCW.c_cwBSGLst AND
idx < MFW_MAX_SRV_NR;
idx++, p_srv++ )
{
p_srv->ss_telecom_type = ksStat->ir.rKSCW.
cwBSGLst[idx].bsTp;
p_srv->ss_telecom_service = ksStat->ir.rKSCW.
cwBSGLst[idx].bsCd;
}
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
if(NULL != cw_cnf)
cw_cnf->ss_service_count = idx;
#else
cw_cnf.ss_service_count = idx;
#endif
break;
case KSD_CMD_PWD:
TRACE_EVENT("KSD_CMD_PWD");
TRACE_EVENT_P1("ksStat->ir.rKSPW.ssCd %d", ksStat->ir.rKSPW.ssCd);
TRACE_EVENT_P1("ksStat->ir.rKSPW.opCd %d", ksStat->ir.rKSPW.opCd);
TRACE_EVENT_P1("ksStat->ir.rKSPW.ssErr %d", ksStat->ir.rKSPW.ssErr);
TRACE_EVENT_P1("ksStat->ir.rKSPW.newPwd %s", ksStat->ir.rKSPW.newPwd);
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
pw_cnf = (T_MFW_SS_PW_CNF*)mfwAlloc(sizeof(T_MFW_SS_PW_CNF));
if( NULL != pw_cnf)
{
pw_cnf->ss_code = ss_cvtSCode(ksStat->ir.rKSPW.ssCd);
pw_cnf->ss_category = ss_cvtOCode(ksStat->ir.rKSPW.opCd);
pw_cnf->ss_error = ss_cvtErrCode(ksStat->ir.rKSPW.ssErr);
strncpy( (char *)pw_cnf->ss_new_pwd, (char *)ksStat->ir.rKSPW.newPwd,
MFW_SS_PWD_LEN);
}
#else
pw_cnf.ss_code = (T_MFW_SS_CODES)ss_cvtSCode((T_ACI_KSD_SS)ksStat->ir.rKSPW.ssCd);
pw_cnf.ss_category = (T_MFW_SS_CATEGORY)ss_cvtOCode((T_ACI_KSD_OP)ksStat->ir.rKSPW.opCd);
pw_cnf.ss_error = (T_MFW_SS_ERROR)ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSPW.ssErr);
strncpy( (char *)pw_cnf.ss_new_pwd, (char *)ksStat->ir.rKSPW.newPwd,
MFW_SS_PWD_LEN);
#endif
break;
case KSD_CMD_IMEI:
TRACE_EVENT("KSD_CMD_IMEI");
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac1 %d", ksStat->ir.rKSIMEI.tac1);
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac2 %d", ksStat->ir.rKSIMEI.tac2);
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.tac3 %d", ksStat->ir.rKSIMEI.tac3);
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.fac %d", ksStat->ir.rKSIMEI.fac);
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr1 %d", ksStat->ir.rKSIMEI.snr1);
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr2 %d", ksStat->ir.rKSIMEI.snr2);
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.snr3 %d", ksStat->ir.rKSIMEI.snr3);
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.svn %d", ksStat->ir.rKSIMEI.svn);
TRACE_EVENT_P1("ksStat->ir.rKSIMEI.cd %d", ksStat->ir.rKSIMEI.cd);
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
imei_info = (T_MFW_IMEI*)mfwAlloc(sizeof(T_MFW_IMEI));
if( NULL != imei_info)
{
#endif
ss_decode_imei(ksStat);
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
imei_info->error = MFW_SS_NO_ERROR;
ss_signal(E_SS_IMEI, imei_info);
}
#else
imei_info.error = MFW_SS_NO_ERROR;
ss_signal(E_SS_IMEI, &imei_info);
#endif
break;
case KSD_CMD_USSD:
TRACE_EVENT("KSD_CMD_USSD");
TRACE_EVENT_P1("ksStat->ir.rKSUS.ussd %s", ksStat->ir.rKSUS.ussd);
TRACE_EVENT_P1("ksStat->ir.rKSUS.dcs 0x%02X", ksStat->ir.rKSUS.dcs);
TRACE_EVENT_P1("ksStat->ir.rKSUS.mode %d", ksStat->ir.rKSUS.mode);
TRACE_EVENT_P1("ksStat->ir.rKSUS.ssErr %d", ksStat->ir.rKSUS.ssErr);
memset(&ussd_info, 0, sizeof(ussd_info));
ussd_info.len = strlen((char *)ksStat->ir.rKSUS.ussd);
strcpy((char*)ussd_info.ussd, (char *)ksStat->ir.rKSUS.ussd);
ussd_info.dcs = MFW_ASCII;
ussd_info.error = ss_cvtErrCode((T_ACI_KSD_ERR)ksStat->ir.rKSUS.ssErr);
break;
default:
TRACE_EVENT("default");
break;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_command_info |
+--------------------------------------------------------------------+
PURPOSE : Notify for send a SS string from ACI
*/
void ss_command_info(T_ACI_CLOG* cmd)
{
// Apr 06 2005 REF: CRR 29989 xpradipg
// the variable is made local since the scope lies within this function
#ifdef FF_MMI_OPTIM
T_MFW_SS_RES ss_res;
#endif
TRACE_FUNCTION("ss_command_info()");
if (cmd->cmdPrm.sCFUN.srcId != CMD_SRC_LCL)
return;
switch (cmd->atCmd)
{
case KSD_CMD_CB:
ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCB.ssCd);
ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCB.opCd);
if( cmd->cmdPrm.sKSCB.pwd )
strncpy(ss_res.ppn, (char *)cmd->cmdPrm.sKSCB.pwd,
MAX_PWD_LEN);
else
ss_res.ppn[0] = 0;
ss_res.pwd[0] = 0;
ss_res.bs = cmd->cmdPrm.sKSCB.bsCd;
ss_res.time = 0;
ss_signal(E_SS_RES, &ss_res);
break;
case KSD_CMD_CF:
ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCF.ssCd);
ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCF.opCd);
ss_res.ppn[0] = 0;
ss_res.pwd[0] = 0;
ss_res.bs = cmd->cmdPrm.sKSCF.bsCd;
ss_res.time = cmd->cmdPrm.sKSCF.time;
ss_signal(E_SS_RES, &ss_res);
break;
case KSD_CMD_CW:
ss_res.type = SS_CW;
ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCW.opCd);
ss_res.ppn[0] = 0;
ss_res.pwd[0] = 0;
ss_res.bs = cmd->cmdPrm.sKSCW.bsCd;
ss_res.time = 0;
ss_signal(E_SS_RES, &ss_res);
break;
case KSD_CMD_PWD:
switch(cmd->cmdPrm.sKSPW.ssCd)
{
case KSD_SS_CCBS:
case KSD_SS_ALL_CBSS:
case KSD_SS_BOC:
case KSD_SS_BAOC:
case KSD_SS_BOIC:
case KSD_SS_BOICXH:
case KSD_SS_BIC:
case KSD_SS_BAIC:
case KSD_SS_BICRM:
/*NM 190602*/
case KSD_SS_ALL_SERV :
ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSPW.ssCd);
ss_res.category = SS_REGISTRATION;
if( cmd->cmdPrm.sKSPW.oldPwd )
strncpy(ss_res.ppn, (char *)cmd->cmdPrm.sKSPW.oldPwd,
MAX_PWD_LEN);
else
ss_res.ppn[0] = 0;
if( cmd->cmdPrm.sKSPW.newPwd )
strncpy(ss_res.pwd, (char *)cmd->cmdPrm.sKSPW.newPwd,
MAX_PWD_LEN);
else
ss_res.pwd[0] = 0;
ss_res.bs = 0;
ss_res.time = 0;
ss_signal(E_SS_RES, &ss_res);
break;
case KSD_SS_PIN1:
pwd_flag = 1;
sim_pin_ident(MFW_SIM_PIN1);
break;
case KSD_SS_PIN2:
pwd_flag = 1;
sim_pin_ident(MFW_SIM_PIN2);
break;
}
break;
case KSD_CMD_UBLK:
switch(cmd->cmdPrm.sKSPW.ssCd)
{
case KSD_SS_PIN1:
pwd_flag = 1;
sim_pin_ident(MFW_SIM_PUK1);
break;
case KSD_SS_PIN2:
pwd_flag = 1;
sim_pin_ident(MFW_SIM_PUK2);
break;
}
break;
case KSD_CMD_CL:
ss_res.type = ss_cvtSCode((T_ACI_KSD_SS)cmd->cmdPrm.sKSCL.ssCd);
ss_res.category = ss_cvtOCode((T_ACI_KSD_OP)cmd->cmdPrm.sKSCL.opCd);
ss_res.ppn[0] = 0;
ss_res.pwd[0] = 0;
ss_res.bs = 0;
ss_res.time = 0;
ss_signal(E_SS_RES, &ss_res);
break;
case KSD_CMD_USSD:
memset(&ussd_info, 0, sizeof(ussd_info));
if( cmd->cmdPrm.sKSUS.ussd )
{
ussd_info.len = strlen((char *)cmd->cmdPrm.sKSUS.ussd);
strcpy((char*)ussd_info.ussd, (char *)cmd->cmdPrm.sKSUS.ussd);
}
else
ussd_info.ussd[0] = 0;
ussd_info.dcs = MFW_ASCII;
//PATCH TB 1509
ss_res.type = SS_USSD;
ss_res.category = SS_CTG_UNKNOWN;
ss_res.ppn[0] = 0;
ss_res.pwd[0] = 0;
ss_res.bs = 0;
ss_res.time = 0;
ss_signal(E_SS_RES, &ss_res);
//END PATCH TB
break;
case AT_CMD_CUSD:
memset(&ussd_info, 0, sizeof(ussd_info));
ussd_info.len = cmd->cmdPrm.sCUSD.str->len;
memcpy((char*)ussd_info.ussd, cmd->cmdPrm.sCUSD.str->data, cmd->cmdPrm.sCUSD.str->len);
ussd_info.dcs = (T_MFW_DCS)cmd->cmdPrm.sCUSD.dcs;
/* SPR#CQ3204 -JVJ - USSD call back sent to MMI */
ss_res.type = SS_USSD;
ss_res.category = SS_CTG_UNKNOWN;
ss_res.ppn[0] = 0;
ss_res.pwd[0] = 0;
ss_res.bs = 0;
ss_res.time = 0;
ss_signal(E_SS_RES, &ss_res);
/* SPR#CQ3204 -JVJ */
break;
default:
break;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_ok_string |
+--------------------------------------------------------------------+
PURPOSE : Send of SS string is successful.
*/
void ss_ok_string(T_ACI_AT_CMD cmdId)
{
TRACE_FUNCTION("ss_ok_string()");
switch (cmdId)
{
case KSD_CMD_CB:
// Apr 06 2005 REF: CRR 29989 xpradipg
// free the allocated memory once the ss_signal() execution is done
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_CB");
if(cb_cnf)
{
ss_signal(E_SS_CB_CNF, cb_cnf);
mfwFree((U8*)cb_cnf, sizeof(T_MFW_SS_CB_CNF));
}
#else
ss_signal(E_SS_CB_CNF, &cb_cnf);
#endif
break;
case KSD_CMD_CF:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_CF");
if(cf_cnf)
{
ss_signal(E_SS_CF_CNF, cf_cnf);
mfwFree((U8*)cf_cnf, sizeof(T_MFW_SS_CF_CNF));
}
#else
ss_signal(E_SS_CF_CNF, &cf_cnf);
#endif
break;
case KSD_CMD_CW:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_CW");
if(cw_cnf)
{
ss_signal(E_SS_CW_CNF, cw_cnf);
mfwFree((U8*)cw_cnf, sizeof(T_MFW_SS_CW_CNF));
}
#else
ss_signal(E_SS_CW_CNF, &cw_cnf);
#endif
break;
case KSD_CMD_PWD:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_PW");
if(pw_cnf)
{
if (!pwd_flag)
ss_signal(E_SS_GET_PW, pw_cnf);
mfwFree((U8*)pw_cnf,sizeof(T_MFW_SS_PW_CNF));
}
#else
if (!pwd_flag)
ss_signal(E_SS_GET_PW, &pw_cnf);
#endif
if (pwd_flag == 1)
{
pwd_flag = 0;
sim_ok_cpinc();
}
break;
case KSD_CMD_UBLK:
sim_ss_unblock(SIM_UBLK_OK, CME_ERR_NotPresent);
break;
case KSD_CMD_CL:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_CLI");
if(cli_cnf)
{
ss_signal(E_SS_CLI_CNF,(void*) cli_cnf);
mfwFree((U8*)cli_cnf, sizeof(T_MFW_SS_CLI_CNF));
}
#else
ss_signal(E_SS_CLI_CNF,&cli_cnf);
#endif
break;
case KSD_CMD_IMEI:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
if( imei_info)
{
imei_info->error = MFW_SS_NO_ERROR;
ss_signal(E_SS_IMEI, imei_info);
mfwFree((U8*)imei_info,sizeof(T_MFW_IMEI));
}
#else
imei_info.error = MFW_SS_NO_ERROR;
ss_signal(E_SS_IMEI, &imei_info);
#endif
break;
default:
break;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_error_string |
+--------------------------------------------------------------------+
PURPOSE : Send of SS string is failed.
*/
void ss_error_string(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR reason)
{
TRACE_FUNCTION("ss_error_string()");
switch (cmdId)
{
case KSD_CMD_CB:
// Apr 06 2005 REF: CRR 29989 xpradipg
// deallocation occurs either in ok/ error since the response is always is
// either one of them
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_CB");
if(cb_cnf)
{
ss_signal(E_SS_CB_CNF, cb_cnf);
mfwFree((U8*)cb_cnf,sizeof(T_MFW_SS_CB_CNF));
}
#else
ss_signal(E_SS_CB_CNF, &cb_cnf);
#endif
break;
case KSD_CMD_CF:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_CF");
if(cf_cnf)
{
ss_signal(E_SS_CF_CNF, cf_cnf);
mfwFree((U8*)cf_cnf,sizeof(T_MFW_SS_CF_CNF));
TRACE_FUNCTION("memory freed for cf_cnf");
}
#else
ss_signal(E_SS_CF_CNF, &cf_cnf);
#endif
break;
case KSD_CMD_CW:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_CW");
if(cw_cnf)
{
ss_signal(E_SS_CW_CNF, cw_cnf);
mfwFree((U8*)E_SS_CW_CNF,sizeof(T_MFW_SS_CW_CNF));
}
#else
ss_signal(E_SS_CW_CNF, &cw_cnf);
#endif
break;
case KSD_CMD_PWD:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_PW");
if(pw_cnf)
{
if (!pwd_flag)
ss_signal(E_SS_GET_PW, pw_cnf);
mfwFree((U8*)pw_cnf,sizeof(T_MFW_SS_PW_CNF));
}
#else
if (!pwd_flag)
ss_signal(E_SS_GET_PW, &pw_cnf);
#endif
if (pwd_flag == 1)
{
pwd_flag = 0;
sim_error_cpinc();
}
break;
case KSD_CMD_UBLK:
sim_ss_unblock(SIM_UBLK_ERROR, reason);
break;
case KSD_CMD_CL:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
TRACE_EVENT("KSD_CMD_CLI");
if(cli_cnf)
{
ss_signal(E_SS_CLI_CNF, cli_cnf);
mfwFree((U8*)cli_cnf,sizeof(T_MFW_SS_CLI_CNF));
}
#else
ss_signal(E_SS_CLI_CNF,&cli_cnf);
#endif
case KSD_CMD_IMEI:
// Apr 06 2005 REF: CRR 29989 xpradipg
#ifdef FF_MMI_OPTIM
if( imei_info)
{
imei_info->error = MFW_SS_ERROR;
ss_signal(E_SS_IMEI, imei_info);
mfwFree((U8*)imei_info,sizeof(T_MFW_IMEI));
}
#else
imei_info.error = MFW_SS_ERROR;
ss_signal(E_SS_IMEI, &imei_info);
#endif
break;
default:
break;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_set_clck |
+--------------------------------------------------------------------+
PURPOSE : This function execute the facility lock command.
*/
T_MFW ss_set_clck(T_ACI_CLCK_FAC fac,
T_ACI_CLCK_MOD mode,
CHAR *passwd,
T_ACI_CLASS class_type,
UBYTE modul)
{
TRACE_EVENT("ss_set_clck()");
clck_flag = modul;
if (sAT_PlusCLCK(CMD_SRC_LCL, fac,mode, passwd, class_type) != AT_EXCT)
return MFW_SS_FAIL;
return MFW_SS_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_ok_clck |
+--------------------------------------------------------------------+
PURPOSE : The executing of the facility lock command is successful.
*/
void ss_ok_clck()
{
TRACE_FUNCTION("ss_ok_clck()");
switch (clck_flag)
{
case MFW_PHB:
phb_ok_clck();
break;
case MFW_SIM_CPIND:
sim_ok_cpind();
break;
case MFW_SIM_CPINE:
sim_ok_cpine();
break;
}
clck_flag = MFW_MODUL_UNKNOWN;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_error_clck |
+--------------------------------------------------------------------+
PURPOSE : The executing of the facility lock command is failed.
*/
void ss_error_clck()
{
TRACE_FUNCTION("ss_error_clck()");
switch (clck_flag)
{
case MFW_PHB:
phb_error_clck();
break;
case MFW_SIM_CPIND:
sim_error_cpind();
break;
case MFW_SIM_CPINE:
sim_error_cpine();
break;
}
clck_flag = MFW_MODUL_UNKNOWN;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_DMY |
| STATE : code ROUTINE: ss_send_ussd |
+--------------------------------------------------------------------+
PURPOSE : Send USSD string.
Note: ASCII is not allowed to use.
*/
T_MFW ss_send_ussd(T_MFW_SS_USSD *ussd_info)
{
T_ACI_USSD_DATA str;
T_ACI_RETURN res;
TRACE_FUNCTION("ss_send_ussd()");
if (!ussd_info->len OR !ussd_info->ussd)
return MFW_SS_FAIL;
if (ussd_info->dcs == MFW_ASCII)
return MFW_SS_FAIL;
if (ussd_info->len > MAX_USSD_LEN)
{
str.len = MAX_USSD_LEN;
memcpy(str.data, ussd_info->ussd, MAX_USSD_LEN);
}
else
{
str.len = ussd_info->len;
memcpy(str.data, ussd_info->ussd, ussd_info->len);
}
res = sAT_PlusCUSD(CMD_SRC_LCL, &str, (SHORT)ussd_info->dcs);
if ((res != AT_EXCT) AND (res != AT_CMPL))
return MFW_SS_FAIL;
return MFW_SS_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_DMY |
| STATE : code ROUTINE: rAT_PlusCUSD |
+--------------------------------------------------------------------+
PURPOSE : Notify or response for USSD from ACI
*/
void rAT_PlusCUSD(T_ACI_CUSD_MOD m, T_ACI_USSD_DATA *ussd, SHORT dcs)
{
TRACE_FUNCTION("rAT_PlusCUSD()");
//Dec 16, 2005 OMAPS00053316 x0018858
//Added the NullCheck to ensure that we dont access the elements when the pointer is NULL.
//Begin OMAPS00053316
if(ussd != NULL)
{
ussd_info.len = ussd->len;
memcpy(ussd_info.ussd, ussd->data, sizeof(ussd_info.ussd));
}
else
{
ussd_info.len = 0;
memset(ussd_info.ussd, 0x00, sizeof(ussd_info.ussd));
}
//End OMAPS00053316
ussd_info.dcs = (T_MFW_DCS)dcs;
ussd_info.error = MFW_SS_NO_ERROR;
if (m == CUSD_MOD_YesActReq)
ss_signal(E_SS_USSD_REQ, &ussd_info);
if (m == CUSD_MOD_NoActReq)
ss_signal(E_SS_USSD_CNF, &ussd_info);
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_DMY |
| STATE : code ROUTINE: ss_ok_ussd |
+--------------------------------------------------------------------+
PURPOSE : USSD process is successful.
*/
void ss_ok_ussd(T_ACI_AT_CMD cmdId)
{
TRACE_FUNCTION("ss_ok_ussd()");
if (cmdId == KSD_CMD_USSD)
{
ussd_info.error = MFW_SS_NO_ERROR;
ss_signal(E_SS_USSD_CNF, &ussd_info);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_error_ussd |
+--------------------------------------------------------------------+
PURPOSE : USSD process is failed.
*/
void ss_error_ussd(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR reason)
{
TRACE_FUNCTION("ss_error_ussd()");
// ussd_info.error = ss_cvtErrCode(reason);
ss_signal(E_SS_USSD_CNF, &ussd_info);
}
/*
+---------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_abort_transaction |
+---------------------------------------------------------------------+
PURPOSE : Abort executing of SS transaction
*/
T_MFW ss_abort_transaction(void)
{
TRACE_FUNCTION("ss_abort_transaction()");
if (sAT_Abort(CMD_SRC_LCL, AT_CMD_CUSD) EQ AT_CMPL)
return TRUE;
else
{
if (sAT_Abort(CMD_SRC_LCL, AT_CMD_D) EQ AT_CMPL)
return TRUE;
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_set_cug |
+--------------------------------------------------------------------+
PURPOSE : set parameter of close user group
*/
T_MFW_SS_RETURN ss_set_cug (T_MFW_SS_CUG_PARA *cug_param)
{
T_ACI_CCUG_MOD cug_mode = CCUG_MOD_NotPresent;
T_ACI_CCUG_IDX cug_index = CCUG_IDX_NotPresent;
T_ACI_CCUG_INFO cug_info = CCUG_INFO_NotPresent;
TRACE_FUNCTION("ss_set_cug()");
/* check cug mode */
switch(cug_param->mode)
{
case MFW_SS_CUG_TMP_DISABLE:
cug_mode = CCUG_MOD_DisableTmp;
break;
case MFW_SS_CUG_TMP_ENABLE:
cug_mode = CCUG_MOD_EnableTmp; /* enable to control cug info */
break;
default: /* ACI keep last valid value */
break;
}
/* check cug index */
switch(cug_param->index)
{
case MFW_SS_CUG_INDEX0:
cug_index = CCUG_IDX_0;
break;
case MFW_SS_CUG_INDEX1:
cug_index = CCUG_IDX_1;
break;
case MFW_SS_CUG_INDEX2:
cug_index = CCUG_IDX_2;
break;
case MFW_SS_CUG_INDEX3:
cug_index = CCUG_IDX_3;
break;
case MFW_SS_CUG_INDEX4:
cug_index = CCUG_IDX_4;
break;
case MFW_SS_CUG_INDEX5:
cug_index = CCUG_IDX_5;
break;
case MFW_SS_CUG_INDEX6:
cug_index = CCUG_IDX_6;
break;
case MFW_SS_CUG_INDEX7:
cug_index = CCUG_IDX_7;
break;
case MFW_SS_CUG_INDEX8:
cug_index = CCUG_IDX_8;
break;
case MFW_SS_CUG_INDEX9:
cug_index = CCUG_IDX_9;
break;
case MFW_SS_CUG_NO_INDEX:
cug_index = CCUG_IDX_No; /* preferred CUG taken from subscriber data */
break;
default: /* ACI keep last valid value */
break;
}
/* check cug info */
switch(cug_param->info)
{
case MFW_SS_CUG_SUPP_OA:
cug_info = CCUG_INFO_SuppOa; /* suppress outgoing access */
break;
case MFW_SS_CUG_SUPP_PREF:
cug_info = CCUG_INFO_SuppPrefCug; /* suppress preferential closed user group */
break;
case MFW_SS_CUG_SUPP_BOTH:
cug_info = CCUG_INFO_SuppBoth; /* suppress outgoing access and preferential cug */
break;
case MFW_SS_CUG_INFO_NO: /* no cug info */
cug_info = CCUG_INFO_No;
break;
default: /* ACI keep last valid value */
break;
}
if(sAT_PlusCCUG(CMD_SRC_LCL,cug_mode,cug_index,cug_info) EQ AT_CMPL) /* set in ACI cug parameters */
return MFW_SS_OK;
else
return MFW_SS_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_get_cug |
+--------------------------------------------------------------------+
PURPOSE : get parameter of close user group
*/
T_MFW_SS_RETURN ss_get_cug(T_MFW_SS_CUG_PARA *cug_param)
{
T_ACI_CCUG_MOD cug_mode;
T_ACI_CCUG_IDX cug_index;
T_ACI_CCUG_INFO cug_info;
cug_param->mode = MFW_SS_CUG_MODE_Not_Present;
cug_param->index = MFW_SS_CUG_INDEX_Not_Present;
cug_param->info = MFW_SS_CUG_INFO_Not_Present;
TRACE_FUNCTION("ss_get_cug()");
if(qAT_PlusCCUG(CMD_SRC_LCL,&cug_mode,&cug_index,&cug_info) NEQ AT_CMPL) /* get cug parameters of ACI */
return MFW_SS_FAIL;
else
{
cug_param->mode = (T_MFW_SS_CUG_MODE)cug_mode;
cug_param->index = (T_MFW_SS_CUG_INDEX)cug_index;
cug_param->info = (T_MFW_SS_CUG_INFO)cug_info;
return MFW_SS_OK;
}
}
//PATCH TB 1309
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_command_abort |
+--------------------------------------------------------------------+
PURPOSE :
*/
T_MFW ss_command_abort(void)
{
TRACE_FUNCTION ("ss_command_abort()");
// Abort SS transaction.
// Any SS AT_CMD will clear all SS (any) transaction(s)
if (sAT_Abort(CMD_SRC_LCL, AT_CMD_CUSD) == AT_CMPL)
return TRUE;
else
return FALSE;
}
//END PATCH TB
//CQ-16432 start
void ss_sat_passwdReqd(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR err)
{
TRACE_FUNCTION("ss_sat_passwdReqd");
ss_signal(E_SS_SAT_CPWD,&cmdId);
return;
}
//CQ-16432 end