view src/ui/bmi/mmiCPHS.c @ 75:8697f358f505

backlight rework: Condat light driver accepts levels The present change is another intermediate step on the path toward new FreeCalypso backlight handling. At this intermediate step the Condat light driver accepts 0-255 backlight levels driven by MFW, and puts them out on PWL on Luna development boards. At the same time on C139 it is now possible to turn on the display backlight with or without the keypad bl - the lsb of the 0-255 backlight level controls the keypad bl. MFW presently drives only 0 and 255 backlight levels, thus there is no visible behavioral change yet - but the plan for subsequent stages of this backlight rework is to add a dimmed backlight state (no keypad bl on C139) during active calls.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 24 Oct 2020 20:44:04 +0000
parents 67bfe9f274f6
children c0052fe355d3
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
 	Nov 27, 2006 OMAPS00098359 a0393213(R.Prabakar)
 	Description: CPHS 4.2 : Call Divert doesn't work properly for Line 2

       Oct 11, 2006 REF:OMAPS00098287  x0039928
       Description : CPHS 4.2: MMI variable als_status is not updated proplery with the SIM contents.
       Solution     : als_status update is deffered until the idle screen is displayed.
       		      
       May 30, 2006 REF:OMAPS00079650  a0393213 (R.Prabakar)
       Description : CPHS Call Forwarding feature implementation
       Solution     : As part of this implementation, E_CPHS_SET_DV_STAT and E_CPHS_GET_DV_STAT in cphs_mfw_cb()
       		      are modified

	May 26, 2006 ER: OMAPS00079607 x0012849 :Jagannatha M
	Description: CPHS: Display 'charge/Timers' menu based on AOC ( Advice of charge ) and support info numbers.
	Solution:Made the following changes
		       1. Aoc_flag variable is defined and it will be set based on the CSP information.
		       2. New function info_num_msg_cb() added to support info numbers.
		       
	May 30, 2006  DR: OMAPS00070657 x0pleela
	Description: CPHS feature on Locosto-Lite
	Solution: For ALS feature,
			a) Defined a new macro "MAX_LINE_NAME_LEN"
			b) Defined new structure "T_ALS_DATA" for editing Line 1 and 2 names
			c) Defined new flag "Als_flag" to store the staus of ALS bit from CSP data
			d) Added new functions cphs_Line_Edit_cb(), cphs_edit_line_exec_cb(), 
				cphs_edit_line_create(), cphs_edit_line1(), cphs_edit_line2(), 
				mmi_cphs_get_als_info(), mmi_cphs_get_als_info(), mmi_cphs_set_als_value(),
				mmi_cphs_get_als_value(), mmi_get_als_selectedLine()
	
	Jun 14, 2005 REF: MMI-FIX-30439 x0018858
   	Description: The homezone/cityzone tags were not being displayed properly.
   	Solution: Modified to save the tags properly in caches and also made the 
	appropriate modifications to update the same properly during mobility.

	Aug 16, 2004    REF: CRR 24323   Deepa M.D
	Bug:Clenup of sprintf used for tracing
	Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX

    	Jun 23, 2004        	REF: CRR MMI-SPR-13599  Rashmi C N(Sasken) 
  	Solution:			The CF state is maintained in flash. During bootup the CF icon in the idle screen
  					 is displayed depending upon its state in the ffs


//  May 31, 2004        REF: CRR 17291  xvilliva
//	Bug:	After power cycle the setting of the used line which have been made 
//			from the BMI is lost.
//	Fix:	1.The global g_pin2 is defined here.
//		2. sAT_PlusCLCK() is called while locking and unlocking ALS.
//		3. ALSPresent() is modified to call tAT_PercentALS() & qAT_PercentALS().
//		NOTE:- ALSPresent() was giving faulty status earlier.


  25/01/02			Original Condat(UK) BMI version. (MC)	
	   
 $End

*******************************************************************************/


/******************************************************************************
									      
				Include Files
									      
*******************************************************************************/

/* includes */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#if defined (NEW_FRAME)

#include "typedefs.h"
#include "vsi.h"
#include "pei.h"
#include "custom.h"
#include "gsm.h"

#else

#include "STDDEFS.H"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"

#endif
#include "mfw_sys.h"

#include "cus_aci.h"

#include "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
/* SPR#1428 - SH - New Editor changes */
#ifndef NEW_EDITOR
#include "mfw_edt.h"
#endif
#include "mfw_tim.h"
#include "mfw_phb.h"
#include "ksd.h"
#include "psa.h"
#include "mfw_sms.h"
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_lng.h"
#include "mfw_sat.h"
#include "mfw_kbd.h"
#include "mfw_nm.h"
#include "mfw_str.h"
#include "mfw_cphs.h"
#include "dspl.h"

#include "MmiMain.h"
#include "MmiDummy.h"
#include "MmiMmi.h"
#include "MmiDialogs.h"
#include "MmiLists.h"
#include "MmiDialogs.h"
#include "MmiMenu.h"
#include "MmiSoftKeys.h"
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
#include "ATBCommon.h"
#include "ATBDisplay.h"
#include "ATBEditor.h"
#include "AUIEditor.h"
#else
#include "MmiEditor.h"
#endif
#include "MmiBookShared.h"
#include "mmiSmsMenu.h"
#include "Mmiicons.h"
#include "mmiColours.h"

#include "MmiCPHS.h"
// Jun 23 2004        REF: CRR MMI-SPR-13599  Rashmi C N(Sasken) 
#include "mfw_ffs.h"
/* SPR759 - SH */
#ifdef MMI_HOMEZONE_ENABLED
#include "MmiHomezone.h"
#endif

/* 30th May,2006     OMAPS00079650     a0393213 (R.Prabakar)
    Description : CPHS Call Forwarding feature implementation*/
    
#include "MmiServices.h"
//x0pleela 08 June, 2006  DR:OMAPS00079607
//Including this header file to get the definition of getRoamingStatus()
#ifdef FF_CPHS
#include "MmiNetwork.h"
#endif



/******************************************************************************
									      
			       Definitions
									      
*******************************************************************************/
//#define CPHS_PROV_TEST /*Test to bypass the reading of the CPHS field from the SIM card*/
char g_pin2[MAX_PIN+1];//xvilliva SPR17291

typedef enum


{
	INFO_NUM_LIST,
	MAILBOX_LIST, 
	MAILBOX_LIST_CALL
}
	T_MENU_TYPE;
	

static MfwMnuAttr InfoNum_menuAttrib =
{
    &melody_menuArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu	    */
    (U8)-1, 				/* use default font	    */
    NULL,				/* with these items	    */
    0,					/* number of items     */
    COLOUR_LIST_XX, TxtNull, NULL, MNUATTRSPARE

};

typedef struct 
{
	 /* administrative data */

    T_MMI_CONTROL	mmi_control;
    T_MFW_HND		win;
    T_MFW_HND		parent_win;
#ifdef NEW_EDITOR
	T_AUI_EDITOR_DATA	editor_data;	/* SPR#1428 - SH - New Editor data */
#else /* NEW_EDITOR */
	T_EDITOR_DATA		editor_data;
#endif /* NEW_EDITOR */

    /* associated handlers */

    T_MFW_HND		kbd;
    T_MFW_HND		kbd_long;
    T_MFW_HND		menu;
	T_MFW_HND		menu_tim;
	UBYTE				status_of_timer; /* use for the keypadlock */

	T_MFW_HND mailbox_win;
	T_MFW_CPHS_ENTRY cphs_voicemail_num;
	T_MFW_CPHS_VC_STAT* cphs_voicemail_status;
	T_MFW_CPHS_STATUS cphs_status;
	T_MFW_CPHS_OP_NAME* operator_name;

}  T_MMI_CPHS_DATA;


typedef struct
{
  T_MMI_CONTROL    mmi_control;
  T_MFW_HND	   numbers_win; 				   /* MFW win handler	   */
  T_MFW_HND	   parent;
  T_MFW_HND	   melody_handler;	   /* MFW sms handler	   */
  unsigned char      local_status;
  ListMenuData	   * menu_list_data;
} T_INFO_NUM_INFO;

#ifdef FF_CPHS_REL4  
typedef struct
{
  T_MMI_CONTROL    mmi_control;
  T_MFW_HND	   msp_win; 				   /* MFW win handler	   */
  T_MFW_HND	   parent;
  ListMenuData	   * menu_list_data;
} T_MSP_INFO;

typedef struct
{
  T_MMI_CONTROL    mmi_control;
  T_MFW_HND	   mwis_win; 				   /* MFW win handler	   */
  T_MFW_HND	   parent;
  ListMenuData	   * menu_list_data;
} T_MWIS_INFO;

#endif

//x0pleela 23 May, 2006  DR: OMAPS00070657
#ifdef FF_CPHS
#define MAX_LINE_NAME_LEN (20+1)

typedef struct 
{
	 /* administrative data */

    T_MMI_CONTROL	mmi_control;
    T_MFW_HND		win;
    T_MFW_HND		parent_win;
    T_MFW_HND		    input_number_win;
#ifndef NEW_EDITOR
	MfwEdtAttr			edt_attr_name;
#endif /* NEW_EDITOR */
UBYTE				edt_buf_name[MAX_LINE_NAME_LEN];
}  T_ALS_DATA;


#endif

#define E_INIT 1



#define CPHS_TELESERVICES_BYTE_VALUE	0x06
#define ALS_MASK						0x80

#define CPHS_INFONUMS_BYTE_VALUE		0xC0
#define INFONUM_MASK					0xFF

//x0pleela 23 May, 2006  DR: OMAPS00070657
#ifdef FF_CPHS
static UBYTE Als_flag; //Stores the status of ALS from CSP data
#endif

#ifdef FF_CPHS_REL4
static BOOL MSP_flag;
BOOL msp_register;
UBYTE msp_reg_profid;
UBYTE prof_sel;
BOOL interrogate= 0;
T_MFW_CPHS_MSP_INFO* msp_info;
BOOL mwis_flag = FALSE;
#endif




/******************************************************************************
									      
			       Static Global variables
									      
*******************************************************************************/

static T_MFW_HND cphs_wait_dialog_win = NULL;
static T_DISPLAY_DATA 	mmi_cphs_wait_dialog_data = {0};
static T_MFW_CPHS_ENTRY cphs_voicemail_num;
static T_MFW_CPHS_INFONUM_ENTRY current_info_num;
static T_MFW_CPHS_VC_NUM cphs_voicemail_numbers;
static T_MFW_CPHS_VC_STAT* cphs_voicemail_status;
static T_MFW_CPHS_STATUS cphs_status = CPHS_NotPresent;
static T_MFW_CPHS_OP_NAME operator_name;
static T_MFW_CPHS_DV_STAT call_forwarding_status;
#ifdef FF_CPHS_REL4
T_MFW_CPHS_REL4_DV_STAT call_forwarding_status_rel4;
static T_MFW_CPHS_REL4_MBI cphs_rel4_mbi; /*used to cache mbi info-should be updated immediately whenever mbi changes*/
static T_MFW_CPHS_REL4_MBDN cphs_rel4_mbdn; /*used to cache mbdn info-should be updated immediately whenever mbdn changes*/
static T_MFW_HND mailbox_waiting_dialog;
static T_MFW_CPHS_REL4_MAILBOX_TYPE mailbox_type; /*used to store the mailbox type for which an action is performed*/
#endif
static T_MFW_CPHS_CSP customer_service_profile;
static T_MFW_CPHS_INFONUM_LIST* info_numbers[4]= {NULL, NULL, NULL, NULL};
// Oct 11, 2006 REF:OMAPS00098287  x0039928
T_MFW_CPHS_ALS_STATUS als_status;
BOOL als_bootup;

static UBYTE info_num_level;
static USHORT info_num_index;

static T_MENU_TYPE type_of_list = INFO_NUM_LIST;

/******************************************************************************
									      
			       Function Prototypes
									      
*******************************************************************************/
int InfoNumbers2(void); // RAVI

int show_cphs_mb_number(T_MFW_CPHS_ENTRY* mb_number);
static void mailbox_edit_cb( T_MFW_HND win, USHORT Identifier,UBYTE reason);
static int cphs_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
#ifdef FF_CPHS_REL4
static int msp_cb (T_MFW_EVENT event, T_MFW_WIN * win);
#endif
int cphs_mfw_cb(T_MFW_EVENT event, void* para);
void cphs_dialog_cb(T_MFW_HND win, USHORT e,  SHORT identifier, void *parameter);
T_MFW_HND mmi_cphs_create(T_MFW_HND parent_window);
T_MFW_HND	edit_mailbox_start(T_MFW_HND parent_window);

static T_MFW_HND  buildInfoNumberMenu( MfwHnd parent_window);
void info_num_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
void InfonumList_cb(T_MFW_HND * Parent, ListMenuData * ListData);
static void InfoNum_destroy(MfwHnd own_window);
static int info_num_win_cb (MfwEvt e, MfwWin *w) ;
void info_num_display_cb(T_MFW_HND win, USHORT identifier, UBYTE reason);
EXTERN void  cphs_support_check(void);  // ADDED BY RAVI - 29-11-2005

//x0pleela 23 May, 2006  DR:OMAPS00070657
#ifdef FF_CPHS
void mmi_cphs_get_als_info( void );

/* x0045876, 14-Aug-2006 (WR - function declared implicitly)*/
EXTERN void setAOCflag(int aocValue);
#endif




/******************************************************************************
									      
			       Public functions
									      
*******************************************************************************/
/*******************************************************************************

 $Function:	mmi_cphs_init()

 $Description:	initiatialise cphs module
 
 $Returns:		mfw handle

 $Arguments:	none
		
*******************************************************************************/
T_MFW_HND mmi_cphs_init()
{	
	T_MFW_HND status;

	TRACE_FUNCTION("mmi_cphs_init()");
	cphs_init();			//initialise MFW CPHS module

	status = cphs_create(NULL, 0xFFFFF, cphs_mfw_cb); //create handler for MFW CPHS EVENTS
	
	info_num_level = 0;
	info_num_index = 1;


#ifndef FF_CPHS_REL4
#ifdef FF_CPHS
// Oct 11, 2006 REF:OMAPS00098287  x0039928
// Fix: als update is done in idle_draw_main_idle
//	mmi_cphs_get_als_info();
       als_bootup = TRUE;
#else
	cphs_get_als_info(&als_status);
#endif
#endif

	return status;
}

