diff src/ui/mfw/mfw_sim.c @ 3:67bfe9f274f6

src/ui: import of src/ui3 from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:33:10 +0000
parents
children 92abb46dc1ba
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ui/mfw/mfw_sim.c	Fri Oct 16 06:33:10 2020 +0000
@@ -0,0 +1,4080 @@
+/*
++--------------------------------------------------------------------+
+| 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
+   
+    May 30, 2007  DR: OMAPS00132483 x0pleela
+    Description: MM: While playing an AAC, unplug USB freezes the audio
+    Solution: Defined new functions mfw_get_Phlock_status(), mfw_set_Phlock_status( ), 
+    			mfw_get_Auto_Phlock_status(), mfw_set_Auto_Phlock_status() to set and 
+    			get the phone lock and automatic phone lock status
+   
+    Apr 03, 2007    ER: OMAPS00122561  x0pleela
+    Description:   [ACI] Phone lock feature has to be supported by ACI
+    Solution: Phone Lock ER implementation
+   
+      Feb 19, 2006 ER:OMAPS00115179 a0393213
+      Description : support SIM insertion without powering down
+      Solution	   : New case is handled in rAT_PercentSIMINS
+   
+	Dec 13, 2006 DR: OMAPS00105640  x0039928
+ 	Description: SIMP: The board reboots when removing SIM card.
+ 	Solution: Sim status is updated.
+ 	
+	Nov 13, 2006 DR: OMAPS00103356  x0pleela
+ 	Description: SIMP:Master unlock failed through MMI
+ 	Solution: In function mfw_simlock_master_unlock() a check is added if the master unlock 
+ 			password is wrong. If wrong, displays Wrong password. 
+ 			Also a check is added if 	the error code for any of the categories (non-dependent) 
+ 			being locked/blocked. If yes, return OK as the dependent categories are unblocked 
+ 			using Master unblock password
+ 	   
+   	Sep 26, 2006 DR: OMAPS00095524 x0pleela
+ 	Description:Implement 2 missing SIM Lock types
+ 	Solution: Made the following changes
+		1) sim_error_cfun(), sim_error_cpin()
+			- Setting the aciErrdesc separately for all the CME errors related to 
+				SIMP categories
+			- Handling the extension error of request for Blocked network password 
+				(both PIN and PUK)
+		2) mfw_simlock_check_lock_bootup()
+			- Updating aciErrDesc with Blocked Network (PIN or PUK) password request
+		3) mfw_simlock_return_lock_type()
+			- Return coresponding ACI lock type for Blocked network category
+		4) sim_simlock_cpin_code()
+			- Set the reqduired parameters for Blocked Network Password and Unblock
+				code request
+			
+    	Sep 26, 2006 DR: OMAPS00096565  x0pleela
+ 	Description: After blocking PIN, when ISAMPLE is reset, instead of prompting for PUK, master 
+ 				unlock key is asked
+ 	Solution: Reset C_KEY_REQ to 0 in functions sim_error_cfun() and sim_error_cpin()
+ 			
+ 	Sep 11, 2006 DR: OMAPS00094215  x0pleela
+ 	Description: MMI compilation failed as CME_ErrBusy undefined
+ 	Solution: Handling new Ext_ERR_Busy sent by ACI   
+
+	xashmic 9 Sep 2006, OMAPS00092732
+	USBMS ER
+
+    	Sep 08, 2006 DR: OMAPS00091250 x0pleela
+ 	Description:The phone resets if no MEPD data is presented
+ 	Solution: CME_Unknown error is sent by ACI and is now handled by MFW in fucntions sim_error_cpin() and
+ 			sim_error_cfun
+
+	July 21, 2006 ER: OMAPS00087586, OMAPS00087587 x0pleela
+	Description: 	OMAPS00087586: MasterKey funtion in TCS3.2 SW
+				OMAPS00087587: Time Penaly feature extend handset security
+	Solution:Made the following changes
+		1) Defined new static variable "Simp_Busy_State" which will be set to either TRUE or FALSE based on the ACI's busy error
+		2) sim_error_cfun(): Update global aciErrDesc with the current CME error code
+		3) mfw_simlock_check_lock_bootup(): Check for the CME busy error and update "Simp_Busy_State" accordingly
+		4) mfw_simlock_return_lock_type(): Return coresponding lock type for master unlock 
+		5) Added following new functions:
+			mfw_simlock_master_unlock: This function unlocks(dependent categories) or unblocks ME
+			mfw_simlock_check_masterkey: This function checks from ACI whether Master Unlock feature is enabled or not. If 
+						enabled, displays a menu item for the user toy select master unlocking option. If not enabled, doesn't 
+						display master unlocking option in the menu
+			mfw_simlock_set_busy_state: This function sets Simp_Busy_State to either TRUE or FALSE based on ACI's CME error
+			mfw_simlock_get_busy_state: This function returns the current value of Simp_Busy_State
+	
+	Jun 23, 2006    DR: OMAPS00082374 x0pleela
+   	Description: EONS Failures - unexpected output from the MMI: 2 carriers; on the top always T-Mobile 
+   	Solution:	a) Removed the usage of global variable gEons_alloc_active
+			b) Removed the check for services 51 and 52 from function rat_pluscfunp
+   	
+	xrashmic 6 Jul, 2006 OMAPS00080708
+	For error return value in sAT_PercentPVRF, bmi has to be informed
+		
+       xrashmic 1 Jul, 2006 OMAPS00075784
+       Hanlding of SIMP events during bootup
+            
+	May 15, 2006 DR: OMAPS00067919 x0pleela
+	Description: SIMP:On repeat Depersonalisation with invalid password MEPD unblock key should 
+				be asked not Puk1.
+	Solution:Made the following changes
+			1. Added global variables (simp_cpin_code, simp_cpin_flag) to store the code result of qAT_PlusCPIN() result
+			2. Using new enum type T_MFW_SIMP_CLCK_FLAG sim_unlock_in_prog instead of U8
+			3. Added code in sim_error_cpin() to set the sim_status field to request for Unblocking code
+			4. Modified the code to check SIMP during bootup sequence
+			5. Added new function sim_simlock_cpin_code() which checks for the code and take action for SIMP category unlocking 
+	
+	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                                      $
+
+    May 22, 2006 x0047685
+    Removed pref_plmn from nm_mmi_parameter(...); due to REL99 EF handling.
+
+ * * *****************  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
+#if defined (SIM_PERS) && !defined(NEPTUNE_BOARD)
+#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_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;
+
+//x0pleela 25 Apr, 2006  DR: OMAPS00067919
+//Global variable to store the code result of qAT_PlusCPIN() result
+GLOBAL T_ACI_CPIN_RSLT simp_cpin_code; 
+GLOBAL UBYTE simp_cpin_flag; //Global to indicate whether Category pwds are asked after qAT_PlusCPIN()
+#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 [0x10];      /* SIM service table        *//*a0393213 cphs R4*/
+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
+T_MFW_SIMP_CLCK_FLAG	sim_unlock_in_prog = SIMP_NONE;
+
+//x0pleela 20 July, 2006
+static UBYTE Simp_Busy_State;		/* Set to either TRUE or FALSE based on the ACI's busy error */
+
+#endif
+
+//x0pleela 29 May, 2007 DR: OMAPS00132483
+#ifdef FF_PHONE_LOCK
+#define Phlock_ResetFlag	0x00 //toset any bit to zero
+#define PhlockStatus		0x01 //for phone lock status
+#define AutoPhlockStatus	0x02 //for automatic phone lock status
+static int Phlock_flag;
+
+//Function Prototypes
+GLOBAL int mfw_get_Phlock_status(void);
+GLOBAL void mfw_set_Phlock_status( int phlock_status);
+GLOBAL int mfw_get_Auto_Phlock_status(void);
+GLOBAL void mfw_set_Auto_Phlock_status( int phlock_status);
+
+#endif //FF_PHONE_LOCK
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_SIM            |
+| STATE   : code                        ROUTINE : sim_init           |
++--------------------------------------------------------------------+
+
+  PURPOSE : initialize SIM manager
+
+*/
+
+int sim_init (void)
+{
+   /*a0393213 compiler warnings removal - removed simlck variable*/
+
+
+    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:
+#ifdef NEPTUNE_BOARD
+                        sim_data->para.status.sim_operation_mode = para->status.sim_operation_mode;
+                        sim_data->para.status.sim_pin_retries         = para->status.sim_pin_retries;
+			   sim_data->para.status.sim_procedure          = para->status.sim_procedure;
+			   sim_data->para.status.sim_status                = para->status.sim_status;
+			   sim_data->para.status.sim_status_type        = para->status.sim_status_type;
+#else
+                        memcpy(&sim_data->para.status,
+                                para,sizeof(T_MFW_SIM_STATUS));
+#endif
+                        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
+
+*/
+
+/* OMAPS00075177 - 17,Apr-2006 */
+/* Signature of the function has been changed from U8 to T_ACI_CME_ERR. 
+   because, when calling this function, it is converting from T_ACI_CME_ERR to U8. 
+   It is loosing the negative values( the enum T_ACI_CME_ERR has negative values )
+*/
+void sim_error_cfun (T_ACI_CME_ERR 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:     		
+	//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+	//Update global aciErrDesc with the current CME error code
+	ACI_ERR_DESC( ACI_ERR_CLASS_Cme, result );
+        C_KEY_REQ = 1;
+	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;
+		
+#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    */	
+#ifdef SIM_PERS	   	
+	   	C_KEY_REQ = 0;
+#endif
+            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:
+   	     //x0pleela 25 Sep, 2006 ER: OMAPS00095524
+   	     //Update global aciErrDesc with the current CME error code
+   	     ACI_ERR_DESC( ACI_ERR_CLASS_Cme, result );
+            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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, result );		 	
+         	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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, result );
+         	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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, result );
+         	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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, result );		 	
+         	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;
+			
+//x0pleela 27 Apr, 2006  DR: OMAPS00067919
+	case CME_ERR_WrongPasswd:
+		{
+			TRACE_EVENT("CME_ERR_WrongPasswd");
+			switch( aciErrDesc & 0x0000FFFF )
+				{
+					case CME_ERR_PhoneFail:
+      					case CME_ERR_NetworkPersPukReq:
+     					case CME_ERR_NetworkSubsetPersPukReq:
+     					case CME_ERR_ProviderPersPukReq:
+     					case CME_ERR_CorporatePersPukReq:     		
+       					C_KEY_REQ = 1;
+				            	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_LOCKED;
+				            	sim_stat = SIM_ACTIVE;
+	            				break;
+
+					default:
+						C_KEY_REQ = 0;
+						break;
+				}
+		}
+	break;
+  
+//x0pleela 23 Aug, 2006 DR: OMAPS00091250
+	case CME_ERR_Unknown:
+	{
+		if( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) 
+		{
+			switch(aciErrDesc & 0x0000FFFF)
+			{
+				//x0pleela 06 Sep, 2006 DR: OMAPS00091250
+				//Check for No MEPD Error
+				case EXT_ERR_NoMEPD:
+					sim_status.sim_status = MFW_MEPD_INVALID;
+					sim_status.sim_pin_retries = 0;
+					sim_status.sim_status_type = MFW_SIM_UNKNOWN;
+					sim_stat = SIM_ACTIVE;
+				break;
+
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+				//Set the reqd. parameters for Blocked Network Password request
+				case EXT_ERR_BlockedNetworkPersPinReq:
+					sim_status.sim_status = MFW_SIM_PBLOCK_REQ;
+			         	sim_status.sim_pin_retries = 0;
+				      	sim_status.sim_status_type = MFW_SIM_LOCKED;
+			         	sim_stat = SIM_ACTIVE;
+				break;
+
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+				//Set the reqd. parameters for Blocked Network Unblock code request
+				case EXT_ERR_BlockedNetworkPersPukReq:
+					C_KEY_REQ = 1;
+				      	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_LOCKED;
+				      	sim_stat = SIM_ACTIVE;
+	            		break;
+
+				default:
+					break;
+			}
+		}
+	}
+	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=CPIN_RSLT_NotPresent;
+
+    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;
+
+ 	//x0pleela 26 Sep, 2006 DR: OMAPS00096565
+	//Reset C_KEY_REQ to 0
+#ifdef SIM_PERS	  
+   	C_KEY_REQ = 0; 
+#endif
+
+    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:     		
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, reason );
+		C_KEY_REQ = 1;
+		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;
+
+//	Nov 03, 2005 DR: OMAPS00050595 - xpradipg		
+        case CME_ERR_SimPukReq:         /* PUK 1 must be entered    */
+	     C_KEY_REQ = 0;
+            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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, reason );		 	
+            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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, reason );		 	
+         	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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, reason );			 	
+         	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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, reason );			 	
+         	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:
+		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+		//Update global aciErrDesc with the current CME error code
+		ACI_ERR_DESC( ACI_ERR_CLASS_Cme, reason );			 	
+         	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;
+
+	case CME_ERR_Unknown:
+	{
+		//Check for No MEPD Error
+		if( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) 
+		{
+			switch(aciErrDesc & 0x0000FFFF)
+			{
+				//x0pleela 06 Sep, 2006 DR: OMAPS00091250
+				case EXT_ERR_NoMEPD:
+					sim_status.sim_status = MFW_MEPD_INVALID;
+					sim_status.sim_pin_retries = 0;
+					sim_status.sim_status_type = MFW_SIM_UNKNOWN;
+					sim_stat = SIM_ACTIVE;
+					sim_signal(E_SIM_STATUS,&sim_status);
+					return;
+					
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+				//Set the reqd. parameters for Blocked Network Password request
+				case EXT_ERR_BlockedNetworkPersPinReq:
+					sim_status.sim_status = MFW_SIM_PBLOCK_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;
+				
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+				//Set the reqd. parameters for Blocked Network Unblock code request
+				case EXT_ERR_BlockedNetworkPersPukReq:
+					C_KEY_REQ = 1;
+					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;
+	            		
+				default:
+					break;
+			}
+		}
+	}
+	break;
+#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:
+#ifdef SIM_PERS			
+	     C_KEY_REQ = 0;
+#endif
+            sim_status.sim_status = MFW_SIM_PUK_REQ;
+            sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK1);
+	    //x0pleela 10 May, 2006  DR: OMAPS00067919
+	     sim_status.sim_status_type = MFW_SIM_PUK1;
+            sim_status.sim_procedure = MFW_SIM_ACTIVATION;
+	    sim_stat = SIM_ACTIVE;
+            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)
+{
+
+
+    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;
+	//TISH due to 11.11, if pin is unblock successfully, it should set pin Enabled.
+//#ifdef SIM_PERS
+		pin1_set = MFW_SIM_ENABLE; 
+//#endif
+            break;
+            //xrashmic 1 Jul, 2006 OMAPS00075784	
+            //To handle the simp lock disable events during bootup
+            case MFW_SIM_ACTIVATION:
+            sim_status.sim_procedure = MFW_SIM_ACTIVATION;
+            sim_status.sim_status = MFW_SIM_NO_PIN;
+            sim_status.sim_status_type = pin_ident;
+            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)
+{
+	T_ACI_RETURN ret;//xrashmic 6 Jul, 2006 OMAPS00080708
+    TRACE_FUNCTION("sim_unblock_pin()");
+
+    pin_flag = MFW_SIM_UNBLOCK;
+	  pin_ident = pin_id;
+    switch (pin_id)
+    {
+        case MFW_SIM_PUK1:
+            ret= sAT_PercentPVRF(CMD_SRC_LCL, PVRF_TYPE_Puk1, puk, newpin);
+		//xrashmic 6 Jul, 2006 OMAPS00080708
+		// For error return value, bmi has to be informed
+	    if(ret==AT_FAIL)
+	    	{
+			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);
+
+	    	}
+            break;
+        case MFW_SIM_PUK2:
+           ret= sAT_PercentPVRF(CMD_SRC_LCL, PVRF_TYPE_Puk2, puk, newpin);
+		//xrashmic 6 Jul, 2006 OMAPS00080708
+		// For error return value, bmi has to be informed
+		if(ret==AT_FAIL)
+	    {
+			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);
+	    }
+            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:
+	/*a0393213 warnings removal - CPWD_FAC_Sc changed to FAC_Sc as a result of ACI enum change*/
+            sAT_PlusCPWD(CMD_SRC_LCL, FAC_Sc,              
+                         (char *)old_pin, (char *)new_pin);
+            break;
+        case MFW_SIM_PIN2:
+            sAT_PlusCPWD(CMD_SRC_LCL, 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()");
+    /*a0393213 warnings removal - CLCK_FAC_Sc changed to FAC_Sc as a result of ACI enum change*/
+    return ss_set_clck(FAC_Sc, CLCK_MOD_Unlock,
+               (char *)pin, CLASS_NotPresent, MFW_SIM_CPIND); /*a0393213 compiler warnings removal - -1 changed to CLASS_NotPresent*/
+}
+
+
+/*
++--------------------------------------------------------------------+
+| 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_disable       |
++--------------------------------------------------------------------+
+
+ PURPOSE : To disable the protocol stack
+xashmic 9 Sep 2006, OMAPS00092732
+*/
+void sim_disable (void)
+{
+
+	T_ACI_RETURN cfun;
+
+    TRACE_FUNCTION("sim_disable()");
+    /* 
+     * Full functionality is used don´t reset the ME 
+     */
+	cfun = sAT_PlusCFUN(CMD_SRC_LCL,CFUN_FUN_Minimum,CFUN_RST_NotPresent);
+
+	 if (cfun NEQ AT_EXCT)
+	{
+	    TRACE_ERROR("sAT_PlusCFUN error");
+	}
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_SIM            |
+| STATE   : code                        ROUTINE : sim_enable       |
++--------------------------------------------------------------------+
+
+  PURPOSE : To enable the protocol stack
+xashmic 9 Sep 2006, OMAPS00092732
+*/
+void sim_enable (void)
+{
+
+	T_ACI_RETURN cfun;
+
+    TRACE_FUNCTION("sim_enable()");
+	cfun = sAT_PlusCFUN(CMD_SRC_LCL,CFUN_FUN_Full,CFUN_RST_NotPresent);
+
+	 if (cfun NEQ AT_EXCT)
+	{
+	    TRACE_ERROR("sAT_PlusCFUN error");
+	}
+}
+/*
++--------------------------------------------------------------------+
+| 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()");
+    /*a0393213 warnings removal - CLCK_FAC_Sc, changed to FAC_Sc as a result of ACI enum change*/
+    return ss_set_clck(FAC_Sc, CLCK_MOD_Lock,
+               (char *)pin, CLASS_NotPresent, MFW_SIM_CPINE);/*a0393213 compiler warnings removal - -1 changed to CLASS_NotPresent*/
+}
+
+#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");
+/*a0393213 warnings removal - CLCK_FAC_Sc, changed to FAC_Sc as a result of ACI enum change*/
+	if( sAT_PlusCLCK(CMD_SRC_LCL,FAC_Fc,CLCK_MOD_Unlock,(char*)puk,CLASS_NotPresent)==AT_CMPL)/*a0393213 compiler warnings removal - -1 changed to CLASS_NotPresent*/
+		//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
+ 
+*******************************************************************************/
+int 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_FAC lckFac;/*a0393213 warnings removal - T_ACI_CLCK_FAC changed to T_ACI_FAC as a result of ACI enum changed*/
+	/*a0393213 compiler warnings removal- removed variables clsStat,slock_status,status*/
+	
+	int maxval, curval;
+	T_ACI_RETURN ret; //x0pleela 21 Apr, 2006  DR: OMAPS00067919
+	T_ACI_CPIN_RSLT code; //x0pleela 21 Apr, 2006  DR: OMAPS00067919
+	
+	TRACE_FUNCTION("mfw_simlock_check_lock_bootup");
+	
+       lckFac= mfw_simlock_return_lock_type(lcktype);
+
+	//x0pleela 27 Apr, 2006  DR: OMAPS00067919
+	sim_unlock_in_prog = SIMP_BOOTUP;
+       simp_cpin_flag = FALSE;
+       //xrashmic 1 Jul, 2006 OMAPS00075784
+       //To handle the simp lock disable events during bootup
+       pin_flag=MFW_SIM_ACTIVATION;
+	if(sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Unlock,(char*)pin,CLASS_NotPresent)== AT_FAIL)/*a0393213 compiler warnings removal - -1 changed to CLASS_NotPresent*/
+	{
+		//x0pleela 11 Sep, 2006  DR: OMASP00094215
+		//checking for Class type and the ext busy error and update Simp_Busy_State accordingly	
+		//x0pleela 06 Sep, 2006  SIMP: fix for ACI
+		if( ( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+			(aciErrDesc & 0x0000FFFF) EQ EXT_ERR_Busy)
+		  mfw_simlock_set_busy_state(TRUE);
+		else
+		  mfw_simlock_set_busy_state(FALSE);
+		
+		 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;
+
+			//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+			case MFW_SIM_PBLOCK:
+				if(curval !=0)
+				{
+					ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_BlockedNetworkPersPinReq );
+				}
+				else 
+				{
+					 ACI_ERR_DESC( ACI_ERR_CLASS_Ext,  EXT_ERR_BlockedNetworkPersPukReq); 
+				}
+        		break;
+
+		   	// default:                    
+		   	 //	ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_WrongPasswd );          
+		   	 //	break;
+
+		}
+	        return BOOTUP_LOCK_FAILURE;
+	}
+	//x0pleela 21 Apr, 2006  DR: OMAPS00067919
+	//Calling qat_plusCPIN for next category check by ACI
+	else
+	{	
+ 	  ret = qAT_PlusCPIN( CMD_SRC_LCL, &code );
+
+	  if( code EQ CPIN_RSLT_SimReady )
+	  {
+		TRACE_EVENT("BOOTUP_LOCK_SUCCESS");
+		simp_cpin_flag = FALSE;
+	  	return BOOTUP_LOCK_SUCCESS;
+	  }
+	  simp_cpin_flag = TRUE;
+	  simp_cpin_code = code;
+	  switch( ret )
+	  {
+	    case AT_FAIL:
+	      TRACE_EVENT("qAT_PlusCPIN error");
+	      return BOOTUP_LOCK_FAILURE;
+		
+	    case AT_CMPL:
+//           case AT_EXCT:
+		TRACE_EVENT("BOOTUP_OK");		
+	      return BOOTUP_OK;
+			
+	    default:
+			break;
+	  }	   
+	}
+       return BOOTUP_LOCK_FAILURE; /*a0393213 lint warnings removal - return statement added*/
+}
+
+/*******************************************************************************
+ $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=(T_SUP_INFO_TYPE)flag; /*a0393213 compiler warnings removal - explicit typecast*/
+     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)
+ 
+*******************************************************************************/
+/*a0393213 warnings removal - return type changed from T_ACI_CLCK_FAC as a result of ACI enum change*/
+T_ACI_FAC mfw_simlock_return_lock_type(S16 lck)
+{
+    switch (lck)
+    {
+        //case 0:
+        case MFW_SIM_NLOCK:
+                    return FAC_Pn;
+        //case 1: 
+        case MFW_SIM_SPLOCK:
+                    return FAC_Pp;
+        //case 2: 
+        case MFW_SIM_NSLOCK:
+                    return FAC_Pu;
+        //case 3: 
+        case MFW_SIM_CLOCK:
+                    return FAC_Pc;
+        //case 4: 
+        case MFW_SIM_PLOCK:
+                    return FAC_Ps;
+
+        case MFW_SIM_FC:
+       		return FAC_Fc;
+	
+        case MFW_SIM_FCM:
+       		return FAC_Fcm;
+
+	//x0pleela 20 July, 2006
+	//Return coresponding lock type for master unlock 
+        case MFW_SIM_MKEY:
+       		return FAC_Mu;
+       case MFW_SIM_MKEYM:
+       		return FAC_Mum;
+
+	//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+	//Return coresponding ACI lock type for Blocked network 
+	case MFW_SIM_PBLOCK:
+		return FAC_Bl;
+		
+        default:
+                return FAC_NotPresent; /*a0393213 compiler warnings removal - -1 changed to CLCK_FAC_NotPresent*/
+    }
+        
+}
+
+
+/*******************************************************************************
+ $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 (curr_fc == 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)
+{
+    /*a0393213 compiler warnings removal - removed variable stat*/
+    T_ACI_CLSSTAT clsStat;
+    T_ACI_FAC lckfac;/*a0393213 warnings removal - T_ACI_CLCK_FAC changed to T_ACI_FAC as a result of ACI enum change*/
+    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_SS_RETURN mfw_simlock_enable_lock(U8 *pin, S16 lcktyp)
+{
+
+    T_ACI_FAC lckFac;/*a0393213 warnings removal - T_ACI_CLCK_FAC changed to T_ACI_FAC as a result of ACI enum change*/
+//	Nov 03, 2005 DR: OMAPS00052032 - xpradipg	
+     T_ACI_RETURN ret;
+    TRACE_FUNCTION("mfw_simlock_enable_lock()");
+
+  /*  return ss_set_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,CLASS_NotPresent); /*a0393213 compiler warnings removal - -1 changed to CLASS_NotPresent*/
+//	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 = SIMP_MENU;
+		return MFW_EXCT;
+	case AT_FAIL:
+		return MFW_SS_FAIL;
+  }
+  return MFW_SS_FAIL; /*a0393213 compiler warnings removal - added return statement*/
+}
+
+/*******************************************************************************
+ $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_SS_RETURN mfw_simlock_disable_lock(U8 *pin, S16 lcktyp)
+{
+    T_ACI_FAC lckFac;/*a0393213 warnings removal - T_ACI_CLCK_FAC changed to T_ACI_FAC as a result of ACI enum change*/
+     T_ACI_RETURN ret;
+
+    TRACE_FUNCTION("mfw_simlock_disable_lock()");
+  /*  return ss_set_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,CLASS_NotPresent) ; /*a0393213 compiler warnings removal - -1 changed to CLASS_NotPresent*/
+  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_FAC lckFac;/*a0393213 warnings removal - T_ACI_CLCK_FAC changed to T_ACI_FAC as a result of ACI enum change*/
+    T_ACI_RETURN stat;
+    TRACE_FUNCTION("mfw_simlock_reset_fc_value()");
+    TRACE_EVENT_P1("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,CLASS_NotPresent) ;/*a0393213 compiler warnings removal - -1 changed to CLASS_NotPresent*/
+   if( stat != AT_CMPL)
+   	{
+   	TRACE_FUNCTION_P1("Reset Failed %d",stat);
+        return MFW_SS_FAIL;
+   	}
+    else
+   	{
+   	TRACE_FUNCTION("Reset Success");
+        return MFW_SS_OK;
+    	}
+}
+
+/*******************************************************************************
+ $Function:		mfw_simlock_master_unlock
+ $Description:		This function unlocks(dependent categories) or unblocks ME
+ $Returns:		success or failure
+ $Arguments:	 
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+T_MFW mfw_simlock_master_unlock(U8 *pin, S16 MK_Unblock_flag)
+{
+  T_ACI_FAC lckFac;/*a0393213 warnings removal - T_ACI_CLCK_FAC changed to T_ACI_FAC as a result of ACI enum change*/
+  T_ACI_RETURN stat;
+
+  TRACE_FUNCTION("mfw_simlock_master_unlock()");
+
+  lckFac= mfw_simlock_return_lock_type(MK_Unblock_flag);
+  stat =sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Unlock,(char*)pin,CLASS_NotPresent);/*a0393213 warnings removal - -1 changed to CLASS_NotPresent*/
+  if( stat != AT_CMPL)
+  {
+    TRACE_EVENT_P1("Master Unlock Failed %d",stat);
+	//x0pleela 13 Nov, 2006 DR: OMAPS00103356
+	//Check if the master unlock password is wrong
+	//If wrong, displays Wrong password
+	if((aciErrDesc & 0x0000FFFF) EQ CME_ERR_WrongPasswd)
+	  return MFW_WRONG_PWD;
+
+	//x0pleela 13 Nov, 2006 DR: OMAPS00103356
+	//Check the error code for any of the following categories (non-dependent) being locked/blocked
+	//If yes, return OK as the dependent categories are unblocked using Master unblock password
+	else if (
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_NetworkPersPinReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_NetworkPersPukReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_NetworkSubsetPersPinReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_NetworkSubsetPersPukReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_ProviderPersPinReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_ProviderPersPukReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_CorporatePersPinReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_CorporatePersPukReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_PhSimPinReq ) OR
+		( (aciErrDesc & 0x0000FFFF) EQ CME_ERR_PhoneFail ) OR
+		( ( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+			(aciErrDesc & 0x0000FFFF) EQ EXT_ERR_BlockedNetworkPersPinReq)  OR
+		( ( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+			(aciErrDesc & 0x0000FFFF) EQ EXT_ERR_BlockedNetworkPersPukReq)
+		)
+		return MFW_MASTER_OK;
+	else
+    return MFW_SS_FAIL;
+  }
+  else
+  {
+    TRACE_EVENT("Master Unlock Success");
+    return MFW_SS_OK;
+  }
+}
+
+/*******************************************************************************
+ $Function:		mfw_simlock_check_masterkey
+ $Description:		This function checks from ACI whether Master Unlock feature is enabled or not
+ 				If enabled, displays a menu item for the user to select master unlocking option
+ 				If not enabled, doesn't display master unlocking option in the menu
+ $Arguments: 
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+
+UBYTE mfw_simlock_check_masterkey( S16 MK_unlock_type)
+{
+  T_ACI_CLSSTAT clsStat;
+  T_ACI_FAC lckfac;/*a0393213 warnings removal - T_ACI_CLCK_FAC changed to T_ACI_FAC as a result of ACI enum change*/
+
+  TRACE_FUNCTION("mfw_simlock_check_masterkey()");
+  
+  //get the lock type
+  lckfac= mfw_simlock_return_lock_type(MK_unlock_type);
+
+  //query ACI for master unlocking option
+  qAT_PlusCLCK(CMD_SRC_LCL, lckfac, CLASS_NotPresent, &clsStat);
+
+  switch( clsStat.status)
+  {
+    case STATUS_Active:
+      return MFW_MASTER_UNLOCK_ACTIVE;
+
+    case STATUS_NotActive:
+    default:
+      return MFW_MASTER_UNLOCK_DEACTIVE;
+  }
+}
+
+/*******************************************************************************
+ $Function:		mfw_simlock_set_busy_state
+ $Description:		This function sets Simp_Busy_State to either TRUE or FALSE based on ACI's 
+ 				CME error
+ $Arguments: 
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+void mfw_simlock_set_busy_state( UBYTE state )
+{
+  TRACE_FUNCTION("mfw_simlock_set_busy_state()");
+  Simp_Busy_State = state;
+}
+
+/*******************************************************************************
+ $Function:		mfw_simlock_get_busy_state
+ $Description:		This function returns the current value of Simp_Busy_State	
+ $Arguments: 
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+UBYTE mfw_simlock_get_busy_state( void )
+{
+  TRACE_FUNCTION("mfw_simlock_get_busy_state()");
+  return Simp_Busy_State;
+}
+
+
+//	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_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_FAC lckType;/*a0393213 warnings removal - T_ACI_CPWD_FAC changed to T_ACI_FAC as a result of ACI enum change*/
+
+	switch(type)
+	{
+		case MFW_SIM_NLOCK:
+			lckType = FAC_Pn;
+			break;
+		case MFW_SIM_SPLOCK:
+			lckType = FAC_Pp;
+			break;
+		case MFW_SIM_NSLOCK:
+			lckType = FAC_Pu;
+			break;
+		case MFW_SIM_CLOCK:
+			lckType = FAC_Pc;
+			break;
+		case MFW_SIM_PLOCK:
+			lckType = FAC_Ps;
+			break;
+		default:
+			lckType=FAC_NotPresent;
+			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;
+
+#ifdef FF_2TO1_PS
+    nm_mmi_parameters(&mmi_insert_ind->imsi_field,
+                      &mmi_insert_ind->pref_plmn);
+
+    memcpy(sim_service_table,mmi_insert_ind->serv_table,
+#else
+    nm_mmi_parameters(&mmi_insert_ind->imsi_field);
+    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();       
+
+   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(USHORT 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(USHORT 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()");
+
+/* Dec 13, 2006 DR: OMAPS00105640  x0039928
+    Fix: sim_stat is updated                                  */
+      sim_stat = SIM_NOT_ACTIVE;	
+    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_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;
+	case CME_ERR_SimResetNeeded: /*OMAPS00115179 -a0393213 (R.Prabakar*/
+	 {
+	 	T_ACI_RETURN cfun;
+		/*This event is not passed to BMI as there is no need currently*/
+		cfun = sAT_PlusCFUN(CMD_SRC_LCL,CFUN_FUN_Full,CFUN_RST_NotPresent);		
+		 if (cfun NEQ AT_EXCT)
+		{
+		    TRACE_ERROR("rAT_PercentSIMINS() : sAT_PlusCFUN error");
+		}		
+		  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 MfwResErr;/*a0393213 warnings removal-MFW_SIM_FAILURE changed to MfwResErr*/
+
+		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 MfwResDone;/*a0393213 warnings removal-MFW_SIM_SUCCESS changed to MfwResDone*/
+}
+
+
+/*
++--------------------------------------------------------------------+
+| 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 (USHORT 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
+}
+
+//TISH, patch for ASTec32515/OMAPS00134509
+//start
+void sim_invalid_ind(void)
+{
+			sim_status.sim_status = MFW_SIM_INVALID_CARD;
+             sim_signal(E_SIM_STATUS,&sim_status);
+}
+//end
+/*
++--------------------------------------------------------------------+
+| 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 (USHORT 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
+}
+
+/*
++---------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)   MODULE  : MFW_SIM                 |
+| STATE   : code                   ROUTINE : sim_simlock_cpin_code            |
++---------------------------------------------------------------------+
+
+  PURPOSE : This function checks for the code and take action for SIMP category unlocking 
+*/ 
+#ifdef SIM_PERS
+void sim_simlock_cpin_code (T_ACI_CPIN_RSLT code)
+{
+    TRACE_FUNCTION("sim_simlock_cpin_code()");
+
+    sim_status.sim_procedure = MFW_SIM_ACTIVATION;
+    sim_status.sim_operation_mode = sim_config.oper_mode;
+    sim_status.sim_pin_retries = 0;
+    sim_stat = SIM_ACTIVE;
+    pin_flag = -1;
+    pin_ident = MFW_SIM_UNKNOWN;
+  
+	 if( code EQ CPIN_RSLT_SimReady )
+	  {
+		TRACE_EVENT("CPIN_RSLT_SimReady");
+      		sim_status.sim_status = MFW_SIM_NO_PIN;
+     		 sim_status.sim_status_type = pin_ident;
+	      pin_ident = MFW_SIM_UNKNOWN;
+		  simp_cpin_flag = FALSE;
+      		sim_signal(E_SIM_STATUS,&sim_status);
+	  	return ;
+	  }
+    switch ( code )
+    {
+      case CPIN_RSLT_PhSimPinReq:         
+            sim_status.sim_status = MFW_SIM_PLOCK_REQ;
+            sim_status.sim_status_type = MFW_SIM_LOCKED ;
+            sim_signal(E_SIM_STATUS,&sim_status);
+  	    break;
+
+      case CPIN_RSLT_PhNetPinReq:
+         	sim_status.sim_status = MFW_SIM_NLOCK_REQ;
+         	sim_status.sim_status_type = MFW_SIM_LOCKED;
+         	sim_signal(E_SIM_STATUS,&sim_status);
+    		break;
+
+         case CPIN_RSLT_PhNetSubPinReq:
+         	sim_status.sim_status = MFW_SIM_NSLOCK_REQ;
+         	sim_status.sim_status_type = MFW_SIM_LOCKED;
+ 			sim_signal(E_SIM_STATUS,&sim_status);
+    		break;
+
+         case CPIN_RSLT_PhSPPinReq:
+         	sim_status.sim_status = MFW_SIM_SPLOCK_REQ;
+         	sim_status.sim_status_type = MFW_SIM_LOCKED;
+         	sim_signal(E_SIM_STATUS,&sim_status);
+    		break;
+
+         case CPIN_RSLT_PhCorpPinReq:
+         	sim_status.sim_status = MFW_SIM_CLOCK_REQ;
+         	sim_status.sim_status_type = MFW_SIM_LOCKED;
+         	sim_signal(E_SIM_STATUS,&sim_status);
+    		break;
+
+	case CPIN_RSLT_PhNetPukReq:
+      	case CPIN_RSLT_PhNetSubPukReq:
+     	case CPIN_RSLT_PhSPPukReq:
+     	case CPIN_RSLT_PhCorpPukReq:
+	case CPIN_RSLT_PhSimFail:
+    	     C_KEY_REQ = 1;	
+            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_signal(E_SIM_STATUS,&sim_status);
+    	    break;
+
+	//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+	//Set the reqd. parameters for Blocked Network Password request
+	case CPIN_RSLT_PhBlockedNetPinReq:
+         	sim_status.sim_status = MFW_SIM_PBLOCK_REQ;
+         	sim_status.sim_status_type = MFW_SIM_LOCKED;
+         	sim_signal(E_SIM_STATUS,&sim_status);
+    		break;
+			
+	//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+	//Set the reqd. parameters for Blocked Network Unblock code request
+	case CPIN_RSLT_PhBlockedNetPukReq:
+    	     C_KEY_REQ = 1;	
+            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_signal(E_SIM_STATUS,&sim_status);
+    	    break;
+
+        default:
+            TRACE_ERROR("sim_simlock_cpin_code (): result");
+            break;
+    }  
+	return ;
+}
+#endif
+
+//x0pleela 19 Feb, 2007  ER: OMAPS00122561
+#ifdef FF_PHONE_LOCK
+
+/*******************************************************************************
+ $Function:		mfw_phlock_get_lock_status
+ $Description:	returns the status of the lock - enabled / disabled
+ $Returns:		lock status
+ $Arguments:	lock type
+ 
+*******************************************************************************/
+int mfw_phlock_get_lock_status(S16 lcktyp)
+{
+    T_ACI_CLSSTAT clsStat;
+    T_ACI_FAC lckfac;
+
+    TRACE_FUNCTION("mfw_phlock_get_lock_status()");
+	
+	lckfac = FAC_Pl;
+
+	if (qAT_PlusCLCK(CMD_SRC_LCL, lckfac,
+                     CLASS_NotPresent, &clsStat) EQ AT_CMPL)
+    {
+    TRACE_FUNCTION("qAT_PlusCLCK->AT_CMPL ");
+        switch (clsStat.status)
+        {
+            case STATUS_NotActive:
+		  TRACE_FUNCTION("MFW_PH_LOCK_DISABLE ");
+
+		  //x0pleela 29 May, 2007  DR: OMAPS00132483
+		  //set the phone lock status to FALSE
+		  mfw_set_Phlock_status(FALSE);
+                return MFW_PH_LOCK_DISABLE;
+
+            case STATUS_Active:
+		  TRACE_FUNCTION("MFW_PH_LOCK_ENABLE ");
+
+  		  //x0pleela 29 May, 2007  DR: OMAPS00132483
+  		  //set the phone lock status to TRUE
+		  mfw_set_Phlock_status(TRUE);
+
+                return MFW_PH_LOCK_ENABLE;
+        }
+    }
+    return MFW_PH_LOCK_FAILURE;
+    
+}
+
+/*******************************************************************************
+ $Function:		mfw_autophlock_get_lock_status
+ $Description:	returns the status of the lock - enabled / disabled
+ $Returns:		lock status
+ $Arguments:	lock type
+ 
+*******************************************************************************/
+int mfw_phlock_get_autolock_status(S16 lcktyp)
+{
+    T_ACI_CLSSTAT clsStat;
+    T_ACI_FAC lckfac=FAC_NotPresent;
+
+    TRACE_FUNCTION("mfw_phlock_get_lock_status()");
+
+	if( lcktyp == MFW_AUTO_PH_LOCK)
+		lckfac = FAC_Apl;
+
+	if (qAT_PlusCLCK(CMD_SRC_LCL, lckfac,
+                     CLASS_NotPresent, &clsStat) EQ AT_CMPL)
+    {
+    TRACE_FUNCTION("qAT_PlusCLCK->AT_CMPL ");
+        switch (clsStat.status)
+        {
+            case STATUS_NotActive:
+		  TRACE_FUNCTION("MFW_PH_LOCK_DISABLE ");
+		  
+  		  //x0pleela 29 May, 2007  DR: OMAPS00132483
+  		  //set the auto phone lock status to FALSE
+		  mfw_set_Auto_Phlock_status(FALSE);		  
+                return MFW_PH_LOCK_DISABLE;
+
+            case STATUS_Active:
+		  TRACE_FUNCTION("MFW_PH_LOCK_ENABLE ");
+
+    		  //x0pleela 29 May, 2007  DR: OMAPS00132483
+    		  //set the auto phone lock status to TRUE
+		  mfw_set_Auto_Phlock_status(TRUE);		
+                return MFW_PH_LOCK_ENABLE;
+        }
+    }
+    return MFW_PH_LOCK_FAILURE;
+    
+}
+/*******************************************************************************
+ $Function:		mfw_phlock_enable_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_SS_RETURN mfw_phlock_enable_lock(U8 *pin, S16 lcktyp)
+{
+    T_ACI_FAC lckFac=FAC_NotPresent;
+     T_ACI_RETURN ret;
+    TRACE_FUNCTION("mfw_phlock_enable_lock()");
+	if( lcktyp == MFW_AUTO_PH_LOCK )
+		lckFac = FAC_Apl;
+	else if ( lcktyp == MFW_PH_LOCK )
+		lckFac = FAC_Pl;
+
+  	ret = sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Lock,(char*)pin,CLASS_NotPresent); 
+	  switch(ret)
+	  {
+	  	case AT_CMPL:
+			return MFW_SS_OK;
+		case AT_FAIL:
+			return MFW_SS_FAIL;
+	  }
+  return MFW_SS_FAIL; 
+}
+
+/*******************************************************************************
+ $Function:		mfw_phlock_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_SS_RETURN mfw_phlock_disable_lock(U8 *pin, S16 lcktyp)
+{
+	T_ACI_FAC lckFac=FAC_NotPresent;
+	T_ACI_RETURN ret;
+
+	TRACE_FUNCTION("mfw_phlock_disable_lock()");
+	if( lcktyp == MFW_PH_LOCK )
+		lckFac = FAC_Pl;
+
+		ret =  sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Unlock,(char*)pin,CLASS_NotPresent) ; 
+	if(ret != AT_CMPL)
+		return MFW_SS_FAIL;
+	else
+		return MFW_SS_OK;
+}
+
+/*******************************************************************************
+ $Function:		mfw_phlock_disable_autoLock
+ $Description:	disables the auto lock when user selects Autolock Off option from menu
+ $Returns:		success or failure
+ $Arguments:	type of lock and password
+ 
+*******************************************************************************/
+T_MFW_SS_RETURN mfw_phlock_disable_autoLock( S16 lcktyp)
+{
+	T_ACI_FAC lckFac=FAC_NotPresent;
+	T_ACI_RETURN ret;
+
+	TRACE_FUNCTION("mfw_phlock_disable_lock()");
+	if( lcktyp == MFW_AUTO_PH_LOCK )
+		lckFac = FAC_Apl;
+
+	if( mfw_phlock_get_autolock_status(MFW_AUTO_PH_LOCK) == MFW_PH_LOCK_ENABLE ) 
+	{	
+		ret =  sAT_PlusCLCK(CMD_SRC_LCL,lckFac,CLCK_MOD_Unlock,NULL,CLASS_NotPresent) ;
+
+	if(ret != AT_CMPL)
+		return MFW_SS_FAIL;
+	else
+		return MFW_SS_OK;
+	}
+	else
+	{
+		return MFW_SS_ALRDY_DIS;
+	}
+}
+
+/*******************************************************************************
+ $Function:		mfw_phlock_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_phlock_change_lock_code(int type,char*oldpswd,char* newpswd)
+{
+    T_ACI_FAC lckType=FAC_NotPresent;
+	T_ACI_RETURN ret;
+
+		TRACE_FUNCTION("mfw_phlock_change_lock_code()");
+	if(type == MFW_PH_LOCK )
+	lckType= FAC_Pl;
+
+    ret = sAT_PlusCPWD(CMD_SRC_LCL, lckType, (char *)oldpswd,(char *)newpswd);
+	TRACE_EVENT_P1("mfw_phlock_change_lock_code:ret: %d", ret);
+	if( 	ret != AT_CMPL )
+	{
+	TRACE_FUNCTION("mfw_phlock_change_lock_code: FAILED");
+		return MFW_SS_FAIL;
+	}
+	else
+		{
+		TRACE_FUNCTION("mfw_phlock_change_lock_code: SUCCESS");
+       return MFW_SS_OK;
+		}
+}
+
+/*******************************************************************************
+
+ $Function:  mfw_set_Auto_Phlock_status
+
+ $Description:	 set /resets the AutoPhlockStatus bit in Phlock_flag 
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 29 May, 2007  DR: OMAPS00132483
+GLOBAL void mfw_set_Auto_Phlock_status( int phlock_status)
+{
+	TRACE_FUNCTION("mfw_set_Auto_Phlock_status()");
+	if( phlock_status )
+		Phlock_flag |=  AutoPhlockStatus;
+	else
+		Phlock_flag &= Phlock_ResetFlag;
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:  mfw_get_Auto_Phlock_status
+
+ $Description:	 returns the AutoPhlockStatus status from Phlock_flag 
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 29 May, 2007  DR: OMAPS00132483
+GLOBAL int mfw_get_Auto_Phlock_status(void)
+{
+	TRACE_FUNCTION("mfw_get_Auto_Phlock_status()");
+	if( (Phlock_flag & AutoPhlockStatus) == AutoPhlockStatus)
+		return TRUE;
+	else
+		return FALSE;
+}
+
+
+/*******************************************************************************
+
+ $Function:  mfw_set_Phlock_status
+
+ $Description:	 set /resets the PhlockStatus bit in Phlock_flag 
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 29 May, 2007  DR: OMAPS00132483
+GLOBAL void mfw_set_Phlock_status( int phlock_status)
+{
+	TRACE_FUNCTION("mfw_set_Phlock_status()");
+	if( phlock_status )
+		Phlock_flag |=  PhlockStatus;
+	else
+		Phlock_flag &= Phlock_ResetFlag;
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:  mfw_get_Phlock_status
+
+ $Description: returns the PhlockStatus status from Phlock_flag 
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 29 May, 2007  DR: OMAPS00132483
+GLOBAL int mfw_get_Phlock_status(void)
+{
+	TRACE_FUNCTION("mfw_get_Phlock_status()");
+	if( (Phlock_flag & PhlockStatus) == PhlockStatus)
+		return TRUE;
+	else
+		return FALSE;
+}
+#endif /* FF_PHONE_LOCK */
+