FreeCalypso > hg > fc-magnetite
diff src/aci2/bmi/MmiSounds.c @ 3:93999a60b835
src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Sep 2016 00:29:36 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/aci2/bmi/MmiSounds.c Mon Sep 26 00:29:36 2016 +0000 @@ -0,0 +1,4168 @@ +/******************************************************************************* + + 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: Sounds + $File: MmiSounds.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 25/10/00 + +******************************************************************************** + + Description: + + This provides the implementation of the sounds for the basic MMI + + 1. Playing various system sounds such as the paging ring, + new sms message etc. + 2. The menus used to enable or disable the system sounds + 3. The menu used to select the paging ring tone + 4. The menu used to select the volume. + 5. The menu used to select the key press tone or dtmf + + The mmi should play system sounds by calling soundExec with the appropriate + SoundsXXXX message it is possible to go directly to the audio driver to play + a sound but this will bypass any user settings to turn sounds on or off. + + The MelodySelect and SettingXXXX messages are used to control the key events + during menu handling, entry to the sounds menus is through the soundsXXXX + functions. These display the appropriate menu and handle the keypad events. + + The settings are read from PCM on startup and saved whenever a setting menu + is selected. + +******************************************************************************** + $History: MmiSounds.c + + 25/10/00 Original Condat(UK) BMI version. + + Nov 23, 2005 REF : DR OMAPS00057378 x0039928 + Bug: All MIDI files are not displayed in MMI in locosto-lite + Fix: Buffer memory allocated to copy the file contents is freed + properly and copying file from FFS to LFS is not terminated if error is + returned for just any one file, instead it tries to copy other files. + + Nov 21, 2005 REF:ER OMAPS00057430 nekkareb + Description: AAC Ringer Implementation + Solution: The Midi Ringer application has been enhanced to support AAC as ringer. + + Nov 04, 2005 REF:DRT OMAPS00053737 xdeepadh + Description: MIDI Ringer Linear Flash Support. + Solution: The Midi Ringer application has been enhanced to loadand play the midi files from LFS. + + Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh + Description: Mp3 Ringer Implementation + Solution: The Midi Ringer application has been enhanced to support mp3 as ringer. + The interface function names have been modified. + + Sep 12, 2005 REF: SPR 33977 xdeepadh + Description: Midi Application does not support Mobile XMF file formats + Solution: Mobile XMF format has been supported + + Aug 30, 2005 REF: SPR 34018 xdeepadh + Description: Silent Mode: Silent mode is not activated with the sequence, 'Menu, '#'' + Solution: When the silent mode is set through the key sequence, the volume is set to silent. + + + Jul 20, 2005 REF: SPR 30772 xdeepadh + Description: Midi File formats to be supported by different variants of locosto program + Solution: The supported midi file formats for a particular variant will be loaded. + + Aug 05, 2005 xdeepadh + Description: Configuring the audio path for midi + + 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. + + Nov 29, 2004 REF: CRR 25051 xkundadu + Description: INCALL SCREEN – ADJUSTING THE VOLUME + Fix: Added volume level list linked to up/down keys. + User can select the speaker volume among those levels. + Dec 23, 2005 REF: SR13873 x0020906 + Description: Selection configurable ring tones. Added for NEPTUNE + Fix: When moving cursor in menu, stop old and play new ringtone. + When press of back / clear / hang up stop playing the ringtone. + Initially when the get into list, start playing first ringtone - As cursor is positioned. + + $End + +*******************************************************************************/ + + +/******************************************************************************* + + Include Files + +*******************************************************************************/ + +#define ENTITY_MFW + +/* includes */ +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif +#include "mfw_sys.h" + +#include "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" + +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER +#include "mfw_midi.h" +#include "bae/bae_options.h" //Jul 20, 2005 REF: SPR 30772 xdeepadh +#endif + +#include "dspl.h" + + +#include "p_mmi.h" +#include "message.h" +#include "prim.h" +#include "aci_cmh.h" +#include "mfw_mme.h" + +#include "MmiMmi.h" + +#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 "MmiTimeDate.h" + +#include "cus_aci.h" +#include "prim.h" +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + +#include "MmiTimers.h" + +#include "mmiColours.h" +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER +#include "mmisamplemidifiles.h" +#endif +extern char* MelodyTable[]; +extern T_call call_data; + +// Aug 05, 2005 xdeepadh +#ifdef FF_MMI_AUDIO_PROFILE +extern UBYTE mfwAudPlay;//flag for audio +#endif + +/******************************************************************************* + + Constant Definitions + +*******************************************************************************/ + + +/* Control FLUSH mechanism to PCM +*/ +#define FLUSH 1 +#define NO_FLUSH 0 + + +/* Timer constants, pretty self explanatory +*/ +#define TIMHALFSECOND 200 +#define TIMSECOND 1000 +#define TIM4SECOND 4000 + +#define VIBRATOR_TIME 2000 /* two second timer on the vibrator*/ + +/* Define a generic trace mechanism +*/ +#define PTRACE(prn) { char buf[64]; ## prn ## TRACE_EVENT(buf); } + + +/* Define maximum counter for vibrator +*/ +#define VIBRATOR_COUNTER_MAX 4 +#define NOT_VIBRATING 0 + +#ifdef NEPTUNE_BOARD +/* RAVI - 20-1-2005 */ +/* Volume Control Definition */ +#define SILENT_SETTING 0 +#define MAX_VOLUME_SETTING 4 +/* END - RAVI - 20-1-2005 */ +#endif + +#define SILENT_VOLUME 0 +#define LOW_VOLUME 5 +#define MEDIUM_VOLUME 25 +#define HIGH_VOLUME 175 +#define INCREASE_VOLUME 5 + + +/* define an invalid tone marker +*/ +#define INVALID_TONE -1 + +//Define to indicate the Size of the file where the melody must start +#ifdef FF_MP3_RINGER +#define MP3_PLAY_FROM_START 0 +#endif //FF_MP3_RINGER + +//Nov 22, 2005 REF: ENH OMAPS00057430 nekkareb +//Define to indicate the Size of the file where the melody must start +#ifdef FF_AAC_RINGER +#define AAC_PLAY_FROM_START 0 +#endif //FF_AAC_RINGER + + +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER +UBYTE IsMidiInit = 0;//Flag to enable the Midi file populating once +extern UBYTE mfw_player_exit_flag;//Flag to check the playall option +extern int mfw_player_currently_playing_idx;//The current playing file index +#define MT_INFO_SCRN_TIMEOUT 1500//Timeout for InfoDialog +int selected_tone=0; + +/* ADDED BY RAVI - 28-11-2005 */ +int resource_GetListCount(res_ResourceID_type res); +/* END RAVI - 28-11-2005 */ + +static int playCurrentMelody( MfwEvt e, MfwTim *tc ); +static void soundsPlayMidiPlayer( int melody_id ); +void startPlayerTimer(); +static void stopPlayerTimer( void ); +static int playCurrentVolumeTone( MfwEvt e, MfwTim *tc ); +void startVolumeTimer(); +void stopVolumeTimer(void); +static void soundsPlayVolumeMelody(); +#endif + +/*Defintion for First tone being played - RAVI - 23-12-2005 */ +#ifdef NEPTUNE_BOARD +#define FIRST_TONE_PLAYED 1 +#endif +/*END RAVI */ + +/******************************************************************************* + + Local Function prototypes + +*******************************************************************************/ + +static int winEvent( MfwEvt e, MfwWin *w ); +static int keyEvent( MfwEvt e, MfwKbd *kc ); +static int keyEventLong( MfwEvt e, MfwKbd *kc ); + +static void ( *show )( void ); + +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifndef FF_MIDI_RINGER +static int playCurrentSound( MfwEvt e, MfwTim *tc ); +#endif +static int getCallingMenu( MfwEvt e, MfwTim *tc ); +static int setSelection( MfwEvt e, MfwWin *w ); + +static void delayThenPlayMelody( void ); +static void stopPlayingMelody( void ); + +static void readSettingsFromPCM( void ); +static void writeSettingsToPCM( UBYTE flush ); + +static void soundsCreate( MfwHnd parent ); +static int VibratorTimerEvent( MfwEvt e, MfwTim *t ); + + +void sounds (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +void sounds_dialog_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason); +static void sounds_dialog(void); +static int sounds_win_cb (T_MFW_EVENT event, T_MFW_WIN * win); +static int melody_win_cb (MfwEvt e, MfwWin *w); +void melody_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); +void sounds_destroy (T_MFW_HND own_window); +T_MFW_HND sounds_create (T_MFW_HND parent_window); +void sounds_Exit (T_MFW_HND own_window); +T_MFW_HND sounds_Init (T_MFW_HND parent_window); +void MelodyList_cb(T_MFW_HND * Parent, ListMenuData * ListData); +static void melody_destroy(MfwHnd own_window); +static MfwHnd sounds_show_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback); + +#define SHOW_CONFIRM 3 +#define ACTIVATE_CONFIRM 4 +#define DEACTIVATE_CONFIRM 5 + +/******************************************************************************* + + Local typedefs + +*******************************************************************************/ + +/* Define the types of volume we cater for +*/ +typedef enum { + silent = (UBYTE)0, + volLow, + volMedium, + volHigh, + increasing +} VOL_ENUM; + + +/* And the key tones +*/ +typedef enum +{ + KEYTONE_NONE, + KEYTONE_BEEP, + KEYTONE_DTMF +} SoundsKeyTones; + + +/* The following definition provides a structure to control the + ringing operation +*/ + +typedef struct MMI_CURRENT_RINGER_STRUCT { + /* variable to browse a list */ + UBYTE ringer; // index of permanent active tune in soundlist and ringerItem + UBYTE vibrator; // vibrator + UBYTE volumeSetting; // values (0 = silent, 4= loud, 5 = increasing) + UBYTE keypadOn; // on/off values + UBYTE AlarmOn; + UBYTE OrganiserAlert; + UBYTE CreditLow; + UBYTE SMSTone; + UBYTE VoiceTone; /*CQ 10586 - API - 19/06/03 - Add this ID*/ + UBYTE SMSBroadcast; + UBYTE battLow; + UBYTE earpiece; + UBYTE language; + UBYTE Equalizer; +} RINGER_STRUCT_BROWSER; + +/* ------------- Variables --------------- */ + +static SoundSettingState soundReason=SoundsNone; +// Change behavior of menu scroll up/down, meni item selected on scrolling. +static BOOL scrollSelectMenuItem= FALSE; +static BOOL volumeSetting2Pcm =FALSE; +static RINGER_STRUCT_BROWSER current = +{ // default settings. + AUDIO_MEL_TUNES, // ringer + 0, // vibrator - off by default + volMedium, // volumeSetting + 2, // keypadOn dtmf + 1, // AlarmOn + 1, // OrganiserAlert + 1, // CreditLow + 1, // SMSTone + 1, // SMSBroadcast + 1, // battLow + 3, // earpiece + 1, // language + 1 // Equalizer +}; + +typedef enum +{ + E_INIT = 0x0801, + E_BACK, + E_ABORT, + E_EXIT, + E_RETURN, + E_OK +} e_M_events; + +T_MELODY_INFO sounds_data; + + + +/******************************************************************************* + + Module local variables + +*******************************************************************************/ +/* RAVI - 20-1-2006 */ +/* Store the volume settings */ +#ifdef NEPTUNE_BOARD +static UBYTE lastVolumeSetting; +static UBYTE scrollVolumeSetting; +#endif +/* END RAVI */ +static UBYTE oldVolumeSetting; /* Previous setting of the volume */ +static MfwHnd win; /* our window */ +static MfwHnd kbd; /* our keyboard handler */ +static MfwHnd kbdLong; /* our keyboard handler for Long pressed */ +static MfwHnd hRingerStartTimer; /* timeout till start of melody */ +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + MfwHnd hPlayerStartTimer; /* timeout till start of midi file */ + #endif +static MfwHnd hRingerVolSettingTimeOut; /* 4 second timeout for volume setting menu */ + +static MfwHnd hWinDispTimer; /* timer to show result windows */ + +/* Maintain vibrator state information here +*/ +static MfwHnd VibratorTimer; +static UBYTE Vibrating = NOT_VIBRATING; +static UBYTE vibrator_counter=0; + +/* General state information +*/ +static MmiState nextState; +static MfwHnd lastFocus; + + + +/* Tune details +*/ +static int CurrentTune = 0; +static int LastTune = 0; + +static const MfwMnuAttr melody_menuAttrib = +{ + &melody_menuArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ + -1, /* use default font */ + NULL, /* with these items */ + 0, /* number of items */ + COLOUR_LIST_XX, TxtNull, NULL, MNUATTRSPARE + +}; + +/******************************************************************************* + + Private Methods + +*******************************************************************************/ + +/****************************************************************************** +*$Function: setDefaultSound +* +*$Description: This function will read from Flash during boot up and updated the +* current ringer structure. So after reset the stored tones will get +* played. +* +*$Returns: none +* +*$Arguments: none +*$Author : RAVI - 23-12-2005 +******************************************************************************/ +#ifdef NEPTUNE_BOARD +void setDefaultSound() +{ + if (flash_read() >= EFFS_OK) + { + /* Assign the current structure with FFS stored value */ + current.ringer = FFS_flashData.ringer; + current.SMSTone = FFS_flashData.SMSTone; + current.AlarmOn = FFS_flashData.AlarmOn; + current.volumeSetting = FFS_flashData.volumeSetting; + } + /* RAVI - 20-1-2006 */ + /* Store the initial volume settings done by user */ + lastVolumeSetting = current.volumeSetting; + scrollVolumeSetting = 0; + /* END RAVI */ +} +#endif + +USHORT getSoundsReason(void) +{ + return soundReason; +} +/******************************************************************************* + + $Function: setSoundsReason + + $Description: Set the reason why the volume settings was invoked. Called to indicated + that the volume settings is being invoked from Idle or from the incoming + call screens. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void setSoundsReason(USHORT reason) +{ + + switch(reason) + { + case SettingVolume: + soundReason = SettingVolume; + break; + case SoundsNone: + default: + soundReason = SoundsNone; + break; + } +} +/******************************************************************************* + + $Function: volMenuItemSelected + + $Description: A volume menu item has been selected, store the setting into PCM. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void volMenuItemSelected(void) +{ + + TRACE_FUNCTION("volMenuItemSelected"); + volumeSetting2Pcm =TRUE; +/* Apr 05, 2005 REF: ENH 29994 xdeepadh */ +#ifdef FF_MIDI_RINGER + /* Save the volume for a given ringer mode */ + TRACE_EVENT_P1("Volume set is %d",current.volumeSetting); + mfw_ringer_set_volume(get_ringer_mode(),(T_AS_VOLUME)getCurrentVoulmeSettings()); +#endif +} +/******************************************************************************* + + $Function: getScrollSelectMenuItem + + $Description: get the scroll/select menu status. + + $Returns: Status + + $Arguments: none + +*******************************************************************************/ +BOOL getScrollSelectMenuItem(void) +{ +TRACE_FUNCTION("getScrollSelectMenuItem"); + if (scrollSelectMenuItem == TRUE) + return TRUE; + else + return FALSE; +} +/******************************************************************************* + + $Function: clearScrollSelectMenuItem + + $Description: Reset the scroll/select menu behavior. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void clearScrollSelectMenuItem(void) +{ + TRACE_FUNCTION("clearScrollSelectMenuItem"); + scrollSelectMenuItem=FALSE; + // soundReason = SoundsNone; MZ this flag cleared when user exits the melody/Volume menu. +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + mfw_player_stop(sounds_midi_player_stop_cb); +#else + stopPlayingMelody(); +#endif +} + +/******************************************************************************* + + $Function: soundsSetVolume + + $Description: Function determines if user is in the Melody/SMS/Alarm ringer menu + and has selected the vloume settings option. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void soundsSetVolume(void) +{ + + TRACE_FUNCTION("soundsSetVolume"); +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + //Create 0.5 second ringer delay timer. + hPlayerStartTimer = timCreate( 0, TIMHALFSECOND, (MfwCb)playCurrentVolumeTone); + //Set the audiopath to speaker. + mfw_ringer_set_audiopath(); + //Set the voice limit to 32 and channel to stereo in idle mode + mfw_player_midi_set_params(FF_MIDI_VOICE_LIMIT,MIDI_CHANNEL_STEREO); + //Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh + //Set the Mp3 Parameters .Size of the file where the melody must start is set 0(from beginning) + //and channel is set to stereo. +#ifdef FF_MP3_RINGER + mfw_player_mp3_set_params(MP3_PLAY_FROM_START,MP3_CHANNEL_STEREO); +#endif //FF_MP3_RINGER + + //Nov 21, 2005 REF:ER OMAPS00057430 nekkareb + //Set the AAC Parameters .Size of the file where the melody must start is set 0(from beginning) + //and channel is set to stereo. +#ifdef FF_AAC_RINGER + mfw_player_aac_set_params(AAC_PLAY_FROM_START,AAC_CHANNEL_STEREO); +#endif //FF_AAC_RINGER + +#endif + + if(soundReason == MelodySelect || soundReason == SettingSMSTone || + soundReason == SettingAlarm || soundReason == SettingVolume) + { + // Menu items will be selected on scrolling. + scrollSelectMenuItem = TRUE; + // store the setting to PCM if volume setting is selected. + volumeSetting2Pcm=FALSE; + } + else + { + scrollSelectMenuItem = FALSE; + } + +} + + + +/******************************************************************************* + + $Function: IdleScreenVolumeTimer + + $Description: Function creates the volume timer for idle screen. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ + +void IdleScreenVolumeTimer() +{ +TRACE_FUNCTION("IdleScreenVolumeTimer"); +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + //Create 0.5 second ringer delay timer. + hPlayerStartTimer = timCreate( 0, TIMHALFSECOND, (MfwCb)playCurrentVolumeTone); + //Set the audiopath to speaker. + mfw_ringer_set_audiopath(); + //Set the voice limit to 32 and channel to stereo in idle mode + mfw_player_midi_set_params(FF_MIDI_VOICE_LIMIT,MIDI_CHANNEL_MONO); + //Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh + //Set the Mp3 Parameters .Size of the file where the melody must start is set 0(from beginning) + //and channel is set to Mono. +#ifdef FF_MP3_RINGER + mfw_player_mp3_set_params(MP3_PLAY_FROM_START,MP3_CHANNEL_MONO); +#endif //FF_MP3_RINGER + + //Nov 21, 2005 REF:ER OMAPS00057430 nekkareb + //Set the AAC Parameters .Size of the file where the melody must start is set 0(from beginning) + //and channel is set to Mono. +#ifdef FF_AAC_RINGER + mfw_player_aac_set_params(AAC_PLAY_FROM_START,AAC_CHANNEL_MONO); +#endif //FF_AAC_RINGER + +#endif +} + +/******************************************************************************* + + $Function: setSilentModeVolumeOn + + $Description: + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void setSilentModeVolume(void) +{ + +// Aug 30, 2005 REF: SPR 34018 xdeepadh +#ifdef FF_MIDI_RINGER + + T_AS_RINGER_INFO * ringer_info; + T_AS_RINGER_INFO temp_ringer_info; + TRACE_FUNCTION("setSilentModeVolume"); + // Save the volume for incoming call + ringer_info = mfw_ringer_get_info(AS_RINGER_MODE_IC,&temp_ringer_info); + oldVolumeSetting = ringer_info->volume ; + TRACE_EVENT_P1("Volume set in silent mode is %d",oldVolumeSetting); + //Set the volume to silent + current.volumeSetting = (UBYTE)AS_VOLUME_SILENT; + TRACE_EVENT_P1("Volume set is %d",current.volumeSetting); + mfw_ringer_set_volume(AS_RINGER_MODE_IC,(T_AS_VOLUME)getCurrentVoulmeSettings()); +#else + stopPlayingMelody(); + oldVolumeSetting = current.volumeSetting; + current.volumeSetting = SILENT_VOLUME; + audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting); +#endif +} + +/******************************************************************************* + + $Function: setSilentModeVolumeOn + + $Description: + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void restoreSilentModeVolume(void) +{ + +TRACE_FUNCTION("restoreSilentModeVolume"); +// Aug 30, 2005 REF: SPR 34018 xdeepadh +#ifdef FF_MIDI_RINGER +//Set the volume back to the old one + TRACE_EVENT_P1("oldVolumeSetting set is %d",oldVolumeSetting); + mfw_ringer_set_volume(AS_RINGER_MODE_IC,(T_AS_VOLUME)oldVolumeSetting); +#else + stopPlayingMelody(); + current.volumeSetting =oldVolumeSetting; + audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting); +#endif +} + +/******************************************************************************* + + $Function: soundsVolSilent + + $Description: set voulme level to silent. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void soundsVolSilent(void) +{ +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + //Display silent mode in the idle screen only for the incoming call volume. + if(soundReason == MelodySelect || soundReason == SettingVolume) + { + FFS_flashData.settings_status |= SettingsSilentMode; + flash_write(); + } +#else + FFS_flashData.settings_status |= SettingsSilentMode; + flash_write(); +#endif + + TRACE_EVENT("soundsVolSilent"); +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + current.volumeSetting =(UBYTE)AS_VOLUME_SILENT; + stopVolumeTimer(); + startVolumeTimer(); +#else +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + current.volumeSetting =SILENT_VOLUME; +#endif +/* END - RAVI */ + stopPlayingMelody(); + + if(volumeSetting2Pcm != TRUE) + { + current.volumeSetting =SILENT_VOLUME; + audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting); + +#ifdef FF_MMI_RINGTONE /* MSL Ring tone play */ + audio_PlaySoundID(AUDIO_BUZZER, CALLTONE_SELECT, 0, AUDIO_PLAY_ONCE); +#else + +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + /* Store the currently stored volume content */ + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, current.volumeSetting, AUDIO_PLAY_ONCE); +#else + /* API - 04/09/03 - SPR2447 - Remove the call to AUDIO_PLAY_INFINITE and replace with AUDIO_PLAY_ONCE*/ + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, 0, AUDIO_PLAY_ONCE); + /* API - 04/09/03 - SPR2447 - END*/ +#endif +/* END RAVI */ +#endif + + } + else + { + //store setting into PCM + volumeSetting2Pcm=FALSE; + } +#endif + + +} +/******************************************************************************* + + $Function: soundsVolLow + + $Description: set voulme level to low. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void soundsVolLow(void) +{ + + FFS_flashData.settings_status &= ~SettingsSilentMode; + flash_write(); + TRACE_EVENT("soundsVolLow"); +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + current.volumeSetting =(UBYTE)AS_VOLUME_LOW; + stopVolumeTimer(); + startVolumeTimer(); +#else +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + current.volumeSetting = LOW_VOLUME; +#endif +/*END RAVI */ + stopPlayingMelody(); + if(volumeSetting2Pcm != TRUE) + { + current.volumeSetting = LOW_VOLUME; + audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting); + +#ifdef FF_MMI_RINGTONE /* MSL Ring tone play */ + audio_PlaySoundID(AUDIO_BUZZER, CALLTONE_SELECT, 0, AUDIO_PLAY_ONCE); +#else + +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, current.volumeSetting, AUDIO_PLAY_ONCE); +#else + /* API - 04/09/03 - SPR2447 - Remove the call to AUDIO_PLAY_INFINITE and replace with AUDIO_PLAY_ONCE*/ + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, 0, AUDIO_PLAY_ONCE); + /* API - 04/09/03 - SPR2447 - END*/ +#endif +/* END RAVI */ +#endif + + } + else + { + //store setting into PCM + volumeSetting2Pcm=FALSE; + } +#endif + + +} +/******************************************************************************* + + $Function: soundsVolMedium + + $Description: set voulme level to Medium + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void soundsVolMedium(void) +{ + + FFS_flashData.settings_status &= ~SettingsSilentMode; + flash_write(); + TRACE_EVENT("soundsVolMedium"); +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + current.volumeSetting =(UBYTE)AS_VOLUME_MEDIUM; + stopVolumeTimer(); + startVolumeTimer(); +#else +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + current.volumeSetting = MEDIUM_VOLUME; +#endif +/* END RAVI */ + stopPlayingMelody(); + if(volumeSetting2Pcm != TRUE) + { + current.volumeSetting = MEDIUM_VOLUME; + audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting); + +#ifdef FF_MMI_RINGTONE /* MSL Ring Tone Play */ + audio_PlaySoundID(AUDIO_BUZZER, CALLTONE_SELECT, 0, AUDIO_PLAY_ONCE); +#else + +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, current.volumeSetting, AUDIO_PLAY_ONCE); +#else + /* API - 04/09/03 - SPR2447 - Remove the call to AUDIO_PLAY_INFINITE and replace with AUDIO_PLAY_ONCE*/ + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, 0, AUDIO_PLAY_ONCE); + /* API - 04/09/03 - SPR2447 - END*/ +#endif +/* END RAVI */ +#endif + + } + else + { + //store setting into PCM + volumeSetting2Pcm=FALSE; + } +#endif + + + +} +/******************************************************************************* + + $Function: soundsVolHigh + + $Description: set voulme level to High + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void soundsVolHigh(void) +{ + + FFS_flashData.settings_status &= ~SettingsSilentMode; + flash_write(); + + TRACE_EVENT("soundsVolHigh"); +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + current.volumeSetting =(UBYTE)AS_VOLUME_HIGH; + stopVolumeTimer(); + startVolumeTimer(); + +#else +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + current.volumeSetting = HIGH_VOLUME; +#endif + + stopPlayingMelody(); + if(volumeSetting2Pcm != TRUE) + { + current.volumeSetting =HIGH_VOLUME; + audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting); + +#ifdef FF_MMI_RINGTONE /* MSL Ring Tone Play */ + audio_PlaySoundID(AUDIO_BUZZER, CALLTONE_SELECT, 0, AUDIO_PLAY_ONCE); +#else + +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, current.volumeSetting, AUDIO_PLAY_ONCE); +#else + /* API - 04/09/03 - SPR2447 - Remove the call to AUDIO_PLAY_INFINITE and replace with AUDIO_PLAY_ONCE*/ + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, 0, AUDIO_PLAY_ONCE); + /* API - 04/09/03 - SPR2447 - END*/ +#endif +/* END RAVI */ +#endif + + } + else + { + //store setting into PCM + volumeSetting2Pcm=FALSE; + } +#endif + + +} +/******************************************************************************* + + $Function: soundsVolInc + + $Description: set voulme level to increasing + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifndef FF_MIDI_RINGER +void soundsVolInc(void) +{ + FFS_flashData.settings_status &= ~SettingsSilentMode; + flash_write(); +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + current.volumeSetting = INCREASE_VOLUME; +#endif +/* END RAVI */ + stopPlayingMelody(); + if(volumeSetting2Pcm != TRUE) + { + current.volumeSetting = INCREASE_VOLUME; + audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting); + +#ifdef FF_MMI_RINGTONE /* MSL Ring Tone Play */ + audio_PlaySoundID(AUDIO_BUZZER, CALLTONE_SELECT, 0, AUDIO_PLAY_ONCE); +#else + +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, current.volumeSetting, AUDIO_PLAY_ONCE); +#else + /* API - 04/09/03 - SPR2447 - Remove the call to AUDIO_PLAY_INFINITE and replace with AUDIO_PLAY_ONCE*/ + audio_PlaySoundID(AUDIO_BUZZER, current.ringer, 0, AUDIO_PLAY_ONCE); + /* API - 04/09/03 - SPR2447 - END*/ +#endif +/* END RAVI */ +#endif + + } + else + { + //store setting into PCM + volumeSetting2Pcm=FALSE; + + } + + +} + +#endif +/******************************************************************************* + + $Function: soundReasonRinger + + $Description: setup the soundReason to be Ringer Melody settings. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void soundReasonRinger(void) +{ + soundReason = MelodySelect; +} +/******************************************************************************* + + $Function: soundReasonSmsTone + + $Description: Setup the soundReason to be SMS tones settings. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void soundReasonSmsTone(void) +{ + soundReason = SettingSMSTone; +} +/******************************************************************************* + + $Function: soundReasonAlarm + + $Description: Setup the soundReason to be Alarm settings. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void soundReasonAlarm(void) +{ + soundReason = SettingAlarm; +} +/******************************************************************************* + + $Function: getcurrentSMSTone + + $Description: Access function for the current SMS Tone. + $Returns: Tone Id + + $Arguments: None + +*******************************************************************************/ +UBYTE getcurrentSMSTone(void) +{ + return current.SMSTone; +}/******************************************************************************* + + $Function: getcurrentVoiceTone + + $Description: Access function for the current SMS Tone. + $Returns: Tone Id + + $Arguments: None + +*******************************************************************************/ +/*CQ 10586 - API - 19/06/03 - Add this function to return the curret sound for Voice mail notification*/ +UBYTE getcurrentVoiceTone(void) +{ + return current.SMSTone; // At present return the SMS tone untill settings have been updated +} +/******************************************************************************* + + $Function: getcurrentSMSTone + + $Description: Access function for the current SMS Tone. + $Returns: Tone Id + + $Arguments: None + +*******************************************************************************/ +UBYTE getcurrentAlarmTone(void) +{ + return current.AlarmOn; +} +/******************************************************************************* + + $Function: getCurrentRingerSettings + + $Description: Access function for the current ringer settings data. + $Returns: Ringer Id. + + $Arguments: None + +*******************************************************************************/ +UBYTE getCurrentRingerSettings(void) +{ + return current.ringer; +} +/******************************************************************************* + + $Function: getCurrentVoulmeSettings + + $Description: Access function for the current ringer volume settings data. + $Returns: volume + + $Arguments: None + +*******************************************************************************/ +UBYTE getCurrentVoulmeSettings(void) +{ +TRACE_EVENT_P1("getCurrentVoulmeSettings is %d",current.volumeSetting); + return current.volumeSetting; +} +/******************************************************************************* + + $Function: getMelodyListStatus + + $Description: Status flag indicating if a melody selection menu is active. + $Returns: status + + $Arguments: None + +*******************************************************************************/ +BOOL getMelodyListStatus(void) +{ + if(soundReason == MelodySelect || + soundReason == SettingSMSTone || + soundReason == SettingAlarm ) + return TRUE; + else + return FALSE; +} + + +/******************************************************************************* + + $Function: stopPlayingMelody + + $Description: stop currently played ringer melody + + $Returns: None + + $Arguments: None + +*******************************************************************************/ +static void stopPlayingMelody( void ) +{ + TRACE_FUNCTION( "stopPlayingMelody" ); + + /* If a timer event is running we want to stop that as well, + since we don't really want to turn the tune off and have + it start again when the timer expires + */ + if ( hRingerStartTimer != NULL ) + timStop( hRingerStartTimer ); + + /* Are we playing a tune + */ + if ( LastTune ) + { + /* To stop playing the previous ring tone - RAVI - 23-12-2005 */ + #ifdef NEPTUNE_BOARD + #ifdef FF_MMI_RINGTONE /*MSL Stop */ + audio_StopSoundbyID( AUDIO_BUZZER, CALLTONE_SELECT); + #else + audio_StopSoundbyID( AUDIO_BUZZER, LastTune - 1 ); + #endif + #else + audio_StopSoundbyID( AUDIO_BUZZER, LastTune ); + #endif + } + + /* Need to wait for the tune to stop before trying to + set up the next tune, so wait always + */ + vsi_t_sleep( 0, 5 ); +} + +/******************************************************************************* + + $Function: startPlayingMelody + + $Description: Start played the ringer melody + + $Returns: None + + $Arguments: Melody_id + +*******************************************************************************/ +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifndef FF_MIDI_RINGER +static void startPlayingMelody(UBYTE melody_id) +{ +#ifdef NEPTUNE_BOARD + BYTE bVolumeSetting; +#endif + + if ( hRingerStartTimer != NULL ) + timStop( hRingerStartTimer ); + +#ifdef FF_MMI_RINGTONE /* MSL Ring tone play */ + audio_PlaySoundID(AUDIO_BUZZER, CALLTONE_SELECT, (BYTE)current.volumeSetting, AUDIO_PLAY_ONCE); +#else + + /* RAVI - 20-1-2006 */ + #ifdef NEPTUNE_BOARD + if (soundReason == SettingVolume) + { + switch (scrollVolumeSetting) + { + case 0: + bVolumeSetting = SILENT_VOLUME; + break; + case 1: + bVolumeSetting = LOW_VOLUME; + break; + case 2: + bVolumeSetting = MEDIUM_VOLUME; + break; + case 3: + bVolumeSetting = HIGH_VOLUME; + break; + case 4: + bVolumeSetting = INCREASE_VOLUME; + break; + default: + bVolumeSetting = LOW_VOLUME; + break; + } + audio_PlaySoundID(AUDIO_BUZZER, melody_id, (BYTE)bVolumeSetting, + AUDIO_PLAY_ONCE); + } + else + { + audio_PlaySoundID(AUDIO_BUZZER, melody_id, (BYTE)current.volumeSetting, + AUDIO_PLAY_ONCE); + } + #else + audio_PlaySoundID(AUDIO_BUZZER, melody_id, (BYTE)current.volumeSetting, + AUDIO_PLAY_ONCE); + #endif + /* END - RAVI - 20-1-2006 */ +#endif + +} +#endif + +/******************************************************************************* + + $Function: soundsPlayRinger + + $Description: Play the tune selected by melody_id, stopping any currently + playing tunes if necessary. Remember to take into account the + volume setting and provide a crescendo if requested + + $Returns: None + + $Arguments: melody_id, selects the melody to be played + +*******************************************************************************/ +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifndef FF_MIDI_RINGER +static void soundsPlayRinger( int melody_id ) +{ + CurrentTune = melody_id; + if (LastTune) + { + #ifdef FF_MMI_RINGTONE /*MSL Stop */ + audio_StopSoundbyID( AUDIO_BUZZER, CALLTONE_SELECT); + #else + audio_StopSoundbyID (AUDIO_BUZZER,LastTune ); + #endif + } + vsi_t_sleep(0, 5); + + if (current.volumeSetting == increasing) + { + +#ifdef FF_MMI_RINGTONE /* MSL Ring Tone Play */ + audio_PlaySoundID ( AUDIO_BUZZER, CALLTONE_SELECT, 0 , AUDIO_PLAY_CRESCENDO ); +#else + + /* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(AUDIO_BUZZER, CurrentTune, current.volumeSetting, AUDIO_PLAY_ONCE); +#else + audio_PlaySoundID ( AUDIO_BUZZER,CurrentTune, 0 , AUDIO_PLAY_CRESCENDO ); +#endif +/* END RAVI */ +#endif + + } + else + { + +#ifdef FF_MMI_RINGTONE /* MSL Ring Tone Play */ + audio_PlaySoundID ( AUDIO_BUZZER, CALLTONE_SELECT, 0, AUDIO_PLAY_ONCE ); +#else + + /* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(AUDIO_BUZZER, CurrentTune, current.volumeSetting, AUDIO_PLAY_ONCE); +#else + audio_PlaySoundID ( AUDIO_BUZZER,CurrentTune, 0, AUDIO_PLAY_ONCE ); +#endif +/* END RAVI */ +#endif + + } + LastTune = CurrentTune; +} +#endif + +/******************************************************************************* + + $Function: destroyDynaMenu + + $Description: frees the memory allocated to a dynamenu (Refer to the + buildMelodyMenu routine below + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ + +static void destroyDynaMenu( void ) +{ + +} + + +/******************************************************************************* + + $Function: buildMelodyMenu + + $Description: Builds the melody menu dynamenu from the melodies supplied + by the resource manager + + $Returns: None + + $Arguments: None + +*******************************************************************************/ +static T_MFW_HND buildMelodyMenu( MfwHnd parent_window) +{ + T_MELODY_INFO * data = (T_MELODY_INFO *)ALLOC_MEMORY (sizeof (T_MELODY_INFO)); + T_MFW_WIN * win; + + TRACE_FUNCTION (">>>> buildMelodyMenu()"); + + /* + * Create window handler + */ + + data->sounds_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)melody_win_cb); + if (data->sounds_win EQ NULL) + { + return NULL; + } + + TRACE_EVENT(">>>> Melody window created: " ); + /* + * connect the dialog data to the MFW-window + */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)melody_exec_cb; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->sounds_win)->data; + win->user = (void *)data; + data->parent = parent_window; + winShow(data->sounds_win); + /* + * return window handle + */ + + return data->sounds_win; +} + +/******************************************************************************* + + $Function: melody_exec_cb + + $Description: Exec callback function of the SMS read window (dynamic list of + all the SMS) + + $Returns: none + + $Arguments: win - window handler + event - mfw event + parameter - optional data. + +*******************************************************************************/ +void melody_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_MELODY_INFO * data = (T_MELODY_INFO *)win_data->user; + UBYTE i; + UBYTE numberOfMelodies=0; +#ifdef FF_MIDI_RINGER + UBYTE file_count=0; +#endif + ListWinInfo * mnu_data = (ListWinInfo *)parameter; + + TRACE_FUNCTION (">>>>> melody_exec_cb()"); + + switch (event) + { + case E_INIT: + + TRACE_EVENT(">>>> melody_exec_cb() Event:E_INIT"); + + /* initialization of administrative data */ + + data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData)); + + if(data->menu_list_data == 0) + { + TRACE_EVENT("Failed memory alloc 1 "); + return; + } +/*Apr 05, 2005 REF: ENH 29994 xdeepadh */ +#ifdef FF_MIDI_RINGER + numberOfMelodies = sounds_midi_return_file_number(); + TRACE_EVENT_P1("numberOfMelodies is %d",numberOfMelodies); + /*In case no files have been loaded display info message */ + if(numberOfMelodies <= 0) + { + sounds_show_info(0, TxtMidiFileNotLoaded, TxtNull, NULL); + return; + + } +#else + numberOfMelodies = resource_GetListCount(RES_MELODY); +#endif + + data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( numberOfMelodies * sizeof(T_MFW_MNU_ITEM) ); + + if(data->menu_list_data->List == 0) + { + TRACE_EVENT("Failed memory alloc 2"); + return; + } + + for (i = 0; i < numberOfMelodies ; i++) + { + mnuInitDataItem(&data->menu_list_data->List[i]); + data->menu_list_data->List[i].flagFunc = item_flag_none; + + /* Display the midi file names in the list */ + /*Apr 05, 2005 REF: ENH 29994 xdeepadh */ +#ifdef FF_MIDI_RINGER + data->menu_list_data->List[i].str = (char *)sounds_midi_return_file_name(file_count++); +#else + data->menu_list_data->List[i].str = (char *)MelodyTable[i]; +#endif + } + + data->menu_list_data->ListLength =numberOfMelodies; + data->menu_list_data->ListPosition = 1; + data->menu_list_data->CursorPosition = 1; + data->menu_list_data->SnapshotSize = numberOfMelodies; + data->menu_list_data->Font = 0; + data->menu_list_data->LeftSoftKey = TxtSoftSelect; + data->menu_list_data->RightSoftKey = TxtSoftBack; + data->menu_list_data->KeyEvents = KEY_ALL; + data->menu_list_data->Reason = 0; + data->menu_list_data->Strings = TRUE; + data->menu_list_data->Attr = (MfwMnuAttr*)&melody_menuAttrib; +/* Apr 05, 2005 REF: ENH 29994 xdeepadh */ +#ifdef FF_MIDI_RINGER + data->menu_list_data->Attr->hdrId = TxtMidiFileTitle; +#endif + data->menu_list_data->autoDestroy = FALSE; + listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)MelodyList_cb,0); +/*#ifdef FF_MIDI_RINGER + selected_tone=data->menu_list_data->ListPosition-1; + stopPlayerTimer(); + startPlayerTimer(); +#endif*/ +/* Start playing first ringtone on initial list display - RAVI - 23-12-2005 */ +#ifdef NEPTUNE_BOARD + if(getMelodyListStatus()== TRUE) + { + stopPlayingMelody (); + startPlayingMelody(0); /* Play the first menu item which is being selected */ + LastTune = FIRST_TONE_PLAYED; /* First Menu Item - Ringer is selected */ + } +#endif +/* RAVI - 23-12-2005 */ + +break; + + case E_START_MELODY: +/* Apr 05, 2005 REF: ENH 29994 xdeepadh */ +/* Play the midi file when the user has scrolled */ +#ifdef FF_MIDI_RINGER + selected_tone=mnu_data->MenuData.ListPosition; + stopPlayerTimer(); + startPlayerTimer(); +#else + +/* When cursor moved - Stop playing old and start playing new - RAVI - 23-12-2005 */ +#ifndef NEPTUNE_BOARD + startPlayingMelody(mnu_data->MenuData.ListPosition); +#else + stopPlayingMelody(); + startPlayingMelody(mnu_data->MenuData.ListPosition); + LastTune = mnu_data->MenuData.ListPosition+1; /* Store the late tune in global variable */ +#endif /* END RAVI */ +#endif + + break; + + case E_RETURN: + break; + default: + break; + } +} +/******************************************************************************* + + $Function: MelodyList_cb + + $Description: Callback function for the melody list. + + $Returns: none + + $Arguments: Parent - parent window. + ListData - Menu item list +*******************************************************************************/ + +void MelodyList_cb(T_MFW_HND * Parent, ListMenuData * ListData) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *)Parent)->data; + T_MELODY_INFO * data = (T_MELODY_INFO *)win_data->user; + T_MFW_HND * l_parent; +/*Apr 05, 2005 REF: ENH 29994 xdeepadh */ +#ifdef FF_MIDI_RINGER + T_DISPLAY_DATA DisplayInfo; + T_AS_PLAYER_TYPE player_type; + +#ifdef FF_MIDI_LOAD_FROM_MEM + T_MELODY memory_pointer; +#else + char * filename; +#endif +#endif + + if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR) + || (ListData->Reason EQ LISTS_REASON_HANGUP)) /* sbh - added hangup key */ + { + l_parent = data->parent; + +/*Stop playing ringtone on press of BACK/ CLEAR/ HANGUP - RAVI - 23-12-2005 - SR 13873 */ +#ifdef NEPTUNE_BOARD + stopPlayingMelody(); +#endif +/* END RAVI - 23-12-2005 */ + + } + else if(ListData->Reason EQ LISTS_REASON_SELECT) + { + switch(soundReason) + { + case MelodySelect: + TRACE_EVENT("selecting file"); +#ifdef FF_MIDI_RINGER /*Use Midi Player*/ +#ifdef FF_MIDI_LOAD_FROM_MEM/*If Loc ULC */ + memory_pointer=sounds_midi_return_memory_location(ListData->ListPosition); + player_type=mfw_ringer_deduce_player_type(memory_pointer.melody_name); + mfw_ringer_set_memory(player_type,AS_RINGER_MODE_IC,(UINT32*)memory_pointer.melody,(UINT32)memory_pointer.melody_size); +#else + filename =sounds_midi_return_file_name(ListData->ListPosition); + player_type=mfw_ringer_deduce_player_type(filename); + mfw_ringer_set_file(player_type,AS_RINGER_MODE_IC,filename); +#endif + +#else //Use Buzzer + stopPlayingMelody(); + current.ringer = ListData->ListPosition; +#endif + + break; + + case SettingSMSTone: + +#ifdef FF_MIDI_RINGER //Use Midi Player +#ifdef FF_MIDI_LOAD_FROM_MEM //If ULC + memory_pointer=sounds_midi_return_memory_location(ListData->ListPosition); + player_type=mfw_ringer_deduce_player_type(memory_pointer.melody_name); + mfw_ringer_set_memory(player_type,AS_RINGER_MODE_SMS,(UINT32*)memory_pointer.melody,(UINT32)memory_pointer.melody_size); +#else + filename =sounds_midi_return_file_name(ListData->ListPosition); + player_type=mfw_ringer_deduce_player_type(filename); + mfw_ringer_set_file(player_type,AS_RINGER_MODE_SMS,filename); +#endif +#else/*Use Buzzer*/ + stopPlayingMelody(); + current.SMSTone = ListData->ListPosition; /* For SMS tones - starting from 40 */ +/* Store in FFS - RAVI - 23-12-2005 - SR 13873 */ +#ifdef NEPTUNE_BOARD + FFS_flashData.SMSTone= current.SMSTone; + flash_write(); +#endif +/* END RAVI - 23-12-2005 */ +#endif + + break; + + case SettingAlarm: +#ifdef FF_MIDI_RINGER /* Use Midi Player */ + #ifdef FF_MIDI_LOAD_FROM_MEM + memory_pointer=sounds_midi_return_memory_location(ListData->ListPosition); + player_type=mfw_ringer_deduce_player_type(memory_pointer.melody_name); + mfw_ringer_set_memory(player_type,AS_RINGER_MODE_ALARM,(UINT32*)memory_pointer.melody,(UINT32)memory_pointer.melody_size); +#else + filename =sounds_midi_return_file_name(ListData->ListPosition); + player_type=mfw_ringer_deduce_player_type(filename); + mfw_ringer_set_file(player_type,AS_RINGER_MODE_ALARM,filename); +#endif +#else/*Use Buzzer*/ + // need to check alarm status MZ. + current.AlarmOn = ListData->ListPosition; +/* Store in FFS - RAVI - 23-12-2005 - SR 13873 */ +#ifdef NEPTUNE_BOARD + FFS_flashData.AlarmOn= current.AlarmOn; + flash_write(); +#endif +/* END RAVI - 23-12-2005 */ +#endif + + default: + break; + } +/* Apr 05, 2005 REF: ENH 29994 xdeepadh */ +/* Store selected melody in PCM storage. */ +#ifdef FF_MIDI_RINGER + sounds_show_info(0, TxtSelected, TxtNull, NULL); +#endif + } + +#ifdef FF_MIDI_RINGER + stopPlayerTimer(); + mfw_player_stop(sounds_midi_player_stop_cb); +#else + stopPlayingMelody(); +#endif + listsDestroy(ListData->win); + melody_destroy(data->sounds_win); + +} + +/******************************************************************************* + + $Function: melody_destroy + + $Description: Destroy the melody window. + + $Returns: none + + $Arguments: own_window- current window +*******************************************************************************/ + +static void melody_destroy(MfwHnd own_window) +{ + T_MFW_WIN * win_data; + T_MELODY_INFO * data; + UBYTE numberOfMelodies; + + TRACE_FUNCTION ("melody_destroy()"); + + if (own_window) + { + win_data = ((T_MFW_HDR *)own_window)->data; + data = (T_MELODY_INFO *)win_data->user; + + if (data) + { + /* + * Delete WIN handler + */ + win_delete (data->sounds_win); + + /* + * Free Memory + */ +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER + numberOfMelodies = sounds_midi_return_file_number(); +#else + numberOfMelodies = resource_GetListCount(RES_MELODY); +#endif + + if (data->menu_list_data != NULL) + { + FREE_MEMORY ((void *)data->menu_list_data->List, numberOfMelodies * sizeof (T_MFW_MNU_ITEM)); + FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData)); + } + FREE_MEMORY ((void *)data, sizeof (T_MELODY_INFO)); +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER +//Delete the timer used for scrolling + if(hPlayerStartTimer!=NULL) + timDelete(hPlayerStartTimer); +#endif + + } + else + { + TRACE_EVENT ("melody_destroy() called twice"); + } + } +} + +/******************************************************************************* + + $Function: melody_win_cb + + $Description: Window callback function for the melody window. + + $Returns: none + + $Arguments: w - mfw window handler + e - mfw event + +*******************************************************************************/ + +static int melody_win_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */ +{ + TRACE_FUNCTION ("melody_win_cb()"); + switch (e) + { + case MfwWinVisible: /* window is visible */ + break; + case MfwWinFocussed: /* input focus / selected */ + case MfwWinDelete: /* window will be deleted */ + + default: + return MFW_EVENT_REJECTED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: melody_menu_cb + + $Description: Call back function for the melody menu. + + $Returns: + + $Arguments: +*******************************************************************************/ + +static int melody_menu_cb (MfwEvt e, MfwMnu *m){ + +/* T_MFW_HND win = mfwParent(mfw_header()); */ /* RAVI */ +/* T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; */ /* RAVI */ + + switch (e) + { + case E_MNU_ESCAPE: + break; + default: + return 0; + } + return 1; +} + +/******************************************************************************* + + $Function: resource_GetListCount + + $Description: Returns the number of entries in resource table. + + $Returns: Number of entries in Melody table. + + $Arguments: res - Resource Id. + +*******************************************************************************/ +int resource_GetListCount(res_ResourceID_type res) + // Returns the number of the resource type available in the phone. +{ + int index=0; + switch (res) + { + case RES_MELODY: + while(MelodyTable[index] !=0) + index++; + return index; + /* break; */ /* RAVI */ + + case RES_LANGUAGE: + + break; + case RES_STRING: + + break; + default: + + break; + + } + return index; +} + +/******************************************************************************* + + $Function: buildOnOffMenu + + $Description: builds an on/off menu and associates it with a context + + $Returns: None + + $Arguments: count, number of elements in menu + id3, prompt string + active, context into which the menu should be associated + +*******************************************************************************/ + +static void buildOnOffMenu( int count, int id3, int active ) +{ +} + +/******************************************************************************* + + $Function: buildVolumeMenu + + $Description: builds the volume menu and associates it with the volume + context + + $Returns: None + + $Arguments: volume, the context to be associated with + +*******************************************************************************/ + +static void buildVolumeMenu( VOL_ENUM volume ) +{ +} + +/******************************************************************************* + + $Function: displayDynaMenu + + $Description: show one page of the ringer list, determined by item. + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void displayDynamenu( void ) +{ + +} + +/******************************************************************************* + + $Function: displayRingerVolume + + $Description: shows the volume setting determined by cVolume + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void displayRingerVolume( void ) +{ +} + +/******************************************************************************* + + $Function: displayOnOffList + + $Description: show the On Off (3rd) list, determined by item. + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void displayOnOffList( void ) +{ +} +/******************************************************************************* + + $Function: buildLanguageMenu + + $Description: builds the dynamenu for the RES_LANGUAGE resource type + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void buildLanguageMenu(void) +{ + +} + +/******************************************************************************* + + $Function: delayThenPlayMelody + + $Description: play selected ringer melody after short delay + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void delayThenPlayMelody( void ) +{ + + /* start timer for half a second and on timeout start everlasting play + */ + timStart( hRingerStartTimer ); +} + +/******************************************************************************* + + $Function: playCurrentSound + + $Description: play tune which is temporarily selected, this event handler + is invoked when the hRingerStartTimer event completes + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: e, event, tc timer context + +*******************************************************************************/ +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifndef FF_MIDI_RINGER +static int playCurrentSound( MfwEvt e, MfwTim *tc ) +{ + soundsPlayRinger(current.ringer); + + // stop running timer (One shot mode only) + if (hRingerStartTimer != NULL ) { + timStop(hRingerStartTimer); + } + + return MFW_EVENT_CONSUMED; +} + +#endif +/******************************************************************************* + + $Function: setSelection + + $Description: reactivates calling menu after confirming setting + + $Returns: MFW_EVENT_PASSED always + + $Arguments: e, event, m, window handle + +*******************************************************************************/ + +static int setSelection( MfwEvt e, MfwWin *m ) +{ + //int UpdatePCM = 0; // RAVI +// int SoundToPlay = -1; // RAVI + + TRACE_FUNCTION("setSelection"); + + /* This implements a state machine, the next setting depends + on the reason we have been invoked + + Note the following is still pending implementation + USSD TONE, SVC TONE, MANPLMN TONE + */ + switch (soundReason) + { + case MelodySelect: + { + } + break; + + case SettingVolume: + { + } + break; + + default: + { + /* No action required + */ + } + break; + } + + + /* redisplay sub menu showing changed position of active marker. + */ + winShow( win ); + + return MFW_EVENT_PASSED; +} + +/******************************************************************************* + + $Function: writeSettingsToPCM + + $Description: writes contents of global vars of sounds to PCM or + sets default values + + $Returns: None + + $Arguments: flush, dictates whether or not flushing should be + performed on the write operation + +*******************************************************************************/ +static void writeSettingsToPCM( U8 flush ) +{ +} +/******************************************************************************* + + $Function: readSettingsFromPCM + + $Description: inits global vars of sounds from PCM or + sets default values + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void readSettingsFromPCM(void) +{ +} + +/******************************************************************************* + + $Function: soundsCreate + + $Description: Create a sounds context, with a window, keyboards, timers + etc. + + $Returns: None + + $Arguments: parent, handle of the parent window + +*******************************************************************************/ + +static void soundsCreate(MfwHnd parent) +{ + +} + + +/******************************************************************************* + + $Function: soundsDestroy + + $Description: cleans up a context + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void soundsDestroy(void) +{ + +} + + +/******************************************************************************* + + $Function: getCallingMenu + + $Description: handles transition to calling menu + a) on timeout, + b) during running timer when Clear, SoftKeyLeft + or SoftKeyRight is pressed + + $Returns: MFW_EVENT_PASSED + + $Arguments: e, event, tc, timer context + +*******************************************************************************/ + +static int getCallingMenu(MfwEvt e, MfwTim *tc) +{ + TRACE_FUNCTION( "BACK to invocating Menu" ); + + return 0; +} + +/******************************************************************************* + + $Function: winEvent + + $Description: window event handler, only deals with the win visible + event, all others are ignored + + $Returns: MFW_EVENT_PASSED or MFW_EVENT_CONSUMED depending on the + event + + $Arguments: e, event, w, window handle + +*******************************************************************************/ + +static int winEvent (MfwEvt e, MfwWin *w) +{ + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: keyEventLong + + $Description: keyboard event handler Long press + + $Returns: MFW_EVENT_PASSED or MFW_EVENT_CONSUMED depending on the + event + + $Arguments: e, event, k, keyboard handle + +*******************************************************************************/ + +static int keyEventLong (MfwEvt e, MfwKbd *k) +{ + PTRACE( sprintf( buf, "keycode in SOUND keyEvtLong %d", (int) k->code ); ) + PTRACE( sprintf( buf, "mfwEvt in SOUND Long 0x%10x", e ); ) + + + return MFW_EVENT_PASSED; /* give other handlers a chance */ +} + +/******************************************************************************* + + $Function: keyEvent + + $Description: keyboard event handler + + $Returns: MFW_EVENT_PASSED or MFW_EVENT_CONSUMED depending on the + event + + $Arguments: e, event, k, keyboard handle + +*******************************************************************************/ + +static int keyEvent (MfwEvt e, MfwKbd *k) +{ + + PTRACE( sprintf( buf, "keycode in SOUND keyEvt %d", (int) k->code ); ) + PTRACE( sprintf( buf, "mfwEvt in SOUND 0x%10x", e ); ) + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: stepVibrator + + $Description: Changes the state of the vibrator from vibrating to + not vibrating and then restarts the vibration timer + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void stepVibrator( void ) +{ + TRACE_FUNCTION("Vibrator Ringing"); + +} + +/******************************************************************************* + + $Function: ringVibrator + + $Description: generates the ringing vibrations as configured + + $Returns: New setting of the vibrator counter + + $Arguments: c, pointer to a vibrator counter + +*******************************************************************************/ + +static int ringVibrator( UBYTE *c ) +{ + return 0; +} + + +/******************************************************************************* + + $Function: VibratorTimerEvent + + $Description: Vibrator timer event + + $Returns: Event consumed, always + + $Arguments: e, event, t, timer + +*******************************************************************************/ + +static int VibratorTimerEvent ( MfwEvt e, MfwTim *t ) +{ + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: volumeSettingTimeOut + + $Description: The Ringer volume settings time out has occured and used has not selected + a volume setting. + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: e, event, tc timer context + +*******************************************************************************/ +static int volumeSettingTimeOut( MfwEvt e, MfwTim *tc ) +{ + T_MFW_HND win = mfw_parent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_idle * idle_data = (T_idle *)win_data->user; + + TRACE_EVENT(">>>> volumeSettingTimeOut(), Vol Setiing Time out. "); + + // stop running timer. + if (hRingerVolSettingTimeOut != NULL ) { + timStop(hRingerVolSettingTimeOut); + } +//When the timer times out, stop the song and the timer. +#ifdef FF_MIDI_RINGER //Use Midi Player + if(soundReason==SettingVolume) + { + // Are we playing a tune + if ( hPlayerStartTimer!= NULL ) + timStop( hPlayerStartTimer ); + mfw_player_stop(sounds_midi_player_stop_cb); + } +#endif + + if(call_data.win_menu !=NULL && (call_data.call_direction == MFW_CM_MTC)) + { + bookMenuDestroy(call_data.win_menu); + /* + If volume settings dialog timed out while in the incoming call, allow the + ringer to continue ringing. MZ 9/4/01 + */ +#ifdef FF_MIDI_RINGER + mfw_ringer_start(AS_RINGER_MODE_IC,true,sounds_midi_ringer_start_cb); +#else + /* Volume Setting for Silent */ + startPlayingMelody(getCurrentRingerSettings()); +#endif + + + } + else if (idle_data->info_win != NULL ) + { + bookMenuDestroy(idle_data->info_win); + } + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + Public Methods + +*******************************************************************************/ +/* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD +/* ===========================================================*/ +/** +* restorePreviousVolumeSetting () will restore the previous volume setting once the menu has +* been scrolled. +* +* @param None. +* +* @return None +* +* @see +*/ +/* =========================================================== */ + +void restorePreviousVolumeSetting() +{ + current.volumeSetting = lastVolumeSetting; +} + +/* ===========================================================*/ +/** +* volumeMenuScrollUp () when menu button is moved up then this function will get called which +* decrements value for the global variable used to maintain the volume setting while scrolling +* through the menu. +* +* @param None. +* +* @return None +* +* @see +*/ +/* =========================================================== */ +void volumeMenuScrollUp () +{ + /* Decrement Volume setting when scroll up */ + scrollVolumeSetting = scrollVolumeSetting - 1 ; + + if (scrollVolumeSetting < SILENT_SETTING) + { + scrollVolumeSetting = MAX_VOLUME_SETTING; + } + +/* current.volumeSetting = scrollVolumeSetting; */ + vsi_t_sleep(0,20); +} + + +/* ===========================================================*/ +/** +* volumeMenuScrollDown () when menu button is moved down then this function will get called which +* increments value for the global variable used to maintain the volume setting while scrolling +* through the menu. +* +* @param None. +* +* @return None +* +* @see +*/ +/* =========================================================== */ +void volumeMenuScrollDown () +{ + /* Increment Volume setting when scroll down */ + scrollVolumeSetting = scrollVolumeSetting + 1; + + if (scrollVolumeSetting > MAX_VOLUME_SETTING) + { + scrollVolumeSetting = SILENT_SETTING; + } + +/* current.volumeSetting = scrollVolumeSetting; */ + vsi_t_sleep(0,20); +} + +/* ===========================================================*/ +/** +* volumeMenuStartPlaying () Will start playing the default melody with the specified volume +* control. +* +* @param None. +* +* @return None +* +* @see +*/ +/* =========================================================== */ +void volumeMenuStartPlaying() +{ + if(soundReason == SettingVolume) + { + stopPlayingMelody (); + startPlayingMelody(current.ringer); /* Play the first menu item which is being selected */ + } +} + +/* ===========================================================*/ +/** +* volumeMenuStopPlaying () Will stop playing the default melody with the specified volume +* control. +* +* @param None. +* +* @return None +* +* @see +*/ +/* =========================================================== */ +void volumeMenuStopPlaying() +{ + if(soundReason == SettingVolume) + { + stopPlayingMelody (); + } +} +#endif +/* END RAVI */ + +/******************************************************************************* + + $Function: restartVolSettingInactivityTimer + + $Description: Restart the Volume settings timer. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void restartVolSettingInactivityTimer(void) +{ + if ( hRingerVolSettingTimeOut != NULL ) + timStop( hRingerVolSettingTimeOut ); + + timStart(hRingerVolSettingTimeOut); + +} +/******************************************************************************* + + $Function: stopRingerVolTimeOut + + $Description: Stop the ringer volume settings timer. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void stopRingerVolSettingInactivityTimer(void) +{ + + if ( hRingerVolSettingTimeOut != NULL ) + timStop( hRingerVolSettingTimeOut ); +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER //Use Midi Player + //Stop the Timer and stop the song before timeout + if ( hPlayerStartTimer!= NULL ) + timStop( hPlayerStartTimer ); + mfw_player_stop(sounds_midi_player_stop_cb); +#endif +} +/******************************************************************************* + + $Function: startRingerVolumeSettingTimer + + $Description: Create and start the ringer voulme inactivity timer. + + $Returns: none + + $Arguments: none + +*******************************************************************************/ +void startRingerVolSettingInactivityTimer(T_MFW_HND parent_win) +{ + T_MFW_HND win = mfw_parent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_idle * idle_data = (T_idle *)win_data->user; + + TRACE_FUNCTION(">>>> startRingerVolSettingInactivityTime, Create and Start Vol timer "); + //Create 4 second ringer delay timer. + if(hRingerVolSettingTimeOut == NULL ) + { + if(call_data.call_direction == MFW_CM_MTC) + { + /* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + ; /* do nothing */ +#else + hRingerVolSettingTimeOut = timCreate(call_data.win, TIM4SECOND, (MfwCb)volumeSettingTimeOut); +#endif +/* END RAVI */ + } + else + { + /* RAVI - 20-1-2006 */ +#ifdef NEPTUNE_BOARD + ; /* do nothing */ +#else + hRingerVolSettingTimeOut = timCreate(idle_data->win, TIM4SECOND, (MfwCb)volumeSettingTimeOut); +#endif +/* END RAVI */ + } + } + + if ( hRingerVolSettingTimeOut != NULL ) + timStop( hRingerVolSettingTimeOut ); + +#ifdef NEPTUNE_BOARD + /* RAVI - 20-1-2006 */ + /* Initialize the scrolling variable - When volume menu is activated */ + scrollVolumeSetting = 0; + lastVolumeSetting = current.volumeSetting; +#endif + + +#ifndef NEPTUNE_BOARD + timStart(hRingerVolSettingTimeOut); +#endif +/* END RAVI */ + + +} +/******************************************************************************* + + $Function: soundsRinger + + $Description: prepares Ringer setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsRinger( MfwMnu *m, MfwMnuItem *i ) +{ + T_MFW_HND win; + T_MFW_HND parent_win = mfw_parent(mfw_header()); +/*Apr 05, 2005 REF: ENH 29994 xdeepadh */ +#ifdef FF_MIDI_RINGER + int numberOfMelodies=0; + T_DISPLAY_DATA DisplayInfo; + + TRACE_EVENT("soundsRinger"); + if(IsMidiInit==0) + { + TRACE_EVENT("populating files"); + sounds_midi_init(); + IsMidiInit = 1; + } + + numberOfMelodies = sounds_midi_return_file_number(); + TRACE_EVENT_P1("numberOfMelodies is %d",numberOfMelodies); + + if(numberOfMelodies <= 0) + { + sounds_show_info(0, TxtMidiFileNotLoaded, TxtNull, NULL); + return MFW_EVENT_CONSUMED; + } + else + { + //Set the voice limit to 32 and channel to stereo in idle mode + //Set the audiopath to speaker. + mfw_ringer_set_audiopath(); + mfw_player_midi_set_params(FF_MIDI_VOICE_LIMIT,MIDI_CHANNEL_STEREO); + //Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh + //Set the Mp3 Parameters .Size of the file where the melody must start is set 0(from beginning) + //and channel is set to stereo. +#ifdef FF_MP3_RINGER + mfw_player_mp3_set_params(MP3_PLAY_FROM_START,MP3_CHANNEL_STEREO); +#endif //FF_MP3_RINGER + + //Nov 21, 2005 REF:ER OMAPS00057430 nekkareb + //Set the AAC Parameters .Size of the file where the melody must start is set 0(from beginning) + //and channel is set to stereo. +#ifdef FF_AAC_RINGER + mfw_player_aac_set_params(AAC_PLAY_FROM_START,AAC_CHANNEL_STEREO); +#endif //FF_AAC_RINGER + + + hPlayerStartTimer = timCreate( 0, TIMHALFSECOND, (MfwCb)playCurrentMelody); + win = buildMelodyMenu(parent_win); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + return MFW_EVENT_CONSUMED; + } +#else + /*recources_Init (win);*/ + +/* Timer not requried for Neptune - RAVI 23-12-2005 */ +#ifndef NEPTUNE_BOARD + /* Create 0.5 second ringer delay timer. */ + hRingerStartTimer = timCreate( 0, TIMHALFSECOND, (MfwCb)playCurrentSound); +#endif +/* END ADD BY RAVI - 23-12-2005 */ + + win = buildMelodyMenu(parent_win); + + if (win NEQ NULL) + { + SEND_EVENT (win, E_INIT, 0, 0); + } + +/* For Neptune Not Required - RAVI - 23-12-2005 */ +#ifndef NEPTUNE_BOARD + /* Start the 0.5 second ringer delay timer. */ + delayThenPlayMelody(); +#endif +/* END ADD BY RAVI - 23-12-2005 */ + + return MFW_EVENT_CONSUMED; +#endif +} + + +/******************************************************************************* + + $Function: soundsVolume + + $Description: prepares Volume setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsVolume( MfwMnu *m, MfwMnuItem *i ) +{ + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: settingsVibrator + + $Description: prepares Vibrator settings screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int settingsVibrator( MfwMnu *m, MfwMnuItem *i ) +{ + + return MFW_EVENT_CONSUMED; +} +/******************************************************************************* + + $Function: settingsLanguages + + $Description: prepares languages screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int settingsLanguages( MfwMnu *m, MfwMnuItem *i ) +{ + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: soundsNewMessage + + $Description: prepares NewMessage setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsNewMessage( MfwMnu *m, MfwMnuItem *i ) +{ + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: soundsNewBroadcast + + $Description: prepares Broadcast setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsNewBroadcast( MfwMnu *m, MfwMnuItem *i ) +{ + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: soundsBatteryLow + + $Description: prepares BatteryLow setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsBatteryLow( MfwMnu *m, MfwMnuItem *i ) +{ + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: soundsCreditLow + + $Description: prepares Credit setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsCreditLow( MfwMnu *m, MfwMnuItem *i ) +{ + + return MFW_EVENT_CONSUMED; +} +/******************************************************************************* + + $Function: soundsOrganiser + + $Description: prepares Organiser setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsOrganiser( MfwMnu *m, MfwMnuItem *i ) +{ + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: soundsAlarm + + $Description: prepares Alarm setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsAlarm( MfwMnu *m, MfwMnuItem *i ) +{ + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: soundInit + + $Description: init sounds handling + + $Returns: None + + $Arguments: parent, handle of parent window + +*******************************************************************************/ + +void soundInit( MfwHnd parent ) +{ + + +} + + +/******************************************************************************* + + $Function: soundExit + + $Description: exit sounds handling + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +void soundExit (void) +{ + +} + + +/******************************************************************************* + + $Function: soundExec + + $Description: sends messages to soundExec to get the various melodies to play + + $Returns: None + + $Arguments: reason, for invocation, next, state + +*******************************************************************************/ + +void soundExec (int reason, MmiState next) + +{ + +} + + +/******************************************************************************* + + $Function: soundsKeypadSilent + + $Description: prepares KeypadTones setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ + +int soundsKeypadSilent(MfwMnu* m, MfwMnuItem* i) +{ + + T_MFW_HND win = mfw_parent(mfw_header()); + + sounds_Init(win); + + if (FFS_flashData.settings_status & SettingsKeypadClick) + { + FFS_flashData.settings_status &= ~SettingsKeypadClick; + } + else if (FFS_flashData.settings_status & SettingsKeypadDTMF) + { + FFS_flashData.settings_status &= ~SettingsKeypadDTMF; + } + flash_write(); + sounds_data.local_status = ACTIVATE_CONFIRM; + + SEND_EVENT (sounds_data.sounds_win, SHOW_CONFIRM, 0, 0); + + return 0; +} +/******************************************************************************* + + $Function: soundsKeypadClick + + $Description: prepares KeypadTones setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ +int soundsKeypadClick(MfwMnu* m, MfwMnuItem* i) +{ + + T_MFW_HND win = mfw_parent(mfw_header()); + + sounds_Init(win); + + + + if (FFS_flashData.settings_status & SettingsKeypadDTMF) + { + FFS_flashData.settings_status &= ~SettingsKeypadDTMF; + } + + FFS_flashData.settings_status |= SettingsKeypadClick; + +/* RAVI - 20-1-2006 */ + /* play KeypadClick */ +#ifdef NEPTUNE_BOARD + audio_PlaySoundID(0, TONES_KEYBEEP, current.volumeSetting, AUDIO_PLAY_ONCE); +#else + audio_PlaySoundID(0, TONES_KEYBEEP, 5, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */ +#endif +/* END RAVI */ + + sounds_data.local_status = ACTIVATE_CONFIRM; + + SEND_EVENT (sounds_data.sounds_win, SHOW_CONFIRM, 0, 0); + flash_write(); + return 0; +} + +/******************************************************************************* + + $Function: soundsKeypadDTMF + + $Description: prepares KeypadTones setting screen + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: m, menu, i, item + +*******************************************************************************/ +int soundsKeypadDTMF(MfwMnu* m, MfwMnuItem* i) +{ + + T_MFW_HND win = mfw_parent(mfw_header()); + + sounds_Init(win); + + if (FFS_flashData.settings_status & SettingsKeypadClick) + { + FFS_flashData.settings_status &= ~SettingsKeypadClick; + } + + + + FFS_flashData.settings_status |= SettingsKeypadDTMF; + flash_write(); + + sounds_data.local_status = ACTIVATE_CONFIRM; + + SEND_EVENT (sounds_data.sounds_win, SHOW_CONFIRM, 0, 0); + + return 0; +} + + + +/******************************************************************************* + + $Function: sounds_Init + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +T_MFW_HND sounds_Init (T_MFW_HND parent_window) +{ + return (sounds_create (parent_window)); +} +/******************************************************************************* + + $Function: confirm_Exit + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +void sounds_Exit (T_MFW_HND own_window) +{ + + T_MFW_WIN * win_data = ((T_MFW_HDR *)own_window)->data; + T_MELODY_INFO * data = (T_MELODY_INFO *)win_data->user; + + sounds_destroy (data->sounds_win); +} + +/******************************************************************************* + + $Function: sounds_create + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +T_MFW_HND sounds_create (T_MFW_HND parent_window) +{ + T_MELODY_INFO * data = &sounds_data; + T_MFW_WIN * win; + + TRACE_FUNCTION ("sounds_create()"); + + data->sounds_win = win_create (parent_window, 0, 0, (T_MFW_CB)sounds_win_cb); + + if (data->sounds_win EQ 0) + return 0; + + /* + * Create window handler + */ + data->mmi_control.dialog = (T_DIALOG_FUNC)sounds; + data->mmi_control.data = data; + win = ((T_MFW_HDR *)data->sounds_win)->data; + win->user = (void *) data; + + + winShow(data->sounds_win); + /* + * return window handle + */ + return data->sounds_win; +} + +/******************************************************************************* + + $Function: sounds_destroy + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +void sounds_destroy (T_MFW_HND own_window) +{ + T_MFW_WIN * win; + T_MELODY_INFO * data; + + TRACE_FUNCTION ("sounds_destroy()"); + + if (own_window) + { + win = ((T_MFW_HDR *)own_window)->data; + data = (T_MELODY_INFO *)win->user; + + if (data) + { + + /* + * Delete WIN handler + */ + win_delete (data->sounds_win); + data->sounds_win = 0; + } + } +} +/******************************************************************************* + + $Function: sounds_win_cb + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +static int sounds_win_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ + /* + * Top Window has no output + */ + return 1; +} + + +/******************************************************************************* + + $Function: sounds_dialog + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +static void sounds_dialog(void) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION ("sounds_dialog()"); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNull, TxtNull , COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)sounds_dialog_cb, THREE_SECS, KEY_CLEAR | KEY_RIGHT ); + if (sounds_data.local_status EQ ACTIVATE_CONFIRM) + { + display_info.TextId = TxtActivated; + } + else + { + display_info.TextId = TxtDeActivated; + } + + /* + * Call Info Screen + */ + info_dialog (sounds_data.sounds_win, &display_info); + +} +/******************************************************************************* + + $Function: confirm_dialog_cb + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +void sounds_dialog_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + TRACE_FUNCTION ("sounds_dialog_cb()"); + + switch (reason) + { + case INFO_TIMEOUT: + /* no break; */ + case INFO_KCD_HUP: + /* no break; */ + case INFO_KCD_LEFT: + /* no break; */ + case INFO_KCD_RIGHT: + /* no break; */ + case INFO_KCD_CLEAR: + sounds_Exit(win); + break; + } +} + +/******************************************************************************* + + $Function: sounds + + $Description: + + $Returns: + + $Arguments: + +*******************************************************************************/ +void sounds (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + // T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; // RAVI + // T_MELODY_INFO * data = (T_MELODY_INFO *)win_data->user; // RAVI + + TRACE_FUNCTION("sounds()"); + + switch (event) + { + case SHOW_CONFIRM: + sounds_dialog(); + break; + } + +} + +// Nov 29, 2004 REF: CRR 25051 xkundadu +// Description: INCALL SCREEN – ADJUSTING THE VOLUME +// Fix: Added these functions to set the speaker volume to various levels. + +void SetVolumeLevel1(void) +{ + + + FFS_flashData.output_volume = OutVolumeLevel1; + // Set the volume + mmeSetVolume (1, FFS_flashData.output_volume); + //write the value to the FFS + flash_write(); + +} +void SetVolumeLevel2(void) +{ + + + FFS_flashData.output_volume = OutVolumeLevel2; + // Set the volume + mmeSetVolume (1, FFS_flashData.output_volume); + //write the value to the FFS + flash_write(); + +} +void SetVolumeLevel3(void) +{ + + + FFS_flashData.output_volume = OutVolumeLevel3; + // Set the volume + mmeSetVolume (1, FFS_flashData.output_volume); + //write the value to the FFS + flash_write(); + +} +void SetVolumeLevel4(void) +{ + + + FFS_flashData.output_volume = OutVolumeLevel4; + // Set the volume + mmeSetVolume (1, FFS_flashData.output_volume); + //write the value to the FFS + flash_write(); + +} +void SetVolumeLevel5(void) +{ + + + FFS_flashData.output_volume = OutVolumeLevel5; + // Set the volume + mmeSetVolume (1, FFS_flashData.output_volume); + //write the value to the FFS + flash_write(); + +} +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER +/******************************************************************************* + + $Function: sounds_midi_init + + $Description:Function to initialise the Midi files. + + $Returns: None + + $Arguments: None + +*******************************************************************************/ +void sounds_midi_init(void) +{ + TRACE_FUNCTION("sounds_init"); +#ifdef FF_MIDI_RINGER +#ifdef FF_MIDI_LOAD_FROM_MEM + midi_files_count=MIDI_MAX_FILES; +#else + //Nov 04, 2005 REF:DRT OMAPS00053737 xdeepadh +#ifdef FF_MIDI_LOAD_FROM_LFS + //Populate midi files from LFS + TRACE_EVENT("LFS"); + //Load the midi files from FFS into LFS + midi_files_count=sounds_load_lfs_midi_files(MIDI_MAX_FILES); + //Populate the list of midi files from LFS + midi_files_count=sounds_populate_midi_files(midi_file_names,MIDI_MAX_FILES,LFS_CONTENT_DIR); +#else + TRACE_EVENT("FFS"); + midi_files_count=sounds_populate_midi_files(midi_file_names,MIDI_MAX_FILES,RINGER_CONTENT_DIR); +#endif //FF_MIDI_LOAD_FROM_LFS +#endif //FF_MIDI_LOAD_FROM_MEM +#endif //FF_MIDI_RINGER +} + +/******************************************************************************* + + $Function: sounds_midi_exit + + $Description:Function to uninitialise the Midi files. + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +void sounds_midi_exit(void) +{ + TRACE_FUNCTION("sounds_exit"); +#ifndef FF_MIDI_LOAD_FROM_MEM + sounds_unpopulate_midi_files(midi_file_names); + IsMidiInit = 0; +#endif +} + +/******************************************************************************* + + $Function: sounds_populate_midi_files + + $Description:Populates the MIDI file names into the array + + $Returns: The count of the files in the directory + + $Arguments: file_names:Pointer to the arrayto store file names + max_files_count:Max file counts to be stored in array +*******************************************************************************/ + +int sounds_populate_midi_files(char **file_names, int max_files_count,char* dir_name_p) +{ + T_FFS_FD fd = 0; + T_FFS_DIR dir = {0}; + char dest_name_p[100] = ""; + int i, files_count = 0; + char *fileExt; + + TRACE_FUNCTION("sounds_populate_midi_files"); + + if (ffs_opendir (dir_name_p, &dir) <= 0) + { + files_count = 0; + } + + //read the file names + //Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh + //file_count will be used to populate the array index + for (i = 0; ffs_readdir (&dir, dest_name_p, 100) > 0x0; i++) + { + (file_names[files_count]) = (char*)mfwAlloc(strlen(dest_name_p) + 1); + if(file_names[files_count] != NULL) + { + //Jul 20, 2005 REF: SPR 30772 xdeepadh + //Retrieve file extension.Store only the supported file formats in array + fileExt =sounds_midi_GetExtension(dest_name_p); + //Oct 25, 2005 MP3 Ringer xdeepadh + //List the MP3 files also.Mp3 files hsould not be listed or ULC +#ifdef FF_MP3_RINGER + if ( (strcmp(fileExt, "mp3") == 0)) + { + strcpy (file_names[files_count], dest_name_p); + files_count++; + } + else +#endif //FF_MP3_RINGER + + //Nov 21, 2005 ER: OMAPS00057430, AAC Ringer support nekkareb + //List the AAC files also. +#ifdef FF_AAC_RINGER + if ( (strcmp(fileExt, "aac") == 0)) + { + strcpy (file_names[files_count], dest_name_p); + files_count++; + } + else +#endif //FF_AAC_RINGER + + //If XMF is supported +#ifdef PAL_ENABLE_XMF + if ( (strcmp(fileExt, "xmf") == 0)) + { + strcpy (file_names[files_count], dest_name_p); + files_count++; + } + else +#endif //PAL_ENABLE_XMF + + //If IMELODY is supported +#ifdef PAL_ENABLE_IMELODY + if ( (strcmp(fileExt, "imy") == 0)) + { + strcpy (file_names[files_count], dest_name_p); + files_count++; + } + else +#endif //PAL_ENABLE_IMELODY + + //If SMAF is supported +#ifdef PAL_ENABLE_SMAF_MA3 + if ( (strcmp(fileExt, "mmf") == 0)) + { + strcpy (file_names[files_count], dest_name_p); + files_count++; + } + else +#endif ////PAL_ENABLE_SMAF_MA3 + + //If MIDI is supported +#ifdef PAL_ENABLE_MIDI_NORMALIZER + if ( (strcmp(fileExt, "mid") == 0)) + { + strcpy (file_names[files_count], dest_name_p); + files_count++; + } + else +#endif ////PAL_ENABLE_MIDI_NORMALIZER + //Sep 12, 2005 REF: SPR 33977 xdeepadh + //mxmf file format has been supported +#ifdef PAL_ENABLE_SMAF_MA3 + if ( (strcmp(fileExt, "mxmf") == 0)) + { + strcpy (file_names[files_count], dest_name_p); + files_count++; + } + else +#endif //PAL_ENABLE_SMAF_MA3 + ; + if(files_count >= max_files_count) + break; + } + else + { + //files_count = 0; + } + + } + TRACE_EVENT_P1("read files_count is %d",files_count); + return files_count; +} + +//Nov 04, 2005 REF:DRT OMAPS00053737 xdeepadh +#ifdef FF_MIDI_LOAD_FROM_LFS +/******************************************************************************* + + $Function: sounds_load_lfs_midi_files + + $Description: Loads the midi files from FFS to LFS. + This function should be used as a patch to load the lfs files. + This function should be used only in the absence of ETM. + $Returns: None + $Arguments: max_files_count:Max file counts to be stored in array + +*******************************************************************************/ +int sounds_load_lfs_midi_files( int max_files_count) +{ + char dir_name_p[] = RINGER_CONTENT_DIR; + T_FFS_DIR dir = {0}; + char dest_name_p[100] = ""; + char dest_full_path[100] = ""; + int i, files_count = 0; + char *fileExt; + T_RAM_FILE* ram_file = NULL; + + TRACE_FUNCTION("sounds_load_lfs_midi_files"); + + if (ffs_opendir (dir_name_p, &dir) <= 0) + { + TRACE_EVENT( "FFS open dir failure: OK"); + + } + + //read the file names + for (i = 0; ffs_readdir (&dir, dest_name_p, 100) > 0x0; i++) + { + TRACE_EVENT_P1( "dest name is %s",dest_name_p); + if(dest_name_p != NULL) + { + //Jul 20, 2005 REF: SPR 30772 xdeepadh + //Retrieve file extension.Store only the supported file formats in array + fileExt =sounds_midi_GetExtension(dest_name_p); + //If XMF is supported +#ifdef PAL_ENABLE_XMF + if ( (strcmp(fileExt, "xmf") == 0)) + { + strcpy(dest_full_path,RINGER_CONTENT_DIR); + strcat(dest_full_path,"/"); + strcat(dest_full_path,dest_name_p); + ram_file = ram_load_file(dest_full_path); + if (0 != ram_write_lfs(ram_file,dest_name_p)) + { + TRACE_EVENT( "LFS write failure: OK"); + } + + } + else +#endif //PAL_ENABLE_XMF + + //If IMELODY is supported +#ifdef PAL_ENABLE_IMELODY + if ( (strcmp(fileExt, "imy") == 0)) + { + + strcpy(dest_full_path,RINGER_CONTENT_DIR); + strcat(dest_full_path,"/"); + strcat(dest_full_path,dest_name_p); + ram_file = ram_load_file(dest_full_path); + if (0 != ram_write_lfs(ram_file,dest_name_p)) + { + TRACE_EVENT( "LFS write failure: OK"); + } + + } + else +#endif //PAL_ENABLE_IMELODY + + //If SMAF is supported +#ifdef PAL_ENABLE_SMAF_MA3 + if ( (strcmp(fileExt, "mmf") == 0)) + { + + strcpy(dest_full_path,RINGER_CONTENT_DIR); + strcat(dest_full_path,"/"); + strcat(dest_full_path,dest_name_p); + ram_file = ram_load_file(dest_full_path); + if (0 != ram_write_lfs(ram_file,dest_name_p)) + { + TRACE_EVENT( "LFS write failure: OK"); + } + files_count++; + } + else +#endif ////PAL_ENABLE_SMAF_MA3 + + //If MIDI is supported +#ifdef PAL_ENABLE_MIDI_NORMALIZER + if ( (strcmp(fileExt, "mid") == 0)) + { + strcpy(dest_full_path,RINGER_CONTENT_DIR); + strcat(dest_full_path,"/"); + strcat(dest_full_path,dest_name_p); + ram_file = ram_load_file(dest_full_path); + if (0 != ram_write_lfs(ram_file,dest_name_p)) + { + TRACE_EVENT( "LFS write failure: OK"); + } + files_count++; + } + else +#endif ////PAL_ENABLE_MIDI_NORMALIZER +//Sep 12, 2005 REF: SPR 33977 xdeepadh +//mxmf file format has been supported +#ifdef PAL_ENABLE_SMAF_MA3 + if ( (strcmp(fileExt, "mxmf") == 0)) + { + + strcpy(dest_full_path,RINGER_CONTENT_DIR); + strcat(dest_full_path,"/"); + strcat(dest_full_path,dest_name_p); + ram_file = ram_load_file(dest_full_path); + if (0 != ram_write_lfs(ram_file,dest_name_p)) + { + TRACE_EVENT( "LFS write failure: OK"); + } + files_count++; + } + else +#endif //PAL_ENABLE_SMAF_MA3 +; + if(files_count >= max_files_count) + break; + } + else + { + //files_count = 0; + } + + } + TRACE_EVENT_P1("read files_count is %d",files_count); + return files_count; +} +#endif //FF_MIDI_LOAD_FROM_LFS +/******************************************************************************* + + $Function: sounds_unpopulate_midi_files + + $Description:Frees the memory allocated for the array + $Returns: None + + $Arguments: file_names:Pointer to the arrayto store file names + +*******************************************************************************/ +void sounds_unpopulate_midi_files(char **file_names) +{ + T_FFS_FD fd = 0; + char dir_name_p[] = RINGER_CONTENT_DIR; + T_FFS_DIR dir = {0}; + char dest_name_p[100] = ""; + int i,files_count=0; + TRACE_FUNCTION("sounds_populate_midi_files"); + + if (ffs_opendir (dir_name_p, &dir) <= 0) + { + files_count = 0; + + } + + for (i = 0; ffs_readdir (&dir, dest_name_p, 100) > 0x0; i++) + { + mfwFree((U8 *)file_names[i],(U16)strlen(dest_name_p) + 1); + + } + +} + +/******************************************************************************* + + $Function: sounds_midi_return_file_number + + $Description: returns the file count + + $Returns: Count of the Midi files + + $Arguments: None + +*******************************************************************************/ +int sounds_midi_return_file_number(void) +{ + TRACE_FUNCTION("sounds_midi_return_file_number"); + + if(midi_files_count<=0) + return 0; + else + return midi_files_count; + +} +/******************************************************************************* + + $Function: sounds_midi_return_file_name + + $Description: Returns the file name + + $Returns: Name of the file + + $Arguments: index:The index of the file, whose name has to be retrieved + +*******************************************************************************/ + +char* sounds_midi_return_file_name(UBYTE index) +{ + + TRACE_FUNCTION("sounds_midi_return_file_name"); + +#ifdef FF_MIDI_LOAD_FROM_MEM + return (char *)mmi_midi_files[index].melody_name; +#else + TRACE_EVENT_P2("midi_file_names[%d] is %s",index,(char *)midi_file_names[index]); + return (char *) midi_file_names[index]; +#endif + + +} + +/******************************************************************************* + + $Function: sounds_midi_ringer_start_cb + + $Description: Callback function for ringer_start + + $Returns: None + + $Arguments: + +*******************************************************************************/ + + void sounds_midi_ringer_start_cb(void *parameter) +{ + TRACE_EVENT("sounds_midi_ringer_start_cb"); + + if (((T_AS_STOP_IND *)parameter)->header.msg_id == AS_STOP_IND ) + { + // Aug 05, 2005 xdeepadh + #ifdef FF_MMI_AUDIO_PROFILE + //configure the audio to voice path. + mfwAudPlay = FALSE; + mfw_unset_stereo_path(mfw_get_current_audioDevice()); + #endif + } + +} + +/******************************************************************************* + + $Function: sounds_midi_ringer_stop_cb + + $Description: Callback function for ringer_stop + + $Returns: None + + $Arguments: + +*******************************************************************************/ + + void sounds_midi_ringer_stop_cb(void *parameter) +{ + + TRACE_EVENT("sounds_midi_ringer_stop_cb"); + // Aug 05, 2005 xdeepadh + #ifdef FF_MMI_AUDIO_PROFILE + //configure the audio to voice path + mfwAudPlay = FALSE; + mfw_unset_stereo_path(mfw_get_current_audioDevice()); + #endif +} + +/******************************************************************************* + + $Function: sounds_midi_player_start_cb + + $Description: Callback function for player_start + + $Returns: None + + $Arguments: + +*******************************************************************************/ + + void sounds_midi_player_start_cb(void *parameter) +{ + +#ifdef FF_MMI_TEST_MIDI + T_AS_PLAYER_TYPE player_type; +#if FF_MIDI_LOAD_FROM_MEM + T_MELODY melody_data; +#else + char* midi_file; +#endif + TRACE_EVENT("sounds_midi_player_start_cb"); + if (((T_AS_STOP_IND *)parameter)->header.msg_id == AS_STOP_IND ) + { + if(mfw_player_exit_flag == PLAYER_EXIT_FLAG_FALSE) + { + + //if we didn't reach the last file + if(mfw_player_currently_playing_idx<(midi_files_count-1)) + { + mfw_player_currently_playing_idx++; + TRACE_EVENT_P1("mfw_player_currently_playing_idx is %d",mfw_player_currently_playing_idx); + mfw_player_save_selected_file_idx(mfw_player_currently_playing_idx); +#ifdef FF_MIDI_RINGER +#ifdef FF_MIDI_LOAD_FROM_MEM + melody_data=sounds_midi_return_memory_location(mfw_player_currently_playing_idx); + player_type=mfw_ringer_deduce_player_type(melody_data.melody_name); + mfw_player_start_memory(player_type,(UINT32*)melody_data.melody,melody_data.melody_size,(UBYTE)AS_VOLUME_HIGH,FALSE,sounds_midi_player_start_cb); +#else + midi_file=sounds_midi_return_file_name(mfw_player_currently_playing_idx); + player_type=mfw_ringer_deduce_player_type(midi_file); + mfw_player_start_file(player_type,midi_file,(UBYTE)AS_VOLUME_HIGH,FALSE,sounds_midi_player_start_cb); +#endif +#endif +} + else + { + //flag set to 1 means we only play the currently selected file + mfw_player_exit_flag = PLAYER_EXIT_FLAG_TRUE; + // Aug 05, 2005 xdeepadh +#ifdef FF_MMI_AUDIO_PROFILE + //configure the audio to voice path + mfwAudPlay = FALSE; + mfw_unset_stereo_path(mfw_get_current_audioDevice()); +#endif + } + } + +} +#endif//#ifdef FF_MMI_TEST_MIDI +} + +/******************************************************************************* + + $Function: sounds_midi_player_stop_cb + + $Description: Callback function for player_stop + + $Returns: None + + $Arguments: + +*******************************************************************************/ + + void sounds_midi_player_stop_cb(void *parameter) +{ + TRACE_EVENT("sounds_midi_player_stop_cb"); + // Aug 05, 2005 xdeepadh + #ifdef FF_MMI_AUDIO_PROFILE + //configure the audio to voice path + mfwAudPlay = FALSE; + mfw_unset_stereo_path(mfw_get_current_audioDevice()); + #endif +} + + +/******************************************************************************* + + $Function: sounds_show_info + + $Description:Displays a dialog + + $Returns: + + $Arguments: +*******************************************************************************/ +static MfwHnd sounds_show_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback) +{ + T_DISPLAY_DATA display_info; + TRACE_FUNCTION ("sounds_show_info()"); + + /* + ** Create a timed dialog to display the Message "Failed" + */ + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, str1, str2, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, callback, MT_INFO_SCRN_TIMEOUT, KEY_LEFT | KEY_CLEAR | KEY_HUP); + return info_dialog(parent, &display_info); +} + + +/******************************************************************************* + + $Function: get_ringer_mode + + $Description: Returns the current ringer mode based on soundsreason (CALL/SMS/ALARM/Volume setting) + $Returns: the current ringer_mode + + $Arguments: None + +*******************************************************************************/ + +int get_ringer_mode(void) +{ + T_AS_RINGER_MODE current_mode; + + TRACE_FUNCTION("get_ringer_mode"); + + switch(getSoundsReason()) + { + case MelodySelect: + current_mode=AS_RINGER_MODE_IC; + break; + + case SettingSMSTone: + current_mode=AS_RINGER_MODE_SMS; + break; + + case SettingAlarm: + current_mode=AS_RINGER_MODE_ALARM; + break; + + case SettingVolume: + current_mode=AS_RINGER_MODE_IC; + break; + + } + return current_mode; +} + +/******************************************************************************* + + $Function: playCurrentMelody + + $Description: play midi file which is temporarily selected, this event handler + is invoked when the hPlayerStartTimer event completes + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: e, event, tc timer context + +*******************************************************************************/ + +static int playCurrentMelody( MfwEvt e, MfwTim *tc ) +{ + + TRACE_EVENT_P1("playCurrentMelody. The selected tone is %d",selected_tone); + soundsPlayMidiPlayer(selected_tone); + + // stop running timer + if (hPlayerStartTimer != NULL ) + { + timStop(hPlayerStartTimer); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: soundsPlayMidiPlayer + + $Description: Play the tune selected by melody_id, stopping any currently + playing tunes if necessary. + $Returns: None + + $Arguments: melody_id, selects the melody to be played + +*******************************************************************************/ +static void soundsPlayMidiPlayer( int melody_id ) +{ + +#ifdef FF_MIDI_RINGER +T_AS_RINGER_INFO * ringer_info; + T_AS_RINGER_INFO temp_ringer_info; + T_AS_PLAYER_TYPE player_type; +#ifdef FF_MIDI_LOAD_FROM_MEM + T_MELODY melody_data; +#else + char* midi_file; + +#endif +#endif + +TRACE_EVENT_P1("soundsPlayMidiPlayer.The melody_id is %d",melody_id); + CurrentTune = melody_id; + ringer_info=mfw_ringer_get_info(get_ringer_mode(),&temp_ringer_info); + TRACE_EVENT_P1("ringer_info details volume are %d ",ringer_info->volume); +#ifdef FF_MIDI_LOAD_FROM_MEM + melody_data=sounds_midi_return_memory_location(CurrentTune); + player_type=mfw_ringer_deduce_player_type(melody_data.melody_name); + mfw_player_start_memory(player_type,(UINT32*)melody_data.melody,melody_data.melody_size,ringer_info->volume,FALSE,sounds_midi_player_start_cb); +#else + midi_file=sounds_midi_return_file_name(CurrentTune); + TRACE_EVENT_P1("midi_file is %s",midi_file); + player_type=mfw_ringer_deduce_player_type(midi_file); + mfw_player_start_file(player_type,midi_file,ringer_info->volume,FALSE,sounds_midi_player_start_cb); +#endif + + + } + +/******************************************************************************* + + $Function: startPlayerTimer + + $Description: Start the timer for Scrolling of Midi files + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +void startPlayerTimer() + +{ + // start timer for 5 milli second and on timeout play the file + timStart( hPlayerStartTimer ); +} + +/******************************************************************************* + + $Function: stopPlayerTimer + + $Description: Stop the timer for Scrolling of Midi files.Stop the melody, if anything is playing. + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void stopPlayerTimer( void ) +{ + TRACE_FUNCTION( "stopPlayerTimer" ); + + /* If a timer event is running we want to stop that as well. + since we want to turn the tune off and have + it start again when the timer expires*/ + + if ( hPlayerStartTimer != NULL ) + timStop( hPlayerStartTimer ); + // Stop the tone + + //mfw_player_stop(sounds_midi_player_stop_cb); + + +} + + +/******************************************************************************* + + $Function: playCurrentVolumeTone + + $Description: play midi file with the volume which is temporarily selected, this event handler + is invoked when the hPlayerStartTimer event completes + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: e, event, tc timer context + +*******************************************************************************/ + +static int playCurrentVolumeTone( MfwEvt e, MfwTim *tc ) +{ + + TRACE_EVENT("playCurrentVolumeTone"); + soundsPlayVolumeMelody(); + // stop running timer + if (hPlayerStartTimer != NULL ) + { + timStop(hPlayerStartTimer); + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: startVolumeTimer + + $Description: Start the timer for modifying the volume of Midi files + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +void startVolumeTimer() + +{ + TRACE_EVENT("startVolumeTimer"); + // start timer for 5 milli second and on timeout play the file + timStart( hPlayerStartTimer ); +} + +/******************************************************************************* + + $Function: stopVolumeTimer + + $Description: Stop the timer for chnaging volume of Midi files.Stop the melody, if anything is playing. + $Returns: None + + $Arguments: None + +*******************************************************************************/ + + void stopVolumeTimer(void) +{ + TRACE_EVENT("stopVolumeTimer"); + if ( hPlayerStartTimer != NULL ) + timStop( hPlayerStartTimer ); + // Are we playing a tune + //mfw_player_stop(sounds_midi_player_stop_cb); +} + +/******************************************************************************* + + $Function: soundsPlayVolumeMelody + + $Description: Play the ringer tune with the selected volume, stopping any currently + playing tunes if necessary. + $Returns: None + + $Arguments: melody_id, selects the melody to be played + +*******************************************************************************/ + + static void soundsPlayVolumeMelody() +{ + +T_AS_RINGER_INFO * ringer_info; + T_AS_RINGER_INFO temp_ringer_info; + T_AS_PLAYER_TYPE player_type; + TRACE_EVENT("soundsPlayVolumeMelody"); + TRACE_EVENT_P1("the current volume now is %d",current.volumeSetting); +#ifdef FF_MIDI_RINGER + //If going to the volume screen from Idle screen,change the incoming call volume. + //mfw_player_stop(sounds_midi_player_stop_cb); + ringer_info=mfw_ringer_get_info(get_ringer_mode(),&temp_ringer_info); +#ifdef FF_MIDI_LOAD_FROM_MEM + mfw_player_start_memory(ringer_info->player_type,ringer_info->data.memory.address,ringer_info->data.memory.size,current.volumeSetting,FALSE,sounds_midi_player_start_cb); +#else + mfw_player_start_file(ringer_info->player_type,ringer_info->data.filename,(T_AS_VOLUME)current.volumeSetting,FALSE,sounds_midi_player_start_cb); +#endif +#endif + +} + +/******************************************************************************* + + $Function: sounds_midi_return_memory_location + + $Description: Returns the Melody structure + + $Returns: Structure containing the memory location, size and filename + + $Arguments: index :index whose memory location has to be retrieved + +*******************************************************************************/ +T_MELODY sounds_midi_return_memory_location(UBYTE index) +{ +#ifdef FF_MIDI_LOAD_FROM_MEM + TRACE_FUNCTION("sounds_midi_return_memory_location"); + return mmi_midi_files[index]; +#endif +} + +//Jul 20, 2005 REF: SPR 30772 xdeepadh +/******************************************************************************* + + $Function: sounds_midi_GetExtension + + $Description: public function to retrieve the extension of a file + + $Returns:Extention of the filename + + $Arguments: scr- Filename + +*******************************************************************************/ + char *sounds_midi_GetExtension(char *src) +{ + int i; + TRACE_FUNCTION("sounds_midi_GetExtension"); + for(i = 0; i < strlen(src); i++){ + if(src[i] == '.'){ + return (src+i+1); + } + } + return (src+i); +} + +#endif + + + +/******************************************************************************* + + End Of File + +*******************************************************************************/