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

📄 mfw_cm.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
  cm_signal(E_CM_CW, &in_call);
}

#else

void rAT_PlusCLIP(T_ACI_CLIP_STAT   stat,
		  CHAR		  * number,
		  T_ACI_TOA	  * type,
		  U8		    validity,
		  CHAR		  * subaddr,
		  T_ACI_TOS	  * satype,
		  CHAR		  * alpha)
{
  int flag;

  TRACE_FUNCTION ("rAT_PlusCLIP()");

  flag = 0;
//  in_call.result = 0;

  if (number != NULL)
  {
    strcpy((char *)in_call.number,  (char *)number);
    in_call.ton = phb_cvtTon(type->ton);
    flag = 1;
  }
  else
    memset(in_call.number, '\0', MFW_NUM_LEN);

  if (alpha != NULL)
  {
    strcpy((char *)in_call.name,    (char *)alpha);
    flag = 1;
  }
  else
    memset(in_call.name, '\0', MFW_TAG_LEN);

  if (subaddr != NULL)
  {
    strcpy((char *)in_call.subaddr, (char *)subaddr);
    flag = 1;
  }
  else
    memset(in_call.subaddr, '\0', MFW_SUBADR_LEN);

  if (flag == 1)
    in_call.result = Present;
  else
    in_call.result = 0;

  cm_signal(E_CM_CW, &in_call);
}
#endif

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-MFW (8417)		 MODULE  :  MFW_CM	     |
| STATE   : code			 ROUTINE : rAT_PlusCOLP      |
+--------------------------------------------------------------------+


   PURPOSE :   Connected line presentation indication from ACI

*/

#ifdef NO_ASCIIZ
GLOBAL void rAT_PlusCOLP  ( T_ACI_COLP_STAT stat,
			    CHAR* number,
			    T_ACI_TOA* type,
			    CHAR* subaddr,
			    T_ACI_TOS* satype,
			    T_ACI_PB_TEXT* alpha)
{

  TRACE_FUNCTION ("rAT_PlusCOLP()");

  if (number != NULL)
  {
    strcpy((char *)out_call.number, (char *)number);
    out_call.ton = phb_cvtTon(type->ton);
  }
  else
    memset(out_call.number, '\0', MFW_NUM_LEN);

  /*NM, p001  */
  if(alpha != NULL)
  /*NM, p001 end */
  {
  out_call.name.len = MINIMUM(alpha->len, MFW_TAG_LEN);
  if (alpha->len)
    memcpy(out_call.name.data,
	   alpha->data,
	   alpha->len);
  }

  if (subaddr != NULL)
    strcpy((char *)out_call.subaddr, (char *)subaddr);
  else
    memset(out_call.subaddr, '\0', MFW_SUBADR_LEN);

  if (number != NULL)
    cm_signal(E_CM_COLP, &out_call);
}

#else

GLOBAL void rAT_PlusCOLP  ( T_ACI_COLP_STAT stat,
			    CHAR* number,
			    T_ACI_TOA* type,
			    CHAR* subaddr,
			    T_ACI_TOS* satype,
			    CHAR* alpha)
{
  TRACE_FUNCTION ("rAT_PlusCOLP()");

// patch PMA 15 06 99 from Andreas
//  if (stat == -1)
//    return;

  if (number != NULL)
  {
    strcpy((char *)out_call.number, (char *)number);
    out_call.ton = phb_cvtTon(type->ton);
  }
  else
    memset(out_call.number, '\0', MFW_NUM_LEN);

  if (alpha != NULL)
    strcpy((char *)out_call.name, (char *)alpha);
  else
    memset(out_call.name, '\0', MFW_TAG_LEN);

  if (subaddr != NULL)
    strcpy((char *)out_call.subaddr, (char *)subaddr);
  else
    memset(out_call.subaddr, '\0', MFW_SUBADR_LEN);

// patch PMA 15 06 99 from Andreas
  if (number != NULL)
	  cm_signal(E_CM_COLP, &out_call);
}
#endif

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-MFW (8417)		 MODULE  : MFW_CM	     |
| STATE   : code			 ROUTINE : rAT_PlusCCWA      |
+--------------------------------------------------------------------+


   PURPOSE :   Connected line presentation indication from ACI

*/

#ifdef NO_ASCIIZ

GLOBAL void rAT_PlusCCWA ( T_ACI_CLSSTAT * clsStatLst,
			   CHAR 	 * number,
			   T_ACI_TOA	 * type,
			   U8		   validity,
			   T_ACI_CLASS	   call_class,
			   T_ACI_PB_TEXT * alpha)
{
    SHORT call_number;

    TRACE_FUNCTION("rAT_PlusCCWA()");

    in_call.result = NotPresent;
    if (clsStatLst == 0)
    {
	if (number != NULL)
	{
	    strcpy((char *)in_call.number, (char *)number);
	    in_call.ton = phb_cvtTon(type->ton);
	}
	else
	    memset(in_call.number, '\0', MFW_NUM_LEN);

	if (alpha != NULL)
	  in_call.name.len = alpha->len;
	else
	  in_call.name.len = 0;

	if (alpha->len)
	{
	    memcpy(in_call.name.data,
		   alpha->data,
		   alpha->len);
	}

	in_call.type = cm_callTyp_cvt(call_class);

	if (number != 0 || alpha->len != 0 || in_call.type != NONE_TYPE)
	    in_call.result = Present;

	cm_search_callId(CAL_STAT_Wait, &call_number);
	in_call.call_number = call_number;

	cm_signal(E_CM_CW, &in_call);
    }
}

#else

GLOBAL void rAT_PlusCCWA ( T_ACI_CLSSTAT * clsStatLst,
			   CHAR 	 * number,
			   T_ACI_TOA	 * type,
			   U8		   validity,
			   T_ACI_CLASS	   call_class,
			   CHAR 	 * alpha)
{
    SHORT call_number;

    in_call.result = NotPresent;
    if (clsStatLst == 0)
    {
	if (number != NULL)
	{
	    strcpy((char *)in_call.number, (char *)number);
	    in_call.ton = phb_cvtTon(type->ton);
	}
	else
	    memset(in_call.number, '\0', MFW_NUM_LEN);

	if (alpha != NULL)
	    strcpy((char *)in_call.name, (char *)alpha);
	else
	    memset(in_call.name, '\0', MFW_TAG_LEN);

	in_call.type = cm_callTyp_cvt(call_class);

	if (number != 0 || alpha != 0 || in_call.type != NONE_TYPE)
	    in_call.result = Present;

	cm_search_callId(CAL_STAT_Wait, &call_number);
	in_call.call_number = call_number;

	cm_signal(E_CM_CW, &in_call);
    }
}
#endif

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)	 MODULE  : MFW_CM	     |
| STATE   : code			 ROUTINE : cm_mt_reject      |
+--------------------------------------------------------------------+


   PURPOSE : Reject the incoming call.

*/

void cm_mt_reject()
{
    TRACE_FUNCTION ("cm_mt_reject()");

    if (currAccepting)
    {
	currAccepting = 0; /* ES!! 210999 */
	sAT_Abort(CMD_SRC_LCL, AT_CMD_A);
	return;
    }

    cmd_hold = MFW_CM_MT_REJECT;
    cm_search_callId(CAL_STAT_Wait, &dis_connect.call_number);
    sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelHldOrUdub, 0);
}


/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) 	MODULE: MFW_CM		     |
| STATE  : code 			ROUTINE: cm_mt_accept	     |
+--------------------------------------------------------------------+


   PURPOSE : Accept the incoming call. If the active call exists,
	     place this active call on hold and accepts the
	     waiting call.

*/

void cm_mt_accept()
{
    SHORT call_number;
    T_MFW_CM_CALL_STAT	stat;	/* SPR#1983 - SH */
    UBYTE		ton;
    UBYTE		mode;

    TRACE_FUNCTION ("cm_mt_accept()");

    if (cm_search_callId(CAL_STAT_Active, &call_number) != CM_OK)
    {
		if (sAT_A(CMD_SRC_LCL) NEQ AT_EXCT)
		{
			TRACE_ERROR("sAT_A error");
		}
		else
		{
		    currAccepting = 1; /* ES!! 210999 */
		}
    }
    else
    {
		cmd_hold = MFW_CM_MT_ACCEPT;

		/* SPR#1983 - SH - Get status of active call */
		
        cm_search_callStat(call_number, &stat, &ton, &mode);
        
		if (cm_search_callId(CAL_STAT_Wait, &call_number) EQ CM_OK)
		  cc_id = call_number;

		/* SPR#1983 - SH - If data call is active, end it and accept other call */

		if (mode==DATA_CALL)
		{
			/*
             * Accepting a call when there is an active data call,
             * so drop the active call and accept the waiting call by the
             * equivalent of the AT+CHLD=1 command.
             */
            cm_set_cmd_status(CHLD_MOD_RelActAndAcpt, "");
            if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelActAndAcpt, 0) NEQ AT_EXCT)
            {
                TRACE_ERROR("sAT_PlusCHLD(CHLD_MOD_RelActAndAcpt) error");
            }
		}

		else	/* SPR#1983 - SH - Important! Acts on next 'if' */
		        
        /* Marcus: issue 1049: 03/09/2002: Start */
        if (cm_search_callId(CAL_STAT_Held, &call_number) EQ CM_OK)
        {
            /*
             * Accepting a call when there is already an active call and a held
             * call, so drop the active call and accept the waiting call by the
             * equivalent of the AT+CHLD=1 command.
             */
            cm_set_cmd_status(CHLD_MOD_RelActAndAcpt, "");
            if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_RelActAndAcpt, 0) NEQ AT_EXCT)
            {
                TRACE_ERROR("sAT_PlusCHLD(CHLD_MOD_RelActAndAcpt) error");
            }
        }
        else
        {
            /*
             * Accepting a call when there is already an active call but no held
             * call, so hold the active call and accept the waiting call by the
             * equivalent of the AT+CHLD=2 command.
             */
            cm_set_cmd_status(CHLD_MOD_HldActAndAcpt, "");
            if (sAT_PlusCHLD(CMD_SRC_LCL, CHLD_MOD_HldActAndAcpt, 0) NEQ AT_EXCT)
            {
                TRACE_ERROR("sAT_PlusCHLD(CHLD_MOD_HldActAndAcpt) error");
            }
        }
        /* Marcus: issue 1049: 03/09/2002: End */
	}
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)		MODULE  : MFW_CM			 |
| STATE   : code						ROUTINE : cm_ok_connect		 |
+--------------------------------------------------------------------+
  
	
	PURPOSE :  The connect is successful.

*/

void cm_ok_connect(void)
{
    SHORT call_number;

    TRACE_FUNCTION ("cm_ok_connect()");

    currAccepting = 0; /* ES!! 210999 */
    currConnecting = 0; /* ES!! 290999 */

    if (cc_stat.type == REDIALING_CALL)
    {
	rdl.redial_mode = CM_REDIAL_SUCCESS;
	cm_signal(E_CM_REDIAL, &rdl);
    }

    cm_search_callId(CAL_STAT_Active, &call_number);

    /* allow a new outgoing */
    call_stat = MFW_CALL_FREE;
    call_type = MFW_CALL_FREE;
    cmd_hold = MFW_CM_NO_FLAG;

    cm_signal(E_CM_CONNECT_ACK, &call_number);
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)	 MODULE  : MFW_CM	     |
| STATE   : code			 ROUTINE : cm_rmt_ok_connect |
+--------------------------------------------------------------------+


   PURPOSE :  The connect is successful.

*/

void cm_rmt_ok_connect()
{
    SHORT call_number;

    TRACE_FUNCTION ("cm_rmt_ok_connect()");

    cm_search_callId(CAL_STAT_Active, &call_number);

    cm_signal(E_CM_CONNECT_ACK, &call_number);
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)	 MODULE  : MFW_CM	     |
| STATE   : code			 ROUTINE : cm_error_connect  |
+--------------------------------------------------------------------+


   PURPOSE : The connection is not successful

*/

void cm_error_connect(SHORT call_number)
{
    int i;
    USHORT report;  /* Marcus: Extended error reporting: 12/11/2002 */
    USHORT extend_report; /* API - 1564 - 16-01-03 - add this variable to store the new error code */

    TRACE_FUNCTION ("cm_error_connect()");

    currAccepting = 0; /* ES!! 210999 */
    currConnecting = 0; /* ES!! 290999 */

    /* send event */
    dis_connect.call_number = call_number;

    qAT_PlusCEER( CMD_SRC_LCL, &report);
    /* Marcus: Extended error reporting: 12/11/2002: Start */
    TRACE_EVENT_P1("qAT_PlusCEER(%04X)", report);

	/* API - 1564 - 16-01-03 - store the error value to the new variable & throughout this function replace 'report' with 'extend_report */
    extend_report = GET_CAUSE_VALUE(report);
        
    if (GET_CAUSE_DEFBY(extend_report) == DEFBY_CONDAT)
    {
        /* Treat Condat defined cause values as if no cause given */
        dis_connect.cause = NOT_PRESENT_8BIT;
    }
    else
    {
        /* Standards defined cause value is given */
        dis_connect.cause = GET_CAUSE_VALUE(extend_report);
    }
    TRACE_EVENT_P1("dis_connect.cause = %02X)", dis_connect.cause);
    /* Marcus: Extended error reporting: 12/11/2002: End */
    cm_signal(E_CM_DISCONNECT, &dis_connect);
    TRACE_EVENT("passed the E_CM_DISCONNECT point");

    if ((call_stat EQ OUTGOING_CALL)
	AND (call_type NEQ MFW_ECC_CALL)
	AND ((redial_stat EQ CM_REDIAL_AUTO) OR (redial_stat EQ CM_REDIAL_MANU)))
    {
	/* If this call is 2nd outgoing call, redial is not started */
	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].status == CAL_STAT_NotPresent)
		    OR (call_tab[i].status == CAL_STAT_DeactiveReq))
		    continue;

		if (call_tab[i].calType == CAL_TYPE_MOC)
		{
		    call_stat = MFW_CALL_FREE;
		    call_type = MFW_CALL_FREE;
		    cmd_hold = MFW_CM_NO_FLAG;
		    return;
		}
	    }
	}

	/* check blacklist whether it is full */
	if (black_list.count == MAX_BLACKLIST_NUM)
	{
			TRACE_EVENT ("blacklist is now full");

			/* Blacklist is now full and 
			   MT shall prohibit further automatic call attempts
			*/
		redial_stat = CM_REDIAL_OFF;

			
	    /* allow a new outgoing */
	    call_stat	 = MFW_CALL_FREE;
	    call_type	 = MFW_CALL_FREE;
	    cc_stat.type = MFW_CALL_FREE;
	    
	    rdl.redial_mode = CM_REDIAL_BLACKLIST;
	    cm_signal(E_CM_REDIAL, &rdl);
	    return;
	}

	/* check the registration staus */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -