FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiMain.c @ 638:cab2f315827e
FFS dev.c: added Spansion PL032J to the "generic" table
With the discovery of first GTM900 and then Tango, it now appears that
Openmoko was not the only manuf after all who kept TI's TCS211 firmware
largely intact (as opposed to changing it beyond all recognition like
Compal, Chi-Mei and BenQ did), thus we are now getting new "alien" targets
on which we reuse the original manuf's FFS with IMEI and RF calibration
tables as if it were native. On these targets we use the original
device table for FFS, even though we previously thought that it would
never apply to any target other than dsample, leonardo and gtamodem.
We have previously added Samsung K5L33xxCAM (a new kind of multi-ID device)
to the generic table to support its use in Huawei GTM900-B modules; now
we got news that some slightly older GTM900-B specimen used S71PL032J
instead, so we are now adding PL032J as well.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 30 Jan 2020 17:45:48 +0000 |
parents | 3c2acfa1a72f |
children |
line wrap: on
line source
/******************************************************************************* CONDAT (UK) ******************************************************************************** This software product is the property of Condat (UK) Ltd and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: Basic MMI $Project code: BMI (6349) $Module: 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