FreeCalypso > hg > tcs211-l1-reconst
diff g23m/condat/ms/src/bmi/MmiMain.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/bmi/MmiMain.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,2473 @@ +/******************************************************************************* + + 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: MMI + $File: MmiMain.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 22/02/01 + +******************************************************************************** + + Description: + + + +******************************************************************************** + + $History: MmiMain.c + + Nov 09, 2005 REF: DVT OMAPS00056873 xdeepadh + Description: Deactivating Bright Light on I-Sample + Solution: On Isample boards the backlight is set off, since the bright LEDS are very disturbing. + + xpradipg - LOCOSTO-ENH-31895 : 23 June 2005 + Description: Support for various audio profiles + Solution: The support for audio device's carkit/headset/loudspeaker/handheld. + The audio device is enabled as per the user actions. + Jul 05, 2005 REF: SPR 31894 xdeepadh + Description: Proposed chnages for Locosto-live sign off + Solution: UICC SIM API will be used for Locosto. + + x0018858 24 Mar, 2005 MMI-FIX-11321 + Issue Description :- If the inbox is full and a new message is receivd, no indication is received. + Fix: Added support for handling indication when message box is full and + there is a pending message. + Apr 05, 2005 REF: ENH 29994 xdeepadh + Description: Implementation of Generic Midi Ringer and Modification of existing Midi Test Application + Solution: Generic Midi Ringer and Midi Test Application were implemented. + + Jan 07, 2005 REF: CRR 26394 xkundadu + Issue description:Logo of the operator not displayed + Solution: Set the network operator logo display option to enbled state. + + Oct 19, 2004 REF: CRR MMI-SPR-26002 xkundadu + Issue description: Golite booting problem. + Solution: If the FFS is not formatted, prevent writing into the FFS. + + 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 + + Jul 22,2004 CRR:20896 xrashmic - SASKEN + Description: The current time format is not highlighted + Fix: The time format is written into flash. Instead of providing the submenu + directly we call a function where we set the menu and also higlight the + previously selected menu item + + + May 10, 2004 REF: CRR 15753 Deepa M.D + Menuitem provided to set the validity period to maximum. + + 25/10/00 Original Condat(UK) BMI version. + + Dec 23, 2005 REF: SR13873 x0020906 + Description: To stop playing ringtone when new sms arrives - when user is in any menu screen. + Fix : Fix is done in keyAction (). + + $End + +*******************************************************************************/ + +#include <stdio.h> +#define ENTITY_MFW + +/* includes */ +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#include "mfw_sys.h" + +#include "mfw_mfw.h" +#include "mfw_kbd.h" +#include "mfw_tim.h" +#include "mfw_lng.h" +#include "mfw_win.h" +#include "mfw_icn.h" +#include "mfw_sim.h" +#include "mfw_nm.h" +/* SPR#1428 - SH - New Editor changes */ +#ifndef NEW_EDITOR +#include "mfw_edt.h" +#endif +#include "mfw_mnu.h" +#include "mfw_phb.h" +#include "mfw_sms.h" +#include "Mfw_td.h"/*SPR 1725*/ +#ifdef SIM_TOOLKIT +#include "mfw_sat.h" +#endif +#include "dspl.h" + + +#include "p_mmi.h" +#include "message.h" +#include "prim.h" +#include "aci_cmh.h" +#include "mfw_mme.h" + +#ifndef _SIMULATION_ +/* BEGIN ADD: Neptune Alignment */ +#ifndef NEPTUNE_BOARD +/* END ADD: Neptune Alignment */ +#include "sys_types.h" +/* BEGIN ADD: Neptune Alignment */ +#else +#include "bmi_integ_misc.h" +#endif +/* END ADD: Neptune Alignment */ +#endif + +#include "MmiMmi.h" +/* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR +#include "ATBCommon.h" +#include "ATBDisplay.h" +#include "ATBEditor.h" +#include "AUIEditor.h" +#endif + +#include "Mmiicons.h" +#include "MmiPins.h" +#include "MmiMain.h" +#include "MmiDialogs.h" +#include "MmiIdle.h" +#include "MmiStart.h" +#include "mmiCall.h" +#include "MmiSimToolkit.h" +#include "gdi.h" +#include "audio.h" +#include "MmiLists.h" +#include "MmiSounds.h" +#include "MmiResources.h" +#include "MmiSettings.h" +#include "MmiTimeDate.h" + +#include "cus_aci.h" +#include "prim.h" +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + + +#ifdef FF_MMI_AUDIO_PROFILE +#include "MmiColours.h" +#endif + + +static MfwHnd times; /* clock via software timer */ +static MfwHnd times_switchoff; /* timer switch off (GB)*/ + + /* GLOBAL CONTROL DATA */ +LngInfo mainLngInfo; /* language control block */ +MfwHnd mainMmiLng; /* global language handler */ + +/* Taking idle data - RAVI - 23-12-2005 */ +#ifdef NEPTUNE_BOARD +extern T_idle idle_data; +#endif +/* END RAVI - 23-12-2005 */ + +#ifndef _SIMULATION_ +extern void AI_Power(SYS_UWORD8 power); +#endif + +#ifdef NEPTUNE_BOARD /* Removal of linker errors */ +void SIM_PowerOff (void); +#endif + +static int keyAction (MfwEvt e, MfwKbd *res); +static int key (MfwEvt e, MfwKbd *kc); +static int timer (MfwEvt e, MfwTim *t); +static void backlight (void); +static int timesEvent (MfwEvt e, MfwTim *t); +static void showGoodBye (T_MFW_HND win); +static void goodbye_cb (void); + + + +static MfwHnd mme; /* our MME manager */ + +U16 GlobalIconStatus; +UBYTE globalMobileMode; +int MmiModule; + +// ADDED BY RAVI - 28-11-2005 +EXTERN int flash_formatted(void); +EXTERN void time_date_init(void); +EXTERN void sms_cb_exit (void); +EXTERN void time_date_delete(void); +EXTERN UBYTE getCurrentRingerSettings(void); +EXTERN UBYTE CphsPresent(void); +EXTERN void cphs_support_check(void); +// END RAVI + +/* batterie and signal start */ +int globalBatteryUpdate(U8 value); +int globalSignalUpdate(U8 value); + +// xpradipg - LOCOSTO-ENH-31895 : 23 June 2005 +#ifdef FF_MMI_AUDIO_PROFILE +extern void mfw_audio_device_indication(U8 notify); +extern void mmi_hook_handle(); +void mmi_device_status_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback); +#endif + + +void globalFlashBattery (void); + +UBYTE globalBatteryPicNumber; +UBYTE globalSignalPicNumber; + +UBYTE globalBatteryMode; /* */ +int globalMme(MfwEvt e, void *para); +/* batterie and signal end */ + +/*MC SPR 1725 removed current clock and date variables*/ + +static LONG second; +static U8 deregis = FALSE; /* status deregistration */ + +// SH 6/03/02 - HUPKeyOrigin is 1 if POWER_KEY is pressed in idle screen, 0 otherwise +// Means that long press of HUP key will go to idle screen, not just shut down +UBYTE HUPKeyOrigin; +int off_switch; /* distinguish between on- and off switching to display a goodbye message*/ +/* SPR877 - SH - set to TRUE if welcome animation has finished */ +extern UBYTE animation_complete; + +T_MFW_CFLAG_STATUS DivertStatus = MFW_CFLAG_NOTSet; +#define TIME_MINUTE 60000 +#define TIMEDOWN 120000L /* time for powerdown 2min */ +#define TIME_SWITCH_OFF 3000 /* switch off time delay */ +//Jul 05, 2005 REF: SPR 31894 xdeepadh +//The reader_id BSP_UICC_DEFAULT_READER_ID will be 0x01. +#ifdef TI_PS_UICC_CHIPSET_15 +#define BSP_UICC_DEFAULT_READER_ID 0x01 +#endif + + +/* Amounts to: 128 (format mode) + 8 (overwrite mode) */ + +/******************************************************************************* + + $Function: + + $Description: general editor control + + $Returns: none. + + $Arguments: + +*******************************************************************************/ + +/* SPR#1428 - SH - New Editor changes - this version of editControls used + * by new editor. The rest is now in AUITextEntry */ + +#ifdef NEW_EDITOR + +UBYTE editControls [KCD_MAX] = /* edit control keys: */ +{ + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + '*', '#', ctrlNone, ctrlNone, ctrlUp, ctrlDown, ctrlLeft, ctrlRight, + ctrlNone, ctrlNone, ctrlEnter, ctrlNone, ctrlNone, ctrlNone, + ctrlNone, ctrlNone, ctrlEnter +}; + +#else /* NEW_EDITOR */ + +static MfwHnd myHandle = 0; /* editors handle */ +static MfwHnd editTim = 0; /* the editor timer */ +static char *formatHandle; // SH - pointer to format string, so that editEventKey can see it +static int *formatIndex; // SH - pointer to format index +static int *fieldIndex; // SH - pointer to field position +static char *tmpBuf; // SH - pointer to temporary buffer for hidden alphanumeric entry + +#define KEY_PAD_MAX 5 + +UBYTE editControls [KCD_MAX] = /* edit control keys: */ +{ + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + '*', '#', ecNone, ecNone, ecUp, ecDown, ecLeft, ecRight, + ecNone, ecNone, ecEnter, ecNone, ecNone, ecNone, + ecNone, ecNone, ecEnter +}; + +static UBYTE editAlphaMode; /* alpha mode flag */ +static UBYTE editCalcMode; /* calculator mode flag */ +static UBYTE editFormatMode; /* format mode flag */ +static UBYTE editHiddenMode; /* hidden alphanumeric mode */ +static UBYTE editAlphaLevel; /* alpha level selected */ +static UBYTE editAlphaKey; /* alpha mode current key */ + + + +static UBYTE editAlpha [12][KEY_PAD_MAX] = /* alpha mode characters */ +{ + {'.','+','-','=','0'}, //0 key + {' ','?','!','1',':'}, {'a','b','c','2',')'}, {'d','e','f','3','('}, // 1 2 3 + {'g','h','i','4','$'}, {'j','k','l','5',' '}, {'m','n','o','6',','}, // 4 5 6 + {'p','q','r','s','7'}, {'t','u','v','8',';'}, {'w','x','y','z','9'}, // 7 8 9 + {'*','#','%','&',' '}, {' ','\'','\"','@','/'} // star and hash keys +}; + +static UBYTE editAlphaU [12][KEY_PAD_MAX] = /* upCase alpha mode characters*/ +{ + {'.','+','-','=','0'}, //0 key + {' ','?','!','1',':'}, {'A','B','C','2',')'}, {'D','E','F','3','('}, // 1 2 3 + {'G','H','I','4','$'}, {'J','K','L','5',' '}, {'M','N','O','6',','}, // 4 5 6 + {'P','Q','R','S','7'}, {'T','U','V','8',';'}, {'W','X','Y','Z','9'}, // 7 8 9 + {'*','#','%','&',' '}, {' ','\'','\"','@','/'} // star and hash keys +}; + + +int upCase= TRUE; + + +static int editEventTim (MfwEvt e, MfwTim *t); +static void editShowHeader (void); + +#endif /* NEW_EDITOR */ + +#ifdef FF_MMI_AUDIO_PROFILE +extern T_call call_data; +#endif + +#ifdef NEPTUNE_BOARD +#ifdef MMI_POWER_MANAGEMENT_TEST +EXTERN MfwHnd timer_handle; +EXTERN unsigned char Screen_Update; +#endif +#endif + +/******************************************************************************* + + $Function: mainInit + + $Description: init MMI main module + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void mainInit (UBYTE InitCause) +{ + int i; + T_MFW_SMS_INFO sms_settings; + //x0018858 24 Mar, 2005 MMI-FIX-11321 + //added structures for storing the indication settings and CMER settings. + T_ACI_MM_CIND_VAL_TYPE cindSettings; + T_ACI_MM_CMER_VAL_TYPE cmerSettings; + TRACE_FUNCTION("maininit"); + + mfwSetSignallingMethod(1); + winAutoFocus(TRUE); + mfwSetFocus(0); /* reset focus */ + + + /*MC SPR 1111*/ + /*MC check to see if language already selected and saved to FFS*/ + +// Oct 19, 2004 REF: CRR MMI-SPR-26002 xkundadu +// Issue description: Golite booting problem. +// Solution: If the FFS is not formatted, dont write into the FFS. +// In that case just set the langauge to English and do the mmi +// layout settings. + if(flash_formatted() == TRUE) + { + if (flash_read() >= EFFS_OK) + { TRACE_EVENT_P1("FFS_flashData.language: %d", FFS_flashData.language); + + /*MC SPR 1150 if language is not 0 and not greater than the maximum language code*/ + if (FFS_flashData.language != NULL && FFS_flashData.language<= NO_OF_LANGUAGES) + MmiRsrcSetLang(FFS_flashData.language);/*MC, change to stored language*/ + else + MmiRsrcSetLang(ENGLISH_LANGUAGE); + + /*API - 28/07/03 - CQ10203 - If the flash value not set set to default VP_REL_24_HOURS*/ + if((FFS_flashData.vp_rel != VP_REL_1_HOUR) && + (FFS_flashData.vp_rel != VP_REL_12_HOURS) && + (FFS_flashData.vp_rel != VP_REL_24_HOURS) && + (FFS_flashData.vp_rel != VP_REL_1_WEEK)&& + (FFS_flashData.vp_rel != VP_REL_MAXIMUM)) // May 10, 2004 REF: CRR 15753 Deepa M.D + { + FFS_flashData.vp_rel = VP_REL_24_HOURS; + } + /*API - 28/07/03 - CQ10203 - END */ + + /*NDH - 13/01/04 - CQ16753 - Propogate the Validity Period Settings to the ACI */ + sms_settings.vp_rel = FFS_flashData.vp_rel; + (void)sms_set_val_period(&sms_settings); + /*NDH - 13/01/04 - CQ16753 - END */ + } + else + { + /* GW If flash read fails set up default settings. */ + /* This will also save the settings to flash */ + memset(&FFS_flashData, 0x00, sizeof(FFS_flashData)); + /*default language is english*/ + setUserSettings2Default(); + } + } +// Oct 19, 2004 REF: CRR MMI-SPR-26002 xkundadu +// Issue description: Golite booting problem. +// Solution: If the FFS is not formatted, dont write into the FFS. +// In that case just set the langauge to English and mmi +// layout settings. + else + { + // Set the default language to English. + MmiRsrcSetLang(ENGLISH_LANGUAGE); + + // Jan 07, 2005 REF: CRR 26394 xkundadu + // Issue description:Logo of the operator not displayed + // Solution: Set the network operator logo display option to enbled state. + // Set other user settings also to default values. + + #ifndef MMI_LITE + memset(&FFS_flashData, 0x00, sizeof(FFS_flashData)); + setUserSettings2Default(); + #endif + } +/*mc end*/ + HUPKeyOrigin = 0; // sbh + off_switch=0; /* 0 is stands for mobile is swiched on */ + animation_complete = FALSE; + + kbdAlways((MfwCb)keyAction); /* global keyboard access */ + kbdTime(2000,1000,400); /* long / repeat timeouts */ + + mainMmiLng = lngCreate(0,0,&mainLngInfo,0); /* language handler */ + + // times clock event + times = timCreate(0,TIME_MINUTE,(MfwCb)timesEvent); +// xpradipg - LOCOSTO-ENH-31895 : 23 June 2005 +// additional events addes for carkit and headset +#ifdef FF_MMI_AUDIO_PROFILE + mme = mmeCreate(0, MfwMmeSignal|MfwMmeBattery|MfwMmeBaState|MfwMmeHeadset|MfwMmeCarkit, (MfwCb)globalMme); +#else + mme = mmeCreate(0, MfwMmeSignal|MfwMmeBattery|MfwMmeBaState, (MfwCb)globalMme); +#endif + + /*Setup when we want the backlight to come on*/ +// Nov 09, 2005 REF: DVT OMAPS00056873 xdeepadh +//On Isample boards the backlight is set off, since the bright LEDS are very disturbing. + + for (i=0;i<BL_LAST_OPTION;i++) +#if (BOARD == 71) + mme_setBacklightEvent(i,BL_NO_LIGHT); +#else + mme_setBacklightEvent(i,BL_MAX_LIGHT); +#endif + +#if (BOARD == 71) + mme_setBacklightEvent(BL_IDLE_TIMER,BL_NO_LIGHT); +#else + mme_setBacklightEvent(BL_IDLE_TIMER,BL_SET_IDLE); +#endif + + mme_setBacklightEvent(BL_EXIT,BL_NO_LIGHT); + + /*and tell the backlight that the init event has happened */ + mme_backlightEvent(BL_INIT); + + //x0018858 24 Mar, 2005 MMI-FIX-11321 + //Added two functions to set the indication and CMER values. + //begin + sms_set_cind_values(&cindSettings); + sms_set_cmer_values(&cmerSettings); + //end. + +//RM test 14-07 second = 0; + /*SPR 1725, replace FFS clock data with RTC*/ + time_date_init(); + + deregis = FALSE; + timStart(times); /* start clock */ + + + startExec(PhoneInit,0); /* get it rolling */ + +} + +/******************************************************************************* + + $Function: mainExit + + $Description: exit MMI main module + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void mainExit (UBYTE InitCause) +{ + TRACE_FUNCTION("mainExit"); + + startExit(); + sim_exit(); /* finit SIM handler */ + lngDelete(mainMmiLng); mainMmiLng = 0; + timDelete(times); + sms_cb_exit ();/*MC SPR1920 clean up cell broadcast*/ + mmeDelete(mme); mme = 0; + kbdAlways(0); + dspl_ClearAll(); + time_date_delete();/*SPR 1725*/ +//Apr 05, 2005 REF: ENH 29994 xdeepadh +//Free the memory + #ifdef FF_MIDI_RINGER + sounds_midi_exit(); + #endif +} + +/******************************************************************************* + + $Function: keyAction + + $Description: handler called on every keyboard action + + $Returns: + + $Arguments: + +*******************************************************************************/ +static int keyAction (MfwEvt e, MfwKbd *res) +{ + /* this function "keyAction" is called 4*times from MFW per each keypress */ + /* twice for keypress and twice for keyrelease */ + /* the variable "toggle" is using to avoid to play the keypadtone twice ! */ + static UBYTE toggle = TRUE; +#ifdef NEPTUNE_BOARD /* OMAPS00033660 */ + static unsigned char cKeySound = 0; +#endif + + /* this mask is use to filter the keyevent "e" */ + /* want to use KEY_0, KEY_1,...... KEY_HASH */ + USHORT mask = 0x0FFF; + + /* Initialize - RAVI - 23-12-2005 */ + UBYTE currentRinger = 0; + + + /* terminate the ringing in all situation (it doesnt matter where the user is */ + if ( (e & KEY_HUP) && (e & KEY_MAKE) ) + { +/* Apr 05, 2005 REF: ENH 29994 xdeepadh */ +/* terminate the ringing */ +#ifndef FF_MIDI_RINGER + currentRinger = getCurrentRingerSettings(); + audio_StopSoundbyID( AUDIO_BUZZER, currentRinger ); +#endif + + } + + /* the power-off-key ! */ + if ( (e & KEY_POWER) && (e & KEY_MAKE)) + { + TRACE_EVENT("KEY_POWER pressed !!!!"); + + if (pinsIsFocussed() EQ FOCUSSED_PINS) + { + pin_exit(); + HUPKeyOrigin=1; + } + else if (idleIsFocussed()) + { + HUPKeyOrigin=1; + } + + if ((HUPKeyOrigin==1) && (off_switch == 0)) + { + /* + ** Only pass through this once, off_switch must be 0 because Key_Action is called twice + ** for each key press. + */ + TRACE_EVENT("In idle window."); + showGoodBye ( idle_get_window () ); + times_switchoff = timCreate(0,THREE_SECS,(MfwCb)goodbye_cb); + timStart(times_switchoff); + off_switch++; + deregis = TRUE; + } + } + + HUPKeyOrigin = 0; + + + /* every other calls */ + if(toggle) + { +#ifdef SIM_TOOLKIT + /*SPR#2121 - DS - Only download event to SAT if the event has been registered + * by the SAT Setup Event List command + */ + if (satEvtRegistered(SatEvtUserActionActivated) == TRUE) + { + satEvtDownload(SatEvtUserAction); + } +#endif + +/* Stop Playing ring tone - RAVI - 23-12-2005 */ + #ifdef NEPTUNE_BOARD + if(idle_data.new_sms == TRUE) + { + currentRinger = getcurrentSMSTone(); + audio_StopSoundbyID( AUDIO_BUZZER, currentRinger ); + + /* Till this audio is stopped and next is played. */ + vsi_t_sleep( 0, 10 ); + } + + cKeySound = 1; /* OMAPS00033660 */ + if( idle_data.edt_buf[0] != '\0' ) + { + if( idle_data.edt_buf[0] == '*' || idle_data.edt_buf[0] == '#' ) + { + cKeySound = 0; + } + } + else + { + if ( (e & KEY_HASH) || ( e & KEY_STAR ) ) + { + cKeySound = 0; + } + } + + if( cKeySound == 1 ) + { + + #endif /* OMAPS00033660 */ + /* END RAVI - 23-12-2005 */ + + if ((FFS_flashData.settings_status & SettingsKeypadClick) && (e & KEY_MAKE)) + { + TRACE_EVENT ("Keypad Click activ"); +/* Start Playing key tones on key press - RAVI 23-12-2005 */ +#ifndef NEPTUNE_BOARD + audio_PlaySoundID(0, TONES_KEYBEEP, 200, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else +/* RAVI - 20-1-2006 */ + /* Silent Implementation */ + /* Changed 0 to getCurrentVolumeSetting () */ + audio_PlaySoundID(0, (TONES_KEYBEEP), getCurrentVoulmeSettings(), + AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + } + else if ((FFS_flashData.settings_status & SettingsKeypadDTMF) && (e & KEY_MAKE)) + { + TRACE_EVENT ("Keypad DTMF activ"); + switch (e &= mask) + { + case KEY_0: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_0), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, (TONES_DTMF_0), 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_1: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_1), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_1, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_2: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_2), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_2, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_3: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_3), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_3, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_4: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_4), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_4, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_5: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_5), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_5, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_6: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_6), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_6, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_7: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_7), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_7, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_8: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_8), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_8, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_9: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_9), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_9, 0,AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_STAR: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_STAR), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_STAR, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + case KEY_HASH: +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, (TONES_DTMF_HASH), getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#else + audio_PlaySoundID(0, TONES_DTMF_HASH, 0, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + break; + default: + break; + + } + } + +#ifdef NEPTUNE_BOARD + } + #endif + + } + + /* toggle the variable */ + if(toggle) + { + toggle = FALSE; + } + else + { + toggle = TRUE; + } + + + return 0; +} + +/******************************************************************************* + + $Function: key + + $Description: keyboard event handler + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +// switching the mobile on +static int key (MfwEvt e, MfwKbd *kc) +{ + +TRACE_FUNCTION("Initial key"); +//---------------start : Mobile On------------------- + TRACE_EVENT(" Mobile ON"); + /* set the state of mobile on */ + globalMobileMode = (globalMobileMode | GlobalMobileOn); + + +//startExec(PhoneInit,0); /* get it rolling */ + + return 1; +} +/******************************************************************************* + + $Function: globalMme + + $Description: MME event handler + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +int globalMme(MfwEvt e, MfwHnd para) +{ + MfwMme* mc = (MfwMme*)para; + + U8 value; +#ifdef FF_MMI_AUDIO_PROFILE + MfwHnd win = call_data.win_incoming; + MfwWin * win_data ; + T_dialog_info * data; + T_MFW_HND parent_win; + USHORT Identifier; + void (* Callback)(); + + if( win != NULL) + { + win_data = (MfwWin*)((T_MFW_HDR *)win)->data; + data = (T_dialog_info *)win_data->user; + parent_win = data->parent_win; + Identifier = data->Identifier; + Callback= data->Callback; + } +#endif + + TRACE_FUNCTION("globalMme"); + + switch(e) { + case MfwMmeSignal : + TRACE_EVENT("Mme Event: Signal"); + value = (U8)mc->value;//JVJE + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P1 ("Event MfwMmeSignal %d", value); + /***************************Go-lite Optimization changes end***********************/ + globalSignalUpdate(value); /*Update the value of the fieldstrength */ + + break; + + case MfwMmeBattery: + TRACE_EVENT("Mme Event: Battery...."); + break; + + + case MfwMmeBaState: + TRACE_EVENT("Mme Event: State...."); + + value = (U8)mc->value; + switch(value) + { + + /* External Power Plugged Off */ + case 0: + TRACE_EVENT("Mme Event:Discharging"); + globalMobileMode = globalMobileMode & (~GlobalCharging); + globalMobileMode = globalMobileMode & (~GlobalBatteryPower); + break; + + /* Mme Event: External Power Connected or End of Charge */ + case 1: + TRACE_EVENT("Mme Event:GlobalBatteryPower"); + globalMobileMode = globalMobileMode & (~GlobalCharging); + globalMobileMode = (globalMobileMode | GlobalBatteryPower); + /* indicate that the battery is full*/ + globalBatteryMode = GlobalBatteryFull; + TRACE_EVENT("globalBatteryPicNumber = GlobalBatteryFull"); + break; + /* Mme Event: Start of Charge */ + case 2: + TRACE_EVENT("Mme Event:Charging"); + globalMobileMode = globalMobileMode & (~GlobalBatteryPower); + globalMobileMode = (globalMobileMode | GlobalCharging); + globalFlashBattery (); + break; + default: + break; + } + break; +// xpradipg - LOCOSTO-ENH-31895 : 23 June 2005 +#ifdef FF_MMI_AUDIO_PROFILE +//indicates the events related to the headset + case MfwMmeHeadset: + value = (U8)mc->value; + switch(value) + { + case AUDIO_HEADSET_HOOK_DETECT: + { + TRACE_EVENT("AUDIO_HEADSET_HOOK_DETECT"); + if( winIsFocussed(call_data.win_incoming)) + { + dialog_info_destroy(win); + (Callback)(parent_win,Identifier, INFO_KCD_LEFT); + } + else if(call_data.win) + mmi_hook_handle(); + } + break; + case AUDIO_HEADSET_UNPLUGGED: + TRACE_EVENT("AUDIO_HEADSET_UNPLUGGED"); + mmi_device_status_info(NULL,TxtHeadset,TxtRemoved,NULL); + mfw_audio_device_indication(value); + break; + case AUDIO_HEADSET_PLUGGED: + TRACE_EVENT("AUDIO_HEADSET_PLUGGED"); + mmi_device_status_info(NULL,TxtHeadset,TxtInserted,NULL); + mfw_audio_device_indication(value); + break; + } + break; +//indicates the events related to the carkit + case MfwMmeCarkit: + value = (U8) mc->value; + switch(value) + { + case AUDIO_CARKIT_UNPLUGGED: + TRACE_EVENT("AUDIO_CARKIT_UNPLUGGED"); + mmi_device_status_info(NULL,TxtCarkit,TxtRemoved,NULL); + mfw_audio_device_indication(value); + break; + case AUDIO_CARKIT_PLUGGED: + TRACE_EVENT("AUDIO_CARKIT_PLUGGED"); + mmi_device_status_info(NULL,TxtCarkit,TxtInserted,NULL); + mfw_audio_device_indication(value); + break; + } + break; +#endif + + default: + return 1; + } + return 1; +} + +/******************************************************************************* + + $Function: backlight + + $Description: switch on backlight for certain time + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +static void backlight (void) +{ + + +} + +/******************************************************************************* + + $Function: timesEvent + + $Description: times event clock + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +static int timesEvent (MfwEvt e, MfwTim *t) +{ + + //RM only for PC testing + second += 60; /* increase seconds */ + + + idleEvent(IdleUpdate); + + /*MC CONQUEST 5999->6007,21/05/02 if CPHS reading didn't work on switch-on, try again*/ + if (CphsPresent() == CPHS_ERR) + cphs_support_check(); + + + mme_backlightEvent(BL_IDLE_TIMER); + + timStart(times); + + return 1; +} + + +/******************************************************************************* + + $Function: showCLOCK + + $Description: display clock + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void showCLOCK(void) +{ /*SPR 1725, use new function to get clock string*/ + dspl_TextOut(30,24,0,(char *)mfw_td_get_clock_str()); +} +/******************************************************************************* + + $Function: setClockFormat + + $Description: used to switch between 24 hour and 12 hour display format + + $Returns: none. + + $Arguments: format enum + +*******************************************************************************/ +void setClockFormat(UBYTE format) +{/*SPR 1725, use new function to set clock format*/ + if (format == MFW_TIME_FORMAT_12HOUR) + FFS_flashData.time_format = MFW_TIME_FORMAT_12HOUR; + else + FFS_flashData.time_format = MFW_TIME_FORMAT_24HOUR; +// Jul 22,2004 CRR:20896 xrashmic - SASKEN +// The timeformat was not being written into the flash. + flash_write(); + + mfw_td_set_time_format((T_MFW_TIME_FORMAT)format); +} +// Issue Number : MMI-SPR-12159 on 07/04/04 by Rashmi C N and Deepa M D +// change by Sasken ( Rashmi C N and Deepa M D) on April 07th 2004 +// Bug : The AM PM for 12 hour fomrat was not being shown +// Solution : Added the following function to get the current time format from flash +UBYTE getClockFormat() +{ + return FFS_flashData.time_format; +} + +/*SPR 1725, removed ClockSet and DateSet functions*/ + +/******************************************************************************* + + $Function: showDATE + + $Description: display date + + $Returns: + + $Arguments: + +*******************************************************************************/ +void showDATE(void) +{/*SPR 1725, use new function to get date string*/ + dspl_TextOut(0,10,0,mfw_td_get_date_str()); + +} + + +/******************************************************************************* + + $Function: displayAlignedText + + $Description: Display text horizontally aligned [left|right|center] in specified row. + + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void displayAlignedText( T_MMI_ALIGN x_alignment, USHORT y_lineNum, UBYTE attrib, char* string ) +{ + int stringLength = 0; + USHORT startXPos = 0; // starting X pos for display + + dspl_DevCaps deviceCaps; + + dspl_GetDeviceCaps(&deviceCaps); + + /* SPR#1983 - SH - Shouldn't use strlen for unicode string. + * 0 means whole string will be used. */ + + stringLength = (int)dspl_GetTextExtent(string, 0); + + TRACE_EVENT_P2("aligned %d, extent = %d", x_alignment, stringLength); + + switch ( x_alignment ) + { + case LEFT: + + break; + + case RIGHT: + startXPos = (USHORT) deviceCaps.Width - stringLength /*- OneCharLen*/ ; + break; + + case CENTER: + startXPos = (USHORT) (deviceCaps.Width - stringLength) / 2; + break; + + } + + dspl_TextOut(startXPos, y_lineNum, attrib, (char*)string ); +} +/******************************************************************************* + + $Function: displayAlignedPrompt + + $Description: Display prompt horizontally aligned [left|right|center] in specified row. + + $Returns: + + $Arguments: + +*******************************************************************************/ +void displayAlignedPrompt( T_MMI_ALIGN x_alignment, USHORT y_lineNum, UBYTE attrib, int string_id ) +{ + int stringLength = 0; + USHORT startXPos = 0; // starting X pos for display + + dspl_DevCaps deviceCaps; + + dspl_GetDeviceCaps(&deviceCaps); + + + /* Marcus: Issue 1123: 12/09/2002: Replaced use of strlen with dspl_str_length for Unicode */ + stringLength=dspl_str_length((char*)MmiRsrcGetText( string_id )); + switch ( x_alignment ) + { + case LEFT: + + break; + + case RIGHT: + startXPos = (USHORT) deviceCaps.Width - stringLength /*- OneCharLen*/ ; + break; + + case CENTER: + startXPos = (USHORT) (deviceCaps.Width - stringLength) / 2; + break; + + } + + PROMPT(startXPos, y_lineNum, attrib, string_id ); +} +/******************************************************************************* + + $Function: mainShutdown + + $Description: + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void mainShutdown(void) +{ + + TRACE_FUNCTION("mainShutdown ()"); + + if(deregis) + { + //---------------start: Mobile OFF------------------- + TRACE_EVENT(" Mobile OFF"); + /* delete the state of mobile on */ + globalMobileMode = globalMobileMode & (~GlobalMobileOn); + + deregis = FALSE; + + mmiExit();/* RM 20-07 */ + +//Jul 05, 2005 REF: SPR 31894 xdeepadh +// SIM functionality has been replaced by UICC in Locosto. +#ifdef TI_PS_UICC_CHIPSET_15 + simdrv_poweroff(BSP_UICC_DEFAULT_READER_ID); +#else + SIM_PowerOff(); +#endif +#ifndef _SIMULATION_ + AI_Power(0); +#endif + + } +} +/******************************************************************************* + + $Function: globalBatteryUpdate + + $Description: Update the value of the battery after the MME event + + $Returns: + + $Arguments: + +*******************************************************************************/ +int globalBatteryUpdate (U8 value) +{ + + MmiModuleDel (ModuleBattLow); /* delete the state */ + + globalBatteryMode = GlobalBatteryGreater5; + + + + switch (value) + { + case 0: /* battery low */ + globalBatteryPicNumber = 0; + globalBatteryMode = GlobalBatteryLesser5; + + /* is just a global status */ + MmiModuleSet (ModuleBattLow); /* set the state */ + + + break; + + case 1: + globalBatteryPicNumber = 1; + break; + + case 2: + globalBatteryPicNumber = 2; + break; + + case 3: + globalBatteryPicNumber = 3; + break; + + case 4: + globalBatteryPicNumber = 4; + break; + + default: + globalBatteryPicNumber = 2; + break; + } + + idleEvent(IdleUpdate); + + return 0; +} + + +/******************************************************************************* + + $Function: globalSignalUpdate + + $Description:Update the value of the fieldstrength after the MME event + + $Returns: + + $Arguments: + +*******************************************************************************/ +int globalSignalUpdate (U8 value) +{ + + globalSignalPicNumber = value; + + idleEvent(IdleUpdate); +#ifdef NEPTUNE_BOARD + dspl_Enable(1); +#endif + return 0; +} + + + +/******************************************************************************* + + $Function: globalFlashBattery + + $Description: exit MMI main module + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void globalFlashBattery (void) +{ + TRACE_EVENT(" globalFlashBattery "); + + globalBatteryPicNumber++; + + if(globalBatteryPicNumber > 4) + globalBatteryPicNumber = 0; + + idleEvent(IdleUpdate); + TRACE_EVENT(" start the timer for Blink "); + + +} + +/* SPR#1428 - SH - New Editor: this is all obsolete with new editor. Equivalent + * functionality can be found in AUITextEntry.c */ + +#ifndef NEW_EDITOR +/******************************************************************************* + + $Function: editShowHeader + + $Description: displays the new character over the cursor + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +/*MC SPR 1242 merged in b-sample version of this function */ +static void editShowHeader (void) +{ + int alphachar; + MfwEdt *edit = ((MfwHdr *) myHandle)->data; + + TRACE_FUNCTION("editShowHeader"); + + edtChar(myHandle,ecDel); + if (upCase) + alphachar = editAlphaU[editAlphaKey][editAlphaLevel]; + else + alphachar = editAlpha[editAlphaKey][editAlphaLevel]; + + if (!(editAlphaMode && editAlphaKey != KCD_MAX)) + alphachar= ' '; + else if (editHiddenMode) // SH - in hidden mode... + tmpBuf[edit->cp] = alphachar; // store character in buffer +#ifdef NO_ASCIIZ + /*MC, SPR 940/2 01/08/02, don't need to check for language, tag should be enough*/ + if (edit->attr->text[0] == 0x80/*MC 22/07/02*/) + alphachar = alphachar << 8; +#endif +{/*NM p025*/ + edit->attr->alphaMode = TRUE; +} + + edtChar(myHandle,alphachar); + + /* + is this actually useless after insert a + character to call "ecRight" and then "ecLeft" + For the multitap we need only two steps: + "ecDel" plus insert the character + + edtChar(myHandle,ecLeft);*/ + + + {edit->attr->alphaMode = FALSE;} + + /*p025 end*/ + +} + +/******************************************************************************* + + $Function: editEventTim + + $Description: executes the timer event from the edit component + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +/*MC SPR 1242 merged in b-sample version of this function */ +static int editEventTim (MfwEvt e, MfwTim *t) +{ + char *format = formatHandle; // SH - temporary format template + + TRACE_FUNCTION("editEventTim"); + + if (!(editAlphaMode || editFormatMode)) + return 1; + + +/*MC, SPR925 23/07/02, removed variable assignment for chinese */ + + // SH - modifications for format mode & hidden mode + if (editFormatMode) // SH - advance format pointer when + { + if (editHiddenMode) + { + editCharFindNext('*'); + } + else + editCharFindNext(ecRight); + } + else if (editHiddenMode) + { + edtChar(myHandle,'*'); + } + // end of modifications + + else + edtChar(myHandle,ecRight); + + editAlphaLevel = KEY_PAD_MAX-1; + editAlphaKey = KCD_MAX; + + return 1; +} + + +/******************************************************************************* + + $Function: editEventKey + + $Description: executes the timer event form the edit component + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +int editEventKey (MfwEvt e, MfwKbd *k) +{ +/*MC SPR 1242 merged in b-sample version of this function */ + MfwEdt *edit; + char *tb; + UBYTE ch = '.'; + + char *format = formatHandle; // SH - temporary format template + char formatchar; // SH - Current format character + char alphachar; // SH - Current multi-tap character + int safetycounter; // SH - Stops searching forever to find compatible character + BOOL validCharacter; // SH - flag to indicate whether character is accepted + + BOOL unicode; /* SPR957 - SH - TRUE if string is unicode */ + + /*NM p026*/ + if (!myHandle) // If we've reached the end of the format string, don't allow input + return 1; + + /* Over the editor handle "e" we have now the access to + * the editor buffer "tb". We need it e.g "editCalcMode" + * to check the buffer */ + + edit = ((MfwHdr *) myHandle)->data; + tb = edit->attr->text; + /*p026 end*/ + + /* SPR957 - SH - TRUE if string is unicode */ + if (tb[0]==0x80) + unicode = TRUE; + else + unicode = FALSE; + + /* SH - formatted input mode (for WAP) */ + + if (editFormatMode) + { + if (k->code==KCD_HUP) // Escape from edit screen + return 0; + + if (edit->cp >= (edit->attr->size)) // If at last character of editor, don't + { + return 1; // print character + } + + formatchar = format[*formatIndex]; + + if (formatchar == NULL) // If we've reached the end of the format string, don't allow input + return 1; + + if ((formatchar>'0' && formatchar<='9') || formatchar=='*') // Delimiter for format field + { + (*formatIndex)++; + *fieldIndex = 0; + formatchar = format[*formatIndex]; // Next character is the format for the field + } + + /* Multi-tap input + * + * The user presses a different key, meaning the previous character must be entered */ + + if (editAlphaKey != KCD_MAX && editAlphaKey != k->code) + { + timStop(editTim); + + alphachar = NULL; + + switch(formatchar) + { + case 'X': // Uppercase alphabetic only + case 'A': // Uppercase alphabetic or punctuation + alphachar = editAlphaU[editAlphaKey][editAlphaLevel]; + break; + + case 'x': // Lowercase alphabetic only + case 'a': // Lowercase alphabetic or punctuation + alphachar = editAlpha[editAlphaKey][editAlphaLevel]; + break; + + case 'M': + case 'm': + if (upCase) + alphachar = editAlphaU[editAlphaKey][editAlphaLevel]; + else + alphachar = editAlpha[editAlphaKey][editAlphaLevel]; + break; + } + + if (alphachar!=NULL) + { + if (editHiddenMode) // SH - in hidden mode... + { + tmpBuf[edit->cp] = alphachar; // store character in buffer + alphachar = '*'; // ...and show star + } + editCharFindNext(alphachar); // Add number to buffer & advance cursor + editAlphaLevel = KEY_PAD_MAX-1; + editAlphaKey = KCD_MAX; + if (edit->cp >= (edit->attr->size)) // If at last character of editor, don't + return 1; // allow another character + } + } + + formatchar = format[*formatIndex]; + + if (k->code <= KCD_9) // Key pressed is 0 - 9. + { + + /* Numeric */ + + if (formatchar == 'N') // A numeric digit is expected + { + if (editHiddenMode) + { + tmpBuf[edit->cp] = editControls[k->code]; + editCharFindNext('*'); + } + else + editCharFindNext(editControls[k->code]); // Add number to buffer & advance cursor + editAlphaLevel = KEY_PAD_MAX-1; // Reset multi-tap settings + editAlphaKey = KCD_MAX; + return 1; + } + + /* Multi-tap alphanumeric */ + + alphachar = NULL; + + if (!strchr("XxAaMm",formatchar)) // If not a valid format code, exit + return 1; + + if (strchr("Xx",formatchar) && k->code<KCD_2) // 0 and 1 keys not valid in these modes + return 1; + + editAlphaKey = k->code; // Store the key pressed + editAlphaLevel++; // Increment through list of symbols + if (editAlphaLevel > (KEY_PAD_MAX-1)) // List wraps round + editAlphaLevel = 0; + + safetycounter = 0; + while (alphachar==NULL && safetycounter<KEY_PAD_MAX) + { + validCharacter = FALSE; + + switch(formatchar) + { + case 'X': + alphachar = editAlphaU[editAlphaKey][editAlphaLevel]; // Uppercase... + validCharacter = (alphachar>='A' && alphachar<='Z'); // ...alphabetic only + break; + + case 'x': + alphachar = editAlpha[editAlphaKey][editAlphaLevel]; // Lowercase + validCharacter = (alphachar>='a' && alphachar<='z'); // ...alphabetic only + break; + + case 'A': + alphachar = editAlphaU[editAlphaKey][editAlphaLevel]; // Uppercase... + validCharacter = (alphachar<'0' || alphachar>'9'); // ..non-numeric + break; + + case 'a': + alphachar = editAlpha[editAlphaKey][editAlphaLevel]; // Lowercase... + validCharacter = (alphachar<'0' || alphachar>'9'); // ..non-numeric + break; + + case 'M': + case 'm': + if (upCase) // User-selected case... + alphachar = editAlphaU[editAlphaKey][editAlphaLevel]; + else + alphachar = editAlpha[editAlphaKey][editAlphaLevel]; + validCharacter = TRUE; // ...any character accepted + break; + } + + if (!validCharacter) // If character isn't uppercase alphabetic, + { // find the next one that is, + alphachar = NULL; + safetycounter++; // (but don't search forever) + editAlphaLevel++; + if (editAlphaLevel > (KEY_PAD_MAX-1)) + editAlphaLevel = 0; + } + } + + if (alphachar!=NULL) // If we've found a character, and string isn't max size + { + if (editHiddenMode) + { + tmpBuf[edit->cp] = alphachar; + } + edtChar(myHandle,alphachar); + edtChar(myHandle,ecLeft); + timStart(editTim); + } + else + editAlphaKey = KEY_MAX; + return 1; + } + + if (k->code==KCD_HASH) // Hash key + { + if (strchr("AaMm",formatchar)) + { + if (editHiddenMode) + { + tmpBuf[edit->cp] = ' '; + editCharFindNext('*'); + } + else + editCharFindNext(' '); // Prints a space in this mode + } + return 1; + } + + if (k->code==KCD_STAR) // Star key + { + if (strchr("AaMm",formatchar)) + { + if (editHiddenMode) + { + tmpBuf[edit->cp] = '*'; + } + editCharFindNext('*'); + } + return 1; + } + + return 1; + } + + /************************/ + /* Normal multi-tap mode */ + /************************/ + + if (editAlphaMode) + { + if (editAlphaKey != KCD_MAX && editAlphaKey != k->code) + { + timStop(editTim); + +/*MC SPR 925, 23/07/02, removed editshowheader for chinese*/ + edtChar(myHandle,ecRight); +/*MC SPR 925, 23/07/02,removed shifting of alphachar, not needed here, merged from ealier code*/ + + editAlphaLevel = KEY_PAD_MAX-1; + editAlphaKey = KCD_MAX; + } + + if (k->code <= KCD_HASH) + { + editAlphaLevel++; + if (editAlphaLevel > (KEY_PAD_MAX-1)) + editAlphaLevel = 0; + if (editAlphaKey == KCD_MAX) // Inserting a new character + { + TRACE_EVENT("Inserting character."); + /*MC, SPR 925, 23/07/02 removed insert space and ecLeft if Chinese*/ + + /* NM p01306 + the patch p027 to reduce calling the edtChar as less as possible + was not working for inserting characters. + This additional change should work now: + */ + if (unicode) /*SPR957 - SH - use new unicode flag */ + { + moveRightUnicode((U16 *)&edit->attr->text[edit->cp*2],1); + } + else + { + moveRight(&edit->attr->text[edit->cp],strlen(&edit->attr->text[edit->cp]),1); + } + /* NM p01306 END */ + } + } + editAlphaKey = k->code; + editShowHeader(); + timStart(editTim); + return 1; + } + + alphachar = NULL; + + switch (k->code) + { + case KCD_HUP: + return 0; + case KCD_HASH: + /* KGT: If not in an alpha mode insert blanc. + But in numeric mode insert '#'. */ + if (editAlphaMode) + { + alphachar = ' '; + editShowHeader(); + } + else + { + if (editCalcMode) + { + if(!(strchr(tb, ch ))) /* set '.' only once ! */ + alphachar = '.'; + } + else + alphachar = '#'; + } + /* end KGT */ + + /* SH - hidden mode */ + if (editHiddenMode) + { + tmpBuf[edit->cp] = alphachar; + alphachar = '*'; + } + /* end of hidden mode */ + + /* SPR957 - In unicode mode, character is shifted to second byte */ + if (unicode) + alphachar = alphachar << 8; + + edtChar(myHandle,alphachar); + return 1; + + case KCD_STAR: + + if (editCalcMode) + { + if(!(strchr(tb, ch ))) /* set '.' only once ! */ + alphachar = '.'; /* SPR957 - SH*/ + /*edtChar(myHandle,'.');*/ + } + else + { + /*if (!editAlphaMode) + edtChar(myHandle,'*'); + else */ + if (editAlphaMode) + { + editShowHeader(); + } + + alphachar = '*'; + + /* SH - hidden mode */ + if (editHiddenMode) + { + tmpBuf[edit->cp] = '*'; + } + /* end of hidden mode */ + + /* SPR957 - SH - In unicode mode, character is shifted to second byte */ + if (unicode) + alphachar = alphachar << 8; + edtChar(myHandle,alphachar); + } + return 2; // SH - 2 indicates that character WAS printed + + case KCD_ABC: + editAlphaMode = (UBYTE) !editAlphaMode; + if (editAlphaMode) + { + editAlphaLevel = KEY_PAD_MAX-1; + editAlphaKey = KCD_MAX; + } + editShowHeader(); + return 1; + default: + if (editAlphaMode){ + timStop(editTim); + edtChar(myHandle,ecRight); + return 1; + } + break; + } + + /* SH - hidden mode */ + if (editHiddenMode) + { + tmpBuf[edit->cp] = editControls[k->code]; + alphachar = '*'; /* SPR957 - SH*/ + /* SPR957 - In unicode mode, character is shifted to second byte */ + if (unicode) + alphachar = alphachar << 8; + + edtChar(myHandle,alphachar); + } + /* end of hidden mode */ + else + { /*MC SPR 964, sets alphamode to FALSE when in digits mode, so that cursor moves right*/ + edit->attr->alphaMode = editAlphaMode; + edtChar(myHandle,editControls[k->code]); + } + + return 1; +} + + +/******************************************************************************* + + $Function: editClear + + $Description: SH - For formatted input, clears everything except fixed characters + + $Returns: + + $Arguments: + +*******************************************************************************/ +/*MC SPR 1242 merged in b-sample version of this function */ +void editClear() +{ + int editIndex = 0; + MfwEdt *edit = ((MfwHdr *) myHandle)->data; + char *tb = edit->attr->text; + + *formatIndex = -1; // Find first non-fixed character, + edtChar(myHandle,ecTop); // starting from the top. + editCharFindNext(NULL); + + while (edit->cp <strlen(tb)) + { + editCharFindNext(' '); // Overwrite everything with spaces + } + edtChar(myHandle,ecTop); + *formatIndex = -1; + editCharFindNext(NULL); // Return to the first non-fixed character + + return; +} + + +/******************************************************************************* + + $Function: editCharFindNext + + $Description: SH - For formatted input, adds a character to the input buffer then finds + the next non-fixed character space for the cursor to occupy + + $Returns: + + $Arguments: character - the character (or code) to print + +*******************************************************************************/ +/*MC SPR 1242 merged in b-sample version of this function */ +void editCharFindNext(char character) +{ + char *format = formatHandle; // SH - temporary format template + char formatchar; + MfwEdt *edit = ((MfwHdr *) myHandle)->data; + UBYTE inField = 0; // =1 if entering field, =2 if in field + + TRACE_EVENT("editCharFindNext"); + + // Check for delimited field + + if (*formatIndex>0) + { + formatchar = format[*formatIndex-1]; + if ((formatchar>'0' && formatchar<='9') || formatchar=='*') + inField = 2; + } + + formatchar = format[*formatIndex]; + if ((formatchar>'0' && formatchar<='9') || formatchar=='*') + inField = 1; + + // Check for cursor right at end of string - don't allow + + if (character == ecRight && edit->cp >= strlen(edit->attr->text) && *formatIndex>-1 && inField==0) + { + TRACE_EVENT("End of string."); + return; + } + + if (character!=NULL) // First add the required character + { + edtChar(myHandle, character); // to the buffer + } + + // Check for start of fixed input field + + if (inField==1) + { + TRACE_EVENT("Entering field."); + (*formatIndex)++; // Get us into the field... + *fieldIndex = 0; // ...and reset the field index + formatchar = *(format+*formatIndex); + if (formatchar=='M') + upCase = TRUE; + if (formatchar=='m') + upCase = FALSE; + inField = 2; + } + + // Check whether we're in a fixed input field, e.g. "4N" or "8X" + + if (inField==2) // So we don't look back beyond start of string + { + TRACE_EVENT("Move on in field."); + (*fieldIndex)++; // Increment the position in the field + if (*fieldIndex==(int)(formatchar-'0')) // If we've entered the number of characters specified (note- will never happen for the '*' !) + { + TRACE_EVENT("Exiting field."); + (*formatIndex)++; // point to NULL at end of string (no more input) + } + return; + } + + // If not, just look at next format character as usual + + (*formatIndex)++; // Point to next character + + while (*formatIndex<strlen(format) && *(format+*formatIndex) == '\\') // Fixed characters encountered + { + edtChar(myHandle,ecRight); // Skip over them + (*formatIndex)+=2; + } + + if (*formatIndex>(strlen(format))) // Don't look beyond end of string + *formatIndex = strlen(format); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2("formatIndex, fieldIndex: %d, %d", *formatIndex, *fieldIndex); + /***************************Go-lite Optimization changes end***********************/ + return; +} + +/******************************************************************************* + + $Function: editFindPrev + + $Description: SH - For formatted input, finds the previous non-fixed character and + moves the cursor there if possible + + $Returns: 0 if the cursor position is not changed (nowhere to go) + 1 if the previous character has been found + 2 if the cursor was over the first non-fixed character + + $Arguments: + +*******************************************************************************/ +/*MC SPR 1242 merged in b-sample version of this function */ +int editFindPrev() +{ + char *format = formatHandle; // SH - temporary format template + int editIndex; + char formatchar; + MfwEdt *edit = ((MfwHdr *) myHandle)->data; + + TRACE_EVENT("editFindPrev"); + + if (edit->cp == 0) // If cursor is at start of string, return 2 + { + TRACE_EVENT("Exit - start of string found"); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2("formatIndex, fieldIndex: %d, %d", *formatIndex, *fieldIndex); + /***************************Go-lite Optimization changes end***********************/ + return 2; + } + // First check whether we're in a fixed input field, e.g. "4N" or "8X" + + if (*formatIndex>0) // So we don't look back beyond start of string + { + formatchar = *(format+*formatIndex-1); + if ((formatchar>'0' && formatchar<='9') || formatchar=='*') // If it's a number between 1 and 9, or a * + { + TRACE_EVENT("In delimited field."); + edtChar(myHandle,ecLeft); + if (edit->cp < edit->attr->size-1) // (Don't decrement if at last char in string) + (*fieldIndex)--; // Decrement the position in the field + + if (*fieldIndex==0) // If we've reached the beginning of the field + { + TRACE_EVENT("Getting out of field."); + (*formatIndex)--; // Get out of the field + } + + + TRACE_EVENT_P2("formatIndex, fieldIndex: %d, %d", *formatIndex, *fieldIndex); + + if (edit->cp==(strlen(edit->attr->text)-1)) // Special case if last character - tell editor to shorten the string + { + TRACE_EVENT("Shorten string"); + return 3; + } + + return 1; // then we're done + } + } + + // If not (or if we've just come out of one) just look at next format character as usual + + editIndex = *formatIndex-1; // Make copy of format position, starting off to left + + while (editIndex>0) + { + if (*(format+editIndex-1)=='\\') // If there's a fixed char + editIndex -=2; // Look back a further 2 characters + else // If there's a non-fixed character + break; // then exit loop + } + + if (editIndex==-1) // Go back from 1st character in editor + { + TRACE_EVENT("Exit - skipped over fixed character"); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2("formatIndex, fieldIndex: %d, %d", *formatIndex, *fieldIndex); + /***************************Go-lite Optimization changes end***********************/ + return 2; + } + + formatchar = format[editIndex-1]; + if ((formatchar>'0' && formatchar<='9') || formatchar=='*') + (*fieldIndex)--; + + if (editIndex>-1) // Provided there is somewhere to go.... + { + while(*formatIndex>editIndex) + { + if (edtChar(myHandle,ecLeft)==MfwResOk) // move cursor there + (*formatIndex)--; + if (format[*formatIndex]=='\\') + (*formatIndex)--; + } + TRACE_EVENT("Found new position."); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2("formatIndex, fieldIndex: %d, %d", *formatIndex, *fieldIndex); + /***************************Go-lite Optimization changes end***********************/ + return 1; // Found new position + } + TRACE_EVENT("Position unchanged."); + /***************************Go-lite Optimization changes Start***********************/ + //Aug 16, 2004 REF: CRR 24323 Deepa M.D + TRACE_EVENT_P2("formatIndex, fieldIndex: %d, %d", *formatIndex, *fieldIndex); + /***************************Go-lite Optimization changes end***********************/ + return 0; // Position unchanged +} + + +/******************************************************************************* + + $Function: editActivate + + $Description: Activates the edit component + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void editActivate (MfwHnd e, int AlphaMode) +{ + TRACE_FUNCTION("editActivate"); + + myHandle = e; + /*NM p028*/ + if (!editTim) + editTim = timCreate(0,1000,(MfwCb) editEventTim); + editAlphaMode = ((AlphaMode != 0) && (AlphaMode != 4) && (AlphaMode != 5)); + editCalcMode = (AlphaMode == 4); + editFormatMode = (AlphaMode == 6); + editHiddenMode = FALSE; + editAlphaLevel = KEY_PAD_MAX-1; + editAlphaKey = KCD_MAX; +} + + +/******************************************************************************* + + $Function: editHiddenActivate + + $Description: SH - Activates the edit component for hidden alphanumeric entry + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void editHiddenActivate (char *buffer) +{ + TRACE_FUNCTION("editHiddenActivate"); + tmpBuf = buffer; + editHiddenMode = 1; + return; +} + +/******************************************************************************* + + $Function: editDeactivate + + $Description: deactivates the edit component + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void editDeactivate (void) +{ + //myHandle = 0; //SPR#1014 - DS - Commented out. + + if (editTim){ + timStop(editTim); + timDelete(editTim); + } + editTim = 0; +} +/******************************************************************************* + + $Function: activeEditor + + $Description: deactivates the edit component + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +MfwHnd activeEditor (void) +{ + return myHandle; +} + +/******************************************************************************* + + $Function: setformatpointers + + $Description: SH - Sets static variables formatHandle and formatIndex, so thet editEventKey + can access the format string + + $Returns: + + $Arguments: Pointer to format string, pointer to format index + +*******************************************************************************/ + + +void setFormatPointers (char *format, int *index, int *index2) +{ + + TRACE_FUNCTION("setFormatPointers"); + formatHandle = format; + formatIndex = index; + fieldIndex = index2; + return; +} + +#endif /* NEW_EDITOR */ + +/******************************************************************************* + + $Function: MmiModuleSet + + $Description: Set the status + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void MmiModuleSet (int module) +{ + switch(module) + { + case ModuleIdle: + MmiModule = MmiModule & ModuleBattLow; + MmiModule = MmiModule | ModuleIdle; + break; + case ModuleInCall: + MmiModuleDel(ModuleIdle); + MmiModule=MmiModule | ModuleInCall; + break; + case ModuleCall: + MmiModuleDel(ModuleIdle); + MmiModule=MmiModule | ModuleCall; + break; + case ModuleMenu: + MmiModuleDel(ModuleIdle); + MmiModule=MmiModule | ModuleMenu; + break; + case ModulePhon: + MmiModuleDel(ModuleIdle); + MmiModule=MmiModule | ModulePhon; + break; + case ModuleSms: + MmiModuleDel(ModuleIdle); + MmiModule=MmiModule | ModuleSms; + break; + case ModuleBattLow: + MmiModule=MmiModule | ModuleBattLow; + break; + case ModuleSAT: + MmiModuleDel(ModuleIdle); + MmiModule=MmiModule | ModuleSAT; + break; + case ModuleAlarm: + MmiModuleDel(ModuleIdle); + MmiModule=MmiModule | ModuleAlarm; + break; + case ModuleFax: + MmiModule=MmiModule | ModuleFax; + break; + case ModuleDialling: + MmiModuleDel(ModuleIdle); + MmiModule=MmiModule | ModuleDialling; + break; + default: + break; + } + + return; + +} + +/******************************************************************************* + + $Function: MmiModuleDel + + $Description: Delete the status + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +void MmiModuleDel (int module) +{ + switch(module) + { + case ModuleIdle: + + MmiModule = MmiModule & (~ModuleIdle); + break; + case ModuleInCall: + MmiModule=MmiModule & (~ModuleInCall); + break; + case ModuleCall: + MmiModule=MmiModule & (~ModuleCall); + break; + case ModuleMenu: + MmiModule=MmiModule & (~ModuleMenu); + break; + case ModulePhon: + MmiModule=MmiModule & (~ModulePhon); + break; + case ModuleSms: + MmiModule=MmiModule & (~ModuleSms); + break; + case ModuleBattLow: + MmiModule=MmiModule & (~ModuleBattLow); + break; + case ModuleSAT: + MmiModule=MmiModule & (~ModuleSAT); + break; + case ModuleAlarm: + MmiModule=MmiModule & (~ModuleAlarm); + break; + case ModuleFax: + MmiModule=MmiModule & (~ModuleFax); + break; + case ModuleDialling: + MmiModule=MmiModule & (~ModuleDialling); + default: + break; + } + + return; + +} + +/******************************************************************************* + + $Function: showGoodBye + + $Description: shows a goodbye Message when swiching off the mobile + + $Returns: none + + $Arguments: + +*******************************************************************************/ + + +static void showGoodBye (T_MFW_HND win) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION("showGoodBye ()"); + dlg_zeroDisplayData(&display_info); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)goodbye_cb, FOREVER, 0 ); + + /* + * Call Icon + */ + + mmi_dialogs_insert_animation (info_dialog (win, &display_info), 400 ,(MfwIcnAttr*)&goodbye_Attr,animGoodbye); + + +} + +/******************************************************************************* + + $Function: goodbye_cb + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ + + +static void goodbye_cb (void) +{ + TRACE_FUNCTION("goodbye_cb ()"); + nm_deregistration(); /* start deregistration procedure */ +} + +#ifdef FF_MMI_AUDIO_PROFILE +void mmi_device_status_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION("mmi_device_status_info"); + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, str1,str2, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, callback, THREE_SECS, KEY_LEFT | KEY_CLEAR | KEY_HUP); + info_dialog(parent,&display_info); +} +#endif + +/* ****************************************************************** */ +#ifdef NEPTUNE_BOARD +void AI_Power(SYS_UWORD8 power) +{ + +} + +void SIM_PowerOff (void) +{ + TRACE_FUNCTION ("SIM_PowerOff()"); +} + +#ifdef MMI_POWER_MANAGEMENT_TEST + +/******************************************************************************* + + $Function: mmi_PowerManagement_screen_forever + + $Description: This will be executed when closing Power Management Screen + + $Returns: + $Arguments: window, Idetifier, reason + +*******************************************************************************/ + +void mmi_PowerManagementStatus(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + timStop( timer_handle ); + Screen_Update = 1; +} + + +/******************************************************************************* + + $Function: mmi_PowerManagement_screen_forever + + $Description: Used to display Power Management running Screen + + $Returns: 0 - Success + 1 - Error + + + $Arguments: window, textId/TestString, color + +*******************************************************************************/ +T_MFW_HND mmi_PowerManagement_screen_forever( MfwHnd win,int TextId, char* TextStr, int colour ) +{ + T_DISPLAY_DATA DisplayInfo; + dlg_initDisplayData_TextId( &DisplayInfo, TxtNull, TxtCancel, TxtNull, TxtNull, colour); + dlg_initDisplayData_events( &DisplayInfo, (T_VOID_FUNC)mmi_PowerManagementStatus, FOREVER, KEY_ALL ); + DisplayInfo.TextString = TextStr; + return info_dialog(win, &DisplayInfo); +} + +/******************************************************************************* + + $Function: mmi_PowerManagement + + $Description: Used to test the power Management + + $Returns: 0 - Success + 1 - Error + + + $Arguments: menu, menu item + +*******************************************************************************/ +int mmi_PowerManagement(MfwMnu* m, MfwMnuItem* i) +{ + mmi_PowerManagement_screen_forever(0, NULL, "Power Management Running...\n", 1 ); + timStop( timer_handle ); + dspl_Enable(1); + Screen_Update = 0; + return 0; +} + +#endif + + +#endif +