FreeCalypso > hg > fc-magnetite
diff src/ui3/bmi/mmiNetwork.c @ 421:6a4d9f47793e
src/ui3/bmi: file renames to make the case consistent
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 Jan 2018 03:28:53 +0000 |
parents | src/ui3/bmi/MmiNetwork.c@e8ddbb0837ed |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui3/bmi/mmiNetwork.c Sun Jan 21 03:28:53 2018 +0000 @@ -0,0 +1,4011 @@ +/******************************************************************************* + + 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: Network + $File: MmiNetwork.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 22/02/01 + +******************************************************************************** + + Description: + + + +******************************************************************************** + + $Hist + + Oct 09, 2007 OMAPS00148258 x0056422 + Description: Memory leak problem + Solution: Modified the freed memory size to solve the memory leak problem + + Aug 07, 2007 DR:OMAPS00137726 x0066814(Geetha) + Description:HPLMN Manual Selection at power on -unable to perform manual selection at power ON + Solution: In network_nm_cb(), added a new case E_NM_PLMN_LIST_BOOTUP, to list the PLMNs during bootup. + May 31, 2007 DR: OMAPS00133201 x0pleela + Description: MS keeps searching networks and doesn't list available PLMNs after performing + manual selection + Solution : Added new function nm_abort_network() to destroy the dialog saying "Searching for + Networks" when CME_ERR_AbortedByNetwork error is recieved from ACI + + May 24, 2007 DR: OMAPS00132483 x0pleela + Description: MM: While playing an AAC, unplug USB freezes the audio + Solution: In network() function, setting or resetting the phonelock and auto phone lock status bits + + May 09, 2007 DR: OMAPS00129014 x0pleela + Description: COMBO: unable to send SMS during midi playing + Solution: Added phone lock status code in network() function. + May 09, 2007 DR: OMAPS00129014 + Description: COMBO: unable to send SMS during midi playing + Solution: Added phone lock status code in network() function. + Apr 13, 2007 DRT:OMAPS00122739 x0066814(Geetha) + Description: With Orange SIM card, once attached (at+cgatt=1), "5201" is displayed instead of "Orange" + Solution : In network function, under the NETWORK_FULL_SERVICE, + added a contion to check whether plmn_name is present. + + Mar 30,2007 DRT: OMAPS00120157 x00061088(Prachi) + Description : MMI displays network forbidden + Solution: Added check for Manual selection when the user selects network + manually for network list .Now network() checking for for Manual selection + by checking data->network_list_status is NETWORK_LIST_DISPLAY_FIRST or not. + + Feb 16, 2007 OMAPS00098351 x0066814(Geetha) + Description: NITZ support is not working + Solution: Added the FF_TIMEZONE flag.Time is calculated according to GMT, if the FF_TIMEZONE flag is enabled. + Added settingsNITZ function to write the menu option selected onto the Flash. + + Feb 08,2007 DRT: OMAPS00115060 x00061088(Prachi) + Description : To check for Forbidden network (for denied services),it takes long time. + after including fix for issue OMAPS00110741. + Solution: To solve this issue ,condition for forbidden network(i.e. network_data.forbidden == TRUE) + is moved out of condition if (parameter != Null). + + + + Jan 10, 2007 REF: OMAPS00110741 x0039928(sumanth) + Description: Sample resets after network deregistration during Robustness Test + Solution: A condition is added to check if the parameter passed to the network() is NULL. + + Jan 05, 2007 OMAPS00084665 x0039928(sumanth) + Description: Boot time exceed UCSD estimations + + Dec 13, 2006 DRT: OMAPS00105640 x0039928(Sumanth) + Description : SIMP: The board reboots when removing SIM card. + Solution : A condition is added in network() to check if SIM is active. + + Oct 30,2006 ER:OMAPS00091029 x0039928(sumanth) + Bootup time measurement + + Oct 05, 2006 ER: OMAPS00094496 x0061088(Prachi) + Description:Enhance RSSI to 3 parameters: Strength, quality, min-access-level + Solution: If there is NO NETWORK , Network() is calling globalSignalUpdate() + to show the Signal Strength. + Sep 18,2006 DRT: OMAPS0090268 x00061088(Prachi) + Description : To check for Forbidden network (for denied services),it takes long time. + Solution : Function network_nm_cb() has now be implemented to handle E_NM_FORBIDDEN_NETWORK,which sends event + NETWORK_FORBIDDEN_NETWORK to network(),by setting flags network_data.aborted =False + and network_data.forbidden = Ture. + + Jun 23, 2006 DR: OMAPS00082374 x0pleela + Description: EONS Failures - unexpected output from the MMI: 2 carriers; on the top always T-Mobile + Solution: a) Removed the usage of global variable gEons_alloc_active + b) Added new check for CNIV request + c) Memset the data->plmn_name and data->network_name + d) Added check to display short name if long name len is 0. or display numeric name if short name len is 0 + + June 02, 2006 DR: OMAPS00078005 x0021334 + Descripton: Test for NITZ (Network Identity and Timezone) support - No New time was displayed + Solution: New Time/Date received from network is sent to MFW by lower layer by invoking 'rAT_PercentCTZV' + function. This function has now been implemented to pass on the received values to MMI + for user confirmation and RTC updation. + + May 26, 2006 ER: OMAPS00079607 x0012849 :Jagannatha M + Description: CPHS: To support AoC and information numbers. + Solution: Made the following changes + Added a function that returns the roaming status. + + Feb 15, 2006 ER: OMAPS00065203 x0pleela + Description: Cingular Operator Name Prioritization implementation required + Solution: Incorporated review comments + - Included flag NEPTUNE_BOARD to retain old code for operator get name and + added new code for this ER also + - Removed the global variable gOper_sel_done and have introduced 2 functions which will + set and get the status of the operator selection + + Feb 09, 2006 ER: OMAPS00065203 x0pleela + Description: Cingular Operator Name Prioritization implementation required + Solution: In function network(), check if EONS is allocated and activated. If not, get operator name from other sources + Removed CPHS check code as prioritized operator name is already updated to network_data + + xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851 + Added a please wait screen so that the sim is updated with the new code before + populating the list again when deleting or when entering a newtwork code + + Nov 02, 2005 REF: omaps00044855 Sumanth Kumar.C + Description: Phone crashes on invoking Manual option in Network Selection Menu. + Solution: Memory free of network_data.pplmn is done when the editor exits instead of + list exit by option selection so that the pplmn data is available when the list is invoked once again. + + Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + Description: The homezone/cityzone tags were not being displayed properly. + Solution: Modified to save the tags properly in caches and also made the + appropriate modifications to update the same properly during mobility. + + Sep 23, 2004 REF: CRR 24562 xvilliva + Bug: Enable/disable the manual network selection option depending + on ENS. + Fix: If the manual network selection is disabled we check if an + error is returned and flash an alert to the user. + + Sep 8, 2004 REF: CRR 16062 xvilliva + Bug: If a PLMN is selected (by using the middle key) from the PLMN list + presented upon a manual search the D-Sample may freeze. + Fix: The "KEY_MNUSELECT" event is also monitered which was not + done earlier and was resulting in the PLMN list shown again. + + Jul 21, 2004 REF: CRR 13348 xvilliva + Bug: After selecting HPLMN manually, the idle screen is not shown. + Fix: After the "Network Selected" alert is flashed, we destroy the + phonebook menu to return to the idle screen. + + + // Apr 14, 2004 REF: CRR 12641 xpradipg + // The network when selected using "Automatic" is not showing an alert after selection. + // A flag has been used to show the alert when ever network is selected using + // "Automatic" method. As the flag is present it will not flash this alert when the + // device is restarted. + + 25/10/00 Original Condat(UK) BMI version. + + 05/04/06 REF:OMAPS00061046 x0043641 + BUG:Possible to cancel the searching with right soft key although the option is not available. + FIX: In the searching mode cancel option is provided. + + 08-03-2006 REF: OMAPS00061049 x0020906 + + Bug: The sample crashed many times while trying to camp onto a FPLMN. PCO stucked when tracing this TC, + therefore no PCO traces available; only L1 traces (TestHarness). + + Fix: During manual selection from the indication will get the plmn list count and used the count for allocating + plmn_list pointer and then destorying the list and free the pointer allocation when particular network is selected + or when back softkey is pressed. + + + $End + // Issue Number : SPR#12654 on 07/04/04 by Pradeep/Vadiraj +*******************************************************************************/ + + +/******************************************************************************* + + 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_icn.h" +#include "mfw_mnu.h" +#include "mfw_tim.h" +#include "mfw_sim.h" +#include "mfw_nm.h" +#include "mfw_cm.h" +#include "mfw_sat.h" +#include "mfw_phb.h" +#include "mfw_sms.h" + +// June 02, 2006 DR: OMAPS00078005 x0021334 +//Dec 13,2006 DR:OMAPS00098351 x0066814 - Added the Flag +#ifdef FF_TIMEZONE +#include "mfw_td.h" +#endif + +#include "dspl.h" + +#include "ksd.h" +#include "psa.h" + +#include "MmiDummy.h" +#include "MmiMmi.h" +#include "MmiMain.h" +#include "MmiStart.h" +#include "MmiPins.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" +#else +#include "MmiEditor.h" +#endif + +#include "MmiMenu.h" +#include "MmiIdle.h" +#include "mmiCall.h" +#include "MmiBookController.h" +#include "MmiNetwork.h" +#include "MmiSoftKeys.h" +#include "MmiSounds.h" +#include "MmiPcm.h" + +#include "prim.h" +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + +#include "mfw_ffs.h" +#include "MmiCPHS.h" + +#ifdef MMI_HOMEZONE_ENABLED +#include "MmiHomezone.h" +#endif + +#include "MmiNetwork.h" + +#include "cus_aci.h" + +#include "mmiColours.h" + +/* BEGIN ADD: Neptune Alignment */ +#ifdef NEPTUNE_BOARD +#include "bmi_integ_misc.h" +#endif +/* END ADD: Neptune Alignment */ +#ifdef NEPTUNE_BOARD +/* PLMN list count obtained from indication, stored in the global static variable*/ +/*OMAPS00061049 - 08-03-2006 */ +static int Plmn_list_count = 0; +#endif + + +/* Enum containing GMT */ +typedef enum { +MMI_GMT_NT_1200 = -48, /* Read as GMT -12:00 hrs */ +MMI_GMT_NT_1145 = -47, /* Read as GMT -11:45 hrs */ +MMI_GMT_NT_1130 = -46, +MMI_GMT_NT_1115 = -45, +MMI_GMT_NT_1100 = -44, +MMI_GMT_NT_1045 = -43, +MMI_GMT_NT_1030 = -42, +MMI_GMT_NT_1015 = -41, +MMI_GMT_NT_1000 = -40, +MMI_GMT_NT_0945 = -39, +MMI_GMT_NT_0930 = -38, +MMI_GMT_NT_0915 = -37, +MMI_GMT_NT_0900 = -36, +MMI_GMT_NT_0845 = -35, +MMI_GMT_NT_0830 = -34, +MMI_GMT_NT_0815 = -33, +MMI_GMT_NT_0800 = -32, +MMI_GMT_NT_0745 = -31, +MMI_GMT_NT_0730 = -30, +MMI_GMT_NT_0715 = -29, +MMI_GMT_NT_0700 = -28, +MMI_GMT_NT_0645 = -27, +MMI_GMT_NT_0630 = -26, +MMI_GMT_NT_0615 = -25, +MMI_GMT_NT_0600 = -24, +MMI_GMT_NT_0545 = -23, +MMI_GMT_NT_0530 = -22, +MMI_GMT_NT_0515 = -21, +MMI_GMT_NT_0500 = -20, +MMI_GMT_NT_0445 = -19, +MMI_GMT_NT_0430 = -18, +MMI_GMT_NT_0415 = -17, +MMI_GMT_NT_0400 = -16, +MMI_GMT_NT_0345 = -15, +MMI_GMT_NT_0330 = -14, +MMI_GMT_NT_0315 = -13, +MMI_GMT_NT_0300 = -12, +MMI_GMT_NT_0245 = -11, +MMI_GMT_NT_0230 = -10, +MMI_GMT_NT_0215 = -9, +MMI_GMT_NT_0200 = -8, +MMI_GMT_NT_0145 = -7, +MMI_GMT_NT_0130 = -6, +MMI_GMT_NT_0115 = -5, +MMI_GMT_NT_0100 = -4, +MMI_GMT_NT_0045 = -3, +MMI_GMT_NT_0030 = -2, +MMI_GMT_NT_0015 = -1, + +MMI_GMT_PT_0000 = 0, /* Read as GMT +0:00 */ + + +MMI_GMT_PT_0015 = 1, +MMI_GMT_PT_0030 = 2, +MMI_GMT_PT_0045 = 3, +MMI_GMT_PT_0100 = 4, +MMI_GMT_PT_0115 = 5, +MMI_GMT_PT_0130 = 6, +MMI_GMT_PT_0145 = 7, +MMI_GMT_PT_0200 = 8, +MMI_GMT_PT_0215 = 9, +MMI_GMT_PT_0230 = 10, +MMI_GMT_PT_0245 = 11, +MMI_GMT_PT_0300 = 12, +MMI_GMT_PT_0315 = 13, +MMI_GMT_PT_0330 = 14, +MMI_GMT_PT_0345 = 15, +MMI_GMT_PT_0400 = 16, +MMI_GMT_PT_0415 = 17, +MMI_GMT_PT_0430 = 18, +MMI_GMT_PT_0445 = 19, +MMI_GMT_PT_0500 = 20, +MMI_GMT_PT_0515 = 21, +MMI_GMT_PT_0530 = 22, +MMI_GMT_PT_0545 = 23, +MMI_GMT_PT_0600 = 24, +MMI_GMT_PT_0615 = 25, +MMI_GMT_PT_0630 = 26, +MMI_GMT_PT_0645 = 27, +MMI_GMT_PT_0700 = 28, +MMI_GMT_PT_0715 = 29, +MMI_GMT_PT_0730 = 30, +MMI_GMT_PT_0745 = 31, +MMI_GMT_PT_0800 = 32, +MMI_GMT_PT_0815 = 33, +MMI_GMT_PT_0830 = 34, +MMI_GMT_PT_0845 = 35, +MMI_GMT_PT_0900 = 36, +MMI_GMT_PT_0915 = 37, +MMI_GMT_PT_0930 = 38, +MMI_GMT_PT_0945 = 39, +MMI_GMT_PT_1000 = 40, +MMI_GMT_PT_1015 = 41, +MMI_GMT_PT_1030 = 42, +MMI_GMT_PT_1045 = 43, +MMI_GMT_PT_1100 = 44, +MMI_GMT_PT_1115 = 45, +MMI_GMT_PT_1130 = 46, +MMI_GMT_PT_1145 = 47, +MMI_GMT_PT_1200 = 48, /* Read as GMT +12:00 */ + + + +MMI_TIME_ERROR = -100 +} T_MMI_TZ; + + +int mmi_timezone_value(int mmi_rtc_timezone); + +/* + * Data for top window + */ +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND network_win; /* MFW win handler */ + T_MFW_HND nm_handle; /* MFW network handler */ + UBYTE aborted; + UBYTE forbidden; + UBYTE keep_plmn_list; + T_MFW_NETWORK_STRUCT *pplmn; /* pref. PLMN list */ + T_MFW_PPLMN_MEM pplmn_mem; + UBYTE plmn_name[SIZE_PLMN_NAME]; /* textual network name */ + UBYTE network_name[SIZE_NETWORK_NAME]; /* numeric network name */ + USHORT status; /* current status */ + UBYTE roaming_indicator; /* Roaming Indicator */ + ListMenuData * network_list; /* PLMN available List */ + UBYTE network_list_status;/* Network List Status */ + UBYTE network_search_name[MAX_PLMN][6]; /* numeric network name */ + T_MFW_HND network_search_win; + UBYTE Listposition; +} T_network; + +T_network network_data; + +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND win; + SHORT id; + T_MFW_HND parent; + T_MFW_HND kbd; + T_MFW_HND kbd_long; + T_MFW_HND menu; + T_MFW_HND dialog_win; + ListMenuData *network_list; +/*SPR 2635, replace pplmn data structure pointer with pointer to array of strings*/ + char** pplmn_longnames; + CHAR buffer[6]; +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_info; /* SPR#1428 - SH - New Editor data */ +#else + T_EDITOR_DATA editor_info; /* storage for editor attributes */ +#endif +} T_network_OPT; + + +typedef enum +{ + E_INIT, + E_BACK, + E_RETURN, + E_ABORT, + E_EXIT +} e_lists_events; + +// Apr 14, 2004 REF: CRR 12641 xpradipg +static BOOLEAN Auto_Network_Select=false; +extern T_MFW_HND gPhbkMenu;// Jul 21, 2004 REF: CRR 13348 xvilliva +// Sep 23, 2004 REF: CRR 24562 xvilliva +extern int g_ensErr; + + +/* + * Local prototypes + */ +static int network_win_cb (T_MFW_EVENT event, T_MFW_WIN * win); +static int network_nm_cb (T_MFW_EVENT event, T_MFW_HND para); +static void network_remove_network_log (void); +static UBYTE network_log_enabled (void); +static void network_list_cb (T_MFW_HND win, ListMenuData * ListData); +static void network_pref_list_cb (T_MFW_HND win, ListMenuData * ListData); +static ListMenuData * network_create_list (T_network * data, T_MFW_PLMN_LIST * plmn_list); +static ListMenuData * network_create_pref_list (T_network * data); +static ListMenuData * network_create_mobile_list (T_network_OPT * data); +static void network_start_animation_plmn_selection (int plmn_value); +static void network_start_animation (void); +static void network_stop_animation (void); +static void network_selected (void); +static void network_forbidden_plmn (void); +static void network_no_plmns (void); + void network_animation_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason); +//Jul 21, 2004 REF: CRR 13348 xvilliva +//We use a seperate callback for "Network Selected". +void network_select_animation_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason); + T_MFW_HND network_MNU_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); +static T_MFW_HND network_MNU_create(MfwHnd parent_window); +static void network_MNU_destroy(MfwHnd own_window); + void network_MNU_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +static int network_MNU_mnu_cb (MfwEvt e, MfwMnu *m); +static int network_MNU_win_cb (MfwEvt e, MfwWin *w); +static int network_MNU_kbd_cb (MfwEvt e, MfwKbd *k); +static int network_request_plnm_list (MfwMnu* m, MfwMnuItem* i); +void network_delete_pref_plnm (T_MFW_HND win , USHORT identifier, UBYTE reason); +void network_info_screen (T_MFW_HND win, USHORT MessageId, T_VOID_FUNC funt_ptr );// xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851 +static int network_delete(MfwMnu* m, MfwMnuItem* i); + T_MFW_HND network_EDT_start (MfwMnu* m, MfwMnuItem* i); +static T_MFW_HND network_EDT_create (T_MFW_HND parent); +static void network_EDT_destroy (T_MFW_HND window); +static void network_EDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +static void network_EDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event); +/* SPR#2354 - SH -Added two new callbacks */ +static void network_request_plmn_list_cb(T_MFW_HND win, USHORT identifier, UBYTE reason); +void network_mobile_list_changed_cb(T_MFW_HND win , USHORT identifier, UBYTE reason); + +//x0pleela 30 May, 2007 DR: OMAPS00133201 +void nm_abort_network( void ); + +// June 02, 2006 DR: OMAPS00078005 x0021334 +// Call back function of info dialog for getting user confirmation for time update +//Dec 13,2006 DR:OMAPS00098351 x0066814 - Added the FF_TIMEZONE flag +#ifdef FF_TIMEZONE +static int nw_time_update_callback(T_MFW_HND win, USHORT identifier, UBYTE reason); + +// June 02, 2006 DR: OMAPS00078005 x0021334 +// To update RTC with new time and date info. +static T_MFW_TIME newTime; +static T_MFW_DATE newDate; +#endif + +/* + * Local Definitions + */ +#define NETWORK_LIMITED_SERVICE 420 +#define NETWORK_NO_NETWORK 421 +#define NETWORK_PLMN_LIST 422 +#define NETWORK_PREFERRED_LIST 423 +#define NETWORK_PPLMN_MEM_LIST 424 +/* SPR759 - SH - Cell reselection */ +#define NETWORK_CELL_SELECT 425 + +#define NETWORK_LIST_DISPLAY 430 +#define NETWORK_LIST_SELECT_PLMN 432 + +// June 02, 2006 DR: OMAPS00078005 x0021334 +//Dec 13,2006 DR:OMAPS00098351 x0066814 - Added the FF_TIMEZONE flag +#ifdef FF_TIMEZONE +#define NETWORK_TIME_UPDATE 445 +#endif +//Sep 18 2006 DRT :OMAPS0009268 x0061088 +#define NETWORK_FORBIDDEN_NETWORK 446 + +#ifdef NEPTUNE_BOARD +/* List destory not done - added - OMAPS00061049 - 08-03-2006 */ +#define NETWORK_LIST_DESTORY 440 +#endif + +/* + * Local Network List Status + */ +#define NETWORK_LIST_DISPLAY_FIRST 1 +#define NETWORK_LIST_SELECTED 2 +#define NETWORK_LIST_REGISTRATION 3 +#define NETWORK_PREF_LIST_SELECTED 4 +#define NETWORK_MENU_ITEM 2 + +//nm 5.3.01 this number will be change +#define MAX_SHOW_OF_PLMN 99 + +static MfwMnuItem network_OPTItems [] = +{ + {0,0,0,(char *)TxtSelectFromList, 0, (MenuFunc)network_request_plnm_list, item_flag_none}, + {0,0,0,(char *)TxtEnterNetworkCode, 0, (MenuFunc)network_EDT_start, item_flag_none}, + {0,0,0,(char *)TxtDelete, 0, (MenuFunc)network_delete, item_flag_none} +}; + +static MfwMnuAttr network_OPTAttrib = +{ + &network_menuArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ + (U8)-1, /* use default font */ + network_OPTItems, /* with these items */ + sizeof(network_OPTItems)/sizeof(MfwMnuItem), /* number of items */ + COLOUR_LIST_NETWORK, TxtNull, NULL, MNUATTRSPARE + + +}; + + + +static MfwMnuAttr network_menuAttrib = +{ + &network_menuArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ + (U8)-1, /* use default font */ + NULL, /* with these items */ + 0, /* number of items */ + COLOUR_LIST_NETWORK, TxtNull, NULL, MNUATTRSPARE + +}; + +//x0pleela 09 May, 2007 DR: OMAPS00129014 +#ifdef FF_PHONE_LOCK +extern T_MFW_HND phlock_win_handle; /* to hold the win handle of phone unlock editor window */ +GLOBAL UBYTE phlock_auto; +//x0pleela 29 May, 2007 DR: OMAPS00132483 +EXTERN int mfw_get_Phlock_status(void); +EXTERN void mfw_set_Phlock_status( int phlock_status); +EXTERN int mfw_get_Auto_Phlock_status(void); +EXTERN void mfw_set_Auto_Phlock_status( int phlock_status); +#endif //F_PHONE_LOCK +/******************************************************************************* + + $Function: networkInit + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +T_MFW_HND networkInit (T_MFW_HND parent_window) +{ + return (network_create (parent_window)); +} + + +/******************************************************************************* + + $Function: networkExit + + $Description: exit network handling (Backward Compatibility interface) + + $Returns: + + $Arguments: + *********************************************************************/ + + +void networkExit (void) +{ + network_destroy (network_data.network_win); +} + +/********************************************************************* + * + * Network Dialog + * + * Window - Structure + * + * network --> network_list + * --> network_search_animation + * + *********************************************************************/ + +/******************************************************************************* + + $Function: network_create + + $Description: create network top window + + $Returns: + + $Arguments: + +*******************************************************************************/ +T_MFW_HND network_create (T_MFW_HND parent_window) +{ + T_network * data = &network_data; + T_MFW_WIN * win; + + TRACE_FUNCTION ("network_create()"); + + data->network_win = win_create (parent_window, 0, 0, (T_MFW_CB)network_win_cb); + + if (data->network_win EQ 0) + return 0; + + /* + * Create window handler + */ + data->mmi_control.dialog = (T_DIALOG_FUNC)network; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->network_win)->data; + win->user = (void *) data; + + /* + * Initialise MFW + */ + nm_init (); + + /* + * Create any other handler + */ + data->nm_handle = nm_create (data->network_win, E_NM_ALL_SERVICES, (T_MFW_CB)network_nm_cb); + + memset (data->plmn_name, 0, SIZE_PLMN_NAME); + memset (data->network_name, 0, SIZE_NETWORK_NAME); + + data->aborted = FALSE; + data->keep_plmn_list = FALSE; + data->forbidden = FALSE; + + data->status = NETWORK_NO_SERVICE; + data->network_list = NULL; + data->network_search_win = 0; + data->Listposition = 0; + + + + winShow(data->network_win); + /* + * return window handle + */ + return data->network_win; +} + +/******************************************************************************* + + $Function: network_destroy + + $Description: destroy network top window + + $Returns: + + $Arguments: + +*******************************************************************************/ +void network_destroy (T_MFW_HND own_window) +{ + T_MFW_WIN * win; + T_network * data; + + TRACE_FUNCTION ("network_destroy()"); + + if (own_window) + { + win = ((T_MFW_HDR *)own_window)->data; + data = (T_network *)win->user; + + if (data) + { + /* + * Exit NM and delete NM handler + */ + nm_exit (); + nm_delete (data->nm_handle); + + /* + * Delete WIN handler + */ + win_delete (data->network_win); + } + } +} + +/******************************************************************************* + + $Function: network + + $Description: network top window dialog function + + $Returns: + + $Arguments: + +*******************************************************************************/ +void network (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_network * data = (T_network *)win_data->user; + T_MFW_NETWORK_STRUCT * plmn_ident; + UBYTE signal_value; + + // June 02, 2006 DR: OMAPS00078005 x0021334 + //Dec 13,2006 DR:OMAPS00098351 x0066814 - Added the FF_TIMEZONE flag + #ifdef FF_TIMEZONE + T_DISPLAY_DATA display_info ; // Structure for info_dialog + T_MFW_TIME_IND *network_time; // Time/date info from network + T_MFW_TIME *time_format; // To get the current time format set in MS + #endif + + + TRACE_FUNCTION(">>> network()"); + +//x0pleela 09 Mar, 2007 DR: OMAPS00129014 +#ifdef FF_PHONE_LOCK + if( mfw_phlock_get_lock_status(MFW_PH_LOCK) == MFW_PH_LOCK_ENABLE ) + { + TRACE_EVENT("idle_draw: MFW_PH_LOCK_ENABLE"); + + //x0pleela 23 May, 2007 DR: OMAPS00132483 + //Set the phone lock status to TRUE + mfw_set_Phlock_status(TRUE); + + if( !phlock_win_handle ) + phLock_UnLock(); + } + else //for Automatic Phone lock check + { + //x0pleela 23 May, 2007 DR: OMAPS00132483 + //Set the phone lock status to FALSE + mfw_set_Phlock_status(FALSE); + + if( mfw_phlock_get_autolock_status(MFW_AUTO_PH_LOCK) == MFW_PH_LOCK_ENABLE ) + { + phlock_auto = TRUE; + + //x0pleela 23 May, 2007 DR: OMAPS00132483 + //Set the auto phone lock status to TRUE + mfw_set_Auto_Phlock_status(TRUE); + } + //x0pleela 23 May, 2007 DR: OMAPS00132483 + //Set the auto phone lock status to FALSE + mfw_set_Auto_Phlock_status(FALSE); + } +#endif /* FF_PHONE_LOCK */ + + switch (event) + { + case NETWORK_NO_SERVICE: + case NETWORK_LIMITED_SERVICE: + TRACE_EVENT ("NETWORK NO/LIMITED SERVICE"); + /* + * Set Status + */ + data->status = NETWORK_NO_SERVICE; + + // June 02, 2006 DR: OMAPS00078005 x0021334 + // Set PCTZV mode on + //Dec 13,2006 DR:OMAPS00098351 x0066814-Added the FF_TIMEZONE flag +#ifdef FF_TIMEZONE + nm_get_network_time(); +#endif + + /* + * Check if network log is enabled + */ + if (network_log_enabled ()) + { + SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0); + } + else + { + SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0); + if (data->network_list NEQ NULL) + { + switch (data->network_list_status) + { + case NETWORK_LIST_REGISTRATION: + TRACE_EVENT ("NETWORK_LIST_REGISTRATION"); + /* + * Present list of available PLMNs again + * + * Start the available plmn search + */ + nm_avail_plmn_list(); + //Sep 23, 2004 REF: CRR 24562 xvilliva + //After retrieving the list we see if an error occured + //and flash an alert to the user accordingly. + if(g_ensErr == 1) + { + g_ensErr = 0; + info_screen(0, TxtNotAllowed, TxtNull, NULL); + } + + /* + * remove network log if needed + */ + network_remove_network_log (); + + network_data.forbidden = TRUE; + break; + + case NETWORK_LIST_SELECTED: + TRACE_EVENT ("NETWORK_LIST_SELECTED"); + /* + * After registration start, MFW returns the current status + */ + data->network_list_status= NETWORK_LIST_REGISTRATION; + data->keep_plmn_list = TRUE; + break; + } + } + } + //Oct 05, 2006 ER: OMAPS00094496 x0061088(Prachi) + signal_value = 0 ; + globalSignalUpdate(signal_value); +#ifdef MMI_HOMEZONE_ENABLED + /* sh - tell homezone there is no network */ + //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + //Modified to incorporate the third argument. + homezoneUpdate(0,0,0); +#endif + break; + + case NETWORK_SEARCH_NETWORK: + TRACE_EVENT ("NETWORK SEARCH NETWORK"); + SEND_EVENT (idle_get_window(), NETWORK_SEARCH_NETWORK, 0, 0); + break; + + case NETWORK_FULL_SERVICE: + TRACE_EVENT("NETWORK_FULL_SERVICE"); + /* + * Set Status + */ + data->status = NETWORK_FULL_SERVICE; +#ifdef FF_CPHS_REL4 + mfw_cphs_get_msp_info(); +#endif + + // June 02, 2006 DR: OMAPS00078005 x0021334 + // Set PCTZV mode on + //Dec 13,2006 DR:OMAPS00098351 x0066814 - Added the FF_TIMEZONE flag +#ifdef FF_TIMEZONE + nm_get_network_time(); +#endif + /* + * Copy Network Name in textual and numerical format + * + * NOTE: Service Provider Name is not used + * Operator Name from SIM needs CPHS support by MFW + */ + plmn_ident = (T_MFW_NETWORK_STRUCT *)parameter; + + //x0pleela 15 Feb, 2006 ER: OMAPs00065203 + //Removed the global variable gOper_sel_done and have introduced 2 functions which will + //set and get the status of the operator selection + + //x0pleela 9 Feb, 2006 ER:OMAPS00065203 + //Check if EONS is allocated and activated. If not, and if operator name is not yet obtained from other sources + //get operator name from other sources + if( ( ( plmn_ident->opn_read_from EQ NM_CPHS ) AND ( plmn_ident->roaming_indicator) ) + OR (plmn_ident->opn_read_from EQ NM_ROM) ) + { + //get operator name from other sources CPHS or NITZ or ROM + nm_get_opername(plmn_ident); + } +memset(data->plmn_name, 0, SIZE_PLMN_NAME); +memset(data->network_name, 0, SIZE_NETWORK_NAME); /* x0039928 - Lint warning removal */ +#ifdef NO_ASCIIZ + memcpy (data->plmn_name, &plmn_ident->network_long.data, SIZE_PLMN_NAME); +#else + memcpy (data->plmn_name, plmn_ident->network_long, SIZE_PLMN_NAME); +#endif + memcpy (data->network_name, plmn_ident->network_numeric, SIZE_NETWORK_NAME); + + /* + * If network name is not known use numeric representation as default. + */ + +#ifdef NO_ASCIIZ +//Apr 13, 2007 DRT:OMAPS00122739 x0066814(Geetha) +if(!(strlen((char*)data->plmn_name))) +{ + + if( plmn_ident->network_short.len EQ 0 ) + strcpy ((char *)data->plmn_name, (char *)data->network_name); + else + memcpy (data->plmn_name, &plmn_ident->network_short.data, SHORT_NAME); /* x0039928 -Lint warning removal */ + +} +#else +//Apr 13, 2007 DRT:OMAPS00122739 x0066814(Geetha) +if(!(strlen((char*)data->plmn_name))) +{ + + if (strlen ((char *)(plmn_ident->network_short)) EQ 0) + strcpy ((char *)data->plmn_name, (char *)data->network_name); + else + memcpy (data->plmn_name, &plmn_ident->network_short, SIZE_PLMN_NAME); + +} +#endif + /* + * Store Roaming Indicator + */ + data->roaming_indicator = plmn_ident->roaming_indicator; + + network_stop_animation (); + + /* + * Inform Idle screen + */ + SEND_EVENT (idle_get_window(), NETWORK_FULL_SERVICE, 0, 0); + + /* + * If network list is available + */ + if (data->network_list NEQ NULL) + { + switch (data->network_list_status) + { + case NETWORK_LIST_REGISTRATION: + if(data->keep_plmn_list EQ FALSE) + { + TRACE_EVENT("NETWORK_LIST_REGISTRATION No 1"); + +#ifdef FF_2TO1_PS +#ifndef NEPTUNE_BOARD + FREE_MEMORY ((UBYTE *)data->network_list->List, + MMREG_MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); +#else + /* Free the allocated memory for PLMN list window - + OMAPS00061049 - 08-03-2006 */ + FREE_MEMORY ((UBYTE *)data->network_list->List, + Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); +#endif + +#else + +#ifndef NEPTUNE_BOARD + FREE_MEMORY ((UBYTE *)data->network_list->List, + MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); +#else + /* Free the allocated memory for PLMN list window - + OMAPS00061049 - 08-03-2006 */ + FREE_MEMORY ((UBYTE *)data->network_list->List, + Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); +#endif + +#endif + FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData)); + data->network_list = NULL; + } + data->keep_plmn_list = FALSE; + break; + case NETWORK_LIST_SELECTED: + /* + * After registration start, MFW returns the current status + */ + TRACE_EVENT("NETWORK_LIST_SELECTED"); + data->network_list_status= NETWORK_LIST_REGISTRATION; + /* Commented out and moved + network_selected(); */ + break; + } + // API - Moved from previous position + network_selected(); + } + + // Apr 14, 2004 REF: CRR 12641 xpradipg + if(Auto_Network_Select==true) + { + network_selected(); + Auto_Network_Select=false; + } + + break; + + case NETWORK_NO_NETWORK: + TRACE_EVENT ("NETWORK NO NETWORK"); + /* + * No PLMN found after search for available PLMNs + */ + network_stop_animation (); + if (network_log_enabled ()) + { + data->status = NETWORK_NO_SERVICE; + SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0); + } + else + { + /* + * No Networks found. + */ + data->status = NETWORK_NO_SERVICE; + SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0); + } +#ifdef MMI_HOMEZONE_ENABLED + /* sh - tell homezone there is no network */ + //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + //Modified to incorporate the third argument. + homezoneUpdate(0,0,0); +#endif + break; +//sep 18 2006 OMPAS00090268 x0061088(Prachi) + case NETWORK_FORBIDDEN_NETWORK: + case NETWORK_PLMN_LIST: + TRACE_EVENT ("NETWORK PLMN LIST"); + TRACE_EVENT (">>NETWORK PLMN LIST"); + /* + * PLMN list found + */ + if (network_data.aborted != TRUE) + { + if (network_log_enabled ()) + { + data->status = NETWORK_NO_SERVICE; + SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0); + } + else + { + T_MFW_PLMN_LIST * plmn_list; + /* + * Networks founds. + */ + data->status = NETWORK_NO_SERVICE; + /* + * If network list is available, destroy + */ + if (data->network_list NEQ NULL) + { + +#ifdef FF_2TO1_PS +#ifndef NEPTUNE_BOARD + FREE_MEMORY ((UBYTE *)data->network_list->List, + MMREG_MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); +#else + /* Free the allocated memory for PLMN list window - + OMAPS00061049 - 08-03-2006 */ + FREE_MEMORY ((UBYTE *)data->network_list->List, + Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); +#endif + +#else +#ifndef NEPTUNE_BOARD + FREE_MEMORY ((UBYTE *)data->network_list->List, + MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); +#else + /* Free the allocated memory for PLMN list window - + OMAPS00061049 - 08-03-2006 */ + FREE_MEMORY ((UBYTE *)data->network_list->List, + Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); +#endif + +#endif + + FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData)); + data->network_list = NULL; + } + +/* Jan 10, 2007 REF: OMAPS00110741 x0039928(sumanth) */ +/* Soln : check if parameter passed is NULL */ + if(parameter != NULL) + { + /* + * If list is empty, show info screen + */ + plmn_list = (T_MFW_PLMN_LIST *)parameter; + +#ifdef NEPTUNE_BOARD + /* Count assigned to global static variable - OMAPS00061049 - 08-03-2006 */ + Plmn_list_count = plmn_list->count; +#endif +/* Dec 13, 2006 DRT: OMAPS00105640 x0039928(Sumanth) + Fix: Condition added to check if sim is active */ + if(SIM_NOT_ACTIVE != sim_status_check()) + { + if (plmn_list->count EQ 0) + { + network_stop_animation (); + network_no_plmns (); + } + else + { + /* + * Create and present list of available PLMNs + * + */ + + /* Pass the plmn_list which already hold the parameter data - OMAPS00061049 - 08-03-2006 */ +#ifndef NEPTUNE_BOARD + data->network_list = network_create_list (data, parameter); +#else + data->network_list = network_create_list (data, plmn_list ); +#endif + data->network_list_status = NETWORK_LIST_DISPLAY_FIRST; + network_stop_animation (); + listDisplayListMenu (win, data->network_list, (ListCbFunc)network_list_cb,0); + + // change by Sasken ( Pradeep/Vadiraj) on Apr 07th 2004 + // Issue Number : SPR#12654 on 07/04/04 by Pradeep/Vadiraj + // Bug : Pressing "search" button does not trigger anything + // Solution: When the ME is already camped on to a network the NoNetwork event is not sent. + // Commented the following line + // SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0); + + + } + } + } + } + //Mar 30,2007 DRT: OMAPS00120157 x00061088(Prachi) + if(data->network_list_status == NETWORK_LIST_DISPLAY_FIRST) + { + // Feb 08,2007 DRT: OMAPS00115060 x00061088(Prachi) + if (network_data.forbidden == TRUE) + { + network_forbidden_plmn(); + network_data.forbidden = FALSE; + } + } + + } + else + { + network_data.aborted = FALSE; + } +#ifdef MMI_HOMEZONE_ENABLED + /* sh - tell homezone there is no network */ + //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + //Modified to incorporate the third argument. + homezoneUpdate(0,0,0); +#endif + break; + + case NETWORK_LIST_SELECT_PLMN: + + TRACE_EVENT ("NETWORK LIST_SELECT"); + TRACE_EVENT (">> NETWORK LIST_SELECT"); + /* + * A network has been selected from the PLMN available list + * Start manual registration and start Search animation. + */ + network_start_animation_plmn_selection (value); + data->network_list_status = NETWORK_LIST_SELECTED; + nm_select_plmn ((U8 *)network_data.network_search_name[value]); + //Sep 23, 2004 REF: CRR 24562 xvilliva + //After retrieving the list we see if an error occured + //and flash an alert to the user accordingly. + if(g_ensErr == 1) + { + g_ensErr = 0; + info_screen(0, TxtNotAllowed, TxtNull, NULL); + } + + /* x0056422, OMAPS00148258 */ + + if (data->network_list NEQ NULL) + { + #ifdef FF_2TO1_PS + #ifndef NEPTUNE_BOARD + FREE_MEMORY ((UBYTE *)data->network_list->List, + MMREG_MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); + #else + /* Free the allocated memory for PLMN list window - + OMAPS00061049 - 08-03-2006 */ + FREE_MEMORY ((UBYTE *)data->network_list->List, + Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); + #endif /* NEPTUNE_BOARD */ + + #else + #ifndef NEPTUNE_BOARD + FREE_MEMORY ((UBYTE *)data->network_list->List, + MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); + #else + /* Free the allocated memory for PLMN list window - + OMAPS00061049 - 08-03-2006 */ + FREE_MEMORY ((UBYTE *)data->network_list->List, + Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); + #endif /* NEPTUNE_BOARD */ + + #endif /* FF_2TO1_PS */ + + FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData)); + data->network_list = NULL; + } + //Modify by hou peng 2007/09/19 end + + /* x0056422 OMAPS00148258 */ + + break; + case NETWORK_PPLMN_MEM_LIST: + { + T_MFW_PPLMN_MEM *pplmn_mem; + UBYTE i; + + TRACE_EVENT (">> NETWORK PPLMN MEM LIST"); + /* Save the number of PLMN records: + * maxRcd = maximum preferred PLMN records on the SIM card + * usedRcd = used preferred PLMN records on the SIM card + */ + pplmn_mem = (T_MFW_PPLMN_MEM *)parameter; + + network_data.pplmn_mem.maxRcd = pplmn_mem->maxRcd; + network_data.pplmn_mem.usedRcd = pplmn_mem->usedRcd; + + /* + * Request preferred PLMN list from the SIM + */ + + + network_data.pplmn = (T_MFW_NETWORK_STRUCT *)ALLOC_MEMORY ((pplmn_mem->maxRcd) * sizeof (T_MFW_NETWORK_STRUCT)); + + if (network_data.pplmn EQ 0) + { + return; + } + + if (pplmn_mem->usedRcd > 0) + { + // request MFW to fill up the pref. PLMN list + nm_pref_plmn_list(network_data.pplmn, pplmn_mem->maxRcd, 1); + } + else + { + // doesnt make sense to request the MFW to fill up the list + // when the "pplmn_mem->usedRcd" is 0 + + TRACE_EVENT(">> NETWORK PPLMN MEM LIST - ELSE Loop"); + for (i=0; i < (network_data.pplmn_mem.maxRcd); i++) + { +#ifdef NO_ASCIIZ + network_data.pplmn[i].network_long.len = 0; + network_data.pplmn[i].network_short.len = 0; +#else + memset(network_data.pplmn[i].network_long, '\0', LONG_NAME); + memset(network_data.pplmn[i].network_short, '\0', SHORT_NAME); +#endif + memset(network_data.pplmn[i].network_numeric, '\0', NUMERIC_LENGTH); + } + + data->network_list = network_create_pref_list (data); + listDisplayListMenu (win, data->network_list,(ListCbFunc)network_pref_list_cb,0); + } + + } + break; + + case NETWORK_PREFERRED_LIST: + { + + /* UBYTE i; */ /* Warning Correction */ + + + TRACE_EVENT (">>NETWORK PREFERRED LIST"); + /* + * Create and present the preferred list of PLMNs + * + */ + + //nm network_stop_animation (); + + + data->network_list = network_create_pref_list (data); + + /* cq12719 Check if prefered list info resource has been created.16-03-04 MZ */ + if(data->network_list != NULL) + listDisplayListMenu (win, data->network_list,(ListCbFunc)network_pref_list_cb,0); + } + break; + + case NETWORK_CELL_SELECT: + { + + /* x0045876, 14-Aug-2006 (WR -"cell_data" was set but never used) */ +#ifdef MMI_HOMEZONE_ENABLED + /* If Homezone is active, inform it of the new cell data */ + T_MFW_CELL_STRUCT *cell_data; +#endif + + TRACE_EVENT(">>NETWORK CELL SELECT"); + + + /* x0045876, 14-Aug-2006 (WR -"cell_data" was set but never used) */ + /* cell_data = (T_MFW_CELL_STRUCT *)parameter; */ + +#ifdef MMI_HOMEZONE_ENABLED + + /* x0045876, 14-Aug-2006 (WR -"cell_data" was set but never used) */ + cell_data = (T_MFW_CELL_STRUCT *)parameter; + + /* SPR759 - SH - send cell reselection info to homezone */ + + //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + //Modified to incorporate the third argument. + homezoneUpdate(cell_data->lid, cell_data->ci, 0); +#endif + break; +#ifdef NEPTUNE_BOARD + /* Destory the list when select softkey is pressed / back softkey is pressed */ + /* OMAPS00061049 - 08-03-2006 - BEGIN*/ + case NETWORK_LIST_DESTORY: + TRACE_EVENT ("Inside NETWORK_LIST_DESTORY Event"); + + /* Destory the list window */ + listsDestroy(data->network_list->win); + + TRACE_EVENT ("Destoryed list window successfully"); + + /* + * If network list is available, destroy + */ + if (data->network_list NEQ NULL) + { + +#ifdef FF_2TO1_PS + /* Free the allocated memory for PLMN list window - OMAPS00061049 - 08-03-2006 */ + FREE_MEMORY ((UBYTE *)data->network_list->List, Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); +#else + /* Free the allocated memory for PLMN list window - OMAPS00061049 - 08-03-2006 */ + FREE_MEMORY ((UBYTE *)data->network_list->List, Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); +#endif + + FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData)); + data->network_list = NULL; + } + + TRACE_EVENT ("List window memory freed"); + break; + /* OMAPS00061049 - 08-03-2006 - END */ +#endif + + + } + +// June 02, 2006 DR: OMAPS00078005 x0021334 +// Descripton: Test for NITZ (Network Identity and Timezone) support - No New time was displayed +// Solution: New Time/Date received from network is sent to MFW by lower layer by invoking 'rAT_PercentCTZV' +// function. The same is received and handled in case NETWORK_TIME_UPDATE in MMI for user +// confirmation and RTC updation. + +//Dec 13,2006 DR:OMAPS00098351 x0066814 - Begin +#ifdef FF_TIMEZONE + case NETWORK_TIME_UPDATE: + { + BOOL modify_date_negative = FALSE; + BOOL modify_date_positive = FALSE; + int actual_TD = 0; + int absolute_value; + + TRACE_EVENT ("Inside NETWORK_TIME_UPDATE Event"); + +if(FFS_flashData.nitz_option!=NitzOff) +{ + +TRACE_FUNCTION("NITZ- not OFF"); + + // Copy time and date info received from network into 'time' + network_time = (T_MFW_TIME_IND *)parameter; + actual_TD = network_time->timezone; + absolute_value = (10*(actual_TD & 0x7))+((actual_TD >> 4) & 0xf); + +TRACE_EVENT_P1("actual_TD: %d", actual_TD); +TRACE_EVENT_P1("Absolute value: %d", absolute_value); +TRACE_FUNCTION("IN HEX"); +TRACE_EVENT_P1("actual_TD: %x", actual_TD); +TRACE_EVENT_P1("Absolute value: %x", absolute_value); + if((actual_TD & 0x08)) + { + absolute_value = ~absolute_value+1; + } + +actual_TD = absolute_value; + +if(actual_TD >0) +{ + + network_time->hour = network_time->hour + actual_TD/4 ; + + network_time->minute = network_time->minute + (actual_TD%4)*15; + if(network_time->minute > 60) + { + network_time->minute = network_time->minute - 60 ; + network_time->hour = network_time->hour +1; + } + if(network_time->minute == 60) + { + network_time->minute = 0; + network_time->hour = network_time->hour +1; + } + if(network_time->hour >= 24) + modify_date_positive = TRUE; + + +} +else if(actual_TD<0) +{ + + if((network_time->minute - abs((actual_TD%4)*15)) < 0) + { + network_time->minute = 60 - (abs((actual_TD%4)*15) - network_time->minute ); + + network_time->hour = network_time->hour - 1; + } + else if((network_time->minute - abs((actual_TD%4)*15)) == 0) + { + network_time->minute = 0; + network_time->hour = network_time->hour - 1; + + } + else + network_time->minute = network_time->minute - abs((actual_TD%4)*15); + + if((network_time->hour - abs(actual_TD/4 )) < 0) + modify_date_negative = TRUE; + else + network_time->hour = network_time->hour - abs(actual_TD/4 ); + +} + +//Assume the date is 1/07/2005 5 Am in the morning +//After time zone calculation it needs to become 30/06/2005 and not 31 st June 2005 since there are only 30 days +//in all the odd months before July and in all the even months after july(7th Month) +//Similarly a problem arises if the year too needs to be adjusted after the timezone calculations. + + +if(modify_date_negative) + { + + TRACE_EVENT("modify date negative"); + network_time->hour = 24 - abs(network_time->hour - abs(actual_TD/4 )); + + network_time->day = network_time->day -1; + + if(network_time->day == 0) + { + if(((network_time->month)%2 != 0) && network_time->month <= 7) + { + if( network_time->month == 1) + { + network_time->month = network_time->month -1; + network_time->day = 31; + } + else{ + network_time->month = network_time->month -1; + network_time->day = 30; + } + } + else if(((network_time->month)%2 == 0) && network_time->month < 7) + { + network_time->month = network_time->month -1; + network_time->day = 31; + } + if(((network_time->month)%2 == 0) && network_time->month > 7) + { + if( network_time->month == 8) + { + network_time->month = network_time->month -1; + network_time->day = 31; + } + else + { + network_time->month = network_time->month -1; + network_time->day = 30; + } + + } + if(network_time->month == 2) + { + if(((network_time->year+2000)%4 == 0) && ((network_time->year+2000)%100 != 0)) + network_time->day = 29; + else + network_time->day = 28; + } + if(network_time->month <= 0) + { + network_time->year = network_time->year -1; + network_time->month = 12; + } + } +} + +else if(modify_date_positive) +{ + TRACE_EVENT("modify date positive"); + network_time->hour = network_time->hour -24; + + network_time->day = network_time->day + 1; + + if(network_time->month == 2) + { + if(network_time->day == 30) + { + network_time->day = 1; + network_time->month = 3; + } + if(network_time ->day == 29) + { + if(((network_time->year+2000)%4 == 0) && ((network_time->year+2000)%100 != 0)) + { + network_time->day = 29; + } + else + { + network_time->day = 1; + network_time->month = 3; + } + } + } + else + { + if(network_time->day>=31) + { + if(network_time->day == 31) + { + if(((network_time->month)%2 != 0) && network_time->month <= 7) + { + network_time->day = 31; + } + else if(((network_time->month)%2 == 0) && network_time->month > 7) + { + network_time->day = 31; + } + + else + { + network_time->day = 1; + network_time->month = network_time->month +1; + } + } + else + { + network_time->day = 1; + network_time->month = network_time->month +1; + } + } + } + if(network_time->month > 12) + { + network_time->year = network_time->year + 1; + network_time->month = 1; + } + } + + // Get the current time and format info set in the MS + time_format = mfw_td_get_time(); + + // Copy this info in the structure that will be used to do RTC upation. + // This ensures that the format set remains the same even after RTC updation. + newTime = *time_format; + + TRACE_EVENT("------------------------------------"); + TRACE_EVENT_P1("Current format set in MS : %d", time_format->format); + + // The time info received from network is in 24Hrs format. Depeneding on the format + // curently set in the MS, we need to do conversion and then update the RTC. + if (time_format->format == RTC_TIME_FORMAT_12HOUR) + { + TRACE_EVENT("12 Hrs format"); + + if (network_time->hour == 0) // If hour info from network is 0, set hour as 12 + { // and the AM/PM flag off to indicate AM. + newTime.PM_flag = 0; + newTime.hour = 12; + } + else if (network_time->hour < 12) // If hour info from network is less than 12, + { // set the hour info as it is and AM flag to off. + newTime.PM_flag = 0; + newTime.hour = network_time->hour; + } + else + { + newTime.PM_flag = 1; // If hour info from network is greater than 12, + newTime.hour = network_time->hour - 12; // set hour = received hour - 12 and AM/PM + } // flag to ON indicate PM. + + newTime.minute = network_time->minute; // Set minute info + newTime.second = network_time->second; // Set second info + + // Set the date related info. Year information is decoded in the following way: + // 0 - 2000 - default + // 1 - 2001 + // 2 - 2002 etc. + // Hence we need to add 2000 to the year value received from network to + // display the actual year. + + newDate.day = network_time->day; // Day of the month + newDate.month = network_time->month; // Month + newDate.year = network_time->year + 2000; // year + } + else + { + TRACE_EVENT("24 Hrs format"); + newTime.hour = network_time->hour; // In 24 Hrs format, set the received hour info as it is. + + newTime.minute = network_time->minute; // Set minute info + newTime.second = network_time->second; // Set second info + + // Set the date related info. Year information is decoded in the following way: + // 0 - 2000 - default + // 1 - 2001 + // 2 - 2002 etc. + // Hence we need to add 2000 to the year value received from network to + // display the actual year. + + newDate.day = network_time->day; // Day of the month + newDate.month = network_time->month; // Month + newDate.year = network_time->year + 2000; // year + } + +if(FFS_flashData.nitz_option==NitzAutomatic) +{ + // Update RTC with new time info + mfw_td_set_time(&newTime); + + // Update RTC with new date info + mfw_td_set_date(&newDate); + + // Send IDLE_UPDATE event to force idle screen refresh + SEND_EVENT(idle_get_window(), IDLE_UPDATE, 0, 0); + + +} +else //if(FFS_flashData.nitz_option==NITZOn) +{ + // Show a dialog to the user to get confirmation for Time/Date updation. + dlg_initDisplayData_TextId( &display_info, TxtYes, TxtNo, TxtTimeUpdate, TxtTimeUpdateConfirm, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)nw_time_update_callback, FOREVER, KEY_HUP | KEY_LEFT | KEY_RIGHT); + info_dialog (NULL, &display_info); +} +} + } + break; + #endif + + } +} +//Dec 13,2006 DR:OMAPS00098351 x0066814 - End +/******************************************************************************* + + $Function: network_win_cb + + $Description: network top window + + $Returns: + + $Arguments: + +*******************************************************************************/ +static int network_win_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ + /* + * Top Window has no output + */ + return 1; +} + + +/******************************************************************************* + + $Function: network_nm_cb + + $Description: network handler (mfw callback handler) + + $Returns: + + $Arguments: + +*******************************************************************************/ +static int network_nm_cb (T_MFW_EVENT event, T_MFW_HND para) +{ + TRACE_FUNCTION("network_nm_cb"); + + switch(event) + { + case E_NM_FULL_SERVICE: +//x0pleela 9 Feb, 2006 ER:OMAPS00065203 +//Handling E_NM_OPN for operator name display + case E_NM_OPN: + + SEND_EVENT (network_data.network_win, NETWORK_FULL_SERVICE, 0, para); + break; + //Sep 18,2006 DRT: OMAPS00090268 x0061088(Prachi) + //Description : To check for Forbidden network (for denied services),it takes long time. + //Solution : Function network_nm_cb() has now be implemented to handle E_NM_FORBIDDEN_NETWORK,which sends event + //NETWORK_FORBIDDEN_NETWORK to network(),by setting flags network_data.aborted =False + //and network_data.forbidden = Ture + case E_NM_FORBIDDEN_NETWORK: + network_data.forbidden = TRUE; + network_data.aborted = FALSE; + /* Jan 10, 2007 REF: OMAPS00110741 x0039928(sumanth) */ + /* Fix : Pass NULL as parameter */ + SEND_EVENT (network_data.network_win, NETWORK_FORBIDDEN_NETWORK, 0, 0); + break; + + case E_NM_LIMITED_SERVICE: + SEND_EVENT (network_data.network_win, NETWORK_LIMITED_SERVICE, 0, para); + break; + + case E_NM_NO_SERVICE: + SEND_EVENT (network_data.network_win, NETWORK_NO_SERVICE, 0, para); + break; + + case E_NM_SEARCH_NETWORK: + SEND_EVENT (network_data.network_win, NETWORK_SEARCH_NETWORK, 0, para); + break; + + case E_NM_NO_NETWORK: + SEND_EVENT (network_data.network_win, NETWORK_NO_NETWORK, 0, para); + break; + + case E_NM_PLMN_LIST: + SEND_EVENT (network_data.network_win, NETWORK_PLMN_LIST, 0, para); + break; + + case E_NM_DEREGISTRATION: + TRACE_EVENT("MmiNetwork:E_NM_DEREGISTRATION"); + mainShutdown(); + break; + case E_NM_PREF_PLMN_LIST: + TRACE_EVENT("MmiNetwork:E_NM_PREF_PLMN_LIST"); + SEND_EVENT (network_data.network_win, NETWORK_PREFERRED_LIST, 0, para); + break; + case E_NM_PPLMN_MEM: + TRACE_EVENT("MmiNetwork:E_NM_PPLMN_MEM"); + SEND_EVENT (network_data.network_win, NETWORK_PPLMN_MEM_LIST, 0, para); + break; + /* SH 29-04-02 - Cell reselection */ + case E_NM_CELL_SELECT: + TRACE_EVENT("MmiNetwork:E_NM_CELL_SELECT"); + SEND_EVENT (network_data.network_win, NETWORK_CELL_SELECT, 0, para); + break; + /* SPR919 - SH - Band selection */ + case E_NM_BAND: + TRACE_EVENT("MmiNetwork:E_NM_BAND"); + nm_registration (nm_get_mode (),0, 0); + //Sep 23, 2004 REF: CRR 24562 xvilliva + //After retrieving the list we see if an error occured + //and flash an alert to the user accordingly. + if(g_ensErr == 1) + { + g_ensErr = 0; + info_screen(0, TxtNotAllowed, TxtNull, NULL); + } + break; + + //x0pleela 30 May, 2007 DR: OMAPS00133201 + case E_NM_ABORT_NETWORK: + TRACE_EVENT("MmiNetwork:E_NM_ABORT_NETWORK"); + nm_abort_network(); + break; +/*Aug 07, 2007 DR:OMAPS00137726 x0066814(Geetha)*/ + case E_NM_PLMN_LIST_BOOTUP: + TRACE_EVENT("MmiNetwork:E_NM_PLMN_LIST_BOOTUP"); + /*Start the available plmn search*/ + nm_avail_plmn_list(); + /*After retrieving the list we see if an error occured + and flash an alert to the user accordingly.*/ + if(g_ensErr == 1) + { + g_ensErr = 0; + info_screen(0, TxtNotAllowed, TxtNull, NULL); + } + /* remove network log if needed */ + network_remove_network_log (); + network_start_animation (); + network_data.aborted = FALSE; + + break; + + // June 02, 2006 DR: OMAPS00078005 x0021334 + // Send NETWORK_TIME_UPDATE event to update the new network time/date + //Dec 13,2006 DR:OMAPS00098351 x0066814 - Added the FF_TIMEZONE flag +#ifdef FF_TIMEZONE + case E_MFW_TIME_IND: + TRACE_EVENT("E_MFW_TIME_IND"); + SEND_EVENT (network_data.network_win, NETWORK_TIME_UPDATE, 0, para); + break; +#endif + default: + return 0; + } + return 1; +} + +/******************************************************************************* + + $Function: nm_flag_log_off + + $Description: Attribut function for menu entries. + It defines whether the network log off function shall + be displayed or not. + + $Returns: + + $Arguments: + +*******************************************************************************/ +USHORT nm_flag_log_off (T_MFW_MNU * m, T_MFW_MNU_ATTR * ma, T_MFW_MNU_ITEM * mi) +{ + if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED) + return 0; + + return MNU_ITEM_HIDE; +} +/******************************************************************************* + + $Function: nm_flag_log_off + + $Description: Attribut function for menu entries. + It defines whether the network log off function shall + be displayed or not. + + $Returns: + + $Arguments: + +*******************************************************************************/ +USHORT nm_flag_log_on (T_MFW_MNU * m, T_MFW_MNU_ATTR * ma, T_MFW_MNU_ITEM * mi) +{ + if (FFS_flashData.network_name == NULL) + { + return MNU_ITEM_HIDE; + } + if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_NOT_USED) + return 0; + + return MNU_ITEM_HIDE; +} + +/******************************************************************************* + + $Function: network_set_mode_auto + + $Description: Start a automatic registration + + $Returns: + + $Arguments: + +*******************************************************************************/ +int network_set_mode_auto(T_MFW_MNU *m, T_MFW_MNU_ITEM *i) +{ + TRACE_FUNCTION ("network_set_mode_auto()"); + + /* + * Save the automatic mode in PCM for next power on + */ + nm_set_mode(NM_AUTOMATIC); + + /* + * Start the registration of full service + */ + nm_registration (NM_AUTOMATIC,0, FALSE); + + /* + * remove network log if needed + */ + network_remove_network_log (); + + /* + * Remove Main Menu + */ + //JVJEmenuExit(); + + network_start_animation (); +// Apr 14, 2004 REF: CRR 12641 xpradipg + Auto_Network_Select=true; + return 1; +} +/******************************************************************************* + + $Function: network_set_mode_man + + $Description: Start a manual registration + + $Returns: + + $Arguments: + +*******************************************************************************/ +int network_set_mode_man(T_MFW_MNU *m, T_MFW_MNU_ITEM *i) +{ + TRACE_FUNCTION ("network_set_mode_man()"); + + /* + * Save the automatic mode in PCM for next power on + */ + nm_set_mode(NM_MANUAL); + + /* + * Start the available plmn search + */ + nm_avail_plmn_list(); + //Sep 23, 2004 REF: CRR 24562 xvilliva + //After retrieving the list we see if an error occured + //and flash an alert to the user accordingly. + if(g_ensErr == 1) + { + g_ensErr = 0; + info_screen(0, TxtNotAllowed, TxtNull, NULL); + return 1; + } + + /* + * remove network log if needed + */ + network_remove_network_log (); + + /* + * Remove Main Menu + */ + //nm menuExit(); + + network_start_animation (); + + network_data.aborted = FALSE; + return 1; +} + + /* ++--------------------------------------------------------------------+ +| PROJECT : MMI (6366) MODULE : MmiNetwork | +| STATE : code ROUTINE : network_pref_list | ++--------------------------------------------------------------------+ + + PURPOSE : Show the preferred list + +*/ +int network_pref_list(T_MFW_MNU *m, T_MFW_MNU_ITEM *mi) +{ +//TRACE_FUNCTION ("network_pref_list()"); + + /* + * Request the maximum number of preferred PLMN records + * on the SIM card + */ + nm_pplmn_mem_req(); + + + + return 1; +} + + +/******************************************************************************* + + $Function: network_remove_network_log + + $Description: Reset network log if set. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_remove_network_log (void) +{ + + if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED) + { + /* + * Until now the network log has been used. + * Now write to FFS + */ + FFS_flashData.net_log_status = NM_LOG_AVAIL_NOT_USED; + flash_write(); + + } +} + +/******************************************************************************* + + $Function: network_log_off + + $Description: Removes a network log and returns to automatic registration. + + $Returns: + + $Arguments: + +*******************************************************************************/ +int network_log_off(T_MFW_MNU *m, T_MFW_MNU_ITEM *i) +{ + TRACE_FUNCTION ("network_log_off()"); + + /* + * Same behaviour as automatic registration + */ + network_set_mode_auto (m,i); + + + network_start_animation (); + + return 1; +} + +/******************************************************************************* + + $Function: network_log_on + + $Description: Sets a network log. + + $Returns: + + $Arguments: + +*******************************************************************************/ +int network_log_on(T_MFW_MNU *m, T_MFW_MNU_ITEM *i) +{ + + + TRACE_FUNCTION ("network_log_on()"); + + + if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_NOT_USED OR + FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED) + { + /* + * Until now the network log has been not used. + * Now set the PCM. + */ + FFS_flashData.net_log_status = NM_LOG_AVAIL_USED; + memcpy (FFS_flashData.plmn_name, network_data.plmn_name, SIZE_PLMN_NAME); + memcpy (FFS_flashData.network_name, network_data.network_name, SIZE_NETWORK_NAME); + + + flash_write(); + /* + * Save the manual mode in PCM for next power on + */ + nm_set_mode(NM_MANUAL); + + /* + * Start the registration of the logged network + */ + nm_select_plmn (network_data.network_name); + //Sep 23, 2004 REF: CRR 24562 xvilliva + //After retrieving the list we see if an error occured + //and flash an alert to the user accordingly. + if(g_ensErr == 1) + { + g_ensErr = 0; + info_screen(0, TxtNotAllowed, TxtNull, NULL); + } + } + + + network_start_animation (); + + return 1; +} + +/******************************************************************************* + + $Function: network_start_full_service + + $Description: Starts a full service registration. + a) manual selection + b) automatic selection + c) network log selection + + $Returns: + + $Arguments: + +*******************************************************************************/ +void network_start_full_service(void) +{ + + TRACE_FUNCTION ("network_start_full_service()"); + + network_data.status = NETWORK_SEARCH_NETWORK; + + if(FFS_flashData.plmn_name == NULL) //if no network data + { /* + * Start normal Registration + */ +//TISH modified for MSIM +#if defined (_WIN32_) + EXTERN UBYTE mmi_reg_mode; + + if (mmi_reg_mode EQ 0) + nm_registration (NM_AUTOMATIC,0, 0); + else + nm_registration (NM_MANUAL,0, 0); +#else + if (nm_get_mode() == NM_MANUAL) + SEND_EVENT (idle_get_window(), NETWORK_SEARCH_NETWORK, 0, 0); + nm_registration (nm_get_mode (),0, 0); +#endif + } + else + { + switch (FFS_flashData.net_log_status) + { + case NM_LOG_AVAIL_USED: + memcpy (network_data.plmn_name, FFS_flashData.plmn_name, SIZE_PLMN_NAME); + memcpy (network_data.network_name, FFS_flashData.network_name, SIZE_NETWORK_NAME); + nm_select_plmn (network_data.network_name); + break; + default: + if (nm_get_mode() == NM_MANUAL) + SEND_EVENT (idle_get_window(), NETWORK_SEARCH_NETWORK, 0, 0); + nm_registration (nm_get_mode (),0, 0); + break; + } + } + //Sep 23, 2004 REF: CRR 24562 xvilliva + //After retrieving the list we see if an error occured + //and flash an alert to the user accordingly. + if(g_ensErr == 1) + { + g_ensErr = 0; + info_screen(0, TxtNotAllowed, TxtNull, NULL); + } +} + +/******************************************************************************* + + $Function: network_get_name + + $Description: Returns the textual and numeric representation of the + network name. + + $Returns: + + $Arguments: + +*******************************************************************************/ +void network_get_name(T_CURRENT_NETWORK * nm) +{ +#ifdef NO_ASCIIZ + T_MFW_SP_NAME service_provider_name; +#else + U8 service_provider_name[LONG_NAME]; +#endif + TRACE_FUNCTION ("network_get_name()"); + +//x0pleela 15 Feb, 2006 ER: OMAPS00065203 +//Included flag NEPTUNE_BOARD to retain old code for operator get name and +//added new code for this ER also + +#ifndef NEPTUNE_BOARD + + //x0pleela 09 Feb, 2006 ER: OMAPS00065203 + //Removed the code as prioritized operator name is already updated to network_data + // and CPHS check is not required + + //x0pleela 09 Feb, 2006 ER: OMAPS00065203 + //Updating prioritized operator name + memset( nm->plmn_name, 0, SIZE_PLMN_NAME ); + memset( nm->network_name, 0, SIZE_NETWORK_NAME ); + memcpy (nm->plmn_name, network_data.plmn_name, SIZE_PLMN_NAME); + memcpy (nm->network_name, network_data.network_name, SIZE_NETWORK_NAME); + + memset( nm->service_provider_name, 0, SP_NAME ); + #else + if (CphsPresent() )//if CPHS supported + { + T_MFW_CPHS_OP_NAME* operator_name; + operator_name = CphsRequestOperatorName(); //get operator name + + if (operator_name->longName.data[0] != NULL)//if name not blank + { + memcpy(nm->plmn_name, operator_name->longName.data, SIZE_PLMN_NAME); + TRACE_EVENT("Reading PLMN from SIM"); + } + else + memcpy (nm->plmn_name, network_data.plmn_name, SIZE_PLMN_NAME); + + if (operator_name->shortName.data[0] != NULL)//if name not blank + { + memcpy(nm->network_name, operator_name->shortName.data, SIZE_NETWORK_NAME); + } + else + memcpy (nm->network_name, network_data.network_name, SIZE_NETWORK_NAME); + } + else + { + + memcpy (nm->plmn_name, network_data.plmn_name, SIZE_PLMN_NAME); + memcpy (nm->network_name, network_data.network_name, SIZE_NETWORK_NAME); + + } + /* Marcus: Issue 1618: 24/01/2003: Start */ + /* Obtain the service provider name (from the SIM EF-SPN file) if any */ + nm->service_provider_name[0] = '\0'; +#endif +#ifdef NO_ASCIIZ + nm_get_spn(&service_provider_name); + if ((service_provider_name.len != 0) && + (service_provider_name.data[0] != '\0')) + { + if (service_provider_name.len > sizeof(nm->service_provider_name)-1) + service_provider_name.len = sizeof(nm->service_provider_name)-1; + + memcpy(nm->service_provider_name, + service_provider_name.data, + service_provider_name.len); + + nm->service_provider_name[service_provider_name.len] = '\0'; + } +#else + nm_get_spn(service_provider_name); + if (strlen(service_provider_name)) + { + strncpy(nm->service_provider_name, + service_provider_name, + sizeof(nm->service_provider_name)-1); + + nm->service_provider_name[sizeof(nm->service_provider_name)-1] = '\0'; + } +#endif + /* Marcus: Issue 1618: 24/01/2003: End */ + nm->roaming_indicator = network_data.roaming_indicator; +} + +/******************************************************************************* + + $Function: network_log_enabled + + $Description: Checks whether a network log is active or not. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static UBYTE network_log_enabled (void) +{ + + TRACE_FUNCTION ("network_log_enabled()"); + + if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED) + return TRUE; + + return FALSE; +} + +/******************************************************************************* + + $Function: ListMenuData + + $Description: Creates a list of available PLMNs for selection. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static ListMenuData * network_create_list (T_network * data, T_MFW_PLMN_LIST * plmn_list) +{ + UBYTE i; + + ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof (ListMenuData)); + + if (list_menu_data EQ 0) + return NULL; + + /* Allocated memory only for availble number of plmn list count */ + /* OMAPS00061049 - 08-03-2006 */ +#ifndef NEPTUNE_BOARD + list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (MAX_PLMN * sizeof (T_MFW_MNU_ITEM)); +#else + list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (plmn_list->count * sizeof (T_MFW_MNU_ITEM)); +#endif + + if (list_menu_data->List EQ 0) + return NULL; + + /* + * Fill Menu List + */ +#ifdef FF_2TO1_PS + for (i=0;i<MMREG_MAX_PLMN_ID;i++) +#else + for (i=0;i<MAX_PLMN_ID;i++) +#endif + { +#ifndef NEPTUNE_BOARD + /* Taken this statement inside the condition */ + /* OMAPS00061049 - 08-03-2006 */ + mnuInitDataItem(&list_menu_data->List[i]); +#endif + + if (i < plmn_list->count) + { +#ifdef NEPTUNE_BOARD + mnuInitDataItem(&list_menu_data->List[i]); +#endif + + /* + * set network name + */ +#ifdef NO_ASCIIZ + if (plmn_list->plmn[i].network_long.len NEQ 0) + { + list_menu_data->List[i].str = (char *)plmn_list->plmn[i].network_long.data; + } +#else + if (strlen((char *)plmn_list->plmn[i].network_long) NEQ 0) + { + list_menu_data->List[i].str = (char *)plmn_list->plmn[i].network_long; + } +#endif + else + { + list_menu_data->List[i].str = (char *)plmn_list->plmn[i].network_numeric; + } + + /* + * Store numeric network name in any case + */ + strncpy ((char *)data->network_search_name[i], (char *)plmn_list->plmn[i].network_numeric, 6); + + + /* + * NOTE : add forbidden indicator + */ + list_menu_data->List[i].flagFunc = item_flag_none; + } + else + { + } + } + + /* + * Fill common parameter for list handling + */ + + list_menu_data->ListLength = plmn_list->count; + list_menu_data->ListPosition = 1; + list_menu_data->CursorPosition = 1; + list_menu_data->SnapshotSize = plmn_list->count; + list_menu_data->Font = 0; + list_menu_data->LeftSoftKey = TxtSoftSelect; + list_menu_data->RightSoftKey = TxtSoftBack; + // Sep 8, 2004 REF: CRR 16062 xvilliva + //Though all the key events are monitered, the listsKeyEvent() + //responds to a few keys which includes KCD_MNUSELECT. + list_menu_data->KeyEvents = KEY_ALL; + list_menu_data->Reason = 0; + list_menu_data->Strings = TRUE; + list_menu_data->Attr = &network_menuAttrib; + list_menu_data->autoDestroy = TRUE; + list_menu_data->listCol = COLOUR_LIST_XX; + + + return list_menu_data; +} + +/******************************************************************************* + + $Function: network_create_pref_list + + $Description: Creates a list of preferred PLMNs for selection. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static ListMenuData * network_create_pref_list (T_network * data) +{ + UBYTE i; + + ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof (ListMenuData)); + + if (list_menu_data EQ 0) + { + return NULL; + } + + list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY ((data->pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM)); + + if (list_menu_data->List EQ 0) + { + + /* cq12719 If second memory alloc fails Free the memory allocated for list menu data. 16-03-04 MZ */ + if(NULL != list_menu_data) + FREE_MEMORY ((void *)list_menu_data, sizeof (ListMenuData)); + + return NULL; + } + + TRACE_EVENT ("network_create_pref_list ()"); + + + + /* + * Fill Menu List + */ + for (i=0; i < (network_data.pplmn_mem.maxRcd); i++) + { + mnuInitDataItem(&list_menu_data->List[i]); + + /* + * set network name + */ + +#ifdef NO_ASCIIZ + if (network_data.pplmn[i].network_long.len NEQ 0 ) + { + list_menu_data->List[i].str = (char *)network_data.pplmn[i].network_long.data; + } +#else + if (strlen((char *)network_data.pplmn[i].network_long) NEQ 0 ) + { + list_menu_data->List[i].str = (char *)network_data.pplmn[i].network_long; + } +#endif + else + { + list_menu_data->List[i].str = GET_TEXT(TxtEmpty); + TRACE_EVENT ("network_long == 0"); + } + + list_menu_data->List[i].flagFunc = item_flag_none; + + } + /* + * Fill common parameter for list handling + */ + + + list_menu_data->ListLength = network_data.pplmn_mem.maxRcd; + list_menu_data->ListPosition = 1; + list_menu_data->CursorPosition = 1; + list_menu_data->SnapshotSize = network_data.pplmn_mem.maxRcd; + list_menu_data->Font = 0; + list_menu_data->LeftSoftKey = TxtSoftOptions; /* SPR#2354 - SH - Change 'Select' to 'Options' */ + list_menu_data->RightSoftKey = TxtSoftBack; + list_menu_data->KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN; + list_menu_data->Reason = 0; + list_menu_data->Strings = TRUE; + list_menu_data->Attr = &network_menuAttrib; + list_menu_data->autoDestroy = TRUE; + list_menu_data->listCol = COLOUR_LIST_XX; + + return list_menu_data; +} + +/******************************************************************************* + + $Function: network_create_mobile_list + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +static ListMenuData * network_create_mobile_list (T_network_OPT * data) +{ + UBYTE i; + + ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof(ListMenuData)); + + if (list_menu_data EQ 0) + { + TRACE_EVENT ("failed to create the list"); + return NULL; + } + + mfwCheckMemoryLeft(); + + list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (MAX_SHOW_OF_PLMN * sizeof (T_MFW_MNU_ITEM)); + + mfwCheckMemoryLeft(); + + if (list_menu_data->List EQ 0) + { + TRACE_EVENT ("failed to create the list"); + return NULL; + } + + TRACE_EVENT ("network_create_mobile_list ()"); + + + + /* + * Fill Menu List + */ + for (i=0; i < MAX_SHOW_OF_PLMN; i++) + { + mnuInitDataItem(&list_menu_data->List[i]); + + /* + * set network name + */ + +/*SPR 2635 copy set list strings pointing at longname strings*/ + if (data->pplmn_longnames[i][0] NEQ 0 ) + { + list_menu_data->List[i].str =data->pplmn_longnames[i]; + } + else + + { + list_menu_data->List[i].str = GET_TEXT(TxtEmpty); + } + +/*SPR 2635, end*/ + + list_menu_data->List[i].flagFunc = item_flag_none; + + } + /* + * Fill common parameter for list handling + */ + + + list_menu_data->ListLength = MAX_SHOW_OF_PLMN; + list_menu_data->ListPosition = 1; + list_menu_data->CursorPosition = 1; + list_menu_data->SnapshotSize = MAX_SHOW_OF_PLMN; + list_menu_data->Font = 0; + list_menu_data->LeftSoftKey = TxtSoftSelect; + list_menu_data->RightSoftKey = TxtSoftBack; + list_menu_data->KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN; + list_menu_data->Reason = 0; + list_menu_data->Strings = TRUE; + list_menu_data->Attr = &network_menuAttrib; + list_menu_data->autoDestroy = TRUE; /*destroy the menulist after press any sofkey*/ + list_menu_data->listCol = COLOUR_LIST_XX; + + return list_menu_data; +} + +#if(0) /* x0039928 - Lint warning removal */ +/******************************************************************************* + + $Function: network_submenu + + $Description: Creates a submenu for the preferred list. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static ListMenuData * network_submenu (T_network * data, T_MFW_NETWORK_STRUCT * plmn_list) +{ + UBYTE i; + + + ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof (ListMenuData)); + + if (list_menu_data EQ 0) + return NULL; + + list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY ((NETWORK_MENU_ITEM) * sizeof (T_MFW_MNU_ITEM)); + if (list_menu_data->List EQ 0) + return NULL; + + /* + * Fill Menu List + */ + for (i=0;i<(NETWORK_MENU_ITEM);i++) + { + mnuInitDataItem(&list_menu_data->List[i]); + + /* + * set network name + */ +#ifdef NO_ASCIIZ + if (plmn_list->network_long.len NEQ 0) + list_menu_data->List[i].str = (char *)plmn_list->network_long.data; +#else + if (strlen((char *)plmn_list->network_long) NEQ 0) + list_menu_data->List[i].str = (char *)plmn_list->network_long; +#endif + + else + ; + //strncpy ((char *)list_menu_data->List[i].str,(char *)empty, 6); + + + plmn_list ++; + + } + /* + * Fill common parameter for list handling + */ + list_menu_data->ListLength = data->pplmn_mem.maxRcd; + list_menu_data->ListPosition = 1; + list_menu_data->CursorPosition = 1; + list_menu_data->SnapshotSize = data->pplmn_mem.maxRcd; + list_menu_data->Font = 0; + list_menu_data->LeftSoftKey = TxtSoftSelect; + list_menu_data->RightSoftKey = TxtSoftBack; + list_menu_data->KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN; + list_menu_data->Reason = NETWORK_PREF_LIST_SELECTED; + list_menu_data->Strings = TRUE; + list_menu_data->Attr = &network_menuAttrib; + list_menu_data->listCol = COLOUR_LIST_XX; + + return list_menu_data; +} + +#endif + +/******************************************************************************* + + $Function: network_list_cb + + $Description: Callback function list dialog. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_list_cb(T_MFW_HND win, ListMenuData * ListData) +{ + TRACE_FUNCTION ("network_list_cb()"); + +#ifndef NEPTUNE_BOARD + if (ListData->Reason != LISTS_REASON_BACK) + { + SEND_EVENT (win, NETWORK_LIST_SELECT_PLMN, ListData->CursorPosition, NULL); + } + +#else + if (ListData->Reason EQ LISTS_REASON_SELECT) + { + SEND_EVENT (win, NETWORK_LIST_SELECT_PLMN, ListData->CursorPosition, NULL); + SEND_EVENT (win, NETWORK_LIST_DESTORY, NULL, NULL); + } + + if ((ListData->Reason EQ LISTS_REASON_BACK) || + (ListData->Reason EQ LISTS_REASON_CLEAR)|| + (ListData->Reason EQ LISTS_REASON_HANGUP)) + + { + SEND_EVENT (win, NETWORK_LIST_DESTORY, NULL, NULL); + } +#endif + +} + +/******************************************************************************* + + $Function: network_pref_list_cb + + $Description: Callback function pref. list dialog. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_pref_list_cb(T_MFW_HND win, ListMenuData * ListData) +{ + TRACE_FUNCTION ("network_pref_list_cb()"); + + if (ListData->Reason EQ LISTS_REASON_SELECT) + { + +// call here the MenuOptions with the items "Select from the list" + + FREE_MEMORY ((UBYTE *)network_data.network_list->List, (network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM)); + + FREE_MEMORY ((UBYTE *)network_data.network_list, sizeof (ListMenuData)); +// xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851 +//Commented FREE_MEMORY for network_data.pplmn as this is required when we enter the option menu. + // Nov 02, 2005 REF: omaps00044855 Sumanth Kumar.C + // Solution: Comment network_data.pplmn memory free. +/* + // cq12719 Stop the memory leak 17-03-04 MZ. + FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT)); +*/ + //keep the position of the selected PLMN, need it later to update the list + network_data.Listposition = ListData->ListPosition; + + network_MNU_start(win,&network_OPTAttrib); + } + else + { + + //user pressed Exit to go back to the network submenu + FREE_MEMORY ((UBYTE *)network_data.network_list->List, (network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM)); + + FREE_MEMORY ((UBYTE *)network_data.network_list, sizeof (ListMenuData)); + + FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT)); + + } + + +} + +/******************************************************************************* + + $Function: network_mobile_list_cb + + $Description: Callback function international list dialog. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_mobile_list_cb(T_MFW_HND win, ListMenuData * ListData) +{ + + /* UBYTE i;*/ /* Warning Correction */ + + T_MFW_PPLMN_MODE mode; + + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_network_OPT * data = (T_network_OPT *)win_data->user; + T_DISPLAY_DATA display_info; + + TRACE_EVENT ("network_mobile_list_cb()"); + + + switch (ListData->Reason) + { + case LISTS_REASON_SELECT: /* */ + + mode = REPLACE_PREF_PLMN; /* Overwrite an existing entry at a given index */ + /*SPR 2635, use new function to replace preferred PLMN using the longname*/ + nm_change_pref_plmn_longname(mode,(network_data.Listposition) +1 , 0, data->pplmn_longnames[ListData->ListPosition]); + + /* SPR#2354 - SH - Now display "Changed". On callback, redraw network list */ + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtChanged, TxtNull, COLOUR_STATUS_NETWORKS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_mobile_list_changed_cb, THREE_SECS, 0 ); + + info_dialog (win, &display_info); + + break; + case LISTS_REASON_BACK: /* back to previous menu */ + + TRACE_EVENT ("pressed Back-key"); + + //API - SPR 2025 - 22/05/03 - De Allocate memory to avoid memory leak and also Crash + if ( network_data.pplmn != NULL ) + FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT)); + + network_MNU_destroy(data->win); + + break; + default: + return; + } + + +} + +/******************************************************************************* + + $Function: network_mobile_list_changed_cb + + $Description: Callback from "Changed" message. Destroys the list and recreates the + updated network list. + + $Returns: + + $Arguments: + +*******************************************************************************/ + +void network_mobile_list_changed_cb(T_MFW_HND win , USHORT identifier, UBYTE reason) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_network_OPT * data = (T_network_OPT *)win_data->user; + /* T_DISPLAY_DATA display_info; */ /* Warning Correction */ + + /* destroy the Menu */ + network_MNU_destroy(data->win); + + /* request the pref. PLMN list */ + nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1); + + return; +} + + +/******************************************************************************* + + $Function: network_start_animation + + $Description: Starts the network animation. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_start_animation(void) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION ("network_start_animation()"); + + if (network_data.network_search_win != NULL) + { + network_stop_animation(); + } + /* REF: OMAPS00061046 possible to cancel the searching with right soft key although + * the option is not available. + */ +#ifdef NEPTUNE_BOARD + dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtCancel, "Searching for", "Networks", COLOUR_STATUS_NETWORKS); +#else + dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "Searching for", "Networks", COLOUR_STATUS_NETWORKS); +#endif + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, FOREVER, KEY_CLEAR | KEY_RIGHT); + /* + * Call Info Screen + */ + + network_data.network_search_win = info_dialog (network_data.network_win, &display_info); +} + + +/******************************************************************************* + + $Function: network_start_animation_plmn_selection + + $Description: Starts the plmn selection animation. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_start_animation_plmn_selection(int plmn_value) +{ + T_DISPLAY_DATA display_info; +/* T_MFW_PLMN_LIST * plmn_list; */ /* Warning Correction */ + + TRACE_FUNCTION ("network_start_animation()"); + + dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "Requesting....", NULL, COLOUR_STATUS_NETWORKS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, FOREVER, KEY_CLEAR| KEY_RIGHT ); + + /* + * Call Info Screen + */ + + network_data.network_search_win = info_dialog (network_data.network_win, &display_info); +} + + +/******************************************************************************* + + $Function: network_forbidden_plmn + + $Description: Starts the forbidden plmn data screen. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_forbidden_plmn(void) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION ("network_forbidden_plmn()"); + + if (network_data.network_search_win != NULL) + { + network_stop_animation(); + } + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNetwork, TxtForbidden, COLOUR_STATUS_NETWORKS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, 3500, KEY_CLEAR| KEY_RIGHT ); + /* + * Call Info Screen + */ +//Feb 08,2007 DRT: OMAPS00115060 x00061088(Prachi) + network_data.network_search_win = info_dialog (0, &display_info); +} + + +/******************************************************************************* + + $Function: network_selected + + $Description: displays info screen on network selected + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_selected(void) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION ("network_start_animation()"); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNetwork, TxtSelected, COLOUR_STATUS_NETWORKS); + // Jul 21, 2004 REF: CRR 13348 xvilliva + // We use a new callback to return to idle screen after the alert is flashed. + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_select_animation_cb, 3500, KEY_CLEAR| KEY_RIGHT ); + + /* + * Call Info Screen + */ + + network_data.network_search_win = info_dialog (network_data.network_win, &display_info); +} + +/******************************************************************************* + + $Function: network_no_plmns + + $Description: Indicate Info Screen that the network list is empty. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_no_plmns(void) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION ("network_no_plmns()"); + + dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "No networks", "available", COLOUR_STATUS_NETWORKS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, THREE_SECS, KEY_CLEAR| KEY_RIGHT ); + /* + * Call Info Screen + */ + info_dialog (0, &display_info); + +} +/******************************************************************************* + + $Function: network_stop_animation + + $Description: Stops the network animation. + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_stop_animation(void) +{ + TRACE_FUNCTION ("network_stop_animation()"); + + if (network_data.network_search_win) + { + SEND_EVENT(network_data.network_search_win,DIALOG_DESTROY,0,0); + network_data.network_search_win = 0; + } +} +/******************************************************************************* + + $Function: network_animation_cb + + $Description: Callback for information dialog (not used)n + + $Returns: + + $Arguments: + +*******************************************************************************/ +void network_animation_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + TRACE_FUNCTION ("network_animation_cb()"); + + network_data.network_search_win = 0; + network_data.aborted = TRUE; +} + +/******************************************************************************* + + $Function: network_select_animation_cb + + $Description: Callback for information dialog "Network Selected". + + $Returns: + + $Arguments: + +*******************************************************************************/ +void network_select_animation_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + TRACE_FUNCTION ("network_select_animation_cb()"); + + network_data.network_search_win = 0; + network_data.aborted = TRUE; + // Jul 21, 2004 REF: CRR 13348 xvilliva + // If "gPhbkMenu" is not NULL, we destroy phonebook menu + // to return to idle screen. + if(gPhbkMenu != NULL) + { + bookPhonebookDestroy( gPhbkMenu ); + } +} + +/******************************************************************************* + + $Function: network_MNU_start + + $Description: called when the user press the Edit Softkey to enter the + Option Menu "Select from the list" & "Enter the Network Code" & + "Delete" + $Returns: + + $Arguments: + +*******************************************************************************/ + +T_MFW_HND network_MNU_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) +{ + T_MFW_HND win; + + TRACE_FUNCTION ("network_MNU_start()"); + + win = network_MNU_create (parent_window); + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, NULL, (void *)menuAttr); + } + return win; +} + +/******************************************************************************* + + $Function: network_MNU_create + + $Description: Create the Option window + + $Returns: mfw window handle + + $Arguments: parent_window -parent window handle + +*******************************************************************************/ + +static T_MFW_HND network_MNU_create(MfwHnd parent_window) +{ + T_network_OPT * data = (T_network_OPT *)ALLOC_MEMORY (sizeof (T_network_OPT)); + T_MFW_WIN * win; + + TRACE_FUNCTION ("network_MNU_create()"); + + /* + * Create window handler + */ + + data->win = + win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)network_MNU_win_cb); + if (data->win EQ NULL) + { + return NULL; + } + + /* + * connect the dialog data to the MFW-window + */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)network_MNU_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->win)->data; + win->user = (void *)data; + data->parent = parent_window; + + /* + * return window handle + */ + + return data->win; +} + +/******************************************************************************* + + $Function: network_MNU_destroy + + $Description: Destroy the Option window + + $Returns: mfw window handle + + $Arguments: own_window - current window + +*******************************************************************************/ + +static void network_MNU_destroy(MfwHnd own_window) +{ + T_MFW_WIN * win_data; + T_network_OPT * data; + /* T_MFW_PPLMN_MEM *pplmn_mem; */ /* Warning Correction */ + + TRACE_FUNCTION ("network_MNU_destroy()"); + + if (own_window) + { + win_data = ((T_MFW_HDR *)own_window)->data; + data = (T_network_OPT *)win_data->user; + + if (data) + { + kbd_delete(data->kbd); + kbd_delete(data->kbd_long); + mnuDelete (data->menu); + /* + * Delete WIN handler + */ + win_delete (data->win); + TRACE_EVENT("END of WIN DELETE"); + + if(data->network_list != NULL) + { + TRACE_EVENT("START FREE MEMORY"); + + /* Free the allocated memory for PLMN list window - OMAPS00061049 - 08-03-2006 */ +#ifndef NEPTUNE_BOARD + FREE_MEMORY ((UBYTE *)data->network_list->List, MAX_SHOW_OF_PLMN* sizeof (T_MFW_MNU_ITEM)); +#else + FREE_MEMORY ((UBYTE *)data->network_list->List, Plmn_list_count * sizeof (T_MFW_MNU_ITEM)); +#endif + + FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData)); + + /*SPR 2635, free list of pointers to longname atrings*/ + FREE_MEMORY ((UBYTE *)data->pplmn_longnames,MAX_SHOW_OF_PLMN* sizeof (char*)); + + TRACE_EVENT("END of FREE MEMORY"); + } + + /* + * Free Memory + */ + + FREE_MEMORY ((void *)data, sizeof (T_network_OPT)); + } + else + { + TRACE_EVENT ("network_MNU_destroy() called twice"); + } + } +} + +/******************************************************************************* + + $Function: network_MNU_exec_cb + + $Description: Exec callback function for the Option window + + $Returns: none + + $Arguments: win - current window + event - event id + value - unique id + parameter - optional data. + +*******************************************************************************/ + +void network_MNU_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_network_OPT * data = (T_network_OPT *)win_data->user; + /* T_MFW_HND * l_parent; */ /* Warning Correction */ + /* SHORT l_id; */ /* Warning Correction */ + /* T_MFW_HDR * parent = data->parent; */ /* Warning Correction */ + /* T_MFW_EVENT MfwEvents; */ /* Warning Correction */ + + TRACE_FUNCTION ("network_MNU_exec_cb()"); + + + switch (event) + { + case E_INIT: + data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)network_MNU_kbd_cb); + data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)network_MNU_kbd_cb); + data->menu = mnuCreate(data->win,&network_OPTAttrib, E_MNU_ESCAPE, (MfwCb)network_MNU_mnu_cb); + mnuLang(data->menu,mainMmiLng); + + /* put the (new) dialog window on top of the window stack */ + mnuUnhide(data->menu); + winShow(win); + + break; + default: + return; + } +} + +/******************************************************************************* + + $Function: network_MNU_mnu_cb + + $Description: Menu callback function for the Option window + + $Returns: none + + $Arguments: e - event id + m - menu handle +*******************************************************************************/ + +static int network_MNU_mnu_cb (MfwEvt e, MfwMnu *m) +{ + T_MFW_HND win = mfwParent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_network_OPT * data = (T_network_OPT *)win_data->user; + /* T_MFW_HND * l_parent; */ /* Warning Correction */ + /* SHORT l_id; */ /* Warning Correction */ + + TRACE_FUNCTION ("network_MNU_mnu_cb()"); + + switch (e) + { + case E_MNU_ESCAPE: /* back to previous menu "pref. network list"*/ + network_MNU_destroy(data->win); + + // request MFW to fill up the pref. PLMN list + nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1); + + + break; + default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */ + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: network_MNU_win_cb + + $Description: Window callback function for the Option window + + $Returns: execution status + + $Arguments: e - event id + w - window handle +*******************************************************************************/ + +static int network_MNU_win_cb (MfwEvt e, MfwWin *w) +{ + TRACE_FUNCTION ("network_MNU_win_cb()"); + + switch (e) + { + case MfwWinVisible: /* window is visible */ + displaySoftKeys(TxtSoftSelect,TxtSoftBack); + break; + case MfwWinFocussed: /* input focus / selected */ + case MfwWinDelete: /* window will be deleted */ + default: + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: network_MNU_kbd_cb + + $Description: Exec callback function for the Option window + + $Returns: execution status + + $Arguments: e - event id + k - keyboard info +*******************************************************************************/ + +static int network_MNU_kbd_cb (MfwEvt e, MfwKbd *k) +{ + T_MFW_HND win = mfwParent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_network_OPT * data = (T_network_OPT *)win_data->user; + + TRACE_FUNCTION ("network_MNU_kbd_cb()"); + + if (e & KEY_LONG) + { + switch (k->code) + { + case KCD_HUP: /* back to previous menu */ + mnuEscape(data->menu); + break; + case KCD_RIGHT: /* Power Down */ + return MFW_EVENT_REJECTED; /* handled by idle */ + default: /* no response to all other keys */ + return MFW_EVENT_CONSUMED; + } + } + else + { + switch (k->code) + { + case KCD_MNUUP: /* highlight previous entry */ + mnuUp(data->menu); + break; + case KCD_MNUDOWN: /* highlight next entry */ + mnuDown(data->menu); + break; + case KCD_LEFT: /* activate this entry */ + mnuSelect(data->menu); + break; + case KCD_HUP: /* back to previous menu */ + case KCD_RIGHT: /* back to previous menu */ + mnuEscape(data->menu); + break; + default: /* no response to all other keys */ + return MFW_EVENT_CONSUMED; + } + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: network_request_plnm_list + + $Description: Request existing network list in Mobile + + $Returns: + + $Arguments: + + + *******************************************************************************/ +static int network_request_plnm_list(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win = mfwParent(mfw_header()); + /* T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; */ /* Warning Correction */ +/* T_network_OPT * data = (T_network_OPT *)win_data->user; */ /* Warning Correction */ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION("network_request_plnm_list"); + + /* SPR#2354 - SH - Display "Choose Replacement" dialogue, + * so the function of the second list is more evident */ + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtChooseReplacement1, TxtChooseReplacement2, COLOUR_STATUS_NETWORKS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_request_plmn_list_cb, TWO_SECS, 0 ); + + info_dialog (win, &display_info); + + return 1; +} + +/******************************************************************************* + + $Function: network_request_plnm_list_cb + + $Description: User has been advised to "choose replacement", now display the list! + + $Returns: None + + $Arguments: Usual info dialogue callback arguments. + +*******************************************************************************/ + +static void network_request_plmn_list_cb(T_MFW_HND win, USHORT identifier, UBYTE reason) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_network_OPT * data = (T_network_OPT *)win_data->user; + /*SPR 2635, just alloc pointers to strings */ + data->pplmn_longnames = (char**)ALLOC_MEMORY ((MAX_SHOW_OF_PLMN) * sizeof (char*)); + + if (data->pplmn_longnames NEQ 0) + { + //now fill up the "data->pplmn_longnames" with the PLMN list from ACI + nm_plnm_list_longnames(data->pplmn_longnames, 1, MAX_SHOW_OF_PLMN); + + } + /*SPR 2635 end*/ + else + { + TRACE_EVENT("create the list failed"); + return; + } + + //show the list on the screen now + data->network_list = network_create_mobile_list (data); + listDisplayListMenu (data->win, data->network_list,(ListCbFunc)network_mobile_list_cb,0); + + return; +} + + +/******************************************************************************* + + $Function: network_delete + + $Description: + + $Returns: + + $Arguments: + + + *******************************************************************************/ + +static int network_delete(MfwMnu* m, MfwMnuItem* i) +{ + + T_MFW_HND win = mfwParent(mfw_header()); + + TRACE_FUNCTION ("network_delete()"); + +#ifdef NO_ASCIIZ + if (network_data.pplmn[network_data.Listposition].network_short.len NEQ 0 ) +#else + if (strlen((char *)network_data.pplmn[network_data.Listposition].network_short) NEQ 0 ) +#endif + { + // if the user selected a pref. PLMN + // xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851 + //Made network_info_screen as a generic function as it can be reused to display different messgaes to the user + //Hence need to pass the callback funtion as a parameter + network_info_screen (win, TxtDeleted,(T_VOID_FUNC)network_delete_pref_plnm); + } + else + { + // if the user selected a empty item + // xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851 + //Made network_info_screen as a generic function as it can be reused to display different messgaes to the user + //Hence need to pass the callback funtion as a parameter + network_info_screen (win, TxtEmptyList,(T_VOID_FUNC)network_delete_pref_plnm); + } + + // destroy the Menu + network_MNU_destroy(win); + + /* Warning Correction - BEGIN */ + return 1; + /* END */ + + +} + +/******************************************************************************* + + $Function: network_delete_pref_plnm + + $Description: Delete the selected pref. PLMN l + + $Returns: + + $Arguments: + + + *******************************************************************************/ + void network_delete_pref_plnm (T_MFW_HND win , USHORT identifier, UBYTE reason) +{ + + T_MFW_PPLMN_MODE mode; + UBYTE i; + /* T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; */ /* Warning Correction */ + /* T_network_OPT * data = (T_network_OPT *)win_data->user; */ /* Warning Correction */ + + TRACE_FUNCTION ("network_delete_pref_plnm()"); + + + mode = DELETE_PREF_PLMN; /* Delete an entry from the list */ + + //update now the pref. PLMN list + //(network_data.Listposition) "+1" because the zero is counted as well + nm_change_pref_plmn(mode, (network_data.Listposition) +1 , 0, 0); + + // clear all the PLMN and fill up with updated list + for (i=0; i < network_data.pplmn_mem.maxRcd; i++) + { + +#ifdef NO_ASCIIZ + network_data.pplmn[i].network_long.len = 0; + network_data.pplmn[i].network_short.len = 0; +#else + memset(network_data.pplmn[i].network_long, '\0', LONG_NAME); + memset(network_data.pplmn[i].network_short, '\0', SHORT_NAME); +#endif + memset(network_data.pplmn[i].network_numeric, '\0', NUMERIC_LENGTH); + } + + + // request the updated pref. PLMN list + nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1); + +} + +/******************************************************************************* + + $Function: network_info_screen + + $Description: confirm the deleted PLMN + + $Returns: + + $Arguments: + +// xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851 +//Made this as a generic function so that it can be reused to display different messgaes to the user +//Added the call back function pointer as the argument. + *******************************************************************************/ +void network_info_screen (T_MFW_HND win, USHORT MessageId, T_VOID_FUNC funt_ptr ) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION ("network_info_screen()"); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, MessageId, TxtNull, COLOUR_STATUS_NETWORKS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)funt_ptr, THREE_SECS, 0 ); + + info_dialog (win, &display_info); +} + + +/******************************************************************************* + + $Function: network_OPT_EDT_start + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +T_MFW_HND network_EDT_start (MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win; + T_MFW_HND parent_window = mfwParent(mfw_header()); + + TRACE_FUNCTION ("network_OPT_EDT_start()"); + + win = network_EDT_create (parent_window); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + return win; +} + +/******************************************************************************* + + $Function: network_OPT_EDT_create + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +static T_MFW_HND network_EDT_create(MfwHnd parent_window) +{ + T_network_OPT * data = (T_network_OPT *)ALLOC_MEMORY (sizeof (T_network_OPT)); + T_MFW_WIN * win; + + TRACE_FUNCTION ("network_EDT_create()"); + + /* + * Create window handler + */ + + data->win = win_create (parent_window, 0, 0, NULL); + + if (data->win EQ NULL) + { + return NULL; + } + + /* + * connect the dialog data to the MFW-window + */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)network_EDT_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->win)->data; + win->user = (void *)data; + data->parent = parent_window; + + /* + * return window handle + */ + + winShow(data->win); + return data->win; +} + + +/******************************************************************************* + + $Function: network_EDT_destroy + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_EDT_destroy(MfwHnd own_window) +{ + T_MFW_WIN * win_data; + T_network_OPT * data; + + + TRACE_FUNCTION ("networkT_EDT_destroy()"); + + if (own_window) + { + win_data = ((T_MFW_HDR *)own_window)->data; + data = (T_network_OPT *)win_data->user; + + if (data) + { + /* + * Delete WIN handler + */ + win_delete (data->win); + + /* + * Free Memory + */ + FREE_MEMORY ((void *)data, sizeof (T_network_OPT)); + } + else + { + TRACE_EVENT ("network_EDT_destroy() called twice"); + } + } +} + + +/******************************************************************************* + + $Function: network_EDT_exec_cb + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +void network_EDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_network_OPT * data = (T_network_OPT *)win_data->user; + /* T_MFW_HND * l_parent; */ /* Warning Correction */ + /* SHORT l_id; */ /* Warning Correction */ + /* int index; */ /* Warning Correction */ + + TRACE_FUNCTION ("network_EDT_exec_cb()"); + + switch (event) + { + case E_INIT: + /* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + AUI_edit_SetDefault(&data->editor_info); + AUI_edit_SetDisplay(&data->editor_info, ZONE_FULL_SK_TITLE, COLOUR_EDITOR_XX, EDITOR_FONT); + AUI_edit_SetEvents(&data->editor_info, value, TRUE, FOREVER, (T_AUI_EDIT_CB)network_EDT_editor_cb); + AUI_edit_SetTextStr(&data->editor_info, TxtSoftOK, TxtDelete, TxtMCCMNC, NULL); + AUI_edit_SetMode(&data->editor_info, 0, ED_CURSOR_UNDERLINE); + AUI_edit_SetAltTextStr(&data->editor_info, 5, TxtNull, TRUE, TxtSoftBack); + AUI_edit_SetBuffer(&data->editor_info, ATB_DCS_ASCII, (UBYTE *)data->buffer, 6); + + AUI_edit_Start(data->win, &data->editor_info); +#else /* NEW_EDITOR */ + data->editor_info.editor_attr.win.px = 6; + data->editor_info.editor_attr.win.py = /*12*/Mmi_layout_line(2); + data->editor_info.editor_attr.win.sx = /*80*/SCREEN_SIZE_X; + data->editor_info.editor_attr.win.sy = /*20 */Mmi_layout_line_height()*2; + data->editor_info.editor_attr.edtCol = COLOUR_EDITOR_XX; + data->editor_info.editor_attr.font = 0; + data->editor_info.editor_attr.mode = edtCurBar1; + data->editor_info.editor_attr.controls = 0; + data->editor_info.editor_attr.text = data->buffer; /* buffer to be edited */ + data->editor_info.editor_attr.size = 6; + data->editor_info.LeftSoftKey = TxtSoftOK; + data->editor_info.RightSoftKey = TxtDelete; + data->editor_info.TextId = TxtMCCMNC; + data->editor_info.Identifier = value; /* optional */ + data->editor_info.mode = DIGITS_MODE; + data->editor_info.Callback = (T_EDIT_CB)network_EDT_editor_cb; + data->editor_info.destroyEditor = TRUE; + data->editor_info.hide = FALSE; + data->editor_info.AlternateLeftSoftKey = TxtNull; + data->editor_info.TextString = NULL; + data->editor_info.min_enter = 5; + data->editor_info.timeout = FOREVER; + + /* create the dialog handler */ + editor_start(data->win, &data->editor_info); /* start the editor */ +#endif /* NEW_EDITOR */ + + + break; + case E_ABORT: + case E_EXIT: /* defaultreaction */ + network_EDT_destroy(data->win); + break; + default: + return; + } +} + + +/******************************************************************************* + + $Function: network_change_pref_plmn + + $Description: Populates the preffered plmn List. + + $Returns: + + $Arguments: + // xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851 +*******************************************************************************/ + void network_change_pref_plmn (T_MFW_HND win , USHORT identifier, UBYTE reason) +{ + + nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1); + +} +/******************************************************************************* + + $Function: network_EDT_editor_cb + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void network_EDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_network_OPT * data = (T_network_OPT *)win_data->user; + T_MFW_HND * l_parent; + T_MFW_PPLMN_MODE mode; + + TRACE_FUNCTION ("network_EDT_editor_cb()"); + + + l_parent = data->parent; + + switch(event) + { + case INFO_KCD_LEFT: + + mode = REPLACE_PREF_PLMN; /* Overwrite an existing entry at a given index */ + + //update now the pref. PLMN list + //Overwrite an existing entry + //(network_data.Listposition) "+1" because the zero is counted as well + nm_change_pref_plmn(mode, (network_data.Listposition) +1 , 0, (UBYTE*) data->buffer); + + // destroy the Editor + network_EDT_destroy(data->win); + // xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851 + //Added this info screen so that sim is updated by nm_change_pref_plmn with the new code + //before populating the new list with nm_pref_plmn_list + network_info_screen (win, TxtPleaseWait,(T_VOID_FUNC)network_change_pref_plmn); + // destroy the MENU + network_MNU_destroy(l_parent); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_HUP: + // destroy the Editor + network_EDT_destroy(data->win); + // destroy the MENU + network_MNU_destroy(l_parent); + + // Nov 02, 2005 REF: omaps00044855 Sumanth Kumar.C + // Solution: Free network_data.pplmn. + FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT)); + + break; + default: + break; + } + return; +} + +//x0pleela 30 May, 2007 DR: OMAPS00133201 +/******************************************************************************* + + $Function: nm_abort_network + + $Description: remove the searhing window dialog + + $Returns: + + $Arguments: + +*******************************************************************************/ +void nm_abort_network( void ) +{ + TRACE_FUNCTION ("nm_abort_network()"); + //destroy the searching window dialog + dialog_info_destroy (network_data.network_search_win); + network_data.network_search_win = 0; + network_data.aborted = TRUE; + + return; +} + + //x0012849: Jagannatha 01 June, 2006 ER: OMAPS00079607 -To Support AcC and Info numbers +/******************************************************************************* + + $Function: getRoamingStatus + + $Description: Returns the value of roaming_indicator. + + $Returns: TRUE or FALSE based on the roaming status. + + $Arguments: None. + +*******************************************************************************/ +#ifdef FF_CPHS +UBYTE getRoamingStatus() +{ + + return network_data.roaming_indicator; +} +#endif + +// June 02, 2006 DR: OMAPS00078005 x0021334 +// Descripton: Test for NITZ (Network Identity and Timezone) support - No New time was displayed +/******************************************************************************* + + $Function: nw_time_update_callback + + $Description: Call back function for network time update info dialog. + + $Returns: Result code + + $Arguments: + +*******************************************************************************/ +//Dec 13,2006 DR:OMAPS00098351 x0066814 - Added the FF_TIMEZONE flag +#ifdef FF_TIMEZONE +static int nw_time_update_callback(T_MFW_HND win, USHORT identifier, UBYTE reason) +{ + int res = MFW_EVENT_CONSUMED; // Result code to be returned by this function + + TRACE_FUNCTION("nw_time_update_callback()"); + + switch(reason) + { + case INFO_KCD_RIGHT: // Reject offer of network time updation + TRACE_EVENT("INFO_KCD_RIGHT"); + break; + + case INFO_KCD_LEFT: // Accept offer of network time/date updation + TRACE_EVENT("INFO_KCD_LEFT"); + + // Update RTC with new time info + mfw_td_set_time(&newTime); + + // Update RTC with new date info + mfw_td_set_date(&newDate); + + // Send IDLE_UPDATE event to force idle screen refresh + SEND_EVENT(idle_get_window(), IDLE_UPDATE, 0, 0); + break; + + case INFO_KCD_HUP: // Ignore offer of network time updation + TRACE_EVENT("INFO_KCD_HUP"); + // No further action required + break; + + default: + TRACE_EVENT_P1("Unexpected reason: %d", reason); + res = MFW_EVENT_REJECTED; + break; + } + + return res; +} +#endif + +//Feb 28,,2007 DR:OMAPS00098351 x0066814 + /******************************************************************************* + + $Function: settingsNITZ + + $Description: Settings the time update to On, Off or Automatic + + $Returns: + + $Arguments: + +*******************************************************************************/ +#ifdef FF_TIMEZONE +int settingsNITZ (T_MFW_MNU *menu, T_MFW_MNU_ITEM *i) +{ + + T_MFW_HND parent_win = mfwParent(mfw_header()); + int txtId = TxtAutomatic; + + switch(menu->lCursor[menu->level]) + { + case 0: + TRACE_EVENT("Menu option 0: Automatic"); + FFS_flashData.nitz_option=NitzAutomatic; + txtId = TxtAutomatic; + break; + + case 1: + TRACE_EVENT("Menu option 1: NITZOn"); + FFS_flashData.nitz_option=NitzOn; + txtId = TxtOn; + break; + + case 2: + TRACE_EVENT("Menu option 2: NITZOff"); + FFS_flashData.nitz_option=NitzOff; + txtId = TxtOff; + break; + + } + flash_write(); + bookShowInfoScreen(parent_win, txtId, TxtSelected, NULL,NULL,3000); + return MFW_EVENT_CONSUMED; +} +#endif