FreeCalypso > hg > tcs211-l1-reconst
diff g23m/condat/ms/src/bmi/MmiCPHS.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/bmi/MmiCPHS.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,1776 @@ +/******************************************************************************* + + 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 + + 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 "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 + + + + +/****************************************************************************** + + 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 */ + -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; + +#define E_INIT 1 + + + +#define CPHS_TELESERVICES_BYTE_VALUE 0x06 +#define ALS_MASK 0x80 + +#define CPHS_INFONUMS_BYTE_VALUE 0xC0 +#define INFONUM_MASK 0xFF + + +/****************************************************************************** + + Static Global variables + +*******************************************************************************/ + +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; +static T_MFW_CPHS_ALS_STATUS als_status; +static T_MFW_CPHS_CSP customer_service_profile; +static T_MFW_CPHS_INFONUM_LIST* info_numbers[4]= {NULL, NULL, NULL, NULL}; + +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); +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 + +/****************************************************************************** + + 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; + cphs_init(); //initialise MFW CPHS module + + status = cphs_create(NULL, 0xFFFF, cphs_mfw_cb); //create handler for MFW CPHS EVENTS + + info_num_level = 0; + info_num_index = 1; + cphs_get_als_info(&als_status); + return status; +} + +void mmi_cphs_refresh() +{ + 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 + + while ((result = qAT_PlusCIMI(CMD_SRC_LCL, IMSI)) != 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 + sAT_PlusCLCK(CMD_SRC_LCL,CLCK_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); + if (retVal == 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 + sAT_PlusCLCK(CMD_SRC_LCL,CLCK_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); + if (retVal == 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; +} + +/******************************************************************************* + + $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()); +#ifndef CPHS_PROV_TEST + if (!ALSPresent(NULL, NULL, NULL)) +#endif + { cphs_select_line(MFW_SERV_LINE1); + cphs_get_divert_status(); + } +#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()); + +#ifndef CPHS_PROV_TEST + if (!ALSPresent(NULL, NULL, NULL)) +#endif + { cphs_select_line(MFW_SERV_LINE2); + cphs_get_divert_status(); + } +#ifndef CPHS_PROV_TEST + else + ShowMessage(parent, TxtNotSupported, TxtNull); +#endif + return MFW_EVENT_CONSUMED; +} +/******************************************************************************* + + $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; + 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; + + 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; +} +/******************************************************************************* + + $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() +{ + + if (cphs_status == 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; + + 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(). + + T_ACI_RETURN ACI_return = AT_FAIL ; + T_ACI_ALS_MOD ALSmode = (T_ACI_ALS_MOD)0; // RAVI + + ACI_return = tAT_PercentALS( CMD_SRC_NONE, &ALSmode ); + ACI_return = 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. +} +/******************************************************************************* + + $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; + 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***********************/ + for(i=0; i< strlen((char*)customer_service_profile.csp); 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: 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 ); +} + + + +/****************************************************************************** + + 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; + } + return 1; +} +/******************************************************************************* + + $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()); + + { + win = buildInfoNumberMenu(parent_win); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + } +} + +/******************************************************************************* + + $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[PHB_MAX_LEN]; + + memset(temp_number, 0, PHB_MAX_LEN); + + //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 + 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, 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); + + 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 */ +// ADDED BY RAVI - 29-11-2005 +#if (BOARD == 61) + return 1; +#endif +// END RAVI +} + +/******************************************************************************* + + $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) +{ + + TRACE_FUNCTION("mailbox_edit_cb()"); + switch (reason ) + { + case INFO_KCD_LEFT: + { + TRACE_EVENT((char*)cphs_voicemail_num.number); + cphs_set_mailbox(&cphs_voicemail_num); + + } + + 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 + switch(event) + { case E_CPHS_IND: + TRACE_EVENT("Getting cphs status"); + if(para != NULL) + { cphs_status =(* (T_MFW_CPHS_STATUS*)para); + if (cphs_status != 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: + if(para != NULL) + { + 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"); + + cphs_get_csp(); + } + 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; + case E_CPHS_SET_VC_NUM: + { //result of writing mailbox number + UBYTE write_result; + if(para != NULL) + { write_result = *(UBYTE*)para; + 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 + 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) + { + 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) + { + 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); + } + + } + + } + 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: + { + TRACE_EVENT("Getting divert status"); + if(para != NULL) + memcpy(&call_forwarding_status, para, sizeof(T_MFW_CPHS_DV_STAT)); + {UBYTE line; + //check for divert on active line + line = GetAlsLine(); + //check if current outgoing line diverted + 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 (DivertStatus == MFW_CFLAG_SET) + { + iconsSetState(iconIdCallFor); +// Jun 23, 2004 REF: CRR MMI-SPR-13599 Rashmi C N(Sasken) +// Setting the Current state of CF in Flash + FFS_flashData.CFState=TRUE; + } + //gid rid of call forwarding icon + if (DivertStatus == MFW_CFLAG_NOTSet) + { + iconsDeleteState(iconIdCallFor); +// Jun 23, 2004 REF: CRR MMI-SPR-13599 Rashmi C N(Sasken) +// Setting the Current state of CF in Flash + FFS_flashData.CFState=FALSE; + } +// Jun 23, 2004 REF: CRR MMI-SPR-13599 Rashmi C N(Sasken) +// Writng the Current state of CF into ffs + flash_write(); + + } + }break; + case E_CPHS_SET_DV_STAT: + { //result of setting divert status + // UBYTE write_result; // RAVI + + TRACE_EVENT("Divert status set"); + cphs_get_divert_status(); //refresh divert status + + } + 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) + ShowMessage(parent, TxtChanged, TxtNull); + if (write_result == MFW_SIMOP_WRITE_ERR) + ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error" + } + cphs_get_als_info(&als_status);//refresh current line + cphs_get_divert_status(); //refresh divert status + } + 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: + { 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***********************/ + 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 + if ((info_numbers[info_num_level] = (T_MFW_CPHS_INFONUM_LIST*) ALLOC_MEMORY(sizeof(T_MFW_CPHS_INFONUM_LIST)))) + 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; + + 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; + + + /* + * 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; +} + +/******************************************************************************* + + $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 + char* Mailboxes[4]; + + Mailboxes[0] = MmiRsrcGetText(TxtLine1); + Mailboxes[1] =MmiRsrcGetText(TxtLine2); + Mailboxes[2] = MmiRsrcGetText(TxtFax); + Mailboxes[3] = 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; + + 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 + + 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 + { + if (type_of_list == MAILBOX_LIST) + { /*If we're editing*/ + 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[PHB_MAX_LEN]; + + memcpy(&cphs_voicemail_num, &cphs_voicemail_numbers.entries[ListData->ListPosition], sizeof(T_MFW_CPHS_ENTRY)); + memset(temp_number, 0, PHB_MAX_LEN); + + /*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 + strcat(temp_number, (char*)cphs_voicemail_num.number); + strcpy((char*)cphs_voicemail_num.number, temp_number); + } + callNumber(cphs_voicemail_num.number); + + } + + + } + else + { + //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***********************/ + 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); + } + } + + } + + } + + +} + +/******************************************************************************* + + $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) + { 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; +} + + +