void mmi_cphs_refresh()
{	
//x0pleela 02 June, 2006  DR: OMAPS00079688
//Initialising CPHS
#ifdef FF_CPHS
	if (sAT_PercentCPHS(CMD_SRC_LCL,1) /* 1 => ACI_CPHS_INIT */
                  NEQ AT_EXCT)
      {
                TRACE_ERROR("Abnormal error Not able to turn on CPHS in ACI");
      }
#endif
	cphs_support_check();	//check if cphs supported
	/*retrieval of other values set off by callback function cphs_mfw_cb
	so when the CPHS status is retrieved, the operator name is then requested and 
	when it has returned, then the CSP is requested etc etec  */
		
}
/*******************************************************************************

 $Function:	cphs_E_plus_ALS_supported

 $Description:	returns TRUE if SIM is from E-plus, FALSE otherwise 
 
 $Returns:		status BOOL

 $Arguments:	none
		
*******************************************************************************/
BOOL cphs_E_plus_ALS_supported()
{	char IMSI[17];
	char MNC_MCC[6];
	char E_plus_MNC_MCC[] = "26203";
	int i=0;
	T_ACI_RETURN result;
//	char debug[40];  // RAVI
	
	result = qAT_PlusCIMI(CMD_SRC_LCL, IMSI);
	while (result != AT_CMPL  && i < 5)
	{
		i++;
	}
		
	strncpy(MNC_MCC, IMSI, 5);
	MNC_MCC[5] =0;//terminate string
	TRACE_EVENT("E-plus IMSI?");
	TRACE_EVENT(MNC_MCC);
	if (!strncmp(E_plus_MNC_MCC, MNC_MCC, 5)) //if e-plus IMSI
	{	
		return TRUE;

	}
	else
	{	TRACE_EVENT("Not e-plus IMSI");
		return FALSE;
	}

}
/*******************************************************************************

 $Function:	cphs_als_status

 $Description:	display which ALS line is enabled
 
 $Returns:		status int

 $Arguments:	menu, tag (not used)
		
*******************************************************************************/
int cphs_als_status(MfwMnu* m, MfwMnuItem* i)
{	T_MFW_HND		parent	     = mfwParent( mfw_header());
	UBYTE line;
	line = GetAlsLine();
#ifndef CPHS_PROV_TEST
	if (CphsPresent() == TRUE || cphs_E_plus_ALS_supported())
#endif
	{
		if (als_status.selectedLine != MFW_SERV_NotPresent)
			switch(line)
			{
				case (MFW_SERV_LINE1): ShowMessage(parent, TxtLine1, TxtActivated);break;
				case (MFW_SERV_LINE2): ShowMessage(parent, TxtLine2, TxtActivated);break;
				default: ShowMessage(parent, TxtReadError, TxtNull);break;
			}
		else
			ShowMessage(parent, TxtReadError, TxtNull);
	}
#ifndef CPHS_PROV_TEST
	else
		ShowMessage(parent, TxtNotSupported, TxtNull);
#else
		cphs_support_check();
#endif

	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:	       cphs_lock_als

 $Description:	       Lock ALS Line Selection from menu 
 
 $Returns:		status int

 $Arguments:	       menu, tag (not used)
		
*******************************************************************************/
int cphs_lock_als(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND		parent	     = mfwParent( mfw_header());
	T_MFW			retVal;

	TRACE_FUNCTION("cphs_lock_als");

#ifndef CPHS_PROV_TEST
	if (!ALSPresent(NULL, NULL, NULL))
#endif
	{
		//xvilliva SPR17291 
		//We call sAT_PlusCLCK(), to update the value in FFS. This is the value used by
		//ACI to estabilish a call on Line1 or Line2.
#ifndef FF_2TO1_PS 
            /*a0393213 warnings removal - CLCK_FAC_Al changed to FAC_Al as a result of ACI enum change*/
		sAT_PlusCLCK(CMD_SRC_LCL,FAC_Al,CLCK_MOD_Lock,g_pin2,
				((als_status.selectedLine == MFW_SERV_LINE1) ? CLASS_Vce : CLASS_AuxVce));//
#endif
		retVal = cphs_set_als_status(MFW_LINE_LOCKED);
	//x0pleela 11 June, 2006  DR:OMAPS00079692
	 //changed from CPHS_OK to MFW_CPHS_OK
		if (retVal == MFW_CPHS_OK)
		{
			als_status.status = MFW_LINE_LOCKED;
			ShowMessage(parent, TxtAlsLocked, TxtNull);
		}
	}
#ifndef CPHS_PROV_TEST
	else
		ShowMessage(parent, TxtNotSupported, TxtNull);
#endif

	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:	       cphs_unlock_als

 $Description:	       Unlock ALS Line Selection from menu 
 
 $Returns:		status int

 $Arguments:	       menu, tag (not used)
		
*******************************************************************************/
int cphs_unlock_als(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND		parent	     = mfwParent( mfw_header());
	T_MFW			retVal;

	TRACE_FUNCTION("cphs_unlock_als");

#ifndef CPHS_PROV_TEST
	if (!ALSPresent(NULL, NULL, NULL))
#endif
	{
		//xvilliva SPR17291
		//We call sAT_PlusCLCK(), to update the value in FFS. This is the value used by
		//ACI to estabilish a call on Line1 or Line2. 
#ifndef FF_2TO1_PS
             /*a0393213 warnings removal - CLCK_FAC_Al changed to FAC_Al as a result of ACI enum change*/
		sAT_PlusCLCK(CMD_SRC_LCL,FAC_Al,CLCK_MOD_Unlock,g_pin2,((als_status.selectedLine == MFW_SERV_LINE1) ? CLASS_Vce : CLASS_AuxVce));//
#endif
		retVal = cphs_set_als_status(MFW_LINE_UNLOCKED);
	//x0pleela 11 June, 2006  DR:OMAPS00079692
	 //changed from CPHS_OK to MFW_CPHS_OK
		if (retVal == MFW_CPHS_OK)
		{
			als_status.status = MFW_LINE_UNLOCKED;
			ShowMessage(parent, TxtAlsUnlocked, TxtNull);
		}
	}
#ifndef CPHS_PROV_TEST
	else
		ShowMessage(parent, TxtNotSupported, TxtNull);
#endif

	return MFW_EVENT_CONSUMED;
}

#ifdef FF_CPHS_REL4

/*******************************************************************************

 $Function:     item_flag_isMWISFilePresent

 $Description:  return 0 if MWIS file is present else 1
 
*******************************************************************************/
int item_flag_isMWISFilePresent(struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi)
{
  TRACE_FUNCTION("item_flag_isMBDNFilePresent");
  if(isMWISFilePresent())
  	return 0;
  else
  	return 1;
}

/*******************************************************************************

 $Function:     item_flag_isMBDNFileNotPresent

 $Description:  return 1 if MBDN file is present else 0
 
*******************************************************************************/
int item_flag_isMBDNFileNotPresent(struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi)
{
  TRACE_FUNCTION("item_flag_isMBDNFilePresent");
  if(isMBDNFilePresent())
  	return 1;
  else
  	return 0;
}
/*******************************************************************************

 $Function:     item_flag_isMBDNFilePresent

 $Description:  return 0 if MBDN file is present else 1
 
*******************************************************************************/

int item_flag_isMBDNFilePresent(struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi)
{
  TRACE_FUNCTION("item_flag_isMBDNFileNotPresent");
  if(isMBDNFilePresent())
  	return 0;
  else
  	return 1;
}


/*******************************************************************************

 $Function:	       mmi_msp_interrogate_done

 $Description:	       Interrogation is finished. 
 
 $Returns:		void

 $Arguments:	       void
		
*******************************************************************************/

void mmi_msp_interrogate_done(void)
{
	TRACE_FUNCTION("mmi_msp_interrogate_done()");
	
	/*a0393213 cphs rel4*/
	if(isCFISFilePresent())
	cphs_get_divert_status();

	/*invalidate the local cache of mbi and mbdn*/
	cphs_rel4_mbi.valid=0x00;
	cphs_rel4_mbdn.valid=0x00;
}

/*******************************************************************************

 $Function:	       mmi_msp_interrogate

 $Description:	       Start MSP interrogation
 
 $Returns:		void

 $Arguments:	       void
		
*******************************************************************************/

void mmi_msp_interrogate(void)
{
	char actstr[8];
	TRACE_FUNCTION("mmi_msp_interrogate()");
	
	interrogate = 1;
	strcpy(actstr, "*#59#");
       ss_execute_transaction((UBYTE*)actstr, 0);
}

/*******************************************************************************

 $Function:	       msp_cb

 $Description:	      Window event handler
 
 $Returns:		status int

 $Arguments:	       event, window handler
		
*******************************************************************************/

static int mwis_cb (MfwEvt e, MfwWin *w)    /* yyy window event handler */
{
	TRACE_EVENT ("mwis_cb()");
	
	switch (e)
	{
	case MfwWinVisible:  /* window is visible  */
		break;
	case MfwWinFocussed: /* input focus / selected	 */	
	case MfwWinDelete:   /* window will be deleted	 */   
		
	default:	    
		return MFW_EVENT_REJECTED;
	}
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:	       msp_cb

 $Description:	      Window event handler
 
 $Returns:		status int

 $Arguments:	       event, window handler
		
*******************************************************************************/

static int msp_cb (MfwEvt e, MfwWin *w)    /* yyy window event handler */
{
	TRACE_EVENT ("msp_cb()");
	
	switch (e)
	{
	case MfwWinVisible:  /* window is visible  */
		break;
	case MfwWinFocussed: /* input focus / selected	 */	
	case MfwWinDelete:   /* window will be deleted	 */   
		
	default:	    
		return MFW_EVENT_REJECTED;
	}
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:	       MSPPresent

 $Description:	       MSP is provisioned.
 
 $Returns:		status USHORT

 $Arguments:	       menu tag, attribute, item tag 
		
*******************************************************************************/

USHORT MSPPresent( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	TRACE_EVENT_P1("MSPPresent - %d ", msp_info->count);
	if(MSP_flag)
		return 0;
	else
		return 1;
}

/*******************************************************************************

 $Function:	       cphs_select_profile

 $Description:	       Select a profile for registration
 
 $Returns:		void

 $Arguments:	       profile id
		
*******************************************************************************/

void cphs_select_profile(int pf_id)
{
	char seq[6];

	TRACE_EVENT_P1("cphs_select_profile - %d", pf_id);
	strcpy(seq,"*59");
	switch(pf_id)
	{
		case 1:
			strcat(seq,"1");
			break;
		case 2:
			strcat(seq,"2");
			break;
		case 3:
			strcat(seq,"3");
			break;
		case 4:
			strcat(seq,"4");
			break;
		default:
			break;
	}
	strcat(seq,"#");

	msp_register = TRUE;
	msp_reg_profid = pf_id;
	sAT_Dn(CMD_SRC_LCL,seq,-1,-1,-1);
}

/*******************************************************************************

 $Function:	       msp_menu_destroy

 $Description:	       Destroy menu
 
 $Returns:		void

 $Arguments:	       window handler
		
*******************************************************************************/

static void msp_menu_destroy(MfwHnd window)
{
	T_MFW_WIN     * win_data  = ((T_MFW_HDR *)window)->data;
	T_MSP_INFO * data = (T_MSP_INFO *)win_data->user;

	TRACE_FUNCTION ("msp_menu_destroy");

	if (window == NULL)
	{
		return;
	}

	if (data)
	{
		win_delete(data->msp_win);
		
		/*
		** Free Memory
		*/
		mfwFree((void *)data, sizeof (T_MSP_INFO));
	}
}

/*******************************************************************************

 $Function:	       mwis_menu_destroy

 $Description:	       Destroy menu
 
 $Returns:		void

 $Arguments:	       window handler
		
*******************************************************************************/

static void mwis_menu_destroy(MfwHnd window)
{
	T_MFW_WIN     * win_data  = ((T_MFW_HDR *)window)->data;
	T_MWIS_INFO * data = (T_MWIS_INFO *)win_data->user;

	TRACE_FUNCTION ("mwis_menu_destroy");

	if (window == NULL)
	{
		return;
	}

	if (data)
	{
		win_delete(data->mwis_win);
		
		/*
		** Free Memory
		*/
		mfwFree((void *)data, sizeof (T_MWIS_INFO));
	}
}

/*******************************************************************************

 $Function:	       MwisList_cb

 $Description:	       Callback for MWIS list
 
 $Returns:		void

 $Arguments:	       parent window, list data
		
*******************************************************************************/

void MwisList_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
	T_MFW_WIN			*win_data	= ((T_MFW_HDR *)Parent)->data;
	T_MWIS_INFO *data		= (T_MWIS_INFO *)win_data->user;
	TRACE_FUNCTION ("MwisList_cb()");

	if ((ListData->Reason EQ LISTS_REASON_BACK) ||
	     (ListData->Reason EQ LISTS_REASON_CLEAR) ||
	     (ListData->Reason EQ LISTS_REASON_HANGUP))
	{
		/*
		** Destroy the window --- Not sure if this is required! ... leave it out for now
		*/
		listsDestroy(ListData->win);

		/*
		** Free the memory set aside for ALL the devices to be listed.
		*/
		if (data->menu_list_data != NULL)
		{
			FREE_MEMORY ((void *)data->menu_list_data->List, (U16)(4 * sizeof (T_MFW_MNU_ITEM)));
			FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
		}

		mwis_menu_destroy(data->mwis_win);
		
	}
}

/*******************************************************************************

 $Function:	       mwis_exec_cb

 $Description:	       Dialog function to display the mwis list
 
 $Returns:		void

 $Arguments:	       window handler, event, value and parameter
		
*******************************************************************************/

void mwis_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	T_MFW_WIN      * win_data = ((T_MFW_HDR *) win)->data;
	T_MWIS_INFO * data = (T_MWIS_INFO*)win_data->user;
	T_MFW_CPHS_REL4_MWIS * mwis_ptr;
	int i;
	char temp[4][50];

	switch (event)
	{
	case E_INIT:

		TRACE_EVENT(">>>> mwis_exec_cb() Event:E_INIT");

		 /* initialization of administrative data */


		data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));

		if(data->menu_list_data == 0)
		{
			TRACE_EVENT("Failed memory alloc 1 ");
			return;
		}
	
		data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( 4 * sizeof(T_MFW_MNU_ITEM) );

		if(data->menu_list_data->List == 0)
		{
			TRACE_EVENT("Failed memory alloc 2");
			return;
		}

			mwis_ptr = get_mwis_stat(prof_sel);

			sprintf(temp[0],"Voice Mesage - %d ", mwis_ptr->voicemail);
			mnuInitDataItem(&data->menu_list_data->List[0]);
			data->menu_list_data->List[0].flagFunc = item_flag_none;
			data->menu_list_data->List[0].str  = temp[0];

			sprintf(temp[1],"Fax Message - %d ", mwis_ptr->fax);
			mnuInitDataItem(&data->menu_list_data->List[1]);
			data->menu_list_data->List[1].flagFunc = item_flag_none;
			data->menu_list_data->List[1].str  = temp[1];

			sprintf(temp[2],"Electronic Message - %d ", mwis_ptr->electronic);
			mnuInitDataItem(&data->menu_list_data->List[2]);
			data->menu_list_data->List[2].flagFunc = item_flag_none;
			data->menu_list_data->List[2].str  = temp[2];

			sprintf(temp[3],"Other Message - %d ", mwis_ptr->other);
			mnuInitDataItem(&data->menu_list_data->List[3]);
			data->menu_list_data->List[3].flagFunc = item_flag_none;
			data->menu_list_data->List[3].str  = temp[3];

		data->menu_list_data->ListLength = 4;
		data->menu_list_data->ListPosition = 0;
		data->menu_list_data->CursorPosition = 0;
		data->menu_list_data->SnapshotSize = 4;
		data->menu_list_data->Font = 0;
		data->menu_list_data->LeftSoftKey = TxtNull;
		data->menu_list_data->RightSoftKey = TxtSoftBack;
		data->menu_list_data->KeyEvents = KEY_RIGHT;
		data->menu_list_data->Reason = 0;
		data->menu_list_data->Strings = TRUE;
		data->menu_list_data->Attr   = &InfoNum_menuAttrib;
		data->menu_list_data->autoDestroy    = FALSE;
		
		/* Create the dynamic menu window */
	    listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)MwisList_cb,0);

		break;
	default:
		break;
		}

}

