view src/ui/bmi/mmiPins.c @ 265:e57bfdadf49a

mmiIcons.c: fix bogus icnType in incoming_call_animate[] The incoming call animation icons are actually drawn in 256-color format, but they were incorrectly declared as BMP_FORMAT_32BIT_COLOUR in the incoming_call_animate[] array. Why were they still getting displayed correctly despite this bogosity? Answer: because the mmi_dialogs_animation_new_CB() function overrides the icon bitmap type to 0x02, which means 256-color format. Needless to say, the icon format should be made correct at the source of the data, and at some later point we may need to remove the override from the animation display function.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 17 May 2021 07:18:36 +0000
parents 368f10ebcc64
children
line wrap: on
line source

/*******************************************************************************

                    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 */