FreeCalypso > hg > leo2moko-debug
diff g23m/condat/ms/src/mfw/mfw_sim.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/mfw/mfw_sim.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,3208 @@ +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) $Workfile:: mfw_sim.c $| +| $Author:: Vo $Revision:: 1 $| +| CREATED: 13.10.98 $Modtime:: 22.03.00 17:21 $| +| STATE : code | ++--------------------------------------------------------------------+ + + MODULE : MFW_SIM + + PURPOSE : This modul contains the functions for SIM management. + + + $History:: mfw_sim.c + + Feb 15, 2006 ER: OMAPS00065203 x0pleela + Description: Cingular Operator Name Prioritization implementation required + Solution: Incorporated review comments + Combined both checks for services 51 and 52 in rAT_PlusCFUNP + + Feb 09, 2006 ER: OMAPS00065203 x0pleela + Description: Cingular Operator Name Prioritization implementation required + Solution: Check for services 51 - OPL and 52 - PNN in function rAT_PlusCFUNP and + gEons_alloc_active is updated accordingly + + Nov 24, 2005 DR: OMAPS00045909 - Shashi Shekar B.S. + Description: Improve IMEI control mechanism + Solution : When MMI calls sAT_PLUSCFUN, if an IMEI invalid error is returned, + we will block on that screen & will not allow the user to browse menus further, + since the PS will not be booted at all!!! + + Nov 15,2005 DR : OMAPS00057280 - x0034700 + Description: Compilation Errors in Neptune build while integrating latest MMI Changes + Solution: Included the compilation FLAG "NEPTUNE_BOARD" for un wanted code for Neptune build + + Nov 03, 2005 DR: OMAPS00052032 - xpradipg + Description : Locosto: SIMP - integration of issues submitted by solDel on + ME Personalization - changes as per the new interfaces + Solution : The return value of sAT_PlusCLCK of AT_EXCT is handled and + a please wait screen is displayed until the response is recieved + + Nov 03, 2005 DR: OMAPS00050595 - xpradipg + Description: SIMP: If the SIM is blocked (by entering invalid PIN1), the user is + not able to unblock it even after entering the valid PUK1 + Solution : The global flag for SIM Personlaization PUK request was set even + for the SIM PUK request. This setting is removed. Also the condition + check has been done first for the global flag and then the rest of the + checks. + + Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg + Description: Integration changes required with new aci labe + Solution: changes to adopt to the new ACI label + + July 19, 2005 REF: CRR LOCOSTO-ENH-28173 xpradipg + Description: To provide MMI Support to enable/disable/change password and + query all the Personalization locks + Solution: Integration of the changes for the same provided by the soldel + team + + 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 $ + * * ***************** Version 43 ***************** + * User: MC Date: 14.11.02 Time: 10:40 + * Updated in $/BMI/Condat/MS/SRC/MFW + * Changed simlock functions into wrappers for aci_slock functions, and + * removed variables definitions and helper functions rendered obsolete. + * + * ***************** Version 43 ***************** + * User: Vo Date: 22.03.00 Time: 17:29 + * Updated in $/GSM/Condat/MS/SRC/MFW + * Add new parameter PIN type in structure T_MFW_SIM_STATUS to + * identify PIN type + * Change in SIM lock + * + * ***************** Version 42 ***************** + * User: Es Date: 2.03.00 Time: 16:18 + * Updated in $/GSM/Condat/MS/SRC/MFW + * use 'aci_delete()' instead of 'aci_ext_init()' to clear the + * primitive routing for mfw_sim. (because other routings may have to + * be preserved!) + * + * ***************** Version 41 ***************** + * User: Vo Date: 22.12.99 Time: 16:03 + * Updated in $/GSM/Condat/MS/SRC/MFW + * Remove maximum preferred PLMN records and used preferred PLMN + * records in local memory + * + * ***************** Version 40 ***************** + * User: Vo Date: 2.12.99 Time: 13:18 + * Updated in $/GSM/Condat/MS/SRC/MFW + * New: request of max/used perferred PLMN list + * + * ***************** Version 39 ***************** + * User: Vo Date: 17.11.99 Time: 11:37 + * Updated in $/GSM/Condat/MS/SRC/MFW + * Bug fix: de-personalisation for SIM lock + * New: SIM inserted + * + * ***************** Version 38 ***************** + * User: Vo Date: 21.10.99 Time: 13:26 + * Updated in $/GSM/Condat/MS/SRC/MFW + * add response of de-registration +| +| ***************** Version 37 ***************** +| User: Le Date: 11.10.99 Time: 16:27 +| Updated in $/GSM/Condat/MS/SRC/MFW +| +| ***************** Version 36 ***************** +| User: Le Date: 8.10.99 Time: 13:38 +| Updated in $/GSM/Condat/MS/SRC/MFW +| +| ***************** Version 35 ***************** +| User: Le Date: 4.10.99 Time: 10:33 +| Updated in $/GSM/Condat/MS/SRC/MFW + * + * ***************** Version 34 ***************** + * User: Es Date: 29.09.99 Time: 11:20 + * Updated in $/GSM/DEV/MS/SRC/MFW + * including CFUN_OK enhancement by AK, not fully implemented + * + * ***************** Version 33 ***************** + * User: Es Date: 16.09.99 Time: 16:56 + * Updated in $/GSM/DEV/MS/SRC/MFW + * reordered include statements due to addons in mfw_phb.h + * + * ***************** Version 32 ***************** + * User: Vo Date: 13.09.99 Time: 12:05 + * Updated in $/GSM/DEV/MS/SRC/MFW + * change comment + * + * ***************** Version 31 ***************** + * User: Vo Date: 12.09.99 Time: 15:32 + * Updated in $/GSM/DEV/MS/SRC/MFW + * Bug fix: change PIN + * Bug fix/New: SIM lock + * New: request of PIN status + * New: save preferred language + * New: read group identifier level 1 & 2 + * + * ***************** Version 30 ***************** + * User: Vo Date: 30.08.99 Time: 14:23 + * Updated in $/GSM/DEV/MS/SRC/MFW + * bug fix + * new function + * + * ***************** Version 29 ***************** + * User: Vo Date: 9.08.99 Time: 13:11 + * Updated in $/GSM/DEV/MS/SRC/MFW + * PIN/PUK count + * + * ***************** Version 28 ***************** + * User: Vo Date: 26.07.99 Time: 14:34 + * Updated in $/GSM/DEV/MS/SRC/MFW + * Move include file mfw_cb.h + * + * ***************** Version 27 ***************** + * User: Vo Date: 21.07.99 Time: 14:41 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 26 ***************** + * User: Vo Date: 16.07.99 Time: 13:50 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 25 ***************** + * User: Vo Date: 9.07.99 Time: 14:34 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 24 ***************** + * User: Vo Date: 2.07.99 Time: 19:03 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 23 ***************** + * User: Vo Date: 28.05.99 Time: 9:52 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 22 ***************** + * User: Vo Date: 31.03.99 Time: 14:09 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 21 ***************** + * User: Es Date: 15.03.99 Time: 18:21 + * Updated in $/GSM/DEV/MS/SRC/MFW + * recode + * + * ***************** Version 20 ***************** + * User: Vo Date: 25.02.99 Time: 16:47 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 19 ***************** + * User: Vo Date: 17.02.99 Time: 19:03 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 18 ***************** + * User: Vo Date: 12.02.99 Time: 18:05 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 17 ***************** + * User: Vo Date: 12.02.99 Time: 17:46 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 16 ***************** + * User: Vo Date: 9.02.99 Time: 14:54 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 15 ***************** + * User: Vo Date: 12.01.99 Time: 14:27 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 14 ***************** + * User: Es Date: 23.12.98 Time: 15:47 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 12 ***************** + * User: Es Date: 18.12.98 Time: 13:05 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 11 ***************** + * User: Vo Date: 17.12.98 Time: 14:31 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 10 ***************** + * User: Es Date: 8.12.98 Time: 16:53 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 8 ***************** + * User: Vo Date: 24.11.98 Time: 21:40 + * Updated in $/GSM/DEV/MS/SRC/MFW + * first successful compilation of MFW +| +| ***************** Version 6 ***************** +| User: Le Date: 11.11.98 Time: 13:35 +| Updated in $/GSM/DEV/MS/SRC/MFW +| +| ***************** Version 5 ***************** +| User: Le Date: 10.11.98 Time: 16:07 +| Updated in $/GSM/DEV/MS/SRC/MFW +| +| ***************** Version 4 ***************** +| User: Le Date: 10.11.98 Time: 11:08 +| Updated in $/GSM/DEV/MS/SRC/MFW +| +| ***************** Version 3 ***************** +| User: Le Date: 27.10.98 Time: 15:59 +| Updated in $/GSM/DEV/MS/SRC/MFW +| +| ***************** Version 2 ***************** +| User: Le Date: 21.10.98 Time: 16:20 +| Updated 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 "pei.h" +#include "custom.h" +#include "gsm.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif +#ifdef SIM_PERS +#include "p_sim.h" +#endif +#include "prim.h" +#include "message.h" +#include "prim.h" +#include "aci_cmh.h" +#include "psa.h" +#include "psa_sim.h" + +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + +#include "mfw_mfw.h" +#include "mfw_nm.h" +#include "mfw_sim.h" +#include "mfw_sima.h" +#include "mfw_simi.h" +#include "mfw_nmi.h" +#include "mfw_nma.h" +#include "mfw_phb.h" +#include "mfw_cm.h" +#include "mfw_cmi.h" +#include "mfw_acie.h" +#include "mfw_sms.h" +#include "mfw_smsi.h" +#include "mfw_win.h" + + +#include "ksd.h" +#include "psa.h" + +#if defined (FAX_AND_DATA) +#include "aci_fd.h" +#endif + +#include "cmh.h" +#include "phb.h" +#include "cmh_phb.h" + +#include "mfw_ss.h" +#include "mfw_ssi.h" + +#include "aci_ext_pers.h" /*MC, SPR 1351 include ACI simlock files*/ +#include "aci_slock.h" + +#ifdef SIM_TOOLKIT +#include "mfw_sat.h" +#endif + +extern BOOL sima_response_cb (ULONG opc, void * data); +extern void simDecodeIMSI (UBYTE *ci, UBYTE li, UBYTE *di); +static int simCommand (ULONG cmd, void *h); /* handle win commands */ +extern UBYTE mfw_IMSI []; /* expanded IMSI (ASCIIZ) */ + +#ifdef SIM_TOOLKIT +char mfwSATLPRefresh; +#endif + +// Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// required for the new compiler 2.54 +#ifdef SIM_PERS +T_ACI_CLCK_FAC mfw_simlock_return_lock_type(S16 lck); +T_MFW mfw_simlock_check_status(S16 lcktyp,int *max,int *curr); +int mfw_simlock_get_lock_status(S16 lcktyp); +int C_KEY_REQ = 0; +#endif + +static T_MFW_SIM_STATUS sim_status; +static T_MFW_SIM_CONFIG sim_config; +static int pin_flag; +static UBYTE pin_ident; + +static UBYTE sim_service_table [10]; /* SIM service table */ +static UBYTE sim_stat = SIM_NOT_ACTIVE; + +// Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// Fix for the wrong screens in PIN enable/disable/change password +UBYTE pin1_set = MFW_SIM_DISABLE; +UBYTE pin2_set = MFW_SIM_ENABLE; + +static BOOL sat_update = FALSE; + +static int pSlot; /* primitive handler slot */ + +CallbackCPRI mmi_cprs_cb; + +EXTERN MfwHdr * current_mfw_elem; +#if defined (WIN32) +/* + * Only for windows to check several SIM lock combinations + */ +UBYTE sim_lock_mode = 0; +#endif +UBYTE sim_lock_field = NOT_PRESENT_8BIT; /* type of sim lock field */ + +#ifdef SIM_PERS +EXTERN UBYTE gsim_status; +// Nov 03, 2005 DR: OMAPS00052032 - xpradipg +U8 sim_unlock_in_prog = FALSE; +#endif + + +//x0pleela 10 Feb, 2006 ER: OMAPS00065203 +EXTERN UBYTE gEons_alloc_active; /* EONS allocation and activation */ + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_init | ++--------------------------------------------------------------------+ + + PURPOSE : initialize SIM manager + +*/ + +int sim_init (void) +{ + +#ifdef PCM_2_FFS + T_PSPDF_SIMLCKEXT simlck; +#else + EF_SIMLCKEXT simlck; +#endif + + + TRACE_FUNCTION("sim_init()"); + + pin_flag = -1; + pin_ident = MFW_SIM_UNKNOWN; + + /* + * install prim handler + */ + pSlot = aci_create(sima_response_cb,NULL); + mfwCommand[MfwTypSim] = (MfwCb) simCommand; + + return TRUE; +} + + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_init_sim_insert | ++---------------------------------------------------------------------+ + + PURPOSE : initialize SIM manager + +*/ + +void sim_init_sim_insert() +{ +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_exit | ++--------------------------------------------------------------------+ + + PURPOSE : finalize SIM manager + +*/ + +void sim_exit (void) +{ + TRACE_FUNCTION("sim_exit()"); + + /* + * remove prim handler + */ + aci_delete(pSlot); + sim_stat = SIM_NOT_ACTIVE; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_create | ++--------------------------------------------------------------------+ + + PURPOSE : create SIM event handler + +*/ + +T_MFW_HND sim_create (MfwHnd hWin, MfwEvt event, MfwCb cbfunc) +{ + MfwHdr *hdr; + T_MFW_SIM *sim_para; + MfwHdr *insert_status =0; + + TRACE_FUNCTION("sim_create()"); + + hdr = (MfwHdr *) mfwAlloc(sizeof(MfwHdr)); + sim_para = (T_MFW_SIM *) mfwAlloc(sizeof(T_MFW_SIM)); + + if (!hdr || !sim_para) + { + TRACE_ERROR("ERROR: sim_create() Mem Alloc Failed."); + + if(hdr) + mfwFree((U8*)hdr,sizeof(MfwHdr)); + + if(sim_para) + mfwFree((U8*)sim_para,sizeof(T_MFW_SIM)); + + return 0; + } + sim_para->emask = event; + sim_para->handler = cbfunc; + + hdr->data = sim_para; + hdr->type = MfwTypSim; + + insert_status = mfwInsert((MfwHdr *) hWin,hdr); + + if(!insert_status) + { + TRACE_ERROR("ERROR: sim_create() Failed to Install Handler. "); + mfwFree((U8*)hdr,sizeof(MfwHdr)); + mfwFree((U8*)sim_para,sizeof(T_MFW_SIM)); + return 0; + } + return insert_status; + +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_delete | ++--------------------------------------------------------------------+ + + PURPOSE : delete SIM event handler + +*/ + +MfwRes sim_delete (MfwHnd h) +{ + TRACE_FUNCTION("sim_delete()"); + + if (!h || !((MfwHdr *) h)->data) + return MfwResIllHnd; + + if (!mfwRemove((MfwHdr *) h)) + return MfwResIllHnd; + + mfwFree((U8 *) ((MfwHdr *) h)->data,sizeof(T_MFW_SIM)); + mfwFree((U8 *) h,sizeof(MfwHdr)); + + return MfwResOk; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_signal | ++--------------------------------------------------------------------+ + + PURPOSE : Send a signal + +*/ + +void sim_signal (MfwEvt event, void *para) +{ + UBYTE temp = dspl_Enable(0); + TRACE_FUNCTION ("sim_signal()"); + + if (mfwSignallingMethod EQ 0) + { + if (mfwFocus) + if (sim_sign_exec(mfwFocus,event,para)) + { + dspl_Enable(temp); + return; + } + if (mfwRoot) + sim_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 (sim_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; + } + sim_sign_exec (mfwRoot, event, para); + } + dspl_Enable(temp); + return; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_sign_exec | ++--------------------------------------------------------------------+ + + PURPOSE : Send a signal if SIM management handler + +*/ + +int sim_sign_exec (MfwHdr *cur_elem, MfwEvt event, T_MFW_SIM_PARA *para) +{ + + TRACE_FUNCTION("sim_sign_exec()"); + + while (cur_elem) + { + if (cur_elem->type == MfwTypSim) + { + T_MFW_SIM *sim_data; + sim_data = (T_MFW_SIM *) cur_elem->data; + if (sim_data->emask & event) + { + sim_data->event = event; + switch (event) + { + case E_SIM_STATUS: + memcpy(&sim_data->para.status, + para,sizeof(T_MFW_SIM_STATUS)); + break; + /*MC CONQ5862, 13/06/02*, added new event*/ + case E_SIM_READ_CALLBACK: + memcpy(&sim_data->para.callback, + para,sizeof(T_MFW_READ_CALLBACK)); + break; + } + if (sim_data->handler) + { + // PATCH LE 06.06.00 + // store current mfw elem + current_mfw_elem = cur_elem; + // END PATCH LE 06.06.00 + if ((*(sim_data->handler))(sim_data->event, + (void *) &sim_data->para)) + return TRUE; + } + } + } + cur_elem = cur_elem->next; + } + + return FALSE; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_activate | ++--------------------------------------------------------------------+ + + PURPOSE : Start SIM card activation + +*/ + +void sim_activate (void) +{ + + T_ACI_RETURN cfun; + T_ACI_ERR_DESC cfun_err; + + TRACE_FUNCTION("sim_activate()"); + + /* + * Full functionality is used don´t reset the ME + */ + +// Nov 24, 2005, a0876501, DR: OMAPS00045909 + cfun = sAT_PlusCFUN(CMD_SRC_LCL,CFUN_FUN_Full,CFUN_RST_NotPresent); + + if (cfun EQ AT_FAIL) + { + cfun_err = qAT_ErrDesc(); + + if((cfun_err & 0x0000FFFF) EQ EXT_ERR_IMEICheck) + { + sim_stat = IMEI_NOT_VALID; + sim_status.sim_status = MFW_IMEI_NOT_VALID; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = 0; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_status.sim_status_type = MFW_SIM_UNKNOWN; + + sim_signal(E_SIM_STATUS,&sim_status); + } + } + else if (cfun NEQ AT_EXCT) + { + TRACE_ERROR("sAT_PlusCFUN error"); + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_spn_req | ++--------------------------------------------------------------------+ + + PURPOSE : Request service provider name + +*/ + +void sim_spn_req (void) +{ + T_EF_SPN spn; + + TRACE_FUNCTION("sim_spn_req()"); + + memset(&spn,0,sizeof(T_EF_SPN)); + + if (sim_check_service(17,sim_service_table) + EQ ALLOCATED_AND_ACTIVATED) + sim_read_sim(SIM_SPN,17,17); + else +#ifdef FF_2TO1_PS + nm_spn_cnf(CAUSE_SIM_ACCESS_PROHIBIT, &spn); +#else + nm_spn_cnf(SIM_CAUSE_ACCESS_PROHIBIT, &spn); +#endif + +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_ok_cfun | ++--------------------------------------------------------------------+ + + PURPOSE : Notify successful end of SIM card activation + +*/ + +void sim_ok_cfun (void) +{ + T_ACI_CFUN_FUN fun; + + TRACE_FUNCTION ("sim_ok_cfun()"); + + qAT_PlusCFUN( CMD_SRC_LCL, &fun ); + + if( fun EQ CFUN_FUN_Full ) + { + sim_stat = SIM_ACTIVE; + sim_status.sim_status = MFW_SIM_NO_PIN; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = 0; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_status.sim_status_type = pin_ident; + + pin_ident = MFW_SIM_UNKNOWN; + sim_signal(E_SIM_STATUS,&sim_status); + nm_activate(MFW_SIM_NO_PIN); + + pin1_set = MFW_SIM_DISABLE; + } + else if( fun EQ CFUN_FUN_Minimum ) + { + nm_ok_deregistration(); + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_error_cfun | ++--------------------------------------------------------------------+ + + PURPOSE : Notify error status of SIM card + +*/ + +void sim_error_cfun (U8 result) +{ + TRACE_FUNCTION("sim_error_cfun()"); + + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_status.sim_operation_mode = sim_config.oper_mode; + + switch (result) + { + case CME_ERR_SimPinReq: /* PIN 1 must be entered */ + sim_status.sim_status = MFW_SIM_PIN_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1); + sim_status.sim_status_type = MFW_SIM_PIN1; + sim_stat = SIM_ACTIVE; + break; + case CME_ERR_SimPin2Req: /* PIN 2 must be entered */ + sim_status.sim_status = MFW_SIM_PIN2_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN2); + sim_status.sim_status_type = MFW_SIM_PIN2; + sim_stat = SIM_ACTIVE; + break; + +#ifdef SIM_PERS + case CME_ERR_PhoneFail: + case CME_ERR_NetworkPersPukReq: + case CME_ERR_NetworkSubsetPersPukReq: + case CME_ERR_ProviderPersPukReq: + case CME_ERR_CorporatePersPukReq: + C_KEY_REQ = 1; +#endif +// Nov 03, 2005 DR: OMAPS00050595 - xpradipg +// the setting of C_KEY_REQ is done only for SIM Personalization PUK request + case CME_ERR_SimPukReq: /* PUK 1 must be entered */ + sim_status.sim_status = MFW_SIM_PUK_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK1); + sim_status.sim_status_type = MFW_SIM_PUK1; + sim_stat = SIM_ACTIVE; + break; + case CME_ERR_SimPuk2Req: /* PUK 2 must be entered */ + sim_status.sim_status = MFW_SIM_PUK2_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK2); + sim_status.sim_status_type = MFW_SIM_PUK2; + sim_stat = SIM_ACTIVE; + break; + case CME_ERR_NotPresent: /* JVJ -#1580. Unexpected error should be treated as INVALID CARD for FTA*/ + case CME_ERR_SimFail: /* SIM card is invalid */ + case CME_ERR_SimWrong: + sim_status.sim_status = MFW_SIM_INVALID_CARD; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_UNKNOWN; + sim_stat = SIM_NOT_ACTIVE; + break; + case CME_ERR_SimNotIns: /* no SIM card inserted */ + sim_status.sim_status = MFW_SIM_NO_SIM_CARD; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_UNKNOWN; + sim_stat = SIM_NOT_ACTIVE; + break; +#ifdef SIM_PERS + //The events are handled that are posted by rAT_PlusCME() + //for all the five SIM Locks. + case CME_ERR_PhSimPinReq: + sim_status.sim_status = MFW_SIM_PLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED ; + sim_stat = SIM_ACTIVE; + break; + case CME_ERR_NetworkPersPinReq: + sim_status.sim_status = MFW_SIM_NLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED; + sim_stat = SIM_ACTIVE; + gsim_status=sim_stat; + break; + case CME_ERR_NetworkSubsetPersPinReq: + sim_status.sim_status = MFW_SIM_NSLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED; + sim_stat = SIM_ACTIVE; + break; + case CME_ERR_ProviderPersPinReq: + sim_status.sim_status = MFW_SIM_SPLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED; + sim_stat = SIM_ACTIVE; + break; + case CME_ERR_CorporatePersPinReq: + sim_status.sim_status = MFW_SIM_CLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED; + sim_stat = SIM_ACTIVE; + break; + +#endif + default: + TRACE_ERROR("sim_error_cfun(): result"); + return; + } + + sim_signal(E_SIM_STATUS,&sim_status); + + if ((result == CME_ERR_SimPinReq) + OR (result == CME_ERR_SimPukReq)) + pin1_set = MFW_SIM_ENABLE; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_error_cpin | ++--------------------------------------------------------------------+ + + PURPOSE : Inform about error of PIN entering or PUK entering + +*/ + +void sim_error_cpin (T_ACI_CME_ERR reason) +{ + T_ACI_CPIN_RSLT code; + + TRACE_FUNCTION("sim_error_cpin()"); + + sim_status.sim_procedure = pin_flag; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_status = MFW_SIM_FAILURE; + sim_status.sim_status_type = pin_ident; + + pin_flag = -1; + pin_ident = MFW_SIM_UNKNOWN; + + switch (reason) + { + case CME_ERR_WrongPasswd: + if (qAT_PlusCPIN(CMD_SRC_LCL,&code) != AT_CMPL) + { + TRACE_ERROR("sim_error_cpin():CPIN? failed"); + sim_signal(E_SIM_STATUS,&sim_status); + return; + } + break; +#ifdef SIM_PERS + case CME_ERR_SimPinReq: /* PIN 1 must be entered */ + sim_status.sim_status = MFW_SIM_PIN_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1); + sim_status.sim_status_type = MFW_SIM_PIN1; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + + case CME_ERR_SimPin2Req: /* PIN 2 must be entered */ + sim_status.sim_status = MFW_SIM_PIN2_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN2); + sim_status.sim_status_type = MFW_SIM_PIN2; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + case CME_ERR_PhoneFail: + case CME_ERR_NetworkPersPukReq: + case CME_ERR_NetworkSubsetPersPukReq: + case CME_ERR_ProviderPersPukReq: + case CME_ERR_CorporatePersPukReq: + + C_KEY_REQ = 1; +// Nov 03, 2005 DR: OMAPS00050595 - xpradipg + case CME_ERR_SimPukReq: /* PUK 1 must be entered */ + + sim_status.sim_status = MFW_SIM_PUK_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK1); + sim_status.sim_status_type = MFW_SIM_PUK1; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + case CME_ERR_SimPuk2Req: /* PUK 2 must be entered */ + sim_status.sim_status = MFW_SIM_PUK2_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK2); + sim_status.sim_status_type = MFW_SIM_PUK2; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + case CME_ERR_NotPresent: /* JVJ -#1580. Unexpected error should be treated as INVALID CARD for FTA*/ + case CME_ERR_SimFail: /* SIM card is invalid */ +#endif + case CME_ERR_SimWrong: + sim_status.sim_status = MFW_SIM_INVALID_CARD; +#ifdef SIM_PERS + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_UNKNOWN; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_NOT_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); +#else + sim_signal(E_SIM_STATUS,&sim_status); +#endif + return; + + + case CME_ERR_SimNotIns: /* no SIM card inserted */ + sim_status.sim_status = MFW_SIM_NO_SIM_CARD; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_UNKNOWN; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_NOT_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + +#ifdef SIM_PERS + //The events are handled that are posted by rAT_PlusCME() + //for all the five SIM Locks. + case CME_ERR_PhSimPinReq: + sim_status.sim_status = MFW_SIM_PLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED ; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + case CME_ERR_NetworkPersPinReq: + sim_status.sim_status = MFW_SIM_NLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + //sim_stat = SIM_NOT_ACTIVE; temporary changes + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + case CME_ERR_NetworkSubsetPersPinReq: + sim_status.sim_status = MFW_SIM_NSLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + case CME_ERR_ProviderPersPinReq: + sim_status.sim_status = MFW_SIM_SPLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; + case CME_ERR_CorporatePersPinReq: + sim_status.sim_status = MFW_SIM_CLOCK_REQ; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_LOCKED; + sim_status.sim_procedure = MFW_SIM_ACTIVATION; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + return; +#endif + default: + TRACE_ERROR("sim_error_cpin():Ill reason"); + sim_signal(E_SIM_STATUS,&sim_status); + return; + } + + switch (code) + { + case CPIN_RSLT_SimPinReq: + sim_status.sim_status = MFW_SIM_PIN_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1); + break; + case CPIN_RSLT_SimPukReq: + sim_status.sim_status = MFW_SIM_PUK_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK1); + break; + case CPIN_RSLT_SimPin2Req: + sim_status.sim_status = MFW_SIM_PIN2_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN2); + break; + case CPIN_RSLT_SimPuk2Req: + sim_status.sim_status = MFW_SIM_PUK2_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK2); + break; + case CPIN_RSLT_NotPresent: + case CPIN_RSLT_SimReady: + default: + TRACE_ERROR("sim_error_cpin():Ill code"); + break; + } + + sim_signal(E_SIM_STATUS,&sim_status); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_ok_cpin | ++--------------------------------------------------------------------+ + + PURPOSE : Successful end of PIN entering or PUK entering + +*/ + +void sim_ok_cpin (void) +{ +#ifdef SIM_PERS + int pin_flag_temp; + TRACE_FUNCTION_P1("sim_ok_cpin() %d",pin_flag); + pin_flag_temp = pin_flag; +#endif + switch (pin_flag) + { + case MFW_SIM_VERIFY: + sim_status.sim_procedure = MFW_SIM_VERIFY; + sim_status.sim_status = MFW_SIM_NO_PIN; + sim_status.sim_status_type = pin_ident; + break; + case MFW_SIM_UNBLOCK: + sim_status.sim_procedure = MFW_SIM_UNBLOCK; + sim_status.sim_status = MFW_SIM_SUCCESS; + sim_status.sim_status_type = pin_ident; +#ifdef SIM_PERS + pin1_set = MFW_SIM_ENABLE; +#endif + break; + default: + break; + } + + pin_flag = -1; + pin_ident = MFW_SIM_UNKNOWN; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = 0; + + sim_signal (E_SIM_STATUS, &sim_status); + if (nm_reg_flag_req()) + nm_activate(MFW_SIM_NO_PIN); +// Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// removed the flag that was getting set + +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_ss_unblock | ++--------------------------------------------------------------------+ + + PURPOSE : SIM unblock via SS string + +*/ + +void sim_ss_unblock(UBYTE result, T_ACI_CME_ERR reason) +{ + TRACE_FUNCTION("sim_ss_unblock()"); + + pin_flag = MFW_SIM_UNBLOCK; + + if (result == SIM_UBLK_ERROR) + sim_error_cpin (reason); + if (result == SIM_UBLK_OK) + sim_ok_cpin (); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_verify_pin | ++--------------------------------------------------------------------+ + + PURPOSE : Verify PIN + +*/ + +void sim_verify_pin (U8 pin_id, char *pin) +{ + TRACE_FUNCTION("sim_verify_pin()"); + + pin_flag = MFW_SIM_VERIFY; + pin_ident = pin_id; + switch (pin_id) + { + case MFW_SIM_PIN1: + sAT_PercentPVRF(CMD_SRC_LCL, PVRF_TYPE_Pin1, pin, 0); + break; + case MFW_SIM_PIN2: + sAT_PercentPVRF(CMD_SRC_LCL, PVRF_TYPE_Pin2, pin, 0); + break; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_unblock_pin | ++--------------------------------------------------------------------+ + + PURPOSE : unblock SIM + +*/ + +void sim_unblock_pin (U8 pin_id, char *puk, char *newpin) +{ + TRACE_FUNCTION("sim_unblock_pin()"); + + pin_flag = MFW_SIM_UNBLOCK; + pin_ident = pin_id; + switch (pin_id) + { + case MFW_SIM_PUK1: + sAT_PercentPVRF(CMD_SRC_LCL, PVRF_TYPE_Puk1, puk, newpin); + break; + case MFW_SIM_PUK2: + sAT_PercentPVRF(CMD_SRC_LCL, PVRF_TYPE_Puk2, puk, newpin); + break; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_change_pin | ++--------------------------------------------------------------------+ + + PURPOSE : Request of PIN change + +*/ + +void sim_change_pin (U8 pin_id, U8 *old_pin, U8 *new_pin) +{ + TRACE_FUNCTION("sim_change_pin()"); + + pin_ident = pin_id; + switch (pin_id) + { + case MFW_SIM_PIN1: + sAT_PlusCPWD(CMD_SRC_LCL, CPWD_FAC_Sc, + (char *)old_pin, (char *)new_pin); + break; + case MFW_SIM_PIN2: + sAT_PlusCPWD(CMD_SRC_LCL, CPWD_FAC_P2, + (char *)old_pin, (char *)new_pin); + break; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_ok_cpinc | ++--------------------------------------------------------------------+ + + PURPOSE : Notify successful end of PIN change + +*/ + +void sim_ok_cpinc (void) +{ + TRACE_FUNCTION("sim_ok_cpinc()"); + + sim_status.sim_procedure = MFW_SIM_CHANGE; + sim_status.sim_status = MFW_SIM_SUCCESS; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = pin_ident; + + pin_ident = MFW_SIM_UNKNOWN; + sim_signal(E_SIM_STATUS,&sim_status); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_error_cpinc | ++--------------------------------------------------------------------+ + + PURPOSE : Notify failed PIN change + +*/ + +void sim_error_cpinc (void) +{ + TRACE_FUNCTION("sim_error_cpinc()"); + + sim_status.sim_procedure = MFW_SIM_CHANGE; + sim_status.sim_status = MFW_SIM_FAILURE; + sim_status.sim_operation_mode = sim_config.oper_mode; + if (pin_ident EQ MFW_SIM_PIN1) + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1); + else if (pin_ident EQ MFW_SIM_PIN2) + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN2); + else + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = pin_ident; + + pin_ident = MFW_SIM_UNKNOWN; + sim_signal(E_SIM_STATUS,&sim_status); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_disable_pin | ++--------------------------------------------------------------------+ + + PURPOSE : Request PIN disability.SPR 2145 now returns status + +*/ + +T_MFW sim_disable_pin (U8 *pin) +{ + TRACE_FUNCTION("sim_disable_pin()"); + + return ss_set_clck(CLCK_FAC_Sc, CLCK_MOD_Unlock, + (char *)pin, -1, MFW_SIM_CPIND); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_ok_cpind | ++--------------------------------------------------------------------+ + + PURPOSE : Successful end of PIN disability + +*/ + +void sim_ok_cpind (void) +{ + TRACE_FUNCTION("sim_ok_cpind()"); + + sim_status.sim_procedure = MFW_SIM_DISABLE; + sim_status.sim_status = MFW_SIM_SUCCESS; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_UNKNOWN; // no indication + + pin1_set = MFW_SIM_DISABLE; + sim_signal(E_SIM_STATUS,&sim_status); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_error_cpind | ++--------------------------------------------------------------------+ + + PURPOSE : Failed PIN disability + +*/ + +void sim_error_cpind (void) +{ + TRACE_FUNCTION("sim_error_cpind()"); + + sim_status.sim_procedure = MFW_SIM_DISABLE; + sim_status.sim_status = MFW_SIM_FAILURE; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1); + sim_status.sim_status_type = MFW_SIM_UNKNOWN; // no indication + + sim_signal(E_SIM_STATUS,&sim_status); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_enable_pin | ++--------------------------------------------------------------------+ + + PURPOSE : Request PIN enability. SPR 2145 now returns status + +*/ + +T_MFW sim_enable_pin (U8 *pin) +{ + TRACE_FUNCTION("sim_enable_pin()"); + + return ss_set_clck(CLCK_FAC_Sc, CLCK_MOD_Lock, + (char *)pin, -1, MFW_SIM_CPINE); +} + +#ifdef SIM_PERS +// Nov 03, 2005 DR: OMAPS00052032 - xpradipg +/******************************************************************************* + $Function: mfw_simlock_continue + $Description: for displaying the sAT_PlusCLCK result + $Returns: None + $Arguments: state if passed / failed + +*******************************************************************************/ +void mfw_simlock_continue(U8 state) +{ + mmi_display_result(state); +} + +/******************************************************************************* + $Function: mfw_simlock_unblockME + $Description: for unblocking ME + $Returns: SUCCESS or FAILURE + $Arguments: PUK + +*******************************************************************************/ +int mfw_simlock_unblockME(char *puk) +{ +TRACE_FUNCTION("mfw_simlock_unblockME"); + if( sAT_PlusCLCK(CMD_SRC_LCL,CLCK_FAC_Fc,CLCK_MOD_Unlock,(char*)puk,-1)==AT_CMPL) + //return UNBLOCK_SUCESS; + return MFW_SS_OK; + else + //return UNBLOCK_FAILURE; + return MFW_SS_FAIL; +} + +/******************************************************************************* + $Function: mfw_simlock_check_lock_bootup + $Description: checking PIN during bootup + $Returns: SUCCESS or FAILURE + $Arguments: PIN + +*******************************************************************************/ +mfw_simlock_check_lock_bootup(char *pin, S16 lcktype) +{ + +/* if( sAT_PlusCPIN(CMD_SRC_LCL, pin, NULL)==AT_CMPL) + return BOOTUP_LOCK_SUCCESS; + else + return BOOTUP_LOCK_FAILURE;*/ //Leela for CPIN to CLCK change + + T_ACI_CLCK_FAC lckFac; + T_ACI_CLSSTAT clsStat; + UBYTE slock_status; + int status, maxval, curval; + + TRACE_FUNCTION("mfw_simlock_check_lock_bootup"); + + lckFac= mfw_simlock_return_lock_type(lcktype); + + if(sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Unlock,(char*)pin,-1)== AT_FAIL) + { + status = mfw_simlock_check_status(lcktype,&maxval,&curval); + //set the error descriptor + switch( lcktype) + { + case MFW_SIM_NLOCK: + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NetworkPersPinReq ); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NetworkPersPukReq); + } + break; + + case MFW_SIM_NSLOCK: + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NetworkSubsetPersPinReq ); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NetworkSubsetPersPukReq); + } + break; + + case MFW_SIM_SPLOCK: + + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_ProviderPersPinReq); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_ProviderPersPukReq ); + } + + break; + + case MFW_SIM_CLOCK: + + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_CorporatePersPinReq); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_CorporatePersPukReq ); + } + + break; + + case MFW_SIM_PLOCK: + + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_PhSimPinReq ); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_PhoneFail); + } + + break; + + default: + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_WrongPasswd ); + break; + + } + + return BOOTUP_LOCK_FAILURE; + } + else + { + lcktype++; + + if( lcktype > MFW_SIM_PLOCK) + return BOOTUP_LOCK_SUCCESS; + + while( lcktype <= MFW_SIM_PLOCK) + { + lckFac= mfw_simlock_return_lock_type(lcktype); + slock_status = mfw_simlock_get_lock_status(lcktype); + + if(slock_status EQ MFW_SIM_DISABLE) + { + lcktype++; + + if( lcktype > MFW_SIM_PLOCK) + return BOOTUP_LOCK_SUCCESS; + else + continue; + } + + else + { + status = mfw_simlock_check_status(lcktype,&maxval,&curval); + //set the error descriptor + switch( lcktype) + { + case MFW_SIM_NLOCK: + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NetworkPersPinReq ); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NetworkPersPukReq); + } + break; + + case MFW_SIM_NSLOCK: + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NetworkSubsetPersPinReq ); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_NetworkSubsetPersPukReq); + } + break; + + case MFW_SIM_SPLOCK: + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_ProviderPersPinReq); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_ProviderPersPukReq ); + } + break; + + case MFW_SIM_CLOCK: + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_CorporatePersPinReq); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_CorporatePersPukReq ); + } + break; + + case MFW_SIM_PLOCK: + if(curval !=0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_PhSimPinReq ); + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_PhoneFail); + } + break; + + default: + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_WrongPasswd ); + break; + + } + return BOOTUP_LOCK_FAILURE; + } + } + } +} + +/******************************************************************************* + $Function: mfw_simlock_get_sup_info + $Description: for getting the fc value + $Returns: value of the req fc type + $Arguments: fc type + +*******************************************************************************/ +int mfw_simlock_get_sup_info(int flag) +{ + T_SUP_INFO sup_info; + // sup_info=(T_SUP_INFO *)malloc(sizeof(T_SUP_INFO)); + sup_info.infoType=flag; + if(qAT_PercentMEPD( CMD_SRC_LCL, &sup_info) EQ AT_CMPL) + { + //TRACE_EVENT_P1("Leela: FC: %d", sup_info.datavalue); + return sup_info.datavalue; + } + else + return MFW_FAILURE; + } +/******************************************************************************* + $Function: mfw_simlock_return_lock_type + $Description: The lock type is converted to the ACI enum type + $Returns: corresponding ACi lock type + $Arguments: MMI lock type - (SIM Locks Only) + +*******************************************************************************/ +T_ACI_CLCK_FAC mfw_simlock_return_lock_type(S16 lck) +{ + switch (lck) + { + //case 0: + case MFW_SIM_NLOCK: + return CLCK_FAC_Pn; + //case 1: + case MFW_SIM_SPLOCK: + return CLCK_FAC_Pp; + //case 2: + case MFW_SIM_NSLOCK: + return CLCK_FAC_Pu; + //case 3: + case MFW_SIM_CLOCK: + return CLCK_FAC_Pc; + //case 4: + case MFW_SIM_PLOCK: + return CLCK_FAC_Ps; + + case MFW_SIM_FC: + return CLCK_FAC_Fc; + + + case MFW_SIM_FCM: + return CLCK_FAC_Fcm; + default: + return -1; + } + +} + + +/******************************************************************************* + $Function: mfw_simlock_check_status + $Description: stub function to retireve the maximum and current number of tries + for a given lock type + $Returns: success or failure + $Arguments: input - type of lock, + output - *max and *curr to return the values + *******************************************************************************/ +T_MFW mfw_simlock_check_status(S16 lcktyp,int *max,int *curr) +{ + T_SUP_INFO_TYPE FLAG; + int curr_fc, max_fc,FC_Reset_Fail_Max,FC_Reset_Fail_Current,FC_Reset_Success_Max,FC_Reset_Success_Current ; + //T_DISPLAY_DATA display_info; + +// T_MFW_HND win = mfwParent(mfw_header()); +// Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// used new enum value + FLAG=FCMAX; /* set flag to current */ + max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/ + + FLAG=FCATTEMPTSLEFT; /* set flag to current */ + curr_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/ + +// Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// used new enum value + FLAG = FCRESETFAILMAX; + FC_Reset_Fail_Max=mfw_simlock_get_sup_info(FLAG); +// Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// used new enum value + FLAG =FCRESETFAILATTEMPTSLEFT; + FC_Reset_Fail_Current=mfw_simlock_get_sup_info(FLAG); + // Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// used new enum value + FLAG =FCRESETSUCCESSMAX; + FC_Reset_Success_Max=mfw_simlock_get_sup_info(FLAG); +// Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// used new enum value + FLAG =FCRESETSUCCESSATTEMPTSLEFT; + FC_Reset_Success_Current=mfw_simlock_get_sup_info(FLAG); + +if( lcktyp !=0) +{ + *max = max_fc; + *curr = curr_fc; +} +else +{ + *max = FC_Reset_Fail_Current; + *curr = FC_Reset_Success_Current; +} + + TRACE_FUNCTION_P4(" FC_Reset_Fail_Max %d FC_Reset_Fail_Current %d FC_Reset_Success_Max %d FC_Reset_Success_Current %d",FC_Reset_Fail_Max,FC_Reset_Fail_Current,FC_Reset_Success_Max,FC_Reset_Success_Current); + + if( lcktyp == 0 ) + { + if(( FC_Reset_Fail_Current !=0 )&& (FC_Reset_Success_Current !=0) ) + { + //temporarily blocked + TRACE_FUNCTION("chk_status:MFW_SIM_BLOCKED"); + return MFW_SIM_BLOCKED; + + } + else + { + //permanently blocked + TRACE_FUNCTION("check_staus: MFW_SIM_PERM_BLOCKED"); + return MFW_SIM_PERM_BLOCKED; + } + + } + else + { + if( curr_fc == 0 ) + return MFW_SIM_BLOCKED; + else + return MFW_SIM_NOT_BLOCKED; + } +} + +/******************************************************************************* + $Function: mfw_simlock_get_lock_status + $Description: returns the status of the lock - enabled / disabled + $Returns: lock status + $Arguments: lock type + +*******************************************************************************/ +int mfw_simlock_get_lock_status(S16 lcktyp) +{ + UBYTE stat; + T_ACI_CLSSTAT clsStat; + T_ACI_CLCK_FAC lckfac; + int status; + int maxval; + int curval; + + status = mfw_simlock_check_status(lcktyp,&maxval,&curval); + if((status == MFW_SIM_BLOCKED)) + return MFW_SIM_BLOCKED; + if(status == MFW_SIM_PERM_BLOCKED) + return MFW_SIM_PERM_BLOCKED; + + lckfac= mfw_simlock_return_lock_type(lcktyp); + if (qAT_PlusCLCK(CMD_SRC_LCL, lckfac, + CLASS_NotPresent, &clsStat) EQ AT_CMPL) + { + TRACE_FUNCTION("Leela:qAT_PlusCLCK->AT_CMPL "); + switch (clsStat.status) + { + case STATUS_NotActive: + return MFW_SIM_DISABLE; + + case STATUS_Active: + return MFW_SIM_ENABLE; + + } + } + return MFW_SIM_FAILURE; + +} + + + + +/******************************************************************************* + $Function: mfw_simlock_enable_lock + $Description: Changes the oldpassword with the new one for the given + lock type + $Returns: success or failure + $Arguments: type of lock and old and new password + +*******************************************************************************/ + +T_MFW mfw_simlock_enable_lock(U8 *pin, S16 lcktyp) +{ + + T_ACI_CLCK_FAC lckFac; +// Nov 03, 2005 DR: OMAPS00052032 - xpradipg + T_ACI_RETURN ret; + TRACE_FUNCTION("mfw_simlock_enable_lock()"); + + /* return ss_set_clck(CLCK_FAC_Ps, CLCK_MOD_Lock, + (char *)pin, -1, MFW_SIM_CPINE);*/ + lckFac= mfw_simlock_return_lock_type(lcktyp); + ret = sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Lock,(char*)pin,-1); +// Nov 03, 2005 DR: OMAPS00052032 - xpradipg +// handle the AT_EXCT case and set the global to true + switch(ret) + { + case AT_CMPL: + return MFW_SS_OK; + case AT_EXCT: + sim_unlock_in_prog = TRUE; + return MFW_EXCT; + case AT_FAIL: + return MFW_SS_FAIL; + } + +} + +/******************************************************************************* + $Function: mfw_simlock_disable_lock + $Description: disables the lock with the given password for the given lock + $Returns: success or failure + $Arguments: type of lock and password + +*******************************************************************************/ +T_MFW mfw_simlock_disable_lock(U8 *pin, S16 lcktyp) +{ + T_ACI_CLCK_FAC lckFac; + T_ACI_RETURN ret; + + TRACE_FUNCTION("mfw_simlock_disable_lock()"); + /* return ss_set_clck(CLCK_FAC_Ps, CLCK_MOD_Lock, + (char *)pin, -1, MFW_SIM_CPINE);*/ + lckFac= mfw_simlock_return_lock_type(lcktyp); + ret = sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Unlock,(char*)pin,-1) ; + if(ret != AT_CMPL) + return MFW_SS_FAIL; + else + return MFW_SS_OK; +} + +T_MFW mfw_simlock_reset_fc_value(U8 *pin, int fc_flag) +{ + + T_ACI_CLCK_FAC lckFac; + T_ACI_RETURN stat; + TRACE_FUNCTION("mfw_simlock_reset_fc_value()"); + TRACE_EVENT_P1("Vidya: SimLock_MFW FC Password=%s",pin); + lckFac= mfw_simlock_return_lock_type(fc_flag); + stat = sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Unlock,(char*)pin,-1) ; + if( stat != AT_CMPL) + { + TRACE_FUNCTION_P1("Vidya: Reset Failed %d",stat); + return MFW_SS_FAIL; + } + else + { + TRACE_FUNCTION("Vidya: Reset Success"); + return MFW_SS_OK; + } +} +// Sept 24, 2005 REF: LOCOSTO-ENH-34438, xpradipg +// this function is never referenced and this inturn calls sAT_PercentSLPVRF +// which has been removed at ACI leve +#if 0 +/******************************************************************************* + $Function: mfw_simlock_verify_lock + $Description: If locked, it performs unlock + lock, if unlocks, it performs + lock + unlock, thus validating if the password provided is correct + $Returns: success or failure + $Arguments: type of lock and password + +*******************************************************************************/ + +int mfw_simlock_verify_lock(char* pwd,S16 lock) +{ + int status; + T_ACI_CLCK_FAC lckfac; + + TRACE_FUNCTION("mfw_simlock_verify_lock()"); + TRACE_EVENT_P1("Vidya: SimLock_MFW Password=%s",pwd); + +// status = mfw_simlock_get_lock_status(lock); + lckfac=mfw_simlock_return_lock_type(lock); + if(sAT_PercentSLPVRF(CMD_SRC_LCL, lckfac, pwd)==AT_CMPL) + return MFW_SS_OK; + else + return MFW_SS_FAIL; +/* + if(status==MFW_SIM_ENABLE) + + { + if( sAT_PlusCLCK(CMD_SRC_LCL,lckfac,CLCK_MOD_Unlock,pwd,CLASS_NotPresent) !=AT_CMPL) + { + TRACE_EVENT("Vidya: SIM_ENABLE unlock fail"); + return MFW_SS_FAIL; + } + else + { + if(sAT_PlusCLCK(CMD_SRC_LCL,lckfac,CLCK_MOD_Lock,pwd,CLASS_NotPresent)!=AT_CMPL) + { + TRACE_EVENT("Vidya: SIM_ENABLE lock fail"); + return MFW_SS_FAIL; + } + else + return MFW_SS_OK; + } + + } + else if(status==MFW_SIM_DISABLE) + { + if( sAT_PlusCLCK(CMD_SRC_LCL,lckfac,CLCK_MOD_Lock,pwd,CLASS_NotPresent) !=AT_CMPL) + { + TRACE_EVENT("Vidya: SIM_DISABLE lock fail"); + return MFW_SS_FAIL; + } + else + { + if(sAT_PlusCLCK(CMD_SRC_LCL,lckfac,CLCK_MOD_Unlock,pwd,CLASS_NotPresent)!=AT_CMPL) + { + TRACE_EVENT("Vidya: SIM_DISABLE unlock fail"); + return MFW_SS_FAIL; + } + else + return MFW_SS_OK; + } + + + } + */ + /* if(aci_ext_personalisation_MMI_verify_password(pwd) != MMILOCK_VERIFIED) + MFW_SS_FAIL; + else + MFW_SS_OK;*/ + +} +#endif +/******************************************************************************* + $Function: mfw_simlock_change_lock_code + $Description: Changes the oldpassword with the new one for the given + lock type + $Returns: success or failure + $Arguments: type of lock and old and new password + +*******************************************************************************/ +T_MFW mfw_simlock_change_lock_code(int type,char*oldpswd,char* newpswd) +{ + T_ACI_CLCK_FAC lckType; + + switch(type) + { + case MFW_SIM_NLOCK: + lckType = CPWD_FAC_Pn; + break; + case MFW_SIM_SPLOCK: + lckType = CPWD_FAC_Pp; + break; + case MFW_SIM_NSLOCK: + lckType = CPWD_FAC_Pu; + break; + case MFW_SIM_CLOCK: + lckType = CPWD_FAC_Pc; + break; + case MFW_SIM_PLOCK: + lckType = CPWD_FAC_Ps; + break; + } + + if(sAT_PlusCPWD(CMD_SRC_LCL, lckType, + (char *)oldpswd,(char *)newpswd)!=AT_CMPL) + return MFW_SS_FAIL; + else + return MFW_SS_OK; +} + +#endif + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_ok_cpine | ++--------------------------------------------------------------------+ + + PURPOSE : Successful end of PIN enability + +*/ + +void sim_ok_cpine() +{ + TRACE_FUNCTION("sim_ok_cpine()"); + + sim_status.sim_procedure = MFW_SIM_ENABLE; + sim_status.sim_status = MFW_SIM_SUCCESS; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_UNKNOWN; // no indication + + pin1_set = MFW_SIM_ENABLE; + sim_signal(E_SIM_STATUS,&sim_status); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_error_cpine | ++--------------------------------------------------------------------+ + + PURPOSE : Failed PIN enability + +*/ + +void sim_error_cpine (void) +{ + TRACE_FUNCTION("sim_error_cpine()"); + + sim_status.sim_procedure = MFW_SIM_ENABLE; + sim_status.sim_status = MFW_SIM_FAILURE; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1); + sim_status.sim_status_type = MFW_SIM_UNKNOWN; // no indication + + sim_signal(E_SIM_STATUS,&sim_status); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_check_service | ++--------------------------------------------------------------------+ + + PURPOSE : Checks a service status + +*/ + +U8 sim_check_service (U8 nr, U8 *serv_table) +{ + U8 value; + + TRACE_FUNCTION("sim_check_service()"); + + value = *(serv_table + (nr - 1) / 4); + value >>= ((nr - 1) & 3) * 2; + + return (value & 3); +} + + +/* ++-----------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_serv_table_check | ++-----------------------------------------------------------------------+ + + PURPOSE : Checks a service status in SIM service table + +*/ + +T_MFW sim_serv_table_check(UBYTE serv_num) +{ + TRACE_FUNCTION("sim_serv_table_check()"); + return sim_check_service(serv_num, sim_service_table); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : rAT_PlusCFUNP | ++--------------------------------------------------------------------+ + + PURPOSE : MMI relevant parameters from the SIM card + +*/ + +void rAT_PlusCFUNP (T_SIM_MMI_INSERT_IND *mmi_insert_ind) +{ + TRACE_FUNCTION("rAT_PlusCFUNP()"); + + sim_stat = SIM_ACTIVE; + + sim_config.oper_mode = mmi_insert_ind->func; + nm_mmi_parameters(&mmi_insert_ind->imsi_field, + &mmi_insert_ind->pref_plmn); +#ifdef FF_2TO1_PS + memcpy(sim_service_table,mmi_insert_ind->serv_table, +#else + memcpy(sim_service_table,mmi_insert_ind->sim_serv, +#endif + sizeof(sim_service_table)); + sim_config.phase = mmi_insert_ind->phase; + sim_config.access_acm = mmi_insert_ind->access_acm; + sim_config.access_acmmax = mmi_insert_ind->access_acmmax; + sim_config.access_puct = mmi_insert_ind->access_puct; + + + /* Apr 13, 2004 REF: CRR 16303 JuanVi Jativa-Villoldo */ + /* SPN must always be read, not only when nm_registration is called */ + sim_spn_req(); + +//x0pleela 08 Feb, 2006 ER: OMAPS00065203 +//Check for services 51 - OPL and 52 - PNN + +//x0pleela 15 Feb, 2006 ER OMAPS00065203 +//Combined both checks for services 51 and 52 as per review comments + if ( (sim_check_service(51,sim_service_table) + EQ ALLOCATED_AND_ACTIVATED) OR + (sim_check_service(52,sim_service_table) + EQ ALLOCATED_AND_ACTIVATED) ) + { + gEons_alloc_active = TRUE; + } + else + { + gEons_alloc_active = FALSE; + } + + if (sim_check_service(15,sim_service_table) + == ALLOCATED_AND_ACTIVATED) + sim_read_sim(SIM_GID1, NOT_PRESENT_8BIT, 5); + #ifdef BMI_TEST_MC_SIM_EVENT + TRACE_EVENT("Reading SIM_ICCID"); + sim_read_sim(SIM_ICCID, NOT_PRESENT_8BIT, 5); + #endif +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_mmi_parameter | ++--------------------------------------------------------------------+ + + PURPOSE : MMI relevant parameters from the SIM card + +*/ + +void sim_mmi_parameter(T_SIM_ACTIVATE_CNF *sim_act_cnf) +{ + TRACE_FUNCTION("sim_mmi_parameter()"); + + memcpy( sim_config.pref_lang, sim_act_cnf->pref_lang, 5); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_gid1_cnf | ++--------------------------------------------------------------------+ + + PURPOSE : read SIM group identifier 1 from SIM card + +*/ + +void sim_gid1_cnf(SHORT error, UBYTE *data) +{ + TRACE_FUNCTION("sim_gid1_cnf()"); + +#ifdef FF_2TO1_PS + if (error EQ CAUSE_SIM_NO_ERROR) +#else + if (error EQ SIM_NO_ERROR) +#endif + memcpy(sim_config.sim_gidl1, data, 5); + + if (!sat_update) + { + if (sim_check_service(16,sim_service_table) + == ALLOCATED_AND_ACTIVATED) + sim_read_sim(SIM_GID2, NOT_PRESENT_8BIT, 5); + } +#ifdef SIM_TOOLKIT + else + { + sat_update = FALSE; + satUpdateFiles ( TRUE, SIM_GID1 ); + } +#endif +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_gid2_cnf | ++--------------------------------------------------------------------+ + + PURPOSE : read SIM group identifier 2 from SIM card + +*/ + +void sim_gid2_cnf(SHORT error, UBYTE *data) +{ + TRACE_FUNCTION("sim_gid2_cnf()"); +#ifdef FF_2TO1_PS + if (error EQ CAUSE_SIM_NO_ERROR) +#else + if (error EQ SIM_NO_ERROR) +#endif + memcpy(sim_config.sim_gidl2, data, 5); + +#ifdef SIM_TOOLKIT + if ( sat_update ) + { + sat_update = FALSE; + satUpdateFiles ( TRUE, SIM_GID2 ); + } +#endif +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_save_pref_lang | ++--------------------------------------------------------------------+ + + PURPOSE : save preferred language + +*/ + +void sim_save_pref_lang (UBYTE *lang, UBYTE len) +{ + UBYTE sim_data[7]; + UBYTE i; + + TRACE_FUNCTION("sim_save_pref_lang()"); + + // + // copy a maximum of 5 bytes for storing on the SIM card + // + for (i=0;i<len AND i<5;i++) + sim_data[i] = lang[i]; + + // + // if less than 5 bytes fill with dummy values + // + for (i=len; i<5;i++) + sim_data[i] = 0xFF; + + // + // write to the SIM card + // + sim_write_sim(SIM_LP, sim_data, 5); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : rAT_PercentSIMREM | ++--------------------------------------------------------------------+ + + PURPOSE : call back for SIM removed + +*/ + +void rAT_PercentSIMREM( T_ACI_SIMREM_TYPE srType ) +{ + TRACE_FUNCTION("rAT_PercentSIMREM()"); + + if ( srType EQ SIMREM_FAILURE ) + { + sim_status.sim_procedure = MFW_SIM_REMOVED; + sim_status.sim_status = MFW_SIM_NO_SIM_CARD; + sim_status.sim_operation_mode = sim_config.oper_mode; + sim_status.sim_pin_retries = 0; + sim_status.sim_status_type = MFW_SIM_UNKNOWN; + sim_stat = SIM_NOT_ACTIVE; + sim_signal(E_SIM_STATUS,&sim_status); + } + else if ( srType EQ SIMREM_RESET ) + { +#ifdef SIM_TOOLKIT + sim_signal(E_SIM_RESET, 0); +#endif + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : rAT_percentSIMINS | ++--------------------------------------------------------------------+ + + PURPOSE : call back for SIM inserted + +*/ + +void rAT_PercentSIMINS( T_ACI_CME_ERR err ) +{ + TRACE_FUNCTION("rAT_percentSIMINS()"); + + sim_signal(E_SIM_INSERTED, 0); + + switch ( err ) + { + case CME_ERR_SimPinReq: + sim_status.sim_status = MFW_SIM_PIN_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1); + sim_status.sim_status_type = MFW_SIM_PIN1; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS, &sim_status); + break; + + case CME_ERR_SimPukReq: + sim_status.sim_status = MFW_SIM_PUK_REQ; + sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK1); + sim_status.sim_status_type = MFW_SIM_PUK1; + sim_stat = SIM_ACTIVE; + sim_signal(E_SIM_STATUS, &sim_status); + break; + + default: + break; + } +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_configuration | ++--------------------------------------------------------------------+ + + PURPOSE : Request the configuration of SIM card + +*/ + +UBYTE sim_cvt_access_status(UBYTE acs) +{ + TRACE_FUNCTION("sim_cvt_access_status()"); + + switch(acs) + { +#ifdef FF_2TO1_PS + case SIM_ACCESS_ALWAYS: return MFW_SIM_NO_PIN; + case SIM_ACCESS_PIN_1: return MFW_SIM_PIN1; + case SIM_ACCESS_PIN_2: return MFW_SIM_PIN2; +#else + case ACCESS_ALWAYS: return MFW_SIM_NO_PIN; + case ACCESS_PIN_1: return MFW_SIM_PIN1; + case ACCESS_PIN_2: return MFW_SIM_PIN2; +#endif + default: return MFW_SIM_UNKNOWN; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_configuration | ++--------------------------------------------------------------------+ + + PURPOSE : Request the configuration of SIM card + +*/ + +MfwRes sim_configuration (U8 *phase, U8 *serv, U8 *slen, + U8 *lang, U8 *llen, + T_MFW_AOC_ACCESS *access) +{ + U8 l; + TRACE_FUNCTION("sim_configuration()"); + + //PATCH2 TB 1310: Add test of NULL parameter to avoid to declare parameter of unwanted data + if (sim_stat != SIM_ACTIVE) + return MFW_SIM_FAILURE; + + if (phase != NULL) + *phase = sim_config.phase; + + if ((serv != NULL) && (slen != NULL)) + { + l = sizeof(sim_service_table); + if (l < *slen) + *slen = l; + memcpy(serv,sim_service_table,*slen); + } + + //PATCH1 TB 1310: replace slen by llen + if ((lang != NULL) && (llen != NULL)) + { + l = sizeof(sim_config.pref_lang); + if (l < *llen) + *llen = l; + memcpy(lang, sim_config.pref_lang, *llen); + } + //END PATCH1 TB + + if (access != NULL) + { + access->access_acm = sim_cvt_access_status(sim_config.access_acm); + access->access_acmmax = sim_cvt_access_status(sim_config.access_acmmax); + access->access_puct = sim_cvt_access_status(sim_config.access_puct); + } + //END PATCH2 TB + + return MFW_SIM_SUCCESS; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_status_check | ++--------------------------------------------------------------------+ + + PURPOSE : check activation of SIM card + +*/ + +int sim_status_check (void) +{ + TRACE_FUNCTION("sim_status_check()"); + + return sim_stat; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_pin_count | ++--------------------------------------------------------------------+ + + PURPOSE : Request PIN/PUK count + +*/ + +int sim_pin_count(U8 pin_id) +{ + SHORT pn1Cnt; + SHORT pn2Cnt; + SHORT pk1Cnt; + SHORT pk2Cnt; + T_ACI_PVRF_STAT ps1; + T_ACI_PVRF_STAT ps2; + + TRACE_FUNCTION("sim_pin_count()"); + + + if (qAT_PercentPVRF(CMD_SRC_LCL, &pn1Cnt, + &pn2Cnt, &pk1Cnt, &pk2Cnt, &ps1, &ps2) != AT_CMPL) + return -1; + + switch (pin_id) + { + case MFW_SIM_PIN1: return pn1Cnt; + case MFW_SIM_PIN2: return pn2Cnt; + case MFW_SIM_PUK1: return pk1Cnt; + case MFW_SIM_PUK2: return pk2Cnt; + default: return -1; + } +} + +int SimHasPin(U8 pin_id) +{ + SHORT pn1Cnt; + SHORT pn2Cnt; + SHORT pk1Cnt; + SHORT pk2Cnt; + T_ACI_PVRF_STAT ps1; + T_ACI_PVRF_STAT ps2; + + TRACE_FUNCTION("sim_pin_count()"); + + + if (qAT_PercentPVRF(CMD_SRC_LCL, &pn1Cnt, + &pn2Cnt, &pk1Cnt, &pk2Cnt, &ps1, &ps2) != AT_CMPL) + return -1; + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("PIN2 STATUS: %d", ps2); + /***************************Go-lite Optimization changes end***********************/ + switch (pin_id) + { + case MFW_SIM_PIN1: + { if (ps1 ==PVRF_STAT_NotPresent) + return 0; + else + return 1; + } // break; // RAVI + case MFW_SIM_PIN2: + { if (ps2 ==PVRF_STAT_NotPresent) + return 0; + else + return 1; + }// break; // RAVI + default: return -1; + } +} + +/*SPR 1351, added new function*/ +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_convert_simlock_status| ++---------------------------------------------------------------------+ + + PURPOSE : Conversion of ACI simlock status to MFW simlock status codes for + compatibility with existing MMI layer. + +*/ +UBYTE sim_convert_simlock_status(T_SIMLOCK_STATUS aci_status) +{ + switch(aci_status) + { + case(SIMLOCK_DISABLED): return MFW_SIM_DISABLE; //break; // RAVI + case(SIMLOCK_ENABLED): return MFW_SIM_ENABLE; //break; // RAVI + case(SIMLOCK_BLOCKED): return MFW_SIM_BLOCKED; // break; // RAVI + case(SIMLOCK_LOCKED): return MFW_SIM_LOCKED; //break; // RAVI + case (SIMLOCK_FAIL): return MFW_SIM_FAILURE; // break; // RAVI + default: return MFW_SIM_FAILURE; + } + +} +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_unlock_sim_lock | ++---------------------------------------------------------------------+ + + PURPOSE : de-personalisation(unlocking) for SIM lock. + Returns code for lock type if successful, or return MFW_SIM_UNLOCK_ERR if not. + +*/ +/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/ +T_MFW sim_unlock_sim_lock(UBYTE type, UBYTE *passwd) +{ + + T_SIMLOCK_STATUS simlock_status=SIMLOCK_DISABLED;/*status from ACI */ + /*for CQ-34324 -- While Integrating of VLE5 ME personalization code aci_slock_unlock + function is moved under SIM_PERS flag and this function is never called . So variable + simlock_status is hardcoded to default value */ + UBYTE mfw_simlock_status;/*status converted to MFW encoding*/ + + TRACE_EVENT_P1("sim_unlock_sim_lock(): %d", type); + + + switch (type) + { + /* + * N-Lock + */ + case MFW_SIM_NLOCK: + #ifdef MMI_34324 + simlock_status= aci_slock_unlock(SIMLOCK_NETWORK, (char*)passwd); + #endif + mfw_simlock_status = sim_convert_simlock_status(simlock_status); + switch(mfw_simlock_status) + { + case (MFW_SIM_DISABLE): return MFW_SIM_NLOCK; + case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR; + default: return MFW_SIM_UNLOCK_ERR; + } +// break; // RAVI + + /* + * SP-Lock + */ + case MFW_SIM_SPLOCK: + #ifdef MMI_34324 + simlock_status = aci_slock_unlock(SIMLOCK_SERVICE_PROVIDER, (char*)passwd); + #endif + mfw_simlock_status = sim_convert_simlock_status(simlock_status); + switch(mfw_simlock_status) + { + + case (MFW_SIM_DISABLE): return MFW_SIM_SPLOCK; + case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR; + default: return MFW_SIM_UNLOCK_ERR; + } +// break; // RAVI + + /* + * NS-Lock + */ + case MFW_SIM_NSLOCK: + #ifdef MMI_34324 + simlock_status = aci_slock_unlock(SIMLOCK_NETWORK_SUBSET, (char*)passwd); + #endif + mfw_simlock_status = sim_convert_simlock_status(simlock_status); + switch(mfw_simlock_status) + { + + case (MFW_SIM_DISABLE): return MFW_SIM_NSLOCK; + case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR; + default: return MFW_SIM_UNLOCK_ERR; + } +// break; // RAVI + + /* + * C-Lock + */ + case MFW_SIM_CLOCK: + #ifdef MMI_34324 + simlock_status = aci_slock_unlock(SIMLOCK_CORPORATE, (char*)passwd); + #endif + mfw_simlock_status = sim_convert_simlock_status(simlock_status); + switch(mfw_simlock_status) + { + + case (MFW_SIM_DISABLE): return MFW_SIM_CLOCK; + case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR; + default: return MFW_SIM_UNLOCK_ERR; + } +// break; // RAVI + + /* + * P-Lock + */ + case MFW_SIM_PLOCK: + + #ifdef MMI_34324 + simlock_status = aci_slock_unlock( SIMLOCK_SIM, (char*)passwd); + #endif + mfw_simlock_status = sim_convert_simlock_status(simlock_status); + switch(mfw_simlock_status) + { + case (MFW_SIM_DISABLE): return MFW_SIM_PLOCK; + case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR; + default:return MFW_SIM_UNLOCK_ERR; + } +// break; // RAVI + + } + + return MFW_SIM_UNLOCK_ERR; +} + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_check_sim_Plock | ++---------------------------------------------------------------------+ + + PURPOSE : check SIM lock + +*/ +/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/ +int sim_check_sim_Plock (void) +{ T_SIMLOCK_STATUS simlock_status = SIMLOCK_DISABLED; + /*ACI set default value for CQ-34324--While Integrating of VLE5 ME personalization code + aci_slock_checklock function is removed and this function is never called. So variable + simlock_status is hardcoded to default value + */ + + TRACE_EVENT ("sim_check_sim_Plock"); + #ifdef MMI_34324 + simlock_status =aci_slock_checklock(SIMLOCK_SIM); + #endif + TRACE_EVENT_P1("PLock: %d", simlock_status); + /*convert status from ACI to MFW encoding*/ + return sim_convert_simlock_status(simlock_status); + +} + + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_check_sim_Nlock | ++---------------------------------------------------------------------+ + + PURPOSE : Check network lock + +*/ +/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/ +int sim_check_sim_Nlock (void) +{ T_SIMLOCK_STATUS simlock_status = SIMLOCK_DISABLED; + /*ACI set default value for CQ-34324--While Integrating of VLE5 ME personalization code + aci_slock_checklock function is removed and this function is never called. So variable + simlock_status is hardcoded to default value + */ + TRACE_EVENT ("sim_check_sim_Nlock()"); + #ifdef MMI_34324 + simlock_status =aci_slock_checklock(SIMLOCK_NETWORK); + #endif + TRACE_EVENT_P1("NLock: %d", simlock_status); + /*convert status from ACI to MFW encoding*/ + return sim_convert_simlock_status(simlock_status); + + +} + + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_check_sim_SPlock| ++---------------------------------------------------------------------+ + + PURPOSE : Check SIM service provider lock. It only works with SIMs + which support GID1 file. + +*/ +/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/ +int sim_check_sim_SPlock (void) +{ T_SIMLOCK_STATUS simlock_status = SIMLOCK_DISABLED; + /*ACI set default value for CQ-34324--While Integrating of VLE5 ME personalization code + aci_slock_checklock function is removed and this function is never called. So variable + simlock_status is hardcoded to default value + */ + TRACE_EVENT ("sim_check_sim_SPlock()"); + + #ifdef MMI_34324 + simlock_status =aci_slock_checklock(SIMLOCK_SERVICE_PROVIDER); + #endif + + TRACE_EVENT_P1("NLock: %d", simlock_status); + /*convert status from ACI to MFW encoding*/ + return sim_convert_simlock_status(simlock_status); + +} + + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_check_sim_NSlock| ++---------------------------------------------------------------------+ + + PURPOSE : Check network subset lock + +*/ +/*MC SPR1351, replaced previous implementation with wrapper for aci implementation*/ +int sim_check_sim_NSlock (void) +{ T_SIMLOCK_STATUS simlock_status = SIMLOCK_DISABLED; + /*ACI set default value for CQ-34324--While Integrating of VLE5 ME personalization code + aci_slock_checklock function is removed and this function is never called. So variable + simlock_status is hardcoded to default value + */ + TRACE_EVENT ("sim_check_sim_NSlock()"); + + #ifdef MMI_34324 + simlock_status =aci_slock_checklock(SIMLOCK_NETWORK_SUBSET); + #endif + TRACE_EVENT_P1("NSLock: %d", simlock_status); + + /*convert status from ACI to MFW encoding*/ + return sim_convert_simlock_status(simlock_status); +} + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_check_sim_Clock | ++---------------------------------------------------------------------+ + + PURPOSE : Check corporate lock. It only works with SIMs + which support GID1 and GID2 files. + +*/ +/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/ +int sim_check_sim_Clock (void) +{ T_SIMLOCK_STATUS simlock_status = SIMLOCK_DISABLED; + /*ACI set default value for CQ-34324--While Integrating of VLE5 ME personalization code + aci_slock_checklock function is removed and this function is never called. So variable + simlock_status is hardcoded to default value + */ + TRACE_EVENT ("sim_check_sim_Clock()"); + #ifdef MMI_34324 + simlock_status =aci_slock_checklock(SIMLOCK_CORPORATE); + #endif + TRACE_EVENT_P1("CLock: %d", simlock_status); + /*convert status from ACI to MFW encoding*/ + return sim_convert_simlock_status(simlock_status); +} + + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_pin_status | ++--------------------------------------------------------------------+ + + PURPOSE : Request PIN1/PIN2 status + +*/ + +void sim_pin_status(T_MFW_SIM_PIN_STATUS *status) +{ + SHORT pn1Cnt; + SHORT pn2Cnt; + SHORT pk1Cnt; + SHORT pk2Cnt; + T_ACI_PVRF_STAT ps1; + T_ACI_PVRF_STAT ps2; +// char debug[30]; // RAVI + TRACE_FUNCTION("sim_pin_status()"); + + status->stat = MFW_SIM_UNKNOWN; + status->set = MFW_SIM_UNKNOWN; + + if (qAT_PercentPVRF(CMD_SRC_LCL, &pn1Cnt, + &pn2Cnt, &pk1Cnt, &pk2Cnt, &ps1, &ps2) == AT_CMPL) + { + switch (status->type) + { + case MFW_SIM_PIN1: + /*CONQ 5578, check service table to see if allowed to disable PIN1*/ + if (!psaSIM_ChkSIMSrvSup(SRV_CHV1_Disable)) + { + status->stat = MFW_SIM_NO_DISABLE; + } + else + { + status->stat = sim_cvtPINstatus(ps1, MFW_SIM_PIN1); + } + status->set = pin1_set; + break; + case MFW_SIM_PIN2: + status->stat = sim_cvtPINstatus(ps2, MFW_SIM_PIN2); + status->set = pin2_set; + break; + } + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_cvtPINstatus | ++--------------------------------------------------------------------+ + + PURPOSE : + +*/ + +UBYTE sim_cvtPINstatus(T_ACI_PVRF_STAT ps, UBYTE type) +{ + TRACE_FUNCTION("sim_cvtPINstatus()"); + + switch (ps) + { + case PVRF_STAT_NotRequired: + return MFW_SIM_NO_PIN; + case PVRF_STAT_Required: + if (type EQ MFW_SIM_PIN1) + return MFW_SIM_PIN_REQ; + if (type EQ MFW_SIM_PIN2) + return MFW_SIM_PIN2_REQ; + return MFW_SIM_UNKNOWN; + default: + return MFW_SIM_UNKNOWN; + } +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : simDecodeIMSI | ++--------------------------------------------------------------------+ + + PURPOSE : convert imsi (packed bcd to ASCIIZ; ->11.11) + +*/ + +void simDecodeIMSI (UBYTE * imsi_field, + UBYTE imsi_c_field, + UBYTE * imsi_extracted) +{ + UBYTE length; + UBYTE i; + UBYTE digit; + + TRACE_FUNCTION ("simDecodeImsi()"); + + /* + * calculate number of digits + */ + length = (imsi_c_field-1)*2; + + /* + * if odd number of digits add one + */ + if (imsi_field[0] & 0x08) + length++; + + /* + * extract all digits + */ + for (i = 0; i < length; i++) + { + digit = (i & 1) ? + imsi_field[(i + 1) / 2] & 0x0f : + (imsi_field[(i + 1) / 2] & 0xf0) >> 4; + +#if defined (WIN32) + { + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2("DIGIT [%d] = %d",i, digit); + /***************************Go-lite Optimization changes end***********************/ + } +#endif + if (i < LONG_NAME) + imsi_extracted [i] = digit + 0x30; + else + { + imsi_extracted [i] = 0; + return; + } + } +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_pin_ident | ++--------------------------------------------------------------------+ + + PURPOSE : handle mfw windows command + +*/ + +void sim_pin_ident(UBYTE id) +{ + TRACE_FUNCTION("sim_pin_ident()"); + pin_ident = id; +} + + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : simCommand | ++--------------------------------------------------------------------+ + + PURPOSE : handle mfw windows command + +*/ + +static int simCommand (U32 cmd, void *h) +{ + switch (cmd) + { + case MfwCmdDelete: /* delete me */ + if (!h) + return 0; + sim_delete(h); + return 1; + default: + break; + } + + return 0; +} + + + + + + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_simlock_ok | ++--------------------------------------------------------------------+ + + PURPOSE : The function checks all simlocks and returns SIMLOCK_DISABLED + if none are set. + +*/ +/*spr 1351, replaced previous implemntation with a wrapper for aci implentation*/ +UBYTE sim_simlock_ok (void) +{ + T_SIMLOCK_STATUS simlock_status = SIMLOCK_ENABLED; + /*ACI set default value for CQ-34324 -- While Integrating of VLE5 ME personalization code + aci_slock_checkpersonalisation function is moved under SIM_PERS flag and this function is + never called . So variable simlock_status is hardcoded to default value */ + #ifdef MMI_34324 + simlock_status = aci_slock_checkpersonalisation(); + #endif + return sim_convert_simlock_status(simlock_status); + +} + +void mfwSimRestartPinEntry(void) +{ + sim_signal(E_SIM_STATUS, &sim_status); + return; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_get_imsi | ++--------------------------------------------------------------------+ + + PURPOSE : Request IMSI number in SIM card + +*/ + +UBYTE * sim_get_imsi (void) +{ + return mfw_IMSI; +} + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_mmi_update_parameter | ++---------------------------------------------------------------------+ + + PURPOSE : MMI relevant parameters from the SIM card + +*/ + +void sim_mmi_update_parameter(T_SIM_ACTIVATE_IND *sim_act_ind) +{ + TRACE_FUNCTION("sim_mmi_update_parameter()"); + + memcpy( sim_config.pref_lang, sim_act_ind->pref_lang, 5); +} + +#ifdef SIM_TOOLKIT +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_sat_file_update | ++---------------------------------------------------------------------+ + + PURPOSE : SIM file change indication + +*/ + +void sim_sat_file_update(USHORT dataId) +{ + TRACE_FUNCTION("sim_sat_file_update()"); + + sat_update = TRUE; + switch (dataId) + { + case SIM_SST: + sim_read_sim(SIM_SST, NOT_PRESENT_8BIT, 10); + break; + case SIM_GID1: + sim_read_sim(SIM_GID1, NOT_PRESENT_8BIT, 5); + break; + case SIM_GID2: + sim_read_sim(SIM_GID2, NOT_PRESENT_8BIT, 5); + break; + case SIM_LP: + { + T_ACI_LAN_SUP lngCde; + CHAR lang_buffer[3]; + + memset(lang_buffer, 0, sizeof(lang_buffer)); + lngCde.str = lang_buffer; + if (qAT_PlusCLAN(CMD_SRC_LCL, &lngCde) == AT_EXCT) + return; +#ifdef SIM_TOOLKIT + else + if (mfwSATLPRefresh) + { + sat_update = FALSE; + mfwSATLPRefresh =FALSE; + psaSAT_FUConfirm (0, SIM_FU_ERROR); /*If not possible, notify to the SIM */ + } +#endif + } + break; + default: + break; + } +} +#endif + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_read_sst_cnf | ++---------------------------------------------------------------------+ + + PURPOSE : SIM file change indication + +*/ + +void sim_read_sst_cnf (SHORT error, UBYTE *data) +{ + TRACE_FUNCTION("sim_read_sst_cnf()"); + +#ifdef FF_2TO1_PS + if (error EQ CAUSE_SIM_NO_ERROR) +#else + if (error EQ SIM_NO_ERROR) +#endif + memcpy(sim_service_table, data, sizeof(sim_service_table)); + else + TRACE_EVENT("SST read error"); + +#ifdef SIM_TOOLKIT + if (sat_update) + { + sat_update = FALSE; + satUpdateFiles ( TRUE, SIM_SST ); + } +#endif +} + + + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_init_CPRS | ++--------------------------------------------------------------------+ + + PURPOSE : initialize the ciphering indication + +*/ + +UBYTE sim_init_CPRS (CallbackCPRI func, UBYTE CPRImode ) +{ + + //UBYTE getCPRImode; // RAVI + + TRACE_FUNCTION("sim_init_CPRS()"); + + //keep the callback function from MMI + if (func != NULL) + mmi_cprs_cb = func; + else + return FALSE; + + //now set the mode + sAT_PercentCPRI (CMD_SRC_LCL, CPRImode); + + return TRUE; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : rAT_PercentCPRI | ++--------------------------------------------------------------------+ + + PURPOSE : is called to inform the application about a received ciphering indication. + gsm_ciph and gprs_ciph are used to inform the application about a change in ciphering + mode in GSM or GPRS. + +*/ + + +void rAT_PercentCPRI (UBYTE gsm_ciph, UBYTE gprs_ciph) +{ + + //call here the function from MMI + mmi_cprs_cb(gsm_ciph, gprs_ciph); +} + +/* ++---------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM | +| STATE : code ROUTINE : sim_read_lp_cnf | ++---------------------------------------------------------------------+ + + PURPOSE : + +*/ + +void sim_read_lp_cnf (SHORT error, T_ACI_LAN_SUP *CLang) +{ + TRACE_FUNCTION("sim_read_lp_cnf()"); + + +#ifdef SIM_TOOLKIT + if ((mfwSATLPRefresh)&&(sat_update)) + { + mfwSATLPRefresh= FALSE; + sat_update = FALSE; +#ifdef FF_2TO1_PS + if (error EQ CAUSE_SIM_NO_ERROR) +#else + if (error EQ SIM_NO_ERROR) +#endif + satUpdateFiles ( TRUE, SIM_SST ); + else + psaSAT_FUConfirm (0, SIM_FU_ERROR); /*If not possible, notify to the SIM */ + } +#endif +} + +