/*******************************************************************************

 $Function:	       mmi_build_mwis_menu

 $Description:	       Create mwis menu
 
 $Returns:		window handler

 $Arguments:	       parent window handler
		
*******************************************************************************/

static T_MFW_HND mmi_build_mwis_menu( MfwHnd parent_window)
{
	T_MWIS_INFO *  data = (T_MWIS_INFO *)ALLOC_MEMORY (sizeof (T_MWIS_INFO));
	T_MFW_WIN  * win;
	TRACE_FUNCTION("mmi_build_mwis_menu");

    /*
     * Create window handler
     */

    data->mwis_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mwis_cb);
    if (data->mwis_win EQ NULL)
	{
	   return NULL;
	}

	TRACE_EVENT(">>>> mwis menu window created: " );
    /* 
     * connect the dialog data to the MFW-window
     */

    data->mmi_control.dialog = (T_DIALOG_FUNC)mwis_exec_cb;
    data->mmi_control.data   = data;
    win 		     = ((T_MFW_HDR *)data->mwis_win)->data;
    win->user		     = (void *)data;
    data->parent	     = parent_window;
	winShow(data->mwis_win);
    /*
     * return window handle
     */

     return data->mwis_win;
}


/*******************************************************************************

 $Function:	       MspList_cb

 $Description:	       Callback for MSP list
 
 $Returns:		void

 $Arguments:	       parent window, list data
		
*******************************************************************************/

void MspList_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
	T_MFW_WIN			*win_data	= ((T_MFW_HDR *)Parent)->data;
	T_MSP_INFO *data		= (T_MSP_INFO *)win_data->user;
	TRACE_FUNCTION ("MspList_cb()");

	if ((ListData->Reason EQ LISTS_REASON_BACK) ||
	     (ListData->Reason EQ LISTS_REASON_CLEAR) ||
	     (ListData->Reason EQ LISTS_REASON_HANGUP))
	{
		/*
		** Destroy the window --- Not sure if this is required! ... leave it out for now
		*/
		listsDestroy(ListData->win);

		/*
		** Free the memory set aside for ALL the devices to be listed.
		*/
		if (data->menu_list_data != NULL)
		{
			FREE_MEMORY ((void *)data->menu_list_data->List, (U16)(msp_info->count * sizeof (T_MFW_MNU_ITEM)));
			FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
		}

		msp_menu_destroy(data->msp_win);
		mwis_flag = FALSE;
	}
	else if(ListData->Reason EQ LISTS_REASON_SELECT)
	  {
		TRACE_EVENT_P1("list position is %d",ListData->ListPosition);
		if(mwis_flag == FALSE)
		cphs_select_profile(ListData->ListPosition);
		else
		{
			T_MFW_HND win;
			T_MFW_HND parent_win = mfw_parent(mfw_header());

			TRACE_FUNCTION("build_mwis_list()");

			mwis_flag = TRUE;
			prof_sel = ListData->ListPosition;
			win = mmi_build_mwis_menu(parent_win);
			if (win NEQ NULL)
			{
				SEND_EVENT (win, E_INIT, 0, 0);
			}
		}
	  }
}


/*******************************************************************************

 $Function:	       msp_exec_cb

 $Description:	       Dialog function to display the msp list
 
 $Returns:		void

 $Arguments:	       window handler, event, value and parameter
		
*******************************************************************************/

void msp_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	T_MFW_WIN      * win_data = ((T_MFW_HDR *) win)->data;
	T_MSP_INFO* data = (T_MSP_INFO*)win_data->user;
	int i;

	switch (event)
	{
	case E_INIT:

		TRACE_EVENT(">>>> msp_exec_cb() Event:E_INIT");

		 /* initialization of administrative data */


		data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));

		if(data->menu_list_data == 0)
		{
			TRACE_EVENT("Failed memory alloc 1 ");
			return;
		}
	
		data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( msp_info->count * sizeof(T_MFW_MNU_ITEM) );

		if(data->menu_list_data->List == 0)
		{
			TRACE_EVENT("Failed memory alloc 2");
			return;
		}

		for (i = 0; i < msp_info->count; i++)
		{
			mnuInitDataItem(&data->menu_list_data->List[i]);
			data->menu_list_data->List[i].flagFunc = item_flag_none;
			data->menu_list_data->List[i].str  = (char *)msp_info->profile[i].alpha;
		}

		data->menu_list_data->ListLength =msp_info->count;
		data->menu_list_data->ListPosition = 1;
		data->menu_list_data->CursorPosition = 1;
		data->menu_list_data->SnapshotSize = msp_info->count;
		data->menu_list_data->Font = 0;
		data->menu_list_data->LeftSoftKey = TxtSoftSelect;
		data->menu_list_data->RightSoftKey = TxtSoftBack;
		data->menu_list_data->KeyEvents = KEY_ALL;
		data->menu_list_data->Reason = 0;
		data->menu_list_data->Strings = TRUE;
		data->menu_list_data->Attr   = &InfoNum_menuAttrib;
		data->menu_list_data->autoDestroy    = FALSE;
		
		/* Create the dynamic menu window */
	    listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)MspList_cb,0);

		break;
	default:
		break;
		}

}


/*******************************************************************************

 $Function:	       mmi_build_msp_menu

 $Description:	       Create MSP menu
 
 $Returns:		window handler

 $Arguments:	       parent window handler
		
*******************************************************************************/

static T_MFW_HND mmi_build_msp_menu( MfwHnd parent_window)
{
	T_MSP_INFO *  data = (T_MSP_INFO *)ALLOC_MEMORY (sizeof (T_MSP_INFO));
	T_MFW_WIN  * win;
	TRACE_FUNCTION("mmi_build_msp_menu");

    /*
     * Create window handler
     */

    data->msp_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)msp_cb);
    if (data->msp_win EQ NULL)
	{
	   return NULL;
	}

	TRACE_EVENT(">>>> msp menu window created: " );
    /* 
     * connect the dialog data to the MFW-window
     */

    data->mmi_control.dialog = (T_DIALOG_FUNC)msp_exec_cb;
    data->mmi_control.data   = data;
    win 		     = ((T_MFW_HDR *)data->msp_win)->data;
    win->user		     = (void *)data;
    data->parent	     = parent_window;
	winShow(data->msp_win);
    /*
     * return window handle
     */

     return data->msp_win;
}

/*******************************************************************************

 $Function:	       build_profile_list

 $Description:	       generate profile list
 
 $Returns:		status int

 $Arguments:	       menu, menu item
		
*******************************************************************************/

int build_profile_list(MfwMnu* m, MfwMnuItem* i)
{
		T_MFW_HND win;
		T_MFW_HND parent_win = mfw_parent(mfw_header());

		TRACE_FUNCTION("build_profile_list()");
		
		win = mmi_build_msp_menu(parent_win);
		if (win NEQ NULL)
		{
		SEND_EVENT (win, E_INIT, 0, 0);
		}
		return MFW_EVENT_CONSUMED;
}

int build_profile_list1(MfwMnu* m, MfwMnuItem* i)
{
		T_MFW_HND win;
		T_MFW_HND parent_win = mfw_parent(mfw_header());

		TRACE_FUNCTION("build_profile_list()");

		mwis_flag = TRUE;
		
		win = mmi_build_msp_menu(parent_win);
		if (win NEQ NULL)
		{
		SEND_EVENT (win, E_INIT, 0, 0);
		}
		return MFW_EVENT_CONSUMED;
}

#endif
/*******************************************************************************

 $Function:	cphs_line1_select

 $Description:	Enable ALS Line1 from menu 
 
 $Returns:		status int

 $Arguments:	menu, tag (not used)
		
*******************************************************************************/
int cphs_line1_select(MfwMnu* m, MfwMnuItem* i)
{	
	T_MFW_HND		parent	     = mfwParent( mfw_header());
	TRACE_FUNCTION("cphs_line1_select");
#ifndef CPHS_PROV_TEST
	if (!ALSPresent(NULL, NULL, NULL))
#endif
	{	cphs_select_line(MFW_SERV_LINE1);
		/*cphs_get_divert_status();*//*a0393213 - the call forward icon is now shown taking both the lines into consideration*/
	}
#ifndef CPHS_PROV_TEST
	else
		ShowMessage(parent, TxtNotSupported, TxtNull);
#endif
	return MFW_EVENT_CONSUMED;
}
/*******************************************************************************

 $Function:	cphs_line2_select

 $Description:	Enable ALS Line2 from menu 
 
 $Returns:		status int

 $Arguments:	menu, tag (not used)
		
*******************************************************************************/
int cphs_line2_select(MfwMnu* m, MfwMnuItem* i)
{	

	T_MFW_HND		parent	     = mfwParent( mfw_header());
	TRACE_FUNCTION("cphs_line2_select");
#ifndef CPHS_PROV_TEST
	if (!ALSPresent(NULL, NULL, NULL))
#endif
	{	
		cphs_select_line(MFW_SERV_LINE2);
		/*cphs_get_divert_status();*//*a0393213 - the call forward icon is now shown taking both the lines into consideration*/
	}
#ifndef CPHS_PROV_TEST
	else
		ShowMessage(parent, TxtNotSupported, TxtNull);
#endif
	return MFW_EVENT_CONSUMED;
}

//x0pleela 23 May, 2006  DR: OMAPS00070657
#ifdef FF_CPHS
/*******************************************************************************

 $Function:    	cphs_Line_Edit_cb
 
 $Description:	Callback function for  Line rename editor

 $Returns:		none

 $Arguments:	win - current window
 				Identifier - unique id
 				reason - event cause
*******************************************************************************/

static void cphs_Line_Edit_cb(T_MFW_HND win, USHORT Identifier, SHORT reason)
{	
	T_MFW_WIN   * win_data = ((T_MFW_HDR *) win)->data;
	T_ALS_DATA* data     = (T_ALS_DATA *)win_data->user;
      T_DISPLAY_DATA   display_info;
      
switch (reason)
	{
	       case INFO_KCD_ALTERNATELEFT:
		case INFO_KCD_LEFT:
                           	{
                           	if( Identifier == LINE1 )
	                           	strcpy(FFS_flashData.line1,(char *)data->edt_buf_name);
				else
					strcpy(FFS_flashData.line2,(char *)data->edt_buf_name);

                           	flash_write();


                           	dlg_initDisplayData_TextId(&display_info, TxtNull, TxtNull,   TxtDone, TxtNull, COLOUR_STATUS_WELCOME);
		
				dlg_initDisplayData_events( &display_info, NULL, TWO_SECS, KEY_ALL );

		  		info_dialog(win,&display_info);
		  		
		  #ifdef NEW_EDITOR
			AUI_edit_Destroy(data->input_number_win);
		#else /* NEW_EDITOR */
			editor_destroy(data->input_number_win);
		#endif /* NEW_EDITOR */
			data->input_number_win = 0;
		//dspl_ClearAll();

		
		winDelete(win);
		}
            break;
              case INFO_KCD_RIGHT:
		case INFO_KCD_HUP:
				{
		/* SPR#1428 - SH - New Editor changes */
		#ifdef NEW_EDITOR
			AUI_edit_Destroy(data->input_number_win);
		#else /* NEW_EDITOR */
			editor_destroy(data->input_number_win);
		#endif /* NEW_EDITOR */
			data->input_number_win = 0;
		//dspl_ClearAll();
		winDelete(win);
		
			}
			break;

		default:
			TRACE_EVENT("Err: Default");
			break;
                           
                           
                           }   
}

static void cphs_edit_line_exec_cb(T_MFW_HND win, USHORT event, SHORT identifier, void *parameter)
{	
    T_MFW_WIN      * win_data = ((T_MFW_HDR *) win)->data;
    T_ALS_DATA* data = (T_ALS_DATA *)win_data->user;
#ifdef NEW_EDITOR
	T_AUI_EDITOR_DATA editor_data;	/* SPR#1428 - SH - New Editor data */
#else
	T_EDITOR_DATA editor_data;
#endif
	if( identifier==LINE1 )
		strcpy((char *) data->edt_buf_name,(char*)MmiRsrcGetText(TxtLine1));
	else
		strcpy((char *) data->edt_buf_name,(char*)MmiRsrcGetText(TxtLine2));
		
	TRACE_FUNCTION ("cphs_edit_line_exec_cb()");

	switch (event)
	{
		case E_INIT:
			
	#ifdef NEW_EDITOR
			AUI_edit_SetDefault(&editor_data);
			AUI_edit_SetDisplay(&editor_data, PHNO_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT);
			AUI_edit_SetEvents(&editor_data, identifier, FALSE, FOREVER, (T_AUI_EDIT_CB)cphs_Line_Edit_cb);
			AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, NULL);
			AUI_edit_SetAltTextStr(&editor_data, 1, TxtSoftOK, TRUE, TxtSoftBack);
			AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA, ED_CURSOR_NONE);
			AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII,(UBYTE *) data->edt_buf_name, MAX_LINE_NAME_LEN);
			data->input_number_win=AUI_edit_Start(data->win, &editor_data);
#else /* NEW_EDITOR */

			SmsSend_loadEditDefault(&editor_data);

			bookSetEditAttributes( PHNO_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, 
			(char *) data->edt_data.NumberBuffer, /*MAX_SEARCH_CHAR*/NUMBER_LENGTH, &editor_data.editor_attr);
			editor_data.editor_attr.text     = (char *)data->edt_buf_name; 

			editor_data.editor_attr.size     = MAX_LINE_NAME_LEN; 

			editor_data.TextId               = TxtNull;  				 							  
			editor_data.LeftSoftKey          = TxtSoftOK;
			editor_data.AlternateLeftSoftKey = TxtSoftOK;
			editor_data.RightSoftKey         = TxtDelete;
			editor_data.Identifier           = identifier ; 
			editor_data.mode				 = E_EDIT_DIGITS_MODE;
			editor_data.Callback             = (T_EDIT_CB)cphs_Line_Edit_cb;
			editor_data.destroyEditor		 = FALSE;
			data->input_number_win =editor_start(data->win, &editor_data);  /* start the editor */ 


			/* SPR#1428 - SH - New Editor changes */
			
