mmisounds.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 2,146 行 · 第 1/5 页
C
2,146 行
$Arguments: none
*******************************************************************************/
USHORT soundReasonRinger( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
soundReason = MelodySelect;
return 0;
}
/*******************************************************************************
$Function: soundReasonSmsTone
$Description: Setup the soundReason to be SMS tones settings.
$Returns: none
$Arguments: none
*******************************************************************************/
USHORT soundReasonSmsTone( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
//soundReason = SettingSMSTone; xsf remarked it 2002.09.28
soundReason = SoundsNone;
driverFlag&=0xFFFFFFFB; //xsf add for KCD_LEFT 2003.01.14
return 0;
}
/*******************************************************************************
$Function: soundReasonAlarm
$Description: Setup the soundReason to be Alarm settings.
$Returns: none
$Arguments: none
*******************************************************************************/
USHORT soundReasonAlarm( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
if( (((int)mi->str==TxtRingPrompt) ||((int)mi->str==TxtMelody)) && ( m->lCursor[m->level] == 1) ) //xsf add for KCD_LEFT 2003.01.14
driverFlag|=0x04;
else
if( ((int)mi->str==TxtMelody) && ( m->lCursor[m->level] == 2) )
{
soundReason = SettingAlarm;
driverFlag&=0xFFFFFFFB; //xsf add for KCD_LEFT 2003.01.14
}
else
driverFlag&=0xFFFFFFFB;
if( ((int)mi->str==TxtRingPrompt) && (FlashEnvironmentData.EnviroProfile[Gu8_Envio_num].alarmprompt==RING) )
return FLAGFUNC_TRUE_ICON;
return 0;
}
USHORT soundReasonPhbk( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
soundReason = SettingPHBKGrouping;
return 0;
}
/*******************************************************************************
$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; //xsf changed 2003.01.29
return FlashEnvironmentData.EnviroProfile[FlashEnvironmentData.CurrentEnv].alarmtype;
}
/*******************************************************************************
$Function: getCurrentRingerSettings
$Description: Access function for the current ringer settings data.
$Returns: Ringer Id.
$Arguments: None
*******************************************************************************/
UBYTE getCurrentRingerSettings(void)
{
//return current.ringer; xsf 2002.07.09
return FlashEnvironmentData.EnviroProfile[FlashEnvironmentData.CurrentEnv].ringtype;
}
/*******************************************************************************
$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 ||
soundReason == SettingPHBKGrouping )
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_EVENT (">>>> 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;
}
USHORT MelodymenuItemCheck(struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi)
{
//TRACE_EVENT("MelodymenuItemCheck");
char temp[100];
if( soundReason == MelodySelect ) //xsf add for MelodySelect and SettingAlarm 2002.09.24
{
// if((int)mi->str==MelodyTable[FlashEnvironmentData.EnviroProfile[Gu8_Envio_num].ringtype])
if( (int)mi->Dynamicindex==FlashEnvironmentData.EnviroProfile[Gu8_Envio_num].ringtype )
//chenjun changed for user ring 2003-01-10
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
else if( soundReason==SettingPHBKGrouping )
{
// if ((int)mi->str==MelodyTable[FFS_PBOtherData.GroupingItem[RingSelect].GroupingRing])
if( (int)mi->Dynamicindex==FFS_PBOtherData.GroupingItem[RingSelect].GroupingRing )
//chenjun changed for user ring 2003-01-10
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
else
{
// if((int)mi->str==MelodyTable[FlashEnvironmentData.EnviroProfile[Gu8_Envio_num].alarmtype])
if( (int)mi->Dynamicindex==FlashEnvironmentData.EnviroProfile[Gu8_Envio_num].alarmtype )
//chenjun changed for user ring 2003-01-10
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
}
/*******************************************************************************
$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;
UBYTE numberOfUserMelodies;// user ring
//UBYTE j,k;
ListWinInfo * mnu_data = (ListWinInfo *)parameter;
ReadUserRingInfo(&tUserRing);
numberOfUserMelodies=tUserRing.number;
//MmiTrace("chenjun ,number of user melody is:");
//MmiTraceInt(numberOfUserMelodies);
//for(i=0;i<5;i++)
//{
// MmiTrace(tUserRing.filename[i]);
// MmiTraceInt(strlen(tUserRing.filename[i]));
// if(strlen(tUserRing.filename[i])==0)
// MmiTrace("kong");
//}
MMI_TRACE_EVENT( ("glowing: melody_exec_cb"));
switch( event )
{
case E_INIT:
MMI_TRACE_EVENT(("melody_exec_cb -- Event:E_INIT"));
gPlayKeytoneFlag = 0;
/* initialization of administrative data */
data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));
if( data->menu_list_data == 0 )
{
MMI_TRACE_EVENT(("Failed memory alloc 1 "));
return;
}
numberOfMelodies = resource_GetListCount(RES_MELODY);
//sprintf(temp,"numberofmelodies:%d",numberOfMelodies);
//TRACE_EVENT(temp);
//gCjMeloList2Free=0;//set it to 0, ++ when alloced one ,for user ring
//sprintf(temp,"numberofmelodies:%d,user:%d",numberOfMelodies,numberOfUserMelodies);
//MmiTrace(temp);
//用于分组铃声的设置 -- 多一个菜单项"无铃声"
if( soundReason==SettingPHBKGrouping )
{
data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( (numberOfMelodies+numberOfUserMelodies) * sizeof(T_MFW_MNU_ITEM) );//chenjun 2003-01-09 user ring
if( data->menu_list_data->List == 0 )
{
MMI_TRACE_EVENT(("Failed memory alloc 2"));
if( data->menu_list_data NEQ 0 )
FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
return;
}
for( i = 0; i < numberOfMelodies-1 ; i++ )
{
/* 2004/06 sunsj modify for picture manage */
data->menu_list_data->List[i].icon = GET_ICONATTR(ICON_SITUATION, 0);//&situationIcon;
data->menu_list_data->List[i].exta = 0;
data->menu_list_data->List[i].edit = 0;
data->menu_list_data->List[i].menu = 0;
data->menu_list_data->List[i].func = NULL;
data->menu_list_data->List[i].str=(char*)MmiRsrcGetText(MelodyTable[i]);
data->menu_list_data->List[i].Dynamicindex=i;//chenjun add for MelodymenuItemCheck() use. user ring ,2003-01-10
data->menu_list_data->List[i].flagFunc = MelodymenuItemCheck;
}
for( i=numberOfMelodies-1;i<numberOfMelodies+numberOfUserMelodies-1;i++ )
{
/* 2004/06 sunsj modify for picture manage */
data->menu_list_data->List[i].icon = GET_ICONATTR(ICON_SITUATION, 0);//&situationIcon;
data->menu_list_data->List[i].exta = 0;
data->menu_list_data->List[i].edit = 0;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?