📄 mmicall.c
字号:
call_menu_destroy(win);
call_data.win_menu = 0;
return 1;
}
/*******************************************************************************
$Function: scratchPadExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int scratchPadExec(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;
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
call_scratchpad_start(win,ctrlBack,ViewScratchPad, 0);
#else
call_scratchpad_start(win,ecBack,ViewScratchPad, 0);
#endif
return 1;
}
/*******************************************************************************
$Function: mainMenuExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int mainMenuExec(MfwMnu* m, MfwMnuItem* i){
//JVJE menuEnter();
return 1;
}
/*******************************************************************************
$Function: startConferenceExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int startConferenceExec(MfwMnu* m, MfwMnuItem* i){
cm_command(0,CM_BUILD_MULTIPARTY,'\0');
call_data.current_command = CM_BUILD_MULTIPARTY;
callSetMode(ViewWaitingAnswer);
return 0;
}
/*******************************************************************************
$Function: privateStartAddConferenceExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int privateStartAddConferenceExec(MfwMnu* m, MfwMnuItem* i){
switch(call_data.calls.mode){
case CallConference:
cm_command(call_data.calls.selected,CM_SPLIT_MULTIPARTY,'\0');
callSetMode(ViewShortWait);;
break;
case CallPrivateCall:
case CallMultipartySingle :
case CallSingleMultiparty :
case CallTwo:
TRACE_EVENT("call to BUILD_MULTIPARTY------------------------------------");
cm_command(0,CM_BUILD_MULTIPARTY,'\0');
call_data.current_command = CM_BUILD_MULTIPARTY;
callSetMode(ViewWaitingAnswer);
break;
default:
break;
}
return 1;
}
/*******************************************************************************
$Function: swapExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int swapExec(MfwMnu* m, MfwMnuItem* i){
switch(call_data.calls.mode){
case CallSingleMultiparty :
case CallMultipartySingle :
case CallPrivateCall :
cm_command(0,CM_SWAP_MULTIPARTY, '\0');
call_data.current_command = CM_SWAP_MULTIPARTY;
callSetMode(ViewWaitingAnswer);
break;
case CallTwo:
cm_command(call_data.calls.selected,CM_SWAP, '\0');
call_data.current_command = CM_SWAP;
callSetMode(ViewWaitingAnswer);
break;
default:
break;
}
return 1;
}
/*******************************************************************************
$Function: endAllExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int endAllExec(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;
call_data.callsToEnd = call_data.calls.numCalls-1;
cm_disconnect(call_data.calls.status[0].call_number);
callSetMode(ViewConnect);
return 1;
}
/*******************************************************************************
$Function: transferExec
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int transferExec(MfwMnu* m, MfwMnuItem* i){
cm_command(0,CM_ETC,'\0');
call_data.current_command = CM_ETC;
callSetMode(ViewWaitingAnswer);
return 1;
}
/*******************************************************************************
$Function: removeCall
$Description: removes a managed call
$Returns:
$Arguments: call id
*******************************************************************************/
int removeCall(SHORT cid) {
int i;
TYPEQUEUE* first;
sprintf(stringTrace,"Remove call %d",cid);
TRACE_FUNCTION(stringTrace);
if (!call_data.accessEnd){
TRACE_EVENT("not access end");
first = call_data.endQueue;
while (call_data.endQueue){
call_data.endQueue = call_data.endQueue->next;
}
call_data.endQueue = (TYPEQUEUE*)ALLOC_MEMORY(sizeof(TYPEQUEUE));
call_data.endQueue->call_number = cid;
call_data.endQueue->next = 0;
if (first) call_data.endQueue = first;
return 0;
}
if (call_data.endQueue){
first = call_data.endQueue->next;
FREE_MEMORY( (void *)call_data.endQueue, sizeof(TYPEQUEUE));
call_data.endQueue = first;
}
call_data.accessEnd = FALSE;
call_data.timeEnded = call_data.calls.time[callIndex(cid)];
for (i = 0; i < MAX_CALLS; i++)
{
if (call_data.calls.status[i].call_number == cid)
call_data.calls.status[i].call_number = 0;
if (i < (MAX_CALLS -1))
{
if (call_data.calls.status[i].call_number == 0 && call_data.calls.status[i+1].call_number != 0)
{
call_data.calls.status[i] = call_data.calls.status[i+1];
call_data.calls.time[i] = call_data.calls.time[i+1];
call_data.calls.status[i+1].call_number= 0;
}
}
}
if (call_data.calls.numCalls > 0)
call_data.calls.numCalls--;
if (call_data.calls.selected == cid)
call_data.calls.selected = 0;
if (call_data.calls.numCalls ==1)
call_data.calls.mode = CallSingle;
if (call_data.calls.mode == CallSingleMultiparty)
call_data.calls.mode = CallConference;
if (call_data.singleCall == cid)
call_data.singleCall = 0;
if (call_data.calls.numCalls)
rebuildCalls();
callSetMode(ViewEnd);
return 1;
}
/*******************************************************************************
$Function: addCall
$Description:
$Returns:
$Arguments: call id
*******************************************************************************/
int addCall(SHORT cid) {
MmiModuleDel(ModuleInCall);
if (!call_data.calls.numCalls){
MmiModuleSet(ModuleCall);
call_data.callStatus = CallActive;
TRACE_EVENT("active call!!");
}
if (call_data.calls.numCalls >= MAX_CALLS)
return 0;
if (call_data.calls.status[call_data.calls.numCalls].call_number != 0)
return 0;
#ifdef NO_ASCIIZ
{
memcpy((char*)call_data.calls.status[call_data.calls.numCalls].name.data,
(char*)call_data.phbNameNumber,
sizeof(call_data.calls.status[call_data.calls.numCalls].name.data));
call_data.calls.status[call_data.calls.numCalls].name.len =
dspl_str_length(call_data.phbNameNumber);
/* Marcus: Issue 987: 18/09/2002: End */
/*MC end*/
}
#else
strncpy((char*)call_data.calls.status[call_data.calls.numCalls].name,
(char*)call_data.phbNameNumber,sizeof(call_data.calls.status[call_data.calls.numCalls].name));
#endif
getCallStatus(cid, &call_data.calls.status[call_data.calls.numCalls]);
call_data.calls.time[call_data.calls.numCalls] = 0;
call_data.calls.numCalls++;
call_data.calls.selected = cid;
switch (call_data.calls.mode){
case CallSingle:
if (call_data.calls.numCalls > 1)
call_data.calls.mode = CallTwo;
break;
case CallConference:
call_data.singleCall = cid;
call_data.calls.mode = CallSingleMultiparty;
break;
default:
if (call_data.calls.numCalls == 1)
call_data.calls.mode = CallSingle;
break;
}
rebuildCalls();
return 1;
}
/*******************************************************************************
$Function: callIndex
$Description:
$Returns: returns the cm call id
$Arguments: call id
*******************************************************************************/
int callIndex(SHORT cid) {
int i;
for (i = 0; i < MAX_CALLS; i++) {
if (call_data.calls.status[i].call_number == cid)
return i;
}
return MAX_CALLS;
}
/*******************************************************************************
$Function: callConnect
$Description:
$Returns:
$Arguments: call id
*******************************************************************************/
void callConnect(SHORT cid){
TRACE_FUNCTION("Call Connect");
addCall(cid);
callSetMode(ViewConnect);
}
/*******************************************************************************
$Function: callNumber
$Description:
$Returns:
$Arguments:
*******************************************************************************/
void callNumber(UBYTE *number)
{
T_MFW res;
T_MFW_PHB_ENTRY phb_entry;
T_MFW_SS_RETURN ssRes;
char edt_buf_prov[EDITOR_SIZE];
call_data.emergencyCall = FALSE;
strcpy((char*)edt_buf_prov,(char*)number);
ssRes = ss_check_ss_string((UBYTE*)edt_buf_prov);
switch (ssRes)
{
case MFW_SS_USSD:
case MFW_SS_SIM_LOCK:
case MFW_SS_REG_PW:
case MFW_SS_CF:
case MFW_SS_CB:
case MFW_SS_CLIR:
case MFW_SS_CLIP:
case MFW_SS_COLR:
case MFW_SS_COLP:
case MFW_SS_WAIT:
case MFW_SS_HOLD:
case MFW_SS_SIM_REG_PW:
case MFW_SS_SIM_UNBLCK_PIN:
case MFW_SS_MMI:
cm_mo_call((UBYTE*)number, VOICE_CALL);
return; /* Handled on # */
/*MC 12/04/02*/
case MFW_SS_ECT:
TRACE_EVENT("Recognised ECT string");
cm_mo_call((UBYTE*)number, VOICE_CALL);
return; /* Handled on # */
case MFW_SS_DIAL:
case MFW_SS_DIAL_IDX:
case MFW_SS_DTMF:
case MFW_SS_UNKNOWN:
default:
break; /* Remove #, it will be added later on again */
}
res = cm_mo_call((UBYTE*)number, VOICE_CALL);
switch (res){
case CM_OK :
TRACE_EVENT("call OK");
break;
case CM_EC:
call_data.emergencyCall = TRUE;
break;
case CM_BLACKLIST:
TRACE_EVENT("number blacklisted now");
/*NM, p018*/
if (call_data.win)
bookShowInformation(call_data.win,Txtblacklisted,NULL,(T_VOID_FUNC)call_failure_cb);
break;
case CM_SIM:
case CM_SS :
case CM_MMI:
case CM_USSD:
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -