FreeCalypso > hg > fc-magnetite
diff src/ui3/bmi/MmiCPHS.c @ 420:e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 Jan 2018 03:09:00 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui3/bmi/MmiCPHS.c Sun Jan 21 03:09:00 2018 +0000 @@ -0,0 +1,3647 @@ +/******************************************************************************* + + 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: CPHS + $File: MmiCPHS.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 25/01/02 + +******************************************************************************** + + Description + + This module provides the CPHS functionality + + +******************************************************************************** + $History: MmiCall.c + Nov 27, 2006 OMAPS00098359 a0393213(R.Prabakar) + Description: CPHS 4.2 : Call Divert doesn't work properly for Line 2 + + Oct 11, 2006 REF:OMAPS00098287 x0039928 + Description : CPHS 4.2: MMI variable als_status is not updated proplery with the SIM contents. + Solution : als_status update is deffered until the idle screen is displayed. + + May 30, 2006 REF:OMAPS00079650 a0393213 (R.Prabakar) + Description : CPHS Call Forwarding feature implementation + Solution : As part of this implementation, E_CPHS_SET_DV_STAT and E_CPHS_GET_DV_STAT in cphs_mfw_cb() + are modified + + May 26, 2006 ER: OMAPS00079607 x0012849 :Jagannatha M + Description: CPHS: Display 'charge/Timers' menu based on AOC ( Advice of charge ) and support info numbers. + Solution:Made the following changes + 1. Aoc_flag variable is defined and it will be set based on the CSP information. + 2. New function info_num_msg_cb() added to support info numbers. + + May 30, 2006 DR: OMAPS00070657 x0pleela + Description: CPHS feature on Locosto-Lite + Solution: For ALS feature, + a) Defined a new macro "MAX_LINE_NAME_LEN" + b) Defined new structure "T_ALS_DATA" for editing Line 1 and 2 names + c) Defined new flag "Als_flag" to store the staus of ALS bit from CSP data + d) Added new functions cphs_Line_Edit_cb(), cphs_edit_line_exec_cb(), + cphs_edit_line_create(), cphs_edit_line1(), cphs_edit_line2(), + mmi_cphs_get_als_info(), mmi_cphs_get_als_info(), mmi_cphs_set_als_value(), + mmi_cphs_get_als_value(), mmi_get_als_selectedLine() + + 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. + + Aug 16, 2004 REF: CRR 24323 Deepa M.D + Bug:Clenup of sprintf used for tracing + Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX + + Jun 23, 2004 REF: CRR MMI-SPR-13599 Rashmi C N(Sasken) + Solution: The CF state is maintained in flash. During bootup the CF icon in the idle screen + is displayed depending upon its state in the ffs + + +// May 31, 2004 REF: CRR 17291 xvilliva +// Bug: After power cycle the setting of the used line which have been made +// from the BMI is lost. +// Fix: 1.The global g_pin2 is defined here. +// 2. sAT_PlusCLCK() is called while locking and unlocking ALS. +// 3. ALSPresent() is modified to call tAT_PercentALS() & qAT_PercentALS(). +// NOTE:- ALSPresent() was giving faulty status earlier. + + + 25/01/02 Original Condat(UK) BMI version. (MC) + + $End + +*******************************************************************************/ + + +/****************************************************************************** + + Include Files + +*******************************************************************************/ + +/* 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 "cus_aci.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_tim.h" +#include "mfw_phb.h" +#include "ksd.h" +#include "psa.h" +#include "mfw_sms.h" +#include "mfw_icn.h" +#include "mfw_mnu.h" +#include "mfw_lng.h" +#include "mfw_sat.h" +#include "mfw_kbd.h" +#include "mfw_nm.h" +#include "mfw_str.h" +#include "mfw_cphs.h" +#include "dspl.h" + +#include "MmiMain.h" +#include "MmiDummy.h" +#include "MmiMmi.h" +#include "MmiDialogs.h" +#include "MmiLists.h" +#include "MmiDialogs.h" +#include "MmiMenu.h" +#include "MmiSoftKeys.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 "MmiBookShared.h" +#include "mmiSmsMenu.h" +#include "Mmiicons.h" +#include "mmiColours.h" + +#include "MmiCPHS.h" +// Jun 23 2004 REF: CRR MMI-SPR-13599 Rashmi C N(Sasken) +#include "mfw_ffs.h" +/* SPR759 - SH */ +#ifdef MMI_HOMEZONE_ENABLED +#include "MmiHomezone.h" +#endif + +/* 30th May,2006 OMAPS00079650 a0393213 (R.Prabakar) + Description : CPHS Call Forwarding feature implementation*/ + +#include "MmiServices.h" +//x0pleela 08 June, 2006 DR:OMAPS00079607 +//Including this header file to get the definition of getRoamingStatus() +#ifdef FF_CPHS +#include "MmiNetwork.h" +#endif + + + +/****************************************************************************** + + Definitions + +*******************************************************************************/ +//#define CPHS_PROV_TEST /*Test to bypass the reading of the CPHS field from the SIM card*/ +char g_pin2[MAX_PIN+1];//xvilliva SPR17291 + +typedef enum + + +{ + INFO_NUM_LIST, + MAILBOX_LIST, + MAILBOX_LIST_CALL +} + T_MENU_TYPE; + + +static MfwMnuAttr InfoNum_menuAttrib = +{ + &melody_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_XX, TxtNull, NULL, MNUATTRSPARE + +}; + +typedef struct +{ + /* administrative data */ + + T_MMI_CONTROL mmi_control; + T_MFW_HND win; + T_MFW_HND parent_win; +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ +#else /* NEW_EDITOR */ + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + + /* associated handlers */ + + T_MFW_HND kbd; + T_MFW_HND kbd_long; + T_MFW_HND menu; + T_MFW_HND menu_tim; + UBYTE status_of_timer; /* use for the keypadlock */ + + T_MFW_HND mailbox_win; + T_MFW_CPHS_ENTRY cphs_voicemail_num; + T_MFW_CPHS_VC_STAT* cphs_voicemail_status; + T_MFW_CPHS_STATUS cphs_status; + T_MFW_CPHS_OP_NAME* operator_name; + +} T_MMI_CPHS_DATA; + + +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND numbers_win; /* MFW win handler */ + T_MFW_HND parent; + T_MFW_HND melody_handler; /* MFW sms handler */ + unsigned char local_status; + ListMenuData * menu_list_data; +} T_INFO_NUM_INFO; + +#ifdef FF_CPHS_REL4 +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND msp_win; /* MFW win handler */ + T_MFW_HND parent; + ListMenuData * menu_list_data; +} T_MSP_INFO; + +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND mwis_win; /* MFW win handler */ + T_MFW_HND parent; + ListMenuData * menu_list_data; +} T_MWIS_INFO; + +#endif + +//x0pleela 23 May, 2006 DR: OMAPS00070657 +#ifdef FF_CPHS +#define MAX_LINE_NAME_LEN (20+1) + +typedef struct +{ + /* administrative data */ + + T_MMI_CONTROL mmi_control; + T_MFW_HND win; + T_MFW_HND parent_win; + T_MFW_HND input_number_win; +#ifndef NEW_EDITOR + MfwEdtAttr edt_attr_name; +#endif /* NEW_EDITOR */ +UBYTE edt_buf_name[MAX_LINE_NAME_LEN]; +} T_ALS_DATA; + + +#endif + +#define E_INIT 1 + + + +#define CPHS_TELESERVICES_BYTE_VALUE 0x06 +#define ALS_MASK 0x80 + +#define CPHS_INFONUMS_BYTE_VALUE 0xC0 +#define INFONUM_MASK 0xFF + +//x0pleela 23 May, 2006 DR: OMAPS00070657 +#ifdef FF_CPHS +static UBYTE Als_flag; //Stores the status of ALS from CSP data +#endif + +#ifdef FF_CPHS_REL4 +static BOOL MSP_flag; +BOOL msp_register; +UBYTE msp_reg_profid; +UBYTE prof_sel; +BOOL interrogate= 0; +T_MFW_CPHS_MSP_INFO* msp_info; +BOOL mwis_flag = FALSE; +#endif + + + + +/****************************************************************************** + + Static Global variables + +*******************************************************************************/ + +static T_MFW_HND cphs_wait_dialog_win = NULL; +static T_DISPLAY_DATA mmi_cphs_wait_dialog_data = {0}; +static T_MFW_CPHS_ENTRY cphs_voicemail_num; +static T_MFW_CPHS_INFONUM_ENTRY current_info_num; +static T_MFW_CPHS_VC_NUM cphs_voicemail_numbers; +static T_MFW_CPHS_VC_STAT* cphs_voicemail_status; +static T_MFW_CPHS_STATUS cphs_status = CPHS_NotPresent; +static T_MFW_CPHS_OP_NAME operator_name; +static T_MFW_CPHS_DV_STAT call_forwarding_status; +#ifdef FF_CPHS_REL4 +T_MFW_CPHS_REL4_DV_STAT call_forwarding_status_rel4; +static T_MFW_CPHS_REL4_MBI cphs_rel4_mbi; /*used to cache mbi info-should be updated immediately whenever mbi changes*/ +static T_MFW_CPHS_REL4_MBDN cphs_rel4_mbdn; /*used to cache mbdn info-should be updated immediately whenever mbdn changes*/ +static T_MFW_HND mailbox_waiting_dialog; +static T_MFW_CPHS_REL4_MAILBOX_TYPE mailbox_type; /*used to store the mailbox type for which an action is performed*/ +#endif +static T_MFW_CPHS_CSP customer_service_profile; +static T_MFW_CPHS_INFONUM_LIST* info_numbers[4]= {NULL, NULL, NULL, NULL}; +// Oct 11, 2006 REF:OMAPS00098287 x0039928 +T_MFW_CPHS_ALS_STATUS als_status; +BOOL als_bootup; + +static UBYTE info_num_level; +static USHORT info_num_index; + +static T_MENU_TYPE type_of_list = INFO_NUM_LIST; + +/****************************************************************************** + + Function Prototypes + +*******************************************************************************/ +int InfoNumbers2(void); // RAVI + +int show_cphs_mb_number(T_MFW_CPHS_ENTRY* mb_number); +static void mailbox_edit_cb( T_MFW_HND win, USHORT Identifier,UBYTE reason); +static int cphs_win_cb (T_MFW_EVENT event, T_MFW_WIN * win); +#ifdef FF_CPHS_REL4 +static int msp_cb (T_MFW_EVENT event, T_MFW_WIN * win); +#endif +int cphs_mfw_cb(T_MFW_EVENT event, void* para); +void cphs_dialog_cb(T_MFW_HND win, USHORT e, SHORT identifier, void *parameter); +T_MFW_HND mmi_cphs_create(T_MFW_HND parent_window); +T_MFW_HND edit_mailbox_start(T_MFW_HND parent_window); + +static T_MFW_HND buildInfoNumberMenu( MfwHnd parent_window); +void info_num_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +void InfonumList_cb(T_MFW_HND * Parent, ListMenuData * ListData); +static void InfoNum_destroy(MfwHnd own_window); +static int info_num_win_cb (MfwEvt e, MfwWin *w) ; +void info_num_display_cb(T_MFW_HND win, USHORT identifier, UBYTE reason); +EXTERN void cphs_support_check(void); // ADDED BY RAVI - 29-11-2005 + +//x0pleela 23 May, 2006 DR:OMAPS00070657 +#ifdef FF_CPHS +void mmi_cphs_get_als_info( void ); + +/* x0045876, 14-Aug-2006 (WR - function declared implicitly)*/ +EXTERN void setAOCflag(int aocValue); +#endif + + + + +/****************************************************************************** + + Public functions + +*******************************************************************************/ +/******************************************************************************* + + $Function: mmi_cphs_init() + + $Description: initiatialise cphs module + + $Returns: mfw handle + + $Arguments: none + +*******************************************************************************/ +T_MFW_HND mmi_cphs_init() +{ + T_MFW_HND status; + + TRACE_FUNCTION("mmi_cphs_init()"); + cphs_init(); //initialise MFW CPHS module + + status = cphs_create(NULL, 0xFFFFF, cphs_mfw_cb); //create handler for MFW CPHS EVENTS + + info_num_level = 0; + info_num_index = 1; + + +#ifndef FF_CPHS_REL4 +#ifdef FF_CPHS +// Oct 11, 2006 REF:OMAPS00098287 x0039928 +// Fix: als update is done in idle_draw_main_idle +// mmi_cphs_get_als_info(); + als_bootup = TRUE; +#else + cphs_get_als_info(&als_status); +#endif +#endif + + return status; +} + +void mmi_cphs_refresh() +{ +//x0pleela 02 June, 2006 DR: OMAPS00079688 +//Initialising CPHS +#ifdef FF_CPHS + if (sAT_PercentCPHS(CMD_SRC_LCL,1) /* 1 => ACI_CPHS_INIT */ + NEQ AT_EXCT) + { + TRACE_ERROR("Abnormal error Not able to turn on CPHS in ACI"); + } +#endif + cphs_support_check(); //check if cphs supported + /*retrieval of other values set off by callback function cphs_mfw_cb + so when the CPHS status is retrieved, the operator name is then requested and + when it has returned, then the CSP is requested etc etec */ + +} +/******************************************************************************* + + $Function: cphs_E_plus_ALS_supported + + $Description: returns TRUE if SIM is from E-plus, FALSE otherwise + + $Returns: status BOOL + + $Arguments: none + +*******************************************************************************/ +BOOL cphs_E_plus_ALS_supported() +{ char IMSI[17]; + char MNC_MCC[6]; + char E_plus_MNC_MCC[] = "26203"; + int i=0; + T_ACI_RETURN result; +// char debug[40]; // RAVI + + result = qAT_PlusCIMI(CMD_SRC_LCL, IMSI); + while (result != AT_CMPL && i < 5) + { + i++; + } + + strncpy(MNC_MCC, IMSI, 5); + MNC_MCC[5] =0;//terminate string + TRACE_EVENT("E-plus IMSI?"); + TRACE_EVENT(MNC_MCC); + if (!strncmp(E_plus_MNC_MCC, MNC_MCC, 5)) //if e-plus IMSI + { + return TRUE; + + } + else + { TRACE_EVENT("Not e-plus IMSI"); + return FALSE; + } + +} +/******************************************************************************* + + $Function: cphs_als_status + + $Description: display which ALS line is enabled + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int cphs_als_status(MfwMnu* m, MfwMnuItem* i) +{ T_MFW_HND parent = mfwParent( mfw_header()); + UBYTE line; + line = GetAlsLine(); +#ifndef CPHS_PROV_TEST + if (CphsPresent() == TRUE || cphs_E_plus_ALS_supported()) +#endif + { + if (als_status.selectedLine != MFW_SERV_NotPresent) + switch(line) + { + case (MFW_SERV_LINE1): ShowMessage(parent, TxtLine1, TxtActivated);break; + case (MFW_SERV_LINE2): ShowMessage(parent, TxtLine2, TxtActivated);break; + default: ShowMessage(parent, TxtReadError, TxtNull);break; + } + else + ShowMessage(parent, TxtReadError, TxtNull); + } +#ifndef CPHS_PROV_TEST + else + ShowMessage(parent, TxtNotSupported, TxtNull); +#else + cphs_support_check(); +#endif + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: cphs_lock_als + + $Description: Lock ALS Line Selection from menu + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int cphs_lock_als(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND parent = mfwParent( mfw_header()); + T_MFW retVal; + + TRACE_FUNCTION("cphs_lock_als"); + +#ifndef CPHS_PROV_TEST + if (!ALSPresent(NULL, NULL, NULL)) +#endif + { + //xvilliva SPR17291 + //We call sAT_PlusCLCK(), to update the value in FFS. This is the value used by + //ACI to estabilish a call on Line1 or Line2. +#ifndef FF_2TO1_PS + /*a0393213 warnings removal - CLCK_FAC_Al changed to FAC_Al as a result of ACI enum change*/ + sAT_PlusCLCK(CMD_SRC_LCL,FAC_Al,CLCK_MOD_Lock,g_pin2, + ((als_status.selectedLine == MFW_SERV_LINE1) ? CLASS_Vce : CLASS_AuxVce));// +#endif + retVal = cphs_set_als_status(MFW_LINE_LOCKED); + //x0pleela 11 June, 2006 DR:OMAPS00079692 + //changed from CPHS_OK to MFW_CPHS_OK + if (retVal == MFW_CPHS_OK) + { + als_status.status = MFW_LINE_LOCKED; + ShowMessage(parent, TxtAlsLocked, TxtNull); + } + } +#ifndef CPHS_PROV_TEST + else + ShowMessage(parent, TxtNotSupported, TxtNull); +#endif + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: cphs_unlock_als + + $Description: Unlock ALS Line Selection from menu + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int cphs_unlock_als(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND parent = mfwParent( mfw_header()); + T_MFW retVal; + + TRACE_FUNCTION("cphs_unlock_als"); + +#ifndef CPHS_PROV_TEST + if (!ALSPresent(NULL, NULL, NULL)) +#endif + { + //xvilliva SPR17291 + //We call sAT_PlusCLCK(), to update the value in FFS. This is the value used by + //ACI to estabilish a call on Line1 or Line2. +#ifndef FF_2TO1_PS + /*a0393213 warnings removal - CLCK_FAC_Al changed to FAC_Al as a result of ACI enum change*/ + sAT_PlusCLCK(CMD_SRC_LCL,FAC_Al,CLCK_MOD_Unlock,g_pin2,((als_status.selectedLine == MFW_SERV_LINE1) ? CLASS_Vce : CLASS_AuxVce));// +#endif + retVal = cphs_set_als_status(MFW_LINE_UNLOCKED); + //x0pleela 11 June, 2006 DR:OMAPS00079692 + //changed from CPHS_OK to MFW_CPHS_OK + if (retVal == MFW_CPHS_OK) + { + als_status.status = MFW_LINE_UNLOCKED; + ShowMessage(parent, TxtAlsUnlocked, TxtNull); + } + } +#ifndef CPHS_PROV_TEST + else + ShowMessage(parent, TxtNotSupported, TxtNull); +#endif + + return MFW_EVENT_CONSUMED; +} + +#ifdef FF_CPHS_REL4 + +/******************************************************************************* + + $Function: item_flag_isMWISFilePresent + + $Description: return 0 if MWIS file is present else 1 + +*******************************************************************************/ +int item_flag_isMWISFilePresent(struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi) +{ + TRACE_FUNCTION("item_flag_isMBDNFilePresent"); + if(isMWISFilePresent()) + return 0; + else + return 1; +} + +/******************************************************************************* + + $Function: item_flag_isMBDNFileNotPresent + + $Description: return 1 if MBDN file is present else 0 + +*******************************************************************************/ +int item_flag_isMBDNFileNotPresent(struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi) +{ + TRACE_FUNCTION("item_flag_isMBDNFilePresent"); + if(isMBDNFilePresent()) + return 1; + else + return 0; +} +/******************************************************************************* + + $Function: item_flag_isMBDNFilePresent + + $Description: return 0 if MBDN file is present else 1 + +*******************************************************************************/ + +int item_flag_isMBDNFilePresent(struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi) +{ + TRACE_FUNCTION("item_flag_isMBDNFileNotPresent"); + if(isMBDNFilePresent()) + return 0; + else + return 1; +} + + +/******************************************************************************* + + $Function: mmi_msp_interrogate_done + + $Description: Interrogation is finished. + + $Returns: void + + $Arguments: void + +*******************************************************************************/ + +void mmi_msp_interrogate_done(void) +{ + TRACE_FUNCTION("mmi_msp_interrogate_done()"); + + /*a0393213 cphs rel4*/ + if(isCFISFilePresent()) + cphs_get_divert_status(); + + /*invalidate the local cache of mbi and mbdn*/ + cphs_rel4_mbi.valid=0x00; + cphs_rel4_mbdn.valid=0x00; +} + +/******************************************************************************* + + $Function: mmi_msp_interrogate + + $Description: Start MSP interrogation + + $Returns: void + + $Arguments: void + +*******************************************************************************/ + +void mmi_msp_interrogate(void) +{ + char actstr[8]; + TRACE_FUNCTION("mmi_msp_interrogate()"); + + interrogate = 1; + strcpy(actstr, "*#59#"); + ss_execute_transaction((UBYTE*)actstr, 0); +} + +/******************************************************************************* + + $Function: msp_cb + + $Description: Window event handler + + $Returns: status int + + $Arguments: event, window handler + +*******************************************************************************/ + +static int mwis_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */ +{ + TRACE_EVENT ("mwis_cb()"); + + switch (e) + { + case MfwWinVisible: /* window is visible */ + break; + case MfwWinFocussed: /* input focus / selected */ + case MfwWinDelete: /* window will be deleted */ + + default: + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: msp_cb + + $Description: Window event handler + + $Returns: status int + + $Arguments: event, window handler + +*******************************************************************************/ + +static int msp_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */ +{ + TRACE_EVENT ("msp_cb()"); + + switch (e) + { + case MfwWinVisible: /* window is visible */ + break; + case MfwWinFocussed: /* input focus / selected */ + case MfwWinDelete: /* window will be deleted */ + + default: + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: MSPPresent + + $Description: MSP is provisioned. + + $Returns: status USHORT + + $Arguments: menu tag, attribute, item tag + +*******************************************************************************/ + +USHORT MSPPresent( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) +{ + TRACE_EVENT_P1("MSPPresent - %d ", msp_info->count); + if(MSP_flag) + return 0; + else + return 1; +} + +/******************************************************************************* + + $Function: cphs_select_profile + + $Description: Select a profile for registration + + $Returns: void + + $Arguments: profile id + +*******************************************************************************/ + +void cphs_select_profile(int pf_id) +{ + char seq[6]; + + TRACE_EVENT_P1("cphs_select_profile - %d", pf_id); + strcpy(seq,"*59"); + switch(pf_id) + { + case 1: + strcat(seq,"1"); + break; + case 2: + strcat(seq,"2"); + break; + case 3: + strcat(seq,"3"); + break; + case 4: + strcat(seq,"4"); + break; + default: + break; + } + strcat(seq,"#"); + + msp_register = TRUE; + msp_reg_profid = pf_id; + sAT_Dn(CMD_SRC_LCL,seq,-1,-1,-1); +} + +/******************************************************************************* + + $Function: msp_menu_destroy + + $Description: Destroy menu + + $Returns: void + + $Arguments: window handler + +*******************************************************************************/ + +static void msp_menu_destroy(MfwHnd window) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)window)->data; + T_MSP_INFO * data = (T_MSP_INFO *)win_data->user; + + TRACE_FUNCTION ("msp_menu_destroy"); + + if (window == NULL) + { + return; + } + + if (data) + { + win_delete(data->msp_win); + + /* + ** Free Memory + */ + mfwFree((void *)data, sizeof (T_MSP_INFO)); + } +} + +/******************************************************************************* + + $Function: mwis_menu_destroy + + $Description: Destroy menu + + $Returns: void + + $Arguments: window handler + +*******************************************************************************/ + +static void mwis_menu_destroy(MfwHnd window) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)window)->data; + T_MWIS_INFO * data = (T_MWIS_INFO *)win_data->user; + + TRACE_FUNCTION ("mwis_menu_destroy"); + + if (window == NULL) + { + return; + } + + if (data) + { + win_delete(data->mwis_win); + + /* + ** Free Memory + */ + mfwFree((void *)data, sizeof (T_MWIS_INFO)); + } +} + +/******************************************************************************* + + $Function: MwisList_cb + + $Description: Callback for MWIS list + + $Returns: void + + $Arguments: parent window, list data + +*******************************************************************************/ + +void MwisList_cb(T_MFW_HND * Parent, ListMenuData * ListData) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)Parent)->data; + T_MWIS_INFO *data = (T_MWIS_INFO *)win_data->user; + TRACE_FUNCTION ("MwisList_cb()"); + + if ((ListData->Reason EQ LISTS_REASON_BACK) || + (ListData->Reason EQ LISTS_REASON_CLEAR) || + (ListData->Reason EQ LISTS_REASON_HANGUP)) + { + /* + ** Destroy the window --- Not sure if this is required! ... leave it out for now + */ + listsDestroy(ListData->win); + + /* + ** Free the memory set aside for ALL the devices to be listed. + */ + if (data->menu_list_data != NULL) + { + FREE_MEMORY ((void *)data->menu_list_data->List, (U16)(4 * sizeof (T_MFW_MNU_ITEM))); + FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData)); + } + + mwis_menu_destroy(data->mwis_win); + + } +} + +/******************************************************************************* + + $Function: mwis_exec_cb + + $Description: Dialog function to display the mwis list + + $Returns: void + + $Arguments: window handler, event, value and parameter + +*******************************************************************************/ + +void mwis_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_MWIS_INFO * data = (T_MWIS_INFO*)win_data->user; + T_MFW_CPHS_REL4_MWIS * mwis_ptr; + int i; + char temp[4][50]; + + switch (event) + { + case E_INIT: + + TRACE_EVENT(">>>> mwis_exec_cb() Event:E_INIT"); + + /* initialization of administrative data */ + + + data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData)); + + if(data->menu_list_data == 0) + { + TRACE_EVENT("Failed memory alloc 1 "); + return; + } + + data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( 4 * sizeof(T_MFW_MNU_ITEM) ); + + if(data->menu_list_data->List == 0) + { + TRACE_EVENT("Failed memory alloc 2"); + return; + } + + mwis_ptr = get_mwis_stat(prof_sel); + + sprintf(temp[0],"Voice Mesage - %d ", mwis_ptr->voicemail); + mnuInitDataItem(&data->menu_list_data->List[0]); + data->menu_list_data->List[0].flagFunc = item_flag_none; + data->menu_list_data->List[0].str = temp[0]; + + sprintf(temp[1],"Fax Message - %d ", mwis_ptr->fax); + mnuInitDataItem(&data->menu_list_data->List[1]); + data->menu_list_data->List[1].flagFunc = item_flag_none; + data->menu_list_data->List[1].str = temp[1]; + + sprintf(temp[2],"Electronic Message - %d ", mwis_ptr->electronic); + mnuInitDataItem(&data->menu_list_data->List[2]); + data->menu_list_data->List[2].flagFunc = item_flag_none; + data->menu_list_data->List[2].str = temp[2]; + + sprintf(temp[3],"Other Message - %d ", mwis_ptr->other); + mnuInitDataItem(&data->menu_list_data->List[3]); + data->menu_list_data->List[3].flagFunc = item_flag_none; + data->menu_list_data->List[3].str = temp[3]; + + data->menu_list_data->ListLength = 4; + data->menu_list_data->ListPosition = 0; + data->menu_list_data->CursorPosition = 0; + data->menu_list_data->SnapshotSize = 4; + data->menu_list_data->Font = 0; + data->menu_list_data->LeftSoftKey = TxtNull; + data->menu_list_data->RightSoftKey = TxtSoftBack; + data->menu_list_data->KeyEvents = KEY_RIGHT; + data->menu_list_data->Reason = 0; + data->menu_list_data->Strings = TRUE; + data->menu_list_data->Attr = &InfoNum_menuAttrib; + data->menu_list_data->autoDestroy = FALSE; + + /* Create the dynamic menu window */ + listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)MwisList_cb,0); + + break; + default: + break; + } + +} + +/******************************************************************************* + + $Function: mmi_build_mwis_menu + + $Description: Create mwis menu + + $Returns: window handler + + $Arguments: parent window handler + +*******************************************************************************/ + +static T_MFW_HND mmi_build_mwis_menu( MfwHnd parent_window) +{ + T_MWIS_INFO * data = (T_MWIS_INFO *)ALLOC_MEMORY (sizeof (T_MWIS_INFO)); + T_MFW_WIN * win; + TRACE_FUNCTION("mmi_build_mwis_menu"); + + /* + * Create window handler + */ + + data->mwis_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mwis_cb); + if (data->mwis_win EQ NULL) + { + return NULL; + } + + TRACE_EVENT(">>>> mwis menu window created: " ); + /* + * connect the dialog data to the MFW-window + */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)mwis_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->mwis_win)->data; + win->user = (void *)data; + data->parent = parent_window; + winShow(data->mwis_win); + /* + * return window handle + */ + + return data->mwis_win; +} + + +/******************************************************************************* + + $Function: MspList_cb + + $Description: Callback for MSP list + + $Returns: void + + $Arguments: parent window, list data + +*******************************************************************************/ + +void MspList_cb(T_MFW_HND * Parent, ListMenuData * ListData) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)Parent)->data; + T_MSP_INFO *data = (T_MSP_INFO *)win_data->user; + TRACE_FUNCTION ("MspList_cb()"); + + if ((ListData->Reason EQ LISTS_REASON_BACK) || + (ListData->Reason EQ LISTS_REASON_CLEAR) || + (ListData->Reason EQ LISTS_REASON_HANGUP)) + { + /* + ** Destroy the window --- Not sure if this is required! ... leave it out for now + */ + listsDestroy(ListData->win); + + /* + ** Free the memory set aside for ALL the devices to be listed. + */ + if (data->menu_list_data != NULL) + { + FREE_MEMORY ((void *)data->menu_list_data->List, (U16)(msp_info->count * sizeof (T_MFW_MNU_ITEM))); + FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData)); + } + + msp_menu_destroy(data->msp_win); + mwis_flag = FALSE; + } + else if(ListData->Reason EQ LISTS_REASON_SELECT) + { + TRACE_EVENT_P1("list position is %d",ListData->ListPosition); + if(mwis_flag == FALSE) + cphs_select_profile(ListData->ListPosition); + else + { + T_MFW_HND win; + T_MFW_HND parent_win = mfw_parent(mfw_header()); + + TRACE_FUNCTION("build_mwis_list()"); + + mwis_flag = TRUE; + prof_sel = ListData->ListPosition; + win = mmi_build_mwis_menu(parent_win); + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + } + } +} + + +/******************************************************************************* + + $Function: msp_exec_cb + + $Description: Dialog function to display the msp list + + $Returns: void + + $Arguments: window handler, event, value and parameter + +*******************************************************************************/ + +void msp_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_MSP_INFO* data = (T_MSP_INFO*)win_data->user; + int i; + + switch (event) + { + case E_INIT: + + TRACE_EVENT(">>>> msp_exec_cb() Event:E_INIT"); + + /* initialization of administrative data */ + + + data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData)); + + if(data->menu_list_data == 0) + { + TRACE_EVENT("Failed memory alloc 1 "); + return; + } + + data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( msp_info->count * sizeof(T_MFW_MNU_ITEM) ); + + if(data->menu_list_data->List == 0) + { + TRACE_EVENT("Failed memory alloc 2"); + return; + } + + for (i = 0; i < msp_info->count; i++) + { + mnuInitDataItem(&data->menu_list_data->List[i]); + data->menu_list_data->List[i].flagFunc = item_flag_none; + data->menu_list_data->List[i].str = (char *)msp_info->profile[i].alpha; + } + + data->menu_list_data->ListLength =msp_info->count; + data->menu_list_data->ListPosition = 1; + data->menu_list_data->CursorPosition = 1; + data->menu_list_data->SnapshotSize = msp_info->count; + data->menu_list_data->Font = 0; + data->menu_list_data->LeftSoftKey = TxtSoftSelect; + data->menu_list_data->RightSoftKey = TxtSoftBack; + data->menu_list_data->KeyEvents = KEY_ALL; + data->menu_list_data->Reason = 0; + data->menu_list_data->Strings = TRUE; + data->menu_list_data->Attr = &InfoNum_menuAttrib; + data->menu_list_data->autoDestroy = FALSE; + + /* Create the dynamic menu window */ + listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)MspList_cb,0); + + break; + default: + break; + } + +} + + +/******************************************************************************* + + $Function: mmi_build_msp_menu + + $Description: Create MSP menu + + $Returns: window handler + + $Arguments: parent window handler + +*******************************************************************************/ + +static T_MFW_HND mmi_build_msp_menu( MfwHnd parent_window) +{ + T_MSP_INFO * data = (T_MSP_INFO *)ALLOC_MEMORY (sizeof (T_MSP_INFO)); + T_MFW_WIN * win; + TRACE_FUNCTION("mmi_build_msp_menu"); + + /* + * Create window handler + */ + + data->msp_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)msp_cb); + if (data->msp_win EQ NULL) + { + return NULL; + } + + TRACE_EVENT(">>>> msp menu window created: " ); + /* + * connect the dialog data to the MFW-window + */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)msp_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->msp_win)->data; + win->user = (void *)data; + data->parent = parent_window; + winShow(data->msp_win); + /* + * return window handle + */ + + return data->msp_win; +} + +/******************************************************************************* + + $Function: build_profile_list + + $Description: generate profile list + + $Returns: status int + + $Arguments: menu, menu item + +*******************************************************************************/ + +int build_profile_list(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win; + T_MFW_HND parent_win = mfw_parent(mfw_header()); + + TRACE_FUNCTION("build_profile_list()"); + + win = mmi_build_msp_menu(parent_win); + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + return MFW_EVENT_CONSUMED; +} + +int build_profile_list1(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win; + T_MFW_HND parent_win = mfw_parent(mfw_header()); + + TRACE_FUNCTION("build_profile_list()"); + + mwis_flag = TRUE; + + win = mmi_build_msp_menu(parent_win); + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + return MFW_EVENT_CONSUMED; +} + +#endif +/******************************************************************************* + + $Function: cphs_line1_select + + $Description: Enable ALS Line1 from menu + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int cphs_line1_select(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND parent = mfwParent( mfw_header()); + TRACE_FUNCTION("cphs_line1_select"); +#ifndef CPHS_PROV_TEST + if (!ALSPresent(NULL, NULL, NULL)) +#endif + { cphs_select_line(MFW_SERV_LINE1); + /*cphs_get_divert_status();*//*a0393213 - the call forward icon is now shown taking both the lines into consideration*/ + } +#ifndef CPHS_PROV_TEST + else + ShowMessage(parent, TxtNotSupported, TxtNull); +#endif + return MFW_EVENT_CONSUMED; +} +/******************************************************************************* + + $Function: cphs_line2_select + + $Description: Enable ALS Line2 from menu + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int cphs_line2_select(MfwMnu* m, MfwMnuItem* i) +{ + + T_MFW_HND parent = mfwParent( mfw_header()); + TRACE_FUNCTION("cphs_line2_select"); +#ifndef CPHS_PROV_TEST + if (!ALSPresent(NULL, NULL, NULL)) +#endif + { + cphs_select_line(MFW_SERV_LINE2); + /*cphs_get_divert_status();*//*a0393213 - the call forward icon is now shown taking both the lines into consideration*/ + } +#ifndef CPHS_PROV_TEST + else + ShowMessage(parent, TxtNotSupported, TxtNull); +#endif + return MFW_EVENT_CONSUMED; +} + +//x0pleela 23 May, 2006 DR: OMAPS00070657 +#ifdef FF_CPHS +/******************************************************************************* + + $Function: cphs_Line_Edit_cb + + $Description: Callback function for Line rename editor + + $Returns: none + + $Arguments: win - current window + Identifier - unique id + reason - event cause +*******************************************************************************/ + +static void cphs_Line_Edit_cb(T_MFW_HND win, USHORT Identifier, SHORT reason) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_ALS_DATA* data = (T_ALS_DATA *)win_data->user; + T_DISPLAY_DATA display_info; + +switch (reason) + { + case INFO_KCD_ALTERNATELEFT: + case INFO_KCD_LEFT: + { + if( Identifier == LINE1 ) + strcpy(FFS_flashData.line1,(char *)data->edt_buf_name); + else + strcpy(FFS_flashData.line2,(char *)data->edt_buf_name); + + flash_write(); + + + dlg_initDisplayData_TextId(&display_info, TxtNull, TxtNull, TxtDone, TxtNull, COLOUR_STATUS_WELCOME); + + dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_ALL ); + + info_dialog(win,&display_info); + + #ifdef NEW_EDITOR + AUI_edit_Destroy(data->input_number_win); + #else /* NEW_EDITOR */ + editor_destroy(data->input_number_win); + #endif /* NEW_EDITOR */ + data->input_number_win = 0; + //dspl_ClearAll(); + + + winDelete(win); + } + break; + case INFO_KCD_RIGHT: + case INFO_KCD_HUP: + { + /* SPR#1428 - SH - New Editor changes */ + #ifdef NEW_EDITOR + AUI_edit_Destroy(data->input_number_win); + #else /* NEW_EDITOR */ + editor_destroy(data->input_number_win); + #endif /* NEW_EDITOR */ + data->input_number_win = 0; + //dspl_ClearAll(); + winDelete(win); + + } + break; + + default: + TRACE_EVENT("Err: Default"); + break; + + + } +} + +static void cphs_edit_line_exec_cb(T_MFW_HND win, USHORT event, SHORT identifier, void *parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_ALS_DATA* data = (T_ALS_DATA *)win_data->user; +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ +#else + T_EDITOR_DATA editor_data; +#endif + if( identifier==LINE1 ) + strcpy((char *) data->edt_buf_name,(char*)MmiRsrcGetText(TxtLine1)); + else + strcpy((char *) data->edt_buf_name,(char*)MmiRsrcGetText(TxtLine2)); + + TRACE_FUNCTION ("cphs_edit_line_exec_cb()"); + + switch (event) + { + case E_INIT: + + #ifdef NEW_EDITOR + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetDisplay(&editor_data, PHNO_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, identifier, FALSE, FOREVER, (T_AUI_EDIT_CB)cphs_Line_Edit_cb); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, NULL); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtSoftOK, TRUE, TxtSoftBack); + AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA, ED_CURSOR_NONE); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII,(UBYTE *) data->edt_buf_name, MAX_LINE_NAME_LEN); + data->input_number_win=AUI_edit_Start(data->win, &editor_data); +#else /* NEW_EDITOR */ + + SmsSend_loadEditDefault(&editor_data); + + bookSetEditAttributes( PHNO_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, + (char *) data->edt_data.NumberBuffer, /*MAX_SEARCH_CHAR*/NUMBER_LENGTH, &editor_data.editor_attr); + editor_data.editor_attr.text = (char *)data->edt_buf_name; + + editor_data.editor_attr.size = MAX_LINE_NAME_LEN; + + editor_data.TextId = TxtNull; + editor_data.LeftSoftKey = TxtSoftOK; + editor_data.AlternateLeftSoftKey = TxtSoftOK; + editor_data.RightSoftKey = TxtDelete; + editor_data.Identifier = identifier ; + editor_data.mode = E_EDIT_DIGITS_MODE; + editor_data.Callback = (T_EDIT_CB)cphs_Line_Edit_cb; + editor_data.destroyEditor = FALSE; + data->input_number_win =editor_start(data->win, &editor_data); /* start the editor */ + + + /* SPR#1428 - SH - New Editor changes */ + +#endif + + break; + default: + TRACE_EVENT("Err: Default"); + break; + } +} + +/******************************************************************************* + + $Function: cphs_edit_line_create + + $Description: Create a window for entering the text + + $Returns: window handle + + $Arguments: parent_window - parent window. + +*******************************************************************************/ + + +static T_MFW_HND cphs_edit_line_create(MfwHnd parent_window) +{ + T_ALS_DATA* data = (T_ALS_DATA *)ALLOC_MEMORY (sizeof (T_ALS_DATA)); + T_MFW_WIN * win; + + TRACE_FUNCTION ("cphs_edit_line_create()"); + + // Create window handler + data->win = win_create (parent_window, 0, E_WIN_VISIBLE, NULL); + if (data->win EQ NULL) + { + return NULL; + } + + // connect the dialog data to the MFW-window + data->mmi_control.dialog = (T_DIALOG_FUNC)cphs_edit_line_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->win)->data; + win->user = (MfwUserDataPtr)data; + data->parent_win = parent_window; + + winShow(data->win); + return data->win; +} + +/******************************************************************************* + + $Function: cphs_edit_line1 + + $Description: edit line name from menu + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int cphs_edit_line1(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND parent_win = mfw_parent(mfw_header()); + T_MFW_HND win = cphs_edit_line_create(parent_win); + SEND_EVENT(win,E_INIT,LINE1,0); + /* a0393213 (WR - missing return statement at end of non-void function "cphs_edit_line1")*/ + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: cphs_edit_line2 + + $Description: edit line name from menu + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int cphs_edit_line2(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND parent_win = mfw_parent(mfw_header()); + T_MFW_HND win = cphs_edit_line_create(parent_win); + SEND_EVENT(win,E_INIT,LINE2,0); + /* a0393213 (WR - missing return statement at end of non-void function "cphs_edit_line2")*/ + return MFW_EVENT_CONSUMED; +} +#endif /*FF_CPHS*/ + +/******************************************************************************* + + $Function: menu_cphs_call_mailbox_number + + $Description: edit mailbox numbers from menu + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int menu_cphs_call_mailbox_number(MfwMnu* m, MfwMnuItem* i) +{ T_MFW_HND parent = mfwParent( mfw_header()); + T_MFW_CPHS_INFO configuration; + + TRACE_FUNCTION("menu_cphs_call_mailbox_number"); + + type_of_list = MAILBOX_LIST_CALL; + cphs_config(&configuration); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2( "CPHS? %d Mailbox config info: %d", configuration.mbNum, CphsPresent()); + /***************************Go-lite Optimization changes end***********************/ + if (CphsMailboxPresent()==TRUE ) + cphs_get_mailbox(); + else + M_callVoice(m, i); + return MFW_EVENT_CONSUMED; +} +/******************************************************************************* + + $Function: menu_cphs_edit_mailbox_number + + $Description: edit mailbox numbers from menu + + $Returns: status int + + $Arguments: menu, tag (not used) + +*******************************************************************************/ +int menu_cphs_edit_mailbox_number(MfwMnu* m, MfwMnuItem* i) +{ T_MFW_HND parent = mfwParent( mfw_header()); + T_MFW_CPHS_INFO configuration; + + TRACE_FUNCTION("menu_cphs_edit_mailbox_number"); + type_of_list = MAILBOX_LIST; + + cphs_config(&configuration); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2( "CPHS? %d Mailbox config info: %d", configuration.mbNum, CphsPresent()); + /***************************Go-lite Optimization changes end***********************/ + if (CphsMailboxPresent()==TRUE ) + cphs_get_mailbox(); + else + M_exeVoice(m, i); + return MFW_EVENT_CONSUMED; +} + + +#ifdef FF_CPHS_REL4 +/******************************************************************************* + + $Function: menu_cphs_rel4_show_mailbox_number + + $Description: menu handler function for any item in MailBox menu + +*******************************************************************************/ +int menu_cphs_rel4_show_mailbox_number(MfwMnu* m, MfwMnuItem* i) +{ + if(cphs_rel4_mbi.valid==1) + { + /*already cached - no need to read SIM*/ + sendCPHSSignal(E_CPHS_REL4_GET_MBI,&cphs_rel4_mbi ); + } + else + { + /*local copy not valid - read from SIM*/ + UBYTE msp_id=mfw_cphs_get_reg_profile(); + T_DISPLAY_DATA display_info; + TRACE_FUNCTION("menu_cphs_rel4_show_mailbox_number"); + switch (m->lCursor[m->level]) + { + case 0: + TRACE_EVENT("voice selected"); + mailbox_type=T_MFW_CPHS_REL4_MAILBOX_VOICE; + break; + case 1: + TRACE_EVENT("fax selected"); + mailbox_type=T_MFW_CPHS_REL4_MAILBOX_FAX; + break; + case 2: + TRACE_EVENT("electronic selected"); + mailbox_type=T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC; + break; + case 3: + TRACE_EVENT("other selected"); + mailbox_type=T_MFW_CPHS_REL4_MAILBOX_OTHER; + break; + default: + TRACE_ERROR("menu index out of range"); + break; + } + qAT_PercentMBI(CMD_SRC_LCL,msp_id); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS_WAIT); + dlg_initDisplayData_events( &display_info, NULL, FOREVER, 0 ); + + mailbox_waiting_dialog=info_dialog (mfw_parent(mfwFocus), &display_info); + + } +} +#endif +/******************************************************************************* + + $Function: InfoNumbers + + $Description: displays information number list from CPHS + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int InfoNumbers( MfwMnu *m, MfwMnuItem *i ) +{ + T_MFW_HND win; + T_MFW_HND parent_win = mfw_parent(mfw_header()); + T_MFW_CPHS_INFO config_info; + + cphs_config(&config_info); + /***************************Go-lite Optimization changes Start***********************/ +//Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("Info Num config info: %d", config_info.iNum); + /***************************Go-lite Optimization changes end***********************/ + if (CphsPresent() && config_info.iNum&0x03) + { if (info_numbers[0] != NULL&& info_numbers[0]->count != 0) + { type_of_list = INFO_NUM_LIST; + info_num_level = 1; + win = buildInfoNumberMenu(parent_win); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + } + else + ShowMessage(parent_win, TxtEmptyList, TxtNull); + } + else + ShowMessage(parent_win, TxtNotSupported, TxtNull); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: CphsRequestOperatorName() + + $Description: returns operator name data structure from CPHS SIM data + + $Returns: see above + + $Arguments: none + +*******************************************************************************/ +T_MFW_CPHS_OP_NAME* CphsRequestOperatorName() +{ + return &operator_name; +} + +/******************************************************************************* + + $Function: CphsPresent() + + $Description: indicates whether CPHS sim or not + + $Returns: TRUE if it is, FALSe if it isn't + $Arguments: none + +*******************************************************************************/ +UBYTE CphsPresent() +{ + //x0pleela 11 June, 2006 DR:OMAPS00079692 + //changed from CPHS_OK to MFW_CPHS_OK + if (cphs_status == MFW_CPHS_OK) + return TRUE; + else + { if (cphs_status == CPHS_NotPresent) + return FALSE; + else /*MC 21/05/02, CONQ5999->6007 Helps diagnose initialisation probs*/ + return CPHS_ERR; + } +} +/******************************************************************************* + + $Function: CphsMailboxPresent + + $Description: indicates whether a CPHS SIM which supports mailbox numbers + + $Returns: TRUE if it is, FALSe if it isn't + $Arguments: none + +*******************************************************************************/ +USHORT CphsMailboxPresent( /*struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi*/ ) +{ T_MFW_CPHS_INFO config_info; + + TRACE_FUNCTION("CphsMailboxPresent"); + cphs_config(&config_info); + + if (config_info.mbNum &0x03 && CphsPresent()) + return /*0*/TRUE; + else + return /*1*/FALSE; + +} +/******************************************************************************* + + $Function: ALSPresent + + $Description: indicates whether a CPHS SIM supports ALS by checking CSP + + $Returns: 0 if it does, 1 if it doesn't + $Arguments: menu tag, menu attribute tag, menu item tag (none of them used, + this is merely the format for menu display/suppression functions) + +*******************************************************************************/ +USHORT ALSPresent( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) +{ + //xvilliva SPR17291 - The pre-existing code was returning ALS not supported + // even if it the SIM supported. Changed the code to call + // tAT_PercentALS() and qAT_PercentALS(). + +#ifndef FF_CPHS + T_ACI_ALS_MOD ALSmode = (T_ACI_ALS_MOD)0; // RAVI +#endif + +//x0pleela 23 May, 2006 DR: OMAP00070657 +//Returning the status of ALS based on CSP data +#ifdef FF_CPHS + if( mmi_cphs_get_als_value() ) + return 0; + else + return 1; +#else + + tAT_PercentALS( CMD_SRC_NONE, &ALSmode ); + qAT_PercentALS( CMD_SRC_NONE, &ALSmode ); + + // ALSmode = 1;//xvilliva SPR17291 - IMP: Hardcoded for our SIMS - got to test on ALS sim. + + return (!ALSmode);//returns 0 (if line1 or line2) returns 1 if not supported. +#endif +} + +/******************************************************************************* + + $Function: CphsALSUnlocked + + $Description: Indicates whether a CPHS SIM's support of ALS has been locked by the User + + $Returns: 0 if it hasn't, 1 if it has + $Arguments: menu tag, menu attribute tag, menu item tag (none of them used, + this is merely the format for menu display/suppression functions) + +*******************************************************************************/ +USHORT CphsALSUnlocked( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) +{ + USHORT retVal = CphsALSLocked(m, ma, mi); + + if (retVal == 0) + retVal = 1; + else + retVal = 0; + + return (retVal); +} +/******************************************************************************* + + $Function: CphsALSUnlocked + + $Description: Indicates whether a CPHS SIM's support of ALS has been locked by the User + + $Returns: 0 if it has, 1 if it hasn't + $Arguments: menu tag, menu attribute tag, menu item tag (none of them used, + this is merely the format for menu display/suppression functions) + +*******************************************************************************/ +USHORT CphsALSLocked( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) +{ + USHORT retVal; + + if (als_status.status == MFW_LINE_LOCKED) + retVal = 0; + else + retVal = 1; + + return (retVal); +} +/******************************************************************************* + + $Function: InfoNumbersPresent + + $Description: indicates whether a CPHS SIM has Info Numbers by checking CSP + + $Returns: 0 if it does, 1 if it doesn't + $Arguments: none + +*******************************************************************************/ +USHORT InfoNumbersPresent( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) +{ T_MFW_CPHS_INFO config_info; + + int i,len; + cphs_config(&config_info); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("InfoNum config: %d", config_info.iNum); + /***************************Go-lite Optimization changes end***********************/ + len = strlen((char*)customer_service_profile.csp); /* x0039928 - Lint warning fix */ + for(i=0; i<len; i+=2) + { + if (customer_service_profile.csp[i] ==CPHS_INFONUMS_BYTE_VALUE) + if (customer_service_profile.csp[(i+1)] & INFONUM_MASK) + return 0; //ALS is supported + } + return 1; +} +/******************************************************************************* + + $Function: GetCphsVoicemailStatus + + $Description: Asks MFW to check voicemail status on CPHS SIM + cphs_mfw_cb handles callback from this + $Returns: status of line passed as parameter + $Arguments: line + +*******************************************************************************/ +T_MFW_CFLAG_STATUS GetCphsVoicemailStatus(UBYTE line) +{ + cphs_get_mailbox_status (); + TRACE_EVENT("Requesting voicemail status"); + + /*SPR 2653, removed unneccessary code*/ + /*requesting the mailbox status will trigger an event from the MFW if + CPHS is supported and that event will cause a voicemail indication window if a + voicemail flag has been set in the SIM*/ + return MFW_CFLAG_NotPresent; + + +} +/******************************************************************************* + + $Function: GetCphsDivertStatus + + $Description: get call forwarding status of specified line + cphs_mfw_cb handles callback from this + $Returns: status of line passed as parameter + $Arguments: line + +*******************************************************************************/ + +T_MFW_CFLAG_STATUS GetCphsDivertStatus(UBYTE line) +{ + switch (line) + { + case MFW_SERV_LINE1: return call_forwarding_status.line1; //break; // RAVI + case MFW_SERV_LINE2: return call_forwarding_status.line2; // break; // RAVI + case MFW_SERV_FAX: return call_forwarding_status.fax; // break; // RAVI + case MFW_SERV_DATA: return call_forwarding_status.data; // break; // RAVI + default: return MFW_CFLAG_NotPresent; + } +} + +/******************************************************************************* + + $Function: GetCphsRel4DivertStatus + + $Description: get current call forwarding status + $Arguments: none + +*******************************************************************************/ +#ifdef FF_CPHS_REL4 +T_MFW_CPHS_REL4_DV_STAT GetCphsRel4DivertStatus() +{ + TRACE_FUNCTION("GetCphsRel4DivertStatus()"); + return call_forwarding_status_rel4; +} + + +/******************************************************************************* + + $Function: isCFISFilePresent + + $Description: says whether the file is allocated and activated or not + $Arguments: none + $Returns : TRUE - if present + FALSE - if absent + +*******************************************************************************/ +BOOL isCFISFilePresent() +{ + TRACE_FUNCTION("isCFISFilePresent()"); + if(sim_serv_table_check((UBYTE)SRV_No_55) == ALLOCATED_AND_ACTIVATED) + { + TRACE_EVENT("CFIS PRESENT"); + TRUE; + } + else + { + TRACE_EVENT("CFIS NOT PRESENT"); + FALSE; + } +} + +/******************************************************************************* + + $Function: isMWISFilePresent + + $Description: says whether the file is allocated and activated or not + $Arguments: none + $Returns : TRUE - if present + FALSE - if absent + +*******************************************************************************/ +BOOL isMWISFilePresent(void) +{ + TRACE_FUNCTION("isMWISFilePresent()"); + if(sim_serv_table_check((UBYTE)SRV_No_54) == ALLOCATED_AND_ACTIVATED) + { + TRACE_EVENT("MWIS PRESENT"); + TRUE; + } + else + { + TRACE_EVENT("MWIS NOT PRESENT"); + FALSE; + } + +} + +/******************************************************************************* + + $Function: isMBDNFilePresent + + $Description: says whether the file is allocated and activated or not + $Arguments: none + $Returns : TRUE - if present + FALSE - if absent + +*******************************************************************************/ +BOOL isMBDNFilePresent(void) +{ + TRACE_FUNCTION("isMWISFilePresent()"); + if(sim_serv_table_check((UBYTE)SRV_No_53) == ALLOCATED_AND_ACTIVATED) + { + TRACE_EVENT("MBDN PRESENT"); + TRUE; + } + else + { + TRACE_EVENT("MBDN NOT PRESENT"); + FALSE; + } + +} +#endif + +/******************************************************************************* + + $Function: GetAlsLine + $Description: gets current als line + $Returns: current als line + $Arguments: line + +*******************************************************************************/ +UBYTE GetAlsLine() +{ + return als_status.selectedLine; +} + +/******************************************************************************* + + $Function: ShowMessage + $Description: Displays screen with passed text ids + $Returns: nothing + $Arguments: parent window, 2 text ids + +*******************************************************************************/ +void ShowMessage(T_MFW_HND win, USHORT TextId1, USHORT TextId2) +{ + + T_DISPLAY_DATA Dialog; + + /* Initialise the dialog control block with default information + */ + dlg_initDisplayData_TextId( &Dialog, TxtNull, TxtNull, TextId1, TextId2 , COLOUR_STATUS); + dlg_initDisplayData_events( &Dialog, NULL, THREE_SECS, KEY_LEFT| KEY_RIGHT|KEY_CLEAR ); + + /* Show the dialog + */ + info_dialog( win, &Dialog ); +} + + +/******************************************************************************* + + $Function: mmi_cphs_wait_dialog + $Description: Displays the "Pls. wait" Dialog + $Returns: Nothing + $Arguments: parent window + +*******************************************************************************/ +void mmi_cphs_wait_dialog(T_MFW_HND win) +{ + + cphs_wait_dialog_win = NULL; + memset( (void *)&mmi_cphs_wait_dialog_data, 0, sizeof(T_DISPLAY_DATA) ); + + /* Initialise the dialog control block with default information + */ + dlg_initDisplayData_TextId( &mmi_cphs_wait_dialog_data, TxtNull, TxtNull, TxtPleaseWait, NULL , COLOUR_STATUS); + dlg_initDisplayData_events( &mmi_cphs_wait_dialog_data, NULL, FOREVER, KEY_MAX ); + + /* Show the dialog */ + cphs_wait_dialog_win = info_dialog( win, &mmi_cphs_wait_dialog_data ); +} + + +/******************************************************************************* + + $Function: mmi_cphs_wait_dialog_destroy + $Description: Deletes the "Pls. wait" Dialog + $Returns: Nothing + $Arguments: None + +*******************************************************************************/ +void mmi_cphs_wait_dialog_destroy(void) +{ + if ( cphs_wait_dialog_win != NULL ) + { + SEND_EVENT( cphs_wait_dialog_win, DIALOG_DESTROY, 0, &mmi_cphs_wait_dialog_data ); + } + + cphs_wait_dialog_win = NULL; + memset( (void *)&mmi_cphs_wait_dialog_data, 0, sizeof(T_DISPLAY_DATA) ); +} + + +/****************************************************************************** + + Private functions + +*******************************************************************************/ + +T_MFW_HND edit_mailbox_start(T_MFW_HND parent_window) +{ + T_MFW_HND win = mmi_cphs_create(parent_window); + TRACE_FUNCTION("calc_start()"); + if (win NEQ NULL) + { + SEND_EVENT(win, MAILBOX, NULL, NULL); + + } + + return win; +} + + + + + +T_MFW_HND mmi_cphs_create(T_MFW_HND parent) +{ T_MMI_CPHS_DATA * data = (T_MMI_CPHS_DATA *)ALLOC_MEMORY (sizeof (T_MMI_CPHS_DATA )); + T_MFW_WIN * mailbox_win; + + if (data EQ NULL) + { + return NULL; + } + + // Create window handler + data->mailbox_win = win_create (parent, 0, E_WIN_VISIBLE, (MfwCb)cphs_win_cb); + if (data->mailbox_win EQ NULL) + { + + return NULL; + } + // connect the dialog data to the MFW-window + data->mmi_control.dialog = (T_DIALOG_FUNC)cphs_dialog_cb; + data->mmi_control.data = data; + mailbox_win = ((T_MFW_HDR *)data->mailbox_win)->data; + mailbox_win->user = (void *)data; + data->parent_win = parent; + data->win = mailbox_win; + return data->mailbox_win; + +} + +void mailbox_destroy(MfwHnd own_window) +{ + T_MFW_WIN * win_data; + T_MMI_CPHS_DATA * data = NULL; + + if (own_window) + { + + win_data = ((T_MFW_HDR *)own_window)->data; + if (win_data != NULL) //PATCH TB + data = (T_MMI_CPHS_DATA *)win_data->user; + + if (data) + { + TRACE_EVENT ("mailbox_destroy()"); + + win_delete (data->win); + // Free Memory + FREE_MEMORY ((void *)data, sizeof (T_MMI_CPHS_DATA)); + + } + else + { + TRACE_EVENT ("mailbox_destroy() called twice"); + } + } +} + +void cphs_dialog_cb(T_MFW_HND win, USHORT e, SHORT identifier, void *parameter) +{ TRACE_EVENT("cphs_dialog_cb()"); + switch(e) + { case (MAILBOX): + cphs_get_mailbox();break; + default: break; + } +} + +static int cphs_win_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ + T_MMI_CPHS_DATA * data = (T_MMI_CPHS_DATA *)win->user; + + TRACE_FUNCTION ("cphs_win_cb()"); + + if(data EQ 0) + return 1; + switch (event) + { + case E_WIN_VISIBLE: + if (win->flags & E_WIN_VISIBLE) + { + /* Print the information dialog */ + /* Clear Screen */ + dspl_ClearAll(); + } + default: + return 0; + } +} +/******************************************************************************* + + $Function: show_cphs_mb_numbers + $Description: Show the list of mailbox numbers + $Returns: nothing + $Arguments: none + +*******************************************************************************/ +void show_cphs_mb_numbers() +{ + T_MFW_HND win; + T_MFW_HND parent_win= mfw_parent(mfw_header()); + + TRACE_FUNCTION("show_cphs_mb_numbers"); + + { + win = buildInfoNumberMenu(parent_win); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + } +} +static UBYTE* temp_ed; + +/******************************************************************************* + + $Function: show_cphs_mb_number + $Description: Show the passed mailbox number in editor + $Returns: status int + $Arguments: mailbox number entry + +*******************************************************************************/ + +int show_cphs_mb_number(T_MFW_CPHS_ENTRY* mb_number) +{ T_MFW_HND parent_win = mfw_parent(mfw_header()); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data*/ +#else + T_EDITOR_DATA editor_data; +#endif + char temp_number[MFW_CPHS_VM_NUMBER_MAXLEN - 10]; + +TRACE_FUNCTION("show_cphs_mb_number"); + + memset( temp_number, 0, (MFW_CPHS_VM_NUMBER_MAXLEN - 10) ); + + //if it's an international number without a '+' + if (mb_number->ton == MFW_TON_INTERNATIONAL && mb_number->number[0] != '+') + { strcat(temp_number, "+"); //put a + in front of number + strncat(temp_number, (char*)mb_number->number, (PHB_MAX_LEN - 1) ); + strcpy((char*)mb_number->number, temp_number); + } +/* SPR#1428 - SH - New Editor changes */ + +#ifdef NEW_EDITOR + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)mb_number->number, PHB_MAX_LEN - 1); + AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); + AUI_edit_SetDisplay(&editor_data, 0, COLOUR_EDITOR, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mailbox_edit_cb); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, NULL); + + temp_ed = (UBYTE *)mb_number->number; + + AUI_edit_Start(parent_win, &editor_data); +#else /* NEW_EDITOR */ + editor_attr_init(&editor_data.editor_attr, 0, edtCurBar1, NULL, (char*)mb_number->number, PHB_MAX_LEN-1, COLOUR_EDITOR); + editor_data_init(&editor_data, (T_EDIT_CB)mailbox_edit_cb, TxtSoftOK, TxtDelete, NULL, 1, DIGITS_MODE, FOREVER); + editor_data.Identifier = 0; + editor_data.hide = FALSE; + editor_data.destroyEditor = TRUE; + editor_data.TextString = NULL; /*MC SPR 1257, stops glitch in Chinese*/ + + + editor_start(parent_win,&editor_data); /* start the editor */ +#endif /* NEW_EDITOR */ + return 1; +} + +#ifdef FF_CPHS_REL4 +/******************************************************************************* + + $Function: show_cphs_rel4_mb_number + $Description: Show the passed cphs rel4 mailbox number in editor + $Returns: status int + $Arguments: mailbox number entry + +*******************************************************************************/ + +int show_cphs_rel4_mb_number(T_MFW_MBDN* mb_number) +{ T_MFW_HND parent_win = mfw_parent(mfw_header()); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data*/ +#else + T_EDITOR_DATA editor_data; +#endif + char temp_number[MAX_MB_NUM_LEN]; + +TRACE_FUNCTION("show_cphs_mb_number"); + + memset(temp_number, 0, MAX_MB_NUM_LEN); + + //if it's an international number without a '+' + if (mb_number->type.ton == MFW_TON_INTERNATIONAL && mb_number->number[0] != '+') + { strcat(temp_number, "+"); //put a + in front of number + strcat(temp_number, (char*)mb_number->number); + strcpy((char*)mb_number->number, temp_number); + } +/* SPR#1428 - SH - New Editor changes */ + +#ifdef NEW_EDITOR + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)mb_number->number, MAX_MB_NUM_LEN-1); + AUI_edit_SetMode(&editor_data, ED_MODE_READONLY, ED_CURSOR_NONE); + AUI_edit_SetDisplay(&editor_data, 0, COLOUR_EDITOR, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, NULL); + switch(mailbox_type) + { + case T_MFW_CPHS_REL4_MAILBOX_VOICE: + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, NULL, TxtVoice, NULL); + break; + case T_MFW_CPHS_REL4_MAILBOX_FAX: + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, NULL, TxtFax, NULL); + break; + case T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC: + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, NULL, TxtElectronic, NULL); + break; + case T_MFW_CPHS_REL4_MAILBOX_OTHER: + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, NULL, TxtOther, NULL); + break; + } + AUI_edit_Start(parent_win, &editor_data); +#else /* NEW_EDITOR */ + editor_attr_init(&editor_data.editor_attr, 0, edtCurNone, NULL, (char*)mb_number->number, MAX_MB_NUM_LEN-1, COLOUR_EDITOR); + editor_data_init(&editor_data, NULL, TxtSoftOK, NULL, NULL, 1, DIGITS_MODE, FOREVER); + editor_data.Identifier = 0; + editor_data.hide = FALSE; + editor_data.destroyEditor = TRUE; + editor_data.TextString = NULL; /*MC SPR 1257, stops glitch in Chinese*/ + + + editor_start(parent_win,&editor_data); /* start the editor */ +#endif /* NEW_EDITOR */ +// ADDED BY RAVI - 29-11-2005 +#if (BOARD == 61) + return 1; +#endif +// END RAVI +} +#endif + +/******************************************************************************* + + $Function: mailbox_edit_cb + $Description: callback for mailbox editor screen + $Returns: nothing + $Arguments: window, identifier, reason + +*******************************************************************************/ +static void mailbox_edit_cb( T_MFW_HND win, USHORT Identifier,UBYTE reason) +{ + T_MFW set_mailbox_errcode = MFW_CPHS_OK; + UBYTE write_error_number[MFW_CPHS_VM_NUMBER_MAXLEN]; + + TRACE_FUNCTION("mailbox_edit_cb()"); + switch (reason ) + { + case INFO_KCD_LEFT: + { + memcpy( (void *)&write_error_number[0], (void *)&cphs_voicemail_num.number[0], MFW_CPHS_VM_NUMBER_MAXLEN ); + memset ( (void *)&cphs_voicemail_num.number[0], 0, MFW_CPHS_VM_NUMBER_MAXLEN ); + memcpy ( (void *)&cphs_voicemail_num.number[0], (void *)temp_ed, MFW_CPHS_VM_NUMBER_MAXLEN ); + + set_mailbox_errcode = cphs_set_mailbox(&cphs_voicemail_num); + + if ( set_mailbox_errcode == MFW_CPHS_OK ) + { + mmi_cphs_wait_dialog(win); /* Display the "Pls. wait" Dialog as SIM Write consumes quite some time */ + } + else + { + memcpy( (void *)&cphs_voicemail_numbers.entries[cphs_voicemail_num.list_index].number[0], + (void *)&write_error_number[0], MFW_CPHS_VM_NUMBER_MAXLEN); + } + + break; + } + + + default: + { + /* otherwise no action to be performed */ + break; + } + } +} + + + + +/******************************************************************************* + + $Function: cphs_mfw_cb + $Description: Callback handler for mfw_cphs events + $Returns: status int + $Arguments: event, parameter pointer + +*******************************************************************************/ +int cphs_mfw_cb(T_MFW_EVENT event, void* para) +{ T_MFW_HND parent = mfwParent( mfw_header()); + +// T_MFW_CPHS_VC_NUM* number_list =(T_MFW_CPHS_VC_NUM* )para; // RAVI + +// T_MFW_CPHS_PARA* parameter = (T_MFW_CPHS_PARA*)para; // RAVI +// T_MFW_CPHS_STATUS temp; // RAVI + TRACE_FUNCTION("cphs_mfw_cb"); + switch(event) + { case E_CPHS_IND: + TRACE_EVENT("Getting cphs status"); + if(para != NULL) + { cphs_status =(* (T_MFW_CPHS_STATUS*)para); + //x0pleela 11 June, 2006 DR:OMAPS00079692 + //changed from CPHS_OK to MFW_CPHS_OK + if (cphs_status != MFW_CPHS_OK) + { + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("cphs not supported, apparently%d", cphs_status); + /***************************Go-lite Optimization changes end***********************/ + } + cphs_operator_name(); + } + break; + case E_CPHS_OP_NAME: + //x0012849: Jagannatha 26 May, 2006 ER: OMAPS00079607 -Support AOC in CPHS + TRACE_EVENT("case: E_CPHS_OP_NAME"); + if(para != NULL) + { + int csp_status; //x0012849: Jagannatha 26 May, 2006 ER: OMAPS00079607 - No need to include this under FF_CPHS flag. + memcpy(&operator_name, para, sizeof(T_MFW_CPHS_OP_NAME)); + TRACE_EVENT("operator name callback"); + + if (operator_name.longName.data[0] == NULL) + TRACE_EVENT("Blank long name"); + + if (operator_name.shortName.data[0] == NULL) + TRACE_EVENT("Blank short name"); + //x0012849: Jagannatha 26 May, 2006 ER: OMAPS00079607 -Support AOC in CPHS + csp_status = cphs_get_csp(); + //x0012849: Jagannatha 26 May, 2006 ER: OMAPS00079607 -Support AOC in CPHS + // In case if cphs_get_csp returns less than 'MFW_CPHS_OK' then either CPHS is not present or CPS is not allocated or activated in serice table. + #ifdef FF_CPHS + //x0pleela 11 June, 2006 DR:OMAPS00079692 + //changed from CPHS_OK to MFW_CPHS_OK + if( csp_status < MFW_CPHS_OK) + { + TRACE_EVENT("E_CPHS_OP_NAME : AOC is set to TRUE"); + setAOCflag(TRUE); + } + #endif + } + break; + case E_CPHS_GET_VC_NUM: + { + if (para!= NULL) + { + memcpy(&cphs_voicemail_numbers, para, sizeof(T_MFW_CPHS_VC_NUM)); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("Voicemail No %s", cphs_voicemail_numbers.entries[0].number); + /***************************Go-lite Optimization changes end***********************/ + show_cphs_mb_numbers(); + } + + } + break; + #ifdef FF_CPHS_REL4 + case E_CPHS_REL4_GET_MBI: + if(para!=NULL) + { + /*update local cache*/ + memcpy(&cphs_rel4_mbi,para,sizeof(T_MFW_CPHS_REL4_MBI)); + /*get mbdn*/ + switch(mailbox_type) + { + case T_MFW_CPHS_REL4_MAILBOX_VOICE: + if(cphs_rel4_mbdn.valid & 0x01) + cphs_mfw_cb(E_CPHS_REL4_GET_MBDN,&(cphs_rel4_mbdn.mailbox_numbers[0])); + else + cphs_rel4_get_mailbox_no( cphs_rel4_mbi.voice); + break; + case T_MFW_CPHS_REL4_MAILBOX_FAX: + if(cphs_rel4_mbdn.valid & 0x02) + cphs_mfw_cb(E_CPHS_REL4_GET_MBDN,&(cphs_rel4_mbdn.mailbox_numbers[1])); + else + cphs_rel4_get_mailbox_no(cphs_rel4_mbi.fax); + break; + case T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC: + if(cphs_rel4_mbdn.valid & 0x04) + cphs_mfw_cb(E_CPHS_REL4_GET_MBDN,&(cphs_rel4_mbdn.mailbox_numbers[2])); + else + cphs_rel4_get_mailbox_no(cphs_rel4_mbi.electronic); + break; + case T_MFW_CPHS_REL4_MAILBOX_OTHER: + if(cphs_rel4_mbdn.valid & 0x08) + cphs_mfw_cb(E_CPHS_REL4_GET_MBDN,&(cphs_rel4_mbdn.mailbox_numbers[3])); + else + cphs_rel4_get_mailbox_no( cphs_rel4_mbi.other); + break; + } + } + break; + case E_CPHS_REL4_GET_MBDN: + /*destroy the dialog showing waiting*/ + SEND_EVENT(mailbox_waiting_dialog, DIALOG_DESTROY, 0, 0); + if(para!=NULL) + { + + /*update local cache and show mailbox number*/ + switch(mailbox_type) + { + case T_MFW_CPHS_REL4_MAILBOX_VOICE: + memcpy(&cphs_rel4_mbdn.mailbox_numbers[0],para,sizeof(T_MFW_MBDN)); + cphs_rel4_mbdn.valid|=0x01; + show_cphs_rel4_mb_number(&cphs_rel4_mbdn.mailbox_numbers[0]); + break; + case T_MFW_CPHS_REL4_MAILBOX_FAX: + memcpy(&cphs_rel4_mbdn.mailbox_numbers[1],para,sizeof(T_MFW_MBDN)); + cphs_rel4_mbdn.valid|=0x02; + show_cphs_rel4_mb_number(&cphs_rel4_mbdn.mailbox_numbers[1]); + break; + case T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC: + memcpy(&cphs_rel4_mbdn.mailbox_numbers[2],para,sizeof(T_MFW_MBDN)); + cphs_rel4_mbdn.valid|=0x04; + show_cphs_rel4_mb_number(&cphs_rel4_mbdn.mailbox_numbers[2]); + break; + case T_MFW_CPHS_REL4_MAILBOX_OTHER: + memcpy(&cphs_rel4_mbdn.mailbox_numbers[3],para,sizeof(T_MFW_MBDN)); + cphs_rel4_mbdn.valid|=0x08; + show_cphs_rel4_mb_number(&cphs_rel4_mbdn.mailbox_numbers[3]); + break; + } + + } + break; + #endif + case E_CPHS_SET_VC_NUM: + { //result of writing mailbox number + UBYTE write_result; + if(para != NULL) + { write_result = *(UBYTE*)para; + mmi_cphs_wait_dialog_destroy(); /* Delete the "Pls. wait" screen */ + if (write_result == MFW_SIMOP_WRITE_OK) + ShowMessage(parent, TxtSaved, TxtNull); + else + ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error" + } + } + break; + case E_CPHS_GET_VC_STAT: + { + MfwHnd idle_win =idle_get_window(); + // UBYTE line; // RAVI + + /*a0393213 cphs rel4 - the parameter sent are of different type for CPHS Rel4 and non-CPHS Rel4*/ + #ifdef FF_CPHS_REL4 + if(!isMWISFilePresent() ) + { + #endif + if(para != NULL) + { cphs_voicemail_status = (T_MFW_CPHS_VC_STAT*)para; + + TRACE_EVENT("Getting voicemail status"); + if (cphs_voicemail_status->line1 == MFW_CFLAG_SET) + { + //x0pleela 01 June, 2006 DR: OMAPS00079692 + //Commented below line to avoid displaying a popup msg showing the line # + //Idle screen will be updated with the voice mail icon + //ShowMessage(idle_win, TxtVoicemail, TxtLine1); + + /* SPR#1929 - DS - Set voicemail icon on idle screen. Port of 1960 */ + iconsSetState(iconIdVoice); + } + + + if (cphs_voicemail_status->line2 == MFW_CFLAG_SET) + { + //x0pleela 01 June, 2006 DR: OMAPS00079692 + //Commented below line to avoid displaying a popup msg showing the line # + //Idle screen will be updated with the voice mail icon + //ShowMessage(idle_win, TxtVoicemail, TxtLine2); + + /* SPR#1929 - DS - Set voicemail icon on idle screen. Port of 1960 */ + iconsSetState(iconIdVoice); + } + + /* SPR#1929 - DS - Remove voicemail icon from idle screen if + * there is no voicemail waiting on either line1/line2. Port of 1960. + */ + if ( (cphs_voicemail_status->line1 != MFW_CFLAG_SET) && + (cphs_voicemail_status->line2 != MFW_CFLAG_SET) ) + { + iconsDeleteState(iconIdVoice); + } + } + #ifdef FF_CPHS_REL4 + } + else + { + if(is_message_waiting()) + { + iconsSetState(iconIdVoice); + } + else + { + iconsDeleteState(iconIdVoice); + } + + } + #endif + + } + break; + case E_CPHS_SET_VC_STAT: + + { //result of resetting mailbox status + // UBYTE write_result; // RAVI + + TRACE_EVENT("Mailbox status set"); + //Update our copy of the mailbox status + GetCphsVoicemailStatus(0); + } + break; + case E_CPHS_GET_DV_STAT: + { + /*a0393213 cphs rel4 - the parameter sent are of different type for CPHS Rel4 and non-CPHS Rel4*/ + #ifdef FF_CPHS_REL4 + if(!isCFISFilePresent() ) + { + #endif + UBYTE line; + //check for divert on active line + line = GetAlsLine(); + + TRACE_EVENT_P4("cphs_mfw_cb():E_CPHS_GET_DV_STAT %d %x %x %x", ((T_MFW_CPHS_DV_STAT*)para)->result, + ((T_MFW_CPHS_DV_STAT*)para)->line1,((T_MFW_CPHS_DV_STAT*)para)->line2,line); + + /* 30th May,2006 OMAPS00079650 a0393213 (R.Prabakar) + Description : CPHS Call Forwarding feature implementation + Solution : call_forwarding_status is updated. The data is not written into flash as it would be done + in E_CPHS_SET_DV_STAT. However the present code is not disturbed*/ + + #ifdef FF_CPHS + if(((T_MFW_CPHS_DV_STAT*)para)->result == MFW_SIMOP_READ_ERR) + { + + if(FFS_flashData.CFState==TRUE) + { + if (line == MFW_SERV_LINE2) + ((T_MFW_CPHS_DV_STAT*)para)->line2=MFW_CFLAG_SET; + else + ((T_MFW_CPHS_DV_STAT*)para)->line1=MFW_CFLAG_SET; + + } + else + { + if (line == MFW_SERV_LINE2) + ((T_MFW_CPHS_DV_STAT*)para)->line2=MFW_CFLAG_NOTSet; + else + ((T_MFW_CPHS_DV_STAT*)para)->line1=MFW_CFLAG_NOTSet; + } + } + #endif + if(para != NULL) + memcpy(&call_forwarding_status, para, sizeof(T_MFW_CPHS_DV_STAT)); + { + + //check if current outgoing line diverted + /*a0393213 - the call forward icon is now shown taking both the lines into consideration*/ + /*if (line == MFW_SERV_LINE2) + DivertStatus = GetCphsDivertStatus(MFW_SERV_LINE2); + else//if (line == MFW_SERV_LINE1) + DivertStatus = GetCphsDivertStatus(MFW_SERV_LINE1);*/ + + //set the call forwarding icon + if ((GetCphsDivertStatus(MFW_SERV_LINE1)==MFW_CFLAG_SET) || + (GetCphsDivertStatus(MFW_SERV_LINE2)==MFW_CFLAG_SET)) + { + iconsSetState(iconIdCallFor); + #ifndef FF_CPHS + // Jun 23, 2004 REF: CRR MMI-SPR-13599 Rashmi C N(Sasken) + // Setting the Current state of CF in Flash + FFS_flashData.CFState=TRUE; + #endif + } + //gid rid of call forwarding icon + if ((GetCphsDivertStatus(MFW_SERV_LINE1)==MFW_CFLAG_NOTSet) && + (GetCphsDivertStatus(MFW_SERV_LINE2)==MFW_CFLAG_NOTSet)) + { + iconsDeleteState(iconIdCallFor); + #ifndef FF_CPHS + // Jun 23, 2004 REF: CRR MMI-SPR-13599 Rashmi C N(Sasken) + // Setting the Current state of CF in Flash + FFS_flashData.CFState=FALSE; + #endif + } + + #ifndef FF_CPHS + // Jun 23, 2004 REF: CRR MMI-SPR-13599 Rashmi C N(Sasken) + // Writng the Current state of CF into ffs + flash_write(); + #endif + } + #ifdef FF_CPHS_REL4 + } + else + { + /*store info in call_forwarding_status_rel4*/ + memcpy(&call_forwarding_status_rel4, para, sizeof(T_MFW_CPHS_REL4_DV_STAT)); + if(((T_MFW_CPHS_REL4_DV_STAT*)para)->voice==MFW_CFLAG_SET) + iconsSetState(iconIdCallFor); + else + iconsDeleteState(iconIdCallFor); + } + if(isMWISFilePresent()) + cphs_rel4_get_mailbox_status(); + #endif + } + break; + case E_CPHS_SET_DV_STAT: + { + //result of setting divert status + // UBYTE write_result; // RAVI + /* 30th May,2006 OMAPS00079650 a0393213 (R.Prabakar) + Description : CPHS Call Forwarding feature implementation + Solution : CF status is written into flash if sim write had failed*/ + #ifdef FF_CPHS_REL4 + if(!isCFISFilePresent() ) + { + #endif + #ifdef FF_CPHS + if(para != NULL) + { + UBYTE write_result; + write_result = *(UBYTE*)para; + if (write_result == MFW_SIMOP_WRITE_OK) + TRACE_EVENT("cphs_mfw_cb:Call forward flag set in sim"); + if (write_result == MFW_SIMOP_WRITE_ERR) + { + TRACE_EVENT("cphs_mfw_cb:Unable to set call forward flag in sim"); + + if(ss_data.cfu_services&0x01) + { + FFS_flashData.CFState=TRUE; + } + else + { + FFS_flashData.CFState=FALSE; + } + flash_write(); + } + } + #endif + + cphs_get_divert_status(); //refresh divert status + #ifdef FF_CPHS_REL4 + } + else/*a0393213 cphs rel4 supported*/ + { + if(call_forwarding_status_rel4.voice==MFW_CFLAG_SET) + iconsSetState(iconIdCallFor); + else + iconsDeleteState(iconIdCallFor); + } + #endif + + } + break; + case E_CPHS_GET_ALS_STATUS: + { if(para != NULL) + memcpy(&als_status, para, sizeof(T_MFW_CPHS_ALS_STATUS)); + } + break; + case E_CPHS_SET_LINE: + { //result of set ALS line + UBYTE write_result; + if(para != NULL) + { write_result = *(UBYTE*)para; + if (write_result == MFW_SIMOP_WRITE_OK) + { + TRACE_EVENT("cphs_mfw_cb() : ALS status written into flash"); + ShowMessage(parent, TxtChanged, TxtNull); + } + if (write_result == MFW_SIMOP_WRITE_ERR) + { + TRACE_EVENT("cphs_mfw_cb() : ALS status not written into flash"); + ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error" + } + } +#ifdef FF_CPHS + mmi_cphs_get_als_info(); +#else + cphs_get_als_info(&als_status);//refresh current line +#endif + /*cphs_get_divert_status(); //refresh divert status*//*a0393213 - the call forward icon is now shown taking both the lines into consideration*/ + } + break; + case E_CPHS_SET_ALS_STATUS: + { //result of setting ALS status + UBYTE write_result; + if(para != NULL) + { write_result = *(UBYTE*)para; + if (write_result == MFW_SIMOP_WRITE_OK) + ShowMessage(parent, TxtSaved, TxtNull); + if (write_result == MFW_SIMOP_WRITE_ERR) + ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error" + } + } + break; + case E_CPHS_GET_CSP: + { + #ifdef FF_CPHS + //x0012849: Jagannatha 26 May, 2006 ER: OMAPS00079607 -Support AOC in CPHS + int i; + #endif + TRACE_EVENT("Reached E_CPHS_GET_CSP"); + if(para != NULL) + { + memcpy(&customer_service_profile, para, sizeof(T_MFW_CPHS_CSP)); + + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P7("CSP: %x,%x,%x,%x,%x,%x,%x", customer_service_profile.csp[0], customer_service_profile.csp[1], + customer_service_profile.csp[2], customer_service_profile.csp[3], customer_service_profile.csp[4], customer_service_profile.csp[5], + customer_service_profile.csp[6]); + TRACE_EVENT_P3("%x,%x,%x", customer_service_profile.csp[7], customer_service_profile.csp[8], customer_service_profile.csp[9]); + TRACE_EVENT_P7("CSP: %x,%x,%x,%x,%x,%x,%x", customer_service_profile.csp[10], customer_service_profile.csp[11], + customer_service_profile.csp[12], customer_service_profile.csp[13], customer_service_profile.csp[14], customer_service_profile.csp[15], + customer_service_profile.csp[16]); + TRACE_EVENT_P3("%x,%x,%x", customer_service_profile.csp[17], customer_service_profile.csp[18], customer_service_profile.csp[19]); + /***************************Go-lite Optimization changes end***********************/ + + //x0012849: Jagannatha 26 May, 2006 ER: OMAPS00079607 -Support AOC in CPHS + #ifdef FF_CPHS + TRACE_EVENT_P2("AOC : Service group code =%d value =%d", + customer_service_profile.csp[4], customer_service_profile.csp[5]); + // No need to check if Aoc_flag is already set to TRUE. + + /*check for Byte 1 service group code =03 and Byte2 bit 6 =1*/ + for (i=0;i<20; i++) + { + //check for AOC bit + if( customer_service_profile.csp[i] EQ 0x03) + { + if(i == 19) break; /* x0039928 - Lint warning fix */ + i++; + if( customer_service_profile.csp[i] & 0x20) + { + TRACE_EVENT("E_CPHS_GET_CSP: AOC flag is SET in CPHS "); + setAOCflag(TRUE); + break; + } + else { + TRACE_EVENT("E_CPHS_GET_CSP: AOC flag is NOT SET in CPHS "); + setAOCflag(FALSE); + } + } + //check for ALS bit + else if( customer_service_profile.csp[i] == 0x06) + { + if(i == 19) break; /* x0039928 - Lint warning fix */ + i++; + if( customer_service_profile.csp[i] & 0x80 ) + { + mmi_cphs_set_als_value( TRUE); + break; + } + else + mmi_cphs_set_als_value( FALSE); + } + else + i++; + } + + #endif + cphs_get_info_num(1, info_num_index); + } + + }break; + case E_CPHS_GET_INFO_NUM: + { + if(para != NULL) + { + memcpy(¤t_info_num, para, sizeof( T_MFW_CPHS_INFONUM_ENTRY)); + + TRACE_EVENT("Getting info number"); + if (current_info_num.result !=MFW_SIMOP_READ_ERR) + { T_DISPLAY_DATA Dialog; + TRACE_EVENT("Displaying num"); + /* Initialise the dialog control block with default information + */ + dlg_initDisplayData_TextStr( &Dialog, TxtSoftCall, TxtSoftBack, (char*)current_info_num.alpha.data, (char*)current_info_num.number, COLOUR_STATUS); + dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC) info_num_display_cb, FOREVER, KEY_LEFT| KEY_RIGHT|KEY_CLEAR ); + + /* Show the dialog + */ + info_dialog( parent, &Dialog ); + } + } + } + + break; + case E_CPHS_GET_INFO_LIST: + { + if (para == NULL) + { + TRACE_EVENT("Invalid info num list"); + } + else + { //populate next pointer + //RAVI - 29-11-2005 + /* x0045876, 14-Aug-2006 (WR - assignment in condition)*/ + info_numbers[info_num_level] = (T_MFW_CPHS_INFONUM_LIST*) ALLOC_MEMORY(sizeof(T_MFW_CPHS_INFONUM_LIST)); + if (info_numbers[info_num_level]) + memcpy(info_numbers[info_num_level], para, sizeof(T_MFW_CPHS_INFONUM_LIST)); + + + TRACE_EVENT("Getting info numbers!!"); + if (info_numbers[info_num_level]->count != 0) + { + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1("Valid info num list, count:%d",info_numbers[info_num_level]->count); + /***************************Go-lite Optimization changes end***********************/ + if (info_num_level) + { info_num_level++; + InfoNumbers2(); + + } + } + else + info_numbers[info_num_level]=NULL; + } + } + break; + case E_CPHS_GET_SIM_FIELD: + { T_MFW_CPHS_READ_SIM_ENTRY temp; + + memcpy(&temp, para, sizeof(T_MFW_CPHS_READ_SIM_ENTRY)); + if (temp.data_len >0) + //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + //begin 30439 + //temp.exchange_data[temp.data_len-1] = 0; + //end 30439 + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P3("Sim Read, Field: %d (Record: %d) Errcode: %d",temp.requested_field, temp.record, temp.sim_result); + /***************************Go-lite Optimization changes end***********************/ + /* SPR759 - SH - Read Sim for homezone, calls appropriate functions */ + #ifdef MMI_HOMEZONE_ENABLED + if (temp.requested_field>=HZ_SIM_PARAMETERS + && temp.requested_field < (HZ_SIM_CELL_CACHE+HZ_ZONES_MAX) ) + { + homezoneReadSimCb(temp.requested_field, temp.record, temp.sim_result); + } + #endif + } + break; + + case E_CPHS_SET_SIM_FIELD: + { + T_MFW_CPHS_READ_SIM_ENTRY temp; + + memcpy(&temp, para, sizeof(T_MFW_CPHS_READ_SIM_ENTRY)); + if (temp.data_len >0) + temp.exchange_data[temp.data_len-1] = 0; + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2("Sim Write, Requested_field: %d Errcode: %d",temp.requested_field, temp.sim_result); + /***************************Go-lite Optimization changes end***********************/ + /* SPR759 - SH - Read Sim for homezone, calls appropriate functions */ + #ifdef MMI_HOMEZONE_ENABLED + if (temp.requested_field>=HZ_SIM_PARAMETERS + && temp.requested_field < (HZ_SIM_CELL_CACHE+HZ_ZONES_MAX) ) + { + homezoneWriteSimCb(temp.requested_field, temp.record, temp.sim_result); + } + #endif + } + break; +#ifdef FF_CPHS_REL4 + case E_CPHS_MSP_IND: + { + if(para != NULL) + { + msp_info = mfw_cphs_get_msp(); + TRACE_EVENT_P1("E_CPHS_MSP_IND - mspcount %d",msp_info->count); + if(msp_info->count < 2) + { + MSP_flag = FALSE; + #ifdef FF_CPHS + mmi_cphs_get_als_info(); + #else + cphs_get_als_info(&als_status); + #endif + return TRUE; + } + else + { + MSP_flag = TRUE; + mfw_cphs_set_default_profile(1); + mfw_cphs_set_reg_profile(1); + mmi_msp_interrogate(); + } + } + } + break; +#endif + default: break; + } + + + return TRUE; +} + + + + + + + + +/******************************************************************************* + + $Function: int InfoNumbers2( ) + $Description: Displays info number sub-menus + $Returns: status int + $Arguments: nothing + +*******************************************************************************/ +//for sub-menus +int InfoNumbers2( ) +{ + T_MFW_HND win; + T_MFW_HND parent_win = mfw_parent(mfw_header()); + + TRACE_FUNCTION("InfoNumbers2"); + + if (info_numbers != NULL) + { type_of_list = INFO_NUM_LIST; + win = buildInfoNumberMenu(parent_win); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + } + + return MFW_EVENT_CONSUMED; +} +/******************************************************************************* + + $Function: buildInfoNumberMenu + $Description: Creates window for Information numbers + $Returns: window created + $Arguments: parent window + +*******************************************************************************/ +static T_MFW_HND buildInfoNumberMenu( MfwHnd parent_window) +{ + T_INFO_NUM_INFO * data = (T_INFO_NUM_INFO *)ALLOC_MEMORY (sizeof (T_INFO_NUM_INFO)); + T_MFW_WIN * win; + TRACE_FUNCTION("buildInfoNumberMenu"); + + /* + * Create window handler + */ + + data->numbers_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)info_num_win_cb); + if (data->numbers_win EQ NULL) + { + return NULL; + } + + TRACE_EVENT(">>>> Info num window created: " ); + /* + * connect the dialog data to the MFW-window + */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)info_num_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->numbers_win)->data; + win->user = (void *)data; + data->parent = parent_window; + winShow(data->numbers_win); + /* + * return window handle + */ + + return data->numbers_win; +} + + +//x0012849: Jagannatha 01 June, 2006 ER: OMAPS00079607 -To Support AcC and Info numbers +/******************************************************************************* + $Function: info_num_msg_cb + $Description: Dialogue callback function of the information Numbers message window + $Returns: none + $Arguments: win - window handler, dialogue id, key pressed + +*******************************************************************************/ +#ifdef FF_CPHS +void info_num_msg_cb(T_MFW_HND win, USHORT identifier, UBYTE reason) +{ + + T_MFW_HND parent = mfwParent( mfw_header()); + TRACE_FUNCTION ("info_num_msg_cb"); + switch (reason) + { + case INFO_KCD_LEFT: + // This code is not executed for the case - If mobile is in roaming and service is Network specific. + if (info_numbers[info_num_level-1]->entry[identifier].entryStat & 0x80) //if bit 8 set/*a0393213 warnings removal - Dialog.Identifier changed to identifier*/ + { + TRACE_EVENT("CPHS INFO:Should be number entry"); + if (info_num_level < 4) + cphs_select_info_num(info_num_index); + } + else + { + if (info_num_level < 4) + { + TRACE_EVENT("CPHS INFO:Should be dir entry"); + cphs_get_info_num(info_num_level+1, info_num_index+1); + } + } + break; + + default: + break; + } +} +#endif +/******************************************************************************* + $Function: info_num_display_cb + + $Description: Dialogue callback function of the information Numbers display window + + $Returns: none + + $Arguments: win - window handler, dialogue id, key pressed + + +*******************************************************************************/ + +void info_num_display_cb(T_MFW_HND win, USHORT identifier, UBYTE reason) +{ + + // char buf [40]; // RAVI + + TRACE_FUNCTION ("info_num_display_cb"); + + switch (reason) + { + case INFO_KCD_LEFT: callNumber((UBYTE*)current_info_num.number); + default: break; // RAVI - Deafault corrected to default. + + } +} +/******************************************************************************* + + $Function: info_num_exec_cb + + $Description: Exec callback function of the information Numbers window + + $Returns: none + + $Arguments: win - window handler + event - mfw event + parameter - optional data. + +*******************************************************************************/ +void info_num_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_INFO_NUM_INFO * data = (T_INFO_NUM_INFO *)win_data->user; + UBYTE i; + UBYTE numberOfEntries; +// ListWinInfo * mnu_data = (ListWinInfo *)parameter; // RAVI + + + MmiRsrcGetText(TxtLine1); + MmiRsrcGetText(TxtLine2); + MmiRsrcGetText(TxtFax); + MmiRsrcGetText(TxtData); + TRACE_FUNCTION (">>>>> info_num_exec_cb()"); + + switch (event) + { + case E_INIT: + + TRACE_EVENT(">>>> info_num_exec_cb() Event:E_INIT"); + + /* initialization of administrative data */ + + + data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData)); + + if(data->menu_list_data == 0) + { + TRACE_EVENT("Failed memory alloc 1 "); + return; + } + if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL) + { numberOfEntries = cphs_voicemail_numbers.count; + if (numberOfEntries > 4) + numberOfEntries = 4; + } + else + numberOfEntries = info_numbers[info_num_level-1]->count; + + data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( 4 * sizeof(T_MFW_MNU_ITEM) ); + + if(data->menu_list_data->List == 0) + { + TRACE_EVENT("Failed memory alloc 2"); + return; + } + + for (i = 0; i < numberOfEntries ; i++) + { + mnuInitDataItem(&data->menu_list_data->List[i]); + if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL) + data->menu_list_data->List[i].str = (char *)cphs_voicemail_numbers.entries[i].alpha.data; + else + data->menu_list_data->List[i].str = (char *)info_numbers[info_num_level-1]->entry[i].alpha.data; + data->menu_list_data->List[i].flagFunc = item_flag_none; + } + + data->menu_list_data->ListLength =numberOfEntries; + data->menu_list_data->ListPosition = 1; + data->menu_list_data->CursorPosition = 1; + data->menu_list_data->SnapshotSize = numberOfEntries; + data->menu_list_data->Font = 0; + if (type_of_list == MAILBOX_LIST_CALL) + data->menu_list_data->LeftSoftKey = TxtSoftCall; + else + data->menu_list_data->LeftSoftKey = TxtSoftSelect; + data->menu_list_data->RightSoftKey = TxtSoftBack; + data->menu_list_data->KeyEvents = KEY_ALL; + data->menu_list_data->Reason = 0; + data->menu_list_data->Strings = TRUE; + data->menu_list_data->Attr = &InfoNum_menuAttrib; + data->menu_list_data->autoDestroy = FALSE; + + + /* Create the dynamic menu window */ + listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)InfonumList_cb,0); + + break; + + case LISTS_REASON_VISIBLE: + case LISTS_REASON_RESUME: + { + dspl_ClearAll(); // sbh - clear screen before update + + if (type_of_list == MAILBOX_LIST) + { + softKeys_displayId( TxtSoftSelect, TxtSoftBack, 0, COLOUR_LIST_SUBMENU); + } + else if (type_of_list == MAILBOX_LIST_CALL) + { + softKeys_displayId( TxtSoftCall, TxtSoftBack, 0, COLOUR_LIST_SUBMENU); + } + + break; + } + + default: + break; + } +} +/******************************************************************************* + + $Function: InfonumList_cb + + $Description: Callback function for the info num list. + + $Returns: none + + $Arguments: Parent - parent window. + ListData - Menu item list +*******************************************************************************/ + +void InfonumList_cb(T_MFW_HND * Parent, ListMenuData * ListData) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)Parent)->data; + T_INFO_NUM_INFO * data = (T_INFO_NUM_INFO *)win_data->user; + +// char debug[40]; // RAVI + +TRACE_FUNCTION("InfonumList_cb"); + if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR)) + { + listsDestroy(ListData->win); + InfoNum_destroy(data->numbers_win); + info_num_level--; + } + else if(ListData->Reason EQ LISTS_REASON_SELECT) + { + if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL) //get the correct voicemail num + { + cphs_voicemail_numbers.entries[ListData->ListPosition].list_index = ListData->ListPosition; + + if (type_of_list == MAILBOX_LIST) + { /*If we're editing*/ + TRACE_FUNCTION_P2("List Posn2: %d, MBN: %s", ListData->ListPosition, cphs_voicemail_numbers.entries[ListData->ListPosition].number ); + show_cphs_mb_number(&cphs_voicemail_numbers.entries[ListData->ListPosition]); + memcpy(&cphs_voicemail_num, &cphs_voicemail_numbers.entries[ListData->ListPosition], sizeof(T_MFW_CPHS_ENTRY)); + } + else + { + char temp_number[MFW_CPHS_VM_NUMBER_MAXLEN]; + + memcpy(&cphs_voicemail_num, &cphs_voicemail_numbers.entries[ListData->ListPosition], sizeof(T_MFW_CPHS_ENTRY)); + memset(temp_number, 0, MFW_CPHS_VM_NUMBER_MAXLEN); + + /*If we're calling the number*/ + //if it's an international number without a '+' + if (cphs_voicemail_num.ton == MFW_TON_INTERNATIONAL && cphs_voicemail_num.number[0] != '+') + { + strcat(temp_number, "+"); //put a + in front of number + strncat(temp_number, (char*)cphs_voicemail_num.number, strlen((char*)cphs_voicemail_num.number)); + memset((void*)cphs_voicemail_num.number, 0, MFW_CPHS_VM_NUMBER_MAXLEN); + strncpy((char*)cphs_voicemail_num.number, temp_number, strlen((char *)temp_number)); + } + + callNumber(cphs_voicemail_num.number); + + } + + + } + else + { +#ifdef FF_CPHS + T_DISPLAY_DATA Dialog; + //x0012849: Jagannatha 01 June, 2006 ER: OMAPS00079607 -To Support AcC and Info numbers + UBYTE inRoaming; + inRoaming = getRoamingStatus(); + TRACE_EVENT_P1("Roaming status = %d", inRoaming); +#endif + //get the number/directory + info_num_index = info_numbers[info_num_level-1]->entry[ListData->ListPosition].index; + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P3("Index selected: %d, Level, %d, entryStat:%d",info_num_index, info_num_level, + info_numbers[info_num_level-1]->entry[ListData->ListPosition].entryStat); + /***************************Go-lite Optimization changes end***********************/ + //x0012849: Jagannatha 01 June, 2006 ER: OMAPS00079607 -To Support AcC and Info numbers + //0x20 in Binary 0010 0000 - If bit 6 is set to 1 that indicates that service is specific to network. +#ifdef FF_CPHS + if( (current_info_num.entryStat & 0x20) && inRoaming ) + { + dlg_initDisplayData_TextStr( &Dialog, TxtSoftOK, TxtSoftBack, (char*)MmiRsrcGetText(TxtNotAvailable), NULL, COLOUR_STATUS); + dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC) info_num_msg_cb, THREE_SECS, KEY_RIGHT|KEY_CLEAR ); + Dialog.Identifier = (USHORT)ListData->ListPosition; + info_dialog( Parent, &Dialog ); + } + //x0012849: Jagannatha 01 June, 2006 ER: OMAPS00079607 -To Support AcC and Info numbers + //0x10 in Binary 0001 0000 - If bit 5 is set to 1 that indicates that service is charged at premium rate. + else if(current_info_num.entryStat & 0x10) + { + dlg_initDisplayData_TextStr( &Dialog, TxtSoftOK, TxtSoftBack, (char*)"Charging will be done at a", (char*)"Premium Rate", COLOUR_STATUS); + dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC) info_num_msg_cb, FOREVER, KEY_LEFT|KEY_RIGHT|KEY_CLEAR ); + Dialog.Identifier = (USHORT)ListData->ListPosition; + info_dialog( Parent, &Dialog ); + } + else + { +#endif + if (info_numbers[info_num_level-1]->entry[ListData->ListPosition].entryStat & 0x80) //if bit 8 set + { + TRACE_EVENT("CPHS INFO:Should be number entry"); + if (info_num_level < 4) + cphs_select_info_num(info_num_index); + } + else + { + if (info_num_level < 4) + { + TRACE_EVENT("CPHS INFO:Should be dir entry"); + cphs_get_info_num(info_num_level+1, info_num_index+1); + } + } +#ifdef FF_CPHS + } +#endif + + } + + } + + +} + +/******************************************************************************* + + $Function: InfoNum_destroy + + $Description: Destroy the info num window. + + $Returns: none + + $Arguments: own_window- current window +*******************************************************************************/ + +static void InfoNum_destroy(MfwHnd own_window) +{ + T_MFW_WIN * win_data; + T_INFO_NUM_INFO * data; + UBYTE numberOfEntries; + + TRACE_FUNCTION ("InfoNum_destroy()"); + + if (own_window) + { + win_data = ((T_MFW_HDR *)own_window)->data; + data = (T_INFO_NUM_INFO *)win_data->user; + + if (data) + { + /* + * Delete WIN handler + */ + win_delete (data->numbers_win); + + /* + * Free Memory + */ + if ( ( type_of_list == MAILBOX_LIST ) || ( type_of_list == MAILBOX_LIST_CALL ) ) + { numberOfEntries = cphs_voicemail_numbers.count; + if (numberOfEntries > 4) + numberOfEntries = 4; + } + else + numberOfEntries =info_numbers[info_num_level-1]->count; + if (data->menu_list_data != NULL) + { //int i; // RAVI + FREE_MEMORY ((void *)data->menu_list_data->List, numberOfEntries * sizeof (T_MFW_MNU_ITEM)); + FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData)); + if (type_of_list == INFO_NUM_LIST && info_num_level > 1)//if info numbers, + { FREE_MEMORY((void*)info_numbers[info_num_level-1], sizeof(T_MFW_CPHS_INFONUM_LIST)); + info_numbers[info_num_level-1] = NULL; + } + } + FREE_MEMORY ((void *)data, sizeof (T_INFO_NUM_INFO)); + + } + else + { + TRACE_EVENT ("InfoNum_destroy() called twice"); + } + } +} + +/******************************************************************************* + + $Function: info_num_win_cb + + $Description: Window callback function for the info numbers window. + + $Returns: none + + $Arguments: w - mfw window handler + e - mfw event + +*******************************************************************************/ + +static int info_num_win_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */ +{ + TRACE_EVENT ("info_num_win_cb()"); + + switch (e) + { + case MfwWinVisible: /* window is visible */ + break; + + case MfwWinFocussed: /* input focus / selected */ + case MfwWinDelete: /* window will be deleted */ + + default: + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + + + +/******************************************************************************* + + $Function: mmi_cphs_get_als_info + + $Description: Returns the current Line enabled + + $Returns: none + + $Arguments: + +*******************************************************************************/ +//x0pleela 23 May, 2006 DR: OMAPS00070657 +#ifdef FF_CPHS +void mmi_cphs_get_als_info() +{ + int nALS_line_data; + + nALS_line_data= mfw_cphs_get_als_info(); + TRACE_EVENT_P1("mmi_cphs_get_als_info() : %d",nALS_line_data); + switch (nALS_line_data) + { + case ALS_MOD_SPEECH: + als_status.selectedLine = MFW_SERV_LINE1; + break; + + case ALS_MOD_AUX_SPEECH: + als_status.selectedLine = MFW_SERV_LINE2; + break; + default: + als_status.selectedLine = MFW_SERV_NotPresent; + break; + } +} + + +/******************************************************************************* + + $Function: mmi_cphs_set_als_value + + $Description: Set the Als flag based on the CSP data read from CPHS enabled SIM + + $Returns: none + + $Arguments: + +*******************************************************************************/ +//x0pleela 29 May, 2006 DR: OMAPS00070657 + +void mmi_cphs_set_als_value( UBYTE als_val) +{ + TRACE_FUNCTION("mmi_cphs_set_als_value()"); + Als_flag = als_val; +} + +/******************************************************************************* + + $Function: mmi_cphs_get_als_value + + $Description: Returns the Als flag value + + $Returns: none + + $Arguments: + +*******************************************************************************/ +//x0pleela 29 May, 2006 DR: OMAPS00070657 + +UBYTE mmi_cphs_get_als_value( void ) +{ + TRACE_EVENT_P1("mmi_cphs_get_als_value() %d",Als_flag); + return Als_flag; +} + +#ifdef FF_CPHS_REL4 +UBYTE mmi_cphs_get_msp_value( void ) +{ + TRACE_EVENT_P1("mmi_cphs_get_msp_value - MSP_flag - %d", MSP_flag); + return MSP_flag; +} +#endif +/******************************************************************************* + + $Function: mmi_get_als_selectedLine + + $Description: Returns the current Line enabled + + $Returns: none + + $Arguments: + +*******************************************************************************/ +//x0pleela 30 May, 2006 DR: OMAPS00070657 +T_MFW_LINE_INDEX mmi_get_als_selectedLine( void) +{ + return als_status.selectedLine; +} +#endif /* FF_CPHS */