#endif
			
			break;
		default:
			TRACE_EVENT("Err: Default");
			break;
	}
}

/*******************************************************************************

 $Function:    	cphs_edit_line_create

 $Description:	Create a window for entering the text
 
 $Returns:		window handle

 $Arguments:	parent_window - parent window.
 				
*******************************************************************************/


static T_MFW_HND cphs_edit_line_create(MfwHnd parent_window)
{
	T_ALS_DATA* data = (T_ALS_DATA *)ALLOC_MEMORY (sizeof (T_ALS_DATA));
	T_MFW_WIN  * win;

	TRACE_FUNCTION ("cphs_edit_line_create()");

	// Create window handler
	data->win = win_create (parent_window, 0, E_WIN_VISIBLE, NULL);
	if (data->win EQ NULL)
	{
		return NULL;
	}

	// connect the dialog data to the MFW-window
	data->mmi_control.dialog = (T_DIALOG_FUNC)cphs_edit_line_exec_cb;
	data->mmi_control.data   = data;
	win                      = ((T_MFW_HDR *)data->win)->data;
	win->user                = (MfwUserDataPtr)data;
	data->parent_win             = parent_window;

	winShow(data->win);
	return data->win;
}

/*******************************************************************************

 $Function:	cphs_edit_line1

 $Description:	edit line name from menu 
 
 $Returns:		status int

 $Arguments:	menu, tag (not used)
		
*******************************************************************************/
int  cphs_edit_line1(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	T_MFW_HND win = cphs_edit_line_create(parent_win);
	SEND_EVENT(win,E_INIT,LINE1,0);
	/* a0393213 (WR - missing return statement at end of non-void function "cphs_edit_line1")*/
	return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:	cphs_edit_line2

 $Description:	edit line name from menu 
 
 $Returns:		status int

 $Arguments:	menu, tag (not used)
		
*******************************************************************************/
int  cphs_edit_line2(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	T_MFW_HND win = cphs_edit_line_create(parent_win);
	SEND_EVENT(win,E_INIT,LINE2,0);
	/* a0393213 (WR - missing return statement at end of non-void function "cphs_edit_line2")*/
	return MFW_EVENT_CONSUMED;
}
#endif  /*FF_CPHS*/

/*******************************************************************************

 $Function:	menu_cphs_call_mailbox_number

 $Description:	edit mailbox numbers from menu 
 
 $Returns:		status int

 $Arguments:	menu, tag (not used)
		
*******************************************************************************/
int menu_cphs_call_mailbox_number(MfwMnu* m, MfwMnuItem* i)
{   T_MFW_HND		parent	     = mfwParent( mfw_header());
	T_MFW_CPHS_INFO configuration;
	
	TRACE_FUNCTION("menu_cphs_call_mailbox_number");
	
	type_of_list = MAILBOX_LIST_CALL;
	cphs_config(&configuration);
	/***************************Go-lite Optimization changes Start***********************/
	//Aug 16, 2004    REF: CRR 24323   Deepa M.D
	TRACE_EVENT_P2( "CPHS? %d Mailbox config info: %d", configuration.mbNum, CphsPresent());
	/***************************Go-lite Optimization changes end***********************/
	if (CphsMailboxPresent()==TRUE )
		cphs_get_mailbox();
	else
		M_callVoice(m, i);
    return MFW_EVENT_CONSUMED;		
}
/*******************************************************************************

 $Function:	menu_cphs_edit_mailbox_number

 $Description:	edit mailbox numbers from menu 
 
 $Returns:		status int

 $Arguments:	menu, tag (not used)
		
*******************************************************************************/
int menu_cphs_edit_mailbox_number(MfwMnu* m, MfwMnuItem* i)
{   T_MFW_HND		parent	     = mfwParent( mfw_header());
	T_MFW_CPHS_INFO configuration;

	TRACE_FUNCTION("menu_cphs_edit_mailbox_number");
	type_of_list = MAILBOX_LIST;
	
	cphs_config(&configuration);
	/***************************Go-lite Optimization changes Start***********************/
	//Aug 16, 2004    REF: CRR 24323   Deepa M.D
	TRACE_EVENT_P2( "CPHS? %d Mailbox config info: %d", configuration.mbNum, CphsPresent());
	/***************************Go-lite Optimization changes end***********************/
	if (CphsMailboxPresent()==TRUE )
		cphs_get_mailbox();
	else
		M_exeVoice(m, i);
    return MFW_EVENT_CONSUMED;		
}


#ifdef FF_CPHS_REL4
/*******************************************************************************

 $Function:	menu_cphs_rel4_show_mailbox_number

 $Description:	menu handler function for any item in MailBox menu
 		
*******************************************************************************/
int menu_cphs_rel4_show_mailbox_number(MfwMnu* m, MfwMnuItem* i)
{
  if(cphs_rel4_mbi.valid==1)
  	{
  	/*already cached - no need to read SIM*/
       	sendCPHSSignal(E_CPHS_REL4_GET_MBI,&cphs_rel4_mbi );
  	}
  else
  	{
  	/*local copy not valid - read from SIM*/
         UBYTE msp_id=mfw_cphs_get_reg_profile();
         T_DISPLAY_DATA   display_info;
         TRACE_FUNCTION("menu_cphs_rel4_show_mailbox_number");
         switch (m->lCursor[m->level])
         	{
         	case 0:
       		TRACE_EVENT("voice selected");
       		mailbox_type=T_MFW_CPHS_REL4_MAILBOX_VOICE;
       		break;
       	case 1:
       		TRACE_EVENT("fax selected");
       		mailbox_type=T_MFW_CPHS_REL4_MAILBOX_FAX;
       		break;
       	case 2:
       		TRACE_EVENT("electronic selected");
       		mailbox_type=T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC;
       		break;		
       	case 3:
       		TRACE_EVENT("other selected");
       		mailbox_type=T_MFW_CPHS_REL4_MAILBOX_OTHER;
       		break;			
       	default:
       		TRACE_ERROR("menu index out of range");
       		break;
         	}  	
          qAT_PercentMBI(CMD_SRC_LCL,msp_id);
		  
	    dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS_WAIT);
	    dlg_initDisplayData_events( &display_info, NULL, FOREVER, 0 );

          mailbox_waiting_dialog=info_dialog (mfw_parent(mfwFocus), &display_info);
  
  	}
}
#endif
/*******************************************************************************

 $Function:	InfoNumbers

 $Description:	displays information number list from CPHS 

 $Returns:		MFW_EVENT_CONSUMED always

 $Arguments:	m, menu, i, item
 
*******************************************************************************/

