diff src/ui3/bmi/mmiPins.c @ 421:6a4d9f47793e

src/ui3/bmi: file renames to make the case consistent
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 21 Jan 2018 03:28:53 +0000
parents src/ui3/bmi/MmiPins.c@e8ddbb0837ed
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ui3/bmi/mmiPins.c	Sun Jan 21 03:28:53 2018 +0000
@@ -0,0 +1,12017 @@
+
+/*******************************************************************************
+
+					CONDAT (UK) 
+
+********************************************************************************									      
+
+ This software product is the property of Condat (UK) Ltd and may not be
+ disclosed to any third party without the express permission of the owner.				   
+									      
+********************************************************************************
+
+ $Project name: Basic MMI						       
+ $Project code: BMI (6349)							     
+ $Module:		MMI
+ $File: 	    MmiPins.c
+ $Revision:		1.0							  
+									      
+ $Author:		Condat(UK)							   
+ $Date: 	    25/10/00							  
+									       
+********************************************************************************
+									      
+ Description:
+ 
+  MMI PIN / PUK entry handling
+			
+********************************************************************************
+
+ $History: MmiPins.c
+
+	May 24, 2007  DR: OMAPS00132483 x0pleela
+	Description: MM: While playing an AAC, unplug USB freezes the audio
+	Solution: If any Audio file is playing, then stopping them before enabling/disabling phone lock,
+				auto phone lock and changing unlock password.
+			Changed the name of fucntions for setting and restting the headset/usb bit in 
+				ph_lock status variable
+	
+ 	May 23, 2007    DR: OMAPS00127483  x0pleela
+	Description:   Phonelock - Unable to unlock the phone during incoming call with ringer...
+	Solution: 	When ringer for either incoming call or alarm is playing in phone locked state, Audio 
+			usues the DMA channels which will be active. The DMA channels will be available only 
+			after the audio file is fully played. This will cause that process to be blocked until the 
+			DMA channel becomes in-active and in turn if we try to query or access secure driver 
+			we are blocked until the audio file is completely played. Since this is a hardware 
+			constraint, we found a workaround for this issue and are stopping the ringer  
+			either for incoming call or alarm before accessing secure driver for enabling or 
+			disbaling the phone lock.
+
+	May 09, 2007  DR: OMAPS00129014
+	Description: COMBO: unable to send SMS during midi playing
+	Solution: Setting the auto phone lock flag to TRUE / FALSE when automatic phonelock is 
+				on / off respectively	
+	
+	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	   : Unnecessary windows cleared during SIM insertion
+
+ 	Nov 13, 2006 DR: OMAPS00103356  x0pleela
+ 	Description: SIMP:Master unlock failed through MMI
+ 	Solution: 1) In function pins_editor_cb() for INPUT_MASTER_KEY_REQ, 
+			- An event SMLK_SHOW_WRONG_PWD is sent for wrong Master unlock password
+			- An event SMLK_SHOW_DEP_CATS_UNLOCKED is sent which says all the dependent 
+				categories are unlocked
+			2) In function pin_messages(): 
+ 			- An event SMLK_SHOW_WRONG_PWD is handled to display a dialog saying Master 
+ 				Unblock Password is wrong
+			- An event SMLK_SHOW_DEP_CATS_UNLOCKED to display a dialog saying Master 
+				unlocking operation is successful
+
+    	Sep 26, 2006 DR: OMAPS00095524 x0pleela
+ 	Description:Implement 2 missing SIM Lock types
+ 	Solution: Made the following changes
+			1) sim_event_cb_main()
+				- Handling the event MFW_SIM_PBLOCK_REQ for requesting unlocking password 
+					of "Blocked Network" category
+			2) simp_busy_cb()
+				- Added a check for CME class and Ext class and handled all CME errors 
+					and EXT errors separately
+			3) pin_main()
+				- Handling the event INPUT_PBLOCK_PIN_REQ to prompt the user to enter the 
+					Blocked Network Password (PIN or PUK)
+			4) pin_info_cb()
+				- Added a check for CME class and Ext class and handled all CME errors and EXT 
+					errors separately for event SMLK_MASTERKEY and SMLK_PUK
+			5) simlock_check_PBCatLock()
+				- Added new function which gets the lock status of Blocked Network category 
+					and accordingly display the menu item
+			6) simp_unlock_Category()
+				- Handling "Blocked Network" category and send INPUT_PBLOCK_PIN_REQ event
+			7) setLockTypePb()
+				- Added new function which sets the global flag to the Personalisation lock
+			8) set_pin_messages()
+				- Updating the variable which prompts the user to enter Blocked Network password
+			9) pins_editor_cb()
+				- Handling the event INPUT_PBLOCK_PIN_REQ fr Blocked Network category
+				- Added a check for CME class and Ext class and handled all CME errors and EXT 
+					errors separately
+ 	
+ 	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: Added a check for C_KEY_REQ in functions sim_event_cb_main(), pin_info_cb() .
+ 			If this variable is set the SIMP menu will be isplayed 
+ 			else user wil be prompted to enter PUK
+ 
+
+ 	xashmic 21 Sep 2006, OMAPS00095831
+ 	Description: USB enumeration does not happen in PIN/PUK/Insert SIM scenarios
+ 	Solution: When booting up without SIM card, or prompting for PIN/PUK/SIMP entry, 
+ 	enumerate all the USB ports automatically 
+ 	
+ 	Sep 11, 2006 DR: OMAPS00094215  x0pleela
+ 	Description: MMI compilation failed as CME_ErrBusy undefined
+ 	Solution: Handling new Ext_ERR_Busy sent by ACI
+
+ 	Sep 08, 2006 DR: OMAPS00091250 x0pleela
+ 	Description:The phone resets if no MEPD data is presented
+ 	Solution:  - Handling MFW_MEPD_INVALID event in function sim_event_cb_main()
+			- Handling NO_MEPD event in functions pin_main(), pin_edt_kbd_cb(), check_pins(), 
+				pin_editor(), pin_messages(), check_set_pins(), pins_editor_cb(), show_confirmation_cb()
+
+	July 31, 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) Added new element mk_pin to store Master Unlock key to T_Pin structure
+	2) pin_main(), pin_messages(), setting_pin_main(),set_pin_messages(): Added new event SIM_LOCK_BUSY_UNBLOCK 
+		to display a dialog "Busy" when wrong unlock password is entered after 1st attempt if timer is running
+	3) pin_info_cb(): Handling CME_ERR_Busy 
+	4) mmi_simlock_reset_fc_value(), pins_editor_cb(): Handling CME_ERR_Busy error and sending new event 
+		SIM_LOCK_BUSY_UNBLOCK 	to display a dialog "Busy" when wrong unlock password 
+		is entered after 1st attempt if timer is running
+	
+	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) sim_event_cb_main(): check for Master Unlock option enabled. If so, then display the menu 
+				  with options Unblock ME and Master Unlock. Similar for all the categories also.
+	2) pin_main(): 	
+		a) Handling SIM_LOCK_BUSY_BOOTUP event which displays a dialog "Busy" for the user 
+			if timer is enabled and ACI returns Busy error when user had entered wrong unlocking 
+			password
+		b) Handling events SMLK_SHOW_MK_FAIL for wrong master unlock key, 
+			SMLK_SHOW_MK_SUCC for correct master unlock key
+
+	3) pin_messages(): 
+		a) Handling event SMLK_SHOW_MK_FAIL to show a dialog saying "Master Unlock Failed"
+		b) Handling event SMLK_SHOW_MK_SUCC to show a dialog saying "Master Unlock Success"
+		c) For event SMLK_SHOW_FC_SUCC, changed the event from PIN_OK to SMLK_PUK bcoz 
+			after unblocking ME, for event PIN_OK it would go to idle screen without displaying 
+			menu for unlocking any categories if any
+		d) Delete the simp_list window handler after displaying the dialog immaterial of whether 
+			the unlock/unblock passwords are correct or not
+
+	4) pin_info_cb():	
+		a) Handling PUK1_REQ separately as a menu should be displayed for Unblocking ME and 
+			Master Unlock
+		b) Handling SMLK_MASTERKEYto display menu for Unblocking ME or unlocking categories 
+			if any and Master Unlock
+		c) Made changes in the code for event SMLK_PUK to display menu Unblocking ME or 
+			unlocking categories if any and Master Unlock
+
+	5) setting_pin_main():
+		a) Handling event SIM_LOCK_REQ_MKPWD for Master unlock ket request
+		b) Handling event SIM_LOCK_MKPWD_FAIL for Master unlocking failed
+		c) Handling event SIM_LOCK_MKPWDSUCC for Master unlocking success
+		d) Handling new event SIM_LOCK_BUSY to display a dialog Busy for wrong entry of 
+			unlocking pwd and timer been enable
+
+	6) mmi_display_result(): Handling CME error busy while unlocking a locked category and send 
+		SIM_LOCK_BUSY event
+
+	7) mmi_simlock_en_dis_verify(): Handling CME error busy while unlocking a locked category 
+		and send SIM_LOCK_BUSY event
+
+	8) set_pin_editor(): Handling event INPUT_SIM_MKPWD
+
+	9) set_pin_kbd_cb(): Handling event INPUT_SIM_MKPWD
+
+	10) set_pin_messages(): Handling events SIM_LOCK_MKPWD_FAIL for Master unlock failed, 
+		SIM_LOCK_MKPWDSUCC for Master unlock success, SIM_LOCK_BUSY for category unlock 
+		return with Busy error from ACI
+
+	11) pins_editor_cb(): 
+		a) Update mmi_simlock_aciErrDesc with the latest CME error
+		b) Event INPUT_MASTER_KEY_REQ performs master unlock and sends corresponding 
+			events during bootup
+		c) Delete the simp list window handler immaterial of whether the unlock/unblock
+			passwords are correct or not
+		d) Get the busy state "Simp_Busy_State" and send event to display a dialog Busy 
+			for the user
+		e) Check for Master Unlock option enabled. If so, then display the menu with options 
+			<Category> unlock and Master Unlock
+
+	12) Added following new functions:
+		a) simp_busy_cb: This function checks for the ACI CME error and display menu for 
+			unlocking  categories or unblocking ME
+		b) mmi_simlock_category_menus: Starts the simlock category list menu
+		c) SIMLock_unblock_ME: This function sends an event to display an editor for the user to 
+			enter unblocking code
+		d) SIMLock_MasterKeyUnlock_bootup: This functioh gets called to unlock category /unblock 
+			ME during bootup sequence
+		e) SIMLock_MasterKeyUnlock: This functioh gets called to unlock category /unblock ME 
+			through SIMP menu
+		f) simlock_check_masterkey: If there is no support for Master Unlocking the item "Master unlock"
+			will not appear on the menulist
+		g) simlock_get_masterkey_status: This function gets the master key status
+		h) simlock_check_NWCatLock: This function gets the lock status of Network category and 
+			accordingly display the menu item
+		i) simlock_check_NSCatLock: This function gets the lock status of Network subset category and 
+			accordingly display the menu item
+		j) simlock_check_SPCatLock: This function gets the lock status of Service Provider category and 
+			accordingly display the menu item
+		k) simlock_check_CPCatLock: This function gets the lock status of Corporate category and 
+			accordingly display the menu item
+		l) simlock_check_SIMCatLock: This function gets the lock status of SIM category and accordingly 
+			display the menu item
+		m) simlock_check_CatBlock: This function gets  the ME status and accordingly display the menu item
+		n) mmi_simlock_master_unlock: This function unlocks category/unblocks ME and sends event 
+			accordingly through SIMP menu
+		o) simp_unlock_Category: This function sends corresponding event to unlock a locked category 
+			through dynamic menu
+
+       July 11, 2006    DR: OMAPS00084081   x0039928
+       Descripton: CT-GCF-LL[27.22.4.7.2]-No IMSI attched request after SIM reset
+       Solution: Network registration is initiated on sim reset.
+
+	July 05, 2006    DR: OMAPS00084642   x0pleela
+       Descripton: SIMP: we can unlock category with invalid password (more than 16 digit)
+       Solution: Changed the size of simlock password enty from MAX_DIG to MAX_PIN+1
+       
+    xreddymn 4, Jul, 2006 OMAPS00083495
+    Resolved issues reported in PIN and PUK input through BPM.
+
+       June 07, 2006    DR: OMAPS00080701   x0021334
+       Descripton: Phone hangs while unblocking SIMP during bootup.
+       Solution: The assignment of  'SIMP_BOOTUP' to 'sim_unlock_in_prog' to indicate that
+       the operation is happeneing during boot-up sequence was not taking place since the 
+       respective function was not being called when SIMP was blocked and re-boot was done.
+       This has now been corrected.
+
+	xrashmic 6 Jul, 2006 OMAPS00080708
+	The pin window is necessary for displaying the error message for MFW_SS_FAIL
+
+	xrashmic 1 Jul, 2006 OMAPS00075784
+       Fixed the blue screen issue in pin, pin2 and simp scenarios
+	
+	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
+			Function: pin_main()
+					1. Change the text display based on the PUK1 or Unblock code request
+					2. Added code to close the editor on PIN_OK_END event
+			Function: pins_editor_cb()
+					1. Modified the code to check SIMP during bootup sequence
+
+ 	Apr 19, 2006 DR:OMAPS00067912 x0pleela
+	Description: SIMP:On repeat Depersonalisation with invalid password MEPD unblock key should 
+				be asked not Puk1.
+	Solution: Made changes in the functions sim_event_cb_main(), pin_main(), pin_messages(), 
+				pin_info_cb(), setting_pin_main(), pins_editor_cb()to handle SIMP unblocking code
+
+	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 17, 2005 DR: OMAPS00050447 - nekkareb
+	Description: Even after removing the SIM , Hutch or Airtel network is seen
+	Solution : Sim removal event is now being handled and appropriate display shown.
+    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: 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.
+ 
+	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 
+			    
+	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
+
+ 	June 16, 2005  REF: CRR 31267  x0021334
+	Description: Handset ignore the initializtion of the PIN1/PIN2
+	Fix:	Cheking is done to ascertain if PIN1/PIN2 are initialised. If not, appropriate
+	       message is displayed to the user.
+
+//  May 31, 2004        REF: CRR 17291  xvilliva
+//	Bug:	After power cycle the setting of the used line which have been made 
+//			from the BMI is lost.
+//	Fix:	The Pin2 which is entered in the editor and sent for verification is 
+//			stored in a global variable for re-use in sAT_PlusCLCK().
+
+//  May 13, 2004        REF: CRR 13632  xvilliva
+//			The PUK1 screen is not brought up even if user enters wrong Pin1 thrice
+//			from Idle screen -"**04*OLD_CHV1*NEW_CHV1*NEW_CHV1#".
+//			If the Pin1 fails for 2 times - "Not accepted" screen is displayed.
+//			but if the Pin1 fails 3rd consecutive time - "Pin Blocked" screen is displayed 
+//			and the user is taken to PUK1 screen.
+//  May 13, 2004        REF: CRR 13623  xvilliva  
+//			The PUK1 screen can be exited by pressing HangUP or Back key.
+//			The PUK1 screen if contains less than 1 character then back key is disabled.
+//			Hangup key is disabled permenantly to avoid exiting the screen.
+
+
+	25/10/00			Original Condat(UK) BMI version.	
+	   
+ $End
+
+  // Issue Number : SPR#15692 on 25/03/04 by Rashmi.C.N.
+
+*******************************************************************************/
+
+
+
+/*******************************************************************************
+									      
+				Include Files
+									      
+*******************************************************************************/
+#define ENTITY_MFW
+
+/* includes */
+#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
+#include "mfw_sys.h"
+
+#include "prim.h"
+
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+/* SPR#1428 - SH - New Editor changes */
+#ifndef NEW_EDITOR
+#include "mfw_edt.h"
+#endif
+#include "mfw_lng.h"
+#include "mfw_cm.h"
+#include "mfw_icn.h"
+#include "mfw_phb.h"
+#include "ksd.h"
+#include "psa.h"
+#include "mfw_ss.h"
+#include "mfw_sim.h"
+#include "mfw_nm.h"
+#include "mfw_sat.h"
+#include "mfw_tim.h"
+#include "mfw_mnu.h"
+#include "mfw_sms.h"
+
+//x0pleela 15 May, 2007 DR: OMAPS00127483
+#ifdef FF_PHONE_LOCK
+#ifdef FF_MIDI_RINGER  
+#include "mfw_midi.h"
+#endif //FF_MIDI_RINGER 
+#endif /* FF_PHONE_LOCK */
+
+#include "dspl.h"
+
+
+#include "MmiMmi.h"
+#include "MmiDummy.h"
+#include "MmiDialogs.h"
+#include "MmiLists.h"
+
+/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUIEditor.h"
+#include "AUIPinEditor.h"
+#else
+#include "MmiEditor.h"
+#endif
+
+#include "MmiMain.h"
+#include "MmiStart.h"
+#include "MmiMenu.h"
+#include "MmiSoftKeys.h"
+#include "MmiIdle.h"
+#include "mmiCall.h"
+#include "MmiNetwork.h"
+#include "MmiSounds.h"
+#include "MmiSettings.h"
+#include "MmiServices.h"
+#include "Mmiicons.h"
+#include "MmiDialogs.h"
+#include "MmiPins.h"
+#include "MmiCPHS.h"
+#include "cus_aci.h"
+#ifndef NEPTUNE_BOARD
+#include "p_sim.h"
+#endif
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+
+#include "mmiColours.h"
+#include "mmiSmsIdle.h" //GW SPR#1035 - For smsidle_unset_ready_state(void) definition.
+#ifdef SIM_PERS
+#include "aci_cmh.h"
+#include "cmh.h"
+#endif
+//#define CLEAR_PIN_EDIT_AREA dspl_Clear(0,30,LCD_X,LCD_Y);
+
+
+//x0pleela 06 Mar, 2007 ER: OMAPS00122561
+#ifdef FF_PHONE_LOCK
+#include "usb/usb_api.h"
+#include "mfw_mme.h"
+//x0pleela 15 May, 2007 DR: OMAPS00127483
+#include "MmiSounds.h"
+#endif /* FF_PHONE_LOCK */
+
+#ifdef SIM_PERS
+//x0pleela 25 Apr, 2006  DR: OMAPS00067919
+//Global variable to store the code result of qAT_PlusCPIN() result
+extern T_ACI_CPIN_RSLT simp_cpin_code; 
+extern UBYTE simp_cpin_flag;
+#endif
+
+
+/* PROTOTYPS */
+
+static int pin_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+static int pin_edt_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+static int pin_edt_kbd_cb (T_MFW_EVENT event, T_MFW_KBD * kc);
+static void check_pins (T_MFW_HND win,void * edt_pin);
+static void gsm_sec_execute(T_MFW_HND win,void *string);
+static void pin_edt_tim_out_cb (T_MFW_EVENT event,T_MFW_TIM * t);
+static int pin_mess_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+static void pin_icons(void);
+static void clear_edit_array (void * parameter);
+static void emerg_pin(void * string);
+static int sim_rem_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+static void pin_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static int gsm_test(T_MFW_HND win,void * edt_pin);
+static void pin_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static void sim_rem_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static int pin_edt_kbd_long_cb (T_MFW_EVENT event,T_MFW_KBD *  kc);
+static void main_call_edit(T_MFW_HND win, USHORT event);
+static void main_call_mess(T_MFW_HND win,USHORT event);
+static int setting_pin_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+static int set_pin_mess_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+static void sett_pin_mess(T_MFW_HND win,USHORT event);
+static void check_set_pins (T_MFW_HND win,void * edt_pin);
+static int set_pin_kbd_cb (T_MFW_EVENT event,T_MFW_KBD *  kc);
+static void set_pin_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static int set_pin_win_cb (T_MFW_EVENT event,T_MFW_WIN * win);
+static void sett_pin_edit(T_MFW_HND win,USHORT event);
+static int gsm_set_test(T_MFW_HND win,void * edt_pin);
+static void set_mode_fdn_adn(T_MFW_HND win,void * string);
+static void check_plock_to_clock(T_MFW_HND win,USHORT event);
+static void check_nlock_to_clock(T_MFW_HND win,USHORT event);
+static void check_splock_to_clock(T_MFW_HND win,USHORT event);
+static void check_nslock_to_clock(T_MFW_HND win,USHORT event);
+static void check_sim_clock(T_MFW_HND win,USHORT event);
+static void pin_ch_end_or_abort (T_MFW_HND win);
+static void pin_verif_or_check2_end(T_MFW_HND win);
+static void pin1_en_dis_verify(T_MFW_HND win);
+static int set_pin_edt_win_cb (T_MFW_EVENT event,T_MFW_WIN * win);
+static int set_pin_edt_kbd_long_cb (T_MFW_EVENT event,T_MFW_KBD *  kc);
+static void gsm_sec_execute_set(T_MFW_HND win,void *string);
+void pin2_not_available_screen(void);  /* Warning Correction */
+static void not_avail_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason);
+static void pins_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason);
+void pin1_not_enabled_screen(void);  /* Warning Correction */
+
+// June 16, 2005  REF: CRR 31267  x0021334
+// Call back function for handling uninitialised PIN1 condition
+void pin1_cb_function (T_MFW_HND win, UBYTE identifier, UBYTE reason);
+
+static void pins_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason);
+/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+void pins_loadEditDefault (T_AUI_EDITOR_DATA *editor_data, USHORT TitleId, USHORT Idenfitier);
+#else /* NEW_EDITOR */
+void pins_loadEditDefault (T_EDITOR_DATA *editor_data);
+#endif /* NEW_EDITOR */
+/* SPR#1746 - SH - Add identifier parameter */
+void show_confirmation (T_MFW_HND win, USHORT Identifier);
+static int show_confirmation_cb(T_MFW_HND win, USHORT identifier, UBYTE reason);
+
+void pin_skClear( void );
+void pin_rectClear( MfwRect *win );
+
+
+#ifdef SIM_PERS
+//this global variable is used to track which lock was selected
+S16 mmi_simlock_locktype =0xFF;
+//	Nov 03, 2005 DR: OMAPS00052032 - xpradip
+//	holds the info display handle
+static T_MFW_HND info_disp = NULL;
+//this global variable is used to track the action to be performed on the selected category
+S16 mmi_simlock_lockaction = 0xFF;
+static T_ACI_ERR_DESC mmi_simlock_aciErrDesc = 0;
+//	Sept 24, 2005 REF:  LOCOSTO-ENH-34438, xpradipg
+//	added prototypes require for new compiler 2.54
+static void mmi_simlock_reset_fc_value(T_MFW_HND win);
+static void mmi_simlock_en_dis_verify(T_MFW_HND win);
+#endif
+
+extern T_MFW_SS_RETURN mfw_simlock_enable_lock(U8 *pin, S16 lcktyp);
+extern T_MFW_SS_RETURN mfw_simlock_disable_lock(U8 *pin, S16 lcktyp);
+
+#define NUM_OF_PLOCK	 6
+// the coordinate of the TxtId 
+//moved info text defines to MmiResources.h
+#define PIN_ENTRY_MAX	3
+#define STAR		0x2a
+#define HASH		0x23
+#define FIRST_DIGIT	  1
+//#define NUM_OF_PLOCK	 6
+#define IDENT_GSM_1	 5
+#define IDENT_GSM_2	 6
+#define TIM_LOCK	 0x01
+#define TIM_LOCK_JUMP	 1000
+typedef struct
+{
+  T_MMI_CONTROL    mmi_control;
+  T_MFW_HND	   parent_win;
+  T_MFW_HND	   pin_win;
+  T_MFW_HND	   sim_handle;
+#ifdef SIM_PERS
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+//New window handler for the new menu "menuBootupCatList"
+  T_MFW_HND	   simp_list_win;
+  UBYTE 	   mk_pin[MAX_PIN+1];	    /* Master Unlock Key*/
+#endif
+  int		   pin_retries; 	/* number of  pin attempts  */
+  UBYTE 	   puk_request;
+  USHORT		   display_id1;
+  USHORT		   display_id2;
+  UBYTE 	   gsm_state;		/* status gsm in security   */
+  SET_CASE	   set_state;		/* setting state	    */
+  UBYTE 	   pin[MAX_DIG+1];	    /* number string pin	*/
+  UBYTE 	   puk[MAX_PIN+1];	/* number string puk	    */
+  UBYTE 	   new_pin[MAX_PIN+1];	/* store new pin	    */
+  UBYTE 	   old_pin[MAX_PIN+1];	/* store old pin	    */
+  PIN_CASE	   pin_case;		/* editor state 	    */
+  char				edtbuf[MAX_DIG];  
+} T_pin;
+typedef struct
+{
+  T_MMI_CONTROL    mmi_control;
+  T_MFW_HND	   parent_win;
+  T_MFW_HND	   pin_mess_win;
+  USHORT		   display_id1;
+  USHORT		   display_id2;
+  PIN_CASE	   pin_case;
+}T_pin_mess;
+
+typedef struct
+{
+  T_MMI_CONTROL    mmi_control;
+  T_MFW_HND	   parent_win;
+  T_MFW_HND	   pin_edt_win;
+  T_MFW_HND	   kbd_handle;
+  T_MFW_HND	   kbd_long_handle;
+#ifdef NEW_EDITOR		/* SPR#1428 - SH - New Editor changes */
+  T_ED_DATA *	editor;
+#else /* NEW_EDITOR */
+  T_MFW_HND	   editor_handle;
+#endif /* NEW_EDITOR */
+  T_MFW_HND	   tim_out_handle;
+  UBYTE 	   pin[MAX_PIN+1];	    /* number string pin	*/
+  UBYTE 	   puk[MAX_PIN+1];	/* number string puk	    */
+  UBYTE 	   new_pin[MAX_PIN+1];	/* store new pin	    */
+  UBYTE 	   old_pin[MAX_PIN+1];	/* store old pin	    */
+  UBYTE 	   editor_index;
+  PIN_CASE	   pin_case_edit;
+  UBYTE 	   gsm_state;		/* status gsm in security   */
+  UBYTE 	   emergency_call;
+  char edtbuf[MAX_DIG];
+#ifdef NEW_EDITOR		/* SPR#1428 - SH - New Editor changes */
+  T_ED_ATTR editorPinAttr;
+#else /* NEW_EDITOR */
+  MfwEdtAttr editpinAttr;
+#endif /* NEW_EDITOR */
+}T_pin_edt;
+
+typedef struct
+{
+  T_MMI_CONTROL    mmi_control;
+  T_MFW_HND	   parent_win;
+  T_MFW_HND	   sim_rem_win;
+  T_MFW_HND	   sim_handle;
+  PIN_CASE	   pin_case;
+  USHORT		   display_id1;
+} T_sim_rem;
+
+LOCAL T_sim_rem sim_rem_data;
+
+static T_MFW_HND pin_windows;
+static T_MFW_HND pin_edit_windows;
+static T_MFW_HND pin_editor_window;
+static T_MFW_HND pin_mess_windows;
+static T_MFW_HND set_pin_windows;
+/* static T_MFW_HND sim_rem_handle;   x0039928-Lint warning removal */
+
+//API define for a flag for PIN Emergency Entry
+UBYTE pin_emergency_call;
+char pin_emerg_call[MIN_PIN];
+
+#ifdef SIM_PERS
+UBYTE FCUnlock_flag;
+UBYTE perm_blocked;
+UBYTE gsim_status;
+/*a0393213 warnings removal-sim_unlock_in_prog made to be of type T_MFW_SIMP_CLCK_FLAG*/
+EXTERN T_MFW_SIMP_CLCK_FLAG sim_unlock_in_prog; // June 07, 2006    DR: OMAPS00080701   x0021334
+#endif
+//June 16, 2005  REF: CRR 31267  x0021334
+BOOL pin1Flag = FALSE; 
+
+// June 16, 2005  REF: CRR 31267  x0021334
+extern BOOL pin2Flag; // This variable will be needed here
+
+//xashmic 21 Sep 2006, OMAPS00095831
+//To track the various stages during bootup
+T_BOOTUP_STATE BootUpState = BOOTUP_STATE_NONE;
+
+//x0pleela 08 ep, 2006  DR: OMAPS00091250
+//Adding the prototype
+void mfw_flash_write(char *LogMsg,...);
+
+//x0pleela 06 Mar, 2007 ER: OMAPS00122561
+#ifdef FF_PHONE_LOCK
+EXTERN T_call call_data; 
+static int autoPhLock_menu;
+T_MFW_HND	phlock_win_handle;			/* to hold the win handle of phone unlock editor window 	*/
+T_MFW_HND	phlock_kbd_handle;			/* to hold the kbd handle of phone unlock editor window 	*/
+T_MFW_HND	phlock_alarm_win_handle; 	/* to hold the win handle of alarm window 				*/
+T_MFW_HND	phlock_mtc_win_handle;		/* to hold the win handle of MT call window 			*/
+T_MFW_HND   phlock_dialog_mtc_win_handle;/* to hold the win handle of MT call dialog window 		*/
+int 			phlock_alarm;				/* flag to check whether alarm event has occured or not 	*/ 
+//x0pleela 09 Mar, 2007  DR: OMAPS00129014
+EXTERN UBYTE phlock_auto;				/* flag to check whether auo phone lock is enabled or not */
+
+//x0pleela 15 May, 2007 DR: OMAPS00127483
+#ifdef FF_MMI_AUDIO_PROFILE
+extern UBYTE mfwAudPlay;//flag for audio 
+#endif
+
+void mmi_phlock_change_pin(T_MFW_HND win,int type,char* oldpsw,char* newpsw);
+static void mmi_phlock_en_dis_verify(T_MFW_HND win);
+
+//x0pleela 19 Mar, 2007 ER: OMAPS00122561
+EXTERN void mmi_set_usbms_enum( int usb_enum);
+EXTERN int mmi_get_usbms_enum(void);
+EXTERN void mmi_set_Headset_Reg( int headset_reg);
+EXTERN int mmi_get_Headset_Reg(void);
+static MfwHnd mmi_phlock_show_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback);
+T_MFW_HND phlock_setting_pin_create (T_MFW_HND parent_window);
+static int phlock_setting_pin_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+void phlock_setting_pin_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static void phlock_sett_pin_mess(T_MFW_HND win,USHORT event);
+T_MFW_HND phlock_set_pin_mess_create(T_MFW_HND parent_window);
+void phlock_set_pin_mess_destroy  (T_MFW_HND own_window);
+static int phlock_set_pin_mess_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+void phlock_set_pin_messages(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+void phlock_set_pin_info_cb(T_MFW_HND win, USHORT identifier, UBYTE reasons);
+static void phlock_sett_pin_edit(T_MFW_HND win, USHORT event);
+T_MFW_HND phlock_set_pin_edt_create (T_MFW_HND parent_window);
+static int phlock_set_pin_edt_win_cb (T_MFW_EVENT event,T_MFW_WIN * win);
+static void phlock_set_pin_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static int phlock_set_pin_kbd_cb (T_MFW_EVENT event,T_MFW_KBD *  kc);
+static int phlock_set_pin_edt_kbd_long_cb (T_MFW_EVENT event,T_MFW_KBD *  kc);
+static void phlock_pin_edt_tim_out_cb (T_MFW_EVENT event,T_MFW_TIM * t);
+void phlock_setting_pin_destroy  (T_MFW_HND own_window);
+void phlock_set_pin_edt_destroy  (T_MFW_HND own_window);
+T_MFW_SS_RETURN mfw_phlock_enable_lock(U8 *pin, S16 lcktyp);
+T_MFW_SS_RETURN mfw_phlock_disable_lock(U8 *pin, S16 lcktyp);
+
+//x0pleela 29 May, 2007 DR: OMAPS00132483
+EXTERN int mfw_get_Phlock_status(void);
+EXTERN void mfw_set_Phlock_status( int phlock_status);
+EXTERN int mfw_get_Auto_Phlock_status(void);
+EXTERN void mfw_set_Auto_Phlock_status( int phlock_status);
+#endif /* FF_PHONE_LOCK */
+
+/*******************************************************************************
+
+ $Function:	pin_init 
+
+ $Description:	This is the start-up time initialisation routine.
+		call from init routine in the idle
+ 
+ $Returns:		None
+
+ $Arguments:	parent window
+ 
+*******************************************************************************/
+void pin_init (T_MFW_HND parent_window)
+{
+	 pin_create (parent_window);
+  BootUpState = BOOTUP_STATE_NONE;//xashmic 21 Sep 2006, OMAPS00095831
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_exit 
+
+ $Description:	power down in security screen
+ $Returns:		None
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+void pin_exit (void)
+{
+ if(pin_mess_windows)
+	 pin_mess_destroy(pin_mess_windows);
+
+ if (pin_editor_window)
+ {
+#ifdef NEW_EDITOR
+	AUI_pin_Destroy(pin_editor_window);
+#else
+	editor_destroy(pin_editor_window);
+#endif
+	pin_editor_window = NULL;
+ } 
+ 
+ if (pin_edit_windows)
+	 pin_edt_destroy(pin_edit_windows);
+
+ if(pin_windows)
+ {
+	TRACE_FUNCTION("pin_destroy 1");
+	pin_destroy (pin_windows);
+
+ }
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_create
+
+ $Description:	Creation of an instance for the PIN dialog (sim activation)
+
+		Type of dialog : SINGLE_DYNAMIC
+ $Returns:		Window
+
+ $Arguments:	Parent window
+ 
+*******************************************************************************/
+T_MFW_HND pin_create (T_MFW_HND parent_window)
+{
+
+  T_MFW_WIN	* win;
+  T_pin * data = (T_pin *)ALLOC_MEMORY (sizeof (T_pin));
+
+  data->pin_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)pin_win_cb);
+
+  pin_windows = data->pin_win;
+  pin_edit_windows = NULL;
+  pin_editor_window = NULL;
+  pin_mess_windows = NULL;
+
+  TRACE_FUNCTION("MmiPins:pin_create");
+
+  if (data->pin_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)pin_main;/* dialog main function    */
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_win)->data;
+  win->user		      = (void *) data;
+
+
+  /*
+   * Create any other handler
+   */
+
+  data->sim_handle = sim_create(data->pin_win,E_SIM_ALL_SERVICES,(MfwCb)sim_event_cb_main);
+
+  /*
+   * return window handle
+   */
+
+	mfwSetSignallingMethod(1);//mfw focus handling
+	winShow(data->pin_win);
+
+
+  return data->pin_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_destroy
+
+ $Description:	Destroy the pin dialog.
+ $Returns:		None
+
+ $Arguments:	window
+ 
+*******************************************************************************/
+void pin_destroy  (T_MFW_HND own_window)
+{
+
+  T_pin *      data;
+  T_MFW_WIN *	win;
+
+  TRACE_FUNCTION("MmiPins:pin_destroy");
+
+  if (own_window)
+  {
+    win = ((T_MFW_HDR *)own_window)->data;
+    data = (T_pin *)win->user;
+
+	 if(data)
+	 {
+      /*
+       * Exit SIM and Delete SIM Handler
+       */
+      sim_delete (data->sim_handle);
+
+      /*
+       * Delete WIN Handler
+       */
+      win_delete (data->pin_win);
+	  pin_windows = 0;
+	  FREE_MEMORY((void *)data,(sizeof(T_pin)));
+	 }
+  }
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_win_cb
+
+ $Description:	Callback function for windows
+ $Returns:		Status int
+ $Arguments:	window handler event, window
+ 
+*******************************************************************************/
+static int pin_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  TRACE_EVENT_P1("pin_win_cb: %d", event);
+
+  if (event EQ MfwWinVisible)
+  {
+    dspl_ClearAll();
+	return 1;
+  }
+  return 0;
+}
+
+
+
+
+
+/*******************************************************************************
+
+ $Function:	sim_event_cb_main
+
+ $Description:	PURPOSE : SIM event handler for Pins
+ $Returns:		Status int
+ $Arguments:	window handler event, sim status
+ 
+*******************************************************************************/
+int sim_event_cb_main (T_MFW_EVENT event, T_MFW_HND para)
+{
+/**********************/
+// #define NO_ACTION	0  /* Warning Correction */
+
+// BYTE reconf_handling = NO_ACTION;  /* Warning Correction */
+// BYTE reconf_defreeze_display = 1;  /* Warning Correction */
+/*********************/
+
+	T_MFW_SIM_STATUS * status;
+	UBYTE limited;
+
+    T_MFW_HND win = mfw_parent(mfw_header());
+
+#ifdef SIM_PERS
+	int status1, max1, curr1;
+#endif
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+
+	T_pin * pin_data = (T_pin *)win_data->user;
+
+	status = (T_MFW_SIM_STATUS *)para;
+
+    limited = TRUE;			/* initial limited mode     */
+
+  TRACE_EVENT_P3("sim event handler,event:%d, status:%d, proc:%d",event, status->sim_status, status->sim_procedure);
+// June 16, 2005  REF: CRR 31267  x0021334
+// If PIN1 and PUK1 are uninitialised, post SIM_LOCKED event
+    if ((sim_pin_count(MFW_SIM_PIN1) EQ 0) AND (sim_pin_count(MFW_SIM_PUK1) EQ 0))
+    {	
+    	SEND_EVENT(pin_data->pin_win, SIM_LOCKED, 0, pin_data);
+    }
+    else // June 16, 2005  REF: CRR 31267  x0021334
+    {
+ 	switch(event)
+ 	{
+		case E_SIM_INSERTED:	/*  there not handled */
+
+		BootUpState = BOOTUP_STATE_COMPLETED;//xashmic 21 Sep 2006, OMAPS00095831
+		
+		/* 14-Mar-2006, Monika.B.J., x0045876, START (Bug OMAPS00071413) */
+#ifdef FF_MMI_SAT_ICON
+				    addSatMessage(NULL, 0, 0, NULL, FALSE, SAT_ICON_IDLEMODE_TEXT);
+
+#else
+					addSatMessage(NULL);
+#endif
+// July 11, 2006    DR: OMAPS00084081   x0039928
+// Fix: Registers to network on sim reset
+		 nm_registration (NM_AUTOMATIC, 0, FALSE);
+       		/*OMAPS00115179 - support SIM insertion without powering down - a0393213(R.Prabakar)
+       		   If pin_editor_window for the removed SIM("Insert SIM" window or "PIN" entry window) is present 
+       		   destroy it when a new SIM is inserted. 
+       		   If "PIN" entry window is necessary even for the newly inserted SIM, it 
+       		   would be created once again at a different point. */
+           		if(pin_editor_window)
+      			{
+          			AUI_pin_Destroy(pin_editor_window);
+            			pin_editor_window=NULL;
+      			}
+         		smsidle_unset_ready_state ();
+			
+		/* 14-Mar-2006, Monika.B.J., x0045876, END */
+					return 0;		/* (handled in sim_rem dialog, commented out currently */
+
+
+		//GW-SPR#1035-Added STK Changes
+		case E_SIM_RESET:	
+	    	TRACE_FUNCTION("E_SIM_RESET");
+		/*NM, 110702
+			the MM-entity initated the de-registration already (MMI dont have to do it); 
+			after this event we should avoid any cases to access the SIM
+			(e.g. reading phonebook, reading sms....)
+			
+			- how to do it ???
+			->  unset the "sms_initialised" flag to FALSE
+
+			- when does it set back to TRUE ???
+			-> the flag will be set after the event "E_SMS_READY"
+		*/	
+			smsidle_unset_ready_state ();
+			info_screen(0, TxtSimNot, TxtReady, NULL); 
+		/*NM, 110702 END*/
+	    return 0;		
+	    
+
+		case E_SIM_STATUS:
+	  	/*
+	   	* check whether decoded message is available
+	   	*/
+		if( para EQ (T_MFW_SIM_STATUS *)NULL )
+		   return MFW_RES_ILL_HND;
+
+		status = (T_MFW_SIM_STATUS *)para;
+
+ TRACE_FUNCTION_P1("sim_status: %d", status->sim_status);
+
+/********************************/
+#ifdef SIM_PERS		
+
+			  //x0pleela 18 Oct, 2006 DR: OMAPS00099660
+			  //Added the following code (MFW_MEPD_INVALID)inside the SIM_PERS flag
+			  //x0pleela 08 Sep, 2006  DR: OMAPS00091250
+			  //Write No MEPD, NO SIM string into a file
+			  if(  status->sim_procedure == MFW_SIM_ACTIVATION )
+			  {
+			  	if(status->sim_status ==  MFW_MEPD_INVALID)
+					mfw_flash_write("No MEPD");
+				if(status->sim_status == MFW_SIM_NO_SIM_CARD)
+					mfw_flash_write("No SIM");
+			  }
+					
+
+				//x0pleela 29 Aug, 2006 DR: OMAPS00091250
+				//Added this check so that MMI doesn't hang at boot up as 
+				//MEPD data is not present
+				if( ( status->sim_procedure == MFW_SIM_ACTIVATION )AND 
+					( ( status->sim_status !=  MFW_MEPD_INVALID) OR
+					(status->sim_status != MFW_SIM_NO_SIM_CARD) ) )
+				{
+				
+						status1 =mfw_simlock_check_status(0,&max1, &curr1);
+						if(status1== MFW_SIM_PERM_BLOCKED)
+						{
+							perm_blocked = 1;
+						 	status->sim_status=MFW_SIM_PUK_REQ;
+						}
+				}
+				
+#endif
+			BootUpState = BOOTUP_STATE_INPROGRESS;//xashmic 21 Sep 2006, OMAPS00095831
+
+		 switch (status->sim_procedure)
+		 {
+		/*
+		 * Initial activation of the SIM card
+		 */
+			case MFW_SIM_ACTIVATION:
+		  /*
+		   * check the result of activation
+		   */
+			  switch (status->sim_status)
+			  {
+				  //x0pleela 18 Oct, 2006 DR: OMAPS00099660
+				  //Added the following code (MFW_MEPD_INVALID)inside the SIM_PERS flag
+#ifdef SIM_PERS			  
+			  //x0pleela 29 aug, 2006  DR: OMAPS00091250
+			  	//Send event No MEPD data
+			  	case MFW_MEPD_INVALID:
+					//limited = TRUE;
+					TRACE_FUNCTION("sim_event_cb_main:no MEPD data");
+					SEND_EVENT(pin_data->pin_win,NO_MEPD, 0, pin_data);
+					break;
+#endif					
+			/*
+			 * PIN 1 must be entered
+			 */
+					case MFW_SIM_PIN_REQ:
+						if(status->sim_pin_retries < PIN_ENTRY_MAX)
+						{
+							TRACE_FUNCTION("sim_event_cb_main:PIN1 req-retr");
+							pin_data->pin_retries = status->sim_pin_retries;/* number of retries */
+							SEND_EVENT(pin_data->pin_win,PIN1_REQ_ATT,0,pin_data);
+						}
+						else
+						{
+
+/********************************/
+
+							TRACE_FUNCTION("sim_event_cb_main:PIN1 req");
+							SEND_EVENT(pin_data->pin_win,PIN1_REQ,0,pin_data);
+						}
+						break;
+
+			/*
+			 * SIM card is blocked, PUK 1 is needed
+			 */
+					case MFW_SIM_PUK_REQ:
+					{
+#ifdef SIM_PERS
+						int smlk_status, max, curr; //x0pleela 19 Apr, 2006 DR:OMAPS00067912   changed the name from stastus to smlk_status
+#endif
+							TRACE_FUNCTION("sim_event_cb_main:PUK1 req");
+#ifdef SIM_PERS
+						//x0pleela 19 Apr, 2006 DR:OMAPS00067912   
+						//changed the name from stastus to smlk_status
+						smlk_status =mfw_simlock_check_status(0,&max, &curr);
+						if( (smlk_status== MFW_SIM_BLOCKED) OR (smlk_status == MFW_SIM_NOT_BLOCKED) )
+						{
+							TRACE_EVENT("BMI: MFW_SIM_BLOCKED");
+							perm_blocked = 0;
+								TRACE_EVENT("BMI: MFW_SIM_PUK1");
+							//x0pleela 26 Sep, 2006 DR: OMAPS00096565
+							//Adding a check for C_KEY_REQ. If set, display SIMP menu
+							//Else prompt the user for PUK entry
+							if( C_KEY_REQ )
+							{
+								//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+								//check for Master Unlock option enabled. 
+								//If so, then display the menu with options Unblock ME and Master Unlock
+								if( simlock_get_masterkey_status())
+						  		{
+							  		pin_data->simp_list_win = mmi_simlock_category_menus(win);
+							  	}
+						  	}
+							else
+#endif
+								SEND_EVENT(pin_data->pin_win,PUK1_REQ_ACT_INFO,0,pin_data);
+
+#ifdef SIM_PERS
+						}
+						//x0pleela 19 Apr, 2006 DR:OMAPS00067912   
+						//changed the name from stastus to smlk_status
+						else if (smlk_status == MFW_SIM_PERM_BLOCKED)
+						{
+							perm_blocked =1;
+							SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+						}
+#endif
+         				 }
+					break;
+
+			/*
+			 * no PIN is needed
+			 */
+					case MFW_SIM_NO_PIN:
+						
+						BootUpState = BOOTUP_STATE_COMPLETED;//xashmic 21 Sep 2006, OMAPS00095831
+
+						limited = FALSE;
+						TRACE_FUNCTION("sim_event_cb_main:no Pin");
+						mmi_cphs_refresh();
+						SEND_EVENT(pin_data->pin_win,PIN_OK, 0, NULL);//back to idle
+						break;
+
+			/*
+			 * SIM card is broken
+			 */
+					case MFW_SIM_INVALID_CARD:
+						TRACE_FUNCTION("sim_event_cb_main: invalid card");
+						SEND_EVENT(pin_data->pin_win,INVALID_CARD, 0, pin_data);
+						break;
+
+			/*
+			 * No SIM card is inserted
+			 */
+					case MFW_SIM_NO_SIM_CARD:
+						
+						TRACE_FUNCTION("sim_event_cb_main: no SIM Card");
+						SEND_EVENT(pin_data->pin_win,NO_SIM_CARD, 0, pin_data);
+						break;
+
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+					case MFW_IMEI_NOT_VALID:
+						limited = FALSE;
+						TRACE_FUNCTION("sim_event_cb_main: IMEI is not valid");
+						SEND_EVENT(pin_data->pin_win,INVALID_IMEI, 0, pin_data);
+						break;
+
+#ifdef SIM_PERS 
+
+					case MFW_SIM_PLOCK_REQ:
+						TRACE_FUNCTION("sim_event_cb_main: MFW_SIM_PLOCK_REQ");
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//check for Master Unlock option enabled. 
+						//If so, then display the menu with options SIM unlock and Master Unlock
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_PLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						    SEND_EVENT(pin_data->pin_win,INPUT_SIM_PIN_REQ, 0, pin_data);
+						break;
+						
+					case MFW_SIM_NLOCK_REQ:
+						TRACE_FUNCTION("sim_event_cb_main: MFW_SIM_NLOCK_REQ");
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//check for Master Unlock option enabled. 
+						//If so, then display the menu with options Network unlock and Master Unlock					  
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_NLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						    SEND_EVENT(pin_data->pin_win,INPUT_NLOCK_PIN_REQ, 0, pin_data);
+						break;
+						
+					case MFW_SIM_NSLOCK_REQ:
+						TRACE_FUNCTION("sim_event_cb_main: MFW_SIM_NSLOCK_REQ");
+  						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//check for Master Unlock option enabled. 
+						//If so, then display the menu with options Network subset unlock and Master Unlock
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_NSLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						    SEND_EVENT(pin_data->pin_win,INPUT_NSLOCK_PIN_REQ, 0, pin_data);
+						break;
+						
+					case MFW_SIM_SPLOCK_REQ:
+						TRACE_FUNCTION("sim_event_cb_main: MFW_SIM_SPLOCK_REQ");
+  						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//check for Master Unlock option enabled. 
+						//If so, then display the menu with options Service Provider unlock and Master Unlock					  
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_SPLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+							SEND_EVENT(pin_data->pin_win,INPUT_SPLOCK_PIN_REQ, 0, pin_data);
+						break;
+						
+					case MFW_SIM_CLOCK_REQ:
+						TRACE_FUNCTION("sim_event_cb_main: MFW_SIM_CLOCK_REQ");
+  						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//check for Master Unlock option enabled. 
+						//If so, then display the menu with options Corporate unlock and Master Unlock					  
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_CLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+    						    SEND_EVENT(pin_data->pin_win,INPUT_CLOCK_PIN_REQ, 0, pin_data);
+						break;
+
+					//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+					//Request unlocking password of "Blocked Network" category
+					case MFW_SIM_PBLOCK_REQ:
+						TRACE_FUNCTION("sim_event_cb_main: MFW_SIM_PBLOCK_REQ");
+						//check for Master Unlock option enabled. 
+						//If so, then display the menu with options Network unlock and Master Unlock					  
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_PBLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						    SEND_EVENT(pin_data->pin_win,INPUT_PBLOCK_PIN_REQ, 0, pin_data);
+						break;
+#endif
+					default:
+						return 0;
+			  }
+		  /*
+		   * start limited or full service */
+
+			  if (limited)
+			  {
+			/*
+			 * limited shall be the requested service
+			 * if no service is reached, the limited
+			 * service is requested*/
+			 	TRACE_FUNCTION("DEBUG");
+
+					if (nm_reg_status() EQ NOT_PRESENT_8BIT
+						AND
+						status->sim_procedure EQ MFW_SIM_ACTIVATION)
+						{
+							TRACE_FUNCTION("registration in limited mode ");
+							nm_registration (NM_AUTOMATIC, 0, TRUE);
+						}
+			  }
+			break;
+			case MFW_SIM_VERIFY:
+		  /*
+		   * check the result of verify
+		   */
+			  switch (status->sim_status)
+			  {
+			/*
+			 * PIN 1 must be entered
+			 */
+					case MFW_SIM_PIN_REQ:
+					if(status->sim_pin_retries < PIN_ENTRY_MAX)
+					{
+							TRACE_FUNCTION("sim_event_cb_main:Ver:PIN1 req-retr");
+							pin_data->pin_retries = status->sim_pin_retries;
+							SEND_EVENT(pin_data->pin_win,PIN1_REQ_ATT,0,pin_data);
+					}
+					else
+					{
+							TRACE_FUNCTION("SimEventPins:V:PIN1 req");
+							SEND_EVENT(pin_data->pin_win,PIN1_REQ,0,pin_data);
+					}
+					break;
+			/*
+			 * SIM card is blocked, PUK 1 is needed
+			 */
+					case MFW_SIM_PUK_REQ:
+						TRACE_FUNCTION("SimEventPins:V:PUK1 req");
+						SEND_EVENT(pin_data->pin_win,PUK1_REQ_VER_INFO,0,pin_data);
+						break;
+
+			/*
+			 * PIN entering successfull
+			 */
+					case MFW_SIM_NO_PIN:
+						TRACE_FUNCTION("sim_event_cb_main:PIN ok without sim unlock");
+						mmi_cphs_refresh();
+						pin_data->pin_case = PIN_OK_INFO;
+						if (pin_data->set_state == PIN2_CHECK)
+						{
+							set_mode_fdn_adn(win,pin_data);
+						}
+						SEND_EVENT(pin_data->pin_win,PIN_OK_INFO,0,pin_data);
+						break;
+			/*
+			 * SIM card is broken
+			 */
+					case MFW_SIM_INVALID_CARD:
+						TRACE_FUNCTION("sim_event_cb_main: invalid card");
+						SEND_EVENT(pin_data->pin_win,INVALID_CARD, 0, pin_data);
+						break;
+
+			/*
+			 * No SIM card is inserted
+			 */
+					case MFW_SIM_NO_SIM_CARD:
+						TRACE_FUNCTION("sim_event_cb_main: no SIM Card");
+						SEND_EVENT(pin_data->pin_win,NO_SIM_CARD, 0, pin_data);
+						break;
+					default:
+						return 0;
+			  }
+			break;
+			/*
+			 * response to PUK entering
+			 */
+			case MFW_SIM_UNBLOCK:
+			  switch (status->sim_status)
+			  {
+				case MFW_SIM_PUK_REQ:
+					TRACE_FUNCTION("sim_event_cb_main:unblock failure");
+					SEND_EVENT(pin_data->pin_win,PUK1_UNBL_FAIL_INFO,0,pin_data);
+					break;
+				case MFW_SIM_SUCCESS:
+					TRACE_FUNCTION("sim_event_cb_main:unblock success");
+					mmi_cphs_refresh();
+					SEND_EVENT(pin_data->pin_win,PUK1_UNBL_SUCC,0,pin_data);
+					break;
+				case MFW_SIM_FAILURE:
+					TRACE_FUNCTION("sim_event_cb_main:unblock fatal error");
+					SEND_EVENT(pin_data->pin_win,PUK1_UNBL_FATAL_ERROR,0,pin_data);
+					break;				
+				case MFW_SIM_INVALID_CARD:
+					TRACE_FUNCTION("sim_event_cb_main:unblock failed, no more retries");
+					SEND_EVENT(pin_data->pin_win,INVALID_CARD,0,pin_data);
+					break;
+				default:
+					return 0;
+			  }
+			break;
+
+			case MFW_SIM_REMOVED:/*  Handle the removal of SIM card */
+                            /* OMAPS00050447: a0393130, handle removal of sim card */
+                            switch (status->sim_status)
+                            {
+                                 case MFW_SIM_NO_SIM_CARD: 
+                                      TRACE_FUNCTION("sim_event_cb_main: SIM Card removed");
+						/*OMAPS00115179 - support SIM insertion without powering down - a0393213
+						    SMS state should be unset immediately after removing the SIM card. This ensures
+						    icons/display related to messages are NOT shown in the idle screen after the removal of SIM card*/						
+					       smsidle_unset_ready_state ();									  
+                                       SEND_EVENT(idle_get_window(),NETWORK_NO_SERVICE, 0, 0);
+                                       break;
+					
+                                 default:
+                                       return 0;
+                            }
+			 break;
+			      /* OMAPS00050447: a0393130, handle removal of sim card */
+			  
+			default:
+				return 0;
+		 }
+
+	return 1;
+	#ifdef BMI_TEST_MC_SIM_EVENT
+	break;
+	case BMI_TEST_MC_SIM_EVENT:
+	{
+		T_MFW_READ_CALLBACK* sim_read_data;
+
+		sim_read_data = (T_MFW_READ_CALLBACK*)para;
+
+		TRACE_EVENT_P3("SIM READ Error: %d, %x%x", sim_read_data->error_code,
+			sim_read_data->read_buffer[0], sim_read_data->read_buffer[1]);
+	}
+	break;
+	#endif
+  	}
+    } // June 16, 2005  REF: CRR 31267  x0021334
+    
+    /* x0045876, 14-Aug-2006 (WR - missing return statement at end of non-void function ) */
+    return 0;
+}
+#ifdef SIM_PERS
+/*******************************************************************************
+
+ $Function:    	simp_busy_cb
+
+ $Description:   This function checks for the ACI CME error and display menu for unlocking
+ 			  categories or unblocking ME
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+void simp_busy_cb(T_MFW_HND win, USHORT identifier, UBYTE reasons)
+{
+  T_MFW_WIN   * win_data = ((T_MFW_HDR *) win)->data;
+
+  T_pin * pin_data = (T_pin *)win_data->user;//pin main data
+  
+    //x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+    //check for CME class and handle all CME errors
+  if( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Cme) 
+  {
+  switch(aciErrDesc & 0x0000FFFF)
+  {
+    case CME_ERR_NetworkPersPinReq:
+      TRACE_EVENT("CME_ERR_NetworkPersPinReq");
+      if( simlock_get_masterkey_status())
+      {
+        mmi_simlock_locktype = MFW_SIM_NLOCK;
+        pin_data->simp_list_win = mmi_simlock_category_menus(win);
+      }
+      else
+        SEND_EVENT(pin_data->pin_win,INPUT_NLOCK_PIN_REQ,0,pin_data);
+  break;
+  
+    case CME_ERR_NetworkSubsetPersPinReq:
+      TRACE_EVENT("CME_ERR_NetworkSubsetPersPinReq");
+      if( simlock_get_masterkey_status())
+      {
+        mmi_simlock_locktype = MFW_SIM_NSLOCK;
+        pin_data->simp_list_win = mmi_simlock_category_menus(win);
+      }
+      else
+        SEND_EVENT(pin_data->pin_win,INPUT_NSLOCK_PIN_REQ,0,pin_data);
+    break;
+    
+    case CME_ERR_ProviderPersPinReq:
+      TRACE_EVENT("CME_ERR_ProviderPersPinReq");
+      if( simlock_get_masterkey_status())
+      {
+        mmi_simlock_locktype = MFW_SIM_SPLOCK;
+        pin_data->simp_list_win = mmi_simlock_category_menus(win);
+      }
+      else
+        SEND_EVENT(pin_data->pin_win,INPUT_SPLOCK_PIN_REQ,0,pin_data);
+    break;
+    
+    case CME_ERR_CorporatePersPinReq:
+      TRACE_EVENT("CME_ERR_CorporatePersPinReq");
+      if( simlock_get_masterkey_status())
+      {
+        mmi_simlock_locktype = MFW_SIM_CLOCK;
+        pin_data->simp_list_win = mmi_simlock_category_menus(win);
+      }
+      else
+        SEND_EVENT(pin_data->pin_win,INPUT_CLOCK_PIN_REQ,0,pin_data);
+    break;
+    
+    case CME_ERR_PhSimPinReq:
+      TRACE_EVENT("CME_ERR_PhSimPinReq");
+      if( simlock_get_masterkey_status())
+      {
+        mmi_simlock_locktype = MFW_SIM_PLOCK;
+        pin_data->simp_list_win = mmi_simlock_category_menus(win);
+      }
+      else
+        SEND_EVENT(pin_data->pin_win,INPUT_SIM_PIN_REQ,0,pin_data);
+    break;
+    
+    case CME_ERR_PhoneFail:
+    case CME_ERR_NetworkPersPukReq:
+    case CME_ERR_NetworkSubsetPersPukReq:
+    case CME_ERR_ProviderPersPukReq:
+    case CME_ERR_CorporatePersPukReq:
+    {
+      int status,curr_fail_reset, curr_succ_reset;
+      TRACE_EVENT("PUK Req");
+      status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+      
+		if( status == MFW_SIM_BLOCKED)
+      {
+        C_KEY_REQ = 1;
+        if( simlock_get_masterkey_status())
+        {
+          pin_data->simp_list_win = mmi_simlock_category_menus(win);
+        }
+        else
+          SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+      }
+      else if (status == MFW_SIM_PERM_BLOCKED)
+      {
+        perm_blocked =1;
+        SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+      }	
+    }
+    break;	
+    
+    case CME_ERR_WrongPasswd:
+      TRACE_EVENT("CME_ERR_WrongPasswd");
+      SEND_EVENT(pin_data->pin_win,identifier,0,pin_data);
+    break;
+    
+    default:
+      TRACE_EVENT("Undefined error");
+  }
+}
+
+    //x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+    //check for Ext class and handle all Extension errors
+	else if( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) 
+	{
+		switch(aciErrDesc & 0x0000FFFF)
+		{
+			//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+			//Request for Blocked Network Password 
+			case EXT_ERR_BlockedNetworkPersPinReq:
+				TRACE_EVENT("CME_ERR_NetworkPersPinReq");
+				if( simlock_get_masterkey_status())
+				{
+					mmi_simlock_locktype = MFW_SIM_PBLOCK;
+					pin_data->simp_list_win = mmi_simlock_category_menus(win);
+				}
+				else
+					SEND_EVENT(pin_data->pin_win,INPUT_PBLOCK_PIN_REQ,0,pin_data);
+			break;
+
+			//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+			//Request for Blocked Network Unblock code 
+			case EXT_ERR_BlockedNetworkPersPukReq:
+			{
+				int status,curr_fail_reset, curr_succ_reset;
+				TRACE_EVENT("PUK Req");
+
+				status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+
+				if( status==MFW_SIM_BLOCKED)
+				{
+					C_KEY_REQ = 1;
+					if( simlock_get_masterkey_status())
+					{
+						pin_data->simp_list_win = mmi_simlock_category_menus(win);
+					}
+					else
+						SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+				}
+				else if (status == MFW_SIM_PERM_BLOCKED)
+				{
+					perm_blocked =1;
+					SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+				}	
+			}
+			break;	
+
+			default:
+				break;
+		}
+	}
+  
+}
+
+#endif
+
+/*******************************************************************************
+
+ $Function:	pin_main
+
+ $Description:	PIN MAIN Dialog Handling function
+ $Returns:		void
+ $Arguments:	window, window handler event, value, parameters
+ 
+*******************************************************************************/
+static void pin_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user;//pin main data
+// 	T_pin_mess * mess_data = (T_pin_mess *) parameter;//pin message data  /* Warning Correction */
+//	T_pin_edt * edt_data = (T_pin_edt *) parameter;//pin editor data  /* Warning Correction */
+
+	// June 16, 2005  REF: CRR 31267  x0021334
+	// Added the following two variables
+	static int pin1_info_count = 0; 
+	T_DISPLAY_DATA display_info; 
+	
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;	/* SPR#1428 - SH - New Editor data */
+#else
+	T_EDITOR_DATA	editor_data;
+#endif
+
+	TRACE_EVENT_P1("MmiPins:pin_main: %d", event);
+
+	 switch(event)
+	 {
+#ifdef SIM_PERS
+		//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		//This event displays a dialog "Busy" for the user if timer is enabled and 
+		//ACI returns Busy error when user had entered wrong unlocking password
+		case SIM_LOCK_BUSY_BOOTUP:
+			mfw_simlock_set_busy_state(FALSE);
+			dlg_initDisplayData_TextId(&display_info,  NULL, NULL, TxtBusy, TxtNull, COLOUR_STATUS);
+			dlg_initDisplayData_events(&display_info, (T_VOID_FUNC)simp_busy_cb, THREE_SECS, KEY_LEFT | KEY_RIGHT);
+			info_dialog (pin_data->pin_win, &display_info);
+			break;
+#endif
+	 
+		// June 16, 2005  REF: CRR 31267  x0021334
+		// This case is added to handle PIN1 and PUK1 EQ 0 condition
+	 	 case SIM_LOCKED:
+		 if(pin1_info_count EQ 0) // To avoid getting the sim blocked dialog during emergency call set up
+		 {
+			pin1Flag = TRUE; // set this flag to TRUE to indicate that PIN1 and PUK1 are 0
+			// Display info dialog that the sim is blocked for 3 seconds, after which call back function is called.
+			dlg_initDisplayData_TextId(&display_info,  NULL, NULL, TxtSimBlocked, TxtDealer, COLOUR_STATUS);
+			dlg_initDisplayData_events(&display_info, (T_VOID_FUNC)pin1_cb_function, THREE_SECS, KEY_LEFT | KEY_RIGHT);
+			info_dialog (pin_data->pin_win, &display_info);
+			pin1_info_count++;
+		 }
+		 else // post SIM_LOCKED_EMR_EDITOR event to create the editor for entering emergency numbers
+		 {
+			SEND_EVENT(pin_data->pin_win, SIM_LOCKED_EMR_EDITOR, 0, 0);
+		 }
+		 break;
+
+		 // June 16, 2005  REF: CRR 31267  x0021334
+		// This case is added to handle response from call back function 'pin1_cb_function'
+		 case SIM_LOCKED_EMR_EDITOR:
+		 memset(pin_data->edtbuf,'\0',sizeof(pin_data->edtbuf));
+		 pins_loadEditDefault (&editor_data, TxtSimBlocked, SIM_LOCKED_EMR_EDITOR);
+		 AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)pin_data->edtbuf, MAX_DIG);
+		 pin_editor_window = AUI_pin_Start(win, &editor_data); // start the editor
+		 break;
+
+		  case PIN1_STATUS:		    //Text "Pin disabled" or "enabled"
+		  case PIN1_REQ_ATT:		    //info screen "xx attempts "
+		  case PUK1_REQ_ACT_INFO:	    //info screen "SIM blocked "
+		  
+		  case GSM_FAIL:		    // gsm not allowed
+		  case NEW_PIN_FAIL:		    // new pin failed
+		  case PUK1_REQ_VER_INFO:	    // Text "Pin blocked "
+		  case PUK1_UNBL_FAIL_INFO:	    // unblock error - new puk requ
+		  case PUK1_UNBL_FATAL_ERROR:
+		  
+		 
+		  case SIM_UNLOCK_OK:		    //Text "Unlock ok "
+		  case SIM_LOCK_ERR:
+#ifdef SIM_PERS
+        case SIM_LOCK_PERS_CHK_OK:
+		    case SMLK_SHOW_FC_FAIL:
+		    case SMLK_SHOW_FC_SUCC:			
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		    case SMLK_SHOW_MK_FAIL:		//wrong master unlock key
+		    case SMLK_SHOW_MK_SUCC:		//correct master unlock key
+		    case SIM_LOCK_BUSY_UNBLOCK: //wrong unblock code
+#endif
+				   main_call_mess(win,event);
+				   break; 
+
+			case PUK1_REQ:			  //Text "Enter Puk "
+#ifdef SIM_PERS
+    case INPUT_SIM_PIN_REQ:
+		case INPUT_NLOCK_PIN_REQ:
+		case INPUT_NSLOCK_PIN_REQ:
+		case INPUT_SPLOCK_PIN_REQ:
+		case INPUT_CLOCK_PIN_REQ:
+		case PERM_BLK:
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		case INPUT_MASTER_KEY_REQ: 		//Master Unlock Key request
+		case INPUT_PBLOCK_PIN_REQ:		//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+#endif
+				//clear the editor-buffer
+				memset(pin_data->edtbuf,'\0',sizeof(pin_data->edtbuf));
+
+			/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+#ifdef SIM_PERS
+		switch(event)
+				{
+				case PERM_BLK:
+					pins_loadEditDefault (&editor_data, TxtPhoneBlocked, PERM_BLK);
+					break;
+
+				case PUK1_REQ:	
+				if( C_KEY_REQ )
+					pins_loadEditDefault (&editor_data, TxtUnblockCode, PUK1_REQ);
+				else					
+					pins_loadEditDefault (&editor_data, TxtEnterPuk1, PUK1_REQ);
+					break;
+				
+				case INPUT_NLOCK_PIN_REQ:
+					pins_loadEditDefault (&editor_data, TxtEnterNLock, INPUT_NLOCK_PIN_REQ);
+					break;
+					
+				case INPUT_NSLOCK_PIN_REQ:
+					pins_loadEditDefault (&editor_data, TxtEnterNsLock, INPUT_NSLOCK_PIN_REQ);
+					break;
+					
+				case INPUT_SPLOCK_PIN_REQ:
+					pins_loadEditDefault (&editor_data, TxtEnterSpLock, INPUT_SPLOCK_PIN_REQ);
+					break;
+					
+				case INPUT_CLOCK_PIN_REQ:
+					pins_loadEditDefault (&editor_data, TxtEnterCLock, INPUT_CLOCK_PIN_REQ);
+					break;
+
+				case INPUT_SIM_PIN_REQ:
+					pins_loadEditDefault (&editor_data, TxtEnterPsLock, INPUT_SIM_PIN_REQ);
+					break;
+
+				//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+				case INPUT_MASTER_KEY_REQ:
+					pins_loadEditDefault (&editor_data, TxtMasterUnlock, INPUT_MASTER_KEY_REQ);
+					break;					
+					
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+				case INPUT_PBLOCK_PIN_REQ:
+					pins_loadEditDefault (&editor_data, TxtEnterPbLock, INPUT_PBLOCK_PIN_REQ);
+					break;					
+					
+				}
+				TRACE_FUNCTION_P1("sim_status: %d", gsim_status);
+#else
+			        pins_loadEditDefault (&editor_data, TxtEnterPuk1, PUK1_REQ);
+#endif
+				//x0pleela 05 Jul, 2006  DR: OMAPS00084642
+				//Changed the size of simlock password enty from MAX_DIG to MAX_PIN+1
+				AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)pin_data->edtbuf, MAX_PIN+1);
+				pin_editor_window = AUI_pin_Start(win, &editor_data);
+#else /*NEW_EDITOR */
+				pins_loadEditDefault (&editor_data);
+
+				editor_data.editor_attr.text	= pin_data->edtbuf;  /* buffer to be edited */
+				editor_data.editor_attr.size	= MAX_PIN + 1;	 /* limit to 8 digits */
+				editor_data.LeftSoftKey 		= TxtSoftOK;	    
+				editor_data.RightSoftKey	= TxtDelete;
+				editor_data.TextId			= TxtEnterPuk1;
+				editor_data.Identifier		= PUK1_REQ;  
+				editor_data.min_enter		= 4;
+				editor_data.hide			= TRUE;
+#ifdef SIM_PERS
+		switch(event)
+				{
+				case PERM_BLK:
+					editor_data.TextId	= TxtPhoneBlocked;
+					editor_data.Identifier			= PERM_BLK;  
+					break;
+
+				case PUK1_REQ:
+				if( C_KEY_REQ )
+					editor_data.TextId	= TxtUnblockCode;
+				else
+					editor_data.TextId	= TxtEnterPuk1;
+					editor_data.Identifier = PUK1_REQ;  
+					break;
+
+				case INPUT_NLOCK_PIN_REQ:
+					editor_data.TextId	=TxtEnterNLock;
+					editor_data.Identifier			= INPUT_NLOCK_PIN_REQ;  
+					break;
+					
+				case INPUT_NSLOCK_PIN_REQ:
+					editor_data.TextId	=TxtEnterNsLock;
+					editor_data.Identifier			= INPUT_NSLOCK_PIN_REQ;  
+					break;
+					
+				case INPUT_SPLOCK_PIN_REQ:
+					editor_data.TextId	=TxtEnterSpLock;
+					editor_data.Identifier			= INPUT_SPLOCK_PIN_REQ;  
+					break;
+					
+				case INPUT_CLOCK_PIN_REQ:
+					editor_data.TextId	=TxtEnterCLock;
+					editor_data.Identifier			= INPUT_CLOCK_PIN_REQ;  
+					break;
+
+				case INPUT_SIM_PIN_REQ:
+					editor_data.TextId	=TxtEnterPsLock;
+					editor_data.Identifier			= INPUT_SIM_PIN_REQ;  
+					break;
+
+				//x0pleela 20 july, 2006 ER: OMAPS00087586, OMAPS00087587
+				case INPUT_MASTER_KEY_REQ:
+					editor_data.TextId	=TxtMasterUnlock;
+					editor_data.Identifier			= INPUT_MASTER_KEY_REQ;  
+					break;
+
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+				case INPUT_PBLOCK_PIN_REQ:
+					editor_data.TextId	=TxtEnterPbLock;
+					editor_data.Identifier			= INPUT_PBLOCK_PIN_REQ;  
+					break;					
+				}
+#endif		
+				/* create the dialog handler */
+				pin_editor_window = editor_start(win, &editor_data);  /* start the editor */
+#endif	/*NEW_EDITOR */
+			break;	
+
+			case INPUT_NEW_PIN:
+				//clear the editor-buffer
+				memset(pin_data->edtbuf,'\0',sizeof(pin_data->edtbuf));
+
+			/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				pins_loadEditDefault (&editor_data, TxtEnterNewPin, INPUT_NEW_PIN);
+				AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)pin_data->edtbuf, MAX_PIN+1);
+				pin_editor_window = AUI_pin_Start(win, &editor_data);
+#else /*NEW_EDITOR */
+				pins_loadEditDefault (&editor_data);
+
+				editor_data.editor_attr.text	= pin_data->edtbuf;  /* buffer to be edited */
+				editor_data.editor_attr.size	= MAX_PIN + 1;	 /* limit to 8 digits */
+				editor_data.LeftSoftKey 		= TxtSoftOK;	    
+				editor_data.RightSoftKey		= TxtDelete;
+				editor_data.TextId				= TxtEnterNewPin;
+				editor_data.Identifier			= INPUT_NEW_PIN;  
+				editor_data.min_enter		    = 4;
+				editor_data.hide			    = TRUE;
+
+				/* create the dialog handler */
+				pin_editor_window = editor_start(win, &editor_data);  /* start the editor */ 
+#endif /*NEW_EDITOR */
+			break;			
+
+			case INPUT_NEW_PIN_AGAIN:
+				//clear the editor-buffer
+				memset(pin_data->edtbuf,'\0',sizeof(pin_data->edtbuf));
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				pins_loadEditDefault (&editor_data, TxtConfPin, INPUT_NEW_PIN_AGAIN);
+
+				AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)pin_data->edtbuf, MAX_PIN+1);
+				pin_editor_window = AUI_pin_Start(win, &editor_data);
+#else /*NEW_EDITOR */
+				pins_loadEditDefault (&editor_data);
+				
+				editor_data.editor_attr.text	= pin_data->edtbuf;  /* buffer to be edited */
+				editor_data.editor_attr.size	= MAX_PIN + 1;	 /* limit to 8 digits */
+				editor_data.LeftSoftKey 		= TxtSoftOK;	    
+				editor_data.RightSoftKey		= TxtDelete;
+				editor_data.TextId				= TxtConfPin;
+				editor_data.Identifier			= INPUT_NEW_PIN_AGAIN;	
+				editor_data.min_enter		    = 4;
+				editor_data.hide			    = TRUE;
+
+				/* create the dialog handler */
+				pin_editor_window = editor_start(win, &editor_data);  /* start the editor */ 
+#endif /* NEW_EDITOR */
+				break;
+				
+		  case PIN1_REQ:		    //Text "Enter Pin "
+				TRACE_FUNCTION("PIN1_REQ");
+				//clear the editor-buffer
+				memset(pin_data->edtbuf,'\0',sizeof(pin_data->edtbuf));
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				pins_loadEditDefault (&editor_data, TxtEnterPin1, PIN1_REQ);
+
+				AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)pin_data->edtbuf, MAX_DIG);
+				pin_editor_window = AUI_pin_Start(win, &editor_data);
+#else /*NEW_EDITOR */
+				pins_loadEditDefault (&editor_data);
+				
+				editor_data.editor_attr.text	= pin_data->edtbuf;  /* buffer to be edited */
+				editor_data.editor_attr.size	= MAX_PIN + 1;	 /* limit to 8 digits */
+				editor_data.LeftSoftKey 		= TxtSoftOK;	    
+				editor_data.RightSoftKey		= TxtDelete;
+				editor_data.TextId				= TxtEnterPin1;
+				editor_data.Identifier			= PIN1_REQ;  
+				editor_data.min_enter		    = 4;
+				editor_data.hide			    = TRUE;
+
+				/* create the dialog handler */ 
+				pin_editor_window = editor_start(win, &editor_data);  /* start the editor */ 
+#endif /* NEW_EDITOR */
+			break;
+
+		  case NO_SIM_CARD:		    //Text "No Sim Card "
+		  case INVALID_CARD:		    //Text "Invalid SIM card "
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+		  case INVALID_IMEI:		    //Text "Invalid IMEI "
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS		  
+  		  case NO_MEPD: //x0pleela 30 Aug, 2006 DR: OMAPS00091250
+#endif
+
+		  		TRACE_EVENT("NO_SIM OR INVALID_SIM OR INVALID IMEI");
+
+// May 15, 2006 DR: OMAPS00077825 - x0039928
+// Fix : TTY is initialized.
+#ifdef MMI_TTY_ENABLED
+				call_tty_init();
+#endif
+
+				/* API - Created the one call to generate the editor as there were two duplicate calls */
+				//clear the editor-buffer
+				memset(pin_data->edtbuf,'\0',sizeof(pin_data->edtbuf));
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				pins_loadEditDefault (&editor_data, TxtNull, 0);
+				
+				if(event == NO_SIM_CARD)
+				{
+					AUI_edit_SetTextStr(&editor_data, TxtNull, TxtDelete, TxtNoCard, NULL);
+					AUI_edit_SetEvents(&editor_data, INSERT_CARD, FALSE, FOREVER, (T_AUI_EDIT_CB)pins_editor_cb);
+				}
+				else if (event == INVALID_IMEI) // Nov 24, 2005, a0876501, DR: OMAPS00045909
+				{
+					AUI_edit_SetTextStr(&editor_data, TxtNull, TxtDelete, TxtInvalidIMEI, NULL);
+					AUI_edit_SetEvents(&editor_data, SHOW_IMEI_INVALID, FALSE, FOREVER, (T_AUI_EDIT_CB)pins_editor_cb);
+
+				}
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS					
+				//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+				else if ( event == NO_MEPD )
+				{
+					AUI_edit_SetTextStr(&editor_data, TxtNull, TxtDelete, TxtNoMEPD, NULL);
+					AUI_edit_SetEvents(&editor_data, NO_MEPD_DATA, FALSE, FOREVER, (T_AUI_EDIT_CB)pins_editor_cb);
+
+				}
+#endif				
+				else
+				{
+					AUI_edit_SetTextStr(&editor_data, TxtNull, TxtDelete, TxtInvalidCard, NULL);
+					AUI_edit_SetEvents(&editor_data, CARD_REJECTED, FALSE, FOREVER, (T_AUI_EDIT_CB)pins_editor_cb);
+
+				}
+				AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)pin_data->edtbuf, MAX_DIG);
+				AUI_edit_SetAltTextStr(&editor_data, 3, TxtNull, TRUE, TxtNull);
+
+				/*SPR#2235 - DS - Overwrite default 'hidden' PIN entry mode */
+				AUI_edit_SetMode(&editor_data, 0 /*Numeric Mode */, ED_CURSOR_UNDERLINE);
+				
+				pin_editor_window = AUI_pin_Start(win, &editor_data);
+#else /*NEW_EDITOR */
+				pins_loadEditDefault (&editor_data);
+
+				if(event == NO_SIM_CARD)
+				{
+					editor_data.TextId = TxtNoCard;
+					editor_data.Identifier = INSERT_CARD;	
+				}
+				else if(event == INVALID_IMEI) // Nov 24, 2005, a0876501, DR: OMAPS00045909
+				{
+					editor_data.TextId = TxtInvalidIMEI;
+					editor_data.Identifier = SHOW_IMEI_INVALID;	
+				}
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS					
+				//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+				else if (event == NO_MEPD )
+				{
+					editor_data.TextId = TxtNoMEPD;
+					editor_data.Identifier = NO_MEPD_DATA;	
+				}
+#endif				
+				else
+				{
+					editor_data.TextId = TxtInvalidCard;
+					editor_data.Identifier = CARD_REJECTED;	
+				}
+
+				editor_data.editor_attr.text	= pin_data->edtbuf;  /* buffer to be edited */
+				editor_data.editor_attr.size	= MAX_DIG;   /* Don't limit to 3 digits (as that prevents "*#06#") */
+				editor_data.LeftSoftKey 		= TxtNull;	    
+				editor_data.RightSoftKey		= TxtDelete;
+				editor_data.min_enter		    = 3;
+				editor_data.destroyEditor	    = FALSE;
+
+				/* create the dialog handler */
+				pin_editor_window = editor_start(win, &editor_data);  /* start the editor */
+#endif /* NEW_EDITOR */
+
+		  break;
+		 
+		  case TXT_SIM_PLOCK:
+				   pin_data->pin_case = SIM_PLOCK;
+				   main_call_edit(win,SIM_PLOCK);		      // Start: enter P unlock
+				   break;
+		  case TXT_SIM_SPLOCK:
+				   pin_data->pin_case = SIM_SPLOCK;
+				   main_call_edit(win,SIM_SPLOCK);		      // Start: enter SP unlock
+				   break;
+		  case TXT_SIM_NLOCK:
+				   pin_data->pin_case = SIM_NLOCK;
+				   main_call_edit(win,SIM_NLOCK);		      // Start: enter N unlock
+				   break;
+		  case TXT_SIM_CLOCK:
+				   pin_data->pin_case = SIM_CLOCK;
+				   main_call_edit(win,SIM_CLOCK);		      // Start: enter C unlock
+				   break;
+		  case TXT_SIM_NSLOCK:
+				   pin_data->pin_case = SIM_NSLOCK;
+				   main_call_edit(win,SIM_NSLOCK);		      // Start: enter NS unlock
+				   break;
+
+
+
+	 }
+
+	switch(event)
+	{
+	  case PIN_OK_INFO: // PIN was needed
+	  case PIN_OK:	    // PIN wasn't needed
+				check_plock_to_clock(win,event);/* start sim lock procedure   */
+			   break;
+	  case PIN_OK_END:
+		{
+			BootUpState = BOOTUP_STATE_COMPLETED;//xashmic 21 Sep 2006, OMAPS00095831
+
+//		   U8 uMode;  /* Warning Correction */
+			/*
+			*** registration in full service mode case: PIN was  necessary
+			*/
+				/* SH - show welcome screen */
+				showwelcome(idle_get_window());
+
+			    network_start_full_service ();
+//GW-SPR#1035-Added STK Changes
+				TRACE_FUNCTION("pin_destroy 2");
+	  }			
+		       break;
+//nm insert new one
+	  case PIN1_STATUS_END:
+			   pin_destroy(pin_data->pin_win);// finish main pin dialog
+			   TRACE_FUNCTION("pin_destroy 3");
+		       break;
+//nm		       
+	  case TXT_SIM_LOCK_ALL:
+	  		ShowMessage(idle_get_window(), pin_data->display_id1, pin_data->display_id2);
+			   pin_destroy(pin_data->pin_win);// finish main pin dialog
+			   TRACE_FUNCTION("pin_destroy 4");
+		       break;
+	  case PUK1_UNBL_SUCC:
+			if((pin_data->pin_case EQ PUK1_END) || (pin_data->gsm_state && (pin_data->pin_case EQ INPUT_PUK1)))
+						/*	 sim lock check only after power on and puk verified */
+				   /* by PUK (normal way) or by gsm unblock string */
+			{
+				check_plock_to_clock(win,event);
+			}
+			else
+			{
+
+				main_call_mess(win,event);		   
+	 
+			}
+			break;
+	}
+
+	switch(event)
+	{
+
+
+	  case SIM_NLOCK_REQ:
+	  case SIM_NSLOCK_REQ:
+	  case SIM_SPLOCK_REQ:
+	  case SIM_CLOCK_REQ:
+			main_call_mess(win,event);
+			break;
+	  case SIM_PLOCK:
+			check_nlock_to_clock(win,event);
+			break;
+	  case SIM_NLOCK:
+			check_splock_to_clock(win,event);
+			break;
+	  case SIM_SPLOCK:
+			check_nslock_to_clock(win,event);
+			break;
+	  case SIM_NSLOCK:
+			check_sim_clock(win,event);
+			break;
+	  case SIM_CLOCK:
+			if(sim_unlock_sim_lock(MFW_SIM_CLOCK,(UBYTE *)pin_data->pin)EQ MFW_SIM_CLOCK)/* unlock code  */
+			{
+					main_call_mess(win,SIM_UNLOCK_OK);	      /* finish sim unlock procedure */
+			}
+			else if(sim_unlock_sim_lock(MFW_SIM_CLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_UNLOCK_ERR)
+			{
+				main_call_mess(win,SIM_LOCK_ERR);
+			}
+			break;
+	  default:
+		  break;
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	check_plock_to_clock 
+
+ $Description:	sim lock check from PLOCK to CLOCK
+ $Returns:		void
+ $Arguments:	window, window handler event
+ 
+*******************************************************************************/
+static void check_plock_to_clock(T_MFW_HND win,USHORT event)
+{
+	/* x0045876, 14-Aug-2006 (WR - "win_data" was declared but never referenced) */
+	/* T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; */
+	
+//	T_pin * pin_data = (T_pin *)win_data->user; // pin main data  /* Warning Correction */
+
+	TRACE_FUNCTION("MmiPins:check_plock_to_clock");
+	/*MC SPR 1351 check all locks other than Plock for being blocked as well as locked.  User can
+	then attempt to enter overall PUK to disable lock if need be*/
+	if(sim_check_sim_Plock() EQ MFW_SIM_BLOCKED)
+	{
+		main_call_mess(win,SIM_LOCK_ALL);
+	}
+	else if(sim_check_sim_Plock() EQ MFW_SIM_LOCKED)
+	{
+		main_call_mess(win,SIM_PLOCK_REQ);
+	}
+	else if(sim_check_sim_Nlock() EQ MFW_SIM_LOCKED ||sim_check_sim_Nlock() EQ MFW_SIM_BLOCKED)
+	{
+		main_call_mess(win,SIM_NLOCK_REQ);
+	}
+	else if(sim_check_sim_SPlock() EQ MFW_SIM_LOCKED||sim_check_sim_SPlock() EQ MFW_SIM_BLOCKED)
+	{
+		main_call_mess(win,SIM_SPLOCK_REQ);
+	}
+	else if(sim_check_sim_NSlock() EQ MFW_SIM_LOCKED ||sim_check_sim_NSlock() EQ MFW_SIM_BLOCKED)
+	{
+		main_call_mess(win,SIM_NSLOCK_REQ);
+	}
+	else if(sim_check_sim_Clock() EQ MFW_SIM_LOCKED|| sim_check_sim_Clock() EQ MFW_SIM_BLOCKED)
+	{
+		main_call_mess(win,SIM_CLOCK_REQ);
+	}
+	else
+	{
+		switch(event)
+		{
+			case PIN_OK:
+
+				/*
+				*** registration in full service mode case: PIN was not necessary
+				*/
+				/* SH - show welcome screen*/
+				showwelcome(idle_get_window());
+				/*SPR 1431*/
+				network_start_full_service();
+//GW-SPR#1035-Added STK Changes
+/* NM, 110702
+   this destroy the only ONE SIM-handler which we have 
+   after switching on !!
+   It should be at least one SIM-handler activ all the  time 
+*/
+				TRACE_FUNCTION("pin_destroy 5");
+				break;
+			case PIN_OK_INFO:
+				main_call_mess(win,PIN_OK_INFO);
+				break;
+			case PUK1_UNBL_SUCC:
+				main_call_mess(win,event);
+				break;
+			default:
+				break;
+		}
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	check_nlock_to_clock
+ $Description:	sim lock check from NLOCK to CLOCK
+ $Returns:		void
+ $Arguments:	window, window handler event
+ 
+*******************************************************************************/
+static void check_nlock_to_clock(T_MFW_HND win,USHORT event)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	TRACE_FUNCTION("MmiPins:check_nlock_to_clock");
+
+	if(sim_unlock_sim_lock(MFW_SIM_PLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_PLOCK)/* P unlock code ok */
+	{	/*MC SPR 1351 check locks for being blocked as well as locked.  User can
+		then attempt to enter overall PUK to disable lock*/
+		if(sim_check_sim_Nlock() EQ MFW_SIM_LOCKED || sim_check_sim_Nlock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_NLOCK_REQ);	      //check N unlock code
+		}
+		else if(sim_check_sim_SPlock() EQ MFW_SIM_LOCKED || sim_check_sim_SPlock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_SPLOCK_REQ);	      //check SP unlock code
+		}
+		else if(sim_check_sim_NSlock() EQ MFW_SIM_LOCKED || sim_check_sim_NSlock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_NSLOCK_REQ);	      //check NS unlock code
+		}
+	else if(sim_check_sim_Clock() EQ MFW_SIM_LOCKED || sim_check_sim_Clock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_CLOCK_REQ);	      //check C unlock code
+		}
+		else					      /* finish sim unlock procedure */
+		{
+			main_call_mess(win,SIM_UNLOCK_OK);
+		}
+	}
+	else if(sim_unlock_sim_lock(MFW_SIM_PLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_UNLOCK_ERR)
+	{
+			main_call_mess(win,SIM_LOCK_ERR);
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	check_splock_to_clock
+ $Description:	sim lock check from SPLOCK to CLOCK
+ $Returns:		void
+ $Arguments:	window, window handler event
+ 
+*******************************************************************************/
+static void check_splock_to_clock(T_MFW_HND win,USHORT event)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	TRACE_FUNCTION("MmiPins:check_splock_to_clock");
+
+	if(sim_unlock_sim_lock(MFW_SIM_NLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_NLOCK)
+	{/*MC SPR 1351 check locks for being blocked as well as locked.  User can
+		then attempt to enter overall PUK to disable lock*/
+		if(sim_check_sim_SPlock() EQ MFW_SIM_LOCKED || sim_check_sim_SPlock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_SPLOCK_REQ);	      //check SP unlock code
+		}
+		else if(sim_check_sim_NSlock() EQ MFW_SIM_LOCKED|| sim_check_sim_NSlock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_NSLOCK_REQ);	      //check NS unlock code
+		}
+	else if(sim_check_sim_Clock() EQ MFW_SIM_LOCKED || sim_check_sim_Clock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_CLOCK_REQ);	      //check C unlock code
+		}
+		else					      /* finish sim unlock procedure */
+		{
+			main_call_mess(win,SIM_UNLOCK_OK);	      /* finish sim unlock procedure */
+		}
+	}
+	else if(sim_unlock_sim_lock(MFW_SIM_NLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_UNLOCK_ERR)
+	{
+		main_call_mess(win,SIM_LOCK_ERR);
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	check_nslock_to_clock
+ $Description:	sim lock check from NSLOCK to CLOCK
+ $Returns:		void
+ $Arguments:	window, window handler event
+ 
+*******************************************************************************/
+static void check_nslock_to_clock(T_MFW_HND win,USHORT event)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	TRACE_FUNCTION("MmiPins:check_nslock_to_clock");
+
+	if(sim_unlock_sim_lock(MFW_SIM_SPLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_SPLOCK)/* unlock code ok */
+	{/*MC SPR 1351 check locks for being blocked as well as locked.  User can
+		then attempt to enter overall PUK to disable lock*/
+		if(sim_check_sim_NSlock() EQ MFW_SIM_LOCKED || sim_check_sim_NSlock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_NSLOCK_REQ);	      //check NS unlock code
+		}
+	else if(sim_check_sim_Clock() EQ MFW_SIM_LOCKED || sim_check_sim_Clock() EQ MFW_SIM_BLOCKED)
+		{
+			main_call_mess(win,SIM_CLOCK_REQ);	      //check C unlock code
+		}
+		else					      /* finish sim unlock procedure */
+		{
+			main_call_mess(win,SIM_UNLOCK_OK);	      /* finish sim unlock procedure */
+		}
+	}
+	else if(sim_unlock_sim_lock(MFW_SIM_SPLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_UNLOCK_ERR)
+	{
+		main_call_mess(win,SIM_LOCK_ERR);
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	check_sim_clock
+ $Description:	sim lock check	CLOCK
+ $Returns:		void
+ $Arguments:	window, window handler event
+ 
+*******************************************************************************/
+static void check_sim_clock(T_MFW_HND win,USHORT event)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	TRACE_FUNCTION("MmiPins:check_sim_lock");
+
+	if(sim_unlock_sim_lock(MFW_SIM_NSLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_NSLOCK)/* unlock code ok */
+	{/*MC SPR 1351 check locks for being blocked as well as locked.  User can
+		then attempt to enter overall PUK to disable lock*/
+      if(sim_check_sim_Clock() EQ MFW_SIM_LOCKED || sim_check_sim_Clock() EQ MFW_SIM_BLOCKED)
+	  {
+		main_call_mess(win,SIM_CLOCK_REQ);		  //check C unlock code
+	   }
+		else					      /* finish sim unlock procedure */
+		{
+			main_call_mess(win,SIM_UNLOCK_OK);	      /* finish sim unlock procedure */
+		}
+	}
+	else if(sim_unlock_sim_lock(MFW_SIM_NSLOCK,(UBYTE *)pin_data->pin) EQ MFW_SIM_UNLOCK_ERR)
+	{
+		main_call_mess(win,SIM_LOCK_ERR);
+	}
+}
+
+/*******************************************************************************
+
+ $Function:	main_call_mess 
+ $Description:	help function for message dialog
+ $Returns:		void
+ $Arguments:	window, window handler event
+ 
+*******************************************************************************/
+static void main_call_mess(T_MFW_HND win, USHORT event)
+{
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	T_MFW_HND pin_mess_win;
+	TRACE_FUNCTION("MmiPins: main_call_mess");
+
+	pin_mess_win = pin_mess_create(pin_data->pin_win);
+	
+	if(pin_mess_win)
+	{
+		SEND_EVENT(pin_mess_win,event,0,pin_data);
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	main_call_edit 
+ $Description:	help function for editor dialog
+ $Returns:		void
+ $Arguments:	window, window handler event
+ 
+*******************************************************************************/
+static void main_call_edit(T_MFW_HND win,USHORT event)
+{
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	T_MFW_HND pin_edt_win;
+
+
+
+
+	pin_edt_win = pin_edt_create(pin_data->pin_win);
+
+    if(pin_edt_win)
+	{
+		SEND_EVENT(pin_edt_win,event,0,pin_data);
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_edt_create 
+ $Description:	Creation of an instance  for the PIN Editor dialog.
+		Type of dialog : SINGLE_DYNAMIC
+ $Returns:		void
+ $Arguments:	parent window
+ 
+*******************************************************************************/
+T_MFW_HND pin_edt_create (T_MFW_HND parent_window)
+{
+  T_pin_edt * data = (T_pin_edt *)ALLOC_MEMORY (sizeof (T_pin_edt));
+
+  T_MFW_WIN * win;
+
+  data->pin_edt_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)pin_edt_win_cb);
+  TRACE_FUNCTION("pin_edt_create");
+
+  if (data->pin_edt_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  pin_edit_windows = data->pin_edt_win;
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)pin_editor;
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_edt_win)->data;
+  win->user		      = (void *) data;
+
+  /*
+   * Create any other handler
+   */
+
+  data->tim_out_handle = tim_create(data->pin_edt_win,TIMEOUT,(T_MFW_CB)pin_edt_tim_out_cb);
+
+  /* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+  data->editor = ATB_edit_Create(&data->editorPinAttr,0);
+#else /* NEW_EDITOR */
+  data->editor_handle = edt_create(data->pin_edt_win,&data->editpinAttr,0,0);
+#endif /* NEW_EDITOR */
+
+  data->kbd_handle = kbd_create(data->pin_edt_win,KEY_ALL,(T_MFW_CB)pin_edt_kbd_cb);
+  data->kbd_long_handle = kbd_create(data->pin_edt_win,KEY_ALL | KEY_LONG,(T_MFW_CB)pin_edt_kbd_long_cb);
+  /*
+   * return window handle
+   */
+  return data->pin_edt_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_edt_destroy 
+ $Description:	Destroy the pin editor dialog.
+ $Returns:		void
+ $Arguments:	window
+ 
+*******************************************************************************/
+void pin_edt_destroy  (T_MFW_HND own_window)
+{
+  T_pin_edt * data ;
+  T_MFW_WIN * win;
+
+
+  if (own_window)
+  {
+	  TRACE_FUNCTION("pin_edt_destroy");
+	  win = ((T_MFW_HDR *)own_window)->data;
+	  data = (T_pin_edt *)win->user;
+
+	  if(data)
+	  {
+      /*
+       * Delete WIN Handler and children handler
+       */
+		  pin_edit_windows = 0;
+		  win_delete (data->pin_edt_win);
+	      FREE_MEMORY((void *)data,(sizeof(T_pin_edt)));;
+	  }
+   }
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_edt_win_cb
+ $Description:	Callback function for editor windows
+ $Returns:		Status int
+ $Arguments:	window handle event, window
+ 
+*******************************************************************************/
+static int pin_edt_win_cb (T_MFW_EVENT event,T_MFW_WIN * win)
+{
+  T_pin_edt 	*edt_data	= (T_pin_edt *)win->user;//pin edt data
+  T_MFW_WIN		*win_pin	=((T_MFW_HDR *)edt_data->parent_win)->data;
+  T_pin			*pin_data	= (T_pin *)win_pin->user; // pin main data
+
+  TRACE_EVENT_P1("pin_edt_win_cb: %d", event);
+  
+  if (event EQ MfwWinVisible)
+  {
+  /* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+	ATB_edit_Show(edt_data->editor);
+
+	/* ED_UPDATE_TRIVIAL only updates text, not title */
+	if (edt_data->editor->update!=ED_UPDATE_TRIVIAL)
+	{
+		/* Set the colour for drawing title */
+
+		resources_setTitleColour(COLOUR_EDITOR);
+		PROMPT(0,0,0,pin_data->display_id1);
+
+		dspl_Clear(0,0, SCREEN_SIZE_X-1, edt_data->editor->attr->win_size.py-1);
+	}
+
+	edt_data->editor->update = ED_UPDATE_DEFAULT;
+	
+#else /* NEW_EDITOR */
+    pin_icons();
+    PROMPT(INFO_TEXT_X,INFO_TEXT_Y,0,pin_data->display_id1);
+#endif /* NEW_EDITOR */
+
+    return 1;
+  }
+  return 0;
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_edt_kbd_cb 
+ $Description:	Callback function for keyboard
+ $Returns:		Status int
+ $Arguments:	window handle event, keyborad control block
+ 
+*******************************************************************************/
+static int pin_edt_kbd_cb (T_MFW_EVENT event,T_MFW_KBD *  kc)
+{
+    T_MFW_HND win = mfw_parent(mfw_header());
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;//pin edt data
+
+	T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+	T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
+//	T_sim_rem * sim_rem_data = (T_sim_rem *)win_pin->user; //sim_rem data possible too  /* Warning Correction */
+
+	char timer = TRUE;
+	timStop(edt_data->tim_out_handle);/* stop entering timer      */
+
+	TRACE_FUNCTION("MmiPins:pin_edt_kbd_cb");
+		switch(kc->code)
+		{
+			case KCD_0:
+			case KCD_1:
+			case KCD_2:
+			case KCD_3:
+			case KCD_4:
+			case KCD_5:
+			case KCD_6:
+			case KCD_7:
+			case KCD_8:
+			case KCD_9:
+			case KCD_STAR:
+				if(edt_data->editor_index < MAX_DIG)
+				{
+					if(kc->code EQ KCD_STAR)
+						edt_data->pin[edt_data->editor_index] = STAR;
+					else
+						edt_data->pin[edt_data->editor_index] = '0' + kc->code;
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+		   			if((edt_data->pin_case_edit NEQ CARD_REJECTED) AND (edt_data->pin_case_edit NEQ INSERT_CARD) 
+						AND (edt_data->pin_case_edit NEQ SHOW_IMEI_INVALID)
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS							
+						//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+						AND (edt_data->pin_case_edit NEQ NO_MEPD_DATA) 
+#endif
+						)
+					{
+					/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+						ATB_edit_AsciiChar(edt_data->editor, '*', TRUE);
+#else /* NEW_EDITOR */
+						edtChar(edt_data->editor_handle,'*');			       /* hide security code */
+#endif /* NEW_EDITOR */
+					}
+					else
+					{
+					/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+						ATB_edit_AsciiChar(edt_data->editor, edt_data->pin[edt_data->editor_index], TRUE);
+#else /* NEW_EDITOR */
+						edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]); /* not hide emergency call */
+#endif /* NEW_EDITOR */
+					}
+						
+					edt_data->editor_index++;
+					check_pins(win, edt_data);		    /*	digits check depends on status pin_case */
+					if(edt_data->gsm_state)
+						pin_data->gsm_state = edt_data->gsm_state;
+
+				}
+				break;
+			case KCD_HASH:
+			case KCD_LEFT:
+					switch(edt_data->pin_case_edit)
+					{
+
+						case INSERT_CARD:
+						case CARD_REJECTED:
+						case SHOW_IMEI_INVALID: // Nov 24, 2005, a0876501, DR: OMAPS00045909
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS							
+						//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+						case NO_MEPD_DATA:
+#endif							
+							if(edt_data->emergency_call)
+							{
+								emerg_pin(edt_data);				/* start emergency call  */
+								timer = FALSE;
+							}
+							else
+							{
+								clear_edit_array (edt_data);
+								memset(edt_data->pin,'\0', sizeof(edt_data->pin));/* initial string */
+								edt_data->editor_index = 0;
+							}
+							break;
+						case SIM_PLOCK:
+							timer = FALSE;
+							strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
+							pin_edt_destroy(edt_data->pin_edt_win);
+			    SEND_EVENT(pin_data->pin_win,SIM_PLOCK,0,pin_data);//check P unlock code
+							break;
+						case SIM_NLOCK:
+							strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
+							pin_edt_destroy(edt_data->pin_edt_win);
+							timer = FALSE;
+			    SEND_EVENT(pin_data->pin_win,SIM_NLOCK,0,pin_data);
+							break;
+						case SIM_SPLOCK:
+							strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
+							pin_edt_destroy(edt_data->pin_edt_win);
+							timer = FALSE;
+			    SEND_EVENT(pin_data->pin_win,SIM_SPLOCK,0,pin_data);
+							break;
+						case SIM_NSLOCK:
+							strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
+							pin_edt_destroy(edt_data->pin_edt_win);
+							timer = FALSE;
+						    SEND_EVENT(pin_data->pin_win,SIM_NSLOCK,0,pin_data);
+							break;
+						case SIM_CLOCK:
+							strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
+							pin_edt_destroy(edt_data->pin_edt_win);
+							timer = FALSE;
+						    SEND_EVENT(pin_data->pin_win,SIM_CLOCK,0,pin_data);
+							break;
+						default:
+							break;
+					}
+					break;
+			case KCD_HUP:
+			case KCD_RIGHT:
+				    if(edt_data->editor_index EQ 0)
+						;
+					else
+						edt_data->editor_index--;
+
+					edt_data->pin[edt_data->editor_index] = '\0';
+					/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+					ATB_edit_DeleteLeft(edt_data->editor, TRUE); /* SPR#2342 - SH */
+#else /* NEW_EDITOR */
+					edtChar(edt_data->editor_handle,ecBack);/* delete character    */
+
+					if(strlen((char*)edt_data->pin) < MIN_PIN)
+					{
+						TRACE_FUNCTION("clear softknr 4");
+						pin_rectClear( &edt_data->editpinAttr.win );
+					}
+#endif /* NEW_EDITOR */
+					edt_data->emergency_call = FALSE;
+					if(edt_data->pin_case_edit EQ INPUT_PUK1)  /* special case ?? */
+						winShow(edt_data->pin_edt_win);
+					else
+						check_pins(win,edt_data);	   /* check remain for emergency call  */
+				    break;
+			default:
+				break;
+		}
+	if (timer)
+		tim_start(edt_data->tim_out_handle);/* start timer for entering */
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:	check_pins  
+ $Description:	check pins input string
+ $Returns:		none
+ $Arguments:	window, pin editor attributes
+ 
+*******************************************************************************/
+static void check_pins (T_MFW_HND win, void * edt_pin)
+{
+	T_pin_edt * edt_data = (T_pin_edt *)edt_pin;
+
+	TRACE_FUNCTION("MmiPins:check_pins");
+
+	if(strlen((char*)edt_data->pin)NEQ 0)
+    {
+		softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);	
+	    if (strlen((char*)edt_data->pin) > FIRST_DIGIT)	       /* for every character  */
+	    {
+			if(strlen((char*)edt_data->pin) >= 3)
+			{
+
+				TRACE_FUNCTION("Softkeys:nr 1");
+				softKeys_displayId(TxtSoftOK,TxtDelete,0, COLOUR_EDITOR_XX);
+			}
+			else
+				softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);
+
+			gsm_test(win,edt_data); 	  /* test if GSM string or not*/
+		}
+		
+	    TRACE_FUNCTION("Check Length of PIN");
+		if (strlen((char*)edt_data->pin) EQ (MIN_PIN - 1) || strlen((char*)edt_data->pin) EQ (MIN_PIN -2))
+		{
+			TRACE_FUNCTION("cm_check_emergency() TRACE PINS 2");
+			if(cm_check_emergency((U8*)edt_data->pin))/* test emergency call*/
+			{
+				TRACE_FUNCTION("MmiPins:check_pins:emercall");
+				edt_data->emergency_call = TRUE;
+				softKeys_displayId(TxtSoftCall,TxtNull,0, COLOUR_EDITOR_XX);	
+			}
+			else
+			{
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+				if((edt_data->pin_case_edit EQ CARD_REJECTED) OR (edt_data->pin_case_edit EQ INSERT_CARD) 
+					OR (edt_data->pin_case_edit EQ SHOW_IMEI_INVALID)
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS	
+					//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+					OR (edt_data->pin_case_edit EQ NO_MEPD_DATA)
+#endif
+					)
+				{			  /* delete all digits	    */
+					clear_edit_array (edt_data);  /*  clear editor array	 */
+					memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string */
+					edt_data->editor_index = 0;
+				}
+				edt_data->emergency_call = FALSE;
+			}
+		}
+		if ((strlen((char*)edt_data->pin) >= MIN_PIN) && (strlen((char*)edt_data->pin) < (MAX_PIN + 1)))
+		{
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+			if(((edt_data->pin_case_edit EQ CARD_REJECTED) OR (edt_data->pin_case_edit EQ INSERT_CARD)
+				OR (edt_data->pin_case_edit EQ SHOW_IMEI_INVALID)				
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS					
+				//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+				OR (edt_data->pin_case_edit EQ NO_MEPD_DATA)
+#endif
+			) && !(edt_data->gsm_state))
+			{
+				if(edt_data->editor_index EQ 0)
+					;
+				else
+					edt_data->editor_index--;		  /* only emergency calls, 3 digits */
+
+				edt_data->pin[edt_data->editor_index] = '\0';
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				ATB_edit_DeleteLeft(edt_data->editor, TRUE); /* SPR#2342 - SH */
+#else /* NEW_EDITOR */
+				edtChar(edt_data->editor_handle,ecBack);
+#endif /* NEW_EDITOR */
+
+			}
+			else
+			{
+				TRACE_FUNCTION("clear softknr 5");
+
+				if(((edt_data->pin_case_edit EQ INPUT_PUK1) ||(edt_data->pin_case_edit EQ INPUT_PUK2)) && !(edt_data->gsm_state))
+				{	    /* PUK 1/2 (not by gsm string) max. 8 digits  */
+					if(strlen((char*)edt_data->pin) >= MAX_PIN)
+					{
+						TRACE_FUNCTION("Softkeys:nr 2");
+					}
+				}
+				else if((edt_data->pin_case_edit EQ SIM_CLOCK) ||
+					    (edt_data->pin_case_edit EQ SIM_NLOCK) ||
+						(edt_data->pin_case_edit EQ SIM_NSLOCK) ||
+						(edt_data->pin_case_edit EQ SIM_SPLOCK))
+				{	     /* sim lock code  max. 8 digits exept PLOCK  */
+					if(strlen((char*)edt_data->pin) >= MAX_PIN)
+					{
+						TRACE_FUNCTION("Softkeys:nr 3");
+					}
+				}
+				else if (edt_data->pin_case_edit EQ SIM_PLOCK)
+				{		   /* sim lock	PLOCK code  max. 6 digits */
+					if(strlen((char*)edt_data->pin) >= NUM_OF_PLOCK)
+					{
+						TRACE_FUNCTION("Softkeys:nr 4");
+					}
+				}
+				else
+				{
+					if(!(edt_data->gsm_state))	  /* usual way for PIN 4 digits     */
+					{
+					  TRACE_FUNCTION("softkey 5");
+						
+					}
+					else
+					{
+						TRACE_FUNCTION("clear softkey 6");
+						pin_skClear(  );
+//						dspl_Clear( PIN_EDIT_2 ); /* clear button */
+					}
+				}
+				edt_data->emergency_call = FALSE;
+			}
+		}
+		if((strlen((char*)edt_data->pin) > MAX_PIN) && !(edt_data->gsm_state)) /* >8 digits not allowed    */
+		{
+			if(edt_data->editor_index EQ 0)
+				;
+			else
+				edt_data->editor_index--;
+
+			edt_data->pin[edt_data->editor_index] = '\0';
+			/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+			ATB_edit_DeleteLeft(edt_data->editor, TRUE); /* SPR#2342 - SH */
+#else /* NEW_EDITOR */
+			edtChar(edt_data->editor_handle,ecBack);
+#endif /* NEW_EDITOR */
+		}
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	gsm_test 
+ $Description:	test if gsm string
+ $Returns:		Status int
+ $Arguments:	window, pin editor attributes
+ 
+*******************************************************************************/
+static int gsm_test(T_MFW_HND win,void * edt_pin)
+{
+	int status;
+	T_pin_edt * edt_data = (T_pin_edt *)edt_pin;
+
+	//T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; /* Warning Correction */
+	T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+	T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
+
+	TRACE_FUNCTION("MmiPins:gsm_test");
+
+	status = ss_check_ss_string((UBYTE*)edt_data->pin);/* check GSM-String */
+	switch(status)
+	{
+		case MFW_SS_SIM_UNBLCK_PIN:
+			if(!(edt_data->gsm_state))
+			{
+				switch(edt_data->pin_case_edit)
+				{
+					case INPUT_PUK1:/* replace * with string id */
+						if(!(strncmp((char*)edt_data->pin,"**05*",IDENT_GSM_1)))
+						{
+							edt_data->gsm_state = TRUE;
+							strncpy((char*)edt_data->edtbuf,(char*)edt_data->pin,edt_data->editor_index-1);
+							/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+							ATB_edit_Show(edt_data->editor);
+#else /* NEW_EDITOR */
+							edtShow(edt_data->editor_handle);
+#endif /* NEW_EDITOR */
+						}
+						else
+						{
+							edt_data->gsm_state = FALSE;
+							TRACE_EVENT("dsplClearAll 2");								
+							dspl_ClearAll();
+							clear_edit_array (edt_data);
+							pin_edt_destroy(edt_data->pin_edt_win);
+							SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+						}
+						break;
+					default:
+						edt_data->gsm_state = FALSE;
+						TRACE_EVENT("dsplClearAll 3");							
+						dspl_ClearAll();
+						clear_edit_array (edt_data);
+						pin_edt_destroy(edt_data->pin_edt_win);
+						SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+						break;
+				}
+			}
+			return status;
+		case MFW_SS_DIAL:	       /* string not yet detected  */
+        case MFW_SS_USSD:  /*JVJ SPR 1040- The short USSD strings should also be 
+                              considered in this case, since they can be confused with dialled numbers  
+                             */
+				edt_data->gsm_state = FALSE;
+			return status;
+		default:
+			TRACE_FUNCTION("MmiPins:default in gsm_test");		
+			edt_data->gsm_state = FALSE;
+			TRACE_FUNCTION("dsplClearAll 4");							
+			dspl_ClearAll();
+			clear_edit_array (edt_data);
+			pin_edt_destroy(edt_data->pin_edt_win);
+			SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+			return status;
+	}
+}
+
+
+#if(0) /* x0039928 - Lint warning fix */
+/*******************************************************************************
+
+ $Function:	gsm_sec_execute
+ $Description:	GSM-String will be executed
+ $Returns:		None
+ $Arguments:	window, string
+ 
+*******************************************************************************/
+static void gsm_sec_execute(T_MFW_HND win,void *string)
+{
+
+	T_pin_edt * edt_data = (T_pin_edt *)string;
+
+//	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;   /* Warning Correction */
+	T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+	T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
+
+	int result;
+
+	TRACE_FUNCTION("MmiPins:gsm_sec_execute");
+
+	result = ss_execute_transaction((UBYTE*)edt_data->pin,0);/* ussd_man = 0 while SSD */
+
+	TRACE_FUNCTION("dsplClearAll 5"); 
+	dspl_ClearAll();
+	clear_edit_array (edt_data);
+	pin_edt_destroy(edt_data->pin_edt_win);
+
+	switch(result)
+	{
+		case MFW_SS_SIM_REG_PW: 	/* change PIN1/2	     */
+	    TRACE_FUNCTION("MmiPins:gsm_sec_execute:MFW_SS_SIM_REG_PW");
+			break;
+		case MFW_SS_SIM_UNBLCK_PIN:	/* unblock PIN1/2	    */
+	    TRACE_FUNCTION("MmiPins:gsm_sec_execute:MFW_SS_SIM_UNBLCK_PIN");
+			break;
+		case MFW_SS_FAIL:
+	    TRACE_FUNCTION("MmiPins:gsm_sec_execute:MFW_SS_FAIL");
+			SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/* new PIN and new PIN again are not the same */
+			break;
+		default:
+			break;
+	}
+}
+
+#endif
+
+/*******************************************************************************
+
+ $Function:	pin_edt_kbd_long_cb
+ $Description:	Callback function for keyboard long
+ $Returns:		Status int
+ $Arguments:	window handler event, keyboard control block 
+ 
+*******************************************************************************/
+static int pin_edt_kbd_long_cb (T_MFW_EVENT event,T_MFW_KBD *  kc)
+{
+    T_MFW_HND win = mfw_parent(mfw_header());
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;//pin edt data
+
+    TRACE_FUNCTION("MmiPins:pin_edt_kbd_long_cb");
+
+    if ((event & KEY_CLEAR) && (event & KEY_LONG))
+	{
+			timStop(edt_data->tim_out_handle); /* stop entering timer	*/
+			clear_edit_array(edt_data);
+			memset(edt_data->pin,'\0',sizeof(edt_data->pin));/* initial string */
+			edt_data->editor_index = 0;
+			edt_data->emergency_call = FALSE;
+			winShow(edt_data->pin_edt_win);
+			return MFW_EVENT_CONSUMED;
+	}
+  return MFW_EVENT_CONSUMED;
+}
+
+
+
+
+/*******************************************************************************
+
+ $Function:	pin_edt_tim_out_cb
+ $Description:	Callback function for timer (watchdog entering)
+ $Returns:		void
+ $Arguments:	window handler event, timer control block 
+ 
+*******************************************************************************/
+static void pin_edt_tim_out_cb (T_MFW_EVENT event,T_MFW_TIM * t)
+{
+    T_MFW_HND win = mfw_parent(mfw_header());
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;
+
+	T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+	T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
+
+    TRACE_FUNCTION("MmiPins:pin_edt_tim_out_cb");
+
+
+    TRACE_FUNCTION("clear softkey 7");
+
+	// clear the softkeys
+	pin_skClear();
+	clear_edit_array(edt_data);
+	// clear the input
+	
+	/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+	ATB_edit_ClearAll(edt_data->editor);
+#else /* NEW_EDITOR */
+	pin_rectClear( &edt_data->editpinAttr.win );
+    memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string  */
+#endif /* NEW_EDITOR */
+
+	edt_data->editor_index = 0;
+	edt_data->gsm_state = FALSE;
+	pin_data->gsm_state = FALSE;
+
+	winShow(edt_data->pin_edt_win);
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	pin_editor 
+ $Description:	Pin editor Dialog Signal Handling function
+ $Returns:		void
+ $Arguments:	window, window handler event, value, parameter 
+ 
+*******************************************************************************/
+static void pin_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;
+
+
+    T_pin * pin_data = (T_pin *)parameter;//pin main data
+
+	edt_data->pin_case_edit = pin_data->pin_case;
+
+	TRACE_FUNCTION("MmiPins:pin_editor");
+
+  /*
+   * depending on event
+   */
+  switch (event)
+  {
+	case INPUT_PIN1:
+	case INPUT_PUK1:
+	case INPUT_NEW_PIN:
+	case INPUT_NEW_PIN_AGAIN:
+	case CARD_REJECTED:
+	case INSERT_CARD:
+	case SHOW_IMEI_INVALID:	// Nov 24, 2005, a0876501, DR: OMAPS00045909
+	case SIM_PLOCK:
+	case SIM_NLOCK:
+	case SIM_NSLOCK:
+	case SIM_SPLOCK:
+	case SIM_CLOCK:
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS			
+	case NO_MEPD_DATA: //x0pleela 30 Aug, 2006 DR: OMAPS00091250
+#endif
+		
+		//SPR#717 - GW - Wrong structures being cleared
+		memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string  */
+		memset(edt_data->puk, '\0', sizeof(edt_data->puk));
+		memset(edt_data->new_pin, '\0', sizeof(edt_data->new_pin));
+		memset(edt_data->old_pin, '\0', sizeof(edt_data->old_pin));
+
+		// the coordinate of the editor (enter the pin)
+		/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+		AUI_edit_SetAttr( &edt_data->editorPinAttr, PIN_EDIT_RESET, COLOUR_EDITOR_XX, EDITOR_FONT, 0, ED_CURSOR_UNDERLINE, ATB_DCS_ASCII, (UBYTE *)edt_data->edtbuf, MAX_DIG);
+		clear_edit_array(edt_data);          /*    clear editor buffer      */
+		ATB_edit_Init(edt_data->editor);
+#else /* NEW_EDITOR */
+		editor_attr_init( &edt_data->editpinAttr, PIN_EDIT_RESET, edtCurBar1,0,(char*)edt_data->edtbuf,MAX_DIG,COLOUR_EDITOR_XX);
+		clear_edit_array(edt_data);          /*    clear editor buffer      */
+#endif /* NEW_EDITOR */
+
+		edt_data->editor_index = 0;
+		winShow(edt_data->pin_edt_win);
+	break;
+	default:
+		break;
+  }
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_mess_create 
+ $Description:	Creation of an instance  for the PIN Message dialog.
+		Type of dialog : SINGLE_DYNAMIC
+ $Returns:		window
+ $Arguments:	parent win
+ 
+*******************************************************************************/
+T_MFW_HND pin_mess_create (T_MFW_HND parent_window)
+{
+  T_pin_mess * data = (T_pin_mess *)ALLOC_MEMORY (sizeof (T_pin_mess));
+
+  T_MFW_WIN	* win;
+
+  data->pin_mess_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)pin_mess_win_cb);
+
+  TRACE_FUNCTION("MmiPins:pin_mess_create");
+
+  if (data->pin_mess_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  pin_mess_windows = data->pin_mess_win;
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)pin_messages;
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_mess_win)->data;
+  win->user		      = (void *) data;
+
+  /*
+   * return window handle
+   */
+  return data->pin_mess_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_mess_destroy 
+ $Description:	Destroy the pin message dialog.
+ $Returns:		none
+ $Arguments:	win
+ 
+*******************************************************************************/
+void pin_mess_destroy  (T_MFW_HND own_window)
+{
+  T_pin_mess * data;
+  T_MFW_WIN * win;
+
+  if (own_window)
+  {
+	TRACE_FUNCTION("MmiPins:pin_mess_destroy ");
+
+	  win = ((T_MFW_HDR *)own_window)->data;
+	  data = (T_pin_mess *)win->user;
+
+	  if(data)
+	  {
+
+      /*
+       * Delete WIN Handler
+       */
+      
+		  pin_mess_windows = 0;
+	  win_delete (data->pin_mess_win);
+	      FREE_MEMORY((void *)data,(sizeof(T_pin_mess)));
+	  }
+   }
+}
+
+/*******************************************************************************
+
+ $Function:	pin_mess_win_cb 
+ $Description:	Callback function for message windows
+ $Returns:		Status int
+ $Arguments:	event, window
+ 
+*******************************************************************************/
+static int pin_mess_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  /*
+   * Top Window has no output
+   */
+  return 1;
+}
+
+
+
+
+/*******************************************************************************
+
+ $Function:	pin_messages
+ $Description:	Pin message Dialog Handling function
+ $Returns:		none
+ $Arguments:	window, event, value, parameter
+ 
+*******************************************************************************/
+void pin_messages(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+    T_pin_mess * mess_data = (T_pin_mess *)win_data->user;
+
+	T_DISPLAY_DATA display_info;
+
+//	T_MFW_SIM_PIN_STATUS status; //need to check the Pin 1 status  /* Warning Correction */
+	//EF_SIMLCK simlck;MC, not needed SPR 1351
+//	ULONG timcount = TIM_LOCK;   /* Warning Correction */
+//	UBYTE i;        /* Warning Correction */
+
+    T_pin * pin_data = (T_pin *)parameter;
+	T_sim_rem * sim_rem_data = (T_sim_rem *)parameter;// sim_rem_data possible too
+
+  TRACE_FUNCTION("Mmi.Pins:pin_messages");
+  TRACE_EVENT_P1("Event: %d", event);
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNull, TxtNull, COLOUR_STATUS_PINS);
+
+  /*
+   * depending on signal
+   */
+  switch (event)
+  {
+	case PIN1_REQ_ATT:
+	case PUK1_REQ_ACT_INFO:
+	case PUK1_REQ_VER_INFO:
+	case GSM_FAIL:
+    case NEW_PIN_FAIL:
+    case PIN_OK_INFO:
+    case PUK1_UNBL_FAIL_INFO:
+	case PUK1_UNBL_SUCC:
+	case PUK1_UNBL_FATAL_ERROR:
+	case SIM_UNLOCK_OK:
+#ifdef SIM_PERS
+	case SIM_LOCK_PERS_CHK_OK:
+	case SMLK_SHOW_FC_FAIL:
+	case SMLK_SHOW_FC_SUCC:
+	//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		    case SMLK_SHOW_MK_FAIL:		//Event to show a dialog saying "Master Unlock Failed"
+		    case SMLK_SHOW_MK_SUCC:		//Event to show a dialog saying "Master Unlock Success"
+		    case SIM_LOCK_BUSY_UNBLOCK: //wrong unblock code
+#endif		    
+  case PIN1_STATUS:
+
+
+	
+		switch(event)
+		{
+	       case PIN1_REQ_ATT:
+		      pin_data->pin_case = PIN1_REQ;
+		      display_info.TextId = TxtPINFail;
+	      display_info.TextId2 = 0;
+			  if(pin_data->pin_retries EQ 1)
+				display_info.TextId2 = TxtOneAttemptLeft;
+			  else
+				display_info.TextId2 = TxtTwoAttemptsLeft;
+			  break;
+  
+		case PUK1_REQ_ACT_INFO:		      
+			pin_data->pin_case = PUK1_REQ;
+#ifdef SIM_PERS 
+			if( C_KEY_REQ )
+				display_info.TextId = TxtPhoneBlocked;
+			else
+#endif /*SIM_PERS */
+		       	display_info.TextId = TxtSimBlocked;
+
+			display_info.TextId2 = 0;
+			display_info.TextString2 = 0;
+			break;
+
+		case PUK1_REQ_VER_INFO:
+		      pin_data->pin_case = PUK1_REQ;
+		      display_info.TextId =TxtPINBlock;
+			  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+			  break;
+		   case GSM_FAIL:
+			  display_info.TextId = TxtNotAcc;
+			  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+			  break;
+		   case PUK1_UNBL_FATAL_ERROR:
+			  pin_data->pin_case = PUK1_REQ;
+		      display_info.TextId = TxtNotAcc;
+			  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+			  break;
+	   case NEW_PIN_FAIL:
+		     pin_data->pin_case = INPUT_NEW_PIN;
+		     display_info.TextId = TxtNewPIN;
+		     display_info.TextId2 = TxtCodeInc;
+			 display_info.TextString2 = 0;
+			 break;
+		   case PIN_OK_INFO:
+		      pin_data->pin_case = PIN_OK;
+			  display_info.TextId = TxtPINOK;
+		  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+			  break;
+			case PUK1_UNBL_FAIL_INFO:
+			  pin_data->pin_case = PUK1_REQ;
+			  display_info.TextId = TxtCodeInc;
+	      display_info.TextId2 = TxtNull;
+			  display_info.TextString2 = 0;
+			  break;
+			case PUK1_UNBL_SUCC:
+			  pin_data->pin_case = PIN_OK;
+			  display_info.TextId = TxtNewPIN;
+		  display_info.TextId2 = TxtChanged;
+			  display_info.TextString2 = 0;
+			  break;
+			case SIM_UNLOCK_OK:
+			  pin_data->pin_case = PIN_OK;
+			  display_info.TextId = TxtUnlockOK;
+	      display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+			  break;
+#ifdef SIM_PERS
+			 case SIM_LOCK_PERS_CHK_OK:
+			  pin_data->pin_case = PIN_OK;
+			  display_info.TextId = TxtPhoneUnblocked;
+	      display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+			  break;
+
+			  case SMLK_SHOW_FC_FAIL:
+			  {
+				char buf1[20], buf2[20] ;
+				int curr_fail_reset, curr_succ_reset;
+				mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+//				if( curr_fail_reset )
+				  	pin_data->pin_case = SMLK_PUK;
+//				else
+//					pin_data->pin_case = PERM_BLK;
+				switch(mmi_simlock_aciErrDesc )
+				{
+					case CME_ERR_NetworkPersPinReq:
+					case CME_ERR_NetworkSubsetPersPinReq:
+					case CME_ERR_ProviderPersPinReq:
+					case CME_ERR_CorporatePersPinReq:
+					case CME_ERR_PhSimPinReq:
+						sprintf((char*)buf1,"%d attempts left",curr_succ_reset);
+						sprintf((char*)buf2,"%s", "FC Reset-Success");			
+						break;
+
+					default:
+						sprintf((char*)buf1,"%d attempts left",curr_fail_reset);
+						sprintf((char*)buf2,"%s", "FC Reset-Failure");								
+						break;
+				}
+				display_info.TextString= buf1;
+				display_info.TextString2 = buf2;
+				  break;
+			  }
+
+			 case SMLK_SHOW_FC_SUCC:
+			 {
+				char buf1[20], buf2[20] ;
+				int curr_fail_reset, curr_succ_reset;
+				mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+				//if( curr_succ_reset )
+				  	// leela: for simp: pin_data->pin_case = PIN_OK;
+				//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+				//Changed the event from PIN_OK to SMLK_PUK bcoz after unblocking ME, 
+				//for event PIN_OK it would go to idle screen without displaying menu for 
+				//unlocking any categories if any
+				  pin_data->pin_case = SMLK_PUK;
+				//else
+					//pin_data->pin_case = PERM_BLK;
+				sprintf((char*)buf1,"%d attempts left",curr_succ_reset);
+				sprintf((char*)buf2,"%s", "FC Reset-Success");								
+				display_info.TextString= buf1;
+				display_info.TextString2 = buf2;
+				  break;
+			 }
+
+			//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+			//Event to display a dialog saying Master Unblock Failed
+		    case SMLK_SHOW_MK_FAIL:
+		    	{		    		
+		    	  char buf[25];
+		    	  pin_data->pin_case = SMLK_MASTERKEY;
+			  sprintf((char*)buf,"%s", "Master Unlock Failed");
+			  display_info.TextString= buf;
+		  	  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+		    	}
+		    	break;
+
+			//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+			//Event to display a dialog saying Master Unblock Success		    	
+		    case SMLK_SHOW_MK_SUCC:		
+		    	{
+		    	  char buf[25];
+		    	  pin_data->pin_case = PIN_OK;
+			  sprintf((char*)buf,"%s", "Master Unlock Success");
+			  display_info.TextString= buf;
+		  	  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+		    	}
+		    	break;
+ 
+			//x0pleela 13 Nov, 2006 DR: OMAPS00103356
+			//Event to display a dialog saying Master Unblock Password is wrong
+		    case SMLK_SHOW_WRONG_PWD:
+		    	{		    		
+		    	  char buf[25];
+		    	  pin_data->pin_case = SMLK_MASTERKEY;
+			  sprintf((char*)buf,"%s", "Incorrect Password");
+			  display_info.TextString= buf;
+		  	  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+		    	}
+			
+			//x0pleela 13 Nov, 2006 DR: OMAPS00103356
+			//Event to display a dialog saying Master unlocking operation is successful
+		    case SMLK_SHOW_DEP_CATS_UNLOCKED:
+		    	{		    		
+		    	  char buf[25];
+		    	  pin_data->pin_case = SMLK_MASTERKEY;
+			  sprintf((char*)buf,"%s", "Master Unlock Success");
+			  display_info.TextString= buf;
+		  	  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+		    	}
+		    	break;
+ 
+			//x0pleela 26 July, 2006 ER: OMAPS00087586, OMAPS00087587
+			//Event to display a dialog saying Busy for wrong entry of unblocking password		    	
+			case SIM_LOCK_BUSY_UNBLOCK: //wrong unblock code	
+			{
+				pin_data->pin_case = SMLK_PUK;
+				display_info.TextId = TxtBusy;
+			}
+			break;
+#endif			  
+//nm insert new one
+			case PIN1_STATUS:
+			  pin_data->pin_case = PIN1_STATUS;
+
+			  if(pin_data->set_state EQ ENABLE)
+			  {
+				display_info.TextId = TxtEnabled;
+		      }
+			  else
+			  {
+				display_info.TextId = TxtDisabled;
+			  }
+
+		      display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+			  break;
+//NM
+	  
+		}
+
+		dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)pin_info_cb, THREE_SECS, 0 );
+		display_info.Identifier = pin_data->pin_case;
+		info_dialog(pin_data->pin_win,&display_info); //information screen
+		pin_mess_destroy(mess_data->pin_mess_win);
+#ifdef SIM_PERS		
+		//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		//Delete the simp_list window handler  after displaying the dialog
+		if(pin_data->simp_list_win)
+			win_delete(pin_data->simp_list_win);
+#endif
+		break;
+	case SIM_LOCK_ERR:
+		display_info.TextId = TxtCodeInc;
+		display_info.TextId2 = TxtPleaseWait;
+		display_info.Identifier = pin_data->pin_case;//last pin_case
+
+		dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)pin_info_cb, 5*TIM_LOCK_JUMP, 0 );
+		pin_mess_destroy(mess_data->pin_mess_win);
+		info_dialog(pin_data->pin_win,&display_info); //information screen
+		break;
+
+	case SIM_REMOVED:
+		pin_data->display_id1 = TxtNoCard;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(sim_rem_data->sim_rem_win,TXT_INSERT_CARD,0,pin_data);
+		break;
+	case INVALID_CARD:
+		pin_data->display_id1 = TxtInvalidCard;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_INVALID_CARD,0,pin_data);
+		break;
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS			
+//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+	case NO_MEPD:
+		pin_data->display_id1 = TxtNoMEPD;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_NO_MEPD,0,pin_data);
+		break;		
+#endif		
+	case NO_SIM_CARD:
+		pin_data->display_id1 = TxtNoCard;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_NO_CARD,0,pin_data);
+		break;
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+	case INVALID_IMEI:
+		pin_data->display_id1 = TxtInvalidIMEI;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_INVALID_IMEI,0,pin_data);
+		break;
+	case SIM_LOCK_ALL:
+		pin_data->display_id1 = TxtBlckPerm;
+		pin_data->display_id2 = TxtDealer;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_SIM_LOCK_ALL,0,pin_data);
+		break;
+	case SIM_PLOCK_REQ:
+		pin_data->display_id1 = TxtEnterPCK;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_SIM_PLOCK,0,pin_data);
+		break;
+	case SIM_NLOCK_REQ:
+		pin_data->display_id1 = TxtEnterNCK;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_SIM_NLOCK,0,pin_data);
+		break;
+	case SIM_CLOCK_REQ:
+		pin_data->display_id1 = TxtEnterCCK;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_SIM_CLOCK,0,pin_data);
+		break;
+	case SIM_NSLOCK_REQ:
+		pin_data->display_id1 = TxtEnterNSCK;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_SIM_NSLOCK,0,pin_data);
+		break;
+	case SIM_SPLOCK_REQ:
+		pin_data->display_id1 = TxtEnterSPCK;
+		pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_SIM_SPLOCK,0,pin_data);
+		break;
+	default:
+		break;
+  }
+}
+
+
+#ifndef NEW_EDITOR
+/*******************************************************************************
+
+ $Function:	pin_icons 
+ $Description:	display back from pins
+ $Returns:		none
+ $Arguments:	none
+ 
+*******************************************************************************/
+static void pin_icons(void)
+{
+
+	TRACE_FUNCTION("pin_icons");
+
+
+	// clear the softkeys
+	TRACE_FUNCTION("clear softkey 8");
+	pin_skClear();
+
+	TRACE_FUNCTION("dsplClearAll 6");
+	dspl_ClearAll();
+
+	GlobalIconStatus = GlobalSignalIconFlag | GlobalBatteryIconFlag |
+		       GlobalVoiceMailIconFlag 
+		      | GlobalCallForwardingIconFlag| GlobalKeyplockIconFlag
+					  | GlobalRingerIconFlag | GlobalRingVibrIconFlag
+					  | GlobalVibratorIconFlag | GlobalAlarmIconFlag
+					  | GlobalSilentRingerIconFlag
+			#ifdef FF_MMI_CPHS
+					  | GlobalRoamingIndFlag
+			#endif
+
+/* x0045876, 14-Aug-2006 (WR - nested comment is not allowed) */
+/* SH 18/01/02. Flag for GPRS icon. */
+			
+/* SH 18/01/02. Flag for GPRS icon.
+   Note: SPR877 - Homezone icon not displayed in PIN screen. */
+				#ifdef MMI_GPRS_ENABLED
+					  | GlobalGPRSOnIconFlag
+				#endif
+				;
+	iconsShow();		/* representation of the desired icons */
+}
+
+#endif
+
+/*******************************************************************************
+
+ $Function:	clearEditArray 
+ $Description:	clear EditArray
+ $Returns:		none
+ $Arguments:	pin editor attributes
+*******************************************************************************/
+static void clear_edit_array (void * parameter)
+{
+//	U8 i;     /* Warning Correction */
+	T_pin_edt * edt_data = (T_pin_edt *)parameter;
+
+	TRACE_FUNCTION("MmiPins:clearEditArray");
+
+	/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+	memset(edt_data->edtbuf,'\0',sizeof(edt_data->edtbuf));
+	ATB_edit_Reset(edt_data->editor);
+	ATB_edit_Unhide(edt_data->editor);
+#else /* NEW_EDITOR */
+	memset(edt_data->edtbuf,'\0',sizeof(edt_data->edtbuf));
+	edtReset(edt_data->editor_handle);
+	edtUnhide(edt_data->editor_handle);
+#endif
+
+}
+
+
+/*******************************************************************************
+
+ $Function:	pinsIsFocussed
+ $Description:	check MmiPins windows focussed
+ $Returns:		Status int
+ $Arguments:	none
+*******************************************************************************/
+
+int pinsIsFocussed(void)
+{
+	int status;
+
+	if (winIsFocussed(pin_windows) || winIsFocussed(pin_edit_windows) ||
+		winIsFocussed(pin_editor_window) ||winIsFocussed(pin_mess_windows))
+		status = FOCUSSED_PINS;
+	else
+		status = NOT_FOCUSSED_PINS;
+
+	return status;
+}
+
+
+/*******************************************************************************
+
+ $Function:	pinsSetIsFocussed
+ $Description:	check MmiPins in settings windows focussed
+ $Returns:		Status int
+ $Arguments:	none
+*******************************************************************************/
+int pinsSetIsFocussed(void)
+{
+	int status;
+
+	if (winIsFocussed(set_pin_windows))
+		status = FOCUSSED_PINS;
+	else
+		status = NOT_FOCUSSED_PINS;
+
+	return status;
+}
+
+
+/*******************************************************************************
+
+ $Function:	emerg_pin
+ $Description:	emergency call
+ $Returns:		none
+ $Arguments:	pin editor attributes
+*******************************************************************************/
+static void emerg_pin(void * string)
+{
+	T_pin_edt * edt_data = (T_pin_edt *)string;
+
+	edt_data->emergency_call = FALSE;
+	clear_edit_array(edt_data);	      /*   clear editor array	*/
+	callNumber((UBYTE*)edt_data->pin);	   /* emergency call	*/
+	memset(edt_data->pin, '\0', sizeof(edt_data->pin));/*initial string*/
+	edt_data->editor_index = 0;
+TRACE_FUNCTION("clear softkey 9"); 
+	pin_skClear();
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	pin_info_cb
+ $Description:	pin information screen call back
+ $Returns:		none
+ $Arguments:	win, identifier, reason for callback (not used)
+*******************************************************************************/
+int pin_info_cb(T_MFW_HND win, USHORT identifier, UBYTE reasons)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user;
+
+    TRACE_EVENT_P1 ("pin_info_cb() %d", identifier);
+
+	switch(identifier)
+	{
+		case PIN_OK:
+		{
+#ifdef SIM_PERS
+			int curr_fail_reset1, curr_succ_reset1;
+#endif
+			TRACE_FUNCTION("pin_info_cb: PIN_OK");
+
+#ifdef SIM_PERS
+			mfw_simlock_check_status(0, &curr_fail_reset1, &curr_succ_reset1);
+
+			if (curr_succ_reset1 == 0)
+			{
+				perm_blocked =1;
+				SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+			}		
+			else
+#endif
+				SEND_EVENT(pin_data->pin_win,PIN_OK_END,0,NULL);//PIN was needed
+		}
+			break;
+	
+		case PIN1_REQ:
+		//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		//case PUK1_REQ:		//Handling PUK1_REQ separately as a menu should be displayed for Unblocking ME and Master Unlock
+		case INPUT_NEW_PIN:
+			
+			SEND_EVENT(pin_data->pin_win,identifier,0,NULL);//pin_main data !!
+			break;
+
+
+			case PUK1_REQ:
+#ifdef SIM_PERS
+				//x0pleela 26 Sep, 2006 DR: OMAPS00096565
+				//Adding a check for C_KEY_REQ. If set, displaySIMP menu
+				//Else prompt the user for PUK entry
+				if( C_KEY_REQ ) 
+				{
+				//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+				//Handling PUK1_REQ separately as a menu should be displayed for Unblocking ME and Master Unlock
+				  if( simlock_get_masterkey_status())
+				  {
+				  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+				  }
+				}
+				  else
+#endif
+			  SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,NULL);//pin_main data !!
+			break;
+#ifdef SIM_PERS
+		//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		//Handling SMLK_MASTERKEYto display menu for Unblocking ME or unlocking categories if any and Master Unlock
+		case SMLK_MASTERKEY:
+			//x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+			//check for CME class and handle all CME errors
+			if( ((mmi_simlock_aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Cme) 	
+			{
+			switch(mmi_simlock_aciErrDesc & 0x0000FFFF)
+			{
+				case CME_ERR_NetworkPersPinReq:
+					TRACE_EVENT("CME_ERR_NetworkPersPinReq");
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_NLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+							SEND_EVENT(pin_data->pin_win,INPUT_NLOCK_PIN_REQ,0,pin_data);
+						break;
+						
+					case CME_ERR_NetworkSubsetPersPinReq:
+						TRACE_EVENT("CME_ERR_NetworkSubsetPersPinReq");
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_NSLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+							SEND_EVENT(pin_data->pin_win,INPUT_NSLOCK_PIN_REQ,0,pin_data);
+						break;
+						
+					case CME_ERR_ProviderPersPinReq:
+						TRACE_EVENT("CME_ERR_ProviderPersPinReq");
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_SPLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+							SEND_EVENT(pin_data->pin_win,INPUT_SPLOCK_PIN_REQ,0,pin_data);
+						break;
+						
+					case CME_ERR_CorporatePersPinReq:
+						TRACE_EVENT("CME_ERR_CorporatePersPinReq");
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_CLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+							SEND_EVENT(pin_data->pin_win,INPUT_CLOCK_PIN_REQ,0,pin_data);
+						break;
+						
+					case CME_ERR_PhSimPinReq:
+						TRACE_EVENT("CME_ERR_PhSimPinReq");
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_PLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+							SEND_EVENT(pin_data->pin_win,INPUT_SIM_PIN_REQ,0,pin_data);
+						break;
+
+					case CME_ERR_PhoneFail:
+					case CME_ERR_NetworkPersPukReq:
+					case CME_ERR_NetworkSubsetPersPukReq:
+					case CME_ERR_ProviderPersPukReq:
+					case CME_ERR_CorporatePersPukReq:
+					case CME_ERR_WrongPasswd:
+				
+						TRACE_FUNCTION("PUK Req");
+						C_KEY_REQ = 1;
+						  if( simlock_get_masterkey_status())
+						  {
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						{							
+							SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+						}
+						break;	
+						
+					default:
+						TRACE_EVENT("Undefined error");
+						break;
+		    			}
+				}
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+				//check for Ext class and handle all Extension errors
+				else if( ((mmi_simlock_aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext)
+				{
+					switch(mmi_simlock_aciErrDesc & 0x0000FFFF)
+					{
+						//Request for Blocked Network Password
+						case EXT_ERR_BlockedNetworkPersPinReq:
+							TRACE_EVENT("EXT_ERR_BlockedNetworkPersPinReq");
+							  if( simlock_get_masterkey_status())
+							  {
+							  	mmi_simlock_locktype = MFW_SIM_PBLOCK;
+							  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+							  }
+							  else
+								SEND_EVENT(pin_data->pin_win,INPUT_PBLOCK_PIN_REQ,0,pin_data);
+						break;
+
+						//Request for Blocked Network Unblock code 
+						case EXT_ERR_BlockedNetworkPersPukReq:
+							TRACE_EVENT("PUK Req");
+							C_KEY_REQ = 1;
+							  if( simlock_get_masterkey_status())
+							  {
+							  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+							  }
+							  else
+							{							
+								SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+							}
+						break;	
+
+						default:
+							break;
+					}
+				}
+				break;
+
+		case SMLK_PUK:
+		{
+			int status1,curr_fail_reset1, curr_succ_reset1;
+
+			status1 = mfw_simlock_check_status(0, &curr_fail_reset1, &curr_succ_reset1);
+
+			if (status1 == MFW_SIM_PERM_BLOCKED)
+			{
+				perm_blocked =1;
+				SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+			}
+			else
+			{
+				//x0pleela 11 Sep, 2006  DR: OMASP00094215
+				//checking for Class type and the ext busy error
+				if( ( ((mmi_simlock_aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+					(mmi_simlock_aciErrDesc & 0x0000FFFF) EQ EXT_ERR_Busy)
+				{
+					C_KEY_REQ = 1;
+						  if( simlock_get_masterkey_status())
+						  {
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						{							
+							SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+						}
+				}
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+    				//check for Cme class and handle all CME errors
+				else if( ((mmi_simlock_aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Cme)
+				{
+				//end of x0pleela 11 Sep, 2006  DR: OMASP00094215
+			   	switch(mmi_simlock_aciErrDesc & 0x0000FFFF)
+				{
+					case CME_ERR_NetworkPersPinReq:
+						TRACE_EVENT("CME_ERR_NetworkPersPinReq");
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//Displays menu for Unblocking ME or unlocking categories if any and Master Unlock
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_NLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						    SEND_EVENT(pin_data->pin_win,INPUT_NLOCK_PIN_REQ,0,pin_data);
+						break;
+						
+					case CME_ERR_NetworkSubsetPersPinReq:
+						TRACE_EVENT("CME_ERR_NetworkSubsetPersPinReq");
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//Displays menu for Unblocking ME or unlocking categories if any and Master Unlock
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_NSLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						    SEND_EVENT(pin_data->pin_win,INPUT_NSLOCK_PIN_REQ,0,pin_data);
+						break;
+						
+					case CME_ERR_ProviderPersPinReq:
+						TRACE_EVENT("CME_ERR_ProviderPersPinReq");
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//Displays menu for Unblocking ME or unlocking categories if any and Master Unlock
+					       if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_SPLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						    SEND_EVENT(pin_data->pin_win,INPUT_SPLOCK_PIN_REQ,0,pin_data);
+						break;
+						
+					case CME_ERR_CorporatePersPinReq:
+						TRACE_EVENT("CME_ERR_CorporatePersPinReq");
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//Displays menu for Unblocking ME or unlocking categories if any and Master Unlock				  
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_CLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						SEND_EVENT(pin_data->pin_win,INPUT_CLOCK_PIN_REQ,0,pin_data);
+						break;
+						
+					case CME_ERR_PhSimPinReq:
+						TRACE_EVENT("CME_ERR_PhSimPinReq");
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//Displays menu for Unblocking ME or unlocking categories if any and Master Unlock					  
+						  if( simlock_get_masterkey_status())
+						  {
+						  	mmi_simlock_locktype = MFW_SIM_PLOCK;
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+						SEND_EVENT(pin_data->pin_win,INPUT_SIM_PIN_REQ,0,pin_data);
+						break;
+
+					case CME_ERR_PhoneFail:
+					case CME_ERR_NetworkPersPukReq:
+					case CME_ERR_NetworkSubsetPersPukReq:
+					case CME_ERR_ProviderPersPukReq:
+					case CME_ERR_CorporatePersPukReq:
+					case CME_ERR_WrongPasswd:
+									
+							TRACE_FUNCTION("PUK Req");
+						C_KEY_REQ = 1;
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//Displays menu for Unblocking ME or unlocking categories if any and Master Unlock
+						  if( simlock_get_masterkey_status())
+						  {
+						  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+						  }
+						  else
+								SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+						break;	
+						
+					default:
+						TRACE_EVENT("Undefined error");
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						//If no CME error, which implies none of the categories are locked
+						//so send PIN_OK_END event for camping on to the network
+						SEND_EVENT(pin_data->pin_win,PIN_OK_END,0,NULL);//PIN was needed
+						break;
+		    			}
+				//x0pleela 11 Sep, 2006  DR: OMASP00094215
+				}
+				//end of x0pleela 11 Sep, 2006  DR: OMASP00094215
+
+				    //x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+				    //check for Ext class and handle all Extension errors
+				else if( ((mmi_simlock_aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext)
+				{
+					switch(mmi_simlock_aciErrDesc & 0x0000FFFF)
+					{
+						//Request for Blocked Network Password
+						case EXT_ERR_BlockedNetworkPersPinReq:
+							TRACE_EVENT("EXT_ERR_BlockedNetworkPersPinReq");
+							//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+							//Displays menu for Unblocking ME or unlocking categories if any and Master Unlock
+							if( simlock_get_masterkey_status())
+							{
+								mmi_simlock_locktype = MFW_SIM_PBLOCK;
+								pin_data->simp_list_win = mmi_simlock_category_menus(win);
+							}
+							else
+								SEND_EVENT(pin_data->pin_win,INPUT_PBLOCK_PIN_REQ,0,pin_data);
+							break;
+
+						//Request for Blocked Network Unblock code 
+						case EXT_ERR_BlockedNetworkPersPukReq:
+							TRACE_EVENT("PUK Req");
+							C_KEY_REQ = 1;
+							//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+							//Displays menu for Unblocking ME or unlocking categories if any and Master Unlock
+							if( simlock_get_masterkey_status())
+							{
+								pin_data->simp_list_win = mmi_simlock_category_menus(win);
+							}
+							else
+							{							
+								SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+							}
+							break;	
+
+						default:
+							break;
+					}
+				}
+			}
+		}
+		break;
+#endif
+
+		case INPUT_PIN1:
+			SEND_EVENT(pin_data->pin_win,PIN1_REQ,0,NULL);//pin_main data !!
+			break;
+		case INPUT_PUK1:
+			TRACE_FUNCTION("INPUT_PUK1");
+			SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,NULL);//pin_main data !!
+			break;
+		/*mc SPR 1351, check if simlocks blocked before requesting them again*/
+		case SIM_PLOCK:
+			if (sim_check_sim_Plock() != MFW_SIM_BLOCKED)
+				SEND_EVENT(pin_data->pin_win,SIM_PLOCK_REQ,0,NULL);//pin_main data !!
+			else
+			{	ShowMessage(idle_get_window(), TxtBlckPerm, TxtDealer);
+				pin_destroy(pin_data->pin_win);
+			}
+			break;
+		case SIM_NLOCK:
+			if (sim_check_sim_Nlock() != MFW_SIM_BLOCKED)
+				SEND_EVENT(pin_data->pin_win,SIM_NLOCK_REQ,0,NULL);//pin_main data !!
+			else
+			{	ShowMessage(idle_get_window(), TxtBlckPerm, TxtDealer);
+				pin_destroy(pin_data->pin_win);
+			}
+			break;
+		case SIM_SPLOCK:
+			if (sim_check_sim_SPlock() != MFW_SIM_BLOCKED)
+				SEND_EVENT(pin_data->pin_win,SIM_SPLOCK_REQ,0,NULL);//pin_main data !!
+			else
+			{	ShowMessage(idle_get_window(), TxtBlckPerm, TxtDealer);
+				pin_destroy(pin_data->pin_win);
+			}
+			break;
+		case SIM_NSLOCK:
+			if (sim_check_sim_NSlock() != MFW_SIM_BLOCKED)
+				SEND_EVENT(pin_data->pin_win,SIM_NSLOCK_REQ,0,NULL);//pin_main data !!
+			else
+			{	ShowMessage(idle_get_window(), TxtBlckPerm, TxtDealer);
+				pin_destroy(pin_data->pin_win);
+			}
+		    break;
+		case SIM_CLOCK:
+			if (sim_check_sim_Clock() != MFW_SIM_BLOCKED)
+				SEND_EVENT(pin_data->pin_win,SIM_CLOCK_REQ,0,NULL);//pin_main data !!
+			else
+			{	ShowMessage(idle_get_window(), TxtBlckPerm, TxtDealer);
+				pin_destroy(pin_data->pin_win);
+			}
+			break;
+			/*MC end*/
+		case PIN1_STATUS:
+				SEND_EVENT(pin_data->pin_win,PIN1_STATUS_END,0,NULL);//pin_main data !!
+			break;
+		default:
+			break;
+	}
+	return 1;
+}
+
+/*******************************************************************************
+
+ $Function:	sim_rem_init
+ $Description:	This is the start-up time initialisation routine.
+		For compatibility reasons the functions is still there.
+ $Returns:		none
+ $Arguments:	parent window
+*******************************************************************************/
+void sim_rem_init (T_MFW_HND parent_window)
+{
+  sim_rem_create (parent_window);
+}
+
+
+
+
+/*******************************************************************************
+
+ $Function:	sim_rem_exit
+ $Description:	his is the shutdown time clean-up routine.
+ $Returns:		none
+ $Arguments:	parent window
+*******************************************************************************/
+void sim_rem_exit(T_MFW_HND parentWindow)
+{
+  sim_rem_destroy (sim_rem_data.sim_rem_win);
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	sim_rem_create 
+ $Description:	Creation of an instance for the SIM remove dialog.
+				Type of dialog : SINGLE_STATIC
+				Top Window must be available at any time, only one instance.
+ $Returns:		window
+ $Arguments:	parent window
+*******************************************************************************/
+T_MFW_HND sim_rem_create (T_MFW_HND parent_window)
+{
+
+  T_sim_rem * data = &sim_rem_data;
+  T_MFW_WIN  * win;
+
+  data->sim_rem_win = win_create (parent_window, 0,	MfwWinVisible, (T_MFW_CB)sim_rem_win_cb);
+
+  if (data->sim_rem_win EQ 0)
+    return 0;
+  else
+  {
+	  /*
+	   * Create window handler
+	   */
+	  data->mmi_control.dialog    = (T_DIALOG_FUNC)sim_rem_main;
+	  data->mmi_control.data      = data;
+	  data->parent_win = parent_window;
+	  win			      = ((T_MFW_HDR *)data->sim_rem_win)->data;
+	  win->user		      = (void *) data;
+
+	  /*
+	   * Create any other handler
+	   */
+
+	  data->sim_handle = sim_create(0,E_SIM_ALL_SERVICES,(MfwCb)sim_rem_cb_main);
+	  winShow(data->sim_rem_win);
+	  /*
+	   * return window handle
+	   */
+	  return data->sim_rem_win;
+  }
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	sim_rem_destroy 
+ $Description:	Destroy the sim remove dialog.
+ $Returns:		none
+ $Arguments:	window
+*******************************************************************************/
+void sim_rem_destroy (T_MFW_HND own_window)
+{
+  T_sim_rem  * data;
+  T_MFW_WIN * win;
+
+  if (own_window)
+  {
+	 win = ((T_MFW_HDR *)own_window)->data;
+     data = (T_sim_rem *)win->user;
+
+	 if(data)
+	 {
+      /*
+       * Exit SIM and Delete SIM Handler
+       */
+       sim_delete (data->sim_handle);
+
+      /*
+       * Delete WIN Handler
+       */
+      win_delete (data->sim_rem_win);
+	 }
+  }
+}
+
+
+/*******************************************************************************
+
+ $Function:	sim_rem_win_cb	
+ $Description:	Callback function for windows
+ $Returns:		Status int
+ $Arguments:	event, window
+*******************************************************************************/
+static int sim_rem_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  if (event EQ MfwWinVisible)
+  {
+    /*
+     * Top Window has no output
+     */
+	TRACE_FUNCTION("dsplClearAll 7");	   
+    dspl_ClearAll();
+	return 1;
+  }
+  return 0;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	sim_rem_cb_main 
+ $Description:	SIM remove handler
+ $Returns:		Status int
+ $Arguments:	event, sim status
+*******************************************************************************/
+int sim_rem_cb_main (T_MFW_EVENT event, T_MFW_HND para)
+{
+
+	T_MFW_SIM_STATUS * status;
+
+	T_MFW_HND sim_rem_win;
+
+    status = (T_MFW_SIM_STATUS *)para;
+	TRACE_FUNCTION("MmiPins:sim_rem_cb_main");
+
+    switch(event)
+	{
+	    case E_SIM_STATUS:
+		  /*
+		   * check whether decoded message is available
+		   */
+			if( para EQ (T_MFW_SIM_STATUS *)NULL )
+				return MFW_RES_ILL_HND;
+
+			status = (T_MFW_SIM_STATUS *)para;
+			 switch (status->sim_procedure)
+			 {
+				case MFW_SIM_REMOVED:
+					switch (status->sim_status)
+					{
+				/*
+				 *  SIM card is removed
+				 */
+						case MFW_SIM_NO_SIM_CARD:
+							TRACE_FUNCTION("sim_rem_cb_main:SIM removed");
+							sim_rem_win = sim_rem_create(0);
+							if(sim_rem_win)
+							{
+								SEND_EVENT(sim_rem_win,SIM_REMOVED,0,NULL);
+							}
+				/*
+				 * limited shall be the requested service
+				 * if no service is reached, the limited
+				 * service is requested*/
+						nm_registration (NM_AUTOMATIC, 0, TRUE);
+							break;
+						default:
+							return 0;
+					}
+				break;
+				default:
+					return 0;
+			 }
+		 return 1;
+	}
+	
+	/* x0045876, 14-Aug-2006 (WR - missing return statement at end of non-void function ) */
+	return 0;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	sim_rem_main 
+ $Description:	SIM remove main Dialog Handling function
+ $Returns:		None
+ $Arguments:	window, event, value, parameter
+*******************************************************************************/
+static void sim_rem_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_sim_rem * sim_rem_data = (T_sim_rem *)win_data->user;//sim remove main data
+//	T_pin_mess * mess_data = (T_pin_mess *) parameter;//pin message data  /* Warning Correction */
+
+	T_MFW_HND pin_mess_win;
+	T_MFW_HND pin_edt_win;
+
+	TRACE_FUNCTION("MmiPins:sim_rem_main");
+
+  switch(event)
+  {
+	  case SIM_REMOVED:					      //Text "Insert Card "
+		   pin_mess_win = pin_mess_create(sim_rem_data->sim_rem_win);
+		   if(pin_mess_win)
+		   {
+				SEND_EVENT(pin_mess_win,event,0,sim_rem_data);
+		   }
+		   break;
+      case TXT_INSERT_CARD:
+			sim_rem_data->pin_case = INSERT_CARD;
+		    pin_edt_win = pin_edt_create(sim_rem_data->sim_rem_win);// Start: enter only emerg call
+			if(pin_edt_win)
+			{
+			    SEND_EVENT(pin_edt_win,INSERT_CARD,0,sim_rem_data);
+			}
+			break;
+	  default:
+		  break;
+  }
+
+}
+
+
+
+
+/*******************************************************************************
+
+ $Function:	setting_pin_init 
+ $Description:	This is the start-up time initialisation routine.
+		Start in the Menu
+ $Returns:		None
+ $Arguments:	parent window
+*******************************************************************************/
+void setting_pin_init (T_MFW_HND parent_window)
+{
+  setting_pin_create (parent_window);
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	setting_pin_create
+ $Description:	Creation of an instance for the Settings PIN main dialog.
+				Type of dialog : SINGLE_DYNAMIC
+				Top Window must be available at any time, only one instance.
+ $Returns:		window
+ $Arguments:	parent window
+*******************************************************************************/
+T_MFW_HND setting_pin_create (T_MFW_HND parent_window)
+{
+
+  T_pin * data = (T_pin *)ALLOC_MEMORY (sizeof (T_pin));
+  T_MFW_WIN	* win;
+
+  data->pin_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)setting_pin_win_cb);
+
+  TRACE_FUNCTION("MmiPins:setting_pin_create");
+
+  set_pin_windows = data->pin_win;
+
+  if (data->pin_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)setting_pin_main;
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_win)->data;
+  win->user		      = (void *) data;
+
+  /*
+   * Create any other handler
+   */
+
+  data->sim_handle = sim_create(data->pin_win,E_SIM_ALL_SERVICES,(MfwCb)sim_event_cb_setting);
+
+  /*
+   * Initialise
+   */
+ data->set_state = DEFAULT;
+ data->puk_request = FALSE;
+
+
+  mfwSetSignallingMethod(1);//mfw focus handling
+  winShow(data->pin_win);//focus on settings:PIN/PIN2 Change/act/Deac
+
+
+  /*
+   * return window handle
+   */
+  return data->pin_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:	setting_pin_destroy 
+ $Description:	Destroy the settings pin main dialog.
+ $Returns:		none
+ $Arguments:	window
+*******************************************************************************/
+void setting_pin_destroy  (T_MFW_HND own_window)
+{
+  T_pin * data;
+  T_MFW_WIN * win;
+
+  if (own_window)
+  {
+	 TRACE_FUNCTION("MmiPins:setting_pin_destroy");
+
+	 win = ((T_MFW_HDR *)own_window)->data;
+     data = (T_pin *)win->user;
+
+	 if(data)
+	 {
+      /*
+       * Exit SIM and Delete SIM Handler
+       */
+	 sim_delete (data->sim_handle);
+
+      /*
+       * Delete WIN Handler
+       */
+	  set_pin_windows = 0;
+      win_delete (data->pin_win);
+      data->pin_win=0;
+	if(data)
+	 FREE_MEMORY((void *)data,(sizeof(T_pin)));
+	 }
+  }
+}
+
+
+/*******************************************************************************
+
+ $Function:	setting_pin_win_cb 
+ $Description:	Callback function for main windows in settings
+ $Returns:		Status int
+ $Arguments:	event, window
+*******************************************************************************/
+static int setting_pin_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  TRACE_FUNCTION("setting_pin_win_cb");
+  if (event EQ MfwWinVisible)
+  {
+    /*
+     * Top Window has no output
+     */
+	/* NDH : Removed to prevent Blue Screen on Pin Entry */
+	return 1;
+  }
+  return 0;
+
+}
+
+
+/*******************************************************************************
+
+ $Function:	sim_event_cb_setting 
+ $Description:	SIM event handler for Setttings Pins
+ $Returns:		Status int
+ $Arguments:	event, sim status
+*******************************************************************************/
+int sim_event_cb_setting (T_MFW_EVENT event, T_MFW_HND para)
+{
+
+	T_MFW_SIM_STATUS * status;
+
+    T_MFW_HND win = mfw_parent(mfw_header());
+
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user;
+
+	status = (T_MFW_SIM_STATUS *)para;
+
+	TRACE_FUNCTION("Sim Event Handler of Settings Pin"); 
+ switch(event)
+ {
+	case E_SIM_INSERTED://handle in sim_rem_cb_main
+	    return 0;
+	case E_SIM_STATUS:
+	  /*
+	   * check whether decoded message is available
+	   */
+		if( para EQ (T_MFW_SIM_STATUS *)NULL )
+		   return MFW_RES_ILL_HND;
+
+		status = (T_MFW_SIM_STATUS *)para;
+		 switch (status->sim_procedure)
+		 {
+		/*
+		 * Initial activation of the SIM card
+		 */
+			case MFW_SIM_VERIFY:
+			//xrashmic 1 Jul, 2006 OMAPS00075784
+			//When pin is blocked, the user is immediatly prompted with puk 
+			// entry screen or else the blue screen is displayed
+			case MFW_SIM_ACTIVATION:
+		  /*
+		   * check the result of verify
+		   */
+			  switch (status->sim_status)
+			  {
+			/*
+			 * PIN 1 must be entered
+			 */
+					case MFW_SIM_PIN_REQ:
+					if(status->sim_pin_retries < PIN_ENTRY_MAX)
+					{
+							TRACE_FUNCTION("sim_event_cb_settings V:PIN1 req-retr");
+							pin_data->pin_retries = status->sim_pin_retries;
+							SEND_EVENT(pin_data->pin_win,PIN1_REQ_ATT,0,pin_data);
+					}
+					else
+					{
+							TRACE_FUNCTION("sim_event_cb_setting V:PIN1 req");
+							SEND_EVENT(pin_data->pin_win,PIN1_REQ_OLD,0,pin_data);
+					}
+					break;
+			/*
+			 * PIN 2 must be entered
+			 */
+					case MFW_SIM_PIN2_REQ:
+					if(status->sim_pin_retries < PIN_ENTRY_MAX)
+					{
+							TRACE_FUNCTION("sim_event_cb_settings V:PIN2 req-retr");
+							pin_data->pin_retries = status->sim_pin_retries;
+							SEND_EVENT(pin_data->pin_win,PIN2_REQ_ATT,0,pin_data);
+					}
+					else
+					{
+							TRACE_FUNCTION("sim_event_cb_setting V:PIN2 req");
+							SEND_EVENT(pin_data->pin_win,PIN2_REQ,0,pin_data);
+					}
+					break;
+			/*
+			 * SIM card is blocked, PUK 1 is needed
+			 */
+					case MFW_SIM_PUK_REQ:
+						pin_data->puk_request = TRUE;
+						TRACE_FUNCTION("sim_event_cb_setting V:PUK1 req");
+						SEND_EVENT(pin_data->pin_win,PUK1_REQ_VER_INFO,0,pin_data);
+						break;
+			/*
+			 * SIM card is blocked, PUK 2 is needed
+			 */
+					case MFW_SIM_PUK2_REQ:
+						pin_data->puk_request = TRUE;
+						TRACE_FUNCTION("sim_event_cb_setting V:PUK2 req");
+						SEND_EVENT(pin_data->pin_win,PUK1_REQ_VER_INFO,0,pin_data);
+						break;
+
+			/*
+			 * PIN entering successfull
+			 */
+					case MFW_SIM_NO_PIN:
+						TRACE_FUNCTION("sim_event_cb_setting V:PIN ok ");
+						pin_data->pin_case = PIN_OK_INFO;
+						SEND_EVENT(pin_data->pin_win,PIN_OK_INFO,0,pin_data);
+						break;
+
+                    /* Marcus: Issue 1609: 23/01/2003: Start */
+                    case MFW_SIM_FAILURE:
+                        /* An attempt to verify a PIN has failed */
+                        if (status->sim_status_type == MFW_SIM_PIN2)
+                        {
+                            /* PIN2 verification not supported by this SIM */
+                            SEND_EVENT(pin_data->pin_win,PIN2_SIM_FAILURE,0,pin_data);
+                        }
+                        else /* Not verifying PIN2, presumably verifying PIN1 */
+                            return 0;
+                        break;
+                    /* Marcus: Issue 1609: 23/01/2003: End */
+                    
+					default:
+						return 0;
+			  }
+			break;
+			/*
+			 * response to PUK entering
+			 */
+			case MFW_SIM_UNBLOCK:
+			  switch (status->sim_status)
+			  {
+				case MFW_SIM_PUK_REQ:
+					TRACE_FUNCTION("sim_event_cb_setting:unblock failure");
+					SEND_EVENT(pin_data->pin_win,PUK1_UNBL_FAIL_INFO,0,pin_data);
+					break;
+				case MFW_SIM_PUK2_REQ:
+					TRACE_FUNCTION("sim_event_cb_setting:unblock failure");
+					SEND_EVENT(pin_data->pin_win,PUK1_UNBL_FAIL_INFO,0,pin_data);
+					break;
+				case MFW_SIM_SUCCESS:
+					TRACE_FUNCTION("sim_event_cb_setting:unblock success");
+					SEND_EVENT(pin_data->pin_win,PUK1_UNBL_SUCC,0,pin_data);
+					break;
+				case MFW_SIM_FAILURE:
+					TRACE_FUNCTION("sim_event_cb_setting:unblock fatal error");
+					SEND_EVENT(pin_data->pin_win,PUK1_UNBL_FATAL_ERROR,0,pin_data);
+					break;				
+				case MFW_SIM_INVALID_CARD:
+					TRACE_FUNCTION("sim_event_cb_main:unblock failed, no more retries");
+					SEND_EVENT(pin_data->pin_win,INVALID_CARD,0,pin_data);
+					break;
+				default:
+					return 0;
+			  }
+			break;
+
+			case MFW_SIM_REMOVED:
+				return 0;/* there not handled  */
+			case MFW_SIM_CHANGE:
+			 switch (status->sim_status)
+			 {
+				case MFW_SIM_SUCCESS:
+					TRACE_FUNCTION("sim_event_cb_setting: succ/CH");
+					if(pin_data->set_state EQ IDLE_GSM)
+					{
+						SEND_EVENT(pin_data->pin_win,PIN1_CH_SUCC,0,pin_data);/* change PIN by	gsm string in idle */
+					}
+					else if(pin_data->pin_case EQ INPUT_NEW_PIN_AGAIN OR (status->sim_status_type EQ MFW_SIM_PIN1))
+					{
+						SEND_EVENT(pin_data->pin_win,PIN1_CH_SUCC,0,pin_data);/* change PIN, also by gsm string */
+					}
+					else
+					{
+						SEND_EVENT(pin_data->pin_win,PIN2_CH_SUCC,0,pin_data);/* change PIN2, also by gsm string */
+					}
+					break;
+				case MFW_SIM_FAILURE:
+					TRACE_FUNCTION("sim_event_cb_setting: fail/CH");
+					if(!pin_data->puk_request)
+					{
+						if(pin_data->pin_case EQ INPUT_NEW_PIN_AGAIN)
+						{
+							SEND_EVENT(pin_data->pin_win,NEW_PIN_FAIL,0,pin_data);/* new Pin failed */
+						}
+						else if(pin_data->pin_case EQ INPUT_NEW_PIN2_AGAIN)
+						{
+							SEND_EVENT(pin_data->pin_win,NEW_PIN2_FAIL,0,pin_data);/* new Pin2 failed */
+						}
+						else if(pin_data->gsm_state)
+						{
+							if(sim_pin_count(MFW_SIM_PIN1) <= 0 )//  May 13, 2004        REF: CRR 13632  xvilliva
+							{
+								pin_data->puk_request = TRUE;
+								SEND_EVENT(pin_data->pin_win,PUK1_REQ_VER_INFO,0,pin_data);
+							}
+							else
+							SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,pin_data);
+						}
+					 }
+					else
+					{
+						if(pin_data->pin_case EQ INPUT_NEW_PIN_AGAIN)
+						{
+							SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+						}
+						else
+						{
+							SEND_EVENT(pin_data->pin_win,PUK2_REQ,0,pin_data);
+						}
+
+					}
+				break;
+			 default:
+				return 0;
+			}
+			break;
+		    case MFW_SIM_DISABLE:
+		    case MFW_SIM_ENABLE:
+		   switch (status->sim_status)
+			   {
+			     case MFW_SIM_SUCCESS:
+		    TRACE_FUNCTION("sim_event_cb_setting: succ/DIS/E");
+
+		    if (status->sim_procedure EQ MFW_SIM_ENABLE)
+					{
+					  SEND_EVENT(pin_data->pin_win,PIN1_ENAB_END,0,pin_data);
+					}
+				    else
+					{
+					  SEND_EVENT(pin_data->pin_win,PIN1_DISAB_END,0,pin_data);
+					}
+				  break;
+			     case MFW_SIM_FAILURE:
+				    TRACE_FUNCTION("sim_event_cb_setting: fail/DIS/E");
+				    pin_data->pin_retries = sim_pin_count(MFW_SIM_PIN1);
+				    SEND_EVENT(pin_data->pin_win,PIN1_ENDIS_FAIL,0,pin_data);
+				  break;
+			    default:
+				  return 0;
+			   }
+			break;
+			default:
+				return 0;
+		}
+	    return 1;
+  }
+  /* x0045876, 14-Aug-2006 (WR - missing return statement at end of non-void function) */
+   return 0;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_ch_item_flag
+ $Description:	decision about show entry "PIN change"
+ $Returns:		Status int; 0 if PIN enabled, 1 if disabled
+ $Arguments:	menu tag, menu attribute tag, menu item tag
+*******************************************************************************/
+U16 set_pin_ch_item_flag (struct MfwMnuTag * m, struct MfwMnuAttrTag * ma, struct MfwMnuItemTag * mi)
+{
+	T_MFW_SIM_PIN_STATUS status;
+
+    TRACE_FUNCTION("MmiPins:set_pin_item_flag_state:pinChange");
+
+	status.type = MFW_SIM_PIN1;
+	sim_pin_status(&status);
+	if(status.set EQ MFW_SIM_DISABLE) /*if PIN disabled no change PIN */
+		return MNU_ITEM_HIDE;
+	else
+		return 0;		      /* PIN enabled, change PIN possible */
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_en_item_flag
+ $Description:	decision about show entry "PIN enable"
+ $Returns:		Status int; 0 if show, 1 if don't show
+ $Arguments:	menu tag, menu attribute tag, menu item tag
+*******************************************************************************/
+U16 set_pin_en_item_flag (struct MfwMnuTag * m, struct MfwMnuAttrTag * ma, struct MfwMnuItemTag * mi)
+{
+	T_MFW_SIM_PIN_STATUS status;
+
+    TRACE_FUNCTION("MmiPins:set_pin_en_item_flag:pinEnable");
+
+	status.type = MFW_SIM_PIN1;
+	sim_pin_status(&status);
+	if(status.set EQ MFW_SIM_ENABLE) /*if PIN enabled no show menu entry */
+		return MNU_ITEM_HIDE;
+	else
+		return 0;		      /* PIN disabled show menu entry */
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_dis_item_flag 
+ $Description:	decision about show entry "PIN enable"
+ $Returns:		Status int; 0 if show, 1 if don't show
+ $Arguments:	menu tag, menu attribute tag, menu item tag
+*******************************************************************************/
+U16 set_pin_dis_item_flag (struct MfwMnuTag * m, struct MfwMnuAttrTag * ma, struct MfwMnuItemTag * mi)
+{
+	T_MFW_SIM_PIN_STATUS status;
+
+	TRACE_FUNCTION("MmiPins:set_pin_en_item_flag:pinDisable");
+
+	status.type = MFW_SIM_PIN1;
+	sim_pin_status(&status);
+	if(status.set EQ MFW_SIM_DISABLE) /*if PIN disabled no show menu entry */
+		return MNU_ITEM_HIDE;
+	else
+		return 0;		      /* PIN enabled show menu entry */
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_pin2_ch_item_flag
+ $Description:	decision about show entry "PIN2 change"
+ $Returns:		Status int; 0 if show, 1 if don't show
+ $Arguments:	menu tag, menu attribute tag, menu item tag
+*******************************************************************************/
+//change back to old version
+U16 set_pin2_ch_item_flag (struct MfwMnuTag * m, struct MfwMnuAttrTag * ma, struct MfwMnuItemTag * mi)
+{
+			T_MFW_SIM_PIN_STATUS status;
+
+    TRACE_FUNCTION("MmiPins:set_pin2_ch_item_flag:pin2Change");
+
+	status.type = MFW_SIM_PIN2;
+	sim_pin_status(&status);
+	/*if(status.set EQ MFW_SIM_DISABLE)*/ /*if PIN disabled no change PIN */
+	if(status.set EQ MFW_SIM_UNKNOWN)
+		return MNU_ITEM_HIDE;
+	else
+		return 0;		      /* PIN enabled, change PIN possible */
+}
+
+#ifdef SIM_PERS
+/*******************************************************************************
+ $Function:		mmi_simlock_change_pin
+ $Description:	Performs the change password for a given lock type
+ $Returns:		success or failure
+ $Arguments:	lock type, oldpassword, new password
+*******************************************************************************/
+
+void mmi_simlock_change_pin(T_MFW_HND win,int type,char* oldpsw,char* newpsw)
+{
+    T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+    T_pin * pin_data = (T_pin *)win_data->user;
+
+    TRACE_EVENT_P2(" old paswwrd%s new password%s ",oldpsw,newpsw);
+     if(mfw_simlock_change_lock_code(type,oldpsw,newpsw) !=MFW_SS_OK)
+       SEND_EVENT(pin_data->pin_win,SIM_LOCK_NEW_ENDISFAIL,0,pin_data);
+    else
+        SEND_EVENT(pin_data->pin_win,SIM_LOCK_NEW_ENDSUCC,0,pin_data);
+}
+#endif
+
+/*******************************************************************************
+
+ $Function:	setting_pin_main 
+ $Description:	PIN Settings Dialog Handling function
+ $Returns:		none
+ $Arguments:	win, event, value, parameters
+*******************************************************************************/
+void setting_pin_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user;//pin main data
+//	T_pin_mess * mess_data = (T_pin_mess *) parameter;//pin message data   /* Warning Correction */
+//	T_pin_edt * edt_data = (T_pin_edt *) parameter;//pin editor data   /* Warning Correction */
+	T_MFW_WIN * par_window;
+
+
+	 switch(event)
+	 {
+		  case PIN1_REQ_OLD:					  // Text "Enter Old Pin "
+		  case PIN2_REQ_OLD:					  // Text "Enter Old Pin2 "
+		  case PIN1_REQ_ATT:					  // info screen "xx attempts "
+		  case PIN2_REQ_ATT:					  // info screen "xx attempts "
+		  case PUK1_REQ:					  // Text "Enter Puk "
+		  case PIN1_REQ:					  // Text "Enter Pin "
+		  case PUK2_REQ:					  // Text "Enter Puk2 "
+		  case PIN2_REQ:					  // Text "Enter Pin2 "
+		  case PIN1_STATUS:					  // Text "Pin enabled"or disabled
+		  case INPUT_NEW_PIN:					  // Text "Enter New PIN "
+		  case INPUT_NEW_PIN2:					  // Text "Enter New PIN2 "
+		  case INPUT_NEW_PIN_AGAIN:				  // Text "Enter New PIN again "
+		  case INPUT_NEW_PIN2_AGAIN:				  // Text "Enter New PIN2 again "
+		  case GSM_FAIL:					  // gsm not allowed
+		  case NEW_PIN_FAIL:					  // new pin2 failed
+		  case NEW_PIN2_FAIL:					  // new pin failed
+		  case PUK1_REQ_VER_INFO:				  // Text "Pin blocked "
+		  case PUK1_UNBL_FAIL_INFO:				  // unblock error - new puk requ
+		  case PUK1_UNBL_FATAL_ERROR:
+		  case PIN1_CH_SUCC:
+		  case PIN2_CH_SUCC:
+		  case PIN1_ENAB_END:
+		  case PIN1_DISAB_END:
+          case PIN2_SIM_FAILURE:    // Marcus: Issue 1609: 23/01/2003 - failure to verify PIN2
+		  
+		  case FDN_ACTIVATED:
+		  case ADN_ACTIVATED:
+		  case FDN_FAIL:
+		  case FDN_ACT_END:
+		  case FDN_DEACT_END:
+#ifdef SIM_PERS              
+//The different cases of enabling/disabling/quering and changing password
+//scenarios are handled		
+case SIM_LOCK_NEW_ENDSUCC_CKEY:
+    case INPUT_NEW_SIM_PLOCK_AGAIN:	
+          case SIM_LOCK_REQ_NEW:
+          case TXT_SIM_LOCK_ALL:
+          case SIM_LOCK_ENDSUCC:
+          case SIM_LOCK_ALREADY_ENDIS:
+          case SIM_LOCK_REQ_FCPWD:
+          case SIM_LOCK_FCPWD_FAIL:
+          case SIM_LOCK_FCPWDSUCC:
+          case SIM_LOCK_REQ_OLD:
+          case SIM_LOCK_STATUS:
+          case NEW_SIM_PLOCK_FAIL:
+          case SIM_LOCK_NEW_ENDSUCC:
+          case SIM_LOCK_NEW_ENDISFAIL:
+          case SIM_LOCK_SIM_REM:
+	   case PERM_BLK:
+	   case SMLK_SHOW_FC_FAIL1:
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+	case SIM_LOCK_REQ_MKPWD:	//Master unlock ket request
+	case SIM_LOCK_MKPWD_FAIL:	//Master unlocking failed
+	case SIM_LOCK_MKPWDSUCC:	//Master unlocking success
+#endif
+		  sett_pin_mess(win,event);
+				  break;
+		  case PUK1_UNBL_SUCC: 
+					sett_pin_mess(win,event);
+				break;
+			
+	 }
+
+	 switch(event)
+	 {
+		  case TXT_ENTER_PIN1:
+				   pin_data->pin_case = INPUT_PIN1;//enter PIN1 start
+				   sett_pin_edit(win,INPUT_PIN1);
+				  break;
+  #ifdef SIM_PERS
+//events to handle input of new password, password and new password again
+                 case TXT_ENTER_PLOCK:
+                    		pin_data->pin_case = INPUT_SIM_PLOCK;//enter PIN1 start
+				sett_pin_edit(win,INPUT_SIM_PLOCK);
+                            break;
+
+                  case TXT_ENTER_FCPWD:
+                    		pin_data->pin_case = INPUT_SIM_FCPWD;//enter FC pwd start
+				sett_pin_edit(win,INPUT_SIM_FCPWD);
+                            break;
+//x0pleel 20 July, 2006
+                  case TXT_ENTER_MKPWD:
+                    		pin_data->pin_case = INPUT_SIM_MKPWD;//enter FC pwd start
+				sett_pin_edit(win,INPUT_SIM_MKPWD);
+                            break;
+
+                   case TXT_ENTER_NEW_SIMLOCK:
+                               pin_data->pin_case = INPUT_NEW_SIM_PLOCK;//enter PIN1 start
+				   sett_pin_edit(win,INPUT_NEW_SIM_PLOCK);
+                                break;  
+
+                      case TXT_ENTER_NEW_SIMLOCK_AGAIN:
+                               pin_data->pin_case = INPUT_NEW_SIM_PLOCK_AGAIN;//enter new PIN2 start
+				   sett_pin_edit(win,INPUT_NEW_SIM_PLOCK_AGAIN);
+				   break;           
+                        case NEW_SIM_PLOCK_END:
+                              if(!pin_data->puk_request)
+                                {
+                                    mmi_simlock_change_pin(win,mmi_simlock_locktype,(char*)pin_data->old_pin,(char*)pin_data->new_pin);
+                                }
+                              break; 
+
+#endif
+		  case TXT_ENTER_PIN2:
+				   pin_data->pin_case = INPUT_PIN2;//enter PIN2 start
+				   sett_pin_edit(win,INPUT_PIN2);
+				  break;
+#ifdef SIM_PERS
+		case ME_PERM_BLK:
+				   TRACE_FUNCTION("ME_PERM_BLK");
+				   pin_data->pin_case = PERM_BLK1;//enter PUK1 start
+				   sett_pin_edit(win,PERM_BLK1);
+				  break;
+#endif
+		  case TXT_ENTER_PUK1:
+		  	TRACE_FUNCTION("TXT_ENTER_PUK1");
+				   pin_data->pin_case = INPUT_PUK1;//enter PUK1 start
+				   sett_pin_edit(win,INPUT_PUK1);
+				  break;
+		  case TXT_ENTER_PUK2:
+				   pin_data->pin_case = INPUT_PUK2;//enter PUK2 start
+				   sett_pin_edit(win,INPUT_PUK2);
+				  break;
+		  case TXT_ENTER_NEW_PIN:
+				   pin_data->pin_case = INPUT_NEW_PIN;//enter new PIN start
+				   sett_pin_edit(win,INPUT_NEW_PIN);
+				   break;
+		  case TXT_ENTER_NEW_PIN2:
+				   pin_data->pin_case = INPUT_NEW_PIN2;//enter new PIN2 start
+				   sett_pin_edit(win,INPUT_NEW_PIN2);
+				   break;
+		  case TXT_ENTER_NEW_PIN_AGAIN:
+				   pin_data->pin_case = INPUT_NEW_PIN_AGAIN;
+				   sett_pin_edit(win,INPUT_NEW_PIN_AGAIN);// Start: enter New PIN1 again
+				   break;
+		  case TXT_ENTER_NEW_PIN_AGAIN2:
+				   pin_data->pin_case = INPUT_NEW_PIN2_AGAIN;
+				   sett_pin_edit(win,INPUT_NEW_PIN2_AGAIN);// Start: enter New PIN2 again
+				   break;
+		  case PIN1_END:	
+				   pin1_en_dis_verify(win);	
+				   break;
+				   
+#ifdef SIM_PERS                   
+//Events that indicate the input of the lock code and new lock code
+                case SIM_PLOCK_END:
+                               mmi_simlock_en_dis_verify(win);
+                               break;
+
+                 case SIM_FCPWD_END:
+                 		mmi_simlock_reset_fc_value(win);
+                 		break;
+
+			//x0pleela 20 july, 2006 ER: OMAPS00087586, OMAPS00087587
+             	   case SIM_MKPWD_END:
+             	   		//Master unlocking through SIMP menu
+                 		mmi_simlock_master_unlock(win,  MFW_SIM_MKEYM);
+                 		break;
+#endif                               
+		  case PIN2_END:
+				   sim_verify_pin(MFW_SIM_PIN2,(char*)pin_data->old_pin);/* verification pin2 */
+				   break;
+		  case NEW_PIN_END:
+				   if(!pin_data->puk_request)
+						sim_change_pin(MFW_SIM_PIN1,(U8*)pin_data->old_pin,(U8*)pin_data->new_pin);/* change PIN1 */
+				   else
+					{
+						sim_unblock_pin(MFW_SIM_PUK1, (char*)pin_data->puk, (char*)pin_data->new_pin);/* unblock pin1 */
+					}
+				   break;
+		  case NEW_PIN2_END:
+			   if(!pin_data->puk_request)
+						sim_change_pin(MFW_SIM_PIN2,(U8*)pin_data->old_pin,(U8*)pin_data->new_pin);/* change PIN2 */
+				   else
+						sim_unblock_pin(MFW_SIM_PUK2, (char*)pin_data->puk, (char*)pin_data->new_pin);/* unblock pin2 */
+				   break;
+		  case PIN_OK_INFO: // PIN was need
+					if((pin_data->set_state NEQ FDN_ACTIV) AND (pin_data->set_state NEQ FDN_DEACTIV))
+					{
+						sett_pin_mess(win,PIN_OK_INFO);// for pin2 change and pin2 check from serv/phoneb
+					
+					}
+					else
+					{
+						set_mode_fdn_adn(win,pin_data);
+					}
+				   break;
+	 }
+
+	 switch(event)
+	 {
+		  case PIN_OK_END:
+				pin_verif_or_check2_end(win);
+				break;
+		  case PIN1_CH_END:
+		  case PIN2_CH_END:
+		  case UNBL_OK:
+				pin_ch_end_or_abort(win);
+			   break;
+			
+		  case PIN1_STATUS_END: 		  
+		  case IDLE_GSM_FAIL:
+				   pin_ch_end_or_abort(win);
+			   break;
+		  case SETT_ABORT:
+				TRACE_FUNCTION("clear softkey 10");		  
+				// June 16, 2005  REF: CRR 31267  x0021334
+				if (pin2Flag NEQ TRUE)  // To ensure that the screen does not blank out
+				{
+					dspl_ClearAll();
+				}
+				if(pin_data->set_state EQ PIN1_CHECK)
+				{
+					par_window = pin_data->parent_win;
+					setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+				}
+				else if(pin_data->set_state EQ PIN2_CHECK)
+				{
+					par_window = pin_data->parent_win;
+					setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+					// June 16, 2005  REF: CRR 31267  x0021334
+					if (pin2Flag EQ TRUE) // To ensure that failed dialog is not given
+					{
+						pin2Flag = FALSE;
+						winDelete(par_window);
+					}
+					else
+						SEND_EVENT(par_window, PIN2_ABORT, 0, NULL);
+				}
+				else
+					setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+				break;
+		  case FDN_UNBL_OK:
+				TRACE_FUNCTION("clear softkey 11");		  
+				setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+				break;
+		  case PIN1_ENDIS_FAIL:
+				  if(sim_pin_count(MFW_SIM_PIN1) EQ 0)
+				  {
+					   pin_data->puk_request = TRUE;
+					   sett_pin_mess(win,PUK1_REQ_VER_INFO);
+				  }
+				  else
+				  {
+						sett_pin_mess(win,PIN1_ENDIS_FAIL);
+				  }
+				  break;
+		  case FDN_WAIT:
+			    pin_data->pin_case = FDN_WAIT;
+				winShow(pin_data->pin_win);
+				break;	// waiting for call back from phonebook handler
+#ifdef SIM_PERS				
+
+//event to handle lock/unlock failure			
+		case SIM_LOCK_ENDIS_FAIL:
+                            sett_pin_mess(win,SIM_LOCK_ENDIS_FAIL);
+                            break;
+
+		//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		//New event to display a dialog Busy for wrong entry of unlocking pwd and timer been enabled
+		case SIM_LOCK_BUSY:
+			       sett_pin_mess(win,SIM_LOCK_BUSY);
+                            break;
+
+		//x0pleela 26 July,2006 ER: OMAPS00087586, OMAPS00087587
+		//new event to display a dialog Busy for wrong entry of unblocking pwd and timer been enabled
+		case SIM_LOCK_BUSY_UNBLOCK:
+			       sett_pin_mess(win, SIM_LOCK_BUSY_UNBLOCK);
+                            break;
+                 
+#endif                            
+		  default:
+			  break;
+	 }
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	pin_ch_end_or_abort 
+ $Description:	PIN change finished or abort (settings)
+ $Returns:		none
+ $Arguments:	win
+*******************************************************************************/
+static void pin_ch_end_or_abort (T_MFW_HND win)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+	T_MFW_WIN * par_window;
+
+	TRACE_FUNCTION("MmiPins:pin_ch_end_or_abort");
+
+   if(pin_data->set_state NEQ PIN2_CHECK)
+   {
+		if((pin_data->set_state EQ FDN_ACTIV) ||(pin_data->set_state EQ FDN_DEACTIV))
+		{
+			set_mode_fdn_adn(win,pin_data);
+		}
+		else if(pin_data->set_state EQ PIN1_CHECK)
+		{
+			par_window = pin_data->parent_win;
+			setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+			SEND_EVENT(par_window,PIN1_OK,0,NULL);// pin1 check over PUK1
+		}	  
+		else
+		{
+			TRACE_FUNCTION("clear softkey 12");		
+			pin_skClear();
+			setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog,also idle gsm
+		}										/* back to menu tree	  */
+   }
+   else
+   {
+		par_window = pin_data->parent_win;
+		setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+		SEND_EVENT(par_window,PIN2_OK,0,NULL);// pin2 check over PUK2
+   }
+
+}
+
+#ifdef SIM_PERS
+//	Nov 03, 2005 DR: OMAPS00052032 - xpradip
+/*******************************************************************************
+ $Function:		mmi_display_result
+ $Description:	Displays appropriate info dialog for the sAT_PlusCLCK operation
+ $Returns:		none
+ $Arguments:	state for displaying enabled or failed
+*******************************************************************************/
+void mmi_display_result(U8 state)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)info_disp)->data;
+	T_dialog_info * display_info = (T_dialog_info *)win_data->user;
+	T_MFW_HND parent = display_info->parent_win;
+	T_MFW_WIN * win_data1 = ((T_MFW_HDR *)parent)->data;
+	T_pin * pin_data = (T_pin *)win_data1->user;
+
+	if( info_disp)
+		dialog_info_destroy(info_disp);
+	info_disp = NULL;
+	
+	if( state)
+	{
+			SEND_EVENT(parent,SIM_LOCK_ENDSUCC,0,pin_data);
+	}
+	else
+	{
+	     if((aciErrDesc & 0x0000FFFF) EQ CME_ERR_SimNotIns)
+		     	 SEND_EVENT(parent,SIM_LOCK_SIM_REM,0,pin_data);
+	//x0pleela 11 Sep, 2006  DR: OMASP00094215
+	//checking for Class type and the ext busy error while unlocking a locked category
+	else if( ( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+			(aciErrDesc & 0x0000FFFF) EQ EXT_ERR_Busy)
+ 		   	SEND_EVENT(pin_data->pin_win,SIM_LOCK_BUSY,0,pin_data);
+	     else
+		        SEND_EVENT(parent,SIM_LOCK_ENDIS_FAIL,0,pin_data);
+	}
+}
+
+static void mmi_simlock_reset_fc_value(T_MFW_HND win)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+	int status,curr_fail_reset, curr_succ_reset;
+
+	TRACE_FUNCTION("mmi_simlock_reset_fc_value()");
+	status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+	if( curr_succ_reset )
+	{
+		status = mfw_simlock_reset_fc_value((U8*)pin_data->old_pin,MFW_SIM_FCM);
+		mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+
+		if (status == MFW_SS_FAIL)
+		{	
+			if((aciErrDesc & 0x0000FFFF) EQ CME_ERR_SimNotIns)
+		     	 SEND_EVENT(pin_data->pin_win,SIM_LOCK_SIM_REM,0,pin_data);
+
+				//x0pleela 11 Sep, 2006  DR: OMASP00094215
+				//checking for Class type and the ext busy error while unlocking a locked category
+			else if( ( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+					(aciErrDesc & 0x0000FFFF) EQ EXT_ERR_Busy)
+				{
+				  SEND_EVENT(pin_data->pin_win,SIM_LOCK_BUSY_UNBLOCK,0,pin_data);
+				}
+
+			else
+		     	{
+				if( curr_fail_reset )
+					{
+			     		SEND_EVENT(pin_data->pin_win,SIM_LOCK_FCPWD_FAIL,0,pin_data);
+					}
+				else
+				{
+					perm_blocked =1;
+					SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+				}
+		     	}
+		}
+         else
+             SEND_EVENT(pin_data->pin_win,SIM_LOCK_FCPWDSUCC,0,pin_data);
+	}
+	else
+	{
+		perm_blocked =1;
+		SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+	}	     
+		
+   }
+/*******************************************************************************
+ $Function:		mmi_simlock_en_dis_verify
+ $Description:	performs the operation of enabling/disabling and verifying a given
+ 				lock type after the input of the password
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+
+static void mmi_simlock_en_dis_verify(T_MFW_HND win)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+	T_MFW_SS_RETURN ret;
+	T_DISPLAY_DATA display_info;
+
+	TRACE_FUNCTION("mmi_simlock_en_dis_verify()");
+  if((pin_data->set_state != ENABLE) && (pin_data->set_state != DISABLE))
+	{	
+              
+	       TRACE_FUNCTION("We're verifying SIMLock");
+	     
+              SEND_EVENT(pin_data->pin_win,SIM_LOCK_REQ_NEW,0,pin_data);
+              
+       }
+  else if(pin_data->set_state EQ ENABLE)
+   {	 
+		TRACE_FUNCTION("MmiPins:Enable Lock now");
+		//TRACE_FUNCTION_P1("Vidya: SimLock_MMI_Enable Password=%s",pin_data->old_pin);	
+		ret = mfw_simlock_enable_lock((U8*)pin_data->old_pin, mmi_simlock_locktype);
+		if ( ret == MFW_SS_FAIL)
+		{	
+		     if((aciErrDesc & 0x0000FFFF) EQ CME_ERR_SimNotIns)
+		     	 SEND_EVENT(pin_data->pin_win,SIM_LOCK_SIM_REM,0,pin_data);
+		     else
+		        SEND_EVENT(pin_data->pin_win,SIM_LOCK_ENDIS_FAIL,0,pin_data);
+		}
+//	Nov 03, 2005 DR: OMAPS00052032 - xpradip
+//	handle the execute state for enabling the lock		
+		else if( ret == MFW_EXCT)
+		{
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull,TxtPleaseWait,TxtNull, COLOUR_STATUS);
+			dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, FOREVER, KEY_CLEAR | KEY_LEFT );
+			info_disp = info_dialog (pin_data->pin_win, &display_info);
+		}
+         	else
+             		SEND_EVENT(pin_data->pin_win,SIM_LOCK_ENDSUCC,0,pin_data);
+   }
+   else  if(pin_data->set_state EQ DISABLE)
+   { 	
+   		ret = mfw_simlock_disable_lock((U8*)pin_data->old_pin,mmi_simlock_locktype); 
+		if (ret == MFW_SS_FAIL)
+		{	
+		      if((aciErrDesc & 0x0000FFFF) EQ CME_ERR_SimNotIns)
+		     	 SEND_EVENT(pin_data->pin_win,SIM_LOCK_SIM_REM,0,pin_data);
+
+				//x0pleela 11 Sep, 2006  DR: OMASP00094215
+				//checking for Class type and the ext busy error while unlocking a locked category
+			else if( ( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+					(aciErrDesc & 0x0000FFFF) EQ EXT_ERR_Busy)
+			  SEND_EVENT(pin_data->pin_win,SIM_LOCK_BUSY,0,pin_data);
+		     else
+  			{
+  			pin_data->pin_retries = sim_pin_count(MFW_SIM_PIN1);
+			SEND_EVENT(pin_data->pin_win,SIM_LOCK_ENDIS_FAIL,0,pin_data);
+		     	}
+		}
+        	else
+	       		SEND_EVENT(pin_data->pin_win,SIM_LOCK_ENDSUCC,0,pin_data);
+   }
+
+}
+
+
+/*******************************************************************************
+ $Function:		simLock_enable
+ $Description:	Initiates the password input screen for enabling a lock	none
+ $Arguments:	none
+*******************************************************************************/
+void SIMLock_enable ()
+{
+    T_MFW_HND idle_win = mfwParent( mfw_header() );
+    T_MFW_HND win = setting_pin_create(idle_win);
+    UBYTE slock_status;
+    T_MFW_WIN * win_data = NULL;
+    T_pin * pin_data = NULL;
+
+    if(win != NULL) /* x0039928 -Lint warning removal */
+    {
+    	win_data = ((T_MFW_HDR *)win)->data;
+
+    pin_data = (T_pin *)win_data->user;
+	
+    /*a0393213 warnings removal-status variable set but not used*/	
+    /*T_MFW_SIM_PIN_STATUS status; 
+
+    status.type = MFW_SIM_PLOCK;*/
+    slock_status= mfw_simlock_get_lock_status(mmi_simlock_locktype);
+    pin_data->set_state = ENABLE;
+
+    if(slock_status EQ MFW_SIM_DISABLE) /*if PIN disabled*/
+    {	
+        SEND_EVENT(pin_data->pin_win,TXT_SIM_LOCK_ALL,0,pin_data);	
+     }
+    else if (slock_status EQ MFW_SIM_BLOCKED)
+    {
+    	pin_data->pin_case = SIM_LOCK_ALL;
+    	SEND_EVENT(pin_data->pin_win, SIM_LOCK_ENDIS_FAIL,0,pin_data);
+     }
+    else 
+        SEND_EVENT(pin_data->pin_win,SIM_LOCK_ALREADY_ENDIS,0,pin_data);
+    	}
+}
+
+/*******************************************************************************
+
+ $Function:		SIMLock_disable
+ $Description:	Initiates the password input screen for the disabling of a lock
+ $Returns:		
+ $Arguments:	
+*******************************************************************************/
+void SIMLock_disable ()
+{
+		T_MFW_HND idle_win = mfwParent( mfw_header() );
+		T_MFW_HND win = setting_pin_create(idle_win);
+        	UBYTE slock_status;
+		T_MFW_WIN * win_data = NULL;
+  //     	T_DISPLAY_DATA display_info;
+		T_pin * pin_data = NULL;
+		/*T_MFW_SIM_PIN_STATUS status;*//*a0393213 warnings removal-status variable set but not used*/
+
+            TRACE_FUNCTION("SIMLock_disable()");    
+
+		if(win != NULL) /* x0039928 - Lint warning removal */
+  		{	win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+		
+		/*status.type = MFW_SIM_PLOCK;*/ /*a0393213 warnings removal-status variable set but not used*/
+		slock_status= mfw_simlock_get_lock_status(mmi_simlock_locktype);
+		pin_data->set_state = DISABLE;
+		if(slock_status EQ MFW_SIM_ENABLE) /*if PIN disabled*/
+		{	
+			SEND_EVENT(pin_data->pin_win,TXT_SIM_LOCK_ALL,0,pin_data);	
+		}
+		else if (slock_status EQ MFW_SIM_BLOCKED)
+	    {
+	    	pin_data->pin_case = SIM_LOCK_ALL;
+	    	SEND_EVENT(pin_data->pin_win, SIM_LOCK_ENDIS_FAIL,0,pin_data);
+		}
+		else //PIN already enabled
+		/*{
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtLockDisabled, TxtNull,  COLOUR_STATUS_PINS);
+          	//display_info.TextId = TxtLockEnabled;
+          	dlg_initDisplayData_events( &display_info, NULL, THREE_SECS, 0 );
+          	info_dialog(0,&display_info);
+		}*/
+			SEND_EVENT(pin_data->pin_win,SIM_LOCK_ALREADY_ENDIS,0,pin_data);
+		}
+		return ;
+}
+
+
+/*******************************************************************************
+ $Function:		SIMLock_change
+ $Description:	Initiates the password input screen for change password
+ $Arguments:	none
+*******************************************************************************/
+
+ void SIMLock_change ()
+{
+    T_MFW_HND idle_win = mfwParent( mfw_header());
+    T_MFW_HND win = setting_pin_create(idle_win);
+    T_MFW_WIN * win_data = NULL;
+    T_pin * pin_data = NULL;
+    int status;
+   
+	if(win != NULL)	/* x0039928 - Lint warning removal */
+	{
+	win_data = ((T_MFW_HDR *)win)->data;
+	pin_data = (T_pin *)win_data->user;
+	pin_data->set_state = CHANGE_PIN;
+	status = mfw_simlock_get_lock_status(mmi_simlock_locktype);
+	
+	TRACE_FUNCTION("MmiPins:SIMLock_change");
+	
+	if(status == MFW_SIM_BLOCKED)
+	{
+		pin_data->pin_case = SIM_LOCK_ALL;
+		SEND_EVENT(pin_data->pin_win,SIM_LOCK_ENDIS_FAIL,0,pin_data);
+	}
+	else if( status == MFW_SIM_ENABLE){
+		SEND_EVENT(pin_data->pin_win,SIM_LOCK_STATUS,0,pin_data);
+		}
+	else
+    {
+      /*a0393213 warnings removal - enumerated typed mixed with other type - the statement is not necessary*/
+    	/*pin_data->pin_case = DISABLE;*/
+    	SEND_EVENT(pin_data->pin_win,SIM_LOCK_REQ_OLD,0,pin_data);
+    }
+	}
+}
+
+/*******************************************************************************
+
+ $Function:		SIMLock_status  
+ $Description:	Initiates the query for the lock status.
+ $Returns:		
+ $Arguments:none
+*******************************************************************************/
+void SIMLock_status ()
+{
+
+		T_MFW_HND idle_win = mfwParent( mfw_header() );
+		T_MFW_HND win = setting_pin_create(idle_win);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+
+	if(win != NULL) /* x0039928 - Lint warning removal */
+	{
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+
+
+	    TRACE_FUNCTION("SIMLock_status");
+
+	    SEND_EVENT(pin_data->pin_win,SIM_LOCK_STATUS,0,pin_data);
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:    	simlock_doAction
+
+ $Description:	
+            
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+void simlock_doAction()
+{
+TRACE_FUNCTION("simlock_doAction()");
+	switch(mmi_simlock_lockaction)
+		{
+		case MFW_SIM_ENABLE:
+			SIMLock_enable();
+			break;
+
+		case MFW_SIM_DISABLE:
+			SIMLock_disable();
+			break;
+
+		case MFW_SIM_CHANGE:
+			SIMLock_change();
+			break;
+		case MFW_SIM_VERIFY:
+			SIMLock_status();
+			break;
+			
+		default:
+			break;
+		}
+}
+
+int SIMLock_resetFC (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+		T_MFW_HND idle_win = mfwParent( mfw_header() );
+		T_MFW_HND win = setting_pin_create(idle_win);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+		
+		if(win != NULL) /* x0039928 -Lint warning removal */
+		{
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+
+            	TRACE_FUNCTION("SIMLock_resetFC()");    
+            	
+	    	SEND_EVENT(pin_data->pin_win, SIM_LOCK_REQ_FCPWD,0,pin_data);
+		}
+		return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_simlock_category_menus()
+
+ $Description:	starts the simlock category list menu
+ 
+ $Returns:		None
+
+ $Arguments:	parent window
+ 
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+T_MFW_HND mmi_simlock_category_menus(T_MFW_HND parent)
+{	
+	T_MFW_HND simp_cat_list_win;
+	TRACE_FUNCTION("mmi_simlock_category_menus");
+	
+	simp_cat_list_win = bookMenuStart(parent, SIMPCategoryListAttributes(), NULL);
+	return  simp_cat_list_win;
+
+}
+
+/*******************************************************************************
+ $Function:		SIMLock_unblock_ME
+ $Description:	       This function sends an event to display an editor for the user to enter
+ 				unblocking code
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+int SIMLock_unblock_ME(struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+  T_MFW_HND 		pin_win = pin_windows;
+  T_MFW_WIN * win_data = ((T_MFW_HDR *)pin_win)->data;
+  T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+  TRACE_FUNCTION("SIMLock_unblock_ME()");
+  
+  pin_data->puk_request = TRUE;
+  C_KEY_REQ=1;
+  FCUnlock_flag=1;
+  SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+  return 1;
+}
+
+/*******************************************************************************
+ $Function:		SIMLock_MasterKeyUnlock_bootup
+ $Description:	       This functioh gets called to unlock category /unblock ME during bootup sequence
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+int SIMLock_MasterKeyUnlock_bootup (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+  T_MFW_HND 		pin_win = pin_windows;
+  T_MFW_WIN * win_data = ((T_MFW_HDR *)pin_win)->data;
+  T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+  
+  TRACE_FUNCTION("SIMLock_MasterKeyUnlock_bootup()");    
+  
+  SEND_EVENT(pin_data->pin_win, INPUT_MASTER_KEY_REQ,0,pin_data);
+  
+  return 1;
+}
+
+/*******************************************************************************
+ $Function:		SIMLock_MasterKeyUnlock
+ $Description:	       This functioh gets called to unlock category /unblock ME through SIMP menu
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+int SIMLock_MasterKeyUnlock (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+  T_MFW_HND idle_win = mfwParent( mfw_header() );
+  T_MFW_HND win = setting_pin_create(idle_win);
+  T_MFW_WIN * win_data = NULL;
+  T_pin * pin_data = NULL;
+
+  if(win != NULL) /* x0039928 - Lint warning removal */
+  {
+  win_data = ((T_MFW_HDR *)win)->data;
+  pin_data = (T_pin *)win_data->user;
+  
+  TRACE_FUNCTION("SIMLock_MasterKeyUnlock()");    
+  SEND_EVENT(pin_data->pin_win, SIM_LOCK_REQ_MKPWD,0,pin_data);
+  }
+  return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_check_masterkey
+
+ $Description:   If there is no support for Master Unlocking the item "Master unlock" will not 
+ 				appear on the menulist
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+USHORT	simlock_check_masterkey(struct MfwMnuTag *m, 
+									   struct MfwMnuAttrTag *ma, 
+									   struct MfwMnuItemTag *mi)
+
+{
+	UBYTE status;
+	TRACE_FUNCTION("simlock_check_masterkey");
+
+	status = mfw_simlock_check_masterkey(MFW_SIM_MKEYM);
+	if( status EQ MFW_MASTER_UNLOCK_ACTIVE)
+	  return 0;
+	else
+	  return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_get_masterkey_status
+
+ $Description:   Get the master key status
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+UBYTE simlock_get_masterkey_status(void)
+
+{
+	UBYTE status;
+	TRACE_FUNCTION("simlock_get_masterkey_status");
+
+	status = mfw_simlock_check_masterkey(MFW_SIM_MKEYM);
+	return status;	
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_check_NWCatLock
+
+ $Description:   Get the lock status of Network category and accordingly display the menu item
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+USHORT	simlock_check_NWCatLock(struct MfwMnuTag *m, 
+									   struct MfwMnuAttrTag *ma, 
+									   struct MfwMnuItemTag *mi)
+
+{
+	int status;
+	
+	TRACE_FUNCTION("simlock_check_NWCatLock");
+
+	status = mfw_simlock_get_lock_status(mmi_simlock_locktype);
+	if( (mmi_simlock_locktype EQ MFW_SIM_NLOCK ) && ( status NEQ MFW_SIM_BLOCKED) )
+		return 0;
+	else
+		return 1;	
+	
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_check_NSCatLock
+
+ $Description:   Get the lock status of Network subset category and accordingly display the menu item
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+USHORT	simlock_check_NSCatLock(struct MfwMnuTag *m, 
+									   struct MfwMnuAttrTag *ma, 
+									   struct MfwMnuItemTag *mi)
+
+{
+	int status;
+	
+	TRACE_FUNCTION("simlock_check_NSCatLock");
+
+
+	status = mfw_simlock_get_lock_status(mmi_simlock_locktype);
+	if( (mmi_simlock_locktype EQ MFW_SIM_NSLOCK )&& ( status NEQ MFW_SIM_BLOCKED) )
+		return 0;
+	else
+		return 1;	
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_check_SPCatLock
+
+ $Description:   Get the lock status of Service Provider category and accordingly display the menu item
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+USHORT	simlock_check_SPCatLock(struct MfwMnuTag *m, 
+									   struct MfwMnuAttrTag *ma, 
+									   struct MfwMnuItemTag *mi)
+
+{
+	int status;
+	
+	TRACE_FUNCTION("simlock_check_SPCatLock");
+
+	status = mfw_simlock_get_lock_status(mmi_simlock_locktype);
+	if( (mmi_simlock_locktype EQ MFW_SIM_SPLOCK )&& ( status NEQ MFW_SIM_BLOCKED) )
+		return 0;
+	else
+		return 1;		
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_check_CPCatLock
+
+ $Description:   Get the lock status of Corporate category and accordingly display the menu item
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+USHORT	simlock_check_CPCatLock(struct MfwMnuTag *m, 
+									   struct MfwMnuAttrTag *ma, 
+									   struct MfwMnuItemTag *mi)
+
+{
+	int status;
+	
+	TRACE_FUNCTION("simlock_check_CPCatLock");
+
+	status = mfw_simlock_get_lock_status(mmi_simlock_locktype);
+	if( (mmi_simlock_locktype EQ MFW_SIM_CLOCK )&& ( status NEQ MFW_SIM_BLOCKED) )
+		return 0;
+	else
+		return 1;		
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_check_SIMCatLock
+
+ $Description:   Get the lock status of SIM category and accordingly display the menu item
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+USHORT	simlock_check_SIMCatLock(struct MfwMnuTag *m, 
+									   struct MfwMnuAttrTag *ma, 
+									   struct MfwMnuItemTag *mi)
+
+{
+	int status;
+	
+	TRACE_FUNCTION("simlock_check_SIMCatLock");
+
+	status = mfw_simlock_get_lock_status(mmi_simlock_locktype);
+	if( (mmi_simlock_locktype EQ MFW_SIM_PLOCK )&& ( status NEQ MFW_SIM_BLOCKED) )
+		return 0;
+	else
+		return 1;		
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_check_CatBlock
+
+ $Description:   Get the ME status and accordingly display the menu item
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+USHORT	simlock_check_CatBlock(struct MfwMnuTag *m, 
+									   struct MfwMnuAttrTag *ma, 
+									   struct MfwMnuItemTag *mi)
+{
+	T_SUP_INFO_TYPE FLAG;
+	int curr_fc;
+
+	TRACE_FUNCTION("simlock_check_CatBlock");
+
+ 	FLAG=FCATTEMPTSLEFT;          /* set flag to current */
+     	curr_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/	
+	if((curr_fc == 0)) //ME blocked
+		return 0;
+	else
+		return 1;
+}
+/*******************************************************************************
+
+ $Function:    	mmi_simlock_master_unlock
+
+ $Description:   This function unlocks category/unblocks ME and sends event accordingly through SIMP menu
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+static void mmi_simlock_master_unlock(T_MFW_HND win, UBYTE MK_Unblock_flag)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+	int status;
+
+	TRACE_FUNCTION("mmi_simlock_master_unlock()");
+
+	status = mfw_simlock_master_unlock((U8*)pin_data->old_pin, MK_Unblock_flag);
+	if (status == MFW_SS_FAIL)
+		{
+		SEND_EVENT(pin_data->pin_win,SIM_LOCK_MKPWD_FAIL,0,pin_data);			
+		}
+       else
+       	{
+      	       SEND_EVENT(pin_data->pin_win,SIM_LOCK_MKPWDSUCC,0,pin_data);
+       	}
+}
+
+/*******************************************************************************
+
+ $Function:    	simlock_check_PBCatLock
+
+ $Description:   Get the lock status of Blocked Network category and accordingly display the menu item
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+USHORT	simlock_check_PBCatLock(struct MfwMnuTag *m, 
+									   struct MfwMnuAttrTag *ma, 
+									   struct MfwMnuItemTag *mi)
+
+{
+	int status;
+	
+	TRACE_FUNCTION("simlock_check_PBCatLock");
+
+	status = mfw_simlock_get_lock_status(mmi_simlock_locktype);
+	if( (mmi_simlock_locktype EQ MFW_SIM_PBLOCK ) && ( status NEQ MFW_SIM_BLOCKED) )
+		return 0;
+	else
+		return 1;	
+	
+}
+
+/*******************************************************************************
+
+ $Function:    	simp_unlock_Category
+
+ $Description:   This function sends corresponding event to unlock a locked category through dynamic menu
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+int simp_unlock_Category(struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+	T_MFW_HND 		pin_win = pin_windows;
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)pin_win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+	
+	TRACE_FUNCTION("simp_unlock_Category()");
+	switch((int)i->str)
+	{
+	case TxtNetwork:
+		SEND_EVENT(pin_win,INPUT_NLOCK_PIN_REQ, 0, pin_data);
+		break;
+	case TxtNetworkSubset:
+		SEND_EVENT(pin_win,INPUT_NSLOCK_PIN_REQ, 0, pin_data);
+		break;
+	case TxtServiceProvider:
+		SEND_EVENT(pin_win,INPUT_SPLOCK_PIN_REQ, 0, pin_data);
+		break;
+	case TxtCorporate:
+		SEND_EVENT(pin_win,INPUT_CLOCK_PIN_REQ, 0, pin_data);
+		break;
+	case TxtSIM:
+		SEND_EVENT(pin_win,INPUT_SIM_PIN_REQ, 0, pin_data);
+		break;		
+
+	//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+	//Handling "Blocked Network" category
+	case TxtBlkNetwork:
+		SEND_EVENT(pin_win,INPUT_PBLOCK_PIN_REQ, 0, pin_data);
+		break;	
+	}	
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+ $Function:		get_fc_max_value
+ $Description:	       gets the maximum value of FC
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+int get_fc_max_value (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int max_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+     FLAG=FCMAX;          /* set flag to current */
+
+     TRACE_FUNCTION("get_fc_max_value");
+     max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(max_fc != MFW_FAILURE)
+     	{
+     sprintf(buf, "MAX %d tries", max_fc);
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+
+/*******************************************************************************
+ $Function:		get_fc_attempts_left
+ $Description:	       gets the current value of FC
+ $Returns:		none 
+ $Arguments:	       none
+*******************************************************************************/
+int get_fc_attempts_left (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int curr_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+//	Sept 24, 2005 REF:  LOCOSTO-ENH-34438, xpradipg
+//	new ENUM used to adopt to the aci label
+     FLAG = FCATTEMPTSLEFT;          /* set flag to current */
+     
+     curr_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(curr_fc != MFW_FAILURE)
+     	{
+     sprintf(buf, "%d tries left", curr_fc);
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+
+
+
+/*******************************************************************************
+ $Function:		get_fail_reset_fc_max_value
+ $Description:	       gets the maximum value of FC
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+int get_fail_reset_fc_max_value (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int max_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+     FLAG=FCRESETFAILMAX;          /* set flag to current */
+     
+     max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(max_fc != MFW_FAILURE)
+     	{
+     sprintf(buf, "MAX %d tries", max_fc);
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+
+/*******************************************************************************
+ $Function:		get_succ_reset_fc_max_value
+ $Description:	       gets the maximum value of FC
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+int get_succ_reset_fc_max_value (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int max_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+     FLAG=FCRESETSUCCESSMAX;          /* set flag to current */
+     
+     max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(max_fc != MFW_FAILURE)
+     	{
+     sprintf(buf, "MAX %d tries", max_fc);
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+/*******************************************************************************
+ $Function:		get_fail_reset_fc_attempts_left
+ $Description:	       gets the maximum value of FC
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+int get_fail_reset_fc_attempts_left (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int max_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+//	Sept 24, 2005 REF:  LOCOSTO-ENH-34438, xpradipg
+//	new ENUM used to adopt to the aci label	 
+     FLAG = FCRESETFAILATTEMPTSLEFT;          /* set flag to current */
+     
+     max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(max_fc != MFW_FAILURE)
+     	{
+     sprintf(buf, "%d tries left", max_fc);
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+/*******************************************************************************
+ $Function:		get_succ_reset_fc_attempts_left
+ $Description:	       gets the maximum value of FC
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+int get_succ_reset_fc_attempts_left (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int max_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+//	Sept 24, 2005 REF:  LOCOSTO-ENH-34438, xpradipg
+//	new ENUM used to adopt to the aci label	 
+     FLAG=FCRESETSUCCESSATTEMPTSLEFT;          /* set flag to current */
+     
+     max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(max_fc != MFW_FAILURE)
+     	{
+     sprintf(buf, "%d tries left", max_fc);
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+/*******************************************************************************
+ $Function:		get_timer_flag_value
+ $Description:	       gets the value of timer for successive unlock attempts
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+int get_timer_flag_value (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int max_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+     FLAG=TIMERFLAG;          /* set flag to current */
+     
+     max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(max_fc != MFW_FAILURE)
+     	{
+     	if( max_fc )
+	     sprintf(buf, "Flag Enabled");
+     	else
+     		sprintf(buf,"Flag Disabled");
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+
+/*******************************************************************************
+ $Function:		get_airtel_ind_flag_value
+ $Description:	       gets the value of airtel indication flag
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+int get_airtel_ind_flag_value (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int max_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+     FLAG=AIRTELINDFLAG;          /* set flag to current */
+     
+     max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(max_fc != MFW_FAILURE)
+     	{
+     	if( max_fc )
+	     sprintf(buf, "Flag Enabled");
+     	else
+     		sprintf(buf,"Flag Disabled");
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+
+/*******************************************************************************
+ $Function:		get_etsi_flag_value
+ $Description:	       gets the value of ETSI flag
+ $Returns:		none
+ $Arguments:	       none
+*******************************************************************************/
+int get_etsi_flag_value (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+   
+    T_SUP_INFO_TYPE FLAG;
+     int max_fc;
+     T_MFW_HND       win  = mfwParent(mfw_header());
+     T_DISPLAY_DATA display_info;
+     char buf[30];
+     FLAG=ETSIFLAG;          /* set flag to current */
+     
+     max_fc=mfw_simlock_get_sup_info(FLAG); /* get the value of the corresponding flag*/
+     
+     if(max_fc != MFW_FAILURE)
+     	{
+     	if( max_fc )
+	     sprintf(buf, "Flag Enabled");
+     	else
+     		sprintf(buf,"Flag Disabled");
+     dlg_initDisplayData_TextStr( &display_info, TxtNull,  TxtNull, (char *)buf, (char *)NULL, COLOUR_STATUS);
+     	}
+     else
+     dlg_initDisplayData_TextId( &display_info, TxtNull,  TxtNull, TxtFailed, TxtNull, COLOUR_STATUS);
+     
+     dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_OK );
+    // display_info.TextString2   = NULL; 
+     display_info.Identifier   = NULL;
+      info_dialog(win,&display_info); //information screen
+      
+      return 1;
+   
+}
+
+/*******************************************************************************
+ $Function:		setLockTypeNw
+ $Description:	sets the global flag to the network lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int setLockTypeNw (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+       TRACE_FUNCTION("setLockTypeNw"); 
+	mmi_simlock_locktype=MFW_SIM_NLOCK;
+	simlock_doAction();
+	return 1;
+}
+/*******************************************************************************
+ $Function:		setLockTypeSp
+ $Description:	sets the global flag to the Service provider lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int setLockTypeSp (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+       TRACE_FUNCTION("setLockTypeNw");
+	mmi_simlock_locktype=MFW_SIM_SPLOCK;
+	simlock_doAction();
+	return 1;
+}
+/*******************************************************************************
+ $Function:		setLockTypeNs
+ $Description:	sets the global flag to the network subset lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int setLockTypeNs (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+       TRACE_FUNCTION("setLockTypeNs");
+	mmi_simlock_locktype=MFW_SIM_NSLOCK;
+	simlock_doAction();
+	return 1;
+}
+/*******************************************************************************
+ $Function:		setLockTypeCp
+ $Description:	sets the global flag to the Corprate lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int setLockTypeCp (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+       TRACE_FUNCTION("setLockTypeCp");
+	mmi_simlock_locktype=MFW_SIM_CLOCK;
+	simlock_doAction();
+	return 1;
+}
+/*******************************************************************************
+ $Function:		setLockTypePs
+ $Description:	sets the global flag to the Personalisation lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int setLockTypePs(struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+       TRACE_FUNCTION("setLockTypePs");
+	mmi_simlock_locktype=MFW_SIM_PLOCK;
+	simlock_doAction();
+	return 1;
+}
+
+
+/*******************************************************************************
+ $Function:		setLockTypePb
+ $Description:		sets the global flag to the Personalisation lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+int setLockTypePb(struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+       TRACE_FUNCTION("setLockTypePb");
+	mmi_simlock_locktype=MFW_SIM_PBLOCK;
+	simlock_doAction();
+	return 1;
+}
+/*******************************************************************************
+
+ $Function:    	setLockActionLock
+
+ $Description:	
+            
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+
+void setLockActionLock(void)
+{
+    TRACE_FUNCTION("setLockActionLock");
+    mmi_simlock_lockaction= MFW_SIM_ENABLE;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	setLockActionUnlock
+
+ $Description:	sets the global flag to the action unlock
+            
+ $Returns:		none
+
+ $Arguments:	none
+ 
+*******************************************************************************/
+
+
+void setLockActionUnlock(void)
+{
+    TRACE_FUNCTION("setLockActionUnlock");
+    mmi_simlock_lockaction= MFW_SIM_DISABLE;
+}
+/*******************************************************************************
+
+ $Function:    	setLockActionChPwd
+
+ $Description:	
+            
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+
+void setLockActionChPwd(void)
+{
+    TRACE_FUNCTION("setLockActionChPwd");
+    mmi_simlock_lockaction= MFW_SIM_CHANGE;
+}
+
+/*******************************************************************************
+
+ $Function:    	setLockActionChkStat
+
+ $Description:	
+            
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+
+void setLockActionChkStat(void)
+{
+    TRACE_FUNCTION("setLockActionChkStat");
+    mmi_simlock_lockaction= MFW_SIM_VERIFY;
+}
+
+#endif
+
+
+
+/*******************************************************************************
+
+ $Function:	pin_verif_or_check2_end
+ $Description:	PIN change finished or abort (settings)
+ $Returns:		none
+ $Arguments:	win
+****************************************************************************/
+static void pin_verif_or_check2_end(T_MFW_HND win)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+	T_MFW_WIN * par_window;
+
+	TRACE_FUNCTION("MmiPins:pin_verif_or_check2_end");
+
+  if(pin_data->set_state NEQ PIN2_CHECK)
+   {
+		if(pin_data->set_state NEQ CHANGE_PIN2)
+		{
+			TRACE_FUNCTION("MmiPins:changing PIN 2");
+			SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN,0,pin_data);//pin change
+		}
+		else if(pin_data->set_state EQ PIN1_CHECK)
+		{
+			par_window = pin_data->parent_win;
+			setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+			SEND_EVENT(par_window,PIN1_OK,0,NULL);// pin1 check (not over PUK1)
+		}
+		else
+		{
+			TRACE_FUNCTION("MmiPins:changing PIN 2");
+			SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN2,0,pin_data);// pin2 change
+		}
+
+   }
+   else
+   {	TRACE_FUNCTION("MmiPins:checking PIN 2");
+		par_window = pin_data->parent_win;
+		setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+		SEND_EVENT(par_window,PIN2_OK,0,NULL);// pin2 check (not over PUK2)
+   }
+
+}
+
+
+
+
+/*******************************************************************************
+
+ $Function:	pin1_en_dis_verify 
+ $Description:	PIN enab/disab/verify start
+ $Returns:		none
+ $Arguments:	win
+****************************************************************************/
+static void pin1_en_dis_verify(T_MFW_HND win)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	TRACE_FUNCTION("MmiPins:pin1_en_dis_verify");
+
+   if((pin_data->set_state NEQ ENABLE) AND (pin_data->set_state NEQ DISABLE))
+	{	TRACE_FUNCTION("We're verifying pin 1");
+		sim_verify_pin(MFW_SIM_PIN1,(char*)pin_data->old_pin);/* verification pin1 */
+	}
+   else if(pin_data->set_state EQ ENABLE)
+   {	/* start enabling PIN1 */ 
+		TRACE_FUNCTION("MmiPins:Pin1 now enabled");   
+		if (sim_enable_pin((U8*)pin_data->old_pin) == MFW_SS_FAIL)
+		{	/*SPR 2145, if attempt fails then behave as though a "Pin incorrect"
+			event has been sent to MMI*/
+ 			 pin_data->pin_retries = sim_pin_count(MFW_SIM_PIN1);
+		     SEND_EVENT(pin_data->pin_win,PIN1_ENDIS_FAIL,0,pin_data);
+		}
+			
+   }
+   else 
+   { 	/* start disabling PIN1 */
+		TRACE_FUNCTION("MmiPins:Pin1 now disabled");   
+		if (sim_disable_pin((U8*)pin_data->old_pin) == MFW_SS_FAIL)
+		{	/*SPR 2145, if attempt fails then behave as though a "Pin incorrect"
+			event has been sent to MMI*/
+  			pin_data->pin_retries = sim_pin_count(MFW_SIM_PIN1);
+			SEND_EVENT(pin_data->pin_win,PIN1_ENDIS_FAIL,0,pin_data);
+		}
+   }
+
+}
+
+/*******************************************************************************
+
+ $Function:	pin_change 
+ $Description:	PIN change : call from menu Settings
+ $Returns:		Status int
+ $Arguments:	menu, item
+*******************************************************************************/
+
+int pin_change (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+		T_MFW_HND idle_win = idle_get_window();
+		T_MFW_HND win = setting_pin_create(idle_win);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+		T_MFW_SIM_PIN_STATUS status;
+			
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{	win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+
+		pin_data->set_state = CHANGE_PIN;
+
+	TRACE_FUNCTION("MmiPins:pin_change");
+
+	status.type = MFW_SIM_PIN1;
+		sim_pin_status(&status);
+		if(status.set EQ MFW_SIM_ENABLE) /*if PIN enabled no show menu entry */
+		{	if(sim_pin_count(MFW_SIM_PIN1) > 0)
+				SEND_EVENT(pin_data->pin_win,PIN1_REQ_OLD,0,pin_data);
+			else
+			{   /* not included the state of the puk counter ! */
+				pin_data->puk_request = TRUE;
+				SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+			}
+		}
+		else
+		{
+			setting_pin_destroy(win);
+			pin1_not_enabled_screen();
+		}
+		}
+		return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin2_change 
+ $Description:	PIN2 change : call from menu Settings
+ $Returns:		Status int
+ $Arguments:	menu, item
+*******************************************************************************/
+int pin2_change (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+		T_MFW_HND idle_win = idle_get_window();
+		T_MFW_HND win = setting_pin_create(idle_win);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+		
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{	win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+
+		pin_data->set_state = CHANGE_PIN2;
+
+	TRACE_FUNCTION("MmiPins:pin2_change");
+	      // June 16, 2005  REF: CRR 31267  x0021334
+	      // Check if PIN2 and PUK2 are initialised
+		if((sim_pin_count(MFW_SIM_PIN2) > 0) AND (sim_pin_count(MFW_SIM_PUK2) NEQ 0))
+			SEND_EVENT(pin_data->pin_win,PIN2_REQ_OLD,0,pin_data);
+		// If PIN2 is not initialised, ask for PUK 2
+		else if ((sim_pin_count(MFW_SIM_PIN2) EQ 0) AND (sim_pin_count(MFW_SIM_PUK2) > 0))
+		{
+			pin_data->puk_request = TRUE;
+			SEND_EVENT(pin_data->pin_win,PUK2_REQ,0,pin_data);
+		}
+		// Else display that PIN2 is not available
+		else
+		{
+			SEND_EVENT(pin_data->pin_win,PIN2_SIM_FAILURE,0,pin_data);
+		}
+		}
+		return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_enable
+ $Description:	PIN1 enable : call from menu Settings
+ $Returns:		Status int
+ $Arguments:	menu, item
+*******************************************************************************/
+int pin_enable (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+		T_MFW_HND idle_win = mfwParent( mfw_header() );
+		T_MFW_HND win = setting_pin_create(idle_win);
+		T_MFW_SIM_PIN_STATUS status;
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+		
+		if(win != NULL)  /* x0039928 - Lint warning removal */
+		{
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+    
+		status.type = MFW_SIM_PIN1;//get pin1 status
+		sim_pin_status(&status);
+		if(status.set EQ MFW_SIM_DISABLE) /*if PIN disabled*/
+		{	pin_data->set_state = ENABLE;
+			if(sim_pin_count(MFW_SIM_PIN1) > 0) //if PIN1 not blocked
+			{	//ask for PIN1
+			    SEND_EVENT(pin_data->pin_win,PIN1_REQ,0,pin_data);	
+			}
+			else
+			{	//ask for PUK1
+				pin_data->puk_request = TRUE;
+			 SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+			}
+		}
+		else //PIN already enabled
+			SEND_EVENT(pin_data->pin_win,PIN1_ENAB_END,0,pin_data);
+		}
+		return 1;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	pin_disable
+ $Description:	PIN1 disable : call from menu Settings
+ $Returns:		Status int
+ $Arguments:	menu, item
+*******************************************************************************/
+int pin_disable (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+		T_MFW_HND idle_win =mfwParent( mfw_header() );
+		T_MFW_HND win = setting_pin_create(idle_win);
+		T_MFW_SIM_PIN_STATUS status;
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{	win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+
+
+    TRACE_FUNCTION("MmiPins:pin_disable");
+		status.type = MFW_SIM_PIN1; //get pin1 status
+		sim_pin_status(&status);
+		/*MC CONQ 5578, 27/05/02, if pin disabling NOT available*/
+		if(status.stat EQ MFW_SIM_NO_DISABLE)
+		{	/*tell user and destroy PIN window*/
+			ShowMessage(win, TxtNotAllowed, TxtNull);
+			setting_pin_destroy(win);
+		}
+		else
+		{
+			/*if PIN enabled */
+			if(status.set EQ MFW_SIM_ENABLE )
+			{
+				pin_data->set_state = DISABLE;
+				if(sim_pin_count(MFW_SIM_PIN1) > 0) //if PIN not blocked
+				{//ask for PIN
+				 SEND_EVENT(pin_data->pin_win,PIN1_REQ,0,pin_data);
+				}
+				else
+				{	//ask for PUK1
+				    pin_data->puk_request = TRUE;
+					SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+				}
+			}
+			else //if PIN already disabled no need to ask for PIN
+				SEND_EVENT(pin_data->pin_win,PIN1_DISAB_END,0,pin_data);
+		}
+	}
+		return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:	pin_status  
+ $Description:	how if pin request is on or off
+ $Returns:		Status int
+ $Arguments:	menu, item
+*******************************************************************************/
+int pin_status (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+
+		T_MFW_HND idle_win = idle_get_window();
+		T_MFW_HND win = setting_pin_create(idle_win);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+		
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+
+
+	TRACE_FUNCTION("MmiPins:pin_status");
+
+	    SEND_EVENT(pin_data->pin_win,PIN1_STATUS,0,pin_data);
+		}
+	    return 1;
+
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	pin2_fdn_activate 
+ $Description:	PIN2 activate fdn    call from menu Settings
+ $Returns:		Status int
+ $Arguments:	none
+*******************************************************************************/
+int pin2_fdn_activate (void)
+{		T_MFW_HND parent_win = mfwParent( mfw_header() );
+		T_MFW_HND win = setting_pin_create(parent_win);
+		T_MFW_SIM_PIN_STATUS status;
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+		
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+	
+	
+		pin_data->set_state = FDN_ACTIV;
+
+	TRACE_FUNCTION("MmiPins:pin2_check");
+
+	status.type = MFW_SIM_PIN2;
+		sim_pin_status(&status);
+		SimHasPin(MFW_SIM_PIN2);
+
+		TRACE_EVENT_P1("PIN2 status is: %d",status.stat);
+	       // June 16, 2005  REF: CRR 31267  x0021334
+	       // Check if PIN2 and PUK2 are initialised
+		if ((sim_pin_count(MFW_SIM_PIN2) > 0) AND (sim_pin_count(MFW_SIM_PUK2) NEQ 0))
+		{
+			SEND_EVENT(pin_data->pin_win,PIN2_REQ,0,pin_data);
+		}
+		// If PIN2 is not initialised, ask for PUK 2
+		else if ((sim_pin_count(MFW_SIM_PIN2) EQ 0) AND (sim_pin_count(MFW_SIM_PUK2) > 0))
+		{
+			pin_data->puk_request = TRUE;
+			SEND_EVENT(pin_data->pin_win,PUK2_REQ,0,pin_data);
+		}
+		// Else display that PIN2 is not available
+		else
+		{
+			SEND_EVENT(pin_data->pin_win,PIN2_SIM_FAILURE,0,pin_data);
+		}
+	}
+		return 1;
+}
+void pin1_not_enabled_screen( void )
+{		
+	T_MFW_HND	    parent_window	 = mfwParent( mfw_header() );
+	T_DISPLAY_DATA display_info; 
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtEnablePIN, TxtNull , COLOUR_STATUS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)not_avail_cb, THREE_SECS, KEY_RIGHT|KEY_LEFT );
+	
+	info_dialog( parent_window, &display_info );
+}
+
+void pin2_not_available_screen( void )
+{		
+	T_MFW_HND	    parent_window	 = mfwParent( mfw_header() );
+	T_DISPLAY_DATA display_info; 
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPin2Code, TxtNotAvailable , COLOUR_STATUS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)not_avail_cb, THREE_SECS, KEY_RIGHT|KEY_LEFT );
+	
+	info_dialog( parent_window, &display_info );
+}
+
+static void not_avail_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+
+		switch (reason)
+		{
+		case INFO_KCD_LEFT:
+		case INFO_KCD_RIGHT:
+		
+		case INFO_TIMEOUT:
+			winShow(win);
+			break;
+		}
+	
+}
+/*******************************************************************************
+
+ $Function:	pin2_fdn_deactivate
+ $Description:	PIN2 deactivate fdn    call from menu Settings
+ $Returns:		Status int
+ $Arguments:	none
+*******************************************************************************/
+int pin2_fdn_deactivate (void)
+{
+		T_MFW_HND parent_win = mfwParent( mfw_header() );
+		T_MFW_HND win = setting_pin_create(parent_win);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+		
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{	win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+//test if sim card has a PIN2
+		pin_data->set_state = FDN_DEACTIV;
+
+	TRACE_FUNCTION("MmiPins:pin2_fdn_deactivate");
+	       // June 16, 2005  REF: CRR 31267  x0021334
+	       // Check if PIN2 and PUK2 are initialised
+		if ((sim_pin_count(MFW_SIM_PIN2) > 0) AND (sim_pin_count(MFW_SIM_PUK2) NEQ 0)) //if there is a sim pin2 count
+		{
+			SEND_EVENT(pin_data->pin_win,PIN2_REQ,0,pin_data);
+		}
+		//  If PIN2 is not initialised, ask for PUK 2
+		else if ((sim_pin_count(MFW_SIM_PIN2) EQ 0) AND (sim_pin_count(MFW_SIM_PUK2) > 0))
+		{
+			pin_data->puk_request = TRUE;
+			SEND_EVENT(pin_data->pin_win,PUK2_REQ,0,pin_data);
+		}
+		// Else display that PIN2 is not available
+		else
+		{
+			SEND_EVENT(pin_data->pin_win,PIN2_SIM_FAILURE,0,pin_data);
+		}
+		}
+		return 1;
+}
+
+
+
+
+/*******************************************************************************
+
+ $Function:	sett_pin_edit
+ $Description:	help function for editor dialog
+ $Returns:		none
+ $Arguments:	window, event
+*******************************************************************************/
+static void sett_pin_edit(T_MFW_HND win, USHORT event)
+{
+
+//open the editor for entering the pin
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	T_MFW_HND pin_edt_win;
+
+
+
+	pin_edt_win = set_pin_edt_create(pin_data->pin_win);
+
+
+
+    if(pin_edt_win)
+	{
+		SEND_EVENT(pin_edt_win,event,0,pin_data);
+	}
+ 
+
+
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_edt_create
+ $Description:	Creation of an instance  for the PIN Editor dialog settings
+				Type of dialog : SINGLE_DYNAMIC
+ $Returns:		window
+ $Arguments:	parent window
+*******************************************************************************/
+T_MFW_HND set_pin_edt_create (T_MFW_HND parent_window)
+{
+  T_pin_edt * data = (T_pin_edt *)ALLOC_MEMORY (sizeof (T_pin_edt));
+  T_MFW_WIN * win;
+
+  data->pin_edt_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)set_pin_edt_win_cb);
+
+  TRACE_FUNCTION("MmiPins:set_pin_edt_create");
+
+  if (data->pin_edt_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)set_pin_editor;
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_edt_win)->data;
+  win->user		      = (void *) data;
+
+  /*
+   * Create any other handler
+   */
+
+  data->tim_out_handle = tim_create(data->pin_edt_win,TIMEOUT,(T_MFW_CB)pin_edt_tim_out_cb);
+
+/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+  data->editor = ATB_edit_Create(&data->editorPinAttr,0);
+#else /* NEW_EDITOR */
+  data->editor_handle = edt_create(data->pin_edt_win,&data->editpinAttr,0,0);
+#endif /* NEW_EDITOR */
+  data->kbd_handle = kbd_create(data->pin_edt_win,KEY_ALL,(T_MFW_CB)set_pin_kbd_cb);
+   data->kbd_long_handle = kbd_create(data->pin_edt_win,KEY_ALL | KEY_LONG,(T_MFW_CB)set_pin_edt_kbd_long_cb);
+  /*
+   * return window handle
+   */
+  return data->pin_edt_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_edt_destroy
+ $Description:	Destroy the pin editor dialog
+ $Returns:		none
+ $Arguments:	window
+*******************************************************************************/
+void set_pin_edt_destroy  (T_MFW_HND own_window)
+{
+  T_pin_edt * data ;
+  T_MFW_WIN * win;
+
+  if (own_window)
+  {
+	  TRACE_FUNCTION("MmiPins:set_pin_edt_destroy");
+
+	  win = ((T_MFW_HDR *)own_window)->data;
+	  data = (T_pin_edt *)win->user;
+
+	  if(data)
+	  {
+      /*
+       * Delete WIN Handler
+       */
+	      win_delete (data->pin_edt_win);
+	      FREE_MEMORY((void *)data,(sizeof(T_pin_edt)));
+	  }
+   }
+}
+
+#if(0) /* x0039928 - Lint warning removal */
+/*******************************************************************************
+
+ $Function:	set_pin_win_cb 
+ $Description:	Callback function for editor windows
+ $Returns:		status int
+ $Arguments:	event, window
+*******************************************************************************/
+static int set_pin_win_cb (T_MFW_EVENT event,T_MFW_WIN * win)
+{
+
+ TRACE_FUNCTION("set_pin_win_cb");
+ if (event EQ MfwWinVisible)
+  {
+
+	dspl_ClearAll();
+	return 1;
+  }
+  return 0;
+}
+#endif
+
+/*******************************************************************************
+
+ $Function:	set_pin_edt_win_cb
+ $Description:	Callback function for editor windows
+ $Returns:		status int
+ $Arguments:	event, window
+*******************************************************************************/
+static int set_pin_edt_win_cb (T_MFW_EVENT event,T_MFW_WIN * win)
+{
+  T_pin_edt * edt_data = (T_pin_edt *)win->user;//pin edt data
+  T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+  T_pin     * pin_data = (T_pin *)win_pin->user; // pin main data
+
+  TRACE_FUNCTION("set_pin_edt_win_cb");
+
+  if (event EQ MfwWinVisible)
+  {
+  /* SPR#1428 - SH - New Editor changes */
+  #ifdef NEW_EDITOR
+	ATB_edit_Show(edt_data->editor);
+	
+	if (edt_data->editor->update!=ED_UPDATE_TRIVIAL)
+	{
+		/* Set the colour for drawing title */
+
+		resources_setTitleColour(COLOUR_EDITOR);
+
+		dspl_Clear(0,0, SCREEN_SIZE_X-1, edt_data->editor->attr->win_size.py-1);
+
+		/* Title */
+
+		if(pin_emergency_call == TRUE)
+		{					
+			PROMPT(0,0,0,TxtEmergency);
+		}
+		else
+		{
+		   	PROMPT(0,0,0,pin_data->display_id1);
+#ifdef SIM_PERS
+			if( pin_data->display_id2)
+				PROMPT(0,20,0,pin_data->display_id2);
+#endif
+		}
+
+		/* Soft keys */
+		
+		if ((strlen((char*)edt_data->pin) >= MIN_PIN) && (strlen((char*)edt_data->pin) < (MAX_PIN + 1)))
+		{
+				if(!(edt_data->gsm_state))	  /* usual way for PIN 4 digits     */
+				{
+#ifdef SIM_PERS
+					if(pin_data->display_id1 == TxtPhoneBlocked)
+						softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);
+					else
+#endif
+					softKeys_displayId(TxtSoftOK,TxtDelete,0, COLOUR_EDITOR_XX);
+				}
+			}
+		//xvilliva - Added the below "if" and moved the existing "if" in to "else". "if" avoids "delete" key display.
+		if((strlen((char*)edt_data->pin) == 0))//  May 13, 2004        REF: CRR 13623  xvilliva
+		{
+			TRACE_EVENT("clear softkey 16 - zero length");
+			softKeys_displayId(TxtNull,TxtNull,0, COLOUR_EDITOR_XX);												
+		}
+		else if((strlen((char*)edt_data->pin) < MIN_PIN) && (edt_data->emergency_call != TRUE))
+		{
+			TRACE_EVENT("clear softkey 16");	
+			softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);												
+		}
+#ifdef SIM_PERS
+		else if((strlen((char*)edt_data->pin) < MIN_PIN) && (edt_data->emergency_call == TRUE))
+		{
+			TRACE_EVENT("clear softkey 16");	
+			if(pin_emergency_call == TRUE)
+				softKeys_displayId(TxtSoftCall,TxtDelete,0, COLOUR_EDITOR_XX);												
+			else
+			softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);												
+		}
+#endif
+	}
+	
+	edt_data->editor->update = ED_UPDATE_DEFAULT;
+	
+#else /* NEW_EDITOR */
+	pin_icons();
+   	PROMPT(INFO_TEXT_X,INFO_TEXT_Y,0,pin_data->display_id1);
+   	
+  TRACE_FUNCTION("softkey 6");
+	softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);
+#endif /* NEW_EDITOR */
+    return 1;
+  }
+  return 0;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_editor
+ $Description:	Pin editor Dialog Signal Handling function
+ $Returns:		void
+ $Arguments:	window, event, value, parameters
+*******************************************************************************/
+static void set_pin_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;
+
+    T_pin * pin_data = (T_pin *)parameter;//pin main data
+
+	edt_data->pin_case_edit = pin_data->pin_case;
+
+	TRACE_FUNCTION("MmiPins:set_pin_editor");
+
+  /*
+   * depending on event
+   */
+  switch (event)
+  {
+	case INPUT_PIN1:
+	case INPUT_PIN2:
+	case INPUT_PUK1:
+	case INPUT_PUK2:
+	case INPUT_NEW_PIN:
+	case INPUT_NEW_PIN_AGAIN:
+	case INPUT_NEW_PIN2:
+	case INPUT_NEW_PIN2_AGAIN:
+#ifdef SIM_PERS
+    case INPUT_SIM_PLOCK:
+    case INPUT_SIM_FCPWD:
+   case INPUT_NEW_SIM_PLOCK:
+    case INPUT_NEW_SIM_PLOCK_AGAIN:
+	case PERM_BLK1:
+	//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+	case INPUT_SIM_MKPWD:
+
+#endif
+ 		//SPR#717 - GW - Wrong structures being cleared
+		memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string  */
+		memset(edt_data->puk, '\0', sizeof(edt_data->puk));
+		memset(edt_data->new_pin, '\0', sizeof(edt_data->new_pin));
+		memset(edt_data->old_pin, '\0', sizeof(edt_data->old_pin));
+
+		/* Set up pin entry attributes */
+		/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+		AUI_edit_SetAttr( &edt_data->editorPinAttr, PIN_EDIT_RESET, COLOUR_EDITOR_XX, EDITOR_FONT, 0, ED_CURSOR_UNDERLINE, ATB_DCS_ASCII, (UBYTE *)edt_data->edtbuf, MAX_DIG);
+		clear_edit_array(edt_data);	     /*    clear editor buffer	    */
+		edt_data->editor_index = 0;
+		ATB_edit_Init(edt_data->editor);
+		ATB_edit_Show(edt_data->editor);
+#else /* NEW_EDITOR */
+		editor_attr_init( &edt_data->editpinAttr, PIN_EDIT_RESET, edtCurBar1,0,(char*)edt_data->edtbuf,MAX_DIG,COLOUR_EDITOR_XX);
+		clear_edit_array(edt_data);	     /*    clear editor buffer	    */
+		edt_data->editor_index = 0;
+		edtShow(edt_data->editor_handle);
+#endif /* NEW_EDITOR */
+
+		winShow(edt_data->pin_edt_win);
+
+		break;
+
+	default:
+		break;
+  }
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_kbd_cb
+ $Description:	Callback function for keyboard settings pin
+ $Returns:		status int
+ $Arguments:	event, keyboard control block
+*******************************************************************************/
+static int set_pin_kbd_cb (T_MFW_EVENT event,T_MFW_KBD *  kc)
+{
+    T_MFW_HND win = mfw_parent(mfw_header());
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;//pin edt data
+
+	T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+	T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
+
+	char timer = TRUE;
+
+	timStop(edt_data->tim_out_handle);/* stop entering timer      */
+
+	TRACE_FUNCTION("MmiPins:set_pin_kbd_cb");
+
+#ifdef SIM_PERS
+	if( !perm_blocked)
+#endif
+	{
+	switch(kc->code)
+	{
+		case KCD_0:
+		case KCD_1:
+		case KCD_2:
+		case KCD_3:
+		case KCD_4:
+		case KCD_5:
+		case KCD_6:
+		case KCD_7:
+		case KCD_8:
+		case KCD_9:
+		case KCD_STAR:
+			if(edt_data->editor_index < MAX_DIG)
+			{
+				/* xreddymn OMAPS00083495 Jul-04-2006 
+				 * Limit PIN1, PIN2 entries to 8 digits.
+				 */
+				if(((edt_data->pin_case_edit==INPUT_PIN1) || 
+					(edt_data->pin_case_edit==INPUT_PIN2) ||
+					(edt_data->pin_case_edit==INPUT_NEW_PIN) ||
+					(edt_data->pin_case_edit==INPUT_NEW_PIN_AGAIN) ||
+					(edt_data->pin_case_edit==INPUT_NEW_PIN2) ||
+					(edt_data->pin_case_edit==INPUT_NEW_PIN2_AGAIN)) &&
+					(edt_data->editor_index>=8) && 
+					(!edt_data->gsm_state))
+
+					return MFW_EVENT_CONSUMED;
+				else
+				{
+					if(kc->code EQ KCD_STAR)
+						edt_data->pin[edt_data->editor_index] = STAR;
+					else
+						edt_data->pin[edt_data->editor_index] = '0' + kc->code;
+
+					/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+					ATB_edit_AsciiChar(edt_data->editor, '*', TRUE);
+#else /* NEW_EDITOR */
+					edtChar(edt_data->editor_handle,'*');/* hide security code */
+#endif /* NEW_EDITOR */
+
+					edt_data->editor_index++;
+					check_set_pins(win,edt_data); /* digits check depends on status pin_case */
+					if(edt_data->gsm_state)
+						pin_data->gsm_state = edt_data->gsm_state;
+				}
+			}
+			winShow(edt_data->pin_edt_win);
+			break;
+
+		case KCD_HASH:
+		case KCD_LEFT:
+
+			if(pin_emergency_call == TRUE)
+			{
+				callNumber((UBYTE *)pin_emerg_call);
+				pin_emergency_call = FALSE;
+			}
+
+			/* If it's a hash, insert it into the editor */
+			
+			// change by Sasken ( Rashmi C N) on March 25th 2004
+			// Issue Number : MMI-SPR-15692
+			// Subject: Wrong entry in last dialed number.
+			// Bug : While saving PIN, if a hash is entered as a 
+			// delimiter/terminater, the hash is also getting stored 
+			// as  a part of pin. This makes it mandatory for the user 
+			// to enter hash as delimiter/terminater while he is authenticating.
+			// Solution: Avoid copying the hash(delimiter/terminater) in to the pin array.
+			//			 Commenting the copying part below in the "if" block.
+			
+			// If it's a hash, insert it into the editor 
+			//if(kc->code EQ KCD_HASH)
+			//xrashmic 1 Jul, 2006 OMAPS00075784
+			//To fix the reset while entering the gsm sequence for unblocking 
+			// the pin1 or pin2
+			if(!(strncmp((char*)edt_data->pin,"**052*",IDENT_GSM_2))||!(strncmp((char*)edt_data->pin,"**05*",IDENT_GSM_1)))
+
+			{
+				edt_data->pin[edt_data->editor_index] = HASH;
+				// SPR#1428 - SH - New Editor changes 
+#ifdef NEW_EDITOR
+				ATB_edit_AsciiChar(edt_data->editor, edt_data->pin[edt_data->editor_index], TRUE);
+#else // NEW_EDITOR 
+				edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]);
+#endif // NEW_EDITOR 
+				edt_data->editor_index++;
+			}
+
+			
+
+			// We save the pin2 entered in to this global variable which we
+			// use while calling sAT_PlusCLCK(), while locking or unlocking ALS. 					
+			memset(g_pin2,0,MAX_PIN+1);
+			if(edt_data->pin_case_edit EQ INPUT_PIN2 || edt_data->pin_case_edit EQ INPUT_NEW_PIN2)
+				strncpy(g_pin2,(char*)edt_data->pin,MAX_PIN);//xvilliva SPR17291
+			switch(edt_data->pin_case_edit)
+			{
+#ifdef SIM_PERS                
+                case INPUT_SIM_PLOCK:
+             	  case  INPUT_SIM_FCPWD:
+		//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		  case INPUT_SIM_MKPWD:
+                		
+#endif                            
+			/* PIN1 and PIN2 */
+				case INPUT_PIN1:/* finish of PIN entering */
+				case INPUT_PIN2:
+					TRACE_EVENT_P1("pin_emergency_call = %d", pin_emergency_call);
+					TRACE_EVENT("When 'Call' is pressed!");
+
+					/* PIN is long enough, finish editing */
+					
+					if ((strlen((char*)edt_data->pin) >= MIN_PIN)  && !(edt_data->gsm_state))
+					{
+						clear_edit_array(edt_data);	    /*	   clear editor array */
+						timer = FALSE;
+						strncpy((char*)edt_data->old_pin,(char*)edt_data->pin,MAX_PIN);
+						strncpy((char*)pin_data->old_pin, (char*)edt_data->old_pin,MAX_PIN);
+						if(edt_data->pin_case_edit EQ INPUT_PIN1)
+						{
+						    set_pin_edt_destroy(edt_data->pin_edt_win);
+							SEND_EVENT(pin_data->pin_win,PIN1_END,0,pin_data);
+						}
+
+#ifdef SIM_PERS                        
+                         			else if(edt_data->pin_case_edit EQ INPUT_SIM_PLOCK)
+                         			{
+						    set_pin_edt_destroy(edt_data->pin_edt_win);
+							SEND_EVENT(pin_data->pin_win,SIM_PLOCK_END,0,pin_data);
+						}
+
+		                         	else if(edt_data->pin_case_edit EQ INPUT_SIM_FCPWD)
+                         			{
+						    set_pin_edt_destroy(edt_data->pin_edt_win);
+							SEND_EVENT(pin_data->pin_win,SIM_FCPWD_END,0,pin_data);
+						}
+						//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+						else if(edt_data->pin_case_edit EQ INPUT_SIM_MKPWD)
+                         			{
+						    set_pin_edt_destroy(edt_data->pin_edt_win);
+							SEND_EVENT(pin_data->pin_win,SIM_MKPWD_END,0,pin_data);
+						}	  
+                         
+#endif
+						else
+						{
+						    set_pin_edt_destroy(edt_data->pin_edt_win);
+							SEND_EVENT(pin_data->pin_win,PIN2_END,0,pin_data);
+						}
+					}
+					else
+					{
+						if(kc->code EQ KCD_HASH)
+						{	
+							if (!(edt_data->gsm_state))	/* could become gsm */
+							{
+								check_pins(win,edt_data);
+								if(edt_data->gsm_state)
+									pin_data->gsm_state = edt_data->gsm_state;
+							}
+							else /* finish gsm string */
+							{
+								timer = FALSE;
+								if(edt_data->pin_case_edit EQ INPUT_PIN1)
+									pin_data->pin_case = PIN1_REQ_OLD;
+								else
+									pin_data->pin_case = PIN2_REQ_OLD;
+								//xrashmic 1 Jul, 2006 OMAPS00075784
+								//Blue screen fix - Wrong window was being sent
+								gsm_sec_execute_set(pin_data->pin_win,edt_data);	    /* execute gsm string */
+
+							}
+						}
+					}
+					break;
+
+				/* PUK1 and PUK2 */
+				
+				case INPUT_PUK1:
+				case INPUT_PUK2:
+					if ((strlen((char*)edt_data->pin) >= MIN_PIN) && !(edt_data->gsm_state)) /* finish of PUK entering */
+					{
+						clear_edit_array (edt_data);		/* clear editor array */
+						timer = FALSE;
+						strncpy((char*)edt_data->puk,(char*)edt_data->pin,MAX_PIN);/* store puk  */
+						strncpy((char*)pin_data->puk, (char*)edt_data->puk,MAX_PIN);
+						if( pin_data->pin_case EQ INPUT_PUK1) 
+						{
+							    set_pin_edt_destroy(edt_data->pin_edt_win);
+								SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN,0,pin_data);/* entering new pin1 start*/
+						}
+						else
+						{
+						    set_pin_edt_destroy(edt_data->pin_edt_win);
+							SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN2,0,pin_data);/* entering new pin2 start*/
+						}
+					}
+					else
+					{
+						if(kc->code EQ KCD_HASH)
+						{		
+							if (!(edt_data->gsm_state))/* could become gsm	    */
+							{
+								check_pins(win,edt_data);
+								if(edt_data->gsm_state)
+									pin_data->gsm_state = edt_data->gsm_state;
+							}
+							else /* finish gsm string  */
+							{
+								timer = FALSE;
+								//xrashmic 1 Jul, 2006 OMAPS00075784
+								//Blue screen fix - Wrong window was being sent
+								gsm_sec_execute_set(pin_data->pin_win,edt_data);	    /* execute gsm string */
+
+							}
+						}
+					}
+					break;
+					
+				case INPUT_NEW_PIN:
+				case INPUT_NEW_PIN2:
+
+		#ifdef SIM_PERS
+                            case INPUT_NEW_SIM_PLOCK:
+                #endif
+					if ((strlen((char*)edt_data->pin) >= MIN_PIN)  && !(edt_data->gsm_state))
+					{
+						clear_edit_array (edt_data);			  /* clear editor array */
+						timer = FALSE;
+						strncpy((char*)edt_data->new_pin, (char*)edt_data->pin,MAX_PIN);	  /*  store new pin	  */
+						strncpy((char*)pin_data->new_pin, (char*)edt_data->new_pin,MAX_PIN);
+						if(pin_data->pin_case EQ INPUT_NEW_PIN )
+						{
+						    set_pin_edt_destroy(edt_data->pin_edt_win);       /* entering new pin1 again*/
+							SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN_AGAIN,0,pin_data);
+						}
+					
+				#ifdef SIM_PERS
+			             		else if(pin_data->pin_case EQ INPUT_NEW_SIM_PLOCK)
+                                       	{
+                                           	set_pin_edt_destroy(edt_data->pin_edt_win);
+                                           	SEND_EVENT(pin_data->pin_win,INPUT_NEW_SIM_PLOCK_AGAIN,0,pin_data);
+                                         }
+	                    #endif
+						else
+						{
+						    set_pin_edt_destroy(edt_data->pin_edt_win);       /* entering new pin1 again*/
+							SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN2_AGAIN,0,pin_data);
+						}
+					}
+					else
+					{
+						if(kc->code EQ KCD_HASH)
+						{	
+							if(!(edt_data->gsm_state)) /* could become gsm	    */
+							{
+								check_pins(win,edt_data);
+								if(edt_data->gsm_state)
+						       		pin_data->gsm_state = edt_data->gsm_state;
+							}
+							else /* finish gsm string  */
+							{
+								timer = FALSE;
+
+								if(edt_data->pin_case_edit EQ INPUT_NEW_PIN)
+									pin_data->pin_case = PIN1_REQ_OLD;
+								else
+									pin_data->pin_case = PIN2_REQ_OLD;
+								//xrashmic 1 Jul, 2006 OMAPS00075784
+								//Blue screen fix - Wrong window was being sent
+								gsm_sec_execute_set(pin_data->pin_win,edt_data);	    /* execute gsm string */
+
+							}
+						}
+					}
+					break;
+
+	#ifdef SIM_PERS
+                            case INPUT_NEW_SIM_PLOCK_AGAIN:
+       #endif						
+				case INPUT_NEW_PIN_AGAIN:
+				case INPUT_NEW_PIN2_AGAIN:
+						if ((strlen((char*)edt_data->pin) >= MIN_PIN) && !(edt_data->gsm_state))
+						{
+							clear_edit_array (edt_data);			  /* clear editor array */
+							timer = FALSE;
+							if(strcmp((char*)edt_data->pin, (char*)pin_data->new_pin) EQ 0) /* compare PINs successfull*/
+							{
+								strncpy((char*)pin_data->new_pin, (char*)edt_data->pin,MAX_PIN);
+								if(pin_data->pin_case EQ INPUT_NEW_PIN_AGAIN)
+								{
+								    set_pin_edt_destroy(edt_data->pin_edt_win);
+									SEND_EVENT(pin_data->pin_win,NEW_PIN_END,0,pin_data);/* changing PIN1 */
+								}
+						#ifdef SIM_PERS
+                                                		else if (pin_data->pin_case EQ INPUT_NEW_SIM_PLOCK_AGAIN)
+                                                   	{
+                                                     		set_pin_edt_destroy(edt_data->pin_edt_win);
+                                                    		SEND_EVENT(pin_data->pin_win, NEW_SIM_PLOCK_END,0,pin_data);
+                                                   	}
+          					#endif
+								else
+								{
+								    set_pin_edt_destroy(edt_data->pin_edt_win);
+									SEND_EVENT(pin_data->pin_win,NEW_PIN2_END,0,pin_data);/* changing PIN2 */
+								}
+							}
+							else
+							{									/* new PIN != new PIN again */
+
+								if(pin_data->pin_case EQ INPUT_NEW_PIN_AGAIN)
+								{
+									set_pin_edt_destroy(edt_data->pin_edt_win);
+									SEND_EVENT(pin_data->pin_win,NEW_PIN_FAIL,0,NULL);
+								}
+						#ifdef  SIM_PERS  
+								else if(pin_data->pin_case EQ INPUT_NEW_SIM_PLOCK_AGAIN)
+								{
+                                        				set_pin_edt_destroy(edt_data->pin_edt_win);
+                                        				SEND_EVENT(pin_data->pin_win,NEW_SIM_PLOCK_FAIL,0,NULL);
+                                 				}
+                                        #endif		
+								else
+								{
+									set_pin_edt_destroy(edt_data->pin_edt_win);
+									SEND_EVENT(pin_data->pin_win,NEW_PIN2_FAIL,0,NULL);
+								}
+							}
+						}
+						else
+						{
+							if(kc->code EQ KCD_HASH)
+							{
+								if (!(edt_data->gsm_state)) /* could become gsm	    */
+								{
+									check_pins(win,edt_data);
+									if(edt_data->gsm_state)
+							       		pin_data->gsm_state = edt_data->gsm_state;
+								}
+								else /* finish gsm string  */
+								{
+									timer = FALSE;
+									if(edt_data->pin_case_edit EQ INPUT_NEW_PIN_AGAIN)
+										pin_data->pin_case = PIN1_REQ_OLD;
+									else
+										pin_data->pin_case = PIN2_REQ_OLD;
+								//xrashmic 1 Jul, 2006 OMAPS00075784
+								//Blue screen fix - Wrong window was being sent
+								gsm_sec_execute_set(pin_data->pin_win,edt_data);	    /* execute gsm string */
+
+								}
+							}
+						}
+						break;
+					
+					default:
+						break;
+				}
+				break;
+				
+/* KCD_HUP */
+			case KCD_HUP:
+				if( edt_data->pin_case_edit != INPUT_PUK1)//xvilliva SPR13623
+				{
+				clear_edit_array(edt_data);
+				timer = FALSE;
+				set_pin_edt_destroy(edt_data->pin_edt_win);
+	    		SEND_EVENT(pin_data->pin_win,SETT_ABORT,0,NULL); // abort settings menu
+				}
+				break;
+
+/* KCD RIGHT */
+
+			case KCD_RIGHT: 	
+			//nm, go back to the submenu if there is no character on the screen
+				if(strlen((char*)edt_data->pin) == 0 && edt_data->pin_case_edit != INPUT_PUK1)//xvilliva SPR13623
+				{
+					clear_edit_array(edt_data);
+					timer = FALSE;
+					set_pin_edt_destroy(edt_data->pin_edt_win);
+		    		SEND_EVENT(pin_data->pin_win,SETT_ABORT,0,NULL); // abort settings menu
+					return 1;			    
+				}
+
+				if(edt_data->editor_index EQ 0)
+					;
+				else
+					edt_data->editor_index--;
+
+				edt_data->pin[edt_data->editor_index] = '\0';
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				ATB_edit_DeleteLeft(edt_data->editor, TRUE); /* SPR#2342 - SH */
+#else /* NEW_EDITOR */
+				edtChar(edt_data->editor_handle,ecBack);/* delete character    */
+#endif /* NEW_EDITOR */
+
+				if(strlen((char*)edt_data->pin)<MIN_PIN)
+				{
+				}
+
+				edt_data->emergency_call = FALSE;
+				if(edt_data->pin_case_edit EQ INPUT_PUK1)  /* special case ?? */
+					winShow(edt_data->pin_edt_win);
+				else
+				{
+					check_set_pins(win,edt_data);	       /* check remain for emergency call  */
+					winShow(edt_data->pin_edt_win);
+				}
+			    break;
+			    
+			default:
+				break;
+		}
+	}
+#ifdef SIM_PERS
+	else
+	{
+		switch(kc->code)
+		{
+		case KCD_0:
+		case KCD_1:
+		case KCD_2:
+		case KCD_6:
+		case KCD_8:
+		case KCD_9:
+			if(edt_data->editor_index < MAX_DIG)
+			{
+				edt_data->pin[edt_data->editor_index] = '0' + kc->code;
+
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				ATB_edit_AsciiChar(edt_data->editor, '*', TRUE);
+#else /* NEW_EDITOR */
+				edtChar(edt_data->editor_handle,'*');/* hide security code */
+#endif /* NEW_EDITOR */
+
+				edt_data->editor_index++;
+				check_set_pins(win,edt_data); /* digits check depends on status pin_case */
+				if(edt_data->gsm_state)
+					pin_data->gsm_state = edt_data->gsm_state;
+			}
+			winShow(edt_data->pin_edt_win);
+			break;
+				
+	
+		case KCD_LEFT:
+
+			if(pin_emergency_call == TRUE)
+			{
+				callNumber((UBYTE *)pin_emerg_call);
+				pin_emergency_call = FALSE;
+			}
+			break;
+
+		case KCD_RIGHT: 	
+
+//				if( edt_data->edtbuf == '\0' )
+//					break;
+				if(edt_data->editor_index EQ 0)
+					;
+				else
+					edt_data->editor_index--;
+
+				edt_data->pin[edt_data->editor_index] = '\0';
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				ATB_edit_DeleteLeft(edt_data->editor, TRUE); /* SPR#2342 - SH */
+#else /* NEW_EDITOR */
+				edtChar(edt_data->editor_handle,ecBack);/* delete character    */
+#endif /* NEW_EDITOR */
+
+				if(strlen((char*)edt_data->pin)<MIN_PIN)
+				{
+				}
+
+				edt_data->emergency_call = FALSE;
+				if(edt_data->pin_case_edit EQ INPUT_PUK1)  /* special case ?? */
+					winShow(edt_data->pin_edt_win);
+				else
+				{
+					check_set_pins(win,edt_data);	       /* check remain for emergency call  */
+					winShow(edt_data->pin_edt_win);
+				}
+			    break;
+
+			default:
+				break;
+			}	
+	}
+#endif /* SIM_PERS */
+	if (timer)
+		tim_start(edt_data->tim_out_handle);/* start timer for entering */
+	return 1;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_edt_kbd_long_cb
+ $Description:	Callback function for keyboard long
+ $Returns:		status int
+ $Arguments:	event, keyboard control block
+*******************************************************************************/
+static int set_pin_edt_kbd_long_cb (T_MFW_EVENT event,T_MFW_KBD *  kc)
+{
+    T_MFW_HND win = mfw_parent(mfw_header());
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;//pin edt data
+
+    TRACE_FUNCTION("MmiPins:set_pin_edt_kbd_long_cb");
+
+    if ((event & KEY_CLEAR) && (event & KEY_LONG))
+	{
+			timStop(edt_data->tim_out_handle); /* stop entering timer	*/
+			clear_edit_array(edt_data);
+			memset(edt_data->pin,'\0',sizeof(edt_data->pin));/* initial string */
+			
+			/* SPR#1428 - SH - New Editor: string changed, update word-wrap*/
+	#ifdef NEW_EDITOR
+			ATB_edit_Refresh(edt_data->editor);
+	#endif /* NEW_EDITOR */
+			edt_data->editor_index = 0;
+			edt_data->emergency_call = FALSE;
+			winShow(edt_data->pin_edt_win);
+	}
+
+  return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:	check_set_pins 
+ $Description:	check input string for settings
+ $Returns:		void
+ $Arguments:	window pin editor attributes
+*******************************************************************************/
+static void check_set_pins (T_MFW_HND win,void * edt_pin)
+{
+	T_pin_edt * edt_data = (T_pin_edt *)edt_pin;
+
+	TRACE_FUNCTION("MmiPins: check_set_pins");
+
+	if(strlen((char*)edt_data->pin)NEQ 0)
+    {
+	    if (strlen((char*)edt_data->pin) > FIRST_DIGIT)	 /* for every character  */
+			gsm_set_test(win,edt_data);	/* test if GSM string or not*/
+		/*API - 10/10/02 - 1162 - check the value entered into the PIN editor to see if the 
+								  value being entered in is an emergency number.
+		*/
+		if (strlen((char*)edt_data->pin) EQ (MIN_PIN - 1) || strlen((char*)edt_data->pin) EQ (MIN_PIN -2))
+		{
+			TRACE_FUNCTION("cm_check_emergency() TRACE PINS 1");
+			if(cm_check_emergency((U8*)edt_data->pin))/* test emergency call*/
+			{
+				edt_data->emergency_call = TRUE;
+				pin_emergency_call = TRUE;
+				memset(pin_emerg_call, '\0',sizeof(pin_emerg_call));
+				strcpy((char *)pin_emerg_call, (char *)edt_data->pin);
+			}
+			else
+			{
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+				if((edt_data->pin_case_edit EQ CARD_REJECTED) OR (edt_data->pin_case_edit EQ INSERT_CARD)
+					OR (edt_data->pin_case_edit EQ SHOW_IMEI_INVALID)				
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS	
+					//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+					OR(edt_data->pin_case_edit EQ NO_MEPD_DATA)
+#endif					
+					)
+				{			  /* delete all digits	    */
+					clear_edit_array (edt_data);  /*  clear editor array	 */
+					memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string */
+					edt_data->editor_index = 0;
+				}
+				edt_data->emergency_call = FALSE;
+				pin_emergency_call = FALSE;
+			}
+		}
+		else
+		{
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+			if((edt_data->pin_case_edit EQ CARD_REJECTED) OR (edt_data->pin_case_edit EQ INSERT_CARD)
+				OR (edt_data->pin_case_edit EQ SHOW_IMEI_INVALID)				
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS					
+				//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+				OR (edt_data->pin_case_edit EQ NO_MEPD_DATA)
+#endif				
+				)
+			{			  /* delete all digits	    */
+				clear_edit_array (edt_data);  /*  clear editor array	 */
+				memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string */
+				edt_data->editor_index = 0;
+			}
+			edt_data->emergency_call = FALSE;
+			pin_emergency_call = FALSE;
+		}
+		/*SPR 2145, if entering PIN1, then make sure no more than 8 characters are entered*/
+		if(((strlen((char*)edt_data->pin) > MAX_PIN) || /*no more than 16 digits allowed*/
+			(edt_data->pin_case_edit EQ INPUT_PIN1 && strlen((char*)edt_data->pin) > MAX_PIN_EN_DIS ))/*PIN1 should be no more than 8 digits*/
+			&& !(edt_data->gsm_state)) /*allowed up to 30 digits if entering GSM string*/
+		{
+
+			if(edt_data->editor_index EQ 0)
+				;
+			else
+				edt_data->editor_index--;
+
+			edt_data->pin[edt_data->editor_index] = '\0';
+
+			/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+			ATB_edit_DeleteLeft(edt_data->editor, TRUE); /* SPR#2342 - SH */
+#else /* NEW_EDITOR */
+			edtChar(edt_data->editor_handle,ecBack);/* delete character    */
+#endif /* NEW_EDITOR */
+		}
+	}
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	sett_pin_mess 
+ $Description:	help function for message dialog
+ $Returns:		void
+ $Arguments:	window, event
+*******************************************************************************/
+static void sett_pin_mess(T_MFW_HND win,USHORT event)
+{
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	T_MFW_HND pin_mess_win;
+	TRACE_FUNCTION("MmiPins:sett_pin_mess");
+
+	pin_mess_win = set_pin_mess_create(pin_data->pin_win);
+	if(pin_mess_win)
+	{
+		SEND_EVENT(pin_mess_win,event,0,pin_data);
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_mess_create
+ $Description:	Creation of an instance  for the PIN Message dialog settings
+				Type of dialog : SINGLE_DYNAMIC
+ $Returns:		void
+ $Arguments:	parent window
+*******************************************************************************/
+T_MFW_HND set_pin_mess_create(T_MFW_HND parent_window)
+{
+  T_pin_mess * data = (T_pin_mess *)ALLOC_MEMORY (sizeof (T_pin_mess));
+  T_MFW_WIN	* win;
+
+  data->pin_mess_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)set_pin_mess_win_cb);
+
+  TRACE_FUNCTION("MmiPins: set_pin_mess_create");
+
+  if (data->pin_mess_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)set_pin_messages;
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_mess_win)->data;
+  win->user		      = (void *) data;
+
+  /*
+   * return window handle
+   */
+  return data->pin_mess_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:	set pin_mess_destroy
+ $Description:	Destroy the pin message dialog settings
+ $Returns:		void
+ $Arguments:	window
+*******************************************************************************/
+void set_pin_mess_destroy  (T_MFW_HND own_window)
+{
+  T_pin_mess * data;
+  T_MFW_WIN * win;
+
+
+  TRACE_FUNCTION("MmiPins: set_pin_mess_destroy");
+
+  if (own_window)
+  {
+	  win = ((T_MFW_HDR *)own_window)->data;
+	  data = (T_pin_mess *)win->user;
+
+	  if(data)
+	  {
+
+      /*
+       * Delete WIN Handler
+       */
+	  win_delete (data->pin_mess_win);
+	      FREE_MEMORY((void*)data,(sizeof(T_pin_mess)));
+	  }
+   }
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_mess_win_cb
+ $Description:	Callback function for message windows
+ $Returns:		void
+ $Arguments:	event, window
+*******************************************************************************/
+static int set_pin_mess_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  /*
+   * Top Window has no output
+   */
+  return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_messages
+ $Description:	Message Dialog for PIN/PUK handling in settings
+ $Returns:		void
+ $Arguments:	win, event, value, parameter
+*******************************************************************************/
+void set_pin_messages(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_mess * mess_data = (T_pin_mess *)win_data->user;
+
+	T_DISPLAY_DATA display_info;
+
+//    U8 uMode;   /* Warning Correction */
+	
+	T_MFW_SIM_PIN_STATUS status; //need to check the Pin 1 status
+	
+	T_pin * pin_data = (T_pin *)parameter;
+#ifdef SIM_PERS
+T_MFW status1 = 0, status2;
+  int max=0,max1=0;
+	int curr= 0,curr1=0;
+#endif
+  TRACE_FUNCTION("Mmi.Pins:set_pin_messages");
+
+  /*
+   * depending on signal
+   */
+	
+  switch (event)
+  {
+	case PIN1_REQ_ATT:
+	case PIN2_REQ_ATT:
+	case PUK1_REQ_VER_INFO:
+	case GSM_FAIL:
+	case NEW_PIN_FAIL:
+	case NEW_PIN2_FAIL:
+	case PIN_OK_INFO:
+	case PIN1_CH_SUCC:
+	case PIN2_CH_SUCC:
+	case PUK1_UNBL_FAIL_INFO:
+	case PUK1_UNBL_SUCC:
+	case PUK1_UNBL_FATAL_ERROR:
+	case PIN1_ENAB_END:
+	case PIN1_DISAB_END:
+	case PIN1_ENDIS_FAIL:
+#ifdef SIM_PERS     
+    	case SIM_LOCK_ENDIS_FAIL:
+      	case SIM_LOCK_ENDSUCC:
+       case SIM_LOCK_FCPWD_FAIL:
+       case SIM_LOCK_FCPWDSUCC:
+	case SIM_LOCK_STATUS:
+    	case NEW_SIM_PLOCK_FAIL:
+    	case SIM_LOCK_NEW_ENDSUCC:
+    	case SIM_LOCK_NEW_ENDISFAIL:
+    	case SIM_LOCK_NEW_ENDSUCC_CKEY:	
+    	case SIM_LOCK_ALREADY_ENDIS:
+    	case SIM_LOCK_SIM_REM:
+	case SMLK_SHOW_FC_FAIL1:	
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+       case SIM_LOCK_MKPWD_FAIL:	//Master unlock failed
+       case SIM_LOCK_MKPWDSUCC:	//Master unlock success
+       case SIM_LOCK_BUSY:			//Category unlock return with Busy error from ACI
+       //x0pleel 26 July, 2006 ER: OMAPS00087586, OMAPS00087587
+       case SIM_LOCK_BUSY_UNBLOCK: //ME unblock return Busy error from aCI
+#endif       
+	case FDN_FAIL:
+	case FDN_ACT_END:
+	case FDN_DEACT_END:
+	case PIN1_STATUS:
+	case PIN2_SIM_FAILURE:      // Marcus: Issue 1609: 23/01/2003 - failure to verify PIN2
+
+
+		dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNull, TxtNull,  COLOUR_STATUS_PINS);
+		
+		switch(event)
+		{
+		   case PIN1_REQ_ATT:
+			  pin_data->pin_case = PIN1_REQ_OLD;
+			  display_info.TextId = TxtPINFail;
+			  if(pin_data->pin_retries EQ 1)
+				display_info.TextId2 = TxtOneAttemptLeft;
+			  else
+				display_info.TextId2 = TxtTwoAttemptsLeft;
+			  break;
+		   case PIN2_REQ_ATT:
+			  pin_data->pin_case = PIN2_REQ;
+			  display_info.TextId = TxtPINFail;
+			  if(pin_data->pin_retries EQ 1)
+				display_info.TextId2 = TxtOneAttemptLeft;
+			  else
+				display_info.TextId2 = TxtTwoAttemptsLeft;
+			  break;
+		   case PIN1_CH_SUCC:
+			  pin_data->pin_case = PIN1_CH_END;
+			  display_info.TextId = TxtChangPin;
+			  break;
+		   case PIN2_CH_SUCC:
+			  pin_data->pin_case = PIN2_CH_END;
+			  display_info.TextId = TxtChangPIN2;
+			  break;
+#ifdef SIM_PERS
+		  case SIM_LOCK_NEW_ENDSUCC:
+           		  pin_data->pin_case = SIM_LOCK_NEW_ENDSUCC;
+			  display_info.TextId = TxtPsLockChanged;
+			  break;
+			  
+		  case SIM_LOCK_ENDSUCC:
+		  	  pin_data->pin_case = SIM_LOCK_ENDSUCC;
+			  if(pin_data->set_state == ENABLE)
+			  	display_info.TextId = TxtLockActivated;
+			  else if(pin_data->set_state == DISABLE)
+			  	display_info.TextId = TxtLockDeactivated;
+			  break;	
+
+		  case SIM_LOCK_ALREADY_ENDIS:
+		  	  pin_data->pin_case = SIM_LOCK_ALREADY_ENDIS;
+			  if(pin_data->set_state == ENABLE)
+			  	display_info.TextId = TxtAlreadyLocked;
+			  else if(pin_data->set_state == DISABLE)
+			  	display_info.TextId = TxtAlreadyUnlocked;
+			  break;	
+		
+		case SIM_LOCK_NEW_ENDSUCC_CKEY:
+			 {
+				char buf1[20], buf2[20] ;
+				int curr_fail_reset, curr_succ_reset;
+				TRACE_FUNCTION("BMI:SIM_LOCK_NEW_ENDSUCC_CKEY");
+				mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+				pin_data->pin_case = SIM_LOCK_NEW_ENDSUCC_CKEY;
+				sprintf((char*)buf1,"%d attempts left",curr_succ_reset);
+				sprintf((char*)buf2,"%s", "FC Reset-Success");								
+				display_info.TextString= buf1;
+				display_info.TextString2 = buf2;
+			 }
+			  break;
+
+		case SMLK_SHOW_FC_FAIL1:
+			  {
+				char buf1[20], buf2[20] ;
+				int curr_fail_reset, curr_succ_reset;
+				mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+				pin_data->pin_case = PUK1_REQ;
+				sprintf((char*)buf1,"%d attempts left",curr_fail_reset);
+				sprintf((char*)buf2,"%s", "FC Reset-Failure");								
+				display_info.TextString= buf1;
+				display_info.TextString2 = buf2;
+				  break;
+			  }
+
+          case SIM_LOCK_FCPWDSUCC:
+			 {
+				char buf1[20], buf2[20] ;
+				int curr_fail_reset, curr_succ_reset;
+				mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+				sprintf((char*)buf1,"%d attempts left",curr_succ_reset);
+				sprintf((char*)buf2,"%s", "FC Reset-Success");								
+				display_info.TextString= buf2;
+				display_info.TextString2 = buf1;
+			 }
+			  	break;			  	
+
+		//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+		//Displays a dialog saying "master unlock success"
+          	case SIM_LOCK_MKPWDSUCC:
+			 {
+			 	char buf1[25];
+				sprintf((char*)buf1,"%s"," Master Unlock Success");
+				display_info.TextString= buf1;
+				display_info.TextString2 = 0;
+			 }
+			  	break;	
+#endif
+
+		   case PUK1_REQ_VER_INFO:
+			  if((pin_data->set_state EQ CHANGE_PIN2) ||
+				 (pin_data->set_state EQ PIN2_CHECK) ||
+				  (pin_data->set_state EQ FDN_ACTIV) ||
+				  (pin_data->set_state EQ FDN_DEACTIV))
+			  {
+					pin_data->pin_case = PUK2_REQ;
+			  }
+			  else
+			  {
+					pin_data->pin_case = PUK1_REQ;
+			  }
+			  display_info.TextId =TxtPINBlock;
+			  break;
+			  
+			case GSM_FAIL:
+			  if(pin_data->set_state EQ IDLE_GSM)
+				  pin_data->pin_case = IDLE_GSM_FAIL;
+			  display_info.TextId = TxtNotAcc;
+			  break;   
+		}
+		 switch(event)
+		 {
+		   case PUK1_UNBL_FATAL_ERROR:
+			  if((pin_data->set_state EQ CHANGE_PIN2) ||
+				 (pin_data->set_state EQ FDN_ACTIV) ||
+				 (pin_data->set_state EQ FDN_DEACTIV))
+			  {
+					pin_data->pin_case = PUK2_REQ;
+			  }
+			  else if(pin_data->set_state == IDLE_GSM)
+				  pin_data->pin_case = IDLE_GSM_FAIL;
+			  else
+			  {
+					pin_data->pin_case = PUK1_REQ;
+			  }
+			  display_info.TextId = TxtNotAcc;
+			  break;
+		   case NEW_PIN_FAIL:
+			pin_data->pin_case = INPUT_NEW_PIN;
+			 display_info.TextId = TxtNewPIN;
+			  display_info.TextId2 = TxtCodeInc;
+			 break;
+		   case NEW_PIN2_FAIL:
+			 pin_data->pin_case = INPUT_NEW_PIN2;
+			 display_info.TextId = TxtNewPIN2;
+			 display_info.TextId2 = TxtCodeInc;
+			 break;
+		   case PIN_OK_INFO:
+			TRACE_FUNCTION("PIN_OK_INFO");
+			  pin_data->pin_case = PIN_OK;
+			  display_info.TextId = TxtPINOK;
+			  break;		   
+			case PUK1_UNBL_FAIL_INFO:
+			  if((pin_data->set_state EQ CHANGE_PIN2) ||
+				 (pin_data->set_state EQ PIN2_CHECK) ||
+				  (pin_data->set_state EQ FDN_ACTIV) ||
+				  (pin_data->set_state EQ FDN_DEACTIV))
+			  {
+					pin_data->pin_case = PUK2_REQ;
+
+			  }
+			  else if(pin_data->set_state EQ IDLE_GSM)
+			  {
+					pin_data->pin_case = IDLE_GSM_FAIL;
+
+			  }
+			  else
+			  {
+					pin_data->pin_case = PUK1_REQ;
+
+			  }
+
+			  display_info.TextId2 = TxtCodeInc;
+
+			  break;
+			case PUK1_UNBL_SUCC:
+			  if((pin_data->set_state EQ CHANGE_PIN2) ||
+				 (pin_data->set_state EQ PIN2_CHECK) ||
+				  (pin_data->set_state EQ FDN_ACTIV) ||
+				  (pin_data->set_state EQ FDN_DEACTIV))
+				display_info.TextId = TxtNewPIN2;
+			  else
+				display_info.TextId = TxtNewPIN;
+			  pin_data->pin_case = UNBL_OK;    
+			  display_info.TextId2 = TxtChanged;
+			  break;
+			case PIN1_ENAB_END:
+			  pin_data->pin_case = UNBL_OK;
+			  pin_data->set_state = DEFAULT;
+			display_info.TextId = TxtPinCode;
+			  display_info.TextId2 = TxtActivated;
+			  break;
+			case PIN1_DISAB_END:
+			  pin_data->pin_case = UNBL_OK;
+			  pin_data->set_state = DEFAULT;
+			  display_info.TextId = TxtPinCode;
+			  display_info.TextId2 = TxtDeActivated;
+			  break;
+			case FDN_ACT_END:
+			  pin_data->pin_case = FDN_UNBL_OK;
+			  display_info.TextId = TxtActivated;
+			  break;
+			case FDN_DEACT_END:
+			  pin_data->pin_case = FDN_UNBL_OK;
+			  display_info.TextId = TxtDeActivated;
+			  break;
+			case FDN_FAIL:
+			  pin_data->pin_case = UNBL_OK;
+			  display_info.TextId = TxtFailed;
+			  break;
+			case PIN1_ENDIS_FAIL:
+			  pin_data->pin_case = PIN1_REQ;
+			  display_info.TextId = TxtPINFail;
+			  if(pin_data->pin_retries EQ 1)
+				display_info.TextId2 = TxtOneAttemptLeft;
+			  else
+				display_info.TextId2 = TxtTwoAttemptsLeft;
+			  break;
+#ifdef SIM_PERS         
+ case NEW_SIM_PLOCK_FAIL:
+              pin_data->pin_case = INPUT_NEW_SIM_PLOCK;
+			  display_info.TextId = TxtPsLockConfWrong;
+			  display_info.TextId2 = TxtPsLockConfwrong2;
+			  break;
+		case SIM_LOCK_NEW_ENDISFAIL:
+				{
+					 int max=0;
+                                   int curr= 0;
+			               char buf[20];
+			               pin_data->pin_case = FAILURE_PASS_CHG;
+			               mfw_simlock_check_status(mmi_simlock_locktype,&max,&curr);
+					 if( max != 0xff)
+					 {
+			               	sprintf((char*)buf,"%d tries left",(curr));
+					       display_info.TextId = TxtCodeInc;
+			               	display_info.TextString2 = (char*)buf;
+			               	display_info.Identifier = pin_data->pin_case;
+					 }
+					 else
+					 	display_info.TextId = TxtCodeInc;
+			
+			}
+			//display_info.TextId=TxtPassword;
+			//display_info.TextId2 = TxtPassfailed;
+			  break;
+	      case SIM_LOCK_STATUS:
+              	pin_data->pin_case = SIM_LOCK_STATUS;
+          		switch(mfw_simlock_get_lock_status(mmi_simlock_locktype))
+          		{
+                          case MFW_SIM_DISABLE:display_info.TextId = TxtLockDisabled;break;
+                          case  MFW_SIM_ENABLE:display_info.TextId = TxtLockEnabled; break;
+                          case MFW_SIM_BLOCKED:display_info.TextId = TxtBlckPerm;break;
+                          case  MFW_SIM_FAILURE:display_info.TextId = TxtFailed;break;
+               	}
+         		 break;
+
+		  case SIM_LOCK_SIM_REM:
+                 display_info.TextId=TxtNoCard;
+                 break;
+		  
+            case SIM_LOCK_ENDIS_FAIL:
+             if(pin_data->set_state EQ DISABLE)
+             {
+             		
+			char buf[20];
+			
+	              status1 = mfw_simlock_check_status(mmi_simlock_locktype,&max,&curr);
+			  if(status1 != MFW_SIM_BLOCKED && status1 != MFW_SIM_PERM_BLOCKED && ( max != 0xff))
+			  {
+			  	pin_data->pin_case = TXT_SIM_LOCK_ALL;
+				dlg_initDisplayData_TextStr(&display_info,TxtNull,TxtNull,NULL,NULL, COLOUR_STATUS_PINS);
+				TRACE_EVENT(" status is not blocked");
+				TRACE_EVENT_P2("The current and max value are %d and %d",curr,max);
+				sprintf((char*)buf,"%d tries left",(curr));
+				display_info.TextId = TxtCodeInc;
+				display_info.TextString2 = (char*)buf;
+				display_info.Identifier = pin_data->pin_case;
+			  }
+			  else
+			  	display_info.TextId = TxtCodeInc;
+		
+              //display_info.TextId = TxtPsLockWrong;
+              }
+             else
+             	{
+			display_info.TextId = TxtCodeInc;				
+             	}
+		break;
+
+	//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+	//Displays a dialog saying "Busy"
+	case SIM_LOCK_BUSY:
+		pin_data->pin_case = TXT_SIM_LOCK_ALL;
+		display_info.TextId = TxtBusy;
+		break;
+
+		
+	//x0pleela 26 July, 2006 ER: OMAPS00087586, OMAPS00087587
+	//Displays a dialog saying "Busy" for wrong entry of unblocking password
+	case SIM_LOCK_BUSY_UNBLOCK:
+		pin_data->pin_case =PUK1_REQ ;
+		display_info.TextId = TxtBusy;
+		break;
+
+	case SIM_LOCK_FCPWD_FAIL:
+			  {
+				char buf1[20], buf2[20] ;
+				int curr_fail_reset, curr_succ_reset;
+				mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+				sprintf((char*)buf1,"%d attempts left",curr_fail_reset);
+				sprintf((char*)buf2,"%s", "FC Reset-Failure");								
+				display_info.TextString= buf2;
+				display_info.TextString2 = buf1;
+				  break;
+			  }
+			/*	display_info.TextId = TxtCodeInc;
+				break;*/
+	//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+	//Displays a dialog saying "master unlock failed"
+	case SIM_LOCK_MKPWD_FAIL:
+			  {
+				char buf1[25] ;
+				sprintf((char*)buf1,"%s" , "Master Unlock Failed");
+				display_info.TextString= buf1;
+				display_info.TextString2 = 0;
+				  break;
+			  }
+#endif
+
+
+			case PIN1_STATUS:
+			  pin_data->pin_case = PIN1_STATUS;
+
+
+
+				TRACE_FUNCTION("set_pin_messages:check the pinrequest status");
+
+				status.type = MFW_SIM_PIN1;//check the PIN1
+				sim_pin_status(&status);
+
+				if(status.set EQ MFW_SIM_DISABLE) /*Display the "Disabled Pin1 */
+				{
+					display_info.TextId = TxtDisabled;
+				}
+				else
+				{
+					display_info.TextId = TxtEnabled; /*Display the "Enabled Pin1 */
+				}
+
+		
+
+			  display_info.TextId2 = 0;
+			  display_info.TextString2 = 0;
+			  break;
+
+            /* Marcus: Issue 1609: 23/01/2003: Start */
+            case PIN2_SIM_FAILURE:
+                /*
+                 * Failure to verify PIN2. Display
+                 *  PIN2 Code
+                 *  Not Available
+                 * Then cancel back to the menu.
+                 */
+                pin_data->pin_case        = SETT_ABORT;
+                display_info.TextId       = TxtPin2Code;
+                display_info.TextId2      = TxtNotAvailable;
+                display_info.TextString2 = 0;
+                break;
+            /* Marcus: Issue 1609: 23/01/2003: End */
+			  
+		 	}
+
+#ifdef SIM_PERS 
+    TRACE_EVENT_P1(" Status Bef: %d", status1);
+    status1 = mfw_simlock_check_status(mmi_simlock_locktype,&max,&curr);
+	    status2 = mfw_simlock_check_status(0,&max1,&curr1);
+		TRACE_EVENT_P1("Status Aft: %d", status1);
+		
+  	if(((event==SIM_LOCK_NEW_ENDISFAIL)||(event == SIM_LOCK_ENDIS_FAIL)) && (curr == 0))
+    {
+      TRACE_EVENT("SIM_LOCK_ENDIS_FAIL,MFW_SIM_BLOCKED");
+      pin_data->puk_request = TRUE;
+      C_KEY_REQ=1;
+		  FCUnlock_flag=1;
+      set_pin_mess_destroy(mess_data->pin_mess_win);
+     SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+    }
+  	else if(status2 ==  MFW_SIM_PERM_BLOCKED)
+    {
+      TRACE_EVENT("MFW_SIM_PERM_BLOCKED");
+      //pin_data->puk_request = TRUE;
+      //C_KEY_REQ=1;
+		  //FCUnlock_flag=1;
+		  perm_blocked =1;
+      set_pin_mess_destroy(mess_data->pin_mess_win);
+      SEND_EVENT(pin_data->pin_win,PERM_BLK,0,0);
+    }
+    else
+#endif  /*SIM_PERS*/
+    {
+	if (display_info.TextId2 == TxtOneAttemptLeft)
+		dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)set_pin_info_cb, FIVE_SECS, KEY_LEFT );
+	else
+	  	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)set_pin_info_cb, THREE_SECS, KEY_LEFT );
+
+	 display_info.Identifier = pin_data->pin_case;
+	set_pin_mess_destroy(mess_data->pin_mess_win);
+
+	info_dialog(pin_data->pin_win,&display_info); //information screen
+	//	Nov 03, 2005 DR: OMAPS00052032 - xpradipg  
+	 dspl_Enable(1);
+    }
+break;
+			
+#ifdef SIM_PERS
+	case PERM_BLK:
+		TRACE_FUNCTION("Enter PERM_BLK");
+		pin_data->display_id1 = TxtPhoneBlocked;
+		pin_data->display_id2 = TxtDealer;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,ME_PERM_BLK,0,pin_data);
+		break;
+
+
+#endif 
+	case PUK1_REQ:
+		TRACE_FUNCTION("Enter PUK_REQ");
+#ifdef SIM_PERS 
+		if( C_KEY_REQ )
+			pin_data->display_id1 = TxtUnblockCode;
+		else
+			
+#endif
+		pin_data->display_id1 = TxtEnterPuk1;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PUK1,0,pin_data);
+		break;
+	case PIN1_REQ:
+		TRACE_FUNCTION(">>>TEXT ID CALLED");
+		pin_data->display_id1 = TxtEnterPin1;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PIN1,0,pin_data);
+		break;
+
+#ifdef SIM_PERS        
+       case TXT_SIM_LOCK_ALL:
+       switch(mmi_simlock_locktype)
+       {
+       	case  MFW_SIM_NLOCK:
+			pin_data->display_id1 = TxtEnterNLock;
+       		break;
+		case  MFW_SIM_SPLOCK:
+			pin_data->display_id1 = TxtEnterSpLock;
+			break;
+		case  MFW_SIM_NSLOCK:
+			pin_data->display_id1 = TxtEnterNsLock;
+			break;
+		case  MFW_SIM_CLOCK:
+			pin_data->display_id1 = TxtEnterCLock;
+			break;
+		case  MFW_SIM_PLOCK:
+			pin_data->display_id1 = TxtEnterPsLock;
+			break;
+	    //x0pleela 25 Sep, 2006 ER: OMAPS00095524			
+	    //Prompting user to enter Blocked Network password
+		case MFW_SIM_PBLOCK:
+			pin_data->display_id1 = TxtEnterPbLock;
+			break;
+		}
+ 		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PLOCK,0,pin_data);
+		break;
+
+	case SIM_LOCK_REQ_FCPWD:
+			pin_data->display_id1 = TxtPassword;
+	 		set_pin_mess_destroy(mess_data->pin_mess_win);
+			SEND_EVENT(pin_data->pin_win,TXT_ENTER_FCPWD,0,pin_data);
+			break;
+//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+	case SIM_LOCK_REQ_MKPWD:
+			pin_data->display_id1 = TxtEnterMasterKey;
+	 		set_pin_mess_destroy(mess_data->pin_mess_win);
+			SEND_EVENT(pin_data->pin_win,TXT_ENTER_MKPWD,0,pin_data);
+			break;
+#endif
+	case PUK2_REQ:
+		pin_data->display_id1 = TxtEnterPuk2;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PUK2,0,pin_data);
+		break;
+	case PIN2_REQ:
+		pin_data->display_id1 = TxtEnterPin2;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PIN2,0,pin_data);
+		break;
+	case INPUT_NEW_PIN:
+#ifdef SIM_PERS
+		if(C_KEY_REQ)
+		{ 
+		
+			int sta;
+			int curr_fail_reset, curr_succ_reset;
+			
+			
+			mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+
+			if( curr_succ_reset )
+			{
+				if( FCUnlock_flag)
+				    sta=mfw_simlock_reset_fc_value((U8*)pin_data->puk,MFW_SIM_FCM) ;
+			   	else
+			   	    sta=mfw_simlock_reset_fc_value((U8*)pin_data->puk,MFW_SIM_FC) ;
+
+				mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+
+				TRACE_EVENT_P1("Input_new_pin: %d", sta);
+				TRACE_EVENT_P1("set_pin_messages: C_KEY_REQ: %d", C_KEY_REQ);
+				
+				if(sta== MFW_SS_OK) 
+				{
+					if(FCUnlock_flag)
+						FCUnlock_flag=0;
+
+					C_KEY_REQ=0;
+					TRACE_EVENT_P1("set_pin_messages: C_KEY_REQ: %d", C_KEY_REQ);
+					TRACE_EVENT("set_pin_messages: SIM_LOCK_NEW_ENDSUCC_CKEY: ");
+				    	pin_data->puk_request = FALSE;
+					set_pin_mess_destroy(mess_data->pin_mess_win);
+				    	SEND_EVENT(pin_data->pin_win,SIM_LOCK_NEW_ENDSUCC_CKEY,0,pin_data);
+			    	}
+			    else if(sta==MFW_SS_FAIL ) //UNBLOCK_FAILURE
+			    	{
+				    	TRACE_EVENT("set_pin_messages: SMLK_SHOW_FC_FAIL1: ");
+			    		set_pin_mess_destroy(mess_data->pin_mess_win);
+
+
+				//x0pleela 11 Sep, 2006  DR: OMASP00094215
+				//Check for Ext_ERR_Busy and send the event accordingly to display a dialog "Busy"
+					//for wrong entry of unblock code
+					if( ( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+					    	(aciErrDesc & 0x0000FFFF) EQ EXT_ERR_Busy)
+					{
+						SEND_EVENT(pin_data->pin_win,SIM_LOCK_BUSY_UNBLOCK,0,pin_data);
+					}
+													 
+			    		//x0pleela 27 Apr, 2006 DR: OMAPS00067919
+			    		//To avoid executing this during bootup sequence
+			    		else if( curr_fail_reset != 0)
+						SEND_EVENT(pin_data->pin_win,SMLK_SHOW_FC_FAIL1,0,pin_data);
+
+					else 
+					{
+						perm_blocked =1;
+						SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+					}
+				}
+			}
+		}
+		else
+#endif
+    {
+		    pin_data->display_id1 = TxtEnterNewPin;
+		    set_pin_mess_destroy(mess_data->pin_mess_win);
+		    SEND_EVENT(pin_data->pin_win,TXT_ENTER_NEW_PIN,0,pin_data);
+			}
+		break;
+	case INPUT_NEW_PIN2:
+		pin_data->display_id1 = TxtNewPIN2;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_NEW_PIN2,0,pin_data);
+		break;
+	case INPUT_NEW_PIN_AGAIN:
+		pin_data->display_id1 = TxtConfPin;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_NEW_PIN_AGAIN,0,pin_data);
+		break;
+	case INPUT_NEW_PIN2_AGAIN:
+		pin_data->display_id1 = TxtConfPin2;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_NEW_PIN_AGAIN2,0,pin_data);
+		break;
+	case PIN1_REQ_OLD:
+		pin_data->display_id1 = TxtOldPIN;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PIN1,0,pin_data);
+		break;
+	case PIN2_REQ_OLD:
+		pin_data->display_id1 = TxtOldPIN2;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PIN2,0,pin_data);
+		break;
+	case FDN_ACTIVATED:
+		pin_data->display_id1 = TxtPleaseWait;//TxtActivated;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,FDN_WAIT,0,pin_data);
+		break;
+	case ADN_ACTIVATED:
+		pin_data->display_id1 = TxtPleaseWait;//TxtDeActivated;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,FDN_WAIT,0,pin_data);
+		break;
+#ifdef SIM_PERS
+		 case SIM_LOCK_REQ_OLD:
+              pin_data->display_id1 = TxtEnterOldPsLock;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PLOCK,0,pin_data);
+		break;
+               case SIM_LOCK_REQ_NEW:
+                pin_data->display_id1 = TxtEnterPsLockNew;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_NEW_SIMLOCK,0,pin_data);
+		break;
+		  case INPUT_NEW_SIM_PLOCK_AGAIN:
+              pin_data->display_id1 = TxtEnterPsLockconf;
+		set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_NEW_SIMLOCK_AGAIN,0,pin_data);
+              break;
+#endif
+	default:
+		break;
+  }
+		
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_info_cb
+ $Description:	settings pin information screen call back
+ $Returns:		void
+ $Arguments:	win, identifier, reason
+*******************************************************************************/
+void set_pin_info_cb(T_MFW_HND win, USHORT identifier, UBYTE reasons)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user;
+
+	TRACE_FUNCTION("MmiPins: set_pin_info_cb");
+
+	switch(identifier)
+	{
+
+		case PIN_OK:
+			SEND_EVENT(pin_data->pin_win,PIN_OK_END,0,NULL);//PIN was needed
+			break;
+		case PIN1_STATUS:
+			SEND_EVENT(pin_data->pin_win,PIN1_STATUS_END,0,NULL);
+			break;
+		case UNBL_OK:
+		case PIN1_REQ:
+		case PIN2_REQ:
+		case PUK1_REQ:
+		case PUK2_REQ:
+		case INPUT_NEW_PIN:
+		case INPUT_NEW_PIN2:
+		case PIN1_CH_END:
+		case PIN2_CH_END:
+		case FDN_UNBL_OK:
+		case PIN1_REQ_OLD:
+		case PIN2_REQ_OLD:
+		case IDLE_GSM_FAIL:
+		case SETT_ABORT:        // Marcus: Issue 1609: 23/01/2003
+			SEND_EVENT(pin_data->pin_win,identifier,0,NULL);//pin_main data !!
+			break;
+		default:		
+		switch (reasons)
+		{
+			case INFO_KCD_LEFT:
+			case INFO_KCD_RIGHT:
+		
+			case INFO_TIMEOUT:
+#ifdef SIM_PERS
+			{
+			        pin_skClear();
+				setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+			}
+		
+#else
+			dspl_ClearAll();
+#endif /* SIM_PERS*/
+			break;
+		}
+			break;
+	}
+
+}
+
+/*******************************************************************************
+
+ $Function:	gsm_set_test 
+ $Description:	test if gsm string
+ $Returns:		status int
+ $Arguments:	win, pin editor attributes 
+*******************************************************************************/
+static int gsm_set_test(T_MFW_HND win,void * edt_pin)
+{
+	int status;
+	T_pin_edt * edt_data = (T_pin_edt *)edt_pin;
+
+
+//	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;    /* Warning Correction */
+	T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+	T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
+
+	TRACE_FUNCTION("MmiPins:gsm_set_test");
+
+	status = ss_check_ss_string((UBYTE*)edt_data->pin);/* check GSM-String */
+	switch(status)
+	{
+		case MFW_SS_SIM_REG_PW:
+				if(!(edt_data->gsm_state))
+				{
+					switch(pin_data->set_state)
+					{
+						case CHANGE_PIN:/* replace * with string id */
+							if(!(strncmp((char*)edt_data->pin,"**04*",IDENT_GSM_1)))
+							{
+								edt_data->gsm_state = TRUE;
+								strncpy((char*)edt_data->edtbuf,(char*)edt_data->pin,edt_data->editor_index-1);
+								/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+								ATB_edit_Refresh(edt_data->editor);  /* String has changed, refresh editor */
+								ATB_edit_Show(edt_data->editor);	/* Show the editor */
+#else /* NEW_EDITOR */
+								edtShow(edt_data->editor_handle);
+#endif /* NEW_EDITOR */
+
+							}
+							else
+							{
+								edt_data->gsm_state = FALSE;
+								dspl_ClearAll();
+								clear_edit_array (edt_data);
+							    set_pin_edt_destroy(edt_data->pin_edt_win);
+								if(pin_data->puk_request)
+								{
+									pin_data->pin_case = PUK1_REQ;
+								}
+								else
+								{
+									if((pin_data->set_state EQ ENABLE) || (pin_data->set_state EQ DISABLE))
+										pin_data->pin_case = PIN1_REQ;
+									else
+										pin_data->pin_case = PIN1_REQ_OLD;/* pin1/2 change */
+								}
+								SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+							}
+							break;
+						case CHANGE_PIN2:/* replace * with string id */
+							if(!(strncmp((char*)edt_data->pin,"**042*",IDENT_GSM_2)))
+							{
+								edt_data->gsm_state = TRUE;
+								strncpy((char*)edt_data->edtbuf,(char*)edt_data->pin,edt_data->editor_index-1);
+								/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+								ATB_edit_Refresh(edt_data->editor);  /* String has changed, refresh editor */
+								ATB_edit_Show(edt_data->editor);	/* Show the editor */
+#else /* NEW_EDITOR */
+								edtShow(edt_data->editor_handle);
+#endif /* NEW_EDITOR */
+							}
+							else
+							{
+								edt_data->gsm_state = FALSE;
+								dspl_ClearAll();
+								clear_edit_array (edt_data);
+							    set_pin_edt_destroy(edt_data->pin_edt_win);
+								if(pin_data->puk_request)
+								{
+									pin_data->pin_case = PUK2_REQ;
+								}
+								else
+								{
+									pin_data->pin_case = PIN2_REQ_OLD;
+								}
+								SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+							}
+							break;
+						default:
+							edt_data->gsm_state = FALSE;
+							dspl_ClearAll();
+							clear_edit_array (edt_data);
+							set_pin_edt_destroy(edt_data->pin_edt_win);
+							if(pin_data->puk_request)
+							{
+								if(pin_data->set_state EQ CHANGE_PIN2)
+									pin_data->pin_case = PUK2_REQ;
+								else
+									pin_data->pin_case = PUK1_REQ;
+							}
+							else
+							{
+								if(pin_data->set_state EQ CHANGE_PIN)
+									pin_data->pin_case = PIN1_REQ_OLD;
+								else if(pin_data->set_state EQ CHANGE_PIN2)
+									pin_data->pin_case = PIN2_REQ_OLD;
+								else
+									pin_data->pin_case = PIN1_REQ;/* PIN enable/disable */
+							}
+							SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+							break;
+					}
+				}
+			return status;
+
+		case MFW_SS_SIM_UNBLCK_PIN:
+				if(!(edt_data->gsm_state))
+				{
+					switch(edt_data->pin_case_edit)
+					{
+						case INPUT_PUK1:/* replace * with string id */
+							if(!(strncmp((char*)edt_data->pin,"**05*",IDENT_GSM_1)))
+							{
+								edt_data->gsm_state = TRUE;
+								strncpy((char*)edt_data->edtbuf,(char*)edt_data->pin,edt_data->editor_index-1);
+								/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+								ATB_edit_Refresh(edt_data->editor);  /* String has changed, refresh editor */
+								ATB_edit_Show(edt_data->editor);	/* Show the editor */
+#else /* NEW_EDITOR */
+								edtShow(edt_data->editor_handle);
+#endif /* NEW_EDITOR */
+							}
+							else
+							{
+								edt_data->gsm_state = FALSE;
+								dspl_ClearAll();
+								clear_edit_array (edt_data);
+							    set_pin_edt_destroy(edt_data->pin_edt_win);
+								pin_data->pin_case = PUK1_REQ;
+								SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+							}
+							break;
+						case INPUT_PUK2:/* replace * with string id */
+							if(!(strncmp((char*)edt_data->pin,"**052*",IDENT_GSM_2)))
+							{
+								edt_data->gsm_state = TRUE;
+								strncpy((char*)edt_data->edtbuf,(char*)edt_data->pin,edt_data->editor_index-1);
+								/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+								ATB_edit_Refresh(edt_data->editor);  /* String has changed, refresh editor */
+								ATB_edit_Show(edt_data->editor);	/* Show the editor */
+#else /* NEW_EDITOR */
+								edtShow(edt_data->editor_handle);
+#endif /* NEW_EDITOR */
+							}
+							else
+							{
+								edt_data->gsm_state = FALSE;
+								dspl_ClearAll();
+								clear_edit_array (edt_data);
+							    set_pin_edt_destroy(edt_data->pin_edt_win);
+								pin_data->pin_case = PUK2_REQ;
+								SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+							}
+							break;
+						default:
+							edt_data->gsm_state = FALSE;
+							dspl_ClearAll();
+							clear_edit_array (edt_data);
+							set_pin_edt_destroy(edt_data->pin_edt_win);
+							if(pin_data->puk_request)
+							{
+								if(pin_data->set_state EQ CHANGE_PIN2)
+									pin_data->pin_case = PUK2_REQ;
+								else
+									pin_data->pin_case = PUK1_REQ;/* pin1 change,disable,enable */
+							}
+							else
+							{
+								if(pin_data->set_state EQ CHANGE_PIN)
+									pin_data->pin_case = PIN1_REQ_OLD;
+								else if(pin_data->set_state EQ CHANGE_PIN2)
+									pin_data->pin_case = PIN2_REQ_OLD;
+								else
+									pin_data->pin_case = PIN1_REQ; /* pin enable/disable */
+							}
+							SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+							break;
+					}
+				}
+			return status;
+		case MFW_SS_DIAL:	       /* string not yet detected  */
+        case MFW_SS_USSD:  /*JVJ SPR 1040- The short USSD strings should also be 
+                              considered in this case, since they can be confused with dialled numbers  
+                             */
+				edt_data->gsm_state = FALSE;
+			return status;
+		default:
+			edt_data->gsm_state = FALSE;
+			dspl_ClearAll();
+			clear_edit_array (edt_data);
+			set_pin_edt_destroy(edt_data->pin_edt_win);
+			SEND_EVENT(pin_data->pin_win,GSM_FAIL,0,NULL);/*entering screeen not allowed */
+			return status;
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_mode_fdn_adn
+ $Description:	activate/deactivate FDN/ADN
+ $Returns:		none
+ $Arguments:	win, pin editor attributes
+*******************************************************************************/
+static void set_mode_fdn_adn(T_MFW_HND win, void * string)
+{
+	T_pin * pin_data = (T_pin *)string;
+
+    TRACE_FUNCTION("MmiPins:set_mode_fdn_adn");
+
+	if((pin_data->set_state EQ FDN_ACTIV) || (pin_data->set_state EQ PIN2_CHECK))
+	{
+		if(phb_set_mode(PHB_FDN,pin_data->old_pin) EQ MFW_PHB_OK)
+		{
+			SEND_EVENT(pin_data->pin_win,FDN_ACTIVATED,0,pin_data);/* activate FDN successfull */
+		}
+		else
+		{
+			SEND_EVENT(pin_data->pin_win,FDN_FAIL,0,pin_data);/* activate FDN unsuccessfull */
+		}
+	}
+	else
+	{
+		if(phb_set_mode(PHB_ADN,pin_data->old_pin) EQ MFW_PHB_OK)
+		{
+			SEND_EVENT(pin_data->pin_win,ADN_ACTIVATED,0,pin_data);/* deactivate FDN  successfull */
+		}
+		else
+		{
+			SEND_EVENT(pin_data->pin_win,FDN_FAIL,0,pin_data);/* deactivate FDN unsuccessfull */
+		}
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	backpinFDNactdeact
+ $Description:	when callback event is received from phonebook
+		(MmiPhbk:phbkEvent)
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+void backpinFDNactdeact(void)
+{
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)set_pin_windows)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	TRACE_FUNCTION("MmiPins.backpinFDNactdeact");
+
+	if(pin_data->set_state EQ FDN_ACTIV)
+	{
+		SEND_EVENT(pin_data->pin_win,FDN_ACT_END,0,pin_data);
+	}
+	else if(pin_data->set_state EQ FDN_DEACTIV)
+	{
+		SEND_EVENT(pin_data->pin_win,FDN_DEACT_END,0,pin_data);
+	}
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	pin2_check 
+ $Description:	PIN2 check :call from menu Services and Phonebook
+ $Returns:		status int
+ $Arguments:	parent window
+*******************************************************************************/
+int pin2_check (T_MFW_HND parent_window)
+{
+		T_MFW_HND win = setting_pin_create(parent_window);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+		T_MFW_SIM_PIN_STATUS status;
+
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+	
+//		T_DISPLAY_DATA display_info;
+		
+	
+		pin_data->set_state = PIN2_CHECK;
+
+	TRACE_FUNCTION("MmiPins:pin2_check");
+
+	status.type = MFW_SIM_PIN2;
+		sim_pin_status(&status);
+	       // June 16, 2005  REF: CRR 31267  x0021334
+	       // Check if PIN2 and PUK2 are initialised
+		if((sim_pin_count(MFW_SIM_PIN2) > 0) AND (sim_pin_count(MFW_SIM_PUK2) NEQ 0))
+		{
+			SEND_EVENT(pin_data->pin_win,PIN2_REQ,0,pin_data);
+		}
+		// If PIN2 is not initialised, ask for PUK 2
+		else if ((sim_pin_count(MFW_SIM_PIN2) EQ 0) AND (sim_pin_count(MFW_SIM_PUK2) > 0))
+		{
+			pin_data->puk_request = TRUE;
+			SEND_EVENT(pin_data->pin_win,PUK2_REQ,0,pin_data);
+		}
+		// Else display that PIN2 is not available
+		else
+		{
+			SEND_EVENT(pin_data->pin_win,PIN2_SIM_FAILURE,0,pin_data);
+		}
+		}
+		return 1;
+}
+
+
+
+	
+/*******************************************************************************
+
+ $Function:	pin1_check 
+ $Description:	PIN1 check :call from menu Services (AOC)
+ $Returns:		status int
+ $Arguments:	parent window
+*******************************************************************************/
+int pin1_check (T_MFW_HND parent_window)
+{
+		T_MFW_HND win = setting_pin_create(parent_window);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+//		T_MFW_SIM_PIN_STATUS status;  /* Warning Correction */
+
+		pin_data->set_state = PIN1_CHECK;
+
+	TRACE_FUNCTION("MmiPins:pin1_check");
+		if(sim_pin_count(MFW_SIM_PIN1) > 0)
+		{
+			SEND_EVENT(pin_data->pin_win,PIN1_REQ,0,pin_data);
+		}
+		else
+		{   /* not included the state of the puk counter ! */
+			pin_data->puk_request = TRUE;
+			SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+		}
+		}
+		return 1;
+}
+
+/*******************************************************************************
+
+ $Function:	fdnActivate
+ $Description:	activate FDN
+ $Returns:		status int
+ $Arguments:	menu, item
+*******************************************************************************/
+int fdnActivate(struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+	TRACE_FUNCTION("MmiPins:fdnActivate");
+	pin2_fdn_activate();/*	check if PIN2 */
+    return 1;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	fdnDeactivate 
+ $Description:	deactivate FDN
+ $Returns:		status int
+ $Arguments:	menu, item
+*******************************************************************************/
+int fdnDeactivate(struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+
+	TRACE_FUNCTION("MmiPins:fdnDeactivate");
+    pin2_fdn_deactivate(); //	check if PIN2
+    return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_fdn_on_item_flag 
+ $Description:	decision about menu entry FDN "on"
+ $Returns:		0 if show entry, 1 if not
+ $Arguments:	menu, menu attributes, item
+*******************************************************************************/
+U16 set_fdn_on_item_flag (struct MfwMnuTag * m, struct MfwMnuAttrTag * ma, struct MfwMnuItemTag * mi)
+{
+
+    TRACE_FUNCTION("MmiPins:set_fdn_on_item_flag");
+
+	if(phb_get_mode()EQ PHB_RESTRICTED) /*if FDN on */
+		return MNU_ITEM_HIDE;		/* show no entry "on" */
+	else
+		return 0;		       /* show entry "on"  */
+}
+
+
+/*******************************************************************************
+
+ $Function:	set_fdn_off_item_flag
+ $Description:	decision about menu entry FDN "off"
+ $Returns:		0 if show entry off, 1 if not
+ $Arguments:	menu, menu attributes, item
+*******************************************************************************/
+U16 set_fdn_off_item_flag (struct MfwMnuTag * m, struct MfwMnuAttrTag * ma, struct MfwMnuItemTag * mi)
+{
+   TRACE_FUNCTION("MmiPins:set_fdn_off_item_flag");
+
+   if(phb_get_mode() NEQ PHB_RESTRICTED) /* if FDN off */
+		return MNU_ITEM_HIDE;		 /* show no entry "off" */
+	else
+		return 0;			 /* show entry "off"  */
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	gsm_idle 
+ $Description:	handle gsm string in idle screen (unblock and change pin)
+ $Returns:		Status int
+ $Arguments:	parent window, string
+*******************************************************************************/
+int gsm_idle (T_MFW_HND parent_window,char * string)
+{
+		T_MFW_HND win = setting_pin_create(parent_window);
+		T_MFW_WIN * win_data = NULL;
+		T_pin * pin_data = NULL;
+
+		if(win != NULL) /* x0039928 - Lint warning removal */
+		{
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+
+		pin_data->set_state = IDLE_GSM;
+		pin_data->gsm_state = TRUE;
+
+	TRACE_FUNCTION("MmiPins:gsm_idle");
+
+		gsm_sec_execute_set(win,string);
+		}
+		return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:	gsm_sec_execute_set
+ $Description:	GSM-String will be executed in settings and idle
+ $Returns:		none
+ $Arguments:	win, pin attributes
+*******************************************************************************/
+static void gsm_sec_execute_set(T_MFW_HND win,void *string)
+{
+	    T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+		T_pin * pin_data = (T_pin *)win_data->user;
+		int result;
+
+	TRACE_FUNCTION("MmiPins:gsm_sec_execute_set");
+
+		if(pin_data->set_state NEQ IDLE_GSM)
+		{
+			T_pin_edt * edt_data = (T_pin_edt *)string;
+
+			result = ss_execute_transaction((UBYTE*)edt_data->pin,0);/* ussd_man = 0 while SSD */
+			dspl_ClearAll();
+			clear_edit_array (edt_data);
+			pin_edt_destroy(edt_data->pin_edt_win);
+			//xrashmic 1 Jul, 2006 OMAPS00075784
+			//After the PUK is verified, security menu has to be displayed. 
+			//Hence we need to delete the pin window or else the blue  
+			//screen is displayed
+			//xrashmic 6 Jul, 2006 OMAPS00080708
+			//The pin window is necessary for displaying the error message for MFW_SS_FAIL
+			if(result!=MFW_SS_FAIL)
+			pin_destroy(pin_data->pin_win);		
+		}
+		else
+			result = ss_execute_transaction((UBYTE*)string,0);/* ussd_man = 0 while SSD */
+
+		switch(result)
+		{
+			case MFW_SS_SIM_REG_PW:     /* change PIN1/2		*/
+				TRACE_FUNCTION("MmiPins:gsm_idle:MFW_SS_SIM_REG_PW");
+				break;
+			case MFW_SS_SIM_UNBLCK_PIN: /* unblock PIN1/2		*/
+				TRACE_FUNCTION("MmiPins:gsm_idle:MFW_SS_SIM_UNBLCK_PIN");
+				break;
+			case MFW_SS_FAIL:
+				TRACE_FUNCTION("MmiPins:gsm_idle:MFW_SS_FAIL");
+				sett_pin_mess(win,GSM_FAIL);/* new PIN and new PIN again are not the same */
+				break;
+			default:
+				break;
+		}
+}
+
+
+/*******************************************************************************
+
+ $Function:	pins_editor_cb
+
+ $Description:	
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+static void pins_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason)
+{
+	T_MFW_WIN   * win_data = ((T_MFW_HDR *) win)->data;
+	T_pin	      * data	 = (T_pin *)win_data->user;
+
+	T_pin * pin_data = (T_pin *)win_data->user;//pin main data
+	//T_DISPLAY_DATA display_info;
+//x0pleela 21 Apr, 2006  DR: OMAPS00067919
+#ifdef SIM_PERS
+	int ret; //used to check the retun type of function mfw_simlock_check_lock_bootup()
+#endif
+	TRACE_FUNCTION ("pins_editor_cb()");
+
+	/* SPR#1746 - SH - In the case INSERT_CARD or CARD_REJECTED,
+	 * the editor has not been destroyed at this point.
+	 * BUT in all other cases it has, so we need to set the
+	 * editor handle to NULL. */
+	 
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+	if (Identifier!=INSERT_CARD && Identifier!=CARD_REJECTED 
+		&& Identifier!=SHOW_IMEI_INVALID		
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS			
+		//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+		&& Identifier != NO_MEPD_DATA
+#endif
+		)
+	{
+		pin_editor_window = NULL;
+	}
+
+	switch (reason)
+	{
+
+		case INFO_EMERGENCY:		
+			TRACE_EVENT_P1(" call %s", data->edtbuf);	
+
+			/* SPR#1746 - SH - Function modified to provide context */
+			show_confirmation (win, Identifier);
+
+			break;
+			
+		case INFO_KCD_LEFT:
+			switch (Identifier)
+			{
+
+				case PIN1_REQ:
+				{	TRACE_EVENT ("PIN1_REQ");			
+
+		    // verification pin1
+					sim_verify_pin(MFW_SIM_PIN1, data->edtbuf);  
+				}
+					break;
+#ifdef SIM_PERS
+					case PERM_BLK:
+						break;
+#endif
+				case PUK1_REQ:					
+				{
+#ifdef SIM_PERS
+					int status,curr_fail_reset, curr_succ_reset;
+					
+					TRACE_FUNCTION ("PUK1-REQ");
+					strncpy((char*)pin_data->puk, data->edtbuf,MAX_PIN);  
+					status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+//	Nov 03, 2005 DR: OMAPS00050595 - xpradipg
+//	the check for C_KEY_REQ is made first to find if the PUK request was for 
+//	SIM Personalization or for the SIM PIN1
+					
+			if(C_KEY_REQ)
+			{
+				if((curr_fail_reset!=0) && (curr_succ_reset!=0) )
+				{
+						if( FCUnlock_flag)
+						{
+							TRACE_FUNCTION("FCUnlock_flag: TRUE");
+							status= mfw_simlock_reset_fc_value((U8*)pin_data->puk,MFW_SIM_FCM);
+						}
+						else
+						{
+							TRACE_FUNCTION("FCUnlock_flag: FALSE");
+                            
+						       // June 07, 2006    DR: OMAPS00080701   x0021334
+                                                 // Descripton: Phone hangs while unblocking SIMP during bootup.
+                                                 // Assign 'SIMP_BOOTUP' to 'sim_unlock_in_prog' to indicate that
+                                                 // the operation is happeneing during boot-up sequence. 
+						       sim_unlock_in_prog = SIMP_BOOTUP;
+							status= mfw_simlock_reset_fc_value((U8*)pin_data->puk,MFW_SIM_FC);
+						}
+
+						mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+						if( status != MFW_SS_OK)
+						{
+							TRACE_FUNCTION("UNBLOCK_FAILURE");
+							mmi_simlock_aciErrDesc = aciErrDesc;
+
+							if((aciErrDesc & 0x0000FFFF) EQ CME_ERR_SimNotIns)
+						     	 SEND_EVENT(pin_data->pin_win,SIM_LOCK_SIM_REM,0,pin_data);
+	
+							//x0pleela 11 Sep, 2006  DR: OMASP00094215
+							//Handling CME error busy while unlocking a locked category
+							else if( ( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext) AND
+									(aciErrDesc & 0x0000FFFF) EQ EXT_ERR_Busy)
+							  SEND_EVENT(pin_data->pin_win,SIM_LOCK_BUSY_UNBLOCK,0,pin_data);
+
+							else
+							{
+								//x0pleela 27 Apr, 2006 DR: OMAPS00067919
+						    		//To avoid executing this during bootup sequence
+						    		if(FCUnlock_flag) //x0pleela 27 Apr, 2006 DR: OMAPS00067919
+						    		{
+									if( curr_fail_reset )
+										SEND_EVENT(pin_data->pin_win, SMLK_SHOW_FC_FAIL, 0, pin_data);
+									else
+									{
+										perm_blocked=1;
+										SEND_EVENT(pin_data->pin_win, PERM_BLK, 0, pin_data);
+									}
+								}
+							}
+						}
+					 	else 
+						{
+							TRACE_FUNCTION("UNBLOCK_SUCESS");
+							if(FCUnlock_flag)
+								FCUnlock_flag=0;
+							//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+							//Update mmi_simlock_aciErrDesc with the latest CME error
+							mmi_simlock_aciErrDesc = aciErrDesc;
+
+							if( curr_succ_reset )
+								SEND_EVENT(pin_data->pin_win, SMLK_SHOW_FC_SUCC, 0, pin_data);
+							else
+							{
+								perm_blocked=1;
+								SEND_EVENT(pin_data->pin_win, PERM_BLK, 0, pin_data);
+							}
+						}
+					}
+					else
+					{
+						perm_blocked = 1;
+						SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+					}
+
+				}
+			else
+			{
+#endif			
+				strncpy((char*)pin_data->puk, data->edtbuf,MAX_PIN);  
+				SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN,0,pin_data);
+#ifdef SIM_PERS
+			}
+#endif				
+		}
+					break;
+
+#ifdef SIM_PERS
+				//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+				//Performs master unlock and sends corresponding events during bootup
+				case INPUT_MASTER_KEY_REQ:
+				{
+					int status;
+					strncpy((char*)pin_data->mk_pin, data->edtbuf,MAX_PIN);  
+					status = mfw_simlock_master_unlock((U8*)pin_data->mk_pin, MFW_SIM_MKEY);
+					if( status EQ MFW_SS_OK )
+						SEND_EVENT(pin_data->pin_win, SMLK_SHOW_MK_SUCC, 0, pin_data);
+
+					//x0pleela 13 Nov, 2006 DR: OMAPS00103356
+					//send wrong password event 
+					else if ( status EQ MFW_WRONG_PWD) 
+						SEND_EVENT(pin_data->pin_win, SMLK_SHOW_WRONG_PWD, 0, pin_data);
+					//x0pleela 13 Nov, 2006 DR: OMAPS00103356
+					//send event which says all the dependent categories are unlocked
+					else if ( status EQ MFW_MASTER_OK) 
+						SEND_EVENT(pin_data->pin_win, SMLK_SHOW_DEP_CATS_UNLOCKED, 0, pin_data);
+					else
+						SEND_EVENT(pin_data->pin_win, SMLK_SHOW_MK_FAIL, 0, pin_data);
+					
+				}
+				break;
+
+				case INPUT_SIM_PIN_REQ:
+				case INPUT_NLOCK_PIN_REQ:
+				case INPUT_NSLOCK_PIN_REQ:
+				case INPUT_SPLOCK_PIN_REQ:
+				case INPUT_CLOCK_PIN_REQ: 
+				//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+				case INPUT_PBLOCK_PIN_REQ:
+				{
+					S16 lcktype = 0;
+				int curr_fail_reset1, curr_succ_reset1;
+
+				mfw_simlock_check_status(0, &curr_fail_reset1, &curr_succ_reset1);
+
+					if ((!curr_fail_reset1)||(!curr_succ_reset1))
+					{
+						perm_blocked =1;
+						SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+					}	
+					else
+					{
+					
+						strncpy((char*)pin_data->puk, data->edtbuf,MAX_PIN);  
+						//for CPIN to CLCK change
+						switch(Identifier)
+						{
+							case INPUT_SIM_PIN_REQ:
+								lcktype=MFW_SIM_PLOCK;
+								break;
+							case INPUT_NLOCK_PIN_REQ:
+								lcktype=MFW_SIM_NLOCK;
+								break;
+							case INPUT_NSLOCK_PIN_REQ:
+								lcktype=MFW_SIM_NSLOCK;
+								break;
+							case INPUT_SPLOCK_PIN_REQ:
+								lcktype=MFW_SIM_SPLOCK;
+								break;
+							case INPUT_CLOCK_PIN_REQ: 
+								lcktype=MFW_SIM_CLOCK;
+								break;
+
+							//x0pleela 25 Sep, 2006 ER: OMAPS00095524
+							case INPUT_PBLOCK_PIN_REQ:
+								lcktype=MFW_SIM_PBLOCK;
+								break;								
+						}
+						ret = mfw_simlock_check_lock_bootup((char*)pin_data->puk, lcktype);
+						//x0pleela 20 july, 2006 ER: OMAPS00087586, OMAPS00087587
+						//delete the simp list window handler
+						win_delete(pin_data->simp_list_win);
+						if( ret == BOOTUP_LOCK_SUCCESS)
+						{
+							TRACE_FUNCTION("BOOTUP_LOCK_SUCCESS");
+							simp_cpin_flag = FALSE;
+							SEND_EVENT(pin_data->pin_win,SIM_LOCK_PERS_CHK_OK,0,pin_data);
+						}
+						else if (ret ==BOOTUP_OK) 
+						{
+						  sim_simlock_cpin_code (simp_cpin_code);
+						}
+						else
+						{
+							TRACE_FUNCTION("BOOTUP_LOCK_FAILURE");
+							TRACE_EVENT_P1("aciErrDesc %d ",aciErrDesc);
+							if( simp_cpin_flag )
+							 sim_simlock_cpin_code (simp_cpin_code);
+							else
+							{
+								//x0pleela 20 July, 2006 ER: OMAPS00087586, OMAPS00087587
+								//get the busy state
+								if( mfw_simlock_get_busy_state() )
+								{
+									//send event to display a dialog Busy for the user
+									SEND_EVENT(pin_data->pin_win,SIM_LOCK_BUSY_BOOTUP,0,pin_data);
+								}
+								    //x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+								    //check for CME class and handle all CME errors
+								else if( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Cme)
+								{
+									switch(aciErrDesc & 0x0000FFFF)
+									{
+										case CME_ERR_NetworkPersPinReq:
+											TRACE_EVENT("CME_ERR_NetworkPersPinReq");
+											//x0pleela 20 July, 2006
+											//check for Master Unlock option enabled. 
+											//If so, then display the menu with options Network unlock and Master Unlock	
+											if( simlock_get_masterkey_status())
+											{
+												mmi_simlock_locktype = MFW_SIM_NLOCK;
+												pin_data->simp_list_win = mmi_simlock_category_menus(win);
+											}
+											else
+												SEND_EVENT(pin_data->pin_win,INPUT_NLOCK_PIN_REQ,0,pin_data);
+										break;
+											
+										case CME_ERR_NetworkSubsetPersPinReq:
+											TRACE_EVENT("CME_ERR_NetworkSubsetPersPinReq");
+											//x0pleela 20 July, 2006
+											//check for Master Unlock option enabled. 
+											//If so, then display the menu with options Network subset unlock and Master Unlock	
+											if( simlock_get_masterkey_status())
+											{
+												mmi_simlock_locktype = MFW_SIM_NSLOCK;
+												pin_data->simp_list_win = mmi_simlock_category_menus(win);
+											}
+											else
+												SEND_EVENT(pin_data->pin_win,INPUT_NSLOCK_PIN_REQ,0,pin_data);
+										break;
+											
+										case CME_ERR_ProviderPersPinReq:
+											TRACE_EVENT("CME_ERR_ProviderPersPinReq");
+											//x0pleela 20 July, 2006
+											//check for Master Unlock option enabled. 
+											//If so, then display the menu with options service provider unlock and Master Unlock	
+											if( simlock_get_masterkey_status())
+											{
+												mmi_simlock_locktype = MFW_SIM_SPLOCK;
+												pin_data->simp_list_win = mmi_simlock_category_menus(win);
+											}
+											else
+												SEND_EVENT(pin_data->pin_win,INPUT_SPLOCK_PIN_REQ,0,pin_data);
+										break;
+											
+										case CME_ERR_CorporatePersPinReq:
+											TRACE_EVENT("CME_ERR_CorporatePersPinReq");
+											//x0pleela 20 July, 2006
+											//check for Master Unlock option enabled. 
+											//If so, then display the menu with options Corporate unlock and Master Unlock	
+											if( simlock_get_masterkey_status())
+											{
+												mmi_simlock_locktype = MFW_SIM_CLOCK;
+												pin_data->simp_list_win = mmi_simlock_category_menus(win);
+											}
+											else
+												SEND_EVENT(pin_data->pin_win,INPUT_CLOCK_PIN_REQ,0,pin_data);
+										break;
+											
+										case CME_ERR_PhSimPinReq:
+											TRACE_EVENT("CME_ERR_PhSimPinReq");
+											//x0pleela 20 July, 2006
+											//check for Master Unlock option enabled. 
+											//If so, then display the menu with options SIM unlock and Master Unlock	
+											if( simlock_get_masterkey_status())
+											{
+												mmi_simlock_locktype = MFW_SIM_PLOCK;
+												pin_data->simp_list_win = mmi_simlock_category_menus(win);
+											}
+											else
+												SEND_EVENT(pin_data->pin_win,INPUT_SIM_PIN_REQ,0,pin_data);
+										break;
+
+										case CME_ERR_PhoneFail:
+										case CME_ERR_NetworkPersPukReq:
+										case CME_ERR_NetworkSubsetPersPukReq:
+										case CME_ERR_ProviderPersPukReq:
+										case CME_ERR_CorporatePersPukReq:
+										{
+											int status, curr_fail_reset, curr_succ_reset;
+											TRACE_EVENT("PUK Req");
+											status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+
+											if( status==MFW_SIM_BLOCKED)
+											{
+												C_KEY_REQ = 1;
+												//x0pleela 20 July, 2006
+												//check for Master Unlock option enabled. 
+												//If so, then display the menu with options Unblock ME and Master Unlock	
+											if( simlock_get_masterkey_status())
+											{
+											  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+											  }
+									  		else
+												SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+											}
+											else if (status == MFW_SIM_PERM_BLOCKED)
+											{
+												perm_blocked =1;
+												SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+											}	
+										}
+										break;	
+
+
+										case CME_ERR_WrongPasswd:
+										default:
+											TRACE_EVENT("CME_ERR_WrongPasswd");
+											SEND_EVENT(pin_data->pin_win,Identifier,0,pin_data);
+											break;
+									}
+							}
+							    //x0pleela 25 Sep, 2006 ER: OMAPS00095524	
+							    //check for Ext class and handle all Extension errors
+							else if( ((aciErrDesc & 0xFFFF0000) >> 16) EQ ACI_ERR_CLASS_Ext)
+							{
+								switch(aciErrDesc & 0x0000FFFF)
+								{
+									//Request for Blocked Network Password
+									case EXT_ERR_BlockedNetworkPersPinReq:
+										TRACE_EVENT("EXT_ERR_BlockedNetworkPersPinReq");
+										  if( simlock_get_masterkey_status())
+										  {
+										  	mmi_simlock_locktype = MFW_SIM_PBLOCK;
+										  	pin_data->simp_list_win = mmi_simlock_category_menus(win);
+										  }
+										  else
+											SEND_EVENT(pin_data->pin_win,INPUT_PBLOCK_PIN_REQ,0,pin_data);
+									break;
+
+									//Request for Blocked Network Unblock code 
+									case EXT_ERR_BlockedNetworkPersPukReq:
+									{
+										int status,curr_fail_reset, curr_succ_reset;
+										TRACE_EVENT("PUK Req");
+										status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset);
+
+										if( status==MFW_SIM_BLOCKED)
+										{
+											C_KEY_REQ = 1;
+											//check for Master Unlock option enabled. 
+											//If so, then display the menu with options Unblock ME and Master Unlock	
+											if( simlock_get_masterkey_status())
+											{
+												pin_data->simp_list_win = mmi_simlock_category_menus(win);
+											}
+											else
+												SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data);
+										}
+										else if (status == MFW_SIM_PERM_BLOCKED)
+										{
+											perm_blocked =1;
+											SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data);
+										}	
+									}
+									break;	
+
+									default:
+										break;
+								}
+							}
+					   	}	
+					}
+				}
+			}
+				break;
+#endif
+					
+				case INPUT_NEW_PIN:	
+				{	TRACE_EVENT ("INPUT_NEW_PIN");	
+					strncpy((char*)pin_data->new_pin, data->edtbuf,MAX_PIN);  
+					SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN_AGAIN,0,pin_data);
+				}
+					break;
+
+				case INPUT_NEW_PIN_AGAIN:
+				{	//if new pins match
+					if(strcmp((char*)pin_data->new_pin, (char*)data->edtbuf) EQ 0)
+						sim_unblock_pin(MFW_SIM_PUK1, (char*)pin_data->puk, (char*)pin_data->new_pin);/* unblock pin1 */
+					else	//otherwise ask for new pin again
+						SEND_EVENT(pin_data->pin_win,NEW_PIN_FAIL,0,NULL);
+				}
+					break;
+				default:
+					break;
+			}
+			break;
+					
+	    case INFO_KCD_RIGHT:
+	    case INFO_KCD_CLEAR:
+
+			TRACE_EVENT ("INFO_KCD_RIGHT pressed");
+
+			switch (Identifier)
+			{
+
+				default:
+					break;
+			}
+    default:
+			break;
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	call emergency confirmation
+
+ $Description:	 
+ 
+ $Returns:		
+
+ $Arguments:	
+				
+*******************************************************************************/
+
+/* SPR#1746 - SH - Add 'Identifier' so previous context is known */
+
+void show_confirmation (T_MFW_HND win, USHORT Identifier)
+{
+    T_DISPLAY_DATA   display_info;
+	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtSoftCall, TxtEmergency , COLOUR_STATUS_PINS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)show_confirmation_cb, FOREVER, KEY_HUP | KEY_LEFT| KEY_RIGHT );
+
+	/* SPR#1746 - SH - Store Identifier in display info, so it can be accessed by callback */
+	display_info.Identifier = Identifier;
+      /*
+       * Call Info Screen
+       */
+
+    info_dialog (win, &display_info);
+
+}
+
+
+int mmiPinsEmergencyCall(void)
+{
+	return((int)pin_emergency_call);
+}
+
+void mmiPinsResetEmergencyCall(void)
+{
+	pin_emergency_call = FALSE;
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:	idle_imei_info_cb
+
+ $Description:	 
+ 
+ $Returns:		
+
+ $Arguments:	
+				
+*******************************************************************************/
+
+
+
+static int show_confirmation_cb(T_MFW_HND win, USHORT identifier, UBYTE reason)
+{
+
+	T_MFW_WIN   * win_data = ((T_MFW_HDR *) win)->data;
+	T_pin	      * data	 = (T_pin *)win_data->user;
+
+    switch (reason)	 
+   {
+
+	case INFO_KCD_LEFT:
+			if (mmiStart_animationComplete() != TRUE)
+				pin_emergency_call = TRUE;
+
+			// call emergency number
+			callNumber ((UBYTE*)data->edtbuf);			
+	  break;
+	  
+	case INFO_KCD_HUP:
+	case INFO_KCD_RIGHT:
+		pin_emergency_call = FALSE;
+
+		/* SPR#1746 - SH - Now use identifier to return to previous context.
+		 * If the editor handle is not NULL, the editor is still hanging around.
+		 * We want to restart the editor, so we'll destroy it first. */
+		 
+		if (pin_editor_window)
+		{
+#ifdef NEW_EDITOR
+			AUI_pin_Destroy(pin_editor_window);
+#else
+			editor_destroy(pin_editor_window);
+#endif
+			pin_editor_window = NULL;
+		}
+
+		/* SPR#1746 - SH - For most identifiers, the number can just be passed to pin_main as
+		 * an event.  However, INSERT_CARD and CARD_REJECTED actually
+		 * correspond to the pin_main events NO_SIM_CARD and INVALID_CARD
+		 * respectively.  Make this conversion */
+		if (identifier==INSERT_CARD)
+			identifier = NO_SIM_CARD;
+		else if (identifier==CARD_REJECTED)
+			identifier = INVALID_CARD;
+// Nov 24, 2005, a0876501, DR: OMAPS00045909
+		else if (identifier == SHOW_IMEI_INVALID)
+			identifier = INVALID_IMEI;
+//x0pleela 18 Oct, 2006 DR: OMAPS00099660
+//Added the following code inside the SIM_PERS flag
+#ifdef SIM_PERS			
+				//x0pleela 30 Aug, 2006 DR: OMAPS00091250
+		else if( identifier == NO_MEPD_DATA )
+			identifier = NO_MEPD;
+#endif
+
+		/* Restart the appropriate editor */
+		SEND_EVENT(win, identifier, 0, data);		
+		break;
+    }
+
+  return 1;
+}
+/*******************************************************************************
+
+ $Function:	pins_loadEditDefault
+
+ $Description:	fill up editor-sttribut with default
+ 
+ $Returns:		
+ 
+ $Arguments:		
+				
+*******************************************************************************/
+//GW-SPR#844 - Zero editor data structure to reset all values to a known state.
+
+/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+void pins_loadEditDefault (T_AUI_EDITOR_DATA *editor_data, USHORT TitleId, USHORT Identifier)
+{
+		TRACE_FUNCTION ("pins_loadEditDefault()");
+		AUI_edit_SetDefault(editor_data);
+		AUI_edit_SetDisplay(editor_data, PASSWORD_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT);
+		AUI_edit_SetMode(editor_data, ED_MODE_HIDDEN, ED_CURSOR_UNDERLINE);
+		AUI_edit_SetEvents(editor_data, Identifier, TRUE, FOREVER, (T_AUI_EDIT_CB)pins_editor_cb);
+		if (pin1Flag EQ TRUE)   // June 16, 2005  REF: CRR 31267  x0021334
+			AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtDelete, TitleId, NULL); //display RSK as delete
+		else																  
+			AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtSoftBack, TitleId, NULL); // display RSK as back
+		AUI_edit_SetAltTextStr(editor_data, 4, TxtNull,  TRUE, TxtNull);
+
+		return;
+}
+#else /* NEW_EDITOR */
+void pins_loadEditDefault (T_EDITOR_DATA *editor_data)
+{
+		TRACE_EVENT ("pins_loadEditDefault()");
+		memset(editor_data,0x00,sizeof(T_EDITOR_DATA));
+		
+		editor_attr_init(&editor_data->editor_attr, PASSWORD_EDITOR, edtCurBar1, NULL, NULL, 0, COLOUR_EDITOR_XX);
+
+		editor_data->hide			    = FALSE;
+	    editor_data->Identifier	       = 0;  /* optional */
+	    editor_data->mode		    = PIN_SECURITY;
+		editor_data->destroyEditor	    = TRUE;
+		editor_data->LeftSoftKey	  = TxtSoftSelect;
+		editor_data->AlternateLeftSoftKey   = TxtNull;
+		editor_data->RightSoftKey	  = TxtSoftBack;
+		editor_data->TextId		 = '\0';  
+		editor_data->TextString 	  = NULL;  
+		editor_data->min_enter		     = 1;  // Avoid to return empty strings
+	    editor_data->timeout	      = FOREVER;
+		editor_data->Callback		  = (T_EDIT_CB)pins_editor_cb;
+
+}
+#endif /* NEW_EDITOR */
+
+
+//Clear PIN area
+void pin_rectClear( MfwRect *win )
+{
+	
+	dspl_Clear(win->px,win->py,win->px+win->sx-1,win->py+win->sy-1);
+}
+void pin_skClear( void )
+{
+	MfwRect skRect;
+	Mmi_layout_softkeyArea( &skRect );
+	pin_rectClear( &skRect );
+}
+
+// June 16, 2005  REF: CRR 31267  x0021334
+// Call back function to display editor after info dialog
+void pin1_cb_function (T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+	TRACE_FUNCTION ("pin1_cb_function");
+
+	// Post SIM_LOCKED_EMR_EDITOR event to start the editor
+	SEND_EVENT(win, SIM_LOCKED_EMR_EDITOR, 0, 0);
+}
+/*******************************************************************************
+
+ $Function:	getBootUpState
+
+ $Description:	 returns the current state during bootup
+ 
+ $Returns:		T_BOOTUP_STATE
+ 
+ $Arguments:		None
+
+//xashmic 21 Sep 2006, OMAPS00095831
+*******************************************************************************/
+T_BOOTUP_STATE getBootUpState(void)
+{
+	return BootUpState;
+}
+//x0pleela 21 Feb, 2007  ER: OMAPS00122561
+#ifdef FF_PHONE_LOCK
+/*******************************************************************************
+ $Function:		phLock_Enable_Lock
+ $Description:	sets the global flag to the network lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int phLock_Enable_Lock (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+    T_MFW_HND idle_win = mfwParent( mfw_header() );
+    T_MFW_HND win = phlock_setting_pin_create(idle_win);
+    UBYTE phlock_status, auto_phlock_status;
+    T_MFW_WIN * win_data = NULL;
+    T_pin * pin_data = NULL;
+	
+       TRACE_FUNCTION("phLock_Enable_Lock"); 
+	   
+    if(win != NULL) 
+    {
+	win_data = ((T_MFW_HDR *)win)->data;
+	pin_data = (T_pin *)win_data->user;
+
+	//x0pleela 23 May, 2007  DR: OMAPS00132483
+	//stop the audio file if playing
+#ifdef FF_MMI_AUDIO_PROFILE				
+	if( mfwAudPlay)
+	{
+		// Stopping the current ring tone.
+		#ifdef FF_MIDI_RINGER  
+			mfw_ringer_stop(sounds_midi_ringer_stop_cb);
+		#endif
+	}
+#endif //FF_MMI_AUDIO_PROFILE
+
+	//check the status of Phone lock
+    	phlock_status= mfw_phlock_get_lock_status(MFW_PH_LOCK);
+    	//check the status of Automatic Phone lock
+    	auto_phlock_status = mfw_phlock_get_autolock_status(MFW_AUTO_PH_LOCK);
+    	
+	//x0pleela 28 May, 2007  DR: OMAPS132483
+	//set the phonelock and auto ph lock status to TRUE if lock is enabled
+	if( phlock_status EQ MFW_PH_LOCK_DISABLE)
+		mfw_set_Phlock_status(FALSE);
+	else
+		mfw_set_Phlock_status(TRUE);
+
+	if( auto_phlock_status EQ MFW_PH_LOCK_DISABLE)
+		mfw_set_Auto_Phlock_status(FALSE);
+	else
+		mfw_set_Auto_Phlock_status(TRUE);
+	
+    	pin_data->set_state = ENABLE;
+
+	if( (phlock_status EQ MFW_PH_LOCK_DISABLE) && 
+	     (auto_phlock_status EQ MFW_PH_LOCK_DISABLE))/*if Phone lock is disabled*/
+	{	
+       	SEND_EVENT(pin_data->pin_win,TXT_PH_LOCK_ALL,0,pin_data);	
+     	}
+	else 
+	        SEND_EVENT(pin_data->pin_win,PH_LOCK_ALREADY_ENDIS,0,pin_data);
+    }
+	return 1;
+}
+
+/*******************************************************************************
+ $Function:		phLock_Lock
+ $Description:	sets the global flag to the network lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int phLock_Lock (void)
+{
+    T_MFW_HND idle_win = mfwParent( mfw_header() );
+    T_MFW_HND win = phlock_setting_pin_create(idle_win);
+    UBYTE slock_status;
+    T_MFW_WIN * win_data = NULL;
+    T_pin * pin_data = NULL;
+	T_MFW_SS_RETURN ret;
+	T_DISPLAY_DATA display_info;
+	
+       TRACE_FUNCTION("phLock_Lock"); 
+
+    if(win != NULL) 
+    {
+	win_data = ((T_MFW_HDR *)win)->data;
+	pin_data = (T_pin *)win_data->user;
+
+//x0pleela 23 May, 2007  DR: OMAPS00132483
+	//stop the audio file if playing
+#ifdef FF_MMI_AUDIO_PROFILE				
+	if( mfwAudPlay)
+	{
+		// Stopping the current ring tone.
+		#ifdef FF_MIDI_RINGER  
+			mfw_ringer_stop(sounds_midi_ringer_stop_cb);
+		#endif
+	}
+#endif //FF_MMI_AUDIO_PROFILE
+
+    	slock_status= mfw_phlock_get_lock_status(MFW_PH_LOCK);
+
+	if(slock_status EQ MFW_PH_LOCK_DISABLE) /*if Phone lock is enabled*/
+      {	
+        ret = mfw_phlock_enable_lock(NULL, MFW_PH_LOCK); 
+
+		if ( ret == MFW_SS_FAIL)
+		{	
+		        SEND_EVENT(pin_data->pin_win,PH_LOCK_EN_FAIL,0,pin_data);
+		}
+		else if( ret == MFW_EXCT)
+		{
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull,TxtPleaseWait,TxtNull, COLOUR_STATUS);
+			dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, FOREVER, KEY_CLEAR | KEY_LEFT );
+			phlock_info_dialog (pin_data->pin_win, &display_info);
+		}
+         	else
+         	{
+         		//x0pleela 29 May, 2007  DR: OMAPS00132483
+         		//set the phlock status to TRUE
+         		mfw_set_Phlock_status( TRUE );
+             		SEND_EVENT(pin_data->pin_win,PH_LOCK_SUCC,0,pin_data);
+    	}
+    	}
+	return 1;
+    }
+	return 0;
+}
+
+/*******************************************************************************
+ $Function:		phLock_UnLock
+ $Description:	sets the global flag to the network lock
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int phLock_UnLock (void)
+{
+    T_MFW_HND idle_win = mfwParent( mfw_header() );
+    T_MFW_HND win = phlock_setting_pin_create(idle_win);
+    UBYTE slock_status;
+    T_MFW_WIN * win_data = NULL;
+    T_pin * pin_data = NULL;
+	
+       TRACE_FUNCTION("phLock_UnLock"); 
+
+    if(win != NULL) 
+    {
+	win_data = ((T_MFW_HDR *)win)->data;
+	pin_data = (T_pin *)win_data->user;
+
+	//x0pleela 23 May, 2007  DR: OMAPS00132483
+		//stop the audio file if playing
+#ifdef FF_MMI_AUDIO_PROFILE				
+	if( mfwAudPlay)
+	{
+		// Stopping the current ring tone.
+		#ifdef FF_MIDI_RINGER  
+			mfw_ringer_stop(sounds_midi_ringer_stop_cb);
+		#endif
+	}
+#endif //FF_MMI_AUDIO_PROFILE
+
+    	slock_status= mfw_phlock_get_lock_status(MFW_PH_LOCK);
+
+    	pin_data->set_state = DISABLE;
+
+	if(slock_status EQ MFW_PH_LOCK_ENABLE) /*if Phone lock is disabled*/
+    {	
+        SEND_EVENT(pin_data->pin_win,TXT_PH_LOCK_ALL,0,pin_data);	
+     }
+    else 
+        SEND_EVENT(pin_data->pin_win,PH_LOCK_ALREADY_ENDIS,0,pin_data);
+    	}
+	return 1;
+}
+
+/*******************************************************************************
+ $Function:		phLock_Automatic_On
+ $Description:	sets automaticPhLock flag to ON
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int phLock_Automatic_On (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+	T_MFW_HND idle_win = mfwParent( mfw_header() );
+    	T_MFW_HND win = phlock_setting_pin_create(idle_win);
+	UBYTE slock_status;
+	T_MFW_WIN * win_data = NULL;
+	T_pin * pin_data = NULL;
+	
+	TRACE_FUNCTION("phLock_Automatic_On");
+	autoPhLock_menu = TRUE;
+	   
+    if(win != NULL) 
+    {
+	win_data = ((T_MFW_HDR *)win)->data;
+	pin_data = (T_pin *)win_data->user;
+
+//x0pleela 23 May, 2007  DR: OMAPS00132483
+	//stop the audio file if playing
+#ifdef FF_MMI_AUDIO_PROFILE				
+	if( mfwAudPlay)
+	{
+		// Stopping the current ring tone.
+		#ifdef FF_MIDI_RINGER  
+			mfw_ringer_stop(sounds_midi_ringer_stop_cb);
+		#endif
+	}
+#endif //FF_MMI_AUDIO_PROFILE
+
+	slock_status = mfw_phlock_get_autolock_status(MFW_AUTO_PH_LOCK);
+
+    	pin_data->set_state = ENABLE;
+
+	if(slock_status EQ MFW_PH_LOCK_DISABLE) /*if Phone lock is disabled*/
+    {	
+        SEND_EVENT(pin_data->pin_win,TXT_PH_LOCK_ALL,0,pin_data);	
+     }
+    else 
+        SEND_EVENT(pin_data->pin_win,PH_LOCK_ALREADY_ENDIS,0,pin_data);
+    	}
+	return 1;
+}
+
+/*******************************************************************************
+ $Function:		phLock_Automatic_Off
+ $Description:	sets automaticPhLock flag to OFF
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int phLock_Automatic_Off (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+	int status;
+
+	TRACE_FUNCTION("phLock_Automatic_Off"); 
+
+	//x0pleela 23 May, 2007  DR: OMAPS00132483
+		//stop the audio file if playing
+#ifdef FF_MMI_AUDIO_PROFILE				
+	if( mfwAudPlay)
+	{
+		// Stopping the current ring tone.
+		#ifdef FF_MIDI_RINGER  
+			mfw_ringer_stop(sounds_midi_ringer_stop_cb);
+		#endif
+	}
+#endif //FF_MMI_AUDIO_PROFILE
+
+	status = mfw_phlock_disable_autoLock(MFW_AUTO_PH_LOCK);
+	if( status == MFW_SS_OK )
+	{
+		//x0pleela 09 Mar, 2007  DR: OMAPS00129014	
+		//set the flag to FALSE
+		phlock_auto = FALSE;	
+		
+		//x0pleela 28 May, 2007   DR: OMAPS00132483
+		//Set the auto phone lock status to FALSE
+		mfw_set_Auto_Phlock_status(FALSE);
+		
+		mmi_phlock_show_info(0, TxtAutoLockDisable, TxtSuccess, NULL);
+	}
+	else if ( status == MFW_SS_ALRDY_DIS )
+		mmi_phlock_show_info(0, TxtPhoneLock, TxtAlreadyDisabled, NULL);   
+	else
+		mmi_phlock_show_info(0, TxtAutoLockDisable, TxtFailed, NULL);   
+
+      return 1;
+}
+
+/*******************************************************************************
+ $Function:		phLock_Change_UnlockCode
+ $Description:	
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+int phLock_Change_UnlockCode (struct MfwMnuTag * m, struct MfwMnuItemTag * i)
+{
+T_MFW_HND idle_win = mfwParent( mfw_header());
+    T_MFW_HND win = phlock_setting_pin_create(idle_win);
+    T_MFW_WIN * win_data = NULL;
+    T_pin * pin_data = NULL;
+    int status, auto_lock_status;
+   	TRACE_FUNCTION("MmiPins:phLock_Change_UnlockCode");
+
+	if(win != NULL)	/* x0039928 - Lint warning removal */
+	{
+		//x0pleela 23 May, 2007  DR: OMAPS00132483
+			//stop the audio file if playing
+#ifdef FF_MMI_AUDIO_PROFILE				
+	if( mfwAudPlay)
+	{
+		// Stopping the current ring tone.
+		#ifdef FF_MIDI_RINGER  
+			mfw_ringer_stop(sounds_midi_ringer_stop_cb);
+		#endif
+	}
+#endif //FF_MMI_AUDIO_PROFILE
+
+		win_data = ((T_MFW_HDR *)win)->data;
+		pin_data = (T_pin *)win_data->user;
+		pin_data->set_state = CHANGE_PIN;
+		status = mfw_phlock_get_lock_status(MFW_PH_LOCK);
+		auto_lock_status = mfw_phlock_get_autolock_status(MFW_AUTO_PH_LOCK);
+		if( ( status == MFW_PH_LOCK_ENABLE) ||
+			auto_lock_status == MFW_PH_LOCK_ENABLE) 
+		{
+			SEND_EVENT(pin_data->pin_win,PH_LOCK_STATUS,0,pin_data);
+		}
+		else
+	    	{
+		    	SEND_EVENT(pin_data->pin_win,PH_LOCK_REQ_OLD,0,pin_data);
+	    	}
+	}
+	return 1;
+}
+
+
+/*******************************************************************************
+ $Function:		mmi_phlock_en_dis_verify
+ $Description:	performs the operation of enabling/disabling and verifying a given
+ 				lock type after the input of the password
+ $Returns:		none
+ $Arguments:	none
+*******************************************************************************/
+
+static void mmi_phlock_en_dis_verify(T_MFW_HND win)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+	T_MFW_SS_RETURN ret;
+	T_DISPLAY_DATA display_info;
+
+	TRACE_FUNCTION("mmi_phlock_en_dis_verify()");
+  if((pin_data->set_state != ENABLE) && (pin_data->set_state != DISABLE))
+	{	
+              
+	       TRACE_FUNCTION("We're verifying SIMLock");
+	     
+              SEND_EVENT(pin_data->pin_win,PH_LOCK_REQ_NEW,0,pin_data);
+              
+       }
+  else if(pin_data->set_state EQ ENABLE)
+   {	 
+		TRACE_FUNCTION("MmiPins:Enable Lock now");
+ 		if( autoPhLock_menu )
+ 		{
+			ret = mfw_phlock_enable_lock((U8*)pin_data->old_pin, MFW_AUTO_PH_LOCK); 
+ 		}
+		else
+		{
+			ret = mfw_phlock_enable_lock((U8*)pin_data->old_pin, MFW_PH_LOCK); 
+		}
+		if ( ret == MFW_SS_FAIL)
+		{	
+		        SEND_EVENT(pin_data->pin_win,PH_LOCK_ENDIS_FAIL,0,pin_data);
+		}
+		else if( ret == MFW_EXCT)
+		{
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull,TxtPleaseWait,TxtNull, COLOUR_STATUS);
+			dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, FOREVER, KEY_CLEAR | KEY_LEFT );
+			phlock_info_dialog (pin_data->pin_win, &display_info);
+		}
+         	else
+     		{
+			if( autoPhLock_menu )
+			{
+				//x0pleela 09 Mar, 2007  DR: OMAPS00129014
+				//set the flag to TRUE
+				phlock_auto = TRUE;
+
+				//x0pleela 28 May, 2007   DR: OMAPS00132483
+				//Set the auto phone lock status to TRUE
+				mfw_set_Auto_Phlock_status(TRUE);
+	             		SEND_EVENT(pin_data->pin_win,PH_LOCK_AUTO_SUCC,0,pin_data);
+			}
+			else
+			{
+				//x0pleela 28 May, 2007   DR: OMAPS00132483
+				//Set the phone lock status to TRUE
+				mfw_set_Phlock_status(TRUE);
+	             		SEND_EVENT(pin_data->pin_win,PH_LOCK_ENDSUCC,0,pin_data);
+			}
+     		}
+   }
+   else  if(pin_data->set_state EQ DISABLE)
+   { 	
+   TRACE_FUNCTION("MmiPins:Disable Lock now");
+   		ret = mfw_phlock_disable_lock((U8*)pin_data->old_pin,MFW_PH_LOCK);
+		if (ret == MFW_SS_FAIL)
+		{	
+			SEND_EVENT(pin_data->pin_win,PH_LOCK_ENDIS_FAIL,0,pin_data);
+		}
+        	else
+        	{
+			//x0pleela 28 May, 2007   DR: OMAPS00132483
+			//Set the phone lock status to FALSE
+			mfw_set_Phlock_status(FALSE);
+			
+	       	SEND_EVENT(pin_data->pin_win,PH_LOCK_ENDSUCC,0,pin_data);
+        	}
+   }
+
+}
+
+
+/*******************************************************************************
+ $Function:		mmi_phlock_change_pin
+ $Description:	Performs the change password for a given lock type
+ $Returns:		success or failure
+ $Arguments:	lock type, oldpassword, new password
+*******************************************************************************/
+
+void mmi_phlock_change_pin(T_MFW_HND win,int type,char* oldpsw,char* newpsw)
+{
+    T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+    T_pin * pin_data = (T_pin *)win_data->user;
+
+	TRACE_FUNCTION("mmi_phlock_change_pin()");
+    TRACE_EVENT_P2(" old pasword%s new password%s ",oldpsw,newpsw);
+     if(mfw_phlock_change_lock_code(type,oldpsw,newpsw) !=MFW_SS_OK)
+     	{
+     	TRACE_EVENT("mmi_phlock_change_pin: FAILED");
+       SEND_EVENT(pin_data->pin_win,PH_LOCK_NEW_ENDISFAIL,0,pin_data);
+     	}
+    else
+    	{
+    	     	TRACE_EVENT("mmi_phlock_change_pin: SUCCESS");
+        SEND_EVENT(pin_data->pin_win,PH_LOCK_NEW_ENDSUCC,0,pin_data);
+    	}
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_phlock_show_info
+
+ $Description: Display the Dialog
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+static MfwHnd mmi_phlock_show_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback)
+{
+	T_DISPLAY_DATA display_info;
+
+	TRACE_FUNCTION ("mmi_phlock_show_info()");
+
+	/*
+	** Create a timed dialog to display the Message "Failed"
+	*/
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, str1, str2, COLOUR_STATUS);
+	dlg_initDisplayData_events( &display_info, callback, THREE_SECS, KEY_LEFT | KEY_CLEAR | KEY_HUP);
+	return phlock_info_dialog(parent, &display_info);
+}
+
+
+/*******************************************************************************
+
+ $Function:	phlock_setting_pin_create
+ $Description:	Creation of an instance for the Settings PIN main dialog.
+				Type of dialog : SINGLE_DYNAMIC
+				Top Window must be available at any time, only one instance.
+ $Returns:		window
+ $Arguments:	parent window
+*******************************************************************************/
+T_MFW_HND phlock_setting_pin_create (T_MFW_HND parent_window)
+{
+
+  T_pin * data = (T_pin *)ALLOC_MEMORY (sizeof (T_pin));
+  T_MFW_WIN	* win;
+
+  data->pin_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)phlock_setting_pin_win_cb);
+
+  TRACE_FUNCTION("MmiPins:phlock_setting_pin_create");
+
+  set_pin_windows = data->pin_win;
+
+  if (data->pin_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)phlock_setting_pin_main;
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_win)->data;
+  win->user		      = (void *) data;
+
+  /*
+   * Create any other handler
+   */
+
+  data->sim_handle = sim_create(data->pin_win,E_SIM_ALL_SERVICES,(MfwCb)sim_event_cb_setting);
+
+  /*
+   * Initialise
+   */
+ data->set_state = DEFAULT;
+ data->puk_request = FALSE;
+
+
+  mfwSetSignallingMethod(1);//mfw focus handling
+  winShow(data->pin_win);//focus on settings:PIN/PIN2 Change/act/Deac
+
+
+  /*
+   * return window handle
+   */
+  return data->pin_win;
+}
+/*******************************************************************************
+
+ $Function:	phlock_setting_pin_win_cb 
+ $Description:	Callback function for main windows in settings
+ $Returns:		Status int
+ $Arguments:	event, window
+*******************************************************************************/
+static int phlock_setting_pin_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  TRACE_FUNCTION("phlock_setting_pin_win_cb()");
+  if (event EQ MfwWinVisible)
+  {
+    /*
+     * Top Window has no output
+     */
+	/* NDH : Removed to prevent Blue Screen on Pin Entry */
+	return 1;
+  }
+  return 0;
+
+}
+
+/*******************************************************************************
+
+ $Function:	phlock_setting_pin_main 
+ $Description:	PIN Settings Dialog Handling function
+ $Returns:		none
+ $Arguments:	win, event, value, parameters
+*******************************************************************************/
+void phlock_setting_pin_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user;//pin main data
+
+	TRACE_FUNCTION("phlock_setting_pin_main()");
+
+	 switch(event)
+	 {
+	case PH_LOCK_ALREADY_ENDIS:
+	case PH_LOCK_STATUS:
+       case PH_LOCK_REQ_OLD:
+   	case PH_LOCK_REQ_NEW:
+       case INPUT_NEW_PH_LOCK_AGAIN:	
+       case NEW_PH_LOCK_FAIL:
+       case PH_LOCK_NEW_ENDISFAIL:
+       case PH_LOCK_NEW_ENDSUCC:
+       case TXT_PH_LOCK_ALL:
+       case PH_LOCK_ENDSUCC:
+	case PH_UNLOCK_REQ:
+	case PH_LOCK_AUTO_SUCC:
+	case PH_LOCK_SUCC:
+	case PH_LOCK_ENDIS_FAIL:
+				  phlock_sett_pin_mess(win,event);
+				  break;
+	 }
+
+	 switch(event)
+	 {
+                 case TXT_ENTER_PHLOCK:
+	 			TRACE_EVENT("phlock_setting_pin_main: TXT_ENTER_PHLOCK");
+                    		pin_data->pin_case = INPUT_PH_LOCK;
+				phlock_sett_pin_edit(win,INPUT_PH_LOCK);
+                            break;
+
+                   case TXT_ENTER_NEW_PHLOCK:
+                               pin_data->pin_case = INPUT_NEW_PH_LOCK;
+				   phlock_sett_pin_edit(win,INPUT_NEW_PH_LOCK);
+                                break;  
+
+                   case TXT_ENTER_NEW_PHLOCK_AGAIN:
+                               pin_data->pin_case = INPUT_NEW_PH_LOCK_AGAIN;
+				   phlock_sett_pin_edit(win,INPUT_NEW_PH_LOCK_AGAIN);
+				   break;      
+
+                  case NEW_PH_LOCK_END:
+                                    mmi_phlock_change_pin(win,MFW_PH_LOCK,(char*)pin_data->old_pin,(char*)pin_data->new_pin);
+                              break; 				   
+
+		case PH_LOCK_END:
+			TRACE_EVENT("phlock_setting_pin_main:PH_LOCK_END");
+			
+			//x0pleela 15 May, 2007 DR: OMAPS00127483
+			//When ringer for either incoming call or alarm is playing in phone locked state, Audio usues the DMA channels
+			//which will be active. The DMA channels will be available only after the audio file is fully played.
+			//This will cause that process to be blocked until the DMA channel becomes in-active and in turn if we try to 
+			//query or access secure driver we are blocked until the audio file is completely played.
+			//Since this is a hardware constraint, we found a workaround for this issue and are stopping the ringer  
+			//either for incoming call or alarm before accessing secure driver for enabling or disbaling the phone lock.
+
+			if( (( call_data.call_direction == MFW_CM_MTC ) &&  phlock_dialog_mtc_win_handle)
+				|| (phlock_alarm) )
+			{
+				if( (!phlock_win_handle)		
+			#ifdef FF_MMI_AUDIO_PROFILE				
+					&& ( mfwAudPlay)
+			#endif
+					)
+				{
+				// Stopping the current ring tone.
+				#ifdef FF_MIDI_RINGER  
+					mfw_ringer_stop(sounds_midi_ringer_stop_cb);
+				#endif
+				}
+			}
+			 mmi_phlock_en_dis_verify(win);
+                      break;
+				   
+	 
+               case PH_LOCK_SETT_ABORT:
+	 			TRACE_EVENT("phlock_setting_pin_main: PH_LOCK_SETT_ABORT");
+				phlock_setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+				break;
+				
+		  default:
+			  break;
+	 }
+
+}
+
+/*******************************************************************************
+
+ $Function:	phlock_sett_pin_mess 
+ $Description:	help function for message dialog
+ $Returns:		void
+ $Arguments:	window, event
+*******************************************************************************/
+static void phlock_sett_pin_mess(T_MFW_HND win,USHORT event)
+{
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	T_MFW_HND pin_mess_win;
+	TRACE_FUNCTION("MmiPins:phlock_sett_pin_mess()");
+
+	pin_mess_win = phlock_set_pin_mess_create(pin_data->pin_win);
+	if(pin_mess_win)
+	{
+		SEND_EVENT(pin_mess_win,event,0,pin_data);
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_mess_create
+ $Description:	Creation of an instance  for the PIN Message dialog settings
+				Type of dialog : SINGLE_DYNAMIC
+ $Returns:		void
+ $Arguments:	parent window
+*******************************************************************************/
+T_MFW_HND phlock_set_pin_mess_create(T_MFW_HND parent_window)
+{
+  T_pin_mess * data = (T_pin_mess *)ALLOC_MEMORY (sizeof (T_pin_mess));
+  T_MFW_WIN	* win;
+
+  data->pin_mess_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)phlock_set_pin_mess_win_cb);
+
+  TRACE_FUNCTION("MmiPins: phlock_set_pin_mess_create");
+
+  if (data->pin_mess_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)phlock_set_pin_messages;
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_mess_win)->data;
+  win->user		      = (void *) data;
+
+  /*
+   * return window handle
+   */
+  return data->pin_mess_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:	phlock_set pin_mess_destroy
+ $Description:	Destroy the pin message dialog settings
+ $Returns:		void
+ $Arguments:	window
+*******************************************************************************/
+void phlock_set_pin_mess_destroy  (T_MFW_HND own_window)
+{
+  T_pin_mess * data;
+  T_MFW_WIN * win;
+
+
+  TRACE_FUNCTION("MmiPins: phlock_set_pin_mess_destroy()");
+
+  if (own_window)
+  {
+	  win = ((T_MFW_HDR *)own_window)->data;
+	  data = (T_pin_mess *)win->user;
+
+	  if(data)
+	  {
+
+      /*
+       * Delete WIN Handler
+       */
+	  win_delete (data->pin_mess_win);
+	      FREE_MEMORY((void*)data,(sizeof(T_pin_mess)));
+	  }
+   }
+}
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_mess_win_cb
+ $Description:	Callback function for message windows
+ $Returns:		void
+ $Arguments:	event, window
+*******************************************************************************/
+static int phlock_set_pin_mess_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+TRACE_FUNCTION("phlock_set_pin_mess_win_cb()");
+  /*
+   * Top Window has no output
+   */
+  return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_messages
+ $Description:	Message Dialog for PIN/PUK handling in settings
+ $Returns:		void
+ $Arguments:	win, event, value, parameter
+*******************************************************************************/
+void phlock_set_pin_messages(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_mess * mess_data = (T_pin_mess *)win_data->user;
+
+	T_DISPLAY_DATA display_info;
+	T_pin * pin_data = (T_pin *)parameter;
+  TRACE_FUNCTION("Mmi.Pins:phlock_set_pin_messages");
+
+  /*
+   * depending on signal
+   */
+	
+  switch (event)
+  {
+	case PH_LOCK_ALREADY_ENDIS:
+	case PH_LOCK_NEW_ENDSUCC:
+    	case PH_LOCK_ENDSUCC:
+	case PH_LOCK_AUTO_SUCC:
+	case PH_LOCK_SUCC:
+	case PH_LOCK_STATUS:		
+   	case NEW_PH_LOCK_FAIL:
+       case PH_LOCK_NEW_ENDISFAIL:
+       case PH_LOCK_ENDIS_FAIL:
+	case PH_LOCK_EN_FAIL:
+
+		dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNull, TxtNull,  COLOUR_STATUS_PINS);
+		
+		switch(event)
+		{
+		case PH_LOCK_ALREADY_ENDIS:
+			pin_data->pin_case = PH_LOCK_ALREADY_ENDIS;
+			display_info.TextId = TxtPhoneLock;
+
+		  	if(pin_data->set_state == ENABLE)
+				display_info.TextId2 = TxtAlreadyEnabled;
+			else if(pin_data->set_state == DISABLE)
+			  	display_info.TextId2 = TxtAlreadyDisabled;
+			  
+			  break;
+
+	         case PH_LOCK_NEW_ENDSUCC:
+			if(phlock_win_handle)
+				phlock_win_handle = NULL;
+
+			if( phlock_kbd_handle)
+				phlock_kbd_handle = NULL;
+
+          		  pin_data->pin_case = PH_LOCK_NEW_ENDSUCC;
+			  display_info.TextId = TxtPhoneLock;
+			  display_info.TextId2 = TxtPsLockChanged;
+			  break;
+			  
+		  case PH_LOCK_ENDSUCC:
+		  	TRACE_EVENT("phlock_set_pin_messages: PH_LOCK_ENDSUCC");
+			if(phlock_win_handle)
+				phlock_win_handle = NULL;
+
+
+			if( phlock_kbd_handle)
+				phlock_kbd_handle = NULL;
+
+				//x0pleela 28 May, 2007  DR: OMAPS00132483
+				//get the phone lock status 
+				if( mfw_get_Phlock_status() )
+      				{
+      					TRACE_EVENT("LOCK ENABLED");
+	      				//For USB MS
+	      				if( mmi_get_usbms_enum() )
+	      				{
+					#ifdef FF_MMI_USBMS      			
+						//unregister USB enumeration
+						TRACE_EVENT("USB de-enumeration");
+			      			mfw_usbms_enum_control(MFW_USB_NO_ENUM , MFW_USB_TYPE_ALL);
+					#endif /*FF_MMI_USBMS*/
+	      				}
+					//For Headset
+					if( mmi_get_Headset_Reg() )
+					{
+						#ifdef FF_MMI_AUDIO_PROFILE	
+							//unregister headset
+							//mfw_headset_unregister();
+							TRACE_EVENT("headset unregister");
+							mfw_hook_unregister();
+						#endif /*FF_MMI_AUDIO_PROFILE*/
+					}
+					pin_data->pin_case = PH_LOCK_ENDSUCC;
+				}
+				else
+				{
+					TRACE_EVENT("LOCK DISABLED");
+					//For USB MS
+					if( mmi_get_usbms_enum() )
+					{
+					#ifdef FF_MMI_USBMS      
+			      			//register USB enumeration
+			      			TRACE_EVENT("USB re-enumeration");
+		      				mfw_usbms_enum_control(MFW_USB_ENUM , MFW_USB_TYPE_ALL);
+					#endif /*FF_MMI_USBMS*/
+					}
+					//For Headset
+					if( mmi_get_Headset_Reg() )
+					{
+						#ifdef FF_MMI_AUDIO_PROFILE	
+							//register headset
+							//mfw_headset_register();
+						if(call_data.win_calling OR call_data.win_incoming OR call_data.calls.numCalls)
+							{
+								TRACE_EVENT("headset register");
+								mfw_hook_register();
+							}
+						#endif /*FF_MMI_AUDIO_PROFILE*/
+					}	
+						pin_data->pin_case = PH_LOCK_SUCCESS;
+							
+				}
+				display_info.TextId = TxtPhone;
+				display_info.Identifier = pin_data->pin_case;
+	
+		 if(pin_data->set_state == ENABLE)
+			  {
+			  	display_info.TextId2 = TxtLockActivated;
+				TRACE_EVENT("phlock_set_pin_messages: PH_LOCK_ENDSUCC: Activated");
+			  }
+			  else if(pin_data->set_state == DISABLE)
+			  {
+			  	display_info.TextId2 = TxtLockDeactivated;
+				TRACE_EVENT("phlock_set_pin_messages: PH_LOCK_ENDSUCC: Deactivated");
+			  }
+
+			  break;				  
+		
+		case PH_LOCK_AUTO_SUCC:
+			TRACE_EVENT("phlock_set_pin_messages: PH_LOCK_AUTO_SUCC");
+			if(phlock_win_handle)
+				phlock_win_handle = NULL;
+
+
+			if( phlock_kbd_handle)
+				phlock_kbd_handle = NULL;
+
+			//x0pleela 29 May, 2007  DR: OMAPS00132483
+				//get the auto phone lock status 
+				if( mfw_get_Auto_Phlock_status() )
+			  {
+			  	display_info.TextId = TxtAutoPhone;
+			    	pin_data->pin_case = PH_LOCK_AUTO_SUCC;
+				autoPhLock_menu = FALSE;
+			  }
+			  if(pin_data->set_state == ENABLE)
+			  {
+			  	display_info.TextId2 = TxtLockActivated;
+			  }
+			  else if(pin_data->set_state == DISABLE)
+			  {
+			  	display_info.TextId2 = TxtLockDeactivated;
+			  }
+			break;
+
+			case PH_LOCK_SUCC:
+		  	TRACE_EVENT("set_pin_msgs: PH_LOCK_SUCC");
+			if(phlock_win_handle)
+				phlock_win_handle = NULL;
+
+			
+			if( phlock_kbd_handle)
+				phlock_kbd_handle = NULL;
+
+				//x0pleela 28 May, 2007  DR: OMAPS00132483
+				//get the phone lock status 
+				if( mfw_get_Phlock_status() )
+      				{
+      					TRACE_EVENT("LOCK ENABLED");
+	      				//For USB MS
+	      				if( mmi_get_usbms_enum() )
+	      				{
+					#ifdef FF_MMI_USBMS      			
+						//unregister USB enumeration
+						TRACE_EVENT("USB de-enumeration");
+			      			mfw_usbms_enum_control(MFW_USB_NO_ENUM , MFW_USB_TYPE_ALL);
+					#endif /*FF_MMI_USBMS*/
+	      				}
+					//For Headset
+					if( mmi_get_Headset_Reg() )
+					{
+						#ifdef FF_MMI_AUDIO_PROFILE	
+							//unregister headset
+							//mfw_headset_unregister();
+							TRACE_EVENT("headset unregister");
+							mfw_hook_unregister();
+						#endif /*FF_MMI_AUDIO_PROFILE*/
+					}
+				}
+				else
+				{
+					TRACE_EVENT("LOCK DISABLED");
+					//For USB MS
+					if( mmi_get_usbms_enum() )
+					{
+					#ifdef FF_MMI_USBMS      
+			      			//register USB enumeration
+			      			TRACE_EVENT("USB re-enumeration");
+		      				mfw_usbms_enum_control(MFW_USB_ENUM , MFW_USB_TYPE_ALL);
+					#endif /*FF_MMI_USBMS*/
+					}
+					//For Headset
+					if( mmi_get_Headset_Reg() )
+					{
+						#ifdef FF_MMI_AUDIO_PROFILE	
+							//register headset
+							//mfw_headset_register();
+						if(call_data.win_calling OR call_data.win_incoming OR call_data.calls.numCalls)
+							{
+								TRACE_EVENT("headset register");
+								mfw_hook_register();
+							}
+						#endif /*FF_MMI_AUDIO_PROFILE*/
+					}	
+					}
+			
+			display_info.TextId = TxtLockActivated;
+			pin_data->pin_case = PH_LOCK_ENDSUCC;
+			 display_info.Identifier = pin_data->pin_case;
+			  
+			  break;	
+  
+	case PH_LOCK_STATUS:
+		pin_data->pin_case = PH_LOCK_STATUS;
+		display_info.TextId = TxtPhone;
+      		switch(mfw_phlock_get_lock_status(MFW_PH_LOCK)) 
+      		{
+                      case MFW_PH_LOCK_DISABLE:
+				display_info.TextId2 = TxtLockDisabled;
+				break;
+                      case  MFW_PH_LOCK_ENABLE:
+				display_info.TextId2 = TxtLockEnabled; 
+				break;
+           	}
+     		break;
+
+	case PH_LOCK_NEW_ENDISFAIL:
+	{
+			if(phlock_win_handle)
+				phlock_win_handle = NULL;
+
+			if( phlock_kbd_handle)
+				phlock_kbd_handle = NULL;
+
+	pin_data->pin_case = FAILURE_PASS_CHG;
+	display_info.TextId = TxtCodeInc;
+	display_info.Identifier = pin_data->pin_case;
+
+	}
+			  break;
+ 	case NEW_PH_LOCK_FAIL:
+			if(phlock_win_handle)
+				phlock_win_handle = NULL;
+			
+			if( phlock_kbd_handle)
+				phlock_kbd_handle = NULL;
+
+			
+              	pin_data->pin_case = INPUT_NEW_PH_LOCK;
+			  display_info.TextId = TxtPsLockConfWrong;
+			  display_info.TextId2 = TxtPsLockConfwrong2;
+			  break;
+
+       case PH_LOCK_ENDIS_FAIL:
+	   	TRACE_EVENT("phlock_set_pin_msgs:PH_LOCK_ENDIS_FAIL");
+		//x0pleela 28 May, 2007  DR: OMAPS00132483
+		//get the phone lock status 
+		if ( mfw_get_Phlock_status() ) 
+			pin_data->pin_case = PH_LOCK_ENDIS_FAIL;
+		else
+			pin_data->pin_case = PH_LOCK_FAILURE;
+		display_info.Identifier = pin_data->pin_case;
+
+		if (autoPhLock_menu )
+			autoPhLock_menu = FALSE;
+
+		  display_info.TextId = TxtCodeInc;
+		break;	
+
+	case PH_LOCK_EN_FAIL:
+		pin_data->pin_case = PH_LOCK_FAILURE;
+		display_info.TextId = TxtNotLocked;
+		break;
+		
+		 	}
+
+    {
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)phlock_set_pin_info_cb, THREE_SECS, KEY_LEFT );
+	display_info.Identifier = pin_data->pin_case;
+	phlock_set_pin_mess_destroy(mess_data->pin_mess_win);
+
+	phlock_info_dialog(pin_data->pin_win,&display_info); //information screen
+	 dspl_Enable(1);
+    }
+	break;
+		
+	case TXT_PH_LOCK_ALL:
+	case PH_UNLOCK_REQ:
+		TRACE_EVENT(":phlock_set_pin_msgs: TXT_PH_LOCK_ALL");
+       	pin_data->display_id1 = TxtEnterPhUnlockCode;
+ 		phlock_set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PHLOCK,0,pin_data);
+		break;
+	case PH_LOCK_REQ_OLD:
+              pin_data->display_id1 = TxtEnterOldPsLock;
+		phlock_set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_PHLOCK,0,pin_data);
+		break;
+
+	case PH_LOCK_REQ_NEW:
+		pin_data->display_id1 = TxtEnterPsLockNew;
+		phlock_set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_NEW_PHLOCK,0,pin_data);
+		break;
+
+       case INPUT_NEW_PH_LOCK_AGAIN:
+              pin_data->display_id1 = TxtEnterPsLockconf;
+		phlock_set_pin_mess_destroy(mess_data->pin_mess_win);
+		SEND_EVENT(pin_data->pin_win,TXT_ENTER_NEW_PHLOCK_AGAIN,0,pin_data);
+              break;
+	default:
+		break;
+  }
+		
+}
+
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_info_cb
+ $Description:	settings pin information screen call back
+ $Returns:		void
+ $Arguments:	win, identifier, reason
+*******************************************************************************/
+void phlock_set_pin_info_cb(T_MFW_HND win, USHORT identifier, UBYTE reasons)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user;
+
+	TRACE_FUNCTION("MmiPins: phlock_set_pin_info_cb()");
+
+	switch(identifier)
+	{
+
+		case PH_LOCK_ENDSUCC:					
+				TRACE_EVENT("PH_LOCK_ENDSUCC");
+				
+				//x0pleela 28 May, 2007  DR: OMAPS00132483
+				//get the phone lock status 
+				if( mfw_get_Phlock_status() )
+	      			{
+	      			TRACE_EVENT("phlock_set_pin_info_cb: LOCK ENABLED");
+
+						//For USB MS
+	      				if( mmi_get_usbms_enum() )
+	      				{
+					#ifdef FF_MMI_USBMS      			
+						//unregister USB enumeration
+						TRACE_EVENT("USB de-enumeration");
+			      			mfw_usbms_enum_control(MFW_USB_NO_ENUM , MFW_USB_TYPE_ALL);
+					#endif /*FF_MMI_USBMS*/
+	      				}
+						
+					pin_data->set_state = DISABLE;
+					identifier = pin_data->pin_case = PH_UNLOCK_REQ;
+					SEND_EVENT(pin_data->pin_win,identifier,0,NULL);				
+	           		}
+												
+			break;
+
+			case PH_LOCK_ENDIS_FAIL:
+				TRACE_EVENT("PH_LOCK_ENDIS_FAIL");
+				dspl_Enable(1);
+				pin_data->set_state = DISABLE;
+				identifier = pin_data->pin_case = PH_UNLOCK_REQ;
+				
+				//x0pleela 15 May, 2007 DR: OMAPS00127483
+				//Starting the ringer again for either incoming call or alarm if the user has entered wrong unlocking pasword.
+				if( ( ( ( call_data.call_direction == MFW_CM_MTC ) &&  (phlock_dialog_mtc_win_handle) ) || ( phlock_alarm ) )
+					&& (phlock_win_handle)
+					#ifdef FF_MMI_AUDIO_PROFILE				
+						&& ( !mfwAudPlay)
+					#endif	
+				)
+				{
+					if( call_data.call_direction == MFW_CM_MTC ) 
+					{
+					#ifdef FF_MIDI_RINGER  
+						mfw_ringer_start(AS_RINGER_MODE_IC, TRUE, sounds_midi_ringer_start_cb);
+					#endif
+					}
+					else if ( phlock_alarm )
+					{
+					#ifdef FF_MIDI_RINGER  
+						mfw_ringer_start(AS_RINGER_MODE_ALARM, TRUE, sounds_midi_ringer_start_cb);
+					#endif
+					}
+					
+				}
+				SEND_EVENT(pin_data->pin_win,identifier,0,NULL);				
+			break;
+
+			case PH_LOCK_SETT_ABORT:      
+				SEND_EVENT(pin_data->pin_win,identifier,0,NULL);//pin_main data !!
+				break;				
+			
+
+		default:		
+		switch (reasons)
+		{
+			case INFO_KCD_LEFT:
+			case INFO_KCD_RIGHT:
+		
+			case INFO_TIMEOUT:
+			{
+			        pin_skClear();
+				phlock_setting_pin_destroy(pin_data->pin_win);// destroy pin settings dialog
+				//x0pleela 07 Apr, 2007  ER: OMAPS00122561
+				if( phlock_alarm) 
+				{
+					TRACE_EVENT("phlock_set_pin_info_cb: INFO_TIMEOUT ");
+					if( phlock_alarm_win_handle )
+						winShow(phlock_alarm_win_handle);
+				}	
+				if( call_data.call_direction == MFW_CM_MTC )
+				{
+					if( phlock_mtc_win_handle )
+						winShow(phlock_mtc_win_handle);
+					
+					if( phlock_dialog_mtc_win_handle )
+						winShow(phlock_dialog_mtc_win_handle);
+				}
+			}
+		
+			break;
+		}
+			break;
+	}
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:	phlock_sett_pin_edit
+ $Description:	help function for editor dialog
+ $Returns:		none
+ $Arguments:	window, event
+*******************************************************************************/
+static void phlock_sett_pin_edit(T_MFW_HND win, USHORT event)
+{
+
+//open the editor for entering the pin
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin * pin_data = (T_pin *)win_data->user; // pin main data
+
+	T_MFW_HND pin_edt_win;
+
+
+TRACE_FUNCTION("phlock_sett_pin_edit()");
+	pin_edt_win = phlock_set_pin_edt_create(pin_data->pin_win);
+
+
+
+    if(pin_edt_win)
+	{
+		SEND_EVENT(pin_edt_win,event,0,pin_data);
+	}
+ 
+
+
+}
+
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_edt_create
+ $Description:	Creation of an instance  for the PIN Editor dialog settings
+				Type of dialog : SINGLE_DYNAMIC
+ $Returns:		window
+ $Arguments:	parent window
+*******************************************************************************/
+T_MFW_HND phlock_set_pin_edt_create (T_MFW_HND parent_window)
+{
+  T_pin_edt * data = (T_pin_edt *)ALLOC_MEMORY (sizeof (T_pin_edt));
+  T_MFW_WIN * win;
+
+  data->pin_edt_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)phlock_set_pin_edt_win_cb);
+
+  TRACE_FUNCTION("MmiPins:phlock_set_pin_edt_create");
+
+  if (data->pin_edt_win EQ 0)
+    return 0;
+  
+	phlock_win_handle = data->pin_edt_win;
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog    = (T_DIALOG_FUNC)phlock_set_pin_editor;
+  data->mmi_control.data      = data;
+  data->parent_win = parent_window;
+  win			      = ((T_MFW_HDR *)data->pin_edt_win)->data;
+  win->user		      = (void *) data;
+
+  /*
+   * Create any other handler
+   */
+
+  data->tim_out_handle = tim_create(data->pin_edt_win,TIMEOUT,(T_MFW_CB)phlock_pin_edt_tim_out_cb);
+
+/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+  data->editor = ATB_edit_Create(&data->editorPinAttr,0);
+#else /* NEW_EDITOR */
+  data->editor_handle = edt_create(data->pin_edt_win,&data->editpinAttr,0,0);
+#endif /* NEW_EDITOR */
+  data->kbd_handle = kbd_create(data->pin_edt_win,KEY_ALL,(T_MFW_CB)phlock_set_pin_kbd_cb);
+phlock_kbd_handle = data->kbd_handle;
+
+  data->kbd_long_handle = kbd_create(data->pin_edt_win,KEY_ALL | KEY_LONG,(T_MFW_CB)phlock_set_pin_edt_kbd_long_cb);
+  /*
+   * return window handle
+   */
+  return data->pin_edt_win;
+}
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_edt_win_cb
+ $Description:	Callback function for editor windows
+ $Returns:		status int
+ $Arguments:	event, window
+*******************************************************************************/
+static int phlock_set_pin_edt_win_cb (T_MFW_EVENT event,T_MFW_WIN * win)
+{
+  T_pin_edt * edt_data = (T_pin_edt *)win->user;//pin edt data
+  T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+  T_pin     * pin_data = (T_pin *)win_pin->user; // pin main data
+
+  TRACE_FUNCTION("phlock_set_pin_edt_win_cb");
+
+  if (event EQ MfwWinVisible)
+  {
+
+  /* SPR#1428 - SH - New Editor changes */
+  #ifdef NEW_EDITOR
+	ATB_edit_Show(edt_data->editor);
+	
+	if (edt_data->editor->update!=ED_UPDATE_TRIVIAL)
+	{
+		/* Set the colour for drawing title */
+
+		resources_setTitleColour(COLOUR_EDITOR);
+
+		dspl_Clear(0,0, SCREEN_SIZE_X-1, edt_data->editor->attr->win_size.py-1);
+
+		/* Title */
+
+		if(pin_emergency_call == TRUE)
+		{					
+			PROMPT(0,0,0,TxtEmergency);
+		}
+		else
+		{
+		   	PROMPT(0,0,0,pin_data->display_id1);
+#ifdef SIM_PERS
+			if( pin_data->display_id2)
+				PROMPT(0,20,0,pin_data->display_id2);
+#endif
+		}
+
+		/* Soft keys */
+		
+		if ((strlen((char*)edt_data->pin) >= MIN_PIN) && (strlen((char*)edt_data->pin) < (MAX_PIN + 1)))
+		{
+				if(!(edt_data->gsm_state))	  /* usual way for PIN 4 digits     */
+				{
+#ifdef SIM_PERS
+					if(pin_data->display_id1 == TxtPhoneBlocked)
+						softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);
+					else
+#endif
+					softKeys_displayId(TxtSoftOK,TxtDelete,0, COLOUR_EDITOR_XX);
+				}
+			}
+		//xvilliva - Added the below "if" and moved the existing "if" in to "else". "if" avoids "delete" key display.
+		if((strlen((char*)edt_data->pin) == 0))//  May 13, 2004        REF: CRR 13623  xvilliva
+		{
+			TRACE_EVENT("clear softkey 16 - zero length");
+			softKeys_displayId(TxtNull,TxtNull,0, COLOUR_EDITOR_XX);												
+		}
+		else if((strlen((char*)edt_data->pin) < MIN_PIN) && (edt_data->emergency_call != TRUE))
+		{
+			TRACE_EVENT("clear softkey 16");	
+			softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);												
+		}
+#ifdef SIM_PERS
+		else if((strlen((char*)edt_data->pin) < MIN_PIN) && (edt_data->emergency_call == TRUE))
+		{
+			TRACE_EVENT("clear softkey 16");	
+			if(pin_emergency_call == TRUE)
+				softKeys_displayId(TxtSoftCall,TxtDelete,0, COLOUR_EDITOR_XX);												
+			else
+			softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);												
+		}
+#endif
+	}
+	
+	edt_data->editor->update = ED_UPDATE_DEFAULT;
+	
+#else /* NEW_EDITOR */
+	pin_icons();
+   	PROMPT(INFO_TEXT_X,INFO_TEXT_Y,0,pin_data->display_id1);
+   	
+  TRACE_FUNCTION("softkey 6");
+	softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);
+#endif /* NEW_EDITOR */
+ 
+    return 1;
+  }
+  return 0;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_editor
+ $Description:	Pin editor Dialog Signal Handling function
+ $Returns:		void
+ $Arguments:	window, event, value, parameters
+*******************************************************************************/
+static void phlock_set_pin_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;
+
+    T_pin * pin_data = (T_pin *)parameter;//pin main data
+
+	edt_data->pin_case_edit = pin_data->pin_case;
+
+	TRACE_FUNCTION("MmiPins:phlock_set_pin_editor");
+
+  /*
+   * depending on event
+   */
+  switch (event)
+  {
+	
+//x0pleela 06 Mar, 2007 ER: OMAPS00122561
+#ifdef FF_PHONE_LOCK
+	case INPUT_PH_LOCK:
+	case INPUT_NEW_PH_LOCK:
+	case INPUT_NEW_PH_LOCK_AGAIN:
+#endif /*FF_PHONE_LOCK*/
+		//SPR#717 - GW - Wrong structures being cleared
+		memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string  */
+		memset(edt_data->puk, '\0', sizeof(edt_data->puk));
+		memset(edt_data->new_pin, '\0', sizeof(edt_data->new_pin));
+		memset(edt_data->old_pin, '\0', sizeof(edt_data->old_pin));
+
+		/* Set up pin entry attributes */
+		/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+		AUI_edit_SetAttr( &edt_data->editorPinAttr, PIN_EDIT_RESET, COLOUR_EDITOR_XX, EDITOR_FONT, 0, ED_CURSOR_UNDERLINE, ATB_DCS_ASCII, (UBYTE *)edt_data->edtbuf, MAX_DIG);
+		clear_edit_array(edt_data);	     /*    clear editor buffer	    */
+		edt_data->editor_index = 0;
+		ATB_edit_Init(edt_data->editor);
+		ATB_edit_Show(edt_data->editor);
+#else /* NEW_EDITOR */
+		editor_attr_init( &edt_data->editpinAttr, PIN_EDIT_RESET, edtCurBar1,0,(char*)edt_data->edtbuf,MAX_DIG,COLOUR_EDITOR_XX);
+		clear_edit_array(edt_data);	     /*    clear editor buffer	    */
+		edt_data->editor_index = 0;
+		edtShow(edt_data->editor_handle);
+#endif /* NEW_EDITOR */
+
+		winShow(edt_data->pin_edt_win);
+
+		break;
+
+	default:
+		break;
+  }
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	set_pin_kbd_cb
+ $Description:	Callback function for keyboard settings pin
+ $Returns:		status int
+ $Arguments:	event, keyboard control block
+*******************************************************************************/
+static int phlock_set_pin_kbd_cb (T_MFW_EVENT event,T_MFW_KBD *  kc)
+{
+    T_MFW_HND win = mfw_parent(mfw_header());
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;//pin edt data
+
+	T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+	T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
+
+	char timer = TRUE;
+
+	timStop(edt_data->tim_out_handle);/* stop entering timer      */
+
+	TRACE_FUNCTION("MmiPins:phlock_set_pin_kbd_cb");
+
+//x0pleela 12 Mar, 2007  ER: OMAPS00122561	
+#if defined ( SIM_PERS) || defined (FF_PHONE_LOCK)
+ 	#if defined (SIM_PERS ) AND !defined (FF_PHONE_LOCK)
+		if ( !perm_blocked) 
+	#elif defined (FF_PHONE_LOCK ) AND !defined (SIM_PERS)
+		if ((mfw_phlock_get_lock_status(MFW_PH_LOCK) == MFW_PH_LOCK_DISABLE) ||
+			(mfw_phlock_get_autolock_status(MFW_AUTO_PH_LOCK) == MFW_PH_LOCK_DISABLE) )
+	#elif defined (SIM_PERS ) AND defined (FF_PHONE_LOCK)
+		if( ( !perm_blocked) || 
+			(mfw_phlock_get_lock_status(MFW_PH_LOCK) == MFW_PH_LOCK_DISABLE) 	||
+			(mfw_phlock_get_autolock_status(MFW_AUTO_PH_LOCK) == MFW_PH_LOCK_DISABLE))
+	#endif
+	
+#endif /* SIM_PERS OR FF_PHONE_LOCK */
+	{
+	switch(kc->code)
+	{
+		case KCD_0:
+		case KCD_1:
+		case KCD_2:
+		case KCD_3:
+		case KCD_4:
+		case KCD_5:
+		case KCD_6:
+		case KCD_7:
+		case KCD_8:
+		case KCD_9:
+		case KCD_STAR:
+//x0pleela 12 Mar, 2007  ER: OMAPS00122561
+			if(edt_data->editor_index < PH_MAX_DIG)
+			{
+				/* xreddymn OMAPS00083495 Jul-04-2006 
+				 * Limit PIN1, PIN2 entries to 8 digits.
+				 */
+				if((
+					 (edt_data->pin_case_edit==INPUT_PH_LOCK)  ||
+					(edt_data->pin_case_edit==INPUT_NEW_PH_LOCK)  ||
+					(edt_data->pin_case_edit==INPUT_NEW_PH_LOCK_AGAIN)
+					)
+					&&(edt_data->editor_index>=4) 
+
+					&& (!edt_data->gsm_state))
+					return MFW_EVENT_CONSUMED;
+				else
+				{
+					if(kc->code EQ KCD_STAR)
+						edt_data->pin[edt_data->editor_index] = STAR;
+					else
+						edt_data->pin[edt_data->editor_index] = '0' + kc->code;
+
+					/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+					ATB_edit_AsciiChar(edt_data->editor, '*', TRUE);
+#else /* NEW_EDITOR */
+					edtChar(edt_data->editor_handle,'*');/* hide security code */
+#endif /* NEW_EDITOR */
+
+					edt_data->editor_index++;
+					check_set_pins(win,edt_data); /* digits check depends on status pin_case */
+					if(edt_data->gsm_state)
+						pin_data->gsm_state = edt_data->gsm_state;
+				}
+			}
+			winShow(edt_data->pin_edt_win);
+			break;
+
+		case KCD_HASH:
+		case KCD_LEFT:
+
+			if(pin_emergency_call == TRUE)
+			{
+				callNumber((UBYTE *)pin_emerg_call);
+				pin_emergency_call = FALSE;
+#ifdef FF_PHONE_LOCK
+				break;
+#endif //FF_PHONE_LOCK
+			}
+
+			
+			if(!(strncmp((char*)edt_data->pin,"**052*",IDENT_GSM_2))||!(strncmp((char*)edt_data->pin,"**05*",IDENT_GSM_1)))
+
+			{
+				edt_data->pin[edt_data->editor_index] = HASH;
+				// SPR#1428 - SH - New Editor changes 
+#ifdef NEW_EDITOR
+				ATB_edit_AsciiChar(edt_data->editor, edt_data->pin[edt_data->editor_index], TRUE);
+#else // NEW_EDITOR 
+				edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]);
+#endif // NEW_EDITOR 
+				edt_data->editor_index++;
+			}
+
+			
+
+			// We save the pin2 entered in to this global variable which we
+			// use while calling sAT_PlusCLCK(), while locking or unlocking ALS. 					
+			memset(g_pin2,0,MAX_PIN+1);
+			if(edt_data->pin_case_edit EQ INPUT_PIN2 || edt_data->pin_case_edit EQ INPUT_NEW_PIN2)
+				strncpy(g_pin2,(char*)edt_data->pin,MAX_PIN);//xvilliva SPR17291
+			switch(edt_data->pin_case_edit)
+			{
+//x0pleela 06 Mar, 2007 ER: OMAPS00122561
+#ifdef FF_PHONE_LOCK
+		 case INPUT_PH_LOCK:
+#endif /*FF_PHONE_LOCK*/
+				
+					TRACE_EVENT_P1("pin_emergency_call = %d", pin_emergency_call);
+					TRACE_EVENT("When 'Call' is pressed!");
+
+					/* PIN is long enough, finish editing */
+					
+					if ((strlen((char*)edt_data->pin) >= MIN_PIN)  && !(edt_data->gsm_state))
+					{
+						clear_edit_array(edt_data);	    /*	   clear editor array */
+						timer = FALSE;
+						strncpy((char*)edt_data->old_pin,(char*)edt_data->pin,MAX_PIN);
+						strncpy((char*)pin_data->old_pin, (char*)edt_data->old_pin,MAX_PIN);
+						
+     						 if(edt_data->pin_case_edit EQ INPUT_PH_LOCK)
+                         			{
+	                        			TRACE_EVENT("phlock_set_pin_kbd_cb: INPUT_PH_LOCK");
+							if(phlock_win_handle)
+								phlock_win_handle = NULL;
+							
+							if( phlock_kbd_handle)
+								phlock_kbd_handle = NULL;
+
+						    phlock_set_pin_edt_destroy(edt_data->pin_edt_win);
+							SEND_EVENT(pin_data->pin_win,PH_LOCK_END,0,pin_data);
+						}
+						
+					}
+					else
+					{
+						if(kc->code EQ KCD_HASH)
+						{	
+							if (!(edt_data->gsm_state))	/* could become gsm */
+							{
+								check_pins(win,edt_data);
+								if(edt_data->gsm_state)
+									pin_data->gsm_state = edt_data->gsm_state;
+							}
+							else /* finish gsm string */
+							{
+								timer = FALSE;
+								if(edt_data->pin_case_edit EQ INPUT_PIN1)
+									pin_data->pin_case = PIN1_REQ_OLD;
+								else
+									pin_data->pin_case = PIN2_REQ_OLD;
+								//xrashmic 1 Jul, 2006 OMAPS00075784
+								//Blue screen fix - Wrong window was being sent
+								gsm_sec_execute_set(pin_data->pin_win,edt_data);	    /* execute gsm string */
+
+							}
+						}
+					}
+					break;
+
+					
+//x0pleela 06 Mar, 2007 ER: OMAPS00122561
+#ifdef FF_PHONE_LOCK
+				case INPUT_NEW_PH_LOCK:
+#endif /*FF_PHONE_LOCK*/					
+					if ((strlen((char*)edt_data->pin) >= MIN_PIN)  && !(edt_data->gsm_state))
+					{
+						clear_edit_array (edt_data);			  /* clear editor array */
+						timer = FALSE;
+						strncpy((char*)edt_data->new_pin, (char*)edt_data->pin,MAX_PIN);	  /*  store new pin	  */
+						strncpy((char*)pin_data->new_pin, (char*)edt_data->new_pin,MAX_PIN);
+						
+				//x0pleela 06 Mar, 2007  ER: OMAPS00122561
+				#ifdef  FF_PHONE_LOCK
+					if(pin_data->pin_case EQ INPUT_NEW_PH_LOCK)
+					{
+                            		phlock_set_pin_edt_destroy(edt_data->pin_edt_win);
+                                   	SEND_EVENT(pin_data->pin_win,INPUT_NEW_PH_LOCK_AGAIN,0,NULL);
+                                 	}
+                             #endif /* FF_PHONE_LOCK */							
+						
+					}
+					else
+					{
+						if(kc->code EQ KCD_HASH)
+						{	
+							if(!(edt_data->gsm_state)) /* could become gsm	    */
+							{
+								check_pins(win,edt_data);
+								if(edt_data->gsm_state)
+						       		pin_data->gsm_state = edt_data->gsm_state;
+							}
+							else /* finish gsm string  */
+							{
+								timer = FALSE;
+
+								if(edt_data->pin_case_edit EQ INPUT_NEW_PIN)
+									pin_data->pin_case = PIN1_REQ_OLD;
+								else
+									pin_data->pin_case = PIN2_REQ_OLD;
+								//xrashmic 1 Jul, 2006 OMAPS00075784
+								//Blue screen fix - Wrong window was being sent
+								gsm_sec_execute_set(pin_data->pin_win,edt_data);	    /* execute gsm string */
+
+							}
+						}
+					}
+					break;
+//x0pleela 06 Mar, 2007 ER: OMAPS00122561
+#ifdef FF_PHONE_LOCK
+				case INPUT_NEW_PH_LOCK_AGAIN:
+#endif	/*FF_PHONE_LOCK*/					
+				
+						if ((strlen((char*)edt_data->pin) >= MIN_PIN) && !(edt_data->gsm_state))
+						{
+							clear_edit_array (edt_data);			  /* clear editor array */
+							timer = FALSE;
+							if(strcmp((char*)edt_data->pin, (char*)pin_data->new_pin) EQ 0) /* compare PINs successfull*/
+							{
+								strncpy((char*)pin_data->new_pin, (char*)edt_data->pin,MAX_PIN);
+								
+								//x0pleela 06 Mar, 2007 ER: OMAPS00122561
+							#ifdef FF_PHONE_LOCK
+								if (pin_data->pin_case EQ INPUT_NEW_PH_LOCK_AGAIN)
+                                                   	{
+                                                     		phlock_set_pin_edt_destroy(edt_data->pin_edt_win);
+                                                    		SEND_EVENT(pin_data->pin_win, NEW_PH_LOCK_END,0,pin_data);
+                                                   	}
+							#endif /*FF_PHONE_LOCK*/								
+								
+							}
+							else
+							{									/* new PIN != new PIN again */
+
+								
+								//x0pleela 06 Mar, 2007 ER: OMAPS00122561
+							#ifdef FF_PHONE_LOCK
+								if (pin_data->pin_case EQ INPUT_NEW_PH_LOCK_AGAIN)
+                                                   	{
+                                                     		phlock_set_pin_edt_destroy(edt_data->pin_edt_win);
+                                                    		SEND_EVENT(pin_data->pin_win, NEW_PH_LOCK_FAIL,0,pin_data);
+                                                   	}
+							#endif /*FF_PHONE_LOCK*/									
+								
+							}
+						}
+						else
+						{
+							if(kc->code EQ KCD_HASH)
+							{
+								if (!(edt_data->gsm_state)) /* could become gsm	    */
+								{
+									check_pins(win,edt_data);
+									if(edt_data->gsm_state)
+							       		pin_data->gsm_state = edt_data->gsm_state;
+								}
+								else /* finish gsm string  */
+								{
+									timer = FALSE;
+									if(edt_data->pin_case_edit EQ INPUT_NEW_PIN_AGAIN)
+										pin_data->pin_case = PIN1_REQ_OLD;
+									else
+										pin_data->pin_case = PIN2_REQ_OLD;
+								//xrashmic 1 Jul, 2006 OMAPS00075784
+								//Blue screen fix - Wrong window was being sent
+								gsm_sec_execute_set(pin_data->pin_win,edt_data);	    /* execute gsm string */
+
+								}
+							}
+						}
+						break;
+					
+					default:
+						break;
+				}
+				break;
+				
+/* KCD_HUP */
+			case KCD_HUP:
+				if( edt_data->pin_case_edit != INPUT_PUK1)//xvilliva SPR13623
+				{
+				clear_edit_array(edt_data);
+				timer = FALSE;
+//x0pleela 30 Mar, 2007  ER OMAPS00122561
+#ifdef FF_PHONE_LOCK
+			if( (!phlock_win_handle) || (pin_data->set_state != DISABLE) )
+				{
+#endif //FF_PHONE_LOCK				
+				phlock_set_pin_edt_destroy(edt_data->pin_edt_win);
+	    		SEND_EVENT(pin_data->pin_win,PH_LOCK_SETT_ABORT,0,NULL); // abort settings menu
+#ifdef FF_PHONE_LOCK
+				}
+#endif //FF_PHONE_LOCK	    		
+				}
+				break;
+
+/* KCD RIGHT */
+
+			case KCD_RIGHT: 	
+			//nm, go back to the submenu if there is no character on the screen
+				if(strlen((char*)edt_data->pin) == 0 && edt_data->pin_case_edit != INPUT_PUK1)//xvilliva SPR13623
+				{
+					clear_edit_array(edt_data);
+					timer = FALSE;
+//x0pleela 30 Mar, 2007  ER OMAPS00122561
+#ifdef FF_PHONE_LOCK
+			if( (!phlock_win_handle) || (pin_data->set_state != DISABLE) )
+				{
+#endif //FF_PHONE_LOCK
+					phlock_set_pin_edt_destroy(edt_data->pin_edt_win);
+		    		SEND_EVENT(pin_data->pin_win,PH_LOCK_SETT_ABORT,0,NULL); // abort settings menu
+					return 1;			    
+#ifdef FF_PHONE_LOCK
+				}
+#endif //FF_PHONE_LOCK					
+				}
+
+				if(edt_data->editor_index EQ 0)
+					;
+				else
+					edt_data->editor_index--;
+
+				edt_data->pin[edt_data->editor_index] = '\0';
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				ATB_edit_DeleteLeft(edt_data->editor, TRUE); /* SPR#2342 - SH */
+#else /* NEW_EDITOR */
+				edtChar(edt_data->editor_handle,ecBack);/* delete character    */
+#endif /* NEW_EDITOR */
+
+				if(strlen((char*)edt_data->pin)<MIN_PIN)
+				{
+				}
+
+				edt_data->emergency_call = FALSE;
+				if(edt_data->pin_case_edit EQ INPUT_PUK1)  /* special case ?? */
+					winShow(edt_data->pin_edt_win);
+				else
+				{
+					check_set_pins(win,edt_data);	       /* check remain for emergency call  */
+					winShow(edt_data->pin_edt_win);
+				}
+			    break;
+			    
+			default:
+				break;
+		}
+	}
+//x0pleela 12 Mar, 2007  ER: OMAPS00122561
+#if defined (SIM_PERS) || defined ( FF_PHONE_LOCK )
+	else
+#ifdef FF_PHONE_LOCK
+    		if((mfw_phlock_get_lock_status(MFW_PH_LOCK) == MFW_PH_LOCK_ENABLE) || 
+			(mfw_phlock_get_autolock_status(MFW_AUTO_PH_LOCK) == MFW_PH_LOCK_ENABLE) )
+#endif /*FF_PHONE_LOCK*/
+	{
+		switch(kc->code)
+		{
+		case KCD_0:
+		case KCD_1:
+		case KCD_2:
+		case KCD_6:
+		case KCD_8:
+		case KCD_9:
+			if(edt_data->editor_index < MAX_DIG)
+			{
+				edt_data->pin[edt_data->editor_index] = '0' + kc->code;
+
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				ATB_edit_AsciiChar(edt_data->editor, '*', TRUE);
+#else /* NEW_EDITOR */
+				edtChar(edt_data->editor_handle,'*');/* hide security code */
+#endif /* NEW_EDITOR */
+
+				edt_data->editor_index++;
+				check_set_pins(win,edt_data); /* digits check depends on status pin_case */
+				if(edt_data->gsm_state)
+					pin_data->gsm_state = edt_data->gsm_state;
+			}
+			winShow(edt_data->pin_edt_win);
+			break;
+				
+	
+		case KCD_LEFT:
+
+			if(pin_emergency_call == TRUE)
+			{
+				callNumber((UBYTE *)pin_emerg_call);
+				pin_emergency_call = FALSE;
+			}
+			break;
+
+		case KCD_RIGHT: 	
+
+//				if( edt_data->edtbuf == '\0' )
+//					break;
+				if(edt_data->editor_index EQ 0)
+					;
+				else
+					edt_data->editor_index--;
+
+				edt_data->pin[edt_data->editor_index] = '\0';
+				/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+				ATB_edit_DeleteLeft(edt_data->editor, TRUE); /* SPR#2342 - SH */
+#else /* NEW_EDITOR */
+				edtChar(edt_data->editor_handle,ecBack);/* delete character    */
+#endif /* NEW_EDITOR */
+
+				if(strlen((char*)edt_data->pin)<MIN_PIN)
+				{
+				}
+
+				edt_data->emergency_call = FALSE;
+				if(edt_data->pin_case_edit EQ INPUT_PUK1)  /* special case ?? */
+					winShow(edt_data->pin_edt_win);
+				else
+				{
+					check_set_pins(win,edt_data);	       /* check remain for emergency call  */
+					winShow(edt_data->pin_edt_win);
+				}
+			    break;
+
+			default:
+				break;
+			}	
+	}
+#endif /* SIM_PERS  OR FF_PHONE_LOCK*/
+	if (timer)
+		tim_start(edt_data->tim_out_handle);/* start timer for entering */
+	return 1;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_edt_kbd_long_cb
+ $Description:	Callback function for keyboard long
+ $Returns:		status int
+ $Arguments:	event, keyboard control block
+*******************************************************************************/
+static int phlock_set_pin_edt_kbd_long_cb (T_MFW_EVENT event,T_MFW_KBD *  kc)
+{
+    T_MFW_HND win = mfw_parent(mfw_header());
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;//pin edt data
+
+    TRACE_FUNCTION("MmiPins:phlock_set_pin_edt_kbd_long_cb");
+
+    if ((event & KEY_CLEAR) && (event & KEY_LONG))
+	{
+			timStop(edt_data->tim_out_handle); /* stop entering timer	*/
+			clear_edit_array(edt_data);
+			memset(edt_data->pin,'\0',sizeof(edt_data->pin));/* initial string */
+			
+			/* SPR#1428 - SH - New Editor: string changed, update word-wrap*/
+	#ifdef NEW_EDITOR
+			ATB_edit_Refresh(edt_data->editor);
+	#endif /* NEW_EDITOR */
+			edt_data->editor_index = 0;
+			edt_data->emergency_call = FALSE;
+			winShow(edt_data->pin_edt_win);
+	}
+
+  return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:	phlock_pin_edt_tim_out_cb
+ $Description:	Callback function for timer (watchdog entering)
+ $Returns:		void
+ $Arguments:	window handler event, timer control block 
+ 
+*******************************************************************************/
+static void phlock_pin_edt_tim_out_cb (T_MFW_EVENT event,T_MFW_TIM * t)
+{
+    T_MFW_HND win = mfw_parent(mfw_header());
+
+	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
+	T_pin_edt * edt_data = (T_pin_edt *)win_data->user;
+
+	T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
+	T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
+
+    TRACE_FUNCTION("MmiPins:phlock_pin_edt_tim_out_cb");
+
+
+    TRACE_FUNCTION("clear softkey 7");
+
+	// clear the softkeys
+	pin_skClear();
+	clear_edit_array(edt_data);
+	// clear the input
+	
+	/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+	ATB_edit_ClearAll(edt_data->editor);
+#else /* NEW_EDITOR */
+	pin_rectClear( &edt_data->editpinAttr.win );
+    memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string  */
+#endif /* NEW_EDITOR */
+
+	edt_data->editor_index = 0;
+	edt_data->gsm_state = FALSE;
+	pin_data->gsm_state = FALSE;
+
+	winShow(edt_data->pin_edt_win);
+}
+
+/*******************************************************************************
+
+ $Function:	phlock_setting_pin_destroy 
+ $Description:	Destroy the settings pin main dialog.
+ $Returns:		none
+ $Arguments:	window
+*******************************************************************************/
+void phlock_setting_pin_destroy  (T_MFW_HND own_window)
+{
+  T_pin * data;
+  T_MFW_WIN * win;
+
+  if (own_window)
+  {
+	 TRACE_FUNCTION("MmiPins:phlock_setting_pin_destroy");
+
+	 win = ((T_MFW_HDR *)own_window)->data;
+     data = (T_pin *)win->user;
+
+	 if(data)
+	 {
+      /*
+       * Exit SIM and Delete SIM Handler
+       */
+	 sim_delete (data->sim_handle);
+
+      /*
+       * Delete WIN Handler
+       */
+	  set_pin_windows = 0;
+      win_delete (data->pin_win);
+      data->pin_win=0;
+	if(data)
+	 FREE_MEMORY((void *)data,(sizeof(T_pin)));
+	 }
+  }
+}
+
+/*******************************************************************************
+
+ $Function:	phlock_set_pin_edt_destroy
+ $Description:	Destroy the pin editor dialog
+ $Returns:		none
+ $Arguments:	window
+*******************************************************************************/
+void phlock_set_pin_edt_destroy(T_MFW_HND own_window)
+{
+  T_pin_edt * data ;
+  T_MFW_WIN * win;
+
+  if (own_window)
+  {
+	  TRACE_FUNCTION("MmiPins:phlock_set_pin_edt_destroy");
+
+	  win = ((T_MFW_HDR *)own_window)->data;
+	  data = (T_pin_edt *)win->user;
+
+	  if(data)
+	  {
+      /*
+       * Delete WIN Handler
+       */
+	      win_delete (data->pin_edt_win);
+	      FREE_MEMORY((void *)data,(sizeof(T_pin_edt)));
+	  }
+   }
+}
+#endif /* FF_PHONE_LOCK */
+
+
+