⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmicall.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:

 $Arguments:  event and parameter

*******************************************************************************/



int callCmEvent(MfwEvt e, void *para)
{

    UBYTE currentRinger;
    int i;
    SHORT       *cid;
    T_MFW_CM_DISCONNECT *dc;
    T_MFW_CM_COMMAND  *comm;
    SHORT       callId;
    T_MFW_CM_REDIAL     *pRedial;
    T_MFW_CM_CPI        *cmCpi;
    //T_FindName  searchPhdata;
    //char * num;/*2004/04/05,talcon delete*/
    int old_color;/*2003/12/10, wangyan modify*/


    /*2004/04/05,talcon delete*/
    //sprintf(stringTrace,"%s %d","callCmEvent",e);
    //MMI_TRACE_EVENT((stringTrace));
    switch( e )
    {

    /*
     * Handle call notifications
     */
    case E_CM_NOTIFY:
        MMI_TRACE_EVENT(("wangyan: callCmEvent -- E_CM_NOTIFY"));
        SEND_EVENT (call_data.win, E_CM_NOTIFY, 0, para);
        break;

    case E_CM_COLP:

        MMI_TRACE_EVENT(("wangyan: callCmEvent -- E_CM_COLP"));
        SEND_EVENT (call_data.win, E_CM_COLP,0, para);
        break;

    case E_CM_CW:
        MMI_TRACE_EVENT(("wangyan: callCmEvent -- E_CM_CW"));
        TraceInt(call_data.calls.numCalls);//zy 09/05 begin
        StopVoiceMemo();

        if( call_data.win_scratch )
        {
            call_scratchpad_destroy(call_data.win_scratch);
            call_data.win_scratch =0;
        }
        if( call_data.win_menu )
        {
            call_menu_destroy(call_data.win_menu);
            call_data.win_menu = 0;
        }
        /*begin of zy change 2003-04-01
          if there are incoming call we must destroy all these wins;
          avoid it will build the same wins several times
        */
        if( call_data.win_adjustvolume )
        {
            SEND_EVENT(call_data.win_adjustvolume,CALLVOLDESTROY,0,0);
            call_data.win_adjustvolume = 0;
        }
        if( call_data.win_memo )
        {
            Memo_destroy(call_data.win_memo);
            call_data.win_memo = 0;
        }
        if( call_data.win_phb )
        {
            bookPhonebookDestroy(call_data.win_phb);
            call_data.win_phb=0;
        }
        if( call_data.win_voicerecord )
        {
            voice_memo_destroy (call_data.win_voicerecord);
            call_data.win_voicerecord=0;
        }
        /*end of zy change 2003-04-01*/
        /*begin of zy change 2003-02-28 
          only destroy calling_win
        */

        if( call_data.win_calling )
        {
            cm_disconnect(call_data.outCall);
            SEND_EVENT(call_data.win_calling,DIALOG_DESTROY,0,0);
            call_data.win_calling = 0;
        }

        /*end of zy change 2003-02-28*/
        if( para )
        {
#ifdef _MMS_ENABLE_
		extern BOOL isIncomingCall ;
		isIncomingCall = TRUE;//04-6-29 added by xie for jugding whether there is call incoming.			
#endif
		
            incomingCall((T_MFW_CM_CW_INFO*)para);
        }
        //  mmeSetVolume (1, FFS_flashData.output_volume);//zy 09/18 its needn't

        break;
    case E_CM_RING_OFF:
        MMI_TRACE_EVENT(("wangyan: callCmEvent -- E_CM_RING_OFF"));
        //Stopplayingdevice(); //xsf changed 12.31
        //StopPlayByReasonId(INCALLPLAY);zy 2003-02-28 needn't
        break;
    case E_CM_DISCONNECT:
        MMI_TRACE_EVENT(("wangyan: callCmEvent -- E_CM_DISCONNECT"));
        if( strlen((char*)call_data.colp_number) > 0 )
            memset(call_data.colp_number,'\0',sizeof(call_data.colp_number));

#ifdef MMI_WAP_ENABLED
        /* SPR#1656 - SH - Inform WAP of a disconnection */
        AUI_wap_call_disconnect();
#endif

        if( call_data.ignore_disconnect )
        {
            MMI_TRACE_EVENT(("call_data.ignore_disconnect"));
            return 1;
        }
        dc = (T_MFW_CM_DISCONNECT *)para;

        if( LocalRing )
        {
            LocalRing = FALSE;
        }
        TRACE_EVENT("Disconnect Event");
        cm_get_aoc_value(CM_AOC_CCM,&call_data.aocInfo);
        if( !dc->call_number )
        {       // Delete multiparty
            i = 0;
            while( i<call_data.calls.numCalls )
            {
                /*2004/04/05,talcon delete*/
                //sprintf(stringTrace,"callId %d; numCalls  %d",callId,call_data.calls.numCalls);
                //TRACE_EVENT(stringTrace);
                //MMI_TRACE_EVENT(("wangyan: E_CM_DISCONNECT: %s",stringTrace));
                if( call_data.calls.status[i].call_number!=singleCall )
                {

                    if( !removeCall(call_data.calls.status[i].call_number) )
                    {
                        i++;
                        /* 2004/04/16 sunsj modify */
                        LedLightnessAdjust( 200 );
                        timStart(gtVibator);
                    }

                }
                else
                    i++;
            }
        }
        if( callIndex(dc->call_number)<MAX_CALLS )
        {
            MMI_TRACE_EVENT(("wangyan: E_CM_DISCONNECT: callIndex(dc->call_number):%d",dc->call_number));
            removeCall(dc->call_number);  // Delete active call
            /* 2004/04/16 sunsj modify */
            LedLightnessAdjust( 200 );
            timStart(gtVibator);
        }
        else
        {                // Delete not executed call

            if( (dc->call_number==call_data.incCall) )
            {

                if( call_data.win_incoming )
                {
                    extern void set_lcdOffControl(int status);
                    MMI_TRACE_EVENT(("wangyan: E_CM_DISCONNECT: before win_incoming DIALOG_DESTROY"));
                    if( idwithheld == TRUE )
                        idCounter = idCounter + 1;

                    SEND_EVENT(call_data.win_incoming,DIALOG_DESTROY,0,0);
                    call_data.win_incoming = 0;
                    MMI_TRACE_EVENT(("wangyan: E_CM_DISCONNECT: after win_incoming DIALOG_DESTROY"));

                    /* 2004/04/12 sunsj add for close */
                    timStart(gtVibator);
                    /*2004/05/15,talcon add*/
                    set_lcdOffControl(2);

                    stopIncallLed();/* zy add 01-23-2003 for led incomingcall stop*/

                }
                /*2003/12/16, wangyan add*//*
                if (call_data.win_active)
                {
                    SEND_EVENT(call_data.win_active,DIALOG_DESTROY,0,0);
                    call_data.win_active = 0;
                }*/
                /*2003/12/16, wangyan add*/
                //glowing,2005-05-25, add _M188_ for compatible with M288B( rita project)	    
#ifdef _M188_
                if( dc->cause!=CAUSE_NOT_PRES )
#else
                if( GET_CAUSE_VALUE(dc->cause) != NOT_PRESENT_8BIT )
#endif
                {
                    MMI_TRACE_EVENT(("wangyan CAUSE_NOT_PRES"));
                    //Calling side has terminated the call, turn of ringer MZ.
                    currentRinger = getCurrentRingerSettings();
                    //Stopplayingdevice(); //xsf add 2002.08.12
                    // audio_StopSoundbyID( AUDIO_BUZZER, currentRinger );
                    //Check if incoming call has been rejected by user, call is not regarded as a missed call. MZ
                    if( dc->cause != CAUSE_USER_BUSY )
                    {
                        if( call_data.globalCWInfo.type EQ VOICE_CALL )
                        {
                            /*(2004/04/05,talcon modify*//*
                            wstrcpy(num, (char *)call_data.calls.status[(int)dc->call_number].number);
                            MMI_TRACE_EVENT(("<<<talcon,callCmEvent--num:%d,%p",wstrlen(num),num));
                            addMissedCall(num);*/
                            addMissedCall((char *)call_data.calls.status[(int)dc->call_number].number);

                            // saveNumCallRecord('M',latestInNum ); //hu binhao 2002-11-26
                            setOuterState(OUTERIDLESTATE_CALL,0, 0);//2004-03-23 Summy modify
                            setOuterState(OUTERIDLESTATE_MISSCALL,1, 0);//2004-03-23 Summy modify
                            saveNumCallRecord('M',latestInNum ,IsIngroup,SimReadyFlag,&searchPhdata); //hu binhao 2002-12-29
                            /*begin of zy 2003-03-11
                              when "A" connected to "B" then "C" call "A";
                              "A" accept the same time "C" reject; 
                              so "B" Always heard "in hold" but "A"display "actived"
                              now we try to retrive it
                            *///TRACE_EVENT("zy:disconect currTryAccept=");
                            TraceInt(currTryAccept);
                            if( currTryAccept==1 )
                            {
                                call_data.calls.status[callIndex(call_data.calls.selected)].stat =CALL_HELD;
                                /* cm_command(call_data.calls.selected, CM_RETRIEVE, '\0');
                                 call_data.current_command = CM_RETRIEVE;*/
                                currTryAccept=0;
                                winShow(call_data.win);
                            }
                            /*end of zy 2003-03-11*/
                        }
                    }
                }
                call_data.incCall = 0;
                if( !call_data.calls.numCalls )
                    if( call_data.win )
                    {
                        MMI_TRACE_EVENT(("wangyan, E_CM_DISCONNECT call_destroy"));
                        //	call_data.win=0;
                        setOuterState(OUTERIDLESTATE_INCOMING,0,0); //2004-03-23 Sunny add
                        call_destroy(call_data.win);//wangyan 2005
                        return 1;
                    }
            }
            if( (dc->call_number==call_data.outCall) )
            {
                /*2004/04/05,talcon delete*/
                //sprintf(stringTrace,"out_call_number %d;",call_data.outCall);	
                //MMI_TRACE_EVENT(("wangyan:E_CM_DISCONNECT %s",stringTrace));

                if( call_data.win_calling )
                {
                    TRACE_EVENT("Dialog Destroy No 2");
                    SEND_EVENT(call_data.win_calling,DIALOG_DESTROY,0,0);
                    call_data.win_calling = 0;
                    callFailureCause(dc->cause);//zy move to here01/21/2003 avoid 
                }
                /*2003/12/16, wangyan add*//*
                if (call_data.win_active)
                {
                    SEND_EVENT(call_data.win_active,DIALOG_DESTROY,0,0);
                    call_data.win_active = 0;
                }*/
                /*2003/12/16, wangyan add*/
                call_data.outCall = 0;
                //callFailureCause(dc->cause);//before zy move 01/21/2003 when one call is actived an incomingcall failure will show this information
                /*2003/12/16, wangyan add*/
                /*if (!call_data.calls.numCalls)
                    if (call_data.win)
                    {
                        call_destroy(call_data.win);
                        return 1;
                    }/*
                /*2003/12/16, wangyan add*/
            }
        }
        if( call_data.callsToEnd )
        {
            call_data.callsToEnd=call_data.callsToEnd-1;
            cm_disconnect(call_data.calls.status[0].call_number);
        }
        //GW-SPR#1035 - Added SAT changed
        /*NM, 110702
         in case that the SAT initiate the setup call (open a new editor);
         so we want to make sure that the editor disappear after disconnect
        */
        sat_release_the_editor ();
        /*NM, 110702 END*/

        break;
    case E_CM_CONNECT_ACK:
        MMI_TRACE_EVENT(("wangyan: callCmEvent -- E_CM_CONNECT_ACK"));
        cid = (SHORT*)para;
        /*    TRACE_EVENT_P5("CId %d . outCall %d . win_calling %d . incCall %d win_incoming %d",
                           *cid,call_data.outCall,call_data.win_calling,call_data.incCall,
                           call_data.win_incoming);*/

        if( call_data.mintalert==0&&FFS_flashData.call_minute_flag )
        {
            call_data.mintalert=1;
        }

        /* 2004/04/16 sunsj modify */
        LedLightnessAdjust( 200 );
        timStart(gtVibator);

        if( FlashEnvironmentData.EnviroProfile[FlashEnvironmentData.CurrentEnv].connecttone )
        { //xsf add 10/18 
            //StartSpecialTone(1); //xsf add for connect_ack tone //wms changed the function 02/12/29
            StartPlayByReason(CONNECTTONE,0);
        }
        //StartPlayByReason(INCALL, 0);//xsf 2003-04-07 make it in incall if add may makeconnecttone  notplay
        if( LocalRing )
        {
            LocalRing = FALSE;
        }

        if( (*cid==call_data.incCall)&&(call_data.win_incoming) )
        {
            SEND_EVENT(call_data.win_incoming,DIALOG_DESTROY,0,0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -