📄 mmicall.c
字号:
$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 + -