📄 mmisounds.c
字号:
}
else
{
//store setting into PCM
volumeSetting2Pcm=FALSE;
}
}
/*******************************************************************************
$Function: soundsVolHigh
$Description: set voulme level to High
$Returns: none
$Arguments: none
*******************************************************************************/
void soundsVolHigh(void)
{
FFS_flashData.settings_status &= ~SettingsSilentMode;
flash_write();
stopPlayingMelody();
if(volumeSetting2Pcm != TRUE)
{
current.volumeSetting =175;
audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting);
audio_PlaySoundID(AUDIO_BUZZER, current.ringer, 0, AUDIO_PLAY_INFINITE);
}
else
{
//store setting into PCM
volumeSetting2Pcm=FALSE;
}
}
/*******************************************************************************
$Function: soundsVolInc
$Description: set voulme level to increasing
$Returns: none
$Arguments: none
*******************************************************************************/
void soundsVolInc(void)
{
FFS_flashData.settings_status &= ~SettingsSilentMode;
flash_write();
stopPlayingMelody();
if(volumeSetting2Pcm != TRUE)
{
current.volumeSetting = 5;
audio_SetAmplf (AUDIO_BUZZER, current.volumeSetting);
audio_PlaySoundID(AUDIO_BUZZER, current.ringer, 0, AUDIO_PLAY_INFINITE);
}
else
{
//store setting into PCM
volumeSetting2Pcm=FALSE;
}
}
/*******************************************************************************
$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: 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)
{
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 )
audio_StopSoundbyID( AUDIO_BUZZER, LastTune );
/* 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
*******************************************************************************/
static void startPlayingMelody(UBYTE melody_id)
{
if ( hRingerStartTimer != NULL )
timStop( hRingerStartTimer );
audio_PlaySoundID(AUDIO_BUZZER, melody_id, (BYTE)current.volumeSetting, AUDIO_PLAY_INFINITE);
}
/*******************************************************************************
$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
*******************************************************************************/
static void soundsPlayRinger( int melody_id )
{
CurrentTune = melody_id;
if (LastTune)
audio_StopSoundbyID (AUDIO_BUZZER,LastTune );
vsi_t_sleep(0, 5);
if (current.volumeSetting == increasing)
{
audio_PlaySoundID ( AUDIO_BUZZER,CurrentTune, 0 , AUDIO_PLAY_CRESCENDO );
}
else
{
audio_PlaySoundID ( AUDIO_BUZZER,CurrentTune, 0, AUDIO_PLAY_INFINITE );
}
LastTune = CurrentTune;
}
/*******************************************************************************
$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;
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;
}
numberOfMelodies = resource_GetListCount(RES_MELODY);
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;
data->menu_list_data->List[i].str = (char *)MelodyTable[i];
}
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;
data->menu_list_data->autoDestroy = FALSE;
listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)MelodyList_cb,0);
case E_START_MELODY:
startPlayingMelody(mnu_data->MenuData.ListPosition);
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;
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;
}
else if(ListData->Reason EQ LISTS_REASON_SELECT)
{
switch(soundReason)
{
case MelodySelect:
stopPlayingMelody();
current.ringer = ListData->ListPosition;
break;
case SettingSMSTone:
stopPlayingMelody();
current.SMSTone = ListData->ListPosition;
break;
case SettingAlarm:
// need to check alarm status MZ.
current.AlarmOn = ListData->ListPosition;
default:
break;
}
// Store selected melody in PCM storage.
}
stopPlayingMelody();
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
*/
numberOfMelodies = resource_GetListCount(RES_MELODY);
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));
}
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());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
switch (e)
{
case E_MNU_ESCAPE:
break;
default:
return 0;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -