📄 mmicall.c
字号:
/*******************************************************************************
$Function: showDefault
$Description: common display content
$Returns:
$Arguments:
*******************************************************************************/
static void showDefault (void)
{
dspl_ClearAll();
GlobalIconStatus = GlobalSignalIconFlag | GlobalBatteryIconFlag
| GlobalSMSIconFlag| GlobalVoiceMailIconFlag
| GlobalCallForwardingIconFlag| GlobalKeyplockIconFlag
| GlobalRingerIconFlag | GlobalRingVibrIconFlag
| GlobalVibratorIconFlag | GlobalAlarmIconFlag
| GlobalSilentRingerIconFlag|GlobalCipheringActivIconFlag
| GlobalCipheringDeactivIconFlag
/* SH 18/01/02. Flag for GPRS On icon.
Note: Homezone icon not displayed during call. */
#ifdef MMI_GPRS_ENABLED
| GlobalGPRSOnIconFlag
#endif
/* SPR#1352 - SH - Flag for TTY icon */
#ifdef MMI_TTY_ENABLED
| GlobalTTYIconFlag
#endif
/* SH end */
;
iconsShow();
}
/*******************************************************************************
$Function: showSelectPrivateCall
$Description: multiparty private call handling
$Returns:
$Arguments:
*******************************************************************************/
// define position we will display number/name of caller
#define CALLID_NUM_XPOS (35)
// define number of chars that can be displayed (at this position)
#define STR_DISPLAY_NCHAR ((SCREEN_SIZE_X-CALLID_NUM_XPOS)/6)
void showSelectPrivateCall(void){
int i = 0;
char stat;
char line[MAX_LINE];
char tag[MAX_CHAR];
int topLine;
TRACE_FUNCTION("showSelectPrivateCall");
showDefault();
memset(tag,'\0',sizeof(tag));
if (call_data.calls.numCalls<MAX_CALLS)
topLine = Mmi_layout_line(2);
else
topLine = Mmi_layout_line(1);
for (i=0;i<call_data.calls.numCalls;i++)
{
memset(line,'\0',sizeof(line));
memset(tag,'\0',sizeof(tag));
sprintf(line,"%d",i+1);
if (call_data.calls.status[i].stat == CALL_ACTIVE)
stat = 'A';
else
stat = 'H';
sprintf(line,"%d.%c.",i+1,stat);
if (i==callIndex(call_data.calls.selected))
dspl_TextOut(CALLINFO_X_AH, (USHORT)(topLine+Mmi_layout_line_height()*i), DSPL_TXTATTR_INVERS, line);
else
dspl_TextOut(CALLINFO_X_AH, (USHORT)(topLine+Mmi_layout_line_height()*i), 0, line);
#ifdef NO_ASCIIZ
/*MC, SPR 1257, merge from 3.3.3*/
if (call_data.calls.status[i].name.len > 0)
{
resources_truncate_to_screen_width((char*)call_data.calls.status[i].name.data,call_data.calls.status[i].name.len ,(char*)tag,MAX_CHAR-2, SCREEN_SIZE_X,FALSE);
}
/*MC end*/
#else
if (strlen((char*)call_data.calls.status[i].name) > 0)
{
resources_truncate_to_screen_width(call_data.calls.status[i].name,0 ,(char*)tag,MAX_CHAR-2, SCREEN_SIZE_X,FALSE);
}
#endif
else
if (strlen((char*)call_data.calls.status[i].number) > 0)
{
resources_truncate_to_screen_width((char*)call_data.calls.status[i].number,0 ,(char*)tag,MAX_CHAR-2, SCREEN_SIZE_X,FALSE);
}
else
{
resources_truncate_to_screen_width(GET_TEXT(TxtSoftCall),0 ,(char*)tag,MAX_CHAR-2, SCREEN_SIZE_X,TRUE);
}
if (i==callIndex(call_data.calls.selected))
dspl_TextOut(CALLINFO_X_TAGPOS,(USHORT)(topLine+Mmi_layout_line_height()*i), DSPL_TXTATTR_INVERS, tag);
else
dspl_TextOut(CALLINFO_X_TAGPOS,(USHORT)(topLine+Mmi_layout_line_height()*i), 0, tag);
}
displaySoftKeys(TxtSoftSelect,TxtEnd);
}
/*******************************************************************************
$Function: showWaitingAnswer
$Description:
$Returns:
$Arguments:
*******************************************************************************/
void showWaitingAnswer(void){
TRACE_FUNCTION("showWaitingAnswer");
showDefault();
PROMPT(TXTMESSAGE_X, Mmi_layout_line(2), 0, TxtPleaseWait);
displaySoftKeys(TxtCancel,'\0');
}
/*******************************************************************************
$Function: showSendingDTMF
$Description: displays sending DTMF
$Returns:
$Arguments:
*******************************************************************************/
void showSendingDTMF(void){
TRACE_FUNCTION("showSendingDTMF");
showDefault();
PROMPT(TXTMESSAGE_X, Mmi_layout_line(2), 0, TxtSendingDTMF);
displaySoftKeys(TxtCancel,'\0');
}
/*******************************************************************************
$Function: showInformation
$Description:
$Returns:
$Arguments:
*******************************************************************************/
void showInformation(void){
TRACE_FUNCTION("showInformation");
showDefault();
dspl_TextOut(24, 16, 0, callInformation);
}
/*******************************************************************************
$Function: callSetMode
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static void callSetMode (int mode){
T_DISPLAY_DATA display_info;
switch (mode){
case ViewConnect:
if (call_data.calls.numCalls)
{
call_data.refreshConnect = 1;
call_data.calls.view = ViewConnect;
}
else
{ /*SPR 1392, check for valid incoming call ID rather than existence of incoming
call window. During the setting up of call deflection, the incoming call screen doesn't exist*/
if ((!call_data.incCall) && (!call_data.win_calling)&&(call_data.win))
call_destroy(call_data.win);
return;
}
break;
case ViewMenu:
call_data.calls.view = ViewMenu;
break;
case ViewEnd:
{
T_MFW_CM_AOC_INFO aoc_info;
TRACE_EVENT(" Call ended read the AOC again");
// this is used for the "last charge"
cm_get_aoc_value(CM_AOC_ACM, &aoc_info);
if ( aoc_info.acm > acm_last_call )
{
//for the last charge
acm_last_call = aoc_info.acm - acm_last_call;
}
else
{
TRACE_EVENT(" ACM value didnt change");
}
memset(line,'\0',sizeof(line));
if (InCallTimer == TRUE)
getTimeString(call_data.timeEnded,(char*)line);
setLastCallDuration(call_data.timeEnded, call_data.call_direction);
dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtCallEnded, TxtNull, COLOUR_STATUS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)call_ending_cb, THREE_SECS, KEY_CLEAR );
/*
* Call Info Screen
*/
call_data.win_ending = info_dialog (call_data.win, &display_info);
}
break;
case ViewAutoRedial:
memset(line,'\0',sizeof(line));
dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtAutoredial, TxtNull, COLOUR_STATUS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)callAutoRedialKeyEvent, FOREVER, KEY_RIGHT|KEY_CLEAR|KEY_HUP );
display_info.TextString2 = (char*)call_data.phbNameNumber;
call_data.win_redial = info_dialog (call_data.win, &display_info);
break;
default:
break;
}
switch (mode)
{
case ViewDTMF:
call_data.calls.view = ViewDTMF;
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
call_data.editorAttrDTMF.cursor = ED_CURSOR_BAR;
#else /* NEW_EDITOR */
call_data.edtAttrDTMF.mode = edtCurBar1;
#endif /* NEW_EDITOR */
break;
case ViewScratchPad:
call_data.calls.view = ViewScratchPad;
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
call_data.editorAttrDTMF.cursor = ED_CURSOR_BAR;
#else /* NEW_EDITOR */
call_data.edtAttrDTMF.mode = edtCurBar1;
#endif /* NEW_EDITOR */
break;
case ViewSelectPrivateCall:
call_data.calls.view = ViewSelectPrivateCall;
show = showSelectPrivateCall;
break;
//GW Added
case ViewShortWait:
dlg_initDisplayData_TextId( &display_info, TxtCancel, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)call_waiting_answer_cb, ONE_SECS, KEY_LEFT );
display_info.TextString2 = (char*)line;
call_data.win_waiting = info_dialog (call_data.win, &display_info);
break;
case ViewWaitingAnswer:
dlg_initDisplayData_TextId( &display_info, TxtCancel, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)call_waiting_answer_cb, FOREVER, KEY_LEFT );
display_info.TextString2 = (char*)line;
call_data.win_waiting = info_dialog (call_data.win, &display_info);
break;
case ViewSendingDTMF:
dlg_initDisplayData_TextId( &display_info, TxtCancel, TxtNull, TxtSendingDTMF, TxtNull, COLOUR_STATUS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)call_sending_dtmf_cb, FOREVER, KEY_LEFT );
display_info.TextString2 = (char*)line;
call_data.win_sending_dtmf = info_dialog (call_data.win, &display_info);
break;
default:
break;
}
winShow(call_data.win);
}
/*******************************************************************************
$Function: contactsExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int contactsExec(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND win = mfwParent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_call_menu * data = (T_call_menu *)win_data->user;
bookPhonebookStart(call_data.win,PhbkNormal);
return 1;
}
/*******************************************************************************
$Function: holdExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int holdExec(MfwMnu* m, MfwMnuItem* i){
TRACE_FUNCTION("holdExec");
switch (call_data.calls.mode){
case CallSingle:
case CallTwo:
if (call_data.calls.status[call_data.calls.selected].stat == CALL_HELD)
{
cm_command(call_data.calls.selected, CM_RETRIEVE, '\0');
call_data.current_command = CM_RETRIEVE;
}
else
{
cm_command(call_data.calls.selected, CM_HOLD,'\0' );
call_data.current_command = CM_HOLD;
}
callSetMode(ViewWaitingAnswer);
break;
case CallConference:
if (call_data.calls.status[call_data.calls.selected].stat == CALL_HELD)
{
cm_command(call_data.calls.selected, CM_RETRIEVE_MULTIPARTY, '\0');
call_data.current_command = CM_RETRIEVE_MULTIPARTY;
}
else
{
cm_command(call_data.calls.selected, CM_HOLD_MULTIPARTY, '\0');
call_data.current_command = CM_HOLD_MULTIPARTY;
}
callSetMode(ViewWaitingAnswer);
break;
case CallPrivateCall:
case CallMultipartySingle:
case CallSingleMultiparty:
default:
break;
}
return 1;
}
/*******************************************************************************
$Function: muteExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int muteExec(MfwMnu* m, MfwMnuItem* i){
T_MFW_HND win = mfwParent(mfw_header());
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_call_menu *data = (T_call_menu *)win_data->user;
if (call_data.calls.muted)
{
if (audio_SetMute(AUDIO_MICROPHONE, AUDIO_MUTING_OFF) == DRV_OK)
{
call_data.calls.muted = false;
menuCallSingleItems[2].str = (char*)TxtMute;
}
}
else
{
if (audio_SetMute(AUDIO_MICROPHONE, AUDIO_MUTING_ON) == DRV_OK)
{
call_data.calls.muted = true;
menuCallSingleItems[2].str = (char*)TxtUnmute;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -