📄 mfw_cm.c
字号:
PURPOSE : This function is used to convert the type of call class
used by MFW to the type of call class used by ACI.
*/
LOCAL T_MFW_CM_CALL_TYPE cm_callTyp_cvt(T_ACI_CLASS cls)
{
switch ( cls )
{
case ( CLASS_Vce ) : return VOICE_CALL;
case ( CLASS_AuxVce): return AuxVOICE_CALL;
case ( CLASS_Dat ) : return DATA_CALL;
case ( CLASS_Fax ) : return FAX_CALL;
case ( CLASS_VceDat ) :
case ( CLASS_VceFax ) :
case ( CLASS_DatFax ) :
case ( CLASS_VceDatFax ): return cls;
case ( CLASS_None ) : return NONE_TYPE;
case (CLASS_NotPresent): return NONE_TYPE;
default: return NONE_TYPE;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_search_callId |
+--------------------------------------------------------------------+
PURPOSE : find call index from call table
*/
int cm_search_callId(T_ACI_CAL_STAT type, SHORT *id)
{
int i;
TRACE_FUNCTION("cm_search_callId()");
*id = 0;
if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) != AT_CMPL)
return CM_ERROR;
for (i=0; i<MAX_CALL_NR; i++)
{
if (call_tab[i].index == -1)
break;
if (call_tab[i].status == type)
{
*id = call_tab[i].index;
return CM_OK;
}
}
return CM_ERROR;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_search_callMode |
+--------------------------------------------------------------------+
PURPOSE : find call type from call table
*/
T_ACI_CAL_MODE cm_search_callMode(SHORT id)
{
int i;
TRACE_FUNCTION("cm_search_callMode()");
if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) != AT_CMPL)
return CAL_MODE_Unknown;
for (i=0; i<MAX_CALL_NR; i++)
{
if (call_tab[i].index == -1)
break;
if (call_tab[i].index == id)
return call_tab[i].calMode;
}
return CAL_MODE_Unknown;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_search_mptyId |
PURPOSE : find multiparty call index from call table
*/
int cm_search_mptyId(T_ACI_CAL_MPTY type, SHORT *id)
{
int i;
TRACE_FUNCTION("cm_search_mptyId()");
*id = 0;
if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) != AT_CMPL)
return CM_ERROR;
for (i=0; i<MAX_CALL_NR; i++)
{
if (call_tab[i].index == -1)
break;
if (call_tab[i].mpty == type)
{
*id = call_tab[i].index;
return CM_OK;
}
}
return CM_ERROR;
}
/*
+-------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_search_numId |
+-------------------------------------------------------------------+
PURPOSE : find call index from call table
*/
LOCAL SHORT cm_search_numId(UBYTE *number)
{
int i;
TRACE_FUNCTION("cm_search_numId()");
if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) != AT_CMPL)
return 0;
for (i=0; i<MAX_CALL_NR; i++)
{
if (call_tab[i].index == -1)
break;
if (!strcmp(call_tab[i].number, (char *)number))
return call_tab[i].index;
}
return 0;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_search_callStat |
+--------------------------------------------------------------------+
PURPOSE : Search the information from call table.
*/
T_MFW cm_search_callStat(SHORT call_number,
T_MFW_CM_CALL_STAT *stat,
UBYTE *ton,
UBYTE *mode)
{
int i;
if (qAT_PercentCAL(CMD_SRC_LCL, call_tab) EQ AT_CMPL)
{
for (i=0; i<MAX_CALL_NR; i++)
{
if (call_tab[i].index == -1)
break;
if (call_tab[i].index == call_number)
{
*stat = cm_cvt_call_status(call_tab[i].status);
*ton = phb_cvtTon(call_tab[i].type.ton);
*mode = cm_cvt_call_mode(call_tab[i].calMode);
return CM_OK;
}
}
return CM_ERROR;
}
return CM_ERROR;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_check_emergency |
+--------------------------------------------------------------------+
PURPOSE : Check emergency call number
*/
T_MFW cm_check_emergency(UBYTE *number)
{
UBYTE index;
T_MFW_PHB_TEXT findText;
T_MFW_PHB_ENTRY entry;
TRACE_FUNCTION ("cm_check_emergency()");
TRACE_EVENT_P1("String being passed = %s", (char*)number);
if (strlen((char *)number) <= 0 OR strlen((char *)number) > 3)
return FALSE;
#ifdef _INNOVATION_EMULATOR_
return FALSE;
#else
if(psaCC_phbSrchECC((char*)number, FALSE))
{
TRACE_EVENT("psaCC_phbSrchECC - returned - TRUE");
return TRUE;
}
else
{
TRACE_EVENT("psaCC_phbSrchECC - returned - FALSE");
return FALSE;
}
#endif
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_mo_prefix |
+--------------------------------------------------------------------+
PURPOSE : set/get CLIP, CLIR, COLP and COLR tempstatus
*/
T_CM_CLI cm_mo_prefix(T_CM_CLI prefix)
{
UBYTE bits;
if ((bits = (prefix & 0x0c)) != 0)
cli_prefix = (cli_prefix & 0xf3) | bits;
if ((bits = (prefix & 0xc0)) != 0)
cli_prefix = (cli_prefix & 0x3f) | bits;
return cli_prefix;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_set_cmd_status |
+--------------------------------------------------------------------+
PURPOSE :
*/
void cm_set_cmd_status(T_ACI_CHLD_MOD mode, CHAR* call)
{
SHORT id;
TRACE_FUNCTION("cm_set_cmd_status()"); // Marcus: CCBS: 14/11/2002
memset(&dis_connect, 0, sizeof(T_MFW_CM_DISCONNECT));
memset(&cmd, 0, sizeof(T_MFW_CM_COMMAND));
switch (mode)
{
case CHLD_MOD_RelHldOrUdub:
TRACE_EVENT("CHLD_MOD_RelHldOrUdub"); // Marcus: CCBS: 14/11/2002
/*SPR#1965 - DS - Changed from MFW_CM_MT_REJECT to MFW_CM_TERMINATED because
* the E_CM_DISCONNECT signal is not sent in cm_ok_disconnect() if cmd_hold = MFW_CM_MT_REJECT.
* Port of 1962.
*/
cmd_hold = MFW_CM_TERMINATED;
if (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)
{
TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) == CM_OK"); // Marcus: CCBS: 14/11/2002
dis_connect.call_number = id;
}
else
{
TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) != CM_OK"); // Marcus: CCBS: 14/11/2002
dis_connect.call_number = -1; // call id?
}
break;
case CHLD_MOD_RelActAndAcpt:
TRACE_EVENT("CHLD_MOD_RelActAndAcpt"); // Marcus: CCBS: 14/11/2002
cmd_hold = MFW_CM_1_SEND;
if (cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
{
TRACE_EVENT("cm_search_callId(CAL_STAT_Active, &id) == CM_OK"); // Marcus: CCBS: 14/11/2002
dis_connect.call_number = id; // call id ?
}
if (cm_search_callId(CAL_STAT_Wait, &id) != CM_OK)
{
TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) != CM_OK"); // Marcus: CCBS: 14/11/2002
if (cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
{
TRACE_EVENT("cm_search_callId(CAL_STAT_Held, &id) == CM_OK"); // Marcus: CCBS: 14/11/2002
cmd.command = CM_RETRIEVE;
cmd.call_number = id;
}
}
break;
case CHLD_MOD_RelActSpec:
TRACE_EVENT("CHLD_MOD_RelActSpec"); // Marcus: CCBS: 14/11/2002
dis_connect.call_number = (SHORT)atoi(call);
if (dis_connect.call_number)
{
TRACE_EVENT("dis_connect.call_number"); // Marcus: CCBS: 14/11/2002
cmd_hold = MFW_CM_TERMINATED;
}
else
{
TRACE_EVENT("!dis_connect.call_number"); // Marcus: CCBS: 14/11/2002
cmd_hold = MFW_CM_MPTY_TERMINATED;
}
break;
case CHLD_MOD_HldActAndAcpt:
TRACE_EVENT("CHLD_MOD_HldActAndAcpt"); // Marcus: CCBS: 14/11/2002
if (cm_search_callId(CAL_STAT_Wait, &id) == CM_OK)
{
TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) == CM_OK"); // Marcus: CCBS: 14/11/2002
cmd_hold = MFW_CM_MT_ACCEPT;
/*
* initialize for result event
*/
cmd.command = CM_HOLD;
cc_id = id;
}
else
{
TRACE_EVENT("cm_search_callId(CAL_STAT_Wait, &id) != CM_OK"); // Marcus: CCBS: 14/11/2002
if ((cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
AND (cm_search_callId(CAL_STAT_Held, &id) == CM_OK))
{
TRACE_EVENT("cmd.command = CM_SWAP"); // Marcus: CCBS: 14/11/2002
cmd.command = CM_SWAP;
}
if ((cm_search_callId(CAL_STAT_Active, &id) != CM_OK)
AND (cm_search_callId(CAL_STAT_Held, &id) == CM_OK))
{
TRACE_EVENT("cmd.command = CM_RETRIEVE"); // Marcus: CCBS: 14/11/2002
cmd.command = CM_RETRIEVE;
}
if ((cm_search_callId(CAL_STAT_Active, &id) == CM_OK)
AND (cm_search_callId(CAL_STAT_Held, &id) != CM_OK))
{
TRACE_EVENT("cmd.command = CM_HOLD"); // Marcus: CCBS: 14/11/2002
cmd.command = CM_HOLD;
}
cmd.call_number = 0;
}
break;
case CHLD_MOD_HldActExc:
TRACE_EVENT("CHLD_MOD_HldActExc"); // Marcus: CCBS: 14/11/2002
cmd.command = CM_SPLIT_MULTIPARTY;
cmd.call_number = 0;
break;
case CHLD_MOD_AddHld:
TRACE_EVENT("CHLD_MOD_AddHld"); // Marcus: CCBS: 14/11/2002
cmd.command = CM_BUILD_MULTIPARTY;
cmd.call_number = 0;
break;
case CHLD_MOD_Ect:
TRACE_EVENT("CHLD_MOD_Ect"); // Marcus: CCBS: 14/11/2002
cmd.command = CM_ETC;
cmd.call_number = 0;
break;
case CHLD_MOD_Ccbs:
TRACE_EVENT("CHLD_MOD_Ccbs"); // Marcus: CCBS: 14/11/2002
cmd.command = CM_CCBS;
cmd.call_number = 0;
break;
case CHLD_MOD_HldActDial:
TRACE_EVENT("CHLD_MOD_HldActDial"); // Marcus: CCBS: 14/11/2002
cmd_hold = MFW_CM_HOLD_AND_DIAL;
/*
* initialize for result event
*/
cmd.command = CM_HOLD;
cc_id = id;
break;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_check_mo_number |
+--------------------------------------------------------------------+
PURPOSE : start mobile originated call
*/
T_MFW cm_check_mo_number(UBYTE *number)
{
UBYTE i;
/* check whether a redialing exists */
if (call_stat EQ REDIALING_CALL)
{
cm_stop_redialTim();
rdl.redial_mode = CM_REDIAL_OUTGOING;
cm_signal(E_CM_REDIAL, &rdl);
}
if (!number)
return CM_OK;
/* check whether this number is in blacklist */
for (i=0; i<black_list.count; i++)
{
if (!strcmp((char *)black_list.number[i], (char *)number))
return CM_BLACKLIST;
}
/* check the type of this number */
if (cm_check_emergency(number) EQ TRUE)
call_type = MFW_ECC_CALL;
else
call_type = MFW_NORMAL_CALL;
return CM_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_set_call_mode |
+--------------------------------------------------------------------+
PURPOSE : set call mode
*/
void cm_set_call_mode(T_MFW_CM_CALL_TYPE mode)
{
switch (mode)
{
case VOICE_CALL:
case AuxVOICE_CALL: /*MC, SPR 1026, assume line 2 is handled like line 1*/
case DATA_CALL:
case FAX_CALL:
sAT_PlusCMOD(CMD_SRC_LCL, CMOD_MOD_Single);
break;
case VFD_VOICE:
case VFD_DATA:
sAT_PlusCMOD(CMD_SRC_LCL, CMOD_MOD_VoiceFlwdDat);
break;
case VAD_VOICE:
case VAD_DATA:
sAT_PlusCMOD(CMD_SRC_LCL, CMOD_MOD_VoiceDat);
break;
case VAF_VOICE:
case VAF_FAX:
sAT_PlusCMOD(CMD_SRC_LCL, CMOD_MOD_VoiceFax);
break;
default:
break;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_CM |
| STATE : code ROUTINE: cm_mo_idx |
+--------------------------------------------------------------------+
PURPOSE : start mobile originated call
*/
T_MFW cm_mo_idx(T_KSD_SEQPARAM *para, T_MFW_CM_CALL_TYPE mode)
{
T_MFW_PHB_LIST entries;
T_MFW_PHB_ENTRY entry;
UBYTE res;
//RM 19_09_2000
#ifdef NO_ASCIIZ
T_ACI_PB_TEXT mfwpbText;
#endif
//RM
entries.entry = &entry;
/* search this number from phonebook */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -