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

📄 mfw_cm.c

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


   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 + -