int InfoNumbers( MfwMnu *m, MfwMnuItem *i )
{
	T_MFW_HND win;
    T_MFW_HND parent_win = mfw_parent(mfw_header());
	T_MFW_CPHS_INFO config_info;
	
	cphs_config(&config_info);
	/***************************Go-lite Optimization changes Start***********************/
//Aug 16, 2004    REF: CRR 24323   Deepa M.D
	TRACE_EVENT_P1("Info Num config info: %d", config_info.iNum);
	/***************************Go-lite Optimization changes end***********************/
	if (CphsPresent() && config_info.iNum&0x03)
	{	if (info_numbers[0] != NULL&& info_numbers[0]->count != 0)
		{	type_of_list = INFO_NUM_LIST;
			info_num_level = 1;
			win = buildInfoNumberMenu(parent_win);
			
			if (win NEQ NULL)
			{
				SEND_EVENT (win, E_INIT, 0, 0);
			}
		}
		else
			ShowMessage(parent_win, TxtEmptyList, TxtNull);
	}
	else
		ShowMessage(parent_win, TxtNotSupported, TxtNull);
	
	return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:	CphsRequestOperatorName()

 $Description:	returns operator name data structure from CPHS SIM data

 $Returns:		see above

 $Arguments:	none
 
*******************************************************************************/
T_MFW_CPHS_OP_NAME* CphsRequestOperatorName()
{	
	return &operator_name;
}

/*******************************************************************************

 $Function:	CphsPresent()

 $Description:	indicates whether CPHS sim or not

 $Returns:		TRUE if it is, FALSe if it isn't
 $Arguments:	none
 
*******************************************************************************/
UBYTE CphsPresent()
{
	//x0pleela 11 June, 2006  DR:OMAPS00079692
	 //changed from CPHS_OK to MFW_CPHS_OK
	if (cphs_status == MFW_CPHS_OK)
		return TRUE;
	else
	 {	 if (cphs_status == CPHS_NotPresent)
			return FALSE;
		else /*MC 21/05/02, CONQ5999->6007 Helps diagnose initialisation probs*/
			return CPHS_ERR;
	}
}
/*******************************************************************************

 $Function:	CphsMailboxPresent

 $Description:	indicates whether a CPHS SIM which supports mailbox numbers

 $Returns:		TRUE if it is, FALSe if it isn't
 $Arguments:	none
 
*******************************************************************************/
USHORT CphsMailboxPresent( /*struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi*/ )
{	T_MFW_CPHS_INFO config_info;

	TRACE_FUNCTION("CphsMailboxPresent");
	cphs_config(&config_info);

	if (config_info.mbNum &0x03 && CphsPresent())
		return /*0*/TRUE;
	else
		return /*1*/FALSE;

}
/*******************************************************************************

 $Function:	ALSPresent

 $Description:	indicates whether a CPHS SIM supports ALS by checking CSP

 $Returns:		0 if it does, 1 if it doesn't
 $Arguments:	menu tag, menu attribute tag, menu item tag (none of them used, 
				this is merely the format for menu display/suppression functions)
 
*******************************************************************************/
USHORT ALSPresent( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{ 
	//xvilliva SPR17291 - The pre-existing code was returning ALS not supported 
	//		      even if it the SIM supported. Changed the code to call 
	//		      tAT_PercentALS() and qAT_PercentALS(). 		

#ifndef FF_CPHS
	T_ACI_ALS_MOD ALSmode = (T_ACI_ALS_MOD)0;  // RAVI
#endif

//x0pleela 23 May, 2006  DR: OMAP00070657
//Returning the status of ALS based on CSP data
#ifdef FF_CPHS
	if( mmi_cphs_get_als_value() )
		return 0;
	else
		return 1;
#else

	tAT_PercentALS( CMD_SRC_NONE, &ALSmode );
	qAT_PercentALS( CMD_SRC_NONE, &ALSmode );

	// ALSmode = 1;//xvilliva  SPR17291 - IMP: Hardcoded for our SIMS - got to test on ALS sim.

	return   (!ALSmode);//returns 0 (if line1 or line2) returns 1 if not supported.
#endif
}

/*******************************************************************************

 $Function:	       CphsALSUnlocked

 $Description:	       Indicates whether a CPHS SIM's support of ALS has been locked by the User

 $Returns:		0 if it hasn't, 1 if it has
 $Arguments:	       menu tag, menu attribute tag, menu item tag (none of them used, 
				this is merely the format for menu display/suppression functions)
 
*******************************************************************************/
USHORT CphsALSUnlocked( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	USHORT retVal = CphsALSLocked(m, ma, mi);

	if (retVal == 0)
		retVal = 1;
	else
		retVal = 0;
	
	return (retVal);
}
/*******************************************************************************

 $Function:	       CphsALSUnlocked

 $Description:	       Indicates whether a CPHS SIM's support of ALS has been locked by the User

 $Returns:		0 if it has, 1 if it hasn't
 $Arguments:	       menu tag, menu attribute tag, menu item tag (none of them used, 
				this is merely the format for menu display/suppression functions)
 
*******************************************************************************/
USHORT CphsALSLocked( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	USHORT retVal;
	
	if (als_status.status == MFW_LINE_LOCKED)
		retVal = 0;
	else
		retVal = 1;
	
	return (retVal);
}
/*******************************************************************************

 $Function:	InfoNumbersPresent

 $Description:	indicates whether a CPHS SIM has Info Numbers by checking CSP

 $Returns:		0 if it does, 1 if it doesn't
 $Arguments:	none
 
*******************************************************************************/
USHORT InfoNumbersPresent( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{	T_MFW_CPHS_INFO config_info;
	
	int i,len;
	cphs_config(&config_info);
	/***************************Go-lite Optimization changes Start***********************/
	//Aug 16, 2004    REF: CRR 24323   Deepa M.D
	TRACE_EVENT_P1("InfoNum config: %d", config_info.iNum);
	/***************************Go-lite Optimization changes end***********************/
	len = strlen((char*)customer_service_profile.csp); /* x0039928 - Lint warning fix */
	for(i=0; i<len; i+=2)	
	{
		if (customer_service_profile.csp[i] ==CPHS_INFONUMS_BYTE_VALUE)
			if (customer_service_profile.csp[(i+1)] & INFONUM_MASK)
				return 0; //ALS is supported
	}
	return 1;
}
/*******************************************************************************

 $Function:	GetCphsVoicemailStatus

 $Description:	Asks MFW to check voicemail status on CPHS SIM
				cphs_mfw_cb handles callback from this
 $Returns:		status of line passed as parameter
 $Arguments:	line
 
*******************************************************************************/
T_MFW_CFLAG_STATUS GetCphsVoicemailStatus(UBYTE line)
{	
	cphs_get_mailbox_status (); 
	TRACE_EVENT("Requesting voicemail status");
	
	/*SPR 2653, removed unneccessary code*/
	/*requesting the mailbox status will trigger an event from the MFW if
	CPHS is supported and that event will cause a voicemail indication window if a 
	voicemail flag has been set in the SIM*/
		return MFW_CFLAG_NotPresent;


}
/*******************************************************************************

 $Function:	GetCphsDivertStatus

 $Description:	get call forwarding status of specified line
				cphs_mfw_cb handles callback from this
 $Returns:		status of line passed as parameter
 $Arguments:	line
 
*******************************************************************************/

T_MFW_CFLAG_STATUS GetCphsDivertStatus(UBYTE line)
{	
	switch (line)
	{
		case MFW_SERV_LINE1:	return call_forwarding_status.line1; //break;  // RAVI
		case MFW_SERV_LINE2:		return call_forwarding_status.line2; // break; // RAVI
		case MFW_SERV_FAX:		return call_forwarding_status.fax; // break; // RAVI
		case MFW_SERV_DATA:		return call_forwarding_status.data; // break; // RAVI
		default:		return MFW_CFLAG_NotPresent;
	}
}

/*******************************************************************************

 $Function:	GetCphsRel4DivertStatus

 $Description:	get current call forwarding status 
 $Arguments:	none
 
*******************************************************************************/
#ifdef FF_CPHS_REL4
T_MFW_CPHS_REL4_DV_STAT GetCphsRel4DivertStatus()
{	
	TRACE_FUNCTION("GetCphsRel4DivertStatus()");
	return call_forwarding_status_rel4;
}


/*******************************************************************************

 $Function:	isCFISFilePresent

 $Description:	says whether the file is allocated and activated or not
 $Arguments:	none
 $Returns	    : TRUE - if present
 			FALSE - if absent
 
*******************************************************************************/
BOOL isCFISFilePresent()
{
	TRACE_FUNCTION("isCFISFilePresent()");
	if(sim_serv_table_check((UBYTE)SRV_No_55) == ALLOCATED_AND_ACTIVATED)
	{
		TRACE_EVENT("CFIS PRESENT");
		TRUE;
	}
	else
	{
		TRACE_EVENT("CFIS NOT PRESENT");
		FALSE;
	}
}

/*******************************************************************************

 $Function:	isMWISFilePresent

 $Description:	says whether the file is allocated and activated or not
 $Arguments:	none
 $Returns	    : TRUE - if present
 			FALSE - if absent
 
*******************************************************************************/
BOOL isMWISFilePresent(void)
{
	TRACE_FUNCTION("isMWISFilePresent()");
	if(sim_serv_table_check((UBYTE)SRV_No_54) == ALLOCATED_AND_ACTIVATED)
	{
		TRACE_EVENT("MWIS PRESENT");
		TRUE;
	}
	else
	{
		TRACE_EVENT("MWIS NOT PRESENT");
		FALSE;
	}
		
}

/*******************************************************************************

 $Function:	isMBDNFilePresent

 $Description:	says whether the file is allocated and activated or not
 $Arguments:	none
 $Returns	    : TRUE - if present
 			FALSE - if absent
 
*******************************************************************************/
BOOL isMBDNFilePresent(void)
{
	TRACE_FUNCTION("isMWISFilePresent()");
	if(sim_serv_table_check((UBYTE)SRV_No_53) == ALLOCATED_AND_ACTIVATED)
	{
		TRACE_EVENT("MBDN PRESENT");
		TRUE;
	}
	else
	{
		TRACE_EVENT("MBDN NOT PRESENT");
		FALSE;
	}
		
}
#endif

/*******************************************************************************

 $Function:	GetAlsLine
 $Description:	gets current als line
 $Returns:		current als line
 $Arguments:	line
 
*******************************************************************************/
UBYTE GetAlsLine()
{	
	return als_status.selectedLine;
}

/*******************************************************************************

 $Function:	ShowMessage
 $Description:	Displays screen with passed text ids
 $Returns:		nothing
 $Arguments:	parent window, 2 text ids
 
*******************************************************************************/
void ShowMessage(T_MFW_HND win, USHORT TextId1, USHORT TextId2)
{

	T_DISPLAY_DATA Dialog;

	/* Initialise the dialog control block with default information
	*/
	dlg_initDisplayData_TextId( &Dialog, TxtNull,  TxtNull, TextId1, TextId2 , COLOUR_STATUS);
	dlg_initDisplayData_events( &Dialog, NULL, THREE_SECS, KEY_LEFT| KEY_RIGHT|KEY_CLEAR );

	/* Show the dialog
	*/
	info_dialog( win, &Dialog );
}


/*******************************************************************************

 $Function:	mmi_cphs_wait_dialog
 $Description:	Displays the "Pls. wait" Dialog
 $Returns:	Nothing
 $Arguments:	parent window
 
*******************************************************************************/
void mmi_cphs_wait_dialog(T_MFW_HND win)
{

	cphs_wait_dialog_win = NULL;
	memset( (void *)&mmi_cphs_wait_dialog_data, 0, sizeof(T_DISPLAY_DATA) );

	/* Initialise the dialog control block with default information
	*/
	dlg_initDisplayData_TextId( &mmi_cphs_wait_dialog_data, TxtNull,  TxtNull, TxtPleaseWait, NULL , COLOUR_STATUS);
	dlg_initDisplayData_events( &mmi_cphs_wait_dialog_data, NULL, FOREVER, KEY_MAX );

	/* Show the dialog */
	cphs_wait_dialog_win = info_dialog( win, &mmi_cphs_wait_dialog_data );
}


/*******************************************************************************

 $Function:	mmi_cphs_wait_dialog_destroy
 $Description:	Deletes the "Pls. wait" Dialog
 $Returns:	Nothing
 $Arguments:	None
 
*******************************************************************************/
void mmi_cphs_wait_dialog_destroy(void)
{
	if ( cphs_wait_dialog_win != NULL )
	{
		SEND_EVENT( cphs_wait_dialog_win, DIALOG_DESTROY, 0, &mmi_cphs_wait_dialog_data );
	}
	
	cphs_wait_dialog_win = NULL;
	memset( (void *)&mmi_cphs_wait_dialog_data, 0, sizeof(T_DISPLAY_DATA) );
}


/******************************************************************************
									      
			     Private functions
									      
*******************************************************************************/

T_MFW_HND	edit_mailbox_start(T_MFW_HND parent_window)
{
		T_MFW_HND		win	      = mmi_cphs_create(parent_window);
		TRACE_FUNCTION("calc_start()");
	    if (win NEQ NULL)
		{
		SEND_EVENT(win, MAILBOX, NULL, NULL);
	       
		} 

	   return win;
} 





T_MFW_HND mmi_cphs_create(T_MFW_HND parent)
{	T_MMI_CPHS_DATA     * data = (T_MMI_CPHS_DATA *)ALLOC_MEMORY (sizeof (T_MMI_CPHS_DATA ));
	T_MFW_WIN  * mailbox_win;

	if (data EQ NULL)
	{
		return NULL;
	}

	// Create window handler
	data->mailbox_win = win_create (parent, 0, E_WIN_VISIBLE, (MfwCb)cphs_win_cb);
	if (data->mailbox_win EQ NULL)
	{
		
		return NULL;
	}
	// connect the dialog data to the MFW-window
	data->mmi_control.dialog = (T_DIALOG_FUNC)cphs_dialog_cb;
	data->mmi_control.data	 = data;
	mailbox_win			 = ((T_MFW_HDR *)data->mailbox_win)->data;
	mailbox_win->user		 = (void *)data;
	data->parent_win	 = parent;
	data->win = mailbox_win;
	return data->mailbox_win;

}

void mailbox_destroy(MfwHnd own_window)
{
  T_MFW_WIN * win_data;
  T_MMI_CPHS_DATA   * data = NULL; 

  if (own_window)
	{	

	win_data = ((T_MFW_HDR *)own_window)->data;
		if (win_data != NULL) //PATCH TB
			data = (T_MMI_CPHS_DATA *)win_data->user;

	  if (data)
		{
		TRACE_EVENT ("mailbox_destroy()");
			
			win_delete (data->win);
		  // Free Memory
			FREE_MEMORY ((void *)data, sizeof (T_MMI_CPHS_DATA));
	
		}
	  else
		{
			TRACE_EVENT ("mailbox_destroy() called twice");
		}
	}
}

void cphs_dialog_cb(T_MFW_HND win, USHORT e,  SHORT identifier, void *parameter)
{	TRACE_EVENT("cphs_dialog_cb()");
	switch(e)
	{	case (MAILBOX): 
			cphs_get_mailbox();break;
		default: break;
	}
}

static int cphs_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    T_MMI_CPHS_DATA	* data = (T_MMI_CPHS_DATA *)win->user;
	
    TRACE_FUNCTION ("cphs_win_cb()");

    if(data EQ 0)
	return 1;
    switch (event)
    {
	case E_WIN_VISIBLE:
		if (win->flags & E_WIN_VISIBLE)
		{
		    /* Print the information dialog */
		    /* Clear Screen */
		    dspl_ClearAll();
		}
	   default:
		return 0;
	}
}
/*******************************************************************************

 $Function:	show_cphs_mb_numbers
 $Description:	Show the list of mailbox numbers
 $Returns:		nothing
 $Arguments:	none
 
*******************************************************************************/
void show_cphs_mb_numbers()
{
	T_MFW_HND win;
    T_MFW_HND parent_win= mfw_parent(mfw_header());

	TRACE_FUNCTION("show_cphs_mb_numbers");

	{
		win = buildInfoNumberMenu(parent_win);

		if (win NEQ NULL)
		{
			SEND_EVENT (win, E_INIT, 0, 0);
		}
	}
}
static UBYTE* temp_ed;

/*******************************************************************************

 $Function:	show_cphs_mb_number
 $Description:	Show the passed mailbox number in editor
 $Returns:		status int
 $Arguments:	mailbox number entry
 
*******************************************************************************/

int show_cphs_mb_number(T_MFW_CPHS_ENTRY* mb_number)
{	T_MFW_HND parent_win = mfw_parent(mfw_header());
#ifdef NEW_EDITOR
	T_AUI_EDITOR_DATA	editor_data;	/* SPR#1428 - SH - New Editor data*/
#else
	T_EDITOR_DATA		editor_data;
#endif
	char temp_number[MFW_CPHS_VM_NUMBER_MAXLEN - 10];

TRACE_FUNCTION("show_cphs_mb_number");

	memset( temp_number, 0, (MFW_CPHS_VM_NUMBER_MAXLEN - 10) );

	//if it's an international number without a '+' 
	if (mb_number->ton == MFW_TON_INTERNATIONAL && mb_number->number[0] != '+')
	{	strcat(temp_number, "+");	//put a + in front of number
		strncat(temp_number, (char*)mb_number->number, (PHB_MAX_LEN - 1) );
		strcpy((char*)mb_number->number, temp_number);
	}
/* SPR#1428 - SH - New Editor changes */

#ifdef NEW_EDITOR
	AUI_edit_SetDefault(&editor_data);
	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)mb_number->number, PHB_MAX_LEN - 1);
	AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE);
	AUI_edit_SetDisplay(&editor_data, 0, COLOUR_EDITOR, EDITOR_FONT);
	AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mailbox_edit_cb);
	AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, NULL);

	temp_ed = (UBYTE *)mb_number->number;

	AUI_edit_Start(parent_win, &editor_data);
#else /* NEW_EDITOR */
	editor_attr_init(&editor_data.editor_attr, 0, edtCurBar1, NULL, (char*)mb_number->number, PHB_MAX_LEN-1, COLOUR_EDITOR);
	editor_data_init(&editor_data, (T_EDIT_CB)mailbox_edit_cb, TxtSoftOK, TxtDelete, NULL, 1, DIGITS_MODE, FOREVER);
	editor_data.Identifier		=  0; 
	editor_data.hide				= FALSE;
	editor_data.destroyEditor		= TRUE; 
	editor_data.TextString		= NULL; /*MC SPR 1257, stops glitch in Chinese*/ 


	editor_start(parent_win,&editor_data);	/* start the editor */ 
#endif /* NEW_EDITOR */
	return 1; 
}

#ifdef FF_CPHS_REL4
/*******************************************************************************

 $Function:	show_cphs_rel4_mb_number
 $Description:	Show the passed cphs rel4 mailbox number in editor
 $Returns:		status int
 $Arguments:	mailbox number entry
 
*******************************************************************************/

int show_cphs_rel4_mb_number(T_MFW_MBDN* mb_number)
{	T_MFW_HND parent_win = mfw_parent(mfw_header());
#ifdef NEW_EDITOR
	T_AUI_EDITOR_DATA	editor_data;	/* SPR#1428 - SH - New Editor data*/
#else
	T_EDITOR_DATA		editor_data;
#endif
	char temp_number[MAX_MB_NUM_LEN];

TRACE_FUNCTION("show_cphs_mb_number");

	memset(temp_number, 0, MAX_MB_NUM_LEN);

	//if it's an international number without a '+' 
	if (mb_number->type.ton == MFW_TON_INTERNATIONAL && mb_number->number[0] != '+')
	{	strcat(temp_number, "+");	//put a + in front of number
		strcat(temp_number, (char*)mb_number->number);
		strcpy((char*)mb_number->number, temp_number);
	}
/* SPR#1428 - SH - New Editor changes */

#ifdef NEW_EDITOR
	AUI_edit_SetDefault(&editor_data);
	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)mb_number->number, MAX_MB_NUM_LEN-1);
	AUI_edit_SetMode(&editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
	AUI_edit_SetDisplay(&editor_data, 0, COLOUR_EDITOR, EDITOR_FONT);
	AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, NULL);
	switch(mailbox_type)
		{
		case T_MFW_CPHS_REL4_MAILBOX_VOICE:
			AUI_edit_SetTextStr(&editor_data, TxtSoftOK, NULL, TxtVoice, NULL);
			break;
		case T_MFW_CPHS_REL4_MAILBOX_FAX:
			AUI_edit_SetTextStr(&editor_data, TxtSoftOK, NULL, TxtFax, NULL);
			break;
		case T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC:
			AUI_edit_SetTextStr(&editor_data, TxtSoftOK, NULL, TxtElectronic, NULL);
			break;
		case T_MFW_CPHS_REL4_MAILBOX_OTHER:
			AUI_edit_SetTextStr(&editor_data, TxtSoftOK, NULL, TxtOther, NULL);
			break;			
		}
	AUI_edit_Start(parent_win, &editor_data);
#else /* NEW_EDITOR */
	editor_attr_init(&editor_data.editor_attr, 0, edtCurNone, NULL, (char*)mb_number->number, MAX_MB_NUM_LEN-1, COLOUR_EDITOR);
	editor_data_init(&editor_data, NULL, TxtSoftOK, NULL, NULL, 1, DIGITS_MODE, FOREVER);
	editor_data.Identifier		=  0; 
	editor_data.hide				= FALSE;
	editor_data.destroyEditor		= TRUE; 
	editor_data.TextString		= NULL; /*MC SPR 1257, stops glitch in Chinese*/ 


	editor_start(parent_win,&editor_data);	/* start the editor */ 
#endif /* NEW_EDITOR */
// ADDED BY RAVI - 29-11-2005
#if (BOARD == 61)
	return 1; 
#endif
// END RAVI
}
#endif

/*******************************************************************************

 $Function:	mailbox_edit_cb
 $Description:	callback for mailbox editor screen
 $Returns:		nothing
 $Arguments:	window, identifier, reason
 
*******************************************************************************/
static void mailbox_edit_cb( T_MFW_HND win, USHORT Identifier,UBYTE reason)
{
	T_MFW set_mailbox_errcode = MFW_CPHS_OK;	
	UBYTE write_error_number[MFW_CPHS_VM_NUMBER_MAXLEN]; 

	TRACE_FUNCTION("mailbox_edit_cb()");
	switch (reason )
    {
		case INFO_KCD_LEFT:
		{	
			memcpy( (void *)&write_error_number[0], (void *)&cphs_voicemail_num.number[0], MFW_CPHS_VM_NUMBER_MAXLEN );
			memset ( (void *)&cphs_voicemail_num.number[0], 0, MFW_CPHS_VM_NUMBER_MAXLEN );
			memcpy ( (void *)&cphs_voicemail_num.number[0], (void *)temp_ed, MFW_CPHS_VM_NUMBER_MAXLEN );
			
			set_mailbox_errcode = cphs_set_mailbox(&cphs_voicemail_num);

			if ( set_mailbox_errcode == MFW_CPHS_OK )
			{
				mmi_cphs_wait_dialog(win); /* Display the "Pls. wait" Dialog as SIM Write consumes quite some time */
			}
			else
			{				
				memcpy( (void *)&cphs_voicemail_numbers.entries[cphs_voicemail_num.list_index].number[0], 
					    (void *)&write_error_number[0], MFW_CPHS_VM_NUMBER_MAXLEN);
			}
			
			break;
		}
		
			
		default:
		{
		    /* otherwise no action to be performed  */
			break;
		}
	}
}




/*******************************************************************************

 $Function:	cphs_mfw_cb
 $Description:	Callback handler for mfw_cphs events
 $Returns:		status int
 $Arguments:	event, parameter pointer
 
*******************************************************************************/
int cphs_mfw_cb(T_MFW_EVENT event, void* para)
{	T_MFW_HND parent = mfwParent( mfw_header());
	
//   T_MFW_CPHS_VC_NUM* number_list =(T_MFW_CPHS_VC_NUM* )para;  // RAVI

//	T_MFW_CPHS_PARA* parameter = (T_MFW_CPHS_PARA*)para;  // RAVI
//	T_MFW_CPHS_STATUS temp;  // RAVI
	TRACE_FUNCTION("cphs_mfw_cb");
	switch(event)
	{	case E_CPHS_IND: 
			TRACE_EVENT("Getting cphs status");
			if(para != NULL)
			{	cphs_status =(* (T_MFW_CPHS_STATUS*)para);
				//x0pleela 11 June, 2006  DR:OMAPS00079692
				 //changed from CPHS_OK to MFW_CPHS_OK
				if (cphs_status != MFW_CPHS_OK)
				{
					/***************************Go-lite Optimization changes Start***********************/
					//Aug 16, 2004    REF: CRR 24323   Deepa M.D	
					TRACE_EVENT_P1("cphs not supported, apparently%d", cphs_status);
					/***************************Go-lite Optimization changes end***********************/
				}
				cphs_operator_name();
			}
			break;	      
		case E_CPHS_OP_NAME:
                     //x0012849: Jagannatha  26 May, 2006  ER: OMAPS00079607 -Support AOC in CPHS
			TRACE_EVENT("case: E_CPHS_OP_NAME");
			if(para != NULL)
			{	
			       int csp_status; //x0012849: Jagannatha  26 May, 2006  ER: OMAPS00079607 - No need to include this under FF_CPHS flag. 
				memcpy(&operator_name, para, sizeof(T_MFW_CPHS_OP_NAME));
				TRACE_EVENT("operator name callback");				
									     
			if (operator_name.longName.data[0] == NULL)
				TRACE_EVENT("Blank long name");

			if (operator_name.shortName.data[0] == NULL)
				TRACE_EVENT("Blank short name");
                      //x0012849: Jagannatha  26 May, 2006  ER: OMAPS00079607 -Support AOC in CPHS
			csp_status = cphs_get_csp();
                      //x0012849: Jagannatha  26 May, 2006  ER: OMAPS00079607 -Support AOC in CPHS
                      // In case if cphs_get_csp returns less than 'MFW_CPHS_OK' then either CPHS is not present or CPS is not allocated or activated in serice table.
                     #ifdef FF_CPHS
					 	//x0pleela 11 June, 2006  DR:OMAPS00079692
	 			//changed from CPHS_OK to MFW_CPHS_OK
			if( csp_status < MFW_CPHS_OK)
			{
 		           TRACE_EVENT("E_CPHS_OP_NAME : AOC is set to TRUE");
                         setAOCflag(TRUE);  
			}
			#endif
			}
 		       break;   
		case E_CPHS_GET_VC_NUM:
		{	
			if (para!= NULL)
			{	
			memcpy(&cphs_voicemail_numbers, para, sizeof(T_MFW_CPHS_VC_NUM));
			/***************************Go-lite Optimization changes Start***********************/
			//Aug 16, 2004    REF: CRR 24323   Deepa M.D
			TRACE_EVENT_P1("Voicemail No %s", cphs_voicemail_numbers.entries[0].number);
			/***************************Go-lite Optimization changes end***********************/
				show_cphs_mb_numbers();
			}
			
		}
		break;
		#ifdef FF_CPHS_REL4
		case E_CPHS_REL4_GET_MBI:
			if(para!=NULL)
				{
				/*update local cache*/
					memcpy(&cphs_rel4_mbi,para,sizeof(T_MFW_CPHS_REL4_MBI));
				/*get mbdn*/
				switch(mailbox_type)
					{
					case T_MFW_CPHS_REL4_MAILBOX_VOICE:
						if(cphs_rel4_mbdn.valid & 0x01) 
							cphs_mfw_cb(E_CPHS_REL4_GET_MBDN,&(cphs_rel4_mbdn.mailbox_numbers[0]));
						else
							cphs_rel4_get_mailbox_no( cphs_rel4_mbi.voice);
						break;
					case T_MFW_CPHS_REL4_MAILBOX_FAX:
						if(cphs_rel4_mbdn.valid & 0x02)
							cphs_mfw_cb(E_CPHS_REL4_GET_MBDN,&(cphs_rel4_mbdn.mailbox_numbers[1]));
						else
							cphs_rel4_get_mailbox_no(cphs_rel4_mbi.fax);
						break;
					case T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC:
						if(cphs_rel4_mbdn.valid & 0x04)
							cphs_mfw_cb(E_CPHS_REL4_GET_MBDN,&(cphs_rel4_mbdn.mailbox_numbers[2]));
						else
							cphs_rel4_get_mailbox_no(cphs_rel4_mbi.electronic);
						break;
					case T_MFW_CPHS_REL4_MAILBOX_OTHER:
						if(cphs_rel4_mbdn.valid & 0x08)
							cphs_mfw_cb(E_CPHS_REL4_GET_MBDN,&(cphs_rel4_mbdn.mailbox_numbers[3]));
						else
							cphs_rel4_get_mailbox_no( cphs_rel4_mbi.other);
						break;
					}				
				}
			break;
		case E_CPHS_REL4_GET_MBDN:
			/*destroy the dialog showing waiting*/
			SEND_EVENT(mailbox_waiting_dialog, DIALOG_DESTROY, 0, 0);			
			if(para!=NULL)
				{

				/*update local cache and show mailbox number*/
				switch(mailbox_type)
					{
					case T_MFW_CPHS_REL4_MAILBOX_VOICE:
							memcpy(&cphs_rel4_mbdn.mailbox_numbers[0],para,sizeof(T_MFW_MBDN));
							cphs_rel4_mbdn.valid|=0x01;
							show_cphs_rel4_mb_number(&cphs_rel4_mbdn.mailbox_numbers[0]);
						break;
					case T_MFW_CPHS_REL4_MAILBOX_FAX:
							memcpy(&cphs_rel4_mbdn.mailbox_numbers[1],para,sizeof(T_MFW_MBDN));
							cphs_rel4_mbdn.valid|=0x02;
							show_cphs_rel4_mb_number(&cphs_rel4_mbdn.mailbox_numbers[1]);
						break;
					case T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC:
							memcpy(&cphs_rel4_mbdn.mailbox_numbers[2],para,sizeof(T_MFW_MBDN));
							cphs_rel4_mbdn.valid|=0x04;
							show_cphs_rel4_mb_number(&cphs_rel4_mbdn.mailbox_numbers[2]);
						break;
					case T_MFW_CPHS_REL4_MAILBOX_OTHER:
 						       memcpy(&cphs_rel4_mbdn.mailbox_numbers[3],para,sizeof(T_MFW_MBDN));
							cphs_rel4_mbdn.valid|=0x08;
							show_cphs_rel4_mb_number(&cphs_rel4_mbdn.mailbox_numbers[3]);
						break;
					}
												
				}
			break;
		#endif
		 case E_CPHS_SET_VC_NUM:   
		{		//result of writing mailbox number
			UBYTE write_result;
			if(para != NULL)
			{	write_result = *(UBYTE*)para;
				mmi_cphs_wait_dialog_destroy(); /* Delete the "Pls. wait" screen */  
				if (write_result == MFW_SIMOP_WRITE_OK)
					ShowMessage(parent, TxtSaved, TxtNull);
				else
					ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error"
			}
		 }
		 break;
			 case E_CPHS_GET_VC_STAT:  
			 {	
				MfwHnd	idle_win =idle_get_window();
				// UBYTE line;  // RAVI

			 	/*a0393213 cphs rel4 - the parameter sent are of different type for CPHS Rel4 and non-CPHS Rel4*/			 	  
				#ifdef FF_CPHS_REL4
			 	if(!isMWISFilePresent() )
			 	{
			 	#endif
				if(para != NULL)
				{	cphs_voicemail_status = (T_MFW_CPHS_VC_STAT*)para;

					TRACE_EVENT("Getting voicemail status");
					if (cphs_voicemail_status->line1 == MFW_CFLAG_SET)
					{
					//x0pleela 01 June, 2006  DR: OMAPS00079692
					//Commented below line to avoid displaying a popup msg showing the line # 
					//Idle screen will be updated with the voice mail icon
    					       //ShowMessage(idle_win, TxtVoicemail, TxtLine1);

    					       /* SPR#1929 - DS - Set voicemail icon on idle screen. Port of 1960 */
    					       iconsSetState(iconIdVoice);
    				      }

				
					if (cphs_voicemail_status->line2 == MFW_CFLAG_SET)
					{	
					//x0pleela 01 June, 2006  DR: OMAPS00079692
					//Commented below line to avoid displaying a popup msg showing the line # 
					//Idle screen will be updated with the voice mail icon
						//ShowMessage(idle_win, TxtVoicemail, TxtLine2);

						/* SPR#1929 - DS - Set voicemail icon on idle screen. Port of 1960 */
    					      iconsSetState(iconIdVoice);
					}

					 /* SPR#1929 - DS - Remove voicemail icon from idle screen if 
                                  * there is no voicemail waiting on either line1/line2. Port of 1960.
                                  */
					if ( (cphs_voicemail_status->line1 != MFW_CFLAG_SET) && 
					     (cphs_voicemail_status->line2 != MFW_CFLAG_SET) )
    				      {
    				            iconsDeleteState(iconIdVoice);
    				      }
				}
				#ifdef FF_CPHS_REL4
				}
				else
				{
					if(is_message_waiting())
					{						 
						iconsSetState(iconIdVoice);						
					}
					else
					{
						iconsDeleteState(iconIdVoice);
					}

				}
				#endif

			 }
			 break;
			case E_CPHS_SET_VC_STAT:  
		 
			{		//result of resetting mailbox status
				// UBYTE write_result;  // RAVI

				TRACE_EVENT("Mailbox status set");
				//Update our copy of the mailbox status
				GetCphsVoicemailStatus(0);
			}
			break;
			 case E_CPHS_GET_DV_STAT:
			 {	
			 	/*a0393213 cphs rel4 - the parameter sent are of different type for CPHS Rel4 and non-CPHS Rel4*/			 	  
				#ifdef FF_CPHS_REL4
			 	if(!isCFISFilePresent() )
			 	{
			 	#endif
					UBYTE line;
					//check for divert on active line
					line = GetAlsLine();
					
					TRACE_EVENT_P4("cphs_mfw_cb():E_CPHS_GET_DV_STAT %d %x %x %x", ((T_MFW_CPHS_DV_STAT*)para)->result,
						                   ((T_MFW_CPHS_DV_STAT*)para)->line1,((T_MFW_CPHS_DV_STAT*)para)->line2,line); 

					/* 30th May,2006     OMAPS00079650     a0393213 (R.Prabakar)
					    Description : CPHS Call Forwarding feature implementation
					    Solution     : call_forwarding_status is updated. The data is not written into flash as it would be done
					    in E_CPHS_SET_DV_STAT. However the present code is not disturbed*/
	    
					#ifdef FF_CPHS
						if(((T_MFW_CPHS_DV_STAT*)para)->result == MFW_SIMOP_READ_ERR)
						{

						if(FFS_flashData.CFState==TRUE)
							{
							if (line == MFW_SERV_LINE2) 
							   ((T_MFW_CPHS_DV_STAT*)para)->line2=MFW_CFLAG_SET;
							else
								((T_MFW_CPHS_DV_STAT*)para)->line1=MFW_CFLAG_SET;
								
							}
						else
							{
							if (line == MFW_SERV_LINE2)
							   ((T_MFW_CPHS_DV_STAT*)para)->line2=MFW_CFLAG_NOTSet;
							else
								((T_MFW_CPHS_DV_STAT*)para)->line1=MFW_CFLAG_NOTSet;
							}
						}
					#endif
					if(para != NULL)
						memcpy(&call_forwarding_status, para, sizeof(T_MFW_CPHS_DV_STAT));
					{

						//check if current outgoing line diverted
					/*a0393213 - the call forward icon is now shown taking both the lines into consideration*/
					/*if (line == MFW_SERV_LINE2)
							DivertStatus = GetCphsDivertStatus(MFW_SERV_LINE2);
						else//if (line == MFW_SERV_LINE1)
						DivertStatus = GetCphsDivertStatus(MFW_SERV_LINE1);*/

						//set the call forwarding icon 
					if ((GetCphsDivertStatus(MFW_SERV_LINE1)==MFW_CFLAG_SET) || 
					    (GetCphsDivertStatus(MFW_SERV_LINE2)==MFW_CFLAG_SET))
						{
							iconsSetState(iconIdCallFor);
							#ifndef FF_CPHS
								//  Jun 23, 2004        REF: CRR MMI-SPR-13599  Rashmi C N(Sasken) 
								//              Setting the Current state of CF in Flash						
				                         FFS_flashData.CFState=TRUE;
							#endif
						}
						//gid rid of call forwarding icon 
					if ((GetCphsDivertStatus(MFW_SERV_LINE1)==MFW_CFLAG_NOTSet) && 
					    (GetCphsDivertStatus(MFW_SERV_LINE2)==MFW_CFLAG_NOTSet))
						{
							iconsDeleteState(iconIdCallFor); 
							#ifndef FF_CPHS
								//  Jun 23, 2004        REF: CRR MMI-SPR-13599  Rashmi C N(Sasken) 
								//              Setting the Current state of CF in Flash
				                        FFS_flashData.CFState=FALSE;
							#endif
						}
						
				            #ifndef FF_CPHS
							//  Jun 23, 2004        REF: CRR MMI-SPR-13599  Rashmi C N(Sasken) 
							//              Writng the Current state of CF into ffs	
							flash_write();
					      #endif
					}
					#ifdef FF_CPHS_REL4
					 	}
						else
						{
							/*store info in call_forwarding_status_rel4*/
							memcpy(&call_forwarding_status_rel4, para, sizeof(T_MFW_CPHS_REL4_DV_STAT));
							if(((T_MFW_CPHS_REL4_DV_STAT*)para)->voice==MFW_CFLAG_SET)
								iconsSetState(iconIdCallFor);
							else
								iconsDeleteState(iconIdCallFor);
						}
						if(isMWISFilePresent())
							cphs_rel4_get_mailbox_status();
					#endif
			 }
			 break; 
			 case E_CPHS_SET_DV_STAT:    
			 {		
			 	//result of setting divert status
				// UBYTE write_result;  // RAVI
				/* 30th May,2006     OMAPS00079650     a0393213 (R.Prabakar)
				    Description : CPHS Call Forwarding feature implementation
				    Solution     : CF status is written into flash if sim write had failed*/
				#ifdef FF_CPHS_REL4
				if(!isCFISFilePresent() )
					{
				#endif
					#ifdef FF_CPHS
	                			if(para != NULL)
						{	
					   		UBYTE write_result;
					    		write_result = *(UBYTE*)para;
							if (write_result == MFW_SIMOP_WRITE_OK)
								TRACE_EVENT("cphs_mfw_cb:Call forward flag set in sim");
							if (write_result == MFW_SIMOP_WRITE_ERR)
								{
								TRACE_EVENT("cphs_mfw_cb:Unable to set call forward flag in sim");
								
								if(ss_data.cfu_services&0x01)
									{
									FFS_flashData.CFState=TRUE;
									}
								else
									{
									FFS_flashData.CFState=FALSE;
									}
								flash_write();
								}
						}
					#endif
										
						cphs_get_divert_status(); //refresh divert status
				#ifdef FF_CPHS_REL4
					}
				else/*a0393213 cphs rel4 supported*/
					{
					if(call_forwarding_status_rel4.voice==MFW_CFLAG_SET)
						iconsSetState(iconIdCallFor);
					else
						iconsDeleteState(iconIdCallFor);						
					}
				#endif

			 }
			 break;
			 case E_CPHS_GET_ALS_STATUS:  
				{	if(para != NULL)
						memcpy(&als_status, para, sizeof(T_MFW_CPHS_ALS_STATUS));
				}
				break;
			 case E_CPHS_SET_LINE: 
			 {		//result of set ALS line
				UBYTE write_result;
				if(para != NULL)
				{	write_result = *(UBYTE*)para;
					if (write_result == MFW_SIMOP_WRITE_OK)
						{
						TRACE_EVENT("cphs_mfw_cb() : ALS status written into flash");
						ShowMessage(parent, TxtChanged, TxtNull);
						}
					if (write_result == MFW_SIMOP_WRITE_ERR)
						{
						TRACE_EVENT("cphs_mfw_cb() : ALS status not written into flash");
						ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error"
						}
				}
#ifdef FF_CPHS
				mmi_cphs_get_als_info();
#else
				cphs_get_als_info(&als_status);//refresh current line
#endif				
				/*cphs_get_divert_status(); //refresh divert status*//*a0393213 - the call forward icon is now shown taking both the lines into consideration*/
			 }
			 break;
			 case E_CPHS_SET_ALS_STATUS: 
			 {		//result of setting ALS status
				UBYTE write_result;
				if(para != NULL)
				{	write_result = *(UBYTE*)para;
					if (write_result == MFW_SIMOP_WRITE_OK)
						ShowMessage(parent, TxtSaved, TxtNull);
					if (write_result == MFW_SIMOP_WRITE_ERR)
						ShowMessage(parent, TxtWriteError, TxtNull);//display "Write Error"
				}
			 }
			 break;
			 case E_CPHS_GET_CSP:
			 { 
                            #ifdef FF_CPHS
                            //x0012849: Jagannatha  26 May, 2006  ER: OMAPS00079607 -Support AOC in CPHS
                            int i;
                            #endif					  
			      TRACE_EVENT("Reached E_CPHS_GET_CSP");
			 	if(para != NULL)
				{	
					memcpy(&customer_service_profile, para, sizeof(T_MFW_CPHS_CSP));

					 /***************************Go-lite Optimization changes Start***********************/
					 //Aug 16, 2004    REF: CRR 24323   Deepa M.D
					 TRACE_EVENT_P7("CSP: %x,%x,%x,%x,%x,%x,%x", customer_service_profile.csp[0], customer_service_profile.csp[1], 
						 customer_service_profile.csp[2], customer_service_profile.csp[3], customer_service_profile.csp[4], customer_service_profile.csp[5],
						 customer_service_profile.csp[6]);
					 TRACE_EVENT_P3("%x,%x,%x", customer_service_profile.csp[7], customer_service_profile.csp[8], customer_service_profile.csp[9]);
					 TRACE_EVENT_P7("CSP: %x,%x,%x,%x,%x,%x,%x", customer_service_profile.csp[10], customer_service_profile.csp[11], 
						 customer_service_profile.csp[12], customer_service_profile.csp[13], customer_service_profile.csp[14], customer_service_profile.csp[15],
						 customer_service_profile.csp[16]);
					 TRACE_EVENT_P3("%x,%x,%x", customer_service_profile.csp[17], customer_service_profile.csp[18], customer_service_profile.csp[19]);
					 /***************************Go-lite Optimization changes end***********************/

                                   //x0012849: Jagannatha  26 May, 2006  ER: OMAPS00079607 -Support AOC in CPHS
			              #ifdef FF_CPHS
			              TRACE_EVENT_P2("AOC : Service group code =%d  value =%d", 
			                  customer_service_profile.csp[4], customer_service_profile.csp[5]);
                                    // No need to check if Aoc_flag is already set to TRUE.
                        
				 	 /*check for Byte 1 service group code =03 and Byte2 bit 6 =1*/
					 for (i=0;i<20; i++)
					 {
					 //check for AOC bit
					 	if( customer_service_profile.csp[i] EQ 0x03)
				 		{
							if(i == 19) break;  /* x0039928 - Lint warning fix */
							i++;
				 			if( customer_service_profile.csp[i] & 0x20)
				 			{
             					              TRACE_EVENT("E_CPHS_GET_CSP: AOC flag is SET in CPHS ");
                                                        setAOCflag(TRUE); 
				 				break;
				 			}
				 			else {
                                                     TRACE_EVENT("E_CPHS_GET_CSP: AOC flag is NOT SET in CPHS ");
                                                     setAOCflag(FALSE);  													 
                                                 }
				 		}
						//check for ALS bit
						else if( customer_service_profile.csp[i] == 0x06)
					  	{
   					  		if(i == 19) break;  /* x0039928 - Lint warning fix */
						    i++;
						    if( customer_service_profile.csp[i] & 0x80 )
						    {
							mmi_cphs_set_als_value( TRUE);
						      break;
						    }
						    else
						      mmi_cphs_set_als_value( FALSE);
				  		}
						else
							i++;	
				 	 }
					
				       #endif
				       cphs_get_info_num(1, info_num_index);
				}

			 }break;  			 
			 case E_CPHS_GET_INFO_NUM:
			 {	
				if(para != NULL)
				{	
					memcpy(&current_info_num, para, sizeof( T_MFW_CPHS_INFONUM_ENTRY));

					TRACE_EVENT("Getting info number");
					if (current_info_num.result !=MFW_SIMOP_READ_ERR)
						{	T_DISPLAY_DATA Dialog;
							TRACE_EVENT("Displaying num");
							/* Initialise the dialog control block with default information
							*/
							dlg_initDisplayData_TextStr( &Dialog, TxtSoftCall,  TxtSoftBack, (char*)current_info_num.alpha.data, (char*)current_info_num.number, COLOUR_STATUS);
							dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC) info_num_display_cb, FOREVER, KEY_LEFT| KEY_RIGHT|KEY_CLEAR );

							/* Show the dialog
							*/
							info_dialog( parent, &Dialog );
						}
					}
				 }
			 
			 break; 
			 case E_CPHS_GET_INFO_LIST:
				{ 
					if (para == NULL)
					{	
						TRACE_EVENT("Invalid info num list");
					}
					else
					{	//populate next pointer 
					       //RAVI - 29-11-2005 
					      /* x0045876, 14-Aug-2006 (WR - assignment in condition)*/
					       info_numbers[info_num_level] = (T_MFW_CPHS_INFONUM_LIST*) ALLOC_MEMORY(sizeof(T_MFW_CPHS_INFONUM_LIST));
						if (info_numbers[info_num_level])
							memcpy(info_numbers[info_num_level], para, sizeof(T_MFW_CPHS_INFONUM_LIST));

						
							TRACE_EVENT("Getting info numbers!!");
							if (info_numbers[info_num_level]->count != 0)
							{
								/***************************Go-lite Optimization changes Start***********************/
								//Aug 16, 2004    REF: CRR 24323   Deepa M.D
								TRACE_EVENT_P1("Valid info num list, count:%d",info_numbers[info_num_level]->count);
								/***************************Go-lite Optimization changes end***********************/
								if (info_num_level)
								{	info_num_level++;
									InfoNumbers2();
									
								}
							}
							else
								info_numbers[info_num_level]=NULL;
					}
				}
			 break;
			 case E_CPHS_GET_SIM_FIELD:
				{	T_MFW_CPHS_READ_SIM_ENTRY temp;

					memcpy(&temp, para, sizeof(T_MFW_CPHS_READ_SIM_ENTRY));
					if (temp.data_len >0)
						//Jun 14, 2005 REF: MMI-FIX-30439 x0018858
						//begin 30439
						//temp.exchange_data[temp.data_len-1] = 0;
						//end 30439
					/***************************Go-lite Optimization changes Start***********************/
					//Aug 16, 2004    REF: CRR 24323   Deepa M.D
					TRACE_EVENT_P3("Sim Read, Field: %d (Record: %d) Errcode: %d",temp.requested_field, temp.record, temp.sim_result);
					/***************************Go-lite Optimization changes end***********************/
					/* SPR759 - SH - Read Sim for homezone, calls appropriate functions */
					#ifdef MMI_HOMEZONE_ENABLED	
						if (temp.requested_field>=HZ_SIM_PARAMETERS
							&& temp.requested_field < (HZ_SIM_CELL_CACHE+HZ_ZONES_MAX) )
						{
							homezoneReadSimCb(temp.requested_field, temp.record, temp.sim_result);
						}
					#endif
				}
			 break;

			  case E_CPHS_SET_SIM_FIELD:
				{
				T_MFW_CPHS_READ_SIM_ENTRY temp;

					memcpy(&temp, para, sizeof(T_MFW_CPHS_READ_SIM_ENTRY));
					if (temp.data_len >0)
						temp.exchange_data[temp.data_len-1] = 0;
					/***************************Go-lite Optimization changes Start***********************/
					//Aug 16, 2004    REF: CRR 24323   Deepa M.D
					TRACE_EVENT_P2("Sim Write, Requested_field: %d Errcode: %d",temp.requested_field, temp.sim_result);
					/***************************Go-lite Optimization changes end***********************/
					/* SPR759 - SH - Read Sim for homezone, calls appropriate functions */
					#ifdef MMI_HOMEZONE_ENABLED
						if (temp.requested_field>=HZ_SIM_PARAMETERS
							&& temp.requested_field < (HZ_SIM_CELL_CACHE+HZ_ZONES_MAX) )
						{
							homezoneWriteSimCb(temp.requested_field, temp.record, temp.sim_result);
						}
					#endif
				}
				break;
#ifdef FF_CPHS_REL4				
			    case E_CPHS_MSP_IND:
				{
					if(para != NULL)
					{
						msp_info = mfw_cphs_get_msp();
						TRACE_EVENT_P1("E_CPHS_MSP_IND - mspcount %d",msp_info->count);
						if(msp_info->count < 2)
						{
						MSP_flag = FALSE;
						#ifdef FF_CPHS
							mmi_cphs_get_als_info();
						#else
							cphs_get_als_info(&als_status);
						#endif
						return TRUE;
						}
						else
						{
							MSP_flag = TRUE;
							mfw_cphs_set_default_profile(1);
							mfw_cphs_set_reg_profile(1);
							mmi_msp_interrogate();
						}
					}
			    	}
				break;
#endif				
			 default: break;
				}
	

	return TRUE;
}








/*******************************************************************************

 $Function:	int InfoNumbers2( )
 $Description:	Displays info number sub-menus
 $Returns:		status int
 $Arguments:	nothing
 
*******************************************************************************/
//for sub-menus
int InfoNumbers2( )
{
	T_MFW_HND win;
    T_MFW_HND parent_win = mfw_parent(mfw_header());
    
	TRACE_FUNCTION("InfoNumbers2");
	
	if (info_numbers != NULL)
	{	type_of_list = INFO_NUM_LIST;
		win = buildInfoNumberMenu(parent_win);

		if (win NEQ NULL)
		{
			SEND_EVENT (win, E_INIT, 0, 0);
		}
	}
	
	return MFW_EVENT_CONSUMED;
}
/*******************************************************************************

 $Function:	buildInfoNumberMenu
 $Description:	Creates window for Information numbers
 $Returns:		window created
 $Arguments:	parent window
 
*******************************************************************************/
static T_MFW_HND  buildInfoNumberMenu( MfwHnd parent_window)
{
	T_INFO_NUM_INFO *  data = (T_INFO_NUM_INFO *)ALLOC_MEMORY (sizeof (T_INFO_NUM_INFO));
	T_MFW_WIN  * win;
	TRACE_FUNCTION("buildInfoNumberMenu");

    /*
     * Create window handler
     */

    data->numbers_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)info_num_win_cb);
    if (data->numbers_win EQ NULL)
	{
	   return NULL;
	}

	TRACE_EVENT(">>>> Info num window created: " );
    /* 
     * connect the dialog data to the MFW-window
     */

    data->mmi_control.dialog = (T_DIALOG_FUNC)info_num_exec_cb;
    data->mmi_control.data   = data;
    win 		     = ((T_MFW_HDR *)data->numbers_win)->data;
    win->user		     = (void *)data;
    data->parent	     = parent_window;
	winShow(data->numbers_win);
    /*
     * return window handle
     */

     return data->numbers_win;
}


//x0012849: Jagannatha  01 June, 2006  ER: OMAPS00079607 -To Support AcC and Info numbers
/*******************************************************************************
 $Function:	info_num_msg_cb
 $Description:	Dialogue callback function of the information Numbers message window 
 $Returns:		none
 $Arguments:	win - window handler, dialogue id, key pressed				
 
*******************************************************************************/
#ifdef FF_CPHS
void info_num_msg_cb(T_MFW_HND win, USHORT identifier, UBYTE reason)
{
    
    T_MFW_HND parent = mfwParent( mfw_header());    
    TRACE_FUNCTION ("info_num_msg_cb");
    switch (reason) 
    {
        case INFO_KCD_LEFT: 
            // This code is not executed for the case - If mobile is in roaming and service is Network specific.
            if (info_numbers[info_num_level-1]->entry[identifier].entryStat & 0x80) //if bit 8 set/*a0393213 warnings removal - Dialog.Identifier changed to identifier*/
            {	
                TRACE_EVENT("CPHS INFO:Should be number entry");
                if (info_num_level < 4)
            	      cphs_select_info_num(info_num_index);
            }
            else
            {	
                 if (info_num_level < 4)
                 {	
                     TRACE_EVENT("CPHS INFO:Should be dir entry");
                     cphs_get_info_num(info_num_level+1, info_num_index+1);
                 } 
            }
            break;

        default: 
            break;
    }
}
#endif
/*******************************************************************************
 $Function:	info_num_display_cb

 $Description:	Dialogue callback function of the information Numbers display window
 
 $Returns:		none

 $Arguments:	win - window handler, dialogue id, key pressed
				
 
*******************************************************************************/

void info_num_display_cb(T_MFW_HND win, USHORT identifier, UBYTE reason)
{

   // char buf [40];  // RAVI
    
	TRACE_FUNCTION ("info_num_display_cb");

      switch (reason) 
      {
	case INFO_KCD_LEFT: callNumber((UBYTE*)current_info_num.number);
	default: break;  // RAVI - Deafault corrected to default.
	
      }
}
/*******************************************************************************

 $Function:	info_num_exec_cb

 $Description:	Exec callback function of the information Numbers window
 
 $Returns:		none

 $Arguments:	win - window handler
				event - mfw event
				parameter - optional data.
 
*******************************************************************************/
void info_num_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
    T_MFW_WIN	   * win_data = ((T_MFW_HDR *) win)->data;
    T_INFO_NUM_INFO   * data = (T_INFO_NUM_INFO *)win_data->user;
	UBYTE i;
	UBYTE numberOfEntries;
//	ListWinInfo	 * mnu_data = (ListWinInfo *)parameter;   // RAVI


	MmiRsrcGetText(TxtLine1);
	MmiRsrcGetText(TxtLine2);
	MmiRsrcGetText(TxtFax);
	MmiRsrcGetText(TxtData);
    TRACE_FUNCTION (">>>>> info_num_exec_cb()");
	
    switch (event)
	{
	case E_INIT:

		TRACE_EVENT(">>>> info_num_exec_cb() Event:E_INIT");

		 /* initialization of administrative data */


		data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));

		if(data->menu_list_data == 0)
		{
			TRACE_EVENT("Failed memory alloc 1 ");
			return;
		}
		if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL)
			{	numberOfEntries = cphs_voicemail_numbers.count;
				if (numberOfEntries > 4)
					numberOfEntries = 4;
			}
		else
			numberOfEntries = info_numbers[info_num_level-1]->count;
		
		data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( 4 * sizeof(T_MFW_MNU_ITEM) );

		if(data->menu_list_data->List == 0)
		{
			TRACE_EVENT("Failed memory alloc 2");
			return;
		}
		
		for (i = 0; i < numberOfEntries ; i++)
		{
			mnuInitDataItem(&data->menu_list_data->List[i]);
			if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL)
				data->menu_list_data->List[i].str  = (char *)cphs_voicemail_numbers.entries[i].alpha.data;
			else
				data->menu_list_data->List[i].str  = (char *)info_numbers[info_num_level-1]->entry[i].alpha.data;
			data->menu_list_data->List[i].flagFunc = item_flag_none; 
		}

		data->menu_list_data->ListLength =numberOfEntries;
		data->menu_list_data->ListPosition = 1;
		data->menu_list_data->CursorPosition = 1;
		data->menu_list_data->SnapshotSize = numberOfEntries;
		data->menu_list_data->Font = 0;
		if (type_of_list == MAILBOX_LIST_CALL)
			data->menu_list_data->LeftSoftKey = TxtSoftCall;
		else
			data->menu_list_data->LeftSoftKey = TxtSoftSelect;
		data->menu_list_data->RightSoftKey = TxtSoftBack;
		data->menu_list_data->KeyEvents = KEY_ALL;
		data->menu_list_data->Reason = 0;
		data->menu_list_data->Strings = TRUE;
		data->menu_list_data->Attr   = &InfoNum_menuAttrib;
		data->menu_list_data->autoDestroy    = FALSE;
		
		
		/* Create the dynamic menu window */
	    listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)InfonumList_cb,0);
		  
		break;

	case LISTS_REASON_VISIBLE:
	case LISTS_REASON_RESUME:
	{
		dspl_ClearAll();	// sbh - clear screen before update
	
		if (type_of_list == MAILBOX_LIST)
		{	
			softKeys_displayId( TxtSoftSelect, TxtSoftBack, 0, COLOUR_LIST_SUBMENU);
		}
		else if (type_of_list == MAILBOX_LIST_CALL)
		{
			softKeys_displayId( TxtSoftCall, TxtSoftBack, 0, COLOUR_LIST_SUBMENU);			
		}
	
		break;
	}

	default:
	    break;
	}
}
/*******************************************************************************

 $Function:	InfonumList_cb

 $Description:	Callback function for the info num list.
 
 $Returns:		none
 
 $Arguments:	Parent - parent window.
				ListData - Menu item list
*******************************************************************************/

void InfonumList_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
    T_MFW_WIN	    * win_data = ((T_MFW_HDR *)Parent)->data;
    T_INFO_NUM_INFO * data     = (T_INFO_NUM_INFO *)win_data->user;	 
	
//	char debug[40];   // RAVI

TRACE_FUNCTION("InfonumList_cb");
	if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR))
	{
		  listsDestroy(ListData->win);
   	          InfoNum_destroy(data->numbers_win);
	    info_num_level--;
	}
	else if(ListData->Reason EQ LISTS_REASON_SELECT)
	{
		if (type_of_list == MAILBOX_LIST || type_of_list == MAILBOX_LIST_CALL) //get the correct voicemail num
		{	
			cphs_voicemail_numbers.entries[ListData->ListPosition].list_index = ListData->ListPosition;
				
			if (type_of_list == MAILBOX_LIST)
			{	/*If we're editing*/
				TRACE_FUNCTION_P2("List Posn2: %d, MBN: %s", ListData->ListPosition, cphs_voicemail_numbers.entries[ListData->ListPosition].number );
				show_cphs_mb_number(&cphs_voicemail_numbers.entries[ListData->ListPosition]);
				memcpy(&cphs_voicemail_num, &cphs_voicemail_numbers.entries[ListData->ListPosition], sizeof(T_MFW_CPHS_ENTRY));
			}
			else
			{	
				char temp_number[MFW_CPHS_VM_NUMBER_MAXLEN];
			
				memcpy(&cphs_voicemail_num, &cphs_voicemail_numbers.entries[ListData->ListPosition], sizeof(T_MFW_CPHS_ENTRY));
				memset(temp_number, 0, MFW_CPHS_VM_NUMBER_MAXLEN);
				
				/*If we're calling the number*/ 
				//if it's an international number without a '+' 
				if (cphs_voicemail_num.ton == MFW_TON_INTERNATIONAL && cphs_voicemail_num.number[0] != '+')
				{	
					strcat(temp_number, "+");	//put a + in front of number
					strncat(temp_number, (char*)cphs_voicemail_num.number, strlen((char*)cphs_voicemail_num.number));					
					memset((void*)cphs_voicemail_num.number, 0, MFW_CPHS_VM_NUMBER_MAXLEN);
					strncpy((char*)cphs_voicemail_num.number, temp_number, strlen((char *)temp_number));
				}
				
				callNumber(cphs_voicemail_num.number);

			}

			
		}
		else
		{	
#ifdef FF_CPHS
			T_DISPLAY_DATA Dialog;
                     //x0012849: Jagannatha  01 June, 2006  ER: OMAPS00079607 -To Support AcC and Info numbers
                     UBYTE inRoaming;
                     inRoaming = getRoamingStatus();
                     TRACE_EVENT_P1("Roaming status = %d", inRoaming);
#endif					 
                    //get the number/directory
				info_num_index = info_numbers[info_num_level-1]->entry[ListData->ListPosition].index;
				/***************************Go-lite Optimization changes Start***********************/
				//Aug 16, 2004    REF: CRR 24323   Deepa M.D
				TRACE_EVENT_P3("Index selected: %d, Level, %d, entryStat:%d",info_num_index, info_num_level, 
					info_numbers[info_num_level-1]->entry[ListData->ListPosition].entryStat); 
				/***************************Go-lite Optimization changes end***********************/
                            //x0012849: Jagannatha  01 June, 2006  ER: OMAPS00079607 -To Support AcC and Info numbers
                            //0x20 in Binary  0010 0000  - If bit 6 is set to 1 that indicates that service is specific to network.
#ifdef FF_CPHS
				if( (current_info_num.entryStat & 0x20) && inRoaming )
				{
					dlg_initDisplayData_TextStr( &Dialog, TxtSoftOK,  TxtSoftBack, (char*)MmiRsrcGetText(TxtNotAvailable), NULL, COLOUR_STATUS);
					dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC) info_num_msg_cb, THREE_SECS, KEY_RIGHT|KEY_CLEAR );
					Dialog.Identifier = (USHORT)ListData->ListPosition;
					info_dialog( Parent, &Dialog );
				}
                            //x0012849: Jagannatha  01 June, 2006  ER: OMAPS00079607 -To Support AcC and Info numbers
                            //0x10 in Binary  0001 0000  - If bit 5 is set to 1 that indicates that service is charged at premium rate.
				else if(current_info_num.entryStat & 0x10)
				{
					dlg_initDisplayData_TextStr( &Dialog, TxtSoftOK,  TxtSoftBack, (char*)"Charging will be done at a", (char*)"Premium Rate", COLOUR_STATUS);
					dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC) info_num_msg_cb, FOREVER, KEY_LEFT|KEY_RIGHT|KEY_CLEAR );
					Dialog.Identifier = (USHORT)ListData->ListPosition;
					info_dialog( Parent, &Dialog );
				}
				else
				{
#endif				
					if (info_numbers[info_num_level-1]->entry[ListData->ListPosition].entryStat & 0x80) //if bit 8 set
					{	
						TRACE_EVENT("CPHS INFO:Should be number entry");
						if (info_num_level < 4)
							cphs_select_info_num(info_num_index);
					}
					else
					{	
						if (info_num_level < 4)
						{		
							TRACE_EVENT("CPHS INFO:Should be dir entry");
							cphs_get_info_num(info_num_level+1, info_num_index+1);
						}
					}
#ifdef FF_CPHS
				}
#endif
					
		}	
			   
	}

	
}

/*******************************************************************************

 $Function:	InfoNum_destroy

 $Description:	Destroy the info num window.
			
 $Returns:		none

 $Arguments:	own_window- current window
*******************************************************************************/

static void InfoNum_destroy(MfwHnd own_window)
{
    T_MFW_WIN * win_data;
    T_INFO_NUM_INFO	* data;
	UBYTE numberOfEntries;
	
    TRACE_FUNCTION ("InfoNum_destroy()");
	
    if (own_window)
	{
	    win_data = ((T_MFW_HDR *)own_window)->data;
	    data = (T_INFO_NUM_INFO *)win_data->user;

	    if (data)
		{
		    /*
		     * Delete WIN handler
		     */ 
		    win_delete (data->numbers_win);

		    /*	   
		     * Free Memory
		     */
		     if ( ( type_of_list == MAILBOX_LIST ) || ( type_of_list == MAILBOX_LIST_CALL ) )
		    {	numberOfEntries = cphs_voicemail_numbers.count;
				if (numberOfEntries > 4)
					numberOfEntries = 4;
			}
		     else
				numberOfEntries =info_numbers[info_num_level-1]->count;
			if (data->menu_list_data != NULL)
			{	//int i; // RAVI
				FREE_MEMORY ((void *)data->menu_list_data->List, numberOfEntries * sizeof (T_MFW_MNU_ITEM));
			    FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
			    if (type_of_list == INFO_NUM_LIST && info_num_level > 1)//if info numbers, 
				{	FREE_MEMORY((void*)info_numbers[info_num_level-1], sizeof(T_MFW_CPHS_INFONUM_LIST));
				info_numbers[info_num_level-1] = NULL;
			    }
			}
			FREE_MEMORY ((void *)data, sizeof (T_INFO_NUM_INFO));

		}
	    else
		{
		    TRACE_EVENT ("InfoNum_destroy() called twice");
		}
	}
}

/*******************************************************************************

 $Function:	info_num_win_cb

 $Description:	Window callback function for the info numbers window.
 
 $Returns:		none

 $Arguments:	w - mfw window handler
				e - mfw event
				
*******************************************************************************/

static int info_num_win_cb (MfwEvt e, MfwWin *w)    /* yyy window event handler */
{
	TRACE_EVENT ("info_num_win_cb()");
	
	switch (e)
	{
		case MfwWinVisible:  /* window is visible  */
			break;
			
	case MfwWinFocussed: /* input focus / selected	 */	
	case MfwWinDelete:   /* window will be deleted	 */   
		
	default:	    
		return MFW_EVENT_REJECTED;
	}
	return MFW_EVENT_CONSUMED;
}



/*******************************************************************************

 $Function:	mmi_cphs_get_als_info

 $Description:	Returns the current Line enabled
 
 $Returns:		none

 $Arguments:	
				
*******************************************************************************/
//x0pleela 23 May, 2006  DR: OMAPS00070657
#ifdef FF_CPHS
void mmi_cphs_get_als_info()
{
	int nALS_line_data;

	nALS_line_data= mfw_cphs_get_als_info();
	TRACE_EVENT_P1("mmi_cphs_get_als_info() : %d",nALS_line_data);
	switch (nALS_line_data)
    	{
	      	case ALS_MOD_SPEECH:
			als_status.selectedLine = MFW_SERV_LINE1;
			break;
			
	      case ALS_MOD_AUX_SPEECH:
			als_status.selectedLine = MFW_SERV_LINE2;
			break;
	      default:
			als_status.selectedLine = MFW_SERV_NotPresent;
			break;
    }
}


/*******************************************************************************

 $Function:	mmi_cphs_set_als_value

 $Description:	Set the Als flag based on the CSP data read from CPHS enabled SIM
 
 $Returns:		none

 $Arguments:	
				
*******************************************************************************/
//x0pleela 29 May, 2006  DR: OMAPS00070657

void mmi_cphs_set_als_value( UBYTE als_val)
{
	TRACE_FUNCTION("mmi_cphs_set_als_value()");
	Als_flag = als_val;
}

/*******************************************************************************

 $Function:	mmi_cphs_get_als_value

 $Description:	Returns the Als flag value
 
 $Returns:		none

 $Arguments:	
				
*******************************************************************************/
//x0pleela 29 May, 2006  DR: OMAPS00070657

UBYTE  mmi_cphs_get_als_value( void )
{
	TRACE_EVENT_P1("mmi_cphs_get_als_value() %d",Als_flag);
	return Als_flag;
}

#ifdef FF_CPHS_REL4
UBYTE  mmi_cphs_get_msp_value( void )
{
	TRACE_EVENT_P1("mmi_cphs_get_msp_value - MSP_flag - %d", MSP_flag);
	return MSP_flag;
}
#endif
/*******************************************************************************

 $Function:	mmi_get_als_selectedLine

 $Description:	Returns the current Line enabled
 
 $Returns:		none

 $Arguments:	
				
*******************************************************************************/
//x0pleela 30 May, 2006  DR: OMAPS00070657
T_MFW_LINE_INDEX mmi_get_als_selectedLine( void)
{
	return als_status.selectedLine;
}
#endif /* FF_CPHS */