FreeCalypso > hg > tcs211-l1-reconst
diff g23m/condat/ms/src/bmi/MmiPins.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/bmi/MmiPins.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,7942 @@ + +/******************************************************************************* + + 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 + + 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" + +#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); + + + + +/* 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); // RAVI +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); // RAVI + +// 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 +void mmi_simlock_reset_fc_value(T_MFW_HND win); +void mmi_simlock_en_dis_verify(T_MFW_HND win); +#endif + +#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; + 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; + +//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; +#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 + + + +/******************************************************************************* + + $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); +} + + +/******************************************************************************* + + $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 // RAVI + +// BYTE reconf_handling = NO_ACTION; // RAVI +// BYTE reconf_defreeze_display = 1; // RAVI +/*********************/ + + 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 */ + + /* 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 + /* 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 + + + 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 + + + switch (status->sim_procedure) + { + /* + * Initial activation of the SIM card + */ + case MFW_SIM_ACTIVATION: + /* + * check the result of activation + */ + 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: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 status, max, curr; +#endif + TRACE_FUNCTION("sim_event_cb_main:PUK1 req"); +#ifdef SIM_PERS + status =mfw_simlock_check_status(0,&max, &curr); + if(status== MFW_SIM_BLOCKED) + { + perm_blocked = 0; +#endif + SEND_EVENT(pin_data->pin_win,PUK1_REQ_ACT_INFO,0,pin_data); +#ifdef SIM_PERS + } + else if (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: + 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"); + 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"); + 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"); + 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"); + 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"); + SEND_EVENT(pin_data->pin_win,INPUT_CLOCK_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"); + 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 +} + + +/******************************************************************************* + + $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 // RAVI +// T_pin_edt * edt_data = (T_pin_edt *) parameter;//pin editor data // RAVI + + // 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) + { + // 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: +#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: +#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: + 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; + } + TRACE_FUNCTION_P1("sim_status: %d", gsim_status); +#else + pins_loadEditDefault (&editor_data, TxtEnterPuk1, PUK1_REQ); +#endif + 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 = 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: + 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; + } +#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 " + TRACE_EVENT("NO_SIM OR INVALID_SIM OR INVALID IMEI"); + /* 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); + + } + 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; + } + 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: + { + +// U8 uMode; // RAVI + /* + *** 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) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; +// T_pin * pin_data = (T_pin *)win_data->user; // pin main data // RAVI + + 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 // RAVI + + 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)) + { + /* 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 + 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)) + { /* 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)) && !(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; // RAVI + 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; + } +} + + + +/******************************************************************************* + + $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; // RAVI + 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; + } +} + + + +/******************************************************************************* + + $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: + //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 // RAVI + //EF_SIMLCK simlck;MC, not needed SPR 1351 +// ULONG timcount = TIM_LOCK; // RAVI +// UBYTE i; // RAVI + + 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: +#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 + display_info.TextId = TxtPhoneBlocked; +#else + display_info.TextId = TxtSimBlocked; +#endif + 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 status,curr_fail_reset, curr_succ_reset; + status = 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 status,curr_fail_reset, curr_succ_reset; + status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset); + //if( curr_succ_reset ) + pin_data->pin_case = PIN_OK; + //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; + } + +#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); + + 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; + 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; + } +} + + + +/******************************************************************************* + + $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 +/* SH 18/01/02. Flag for GPRS icon. + #endif +/* 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 */ +} + + + +/******************************************************************************* + + $Function: clearEditArray + $Description: clear EditArray + $Returns: none + $Arguments: pin editor attributes +*******************************************************************************/ +static void clear_edit_array (void * parameter) +{ +// U8 i; // RAVI + 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 status1,curr_fail_reset1, curr_succ_reset1; +#endif + TRACE_FUNCTION("pin_info_cb: PIN_OK"); + +#ifdef SIM_PERS + status1 = 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: + case PUK1_REQ: + case INPUT_NEW_PIN: + SEND_EVENT(pin_data->pin_win,identifier,0,NULL);//pin_main data !! + break; +#ifdef SIM_PERS + case SMLK_PUK: + { +#ifdef SIM_PERS + int status1,curr_fail_reset1, curr_succ_reset1; +#endif + +#ifdef SIM_PERS + 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 + { +#endif + switch(mmi_simlock_aciErrDesc & 0x0000FFFF) + { + case CME_ERR_NetworkPersPinReq: + TRACE_FUNCTION("Leela: CME_ERR_NetworkPersPinReq"); + SEND_EVENT(pin_data->pin_win,INPUT_NLOCK_PIN_REQ,0,pin_data); + break; + + case CME_ERR_NetworkSubsetPersPinReq: + TRACE_FUNCTION("CME_ERR_NetworkSubsetPersPinReq"); + SEND_EVENT(pin_data->pin_win,INPUT_NSLOCK_PIN_REQ,0,pin_data); + break; + + case CME_ERR_ProviderPersPinReq: + TRACE_FUNCTION("CME_ERR_ProviderPersPinReq"); + SEND_EVENT(pin_data->pin_win,INPUT_SPLOCK_PIN_REQ,0,pin_data); + break; + + case CME_ERR_CorporatePersPinReq: + TRACE_FUNCTION("CME_ERR_CorporatePersPinReq"); + SEND_EVENT(pin_data->pin_win,INPUT_CLOCK_PIN_REQ,0,pin_data); + break; + + case CME_ERR_PhSimPinReq: + TRACE_FUNCTION("CME_ERR_PhSimPinReq"); + 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("Lee: PUK Req"); + //if( !curr_fail_reset) + { + C_KEY_REQ = 1; + SEND_EVENT(pin_data->pin_win,PUK1_REQ,0,pin_data); + } + //else + // { + // perm_blocked = 1; + //SEND_EVENT(pin_data->pin_win,PERM_BLK,0,pin_data); + //} + break; + + default: + TRACE_FUNCTION("Undefined error"); + break; + } +#ifdef SIM_PERS + } +#endif + } + 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; + } +} + + + +/******************************************************************************* + + $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 // RAVI + + 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: + /* + * 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; + } +} + + + +/******************************************************************************* + + $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 // RAVI +// T_pin_edt * edt_data = (T_pin_edt *) parameter;//pin editor data // RAVI + 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: +#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; + + 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; +#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; +#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); + 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( 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); + 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 = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; + T_MFW_SIM_PIN_STATUS status; + + + status.type = MFW_SIM_PLOCK;//get pin1 status + 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_DISPLAY_DATA display_info; + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; + T_MFW_SIM_PIN_STATUS status; + + TRACE_FUNCTION("SIMLock_disable()"); + status.type = MFW_SIM_PLOCK;//get pin1 status + 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 = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; + int status; + 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 + { + 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 = ((T_MFW_HDR *)win)->data; + T_pin * 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() +{ + + 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 = ((T_MFW_HDR *)win)->data; + T_pin * 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: 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 */ + + 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("setLockTypeNw"); + 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("setLockTypeNw"); + 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("setLockTypeNw"); + mmi_simlock_locktype=MFW_SIM_PLOCK; + 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 = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; + T_MFW_SIM_PIN_STATUS status; + 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 = ((T_MFW_HDR *)win)->data; + T_pin * 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_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; + T_MFW_SIM_PIN_STATUS status; + + + 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_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; + T_MFW_SIM_PIN_STATUS status; + + 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 = ((T_MFW_HDR *)win)->data; + T_pin * 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_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; + T_MFW_SIM_PIN_STATUS status; + + 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 = ((T_MFW_HDR *)win)->data; + T_pin * 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))); + } + } +} + + +/******************************************************************************* + + $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; +} + + +/******************************************************************************* + + $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: + +#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) + { + 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) + { + 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: +#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); + } + + +#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; + gsm_sec_execute_set(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; + gsm_sec_execute_set(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; + gsm_sec_execute_set(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; + gsm_sec_execute_set(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 + 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)) + { /* 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)) + { /* 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; // RAVI + + 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, 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: +#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 status,curr_fail_reset, curr_succ_reset; + status = 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 status,curr_fail_reset, curr_succ_reset; + status = 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 status,curr_fail_reset, curr_succ_reset; + status = 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; +#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,TxtNull,TxtNull, 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; + + case SIM_LOCK_FCPWD_FAIL: + { + char buf1[20], buf2[20] ; + int status,curr_fail_reset, curr_succ_reset; + status = 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;*/ + +#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_FUNCTION_P1(" Status Bef: %d", status1); + status1 = mfw_simlock_check_status(mmi_simlock_locktype,&max,&curr); + status2 = mfw_simlock_check_status(0,&max1,&curr1); + TRACE_FUNCTION_P1("Status Aft: %d", status1); + + if(((event==SIM_LOCK_NEW_ENDISFAIL)||(event == SIM_LOCK_ENDIS_FAIL)) && (curr == 0)) + { + TRACE_FUNCTION("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_FUNCTION("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 + { + 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"); + 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; + } + 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; + +#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, status; + int curr_fail_reset, curr_succ_reset; + char buf1[20], buf2[20]; + T_DISPLAY_DATA display_info1; + status = 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) ; + + status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset); + + TRACE_FUNCTION_P1("Input_new_pin: %d", sta); + if(sta== MFW_SS_OK) + { + if(FCUnlock_flag) + FCUnlock_flag=0; + + C_KEY_REQ=0; + 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) + { + + set_pin_mess_destroy(mess_data->pin_mess_win); + + 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 + 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; // RAVI + 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 = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; + +// T_DISPLAY_DATA display_info; + T_MFW_SIM_PIN_STATUS status; + + 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 = ((T_MFW_HDR *)win)->data; + T_pin * pin_data = (T_pin *)win_data->user; +// T_MFW_SIM_PIN_STATUS status; // RAVI + + 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 = ((T_MFW_HDR *)win)->data; + T_pin * 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); + } + 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; + + TRACE_EVENT ("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) + { + 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,sta,curr_fail_reset, curr_succ_reset; + char buf1[20], buf2[20] ; + 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((char*)pin_data->puk,MFW_SIM_FCM); + } + else + { + TRACE_FUNCTION("FCUnlock_flag: FALSE"); + status= mfw_simlock_reset_fc_value((char*)pin_data->puk,MFW_SIM_FC); + } + + sta = 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( 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; + + 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 + 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: + { + S16 lcktype; +#ifdef SIM_PERS + int status1,curr_fail_reset1, curr_succ_reset1; +#endif + +#ifdef SIM_PERS + status1 = 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 + { +#endif + + 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; + } + + + if( mfw_simlock_check_lock_bootup((char*)pin_data->puk, lcktype)== BOOTUP_LOCK_SUCCESS) + { + TRACE_FUNCTION("BOOTUP_LOCK_SUCCESS"); + SEND_EVENT(pin_data->pin_win,SIM_LOCK_PERS_CHK_OK,0,pin_data); + } + else + { + TRACE_FUNCTION("BOOTUP_LOCK_FAILURE"); + TRACE_EVENT_P1("aciErrDesc %d ",aciErrDesc); + + switch(aciErrDesc & 0x0000FFFF) + { + case CME_ERR_NetworkPersPinReq: + TRACE_FUNCTION("CME_ERR_NetworkPersPinReq"); + SEND_EVENT(pin_data->pin_win,INPUT_NLOCK_PIN_REQ,0,pin_data); + break; + + case CME_ERR_NetworkSubsetPersPinReq: + TRACE_FUNCTION("CME_ERR_NetworkSubsetPersPinReq"); + SEND_EVENT(pin_data->pin_win,INPUT_NSLOCK_PIN_REQ,0,pin_data); + break; + + case CME_ERR_ProviderPersPinReq: + TRACE_FUNCTION("CME_ERR_ProviderPersPinReq"); + SEND_EVENT(pin_data->pin_win,INPUT_SPLOCK_PIN_REQ,0,pin_data); + break; + + case CME_ERR_CorporatePersPinReq: + TRACE_FUNCTION("CME_ERR_CorporatePersPinReq"); + SEND_EVENT(pin_data->pin_win,INPUT_CLOCK_PIN_REQ,0,pin_data); + break; + + case CME_ERR_PhSimPinReq: + TRACE_FUNCTION("CME_ERR_PhSimPinReq"); + 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,sta,curr_fail_reset, curr_succ_reset; + TRACE_FUNCTION("PUK Req"); + status = mfw_simlock_check_status(0, &curr_fail_reset, &curr_succ_reset); + + if( status==MFW_SIM_BLOCKED) + { + C_KEY_REQ = 1; + 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_FUNCTION("CME_ERR_WrongPasswd"); + SEND_EVENT(pin_data->pin_win,Identifier,0,pin_data); + break; + + default: + TRACE_FUNCTION("Vidya: Undefined error"); + } + + } +#ifdef SIM_PERS + } +#endif + } +#endif + break; + 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; + + /* 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); +}