FreeCalypso > hg > leo2moko-debug
view g23m/condat/ms/src/bmi/MmiCPHS.c @ 23:b700c3cdd224
Trace UART driver: set 812500 baud instead of 406250 to make ext LCD out "work"
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 07 Sep 2015 00:23:04 +0000 |
parents | 509db1a7b7b8 |
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; }