FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiCPHS.c @ 662:8cd8fd15a095
SIM speed enhancement re-enabled and made configurable
TI's original code supported SIM speed enhancement, but Openmoko had it
disabled, and OM's disabling of speed enhancement somehow caused certain
SIM cards to start working which didn't work before (OM's bug #666).
Because our FC community is much smaller in year 2020 than OM's community
was in their day, we are not able to find one of those #666-affected SIMs,
thus the real issue they had encountered remains elusive. Thus our
solution is to re-enable SIM speed enhancement and simply wait for if
and when someone runs into a #666-affected SIM once again. We provide
a SIM_allow_speed_enhancement global variable that allows SIM speed
enhancement to be enabled or disabled per session, and an /etc/SIM_spenh
file in FFS that allows it to enabled or disabled on a non-volatile
basis. SIM speed enhancement is now enabled by default.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 24 May 2020 05:02:28 +0000 |
parents | 3c2acfa1a72f |
children |
line wrap: on
line source
/******************************************************************************* CONDAT (UK) ******************************************************************************** This software product is the property of Condat (UK) Ltd and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: Basic MMI $Project code: BMI (6349) $Module: 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; }