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 + -
显示快捷键?