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

📄 smi_cal.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 4 页
字号:
/* 
+----------------------------------------------------------------------------- 
|  Project :  GSM-F&D (8411)
|  Modul   :  SMI_CAL
+----------------------------------------------------------------------------- 
|  Copyright 2002 Texas Instruments Berlin, AG 
|                 All rights reserved. 
| 
|                 This file is confidential and a trade secret of Texas 
|                 Instruments Berlin, AG 
|                 The receipt of or possession of this file does not convey 
|                 any rights to reproduce or disclose its contents or to 
|                 manufacture, use, or sell anything it may describe, in 
|                 whole, or in part, without the specific written consent of 
|                 Texas Instruments Berlin, AG. 
+----------------------------------------------------------------------------- 
|  Purpose :  This module is used to handle all call related aspects
|             of the SMI.
+----------------------------------------------------------------------------- 
*/ 

#ifndef SMI_CAL_C
#define SMI_CAL_C
#endif

#define ENTITY_SMI

/*==== INCLUDES ===================================================*/
#include <string.h>
#include <stdio.h>
#include "typedefs.h"
#include "vsi.h"
#include "custom.h"
#include "gsm.h"
#include "prim.h"
#include "tok.h"
#include "message.h"

#include "aci_cmh.h"
#include "ksd.h"
#include "aca.h"
#include "smi.h"

#include "gdi.h"
#include "audio.h"

/*==== CONSTANTS ==================================================*/

#define MAX_ABBR_DIAL_NUM 10     /* maximum number of phone        */
                                 /* numbers used for abbreviated   */
                                 /* dialing                        */

/*==== TYPES ======================================================*/

#ifdef AT_INTERPRETER
EXTERN SHORT extCallId;
#endif

/*==== EXPORT =====================================================*/

/*==== VARIABLES ==================================================*/

T_ACI_CPI_MSG currMsgType      = CPI_MSG_NotPresent;
T_ACI_CPI_IBT currIbt          = CPI_IBT_NotPresent;
T_ACI_CPI_TCH currTch          = CPI_TCH_NotPresent;

LOCAL T_ACI_AT_CMD currCalCmd  = AT_CMD_NONE;
LOCAL T_ACI_AT_CMD currDTMFCmd = AT_CMD_NONE;
LOCAL T_ACI_AT_CMD currAbrtCmd = AT_CMD_NONE;

LOCAL SHORT CHLDmode; /* holds chld mode                          */

                      /* holds the phone numbers for abbreviated  */
LOCAL CHAR abbrDial[MAX_ABBR_DIAL_NUM][MAX_PHB_NUM_LEN]; /* dialing */

/*==== FUNCTIONS ==================================================*/
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_initialize           |
+--------------------------------------------------------------------+

  PURPOSE : This function is used to initialize this modul.
*/
GLOBAL void cal_initialize (BOOL isStartup)
{
  USHORT i;

  TRACE_FUNCTION ("cal_initialize()");
  
  currCalCmd  = AT_CMD_NONE;
  currDTMFCmd = AT_CMD_NONE;
  currAbrtCmd = AT_CMD_NONE;

  /*
   *-----------------------------------------------------------------
   * initialize abbreviated dialing numbers
   *-----------------------------------------------------------------
   */
  for (i = 0; i < MAX_ABBR_DIAL_NUM; i++)
    abbrDial[i][0] = NULL_TERM;

  /*
   *-----------------------------------------------------------------
   * initialize CHLD parameter
   *-----------------------------------------------------------------
   */
  CHLDmode = CHLD_MOD_NotPresent;

  currMsgType = CPI_MSG_NotPresent;
  currIbt     = CPI_IBT_NotPresent;
  currTch     = CPI_TCH_NotPresent;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_getCause             |
+--------------------------------------------------------------------+

  PURPOSE : This function returns the error causes after call is
            disconnected or call is  rejected or during in-call 
            modification.
*/
LOCAL USHORT cal_getCause (void)
{
  USHORT cause = NOT_PRESENT_16BIT;
  
  TRACE_FUNCTION ("cal_getCause ()");

  qAT_PlusCEER (CMD_SRC_LCL, &cause);

  return cause;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_setupCall            |
+--------------------------------------------------------------------+

  PURPOSE : This function is called to stimulate a call setup by the
            ACI.

            <dial>:  holds all call related information

            returns: status information concerning the setup progress
*/
GLOBAL T_ACI_RETURN cal_setupCall (T_KSD_DIAL* dial)
{
  T_ACI_RETURN ret = AT_FAIL; /* holds the status information */

  TRACE_FUNCTION ("cal_setupCall ()");
  
  /*
   *-----------------------------------------------------------------
   * call to ACI function when no answer on a further ACI function
   * call is expected
   *-----------------------------------------------------------------
   */
  if (currCalCmd EQ AT_CMD_NONE)
  {
    ret = sAT_Dn (CMD_SRC_LCL,
                  dial->number,  dial->clirOvrd,
                  dial->cugCtrl, dial->callType);

    currCalCmd = AT_CMD_D;

    /*
     *---------------------------------------------------------------
     * process result code of ACI function call
     *---------------------------------------------------------------
     */   
    switch (ret)
    {
      case (AT_CMPL):
        ui_signal (UI_SIG_OUTGOING_CALL, dial->number);
        rAT_OK (currCalCmd);      
        break;

      case (AT_EXCT):
        ui_signal (UI_SIG_OUTGOING_CALL, dial->number);
        break;

      default:
        rAT_PlusCME (currCalCmd, CME_ERR_Unknown);
        break;
    }
  }
  else
  {
    /*
     *---------------------------------------------------------------
     * error handling while waiting for answer on further ACI
     * function call
     *---------------------------------------------------------------
     */
    ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_Unknown);

    ret = AT_CMPL;
  }

  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_DRejWhilePlusCME     |
+--------------------------------------------------------------------+

  PURPOSE : This function is called when an error occured during call
            setup. It handles the errors signaled by the ACI callback
            function rAT_PlusCME.

            <err>: error code
*/
GLOBAL void cal_DRejWhilePlusCME (T_ACI_AT_CMD  cmdId, 
                                  T_ACI_CME_ERR err)
{
  TRACE_FUNCTION ("cal_DRejWhilePlusCME ()");

  if (cmdId EQ currCalCmd)
    currCalCmd = AT_CMD_NONE;

  if (currAbrtCmd EQ AT_CMD_ABRT)
  {
    currAbrtCmd = AT_CMD_NONE;
    
    ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_FailedToAbort);
  }
  else
  {
    ui_signal (UI_SIG_UNHND_CME_ERR, err);

    if (currIbt NEQ CPI_IBT_True OR currTch NEQ CPI_TCH_True)
      ui_signal (UI_SIG_NIBT, NIBT_DISC);
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_DRej                 |
+--------------------------------------------------------------------+

  PURPOSE : This function is called when an error occured during call
            setup or while call is in progress. It handles the errors
            signaled by the ACI callback functions rAT_NO_CARRIER,
            rAT_BUSY and rAT_NO_ANSWER.

            <cbId>: identity of the related ACI callback function
*/
GLOBAL void cal_DRej (T_MMI_RCB_ID cbId)
{
  TRACE_FUNCTION ("cal_DRej ()");

  switch (cbId)
  {
    case (NO_CARRIER):
      ui_signal (UI_SIG_DISCONNECT, cal_getCause ());

      if (currIbt NEQ CPI_IBT_True OR currTch NEQ CPI_TCH_True)
        ui_signal (UI_SIG_NIBT, NIBT_DISC);
      break;

    case (BUSY):
      ui_signal (UI_SIG_BUSY);
      break;

    case (NO_ANSWER):
      ui_signal (UI_SIG_NO_ANSWER);

      if (currIbt NEQ CPI_IBT_True OR currTch NEQ CPI_TCH_True)
        ui_signal (UI_SIG_NIBT, NIBT_DISC);
      break;

    default:
      ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_Unknown);

      if (currIbt NEQ CPI_IBT_True OR currTch NEQ CPI_TCH_True)
        ui_signal (UI_SIG_NIBT, NIBT_DISC);
      break;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_DCnf                 |
+--------------------------------------------------------------------+

  PURPOSE : This function is called when call setup is successfull.
*/
GLOBAL void cal_DCnf (T_ACI_AT_CMD cmdId)
{
  TRACE_FUNCTION ("cal_DCnf ()");

  if (cmdId EQ currCalCmd)
  {
    currCalCmd = AT_CMD_NONE;

    if ( currAbrtCmd EQ AT_CMD_ABRT )
    {
      currAbrtCmd = AT_CMD_NONE;
 
      ui_signal (UI_SIG_DISCONNECT, cal_getCause ());

      if (currIbt NEQ CPI_IBT_True OR currTch NEQ CPI_TCH_True)
        ui_signal (UI_SIG_NIBT, NIBT_DISC);
    }
    else
    {
      ui_signal (UI_SIG_CONNECTED);

      if (currIbt NEQ CPI_IBT_True OR currTch NEQ CPI_TCH_True)
        ui_signal (UI_SIG_NIBT, NIBT_OFF);
    }
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_releaseCall          |
+--------------------------------------------------------------------+

  PURPOSE : This function is called to stimulate a call release by
            the ACI.

            returns: status information concerning the release
                     progress
*/
GLOBAL T_ACI_RETURN cal_releaseCall (void)
{
  T_ACI_RETURN ret = AT_FAIL; /* holds the status information */
  
  TRACE_FUNCTION ("cal_releaseCall ()");

  /*
   *-----------------------------------------------------------------
   * call to ACI function when no answer on a further ACI function
   * call is expected
   *-----------------------------------------------------------------
   */
  if (currCalCmd EQ AT_CMD_NONE)
  {
    ret = sAT_H(CMD_SRC_LCL);

    /*
     *---------------------------------------------------------------
     * process result code of ACI function call
     *---------------------------------------------------------------
     */   
    switch (ret)
    {
      case (AT_CMPL):
        /* Condat RT sends hook on command twice */
        
        if (currIbt NEQ CPI_IBT_True OR currTch NEQ CPI_TCH_True)
          ui_signal (UI_SIG_NIBT, NIBT_OFF);
        
        break;

      case (AT_EXCT):
        currCalCmd = AT_CMD_H;
        ui_signal (UI_SIG_DISCONNECTING);
        break;

      case (AT_FAIL):
        /* Condat RT sends hook on command twice */
        
        if (currIbt NEQ CPI_IBT_True OR currTch NEQ CPI_TCH_True)
          ui_signal (UI_SIG_NIBT, NIBT_OFF);
        
        break;

      default:
        currCalCmd = AT_CMD_H;
        rAT_PlusCME (currCalCmd, CME_ERR_Unknown);
        break;
    }
  }
  else
  {
    switch (currCalCmd)
    {
      case (AT_CMD_D):
      case (AT_CMD_A):
        if (currAbrtCmd EQ AT_CMD_ABRT)
        {
          ret = AT_CMPL;
        }
        else
        {
          if (aca_setAbrtCmd (currCalCmd))
          {
            ret = sAT_Abort (CMD_SRC_LCL, currCalCmd);

            currAbrtCmd = AT_CMD_ABRT;
  
            switch (ret)
            {
              case (AT_EXCT):
                break;

              case (AT_CMPL):
                rAT_OK (currAbrtCmd);
                break;

              default:
                rAT_PlusCME (currAbrtCmd, CME_ERR_FailedToAbort);
              break;
            }
          }
          else
          {
            ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_FailedToAbort);
            ret = AT_FAIL;
          }
        }
        break;

      default:
        ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_Unknown);
        ret = AT_CMPL;
        break;
    }
  }

  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_HRejWhilePlusCME     |
+--------------------------------------------------------------------+

  PURPOSE : This function is called when an error occured during call
            release. It handles the errors signaled by the ACI
            callback function rAT_PlusCME.

            <err>: error code
*/
GLOBAL void cal_HRejWhilePlusCME (T_ACI_AT_CMD  cmdId, 

⌨️ 快捷键说明

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