📄 smi_cal.c
字号:
GLOBAL BOOL cal_isWithinCall (void)
{
T_ACI_RETURN ret; /* holds status information */
T_ACI_CAL_LST callTable; /* holds call table */
USHORT i; /* Counter variable */
TRACE_FUNCTION ("cal_isWithinCall ()");
ret = qAT_PercentCAL (CMD_SRC_LCL, &callTable[0]);
if (ret EQ AT_CMPL)
{
/*
* searching for any non-idle call.
* Note1: This code could be simplified, the switch() maybe superflous.
* Note2: The check for having stopped tone generation maybe weak here.
*/
for (i = 0; (i < MAX_CALL_NR) AND (callTable[i].index NEQ -1); i++)
{
switch (callTable[i].status)
{
case CAL_STAT_Held:
case CAL_STAT_Active:
case CAL_STAT_Wait:
case CAL_STAT_Dial:
case CAL_STAT_DeactiveReq:
case CAL_STAT_Incomming:
case CAL_STAT_Alerting:
return TRUE; /* One call in appropriate state found */
default: /* Check next call table entry */
break;
}
}
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : cal_isNoCall |
+--------------------------------------------------------------------+
PURPOSE : This function is used to request whether no call is
listed in the call table.
returns: TRUE if the above condition is correct, otherwise
FALSE
*/
GLOBAL BOOL cal_isNoCall (void)
{
T_ACI_RETURN ret = AT_FAIL; /* holds status information */
T_ACI_CAL_LST callTable; /* holds call table */
SHORT index = -1; /* first index in call table */
TRACE_FUNCTION ("cal_isNoCall ()");
ret = qAT_PercentCAL (CMD_SRC_LCL, &callTable[0]);
if (ret EQ AT_CMPL)
index = callTable[0].index;
return (index EQ -1);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : cal_rejectCallbackInd |
+--------------------------------------------------------------------+
PURPOSE : This function is called to concentrate all reject
indications delivered by rAT_NO_CARRIER, rAT_BUSY and
rAT_NO_ANSWER.
<cmdId>: command indentity
<cId> : call id
<cbId> : callback indentity
*/
LOCAL void cal_rejectCallbackInd (T_ACI_AT_CMD cmdId,
SHORT cId,
T_MMI_RCB_ID cbId)
{
#ifdef AT_INTERPRETER
if ( cId EQ extCallId )
{
switch ( cbId )
{
case ( NO_CARRIER ):
rCI_NO_CARRIER ( cmdId, cId );
break;
case ( BUSY ):
rCI_BUSY ( cmdId, cId );
break;
case ( NO_ANSWER ):
rCI_NO_ANSWER ( cmdId, cId );
break;
}
extCallId = ACI_NumParmNotPresent;
}
else
#endif
{
if (cmdId EQ currCalCmd)
currCalCmd = AT_CMD_NONE;
switch (cmdId)
{
case (AT_CMD_D): cal_DRej (cbId); break;
case (AT_CMD_A): cal_ARej (cbId); break;
case (AT_CMD_H): cal_HRej (cbId); break;
case (AT_CMD_Z): cal_HRej (cbId); break;
case (AT_CMD_NONE):
ui_signal (UI_SIG_DISCONNECT, cal_getCause ());
break;
default:
break;
}
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : rAT_NO_CARRIER |
+--------------------------------------------------------------------+
PURPOSE : This function is called to indicated that no carrier
is present or carrier is lost.
<cmdId>: command identity
*/
GLOBAL void rAT_NO_CARRIER (T_ACI_AT_CMD cmdId, SHORT cId)
{
TRACE_FUNCTION ("rAT_NO_CARRIER");
cal_rejectCallbackInd (cmdId, cId, NO_CARRIER);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : rAT_BUSY |
+--------------------------------------------------------------------+
PURPOSE : This function is called to indicate that line is busy.
<cmdId>: command identity
*/
GLOBAL void rAT_BUSY (T_ACI_AT_CMD cmdId, SHORT cId )
{
TRACE_FUNCTION ("rAT_BUSY");
cal_rejectCallbackInd (cmdId, cId, BUSY);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : rAT_NO_ANSWER |
+--------------------------------------------------------------------+
PURPOSE : This function is called to indicate ...
<cmdId>: command identity
*/
GLOBAL void rAT_NO_ANSWER (T_ACI_AT_CMD cmdId, SHORT cId)
{
TRACE_FUNCTION ("rAT_NO_ANSWER");
cal_rejectCallbackInd (cmdId, cId, NO_ANSWER);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : cal_sendAudioToneReq |
+--------------------------------------------------------------------+
PURPOSE : This functions sends a MMI_AUDIO_TONE_REQ primitive to PL
to switch on/off a specified tone.
<callTone>: call tone
<volume>: volume
<toneStat>: tone status
*/
GLOBAL void cal_sendAudioToneReq (UBYTE callTone,
UBYTE volume,
UBYTE toneStat)
{
if (toneStat EQ TONE_SWT_OFF)
audio_StopSoundbyID (AUDIO_SPEAKER,
callTone);
else
audio_PlaySoundID (AUDIO_SPEAKER,
callTone,
volume,
toneStat);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : cal_getAbbrDial |
+--------------------------------------------------------------------+
PURPOSE : This functions is used to get the phone number used in
the context of abbreviated dialing.
<index>: abbreviated dialing index
returns: exact phone number
*/
GLOBAL CHAR* cal_getAbbrDial (UBYTE index)
{
if (index >= 0 AND index < MAX_ABBR_DIAL_NUM)
return abbrDial[index];
return "";
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : cal_setAbbrDial |
+--------------------------------------------------------------------+
PURPOSE : This functions is used to set the phone number used in
the context of abbreviated dialing.
<index>: abbreviated dialing index
<number>: exact phone number
*/
GLOBAL void cal_setAbbrDial (BYTE index, CHAR* number)
{
if (index >= 0 AND index < MAX_ABBR_DIAL_NUM AND number NEQ NULL)
{
strncpy (abbrDial[index], number, MAX_PHB_NUM_LEN - 1);
abbrDial[index][MAX_PHB_NUM_LEN - 1] = NULL_TERM;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : cal_sendDmtf |
+--------------------------------------------------------------------+
PURPOSE : This function is used to send a DMTF tone.
<dtmf>: DTMF tone
returns: status information concerning the sending
progress
*/
GLOBAL T_ACI_RETURN cal_sendDtmf (CHAR dtmf, BOOL pressed)
{
T_ACI_RETURN ret = AT_FAIL; /* holds the status information */
TRACE_FUNCTION ("cal_sendDtmf ()");
/*
*-----------------------------------------------------------------
* call to ACI function when no answer on a further ACI function
* call is expected
*-----------------------------------------------------------------
*/
if (currDTMFCmd EQ AT_CMD_NONE)
{
ret = sAT_PlusVTS (CMD_SRC_LCL, dtmf, ((pressed)?
VTS_MOD_ManStart:
VTS_MOD_ManStop));
currDTMFCmd = AT_CMD_VTS;
/*
*---------------------------------------------------------------
* process result code of ACI function call
*---------------------------------------------------------------
*/
switch (ret)
{
case (AT_CMPL):
rAT_OK (AT_CMD_VTS);
break;
case (AT_EXCT):
break;
default:
rAT_PlusCME (AT_CMD_VTS, CME_ERR_Unknown);
break;
}
}
else if( currDTMFCmd EQ AT_CMD_VTS )
{
/*
*---------------------------------------------------------------
* abort current +VTS command
*---------------------------------------------------------------
*/
ret = sAT_Abort (CMD_SRC_LCL, AT_CMD_VTS);
currDTMFCmd = AT_CMD_NONE;
/*
*---------------------------------------------------------------
* process result code of ACI function call
*---------------------------------------------------------------
*/
switch (ret)
{
case (AT_CMPL):
rAT_OK (AT_CMD_NONE); // Is this correct ...?
break;
default:
rAT_PlusCME (AT_CMD_NONE, CME_ERR_Unknown); // Is this correct ...?
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_VtsCnf |
+--------------------------------------------------------------------+
PURPOSE : This function is called when sending of a DTMF tone is
successfull
*/
GLOBAL void cal_VtsCnf (T_ACI_AT_CMD cmdId)
{
TRACE_FUNCTION ("cal_VtsCnf ()");
currDTMFCmd = AT_CMD_NONE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : cal_VtsRej |
+--------------------------------------------------------------------+
PURPOSE : This function is called when sending of a DTMF tone
failed.
<err>: error code
*/
GLOBAL void cal_VtsRej (T_ACI_AT_CMD cmdId,
T_ACI_CME_ERR err)
{
TRACE_FUNCTION ("cal_VtsRej ()");
currDTMFCmd = AT_CMD_NONE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : rAT_PercentCPI |
+--------------------------------------------------------------------+
PURPOSE : This function is used to indicate additional information
about call progress.
<cId>: call identity
<msgType>: source of information
<ibt>: in-band tones indication
<tch>: traffic channel indication
*/
GLOBAL void rAT_PercentCPI ( SHORT cId,
T_ACI_CPI_MSG msgType,
T_ACI_CPI_IBT ibt,
T_ACI_CPI_TCH tch )
{
TRACE_FUNCTION ("rAT_PercentCPI()");
if (msgType NEQ CPI_MSG_NotPresent)
currMsgType = msgType;
if (ibt NEQ CPI_IBT_NotPresent)
currIbt = ibt;
if (tch NEQ CPI_TCH_NotPresent)
currTch = tch;
if (ibt EQ CPI_IBT_True AND
tch EQ CPI_TCH_True )
{
ui_signal (UI_SIG_NIBT, NIBT_OFF);
}
else
{
if (msgType EQ CPI_MSG_Disc)
{
ui_signal (UI_SIG_NIBT, NIBT_DISC);
}
else if (msgType EQ CPI_MSG_Alert)
{
ui_signal (UI_SIG_NIBT, NIBT_ALERT);
}
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_CAL |
| STATE : code ROUTINE : rAT_PercentCTYI |
+--------------------------------------------------------------------+
PURPOSE : Indication about TTY service
*/
GLOBAL void rAT_PercentCTYI (T_ACI_CTTY_NEG neg,
T_ACI_CTTY_TRX trx)
{
TRACE_FUNCTION ("rAT_PercentCTYI()");
// if (cmhPrm[CMD_SRC_LCL].ccCmdPrm.CTTYmode EQ CTTY_MOD_ENABLE)
TRACE_EVENT_P2 ("[0]CTYI: %d, %d", neg, trx);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -