📄 smi_cal.c
字号:
/*
+-----------------------------------------------------------------------------
| 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 + -