line source
/*
+-----------------------------------------------------------------------------
| Project : GSM-PS (6147)
| Modul : CMH_CCQ
+-----------------------------------------------------------------------------
| 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 provides the query functions related to the
| protocol stack adapter for mobility management.
+-----------------------------------------------------------------------------
*/
#ifndef CMH_CCQ_C
#define CMH_CCQ_C
#endif
#include "config.h"
#include "fixedconf.h"
#include "condat-features.h"
#include "aci_conf.h"
/*==== INCLUDES ===================================================*/
#include "aci_all.h"
#include "aci_cmh.h"
#ifdef FAX_AND_DATA
#include "aci_fd.h"
#endif /* of #ifdef FAX_AND_DATA */
#include "psa.h"
#include "psa_cc.h"
#include "cmh.h"
#include "cmh_cc.h"
#include "aoc.h"
#include "audio.h"
#include "dti_conn_mng.h"
#include "psa_sim.h"
#include "cmh_sim.h"
#include "psa_mm.h"
/*==== CONSTANTS ==================================================*/
#ifdef TI_PS_FF_AT_P_CMD_RDLB
EXTERN T_ACI_CC_REDIAL_BLACKL * cc_blacklist_ptr;
#endif /* TI_PS_FF_AT_P_CMD_RDLB */
const UBYTE aci_clcc_dir [5][2] = {
{ NO_VLD_CT, NO_VLD_CT },
{ CLCC_DIR_MOC, CLCC_DIR_MOC },
{ CLCC_DIR_MTC, CLCC_DIR_MTC },
{ CLCC_DIR_MOC, CLCC_DIR_MOC_NI },
{ CLCC_DIR_MOC, CLCC_DIR_MOC_RDL }
};
/*==== EXPORT =====================================================*/
/*==== VARIABLES ==================================================*/
#ifdef TI_PS_FF_AT_P_CMD_CUSCFG
EXTERN T_ACI_CUSCFG_PARAMS cuscfgParams;
#endif /* TI_PS_FF_AT_P_CMD_CUSCFG */
GLOBAL T_PCEER causeMod = P_CEER_mod; /* Hold which module caused the extended error */
GLOBAL SHORT causeCeer; /* Hold extended error for sim, mm and ss */
EXTERN UBYTE std;
/*==== FUNCTIONS ==================================================*/
LOCAL T_ACI_RETURN qAT_plus_percent_CLCC( T_ACI_CMD_SRC srcId,
T_ACI_CLCC_CALDESC *calLst,
T_ACI_AT_CMD at_cmd_id,
SHORT rdlcId );
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PlusCSTA |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the +CSTA? AT command
which returns the current setting for type of address.
<toa>: type of address.
*/
GLOBAL T_ACI_RETURN qAT_PlusCSTA ( T_ACI_CMD_SRC srcId,
T_ACI_TOA * toa )
{
T_CC_CMD_PRM * pCCCmdPrm; /* points to CC command parameters */
TRACE_FUNCTION ("qAT_PlusCSTA()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
pCCCmdPrm = &cmhPrm[srcId].ccCmdPrm;
/*
*-------------------------------------------------------------------
* fill in parameters
*-------------------------------------------------------------------
*/
*toa = pCCCmdPrm -> CSTAtoa;
return( AT_CMPL );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PlusCMOD |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the +CMOD? AT command
which returns the current setting for call mode.
<mode>: call mode.
*/
GLOBAL T_ACI_RETURN qAT_PlusCMOD ( T_ACI_CMD_SRC srcId,
T_ACI_CMOD_MOD* mode )
{
TRACE_FUNCTION ("qAT_PlusCMOD()");
/* check command source */
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
/* fill in parameters */
*mode = ccShrdPrm.CMODmode;
return( AT_CMPL );
}
#ifdef FAX_AND_DATA
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PlusCBST |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the +CBST? AT command
which returns the current setting for bearer service type.
*/
GLOBAL T_ACI_RETURN qAT_PlusCBST ( T_ACI_CMD_SRC srcId,
T_ACI_BS_SPEED* speed,
T_ACI_CBST_NAM* name,
T_ACI_CBST_CE* ce)
{
TRACE_FUNCTION ("qAT_PlusCBST()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
/*
*-------------------------------------------------------------------
* fill in parameters
*-------------------------------------------------------------------
*/
*speed = ccShrdPrm.CBSTspeed;
*name = ccShrdPrm.CBSTname;
*ce = ccShrdPrm.CBSTce;
return( AT_CMPL );
}
#endif /* FAX_AND_DATA */
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PlusCCUG |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the +CCUG AT command
which is responsible to query the parameters for closed user
group supplementary services.
<mode> : CUG mode.
<index> : CUG index.
<info> : CUG info.
*/
GLOBAL T_ACI_RETURN qAT_PlusCCUG ( T_ACI_CMD_SRC srcId,
T_ACI_CCUG_MOD *mode,
T_ACI_CCUG_IDX *index,
T_ACI_CCUG_INFO *info)
{
T_CC_CMD_PRM * pCCCmdPrm; /* points to SS command parameters */
TRACE_FUNCTION ("qAT_PlusCCUG()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
pCCCmdPrm = &cmhPrm[srcId].ccCmdPrm;
/*
*-------------------------------------------------------------------
* fill in parameters
*-------------------------------------------------------------------
*/
*mode = pCCCmdPrm -> CCUGmode;
*index = pCCCmdPrm -> CCUGidx;
*info = pCCCmdPrm -> CCUGinfo;
return( AT_CMPL );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PlusCLCC |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the +CLCC? AT command
which returns the current call status.
*/
GLOBAL T_ACI_RETURN qAT_PlusCLCC ( T_ACI_CMD_SRC srcId,
T_ACI_CLCC_CALDESC *calLst)
{
/* Implements Measure 47 and 216 */
return ( qAT_plus_percent_CLCC(srcId, calLst, AT_CMD_CLCC, rdlPrm.rdlcId) );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PercentCLCC |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the %CLCC? AT command
which returns the current call status.
*/
GLOBAL T_ACI_RETURN qAT_PercentCLCC ( T_ACI_CMD_SRC srcId,
T_ACI_CLCC_CALDESC *calLst)
{
/* Implements Measure 47 and 216 */
return ( qAT_plus_percent_CLCC(srcId, calLst, AT_CMD_P_CLCC, NO_ENTRY) );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PlusCEER |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the +CEER AT command
which returns an extended error report.
*/
GLOBAL T_ACI_RETURN qAT_PlusCEER ( T_ACI_CMD_SRC srcId,
USHORT *cause)
{
T_CC_CALL_TBL *ctbFail = ccShrdPrm.ctb[ccShrdPrm.cIdFail];
TRACE_FUNCTION ("qAT_PlusCEER()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
/*
*-------------------------------------------------------------------
* get error report
*-------------------------------------------------------------------
*/
/* Extended error report to indicate attach related problems */
if ((causeCeer NEQ CEER_NotPresent) AND (causeMod EQ P_CEER_mm))
{
*cause = CAUSE_MAKE(DEFBY_CONDAT, ORIGSIDE_NET, MM_ORIGINATING_ENTITY, causeCeer);
return( AT_CMPL );
}
if ((causeCeer NEQ CEER_NotPresent) AND (causeMod EQ P_CEER_ss))
{
*cause = CAUSE_MAKE(DEFBY_CONDAT, ORIGSIDE_NET, SS_ORIGINATING_ENTITY, causeCeer);
return( AT_CMPL );
}
if ((causeCeer EQ P_CEER_ACMMaxReachedOrExceeded) AND (causeMod EQ P_CEER_sim)) /* ACI cause check */
{
*cause = CAUSE_MAKE(DEFBY_CONDAT, ORIGSIDE_MS, MNCC_ACI_ORIGINATING_ENTITY, P_CEER_ACMMaxReachedOrExceeded);
return( AT_CMPL );
}
if ((causeCeer EQ P_CEER_InvalidFDN) AND (causeMod EQ P_CEER_sim)) /* ACI cause check */
{
*cause = CAUSE_MAKE(DEFBY_CONDAT, ORIGSIDE_MS, MNCC_ACI_ORIGINATING_ENTITY, P_CEER_InvalidFDN );
return( AT_CMPL );
}
if( ccShrdPrm.cIdFail < 0 OR ccShrdPrm.cIdFail > MAX_CALL_NR )
{
*cause = CAUSE_MAKE(DEFBY_STD, ORIGSIDE_MS, MNCC_ACI_ORIGINATING_ENTITY, NOT_PRESENT_8BIT);
return( AT_CMPL );
}
/*
* This code has to become better understood, probably it can be simplified
* Be sure to use ctbFail here because TI compiler 1.22e may have a problem
* otherwise.
*/
if (ctbFail NEQ NULL)
{
/* Call table entry still existant */
if (GET_CAUSE_VALUE(ctbFail->rejCs) NEQ NOT_PRESENT_8BIT)
{
*cause = ctbFail->rejCs;
}
else if (GET_CAUSE_VALUE(ctbFail->nrmCs) NEQ NOT_PRESENT_8BIT)
{
*cause = ctbFail->nrmCs;
}
else if (GET_CAUSE_VALUE(ctbFail->rslt) NEQ NOT_PRESENT_8BIT)
{
*cause = ctbFail->rslt;
}
else
{
/* in case network has sent no extended report */
*cause = CAUSE_MAKE(DEFBY_STD, ORIGSIDE_MS, MNCC_ACI_ORIGINATING_ENTITY, NOT_PRESENT_8BIT);
}
}
else
{
/* Call table entry already freed */
*cause = ccShrdPrm.ccCs[ccShrdPrm.cIdFail];
}
return AT_CMPL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCS |
| STATE : code ROUTINE : sAT_PlusPAS |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the +CPAS AT command
which returns the phone activity status.
*/
GLOBAL T_ACI_RETURN qAT_PlusCPAS ( T_ACI_CMD_SRC srcId,
T_ACI_CPAS_PAS *pas)
{
SHORT cId; /* holds call id */
T_ACI_CFUN_FUN cfun_stat;
TRACE_FUNCTION ("qAT_PlusCPAS()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
/*
*-------------------------------------------------------------------
* get phone activity status
*-------------------------------------------------------------------
*/
/* check if power is off (+CFUN=0) */
if ( qAT_PlusCFUN(srcId, &cfun_stat) EQ AT_FAIL )
{
return( AT_FAIL );
}
if ( cfun_stat EQ CFUN_FUN_Minimum )
{
*pas = CPAS_PAS_Asleep;
return( AT_CMPL );
}
/* search for active call */
cId = psaCC_ctbFindCall( OWN_SRC_INV, CS_ACT, NO_VLD_CT );
if( cId NEQ NO_ENTRY )
{
*pas = CPAS_PAS_CallProg;
return( AT_CMPL );
}
/* search for call on hold */
cId = psaCC_ctbFindCall( OWN_SRC_INV, CS_HLD, NO_VLD_CT );
if( cId NEQ NO_ENTRY )
{
*pas = CPAS_PAS_CallProg;
return( AT_CMPL );
}
/* search for an incoming call */
cId = psaCC_ctbFindCall( (T_OWN)CMD_SRC_NONE, CS_ACT_REQ, CT_MTC );
if( cId NEQ NO_ENTRY )
{
*pas = CPAS_PAS_Ring;
return( AT_CMPL );
}
/* ready to accept commands */
*pas = CPAS_PAS_Ready;
return( AT_CMPL );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCS |
| STATE : code ROUTINE : sAT_PlusCSNS |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the +CSNS AT command
which returns the single numbering scheme mode.
*/
GLOBAL T_ACI_RETURN qAT_PlusCSNS ( T_ACI_CMD_SRC srcId,
T_ACI_CSNS_MOD *mode)
{
TRACE_FUNCTION ("qAT_PlusCSNS()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
/*
*-------------------------------------------------------------------
* get SNS mode
*-------------------------------------------------------------------
*/
*mode = (T_ACI_CSNS_MOD)ccShrdPrm.snsMode;
return( AT_CMPL );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PercentCAL |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the %CAL? AT command
which returns the current call status.
03.06.03 SKA: This function is called by MFW only. It uses
this function to get the called number for emitting on display.
But there is a protocoll between ACI and MFW which says, that
the RAT_COLP signal sent by ACI to MFW at receiving of MNCC_SETUP_CNF
to tell MFW/BMI whether it can emit the called number caused by the
content of mncc_setup_cnf->connected_number.present sent by the network or not.
If present = PRES_PRES_REST, ACI does not send RAT_COLP to MFW, but in this
function ACI did copy the number to the MFW callTable structure!
Now, ACI does not copy the called number in case of PRES_PRES_REST and
MFW/BMI will emit an empty string on display. Therefore we could save
a lot of memory and internal traffic between ACI and MFW, if we keep
all the logic within ACI!
*/
GLOBAL T_ACI_RETURN qAT_PercentCAL( T_ACI_CMD_SRC srcId,
T_ACI_CAL_ENTR* callTable )
{
SHORT ctbIdx; /* holds call table index */
SHORT lstIdx; /* holds call list index */
TRACE_FUNCTION ("qAT_PercentCAL()");
/*
*-------------------------------------------------------------------
* for every call of the call table
*-------------------------------------------------------------------
*/
for( ctbIdx = 0, lstIdx = 0; ctbIdx < MAX_CALL_NR; ctbIdx++ )
{
if (ccShrdPrm.ctb[ctbIdx] NEQ NULL)
{
/*
*---------------------------------------------------------------
* fill in call type
*---------------------------------------------------------------
*/
switch( psaCC_ctb(ctbIdx)->calType )
{
case( CT_MOC ):
case( CT_MOC_RDL ):
case( CT_NI_MOC ):
callTable[lstIdx].calType = CAL_TYPE_MOC;
break;
case( CT_MTC ):
callTable[lstIdx].calType = CAL_TYPE_MTC;
break;
default:
callTable[lstIdx].calType = CAL_TYPE_NotPresent;
}
/*
*---------------------------------------------------------------
* fill in call status
*---------------------------------------------------------------
*/
switch( psaCC_ctb(ctbIdx)->calStat )
{
case( CS_ACT_REQ ):
switch( psaCC_ctb(ctbIdx)->calType )
{
case( CT_MOC ):
case( CT_MOC_RDL ):
case( CT_NI_MOC ):
if( psaCC_ctb(ctbIdx)->alrtStat EQ AS_SND )
{
callTable[lstIdx].status = CAL_STAT_Alerting;
}
else
{
callTable[lstIdx].status = CAL_STAT_Dial;
}
break;
case( CT_MTC ):
if( psaCC_ctbFindCall ( (T_OWN)CMD_SRC_NONE, CS_ACT_REQ, NO_VLD_CT )
NEQ -1 )
{
callTable[lstIdx].status = CAL_STAT_Wait;
}
else
{
callTable[lstIdx].status = CAL_STAT_Incomming;
}
break;
default:
callTable[lstIdx].status = CAL_STAT_NotPresent;
}
break;
case( CS_ACT ):
case( CS_MDF_REQ ):
case( CS_HLD_REQ ):
callTable[lstIdx].status = CAL_STAT_Active;
break;
case( CS_HLD ):
callTable[lstIdx].status = CAL_STAT_Held;
break;
case( CS_IDL ):
case( CS_DSC_REQ ):
callTable[lstIdx].status = CAL_STAT_DeactiveReq;
/*
* reset of all other values
*/
callTable[lstIdx].mpty = CAL_MPTY_NotPresent;
callTable[lstIdx].type.ton = TON_NotPresent;
callTable[lstIdx].type.npi = NPI_NotPresent;
callTable[lstIdx].number[0] = '\0';
#ifdef NO_ASCIIZ
callTable[lstIdx].alpha.cs = CS_NotPresent;
callTable[lstIdx].alpha.len = 0;
#else /* #ifdef NO_ASCIIZ */
callTable[lstIdx].alpha[0] = '\0';
#endif /* #ifdef NO_ASCIIZ */
callTable[lstIdx].calType = CAL_TYPE_NotPresent;
callTable[lstIdx].calMode = CAL_MODE_NotPresent;
callTable[lstIdx].calOwner = CAL_OWN_NotPresent;
/*
* indes and next entry, because of the continue statement
*/
callTable[lstIdx].index = ctbIdx+1;
lstIdx++;
continue;
case( CS_CPL_REQ ):
continue;
}
/*
*---------------------------------------------------------------
* fill in number of connected party
*---------------------------------------------------------------
*/
switch( psaCC_ctb(ctbIdx)->calType )
{
case( CT_MOC ):
case( CT_MOC_RDL ):
case( CT_NI_MOC ):
/* presentation restricted FTA 31.1.4.2 procedure 1 */
/* number not available due to interworking FTA 31.1.4.2 procedure 2 */
if ((psaCC_ctb(ctbIdx)->clgPty.present NEQ MNCC_PRES_NOT_PRES) /* any .present indicator received from MSC? */
AND (psaCC_ctb(ctbIdx)->clgPty.c_num EQ 0) ) /* but no number available? */
{
/*
* this prevents MFW/BMI to emit the called number, but it
* ignores the NOT received COLP signal. Without a COLP signal
* MFW/BMI should not emit the called number. (FTA 31.1.4.2)
*/
callTable[lstIdx].number[0] = '\0';
callTable[lstIdx].type.ton = TON_NotPresent;
callTable[lstIdx].type.npi = NPI_NotPresent;
}
else
{
psaCC_ctbCldAdr2Num (ctbIdx, callTable[lstIdx].number,
MAX_CC_ORIG_NUM_LEN);
callTable[lstIdx].type.ton = (T_ACI_TOA_TON)psaCC_ctb(ctbIdx)->cldPty.ton;
callTable[lstIdx].type.npi = (T_ACI_TOA_NPI)psaCC_ctb(ctbIdx)->cldPty.npi;
}
break;
case( CT_MTC ):
psaCC_ctbClrAdr2Num (ctbIdx, callTable[lstIdx].number,
MAX_CC_ORIG_NUM_LEN);
callTable[lstIdx].type.ton = (T_ACI_TOA_TON)psaCC_ctb(ctbIdx)->clgPty.ton;
callTable[lstIdx].type.npi = (T_ACI_TOA_NPI)psaCC_ctb(ctbIdx)->clgPty.npi;
break;
case( NO_VLD_CT ):
default:
callTable[lstIdx].number[0] = '\0';
callTable[lstIdx].type.ton = TON_NotPresent;
callTable[lstIdx].type.npi = NPI_NotPresent;
break;
}
#ifdef NO_ASCIIZ
memcpy( ( UBYTE* ) &callTable[lstIdx].alpha,
( UBYTE* ) &psaCC_ctb(ctbIdx)->alphIdUni,
sizeof( T_ACI_PB_TEXT ) );
#else /* NO_ASCIIZ */
memcpy( callTable[lstIdx].alpha,
psaCC_ctb(ctbIdx)->alphIdUni.data,
psaCC_ctb(ctbIdx)->alphIdUni.len );
cmh_cvtFromDefGsm ( ( CHAR* ) psaCC_ctb(ctbIdx)->alphIdUni.data,
( USHORT ) psaCC_ctb(ctbIdx)->alphIdUni.len,
callTable[lstIdx].alpha );
#endif /* NO_ASCIIZ */
/*
*---------------------------------------------------------------
* fill in in-band tones setting
*---------------------------------------------------------------
*/
switch( psaCC_ctb(ctbIdx)->inBndTns )
{
case( TRUE ):
callTable[lstIdx].ibtUse = CAL_IBT_TRUE;
break;
case( FALSE ):
callTable[lstIdx].ibtUse = CAL_IBT_FALSE;
break;
}
/*
*---------------------------------------------------------------
* fill in call mode
*---------------------------------------------------------------
*/
switch( cmhCC_getcalltype(ctbIdx) )
{
case( VOICE_CALL ):
switch( psaCC_ctb(ctbIdx)->BC
[(psaCC_ctb(ctbIdx)->curBC EQ 0)?1:0].
bearer_serv)
{
case( MNCC_BEARER_SERV_ASYNC ):
if( psaCC_ctb(ctbIdx)->rptInd EQ MNCC_RI_CIRCULAR )
callTable[lstIdx].calMode = CAL_MODE_VAD_Voice;
else
callTable[lstIdx].calMode = CAL_MODE_VFD_Voice;
break;
case( MNCC_BEARER_SERV_FAX ):
callTable[lstIdx].calMode = CAL_MODE_VAF_Voice;
break;
case( MNCC_BEARER_SERV_NOT_PRES ):
callTable[lstIdx].calMode = CAL_MODE_Voice;
break;
default:
callTable[lstIdx].calMode = CAL_MODE_Unknown;
}
break;
#ifdef FAX_AND_DATA
case( TRANS_CALL ):
case( NON_TRANS_CALL ):
switch( psaCC_ctb(ctbIdx)->BC
[(psaCC_ctb(ctbIdx)->curBC EQ 0)?1:0].
bearer_serv)
{
case( MNCC_BEARER_SERV_SPEECH ):
if( psaCC_ctb(ctbIdx)->rptInd EQ MNCC_RI_CIRCULAR )
callTable[lstIdx].calMode = CAL_MODE_VAD_Data;
else
callTable[lstIdx].calMode = CAL_MODE_VFD_Data;
break;
case( MNCC_BEARER_SERV_NOT_PRES ):
callTable[lstIdx].calMode = CAL_MODE_Data;
break;
default:
callTable[lstIdx].calMode = CAL_MODE_Unknown;
}
break;
case( FAX_CALL ):
switch( psaCC_ctb(ctbIdx)->BC
[(psaCC_ctb(ctbIdx)->curBC EQ 0)?1:0].
bearer_serv)
{
case( MNCC_BEARER_SERV_SPEECH ):
callTable[lstIdx].calMode = CAL_MODE_VAF_Fax;
break;
case( MNCC_BEARER_SERV_NOT_PRES ):
callTable[lstIdx].calMode = CAL_MODE_Fax;
break;
default:
callTable[lstIdx].calMode = CAL_MODE_Unknown;
}
break;
#endif /* #ifdef FAX_AND_DATA */
#if defined CO_UDP_IP || defined(FF_GPF_TCPIP)
/* SPR#1983 - SH - Identify WAP call */
#ifdef CO_UDP_IP
case( UDPIP_CALL ):
/*fallthrough if both defined*/
#endif
#if defined(FF_GPF_TCPIP)
case (TCPIP_CALL):
#endif /* FF_GPF_TCPIP */
switch( psaCC_ctb(ctbIdx)->BC
[(psaCC_ctb(ctbIdx)->curBC EQ 0)?1:0].
bearer_serv)
{
case( MNCC_BEARER_SERV_SPEECH ):
if( psaCC_ctb(ctbIdx)->rptInd EQ MNCC_RI_CIRCULAR )
callTable[lstIdx].calMode = CAL_MODE_VAD_Data;
else
callTable[lstIdx].calMode = CAL_MODE_VFD_Data;
break;
case( MNCC_BEARER_SERV_NOT_PRES ):
callTable[lstIdx].calMode = CAL_MODE_Data;
break;
default:
callTable[lstIdx].calMode = CAL_MODE_Unknown;
break;
}
break;
#endif /* (CO_UDP_IP) || defined(FF_GPF_TCPIP) */
default:
callTable[lstIdx].calMode = CAL_MODE_Unknown;
}
/*
*---------------------------------------------------------------
* fill in call owner
*---------------------------------------------------------------
*/
switch( (T_ACI_CMD_SRC)psaCC_ctb(ctbIdx)->calOwn )
{
case( CMD_SRC_LCL ):
callTable[lstIdx].calOwner = CAL_OWN_LCL;
break;
#ifdef FF_ATI
case(CMD_SRC_ATI_1):
case(CMD_SRC_ATI_2):
case(CMD_SRC_ATI_3):
case(CMD_SRC_ATI_4):
callTable[lstIdx].calOwner = CAL_OWN_RMT;
break;
#endif /* FF_ATI */
default:
callTable[lstIdx].calOwner = CAL_OWN_NONE;
}
/*
*---------------------------------------------------------------
* fill in multiparty status
*---------------------------------------------------------------
*/
callTable[lstIdx].mpty = (psaCC_ctb(ctbIdx)->mptyStat EQ CS_ACT)?
CAL_MPTY_IsMember : CAL_MPTY_NoMember;
/*
*---------------------------------------------------------------
* fill in call index
*---------------------------------------------------------------
*/
callTable[lstIdx].index = ctbIdx+1;
lstIdx++;
}
}
/*
*-------------------------------------------------------------------
* terminate list of calls
*-------------------------------------------------------------------
*/
if( lstIdx < ctbIdx )
{
callTable[lstIdx].index = -1;
}
return( AT_CMPL );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_CallActive |
+--------------------------------------------------------------------+
PURPOSE : The function checks whether at least one call is in an
active state. This is not an official AT command !
*/
GLOBAL UBYTE qAT_CallActive ( void )
{
SHORT ctbIdx; /* holds call table index */
TRACE_FUNCTION ("qAT_CallActive()");
/*
*-------------------------------------------------------------------
* for every call of the call table
*-------------------------------------------------------------------
*/
for( ctbIdx = 0; ctbIdx < MAX_CALL_NR; ctbIdx++ )
{
if (ccShrdPrm.ctb[ctbIdx] NEQ NULL)
{
/*
*---------------------------------------------------------------
* check call status
*---------------------------------------------------------------
*/
switch( psaCC_ctb(ctbIdx)->calStat )
{
case CS_ACT:
case CS_HLD_REQ:
case CS_HLD:
case CS_MDF_REQ:
return TRUE;
default:
break;
}
}
}
return FALSE;
}
/*
+-------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : PSA_CCF |
| ROUTINE : qAT_PercentALS |
+-------------------------------------------------------------------+
PURPOSE : get the ALS mode for outgoing calls (voice)
0: indicates bearer capability => BEARER_SERV_SPEECH
1: indicates bearer capability => BEARER_SERV_AUX_SPEECH
*/
GLOBAL void cmhCC_get_active_als_mode( T_ACI_CMD_SRC srcId, T_ACI_ALS_MOD *mode )
{
T_CC_CMD_PRM *pCCCmdPrm; /* points to CC command parameters */
pCCCmdPrm = &cmhPrm[srcId].ccCmdPrm;
*mode = pCCCmdPrm->ALSmode;
}
GLOBAL T_ACI_RETURN qAT_PercentALS( T_ACI_CMD_SRC srcId, T_ACI_ALS_MOD *mode )
{
TRACE_FUNCTION("qAT_PercentALS()");
if( !cmh_IsVldCmdSrc( srcId ) )
{
return( AT_FAIL );
}
cmhCC_get_active_als_mode( srcId, mode );
return( AT_CMPL );
}
/*
+-------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : PSA_CCF |
| ROUTINE : qAT_PercentCTTY |
+-------------------------------------------------------------------+
PURPOSE : Query the state of the TTY Service
*/
GLOBAL T_ACI_RETURN qAT_PercentCTTY (T_ACI_CMD_SRC srcId,
T_ACI_CTTY_MOD *mode,
T_ACI_CTTY_REQ *req,
T_ACI_CTTY_STAT *stat,
T_ACI_CTTY_TRX *trx)
{
SHORT ctNr;
BOOL fnd_act = FALSE;;
if( !cmh_IsVldCmdSrc( srcId ) )
{
return( AT_FAIL );
}
*mode = cmhPrm[srcId].ccCmdPrm.CTTYmode;
#ifdef FF_TTY
if (ccShrdPrm.ctmReq EQ MNCC_CTM_DISABLED)
{
*req = CTTY_REQ_Off;
}
else switch (ccShrdPrm.ttyCmd)
{
case TTY_ALL:
*req = CTTY_REQ_On;
break;
case TTY_HCO:
*req = CTTY_REQ_HCO;
break;
case TTY_VCO:
*req = CTTY_REQ_VCO;
break;
default:
*req = CTTY_REQ_Off;
break;
}
for (ctNr = 0; !fnd_act AND ctNr < MAX_CALL_NR; ctNr++)
{
if (ccShrdPrm.ctb[ctNr] NEQ NULL)
{
switch (psaCC_ctb(ctNr)->calStat)
{
case CS_ACT_REQ:
case CS_ACT:
case CS_HLD_REQ:
case CS_HLD:
case CS_MDF_REQ:
*stat = (ccShrdPrm.ctmState EQ TTY_STATE_ACTIVE)?
CTTY_STAT_On: CTTY_STAT_Off;
if (*stat EQ CTTY_STAT_On)
{
*trx = cmhCC_getTTYtrx_state ((int)ccShrdPrm.ttyCmd);
}
else
{
*trx = CTTY_TRX_Unknown;
}
fnd_act = TRUE;
break;
default:
break;
}
}
}
if (!fnd_act)
#else
*req = CTTY_REQ_Off;
#endif /* FF_TTY */
{
*stat = CTTY_STAT_Unknown;
*trx = CTTY_TRX_Unknown;
}
return( AT_CMPL );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PercentRDL |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the %RDL? AT command
which returns the current setting for redial mode.
*/
GLOBAL T_ACI_RETURN qAT_PercentRDL ( T_ACI_CMD_SRC srcId,
T_ACI_CC_REDIAL_MODE* redial_mode,
T_ACI_CC_REDIAL_NOTIF* notification)
{
TRACE_FUNCTION ("qAT_PercentRDL()");
/* check command source */
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
/* fill in parameter */
switch(rdlPrm.rdlMod)
{
case AUTOM_REPEAT_OFF:
case AUTOM_REPEAT_ON:
*redial_mode = rdlPrm.rdlMod;
break;
default:
ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
return( AT_FAIL );
}
switch(rdlPrm.rdlModN)
{
case NO_NOTIF_USER:
case NOTIF_USER:
*notification = rdlPrm.rdlModN;
return( AT_CMPL );
default:
ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
return( AT_FAIL );
}
}
#ifdef TI_PS_FF_AT_P_CMD_RDLB
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PercentRDLB |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the %RDLB? AT command
which returns the current black list.
*/
GLOBAL T_ACI_RETURN qAT_PercentRDLB ( T_ACI_CMD_SRC srcId,
T_ACI_CC_REDIAL_BLACKL *blackl,
T_ACI_CC_REDIAL_NOTIF* notification)
{
TRACE_FUNCTION ("qAT_PercentRDLB()");
/* check command source */
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
if (rdlPrm.rdlMod EQ AUTOM_REPEAT_ON)
{
if((cc_blacklist_ptr NEQ NULL) AND (cc_blacklist_ptr->blCount NEQ 0))
{/* fill in parameter */
memcpy(blackl,cc_blacklist_ptr,sizeof(T_ACI_CC_REDIAL_BLACKL));
}
*notification = rdlPrm.rdlBlN;
return( AT_CMPL );
}
else
{
ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
return( AT_FAIL );
}
}
#endif /* TI_PS_FF_AT_P_CMD_RDLB */
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PercentCSSD |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the AT%CSSD command
which returns an extended error report.
*/
GLOBAL T_ACI_RETURN qAT_PercentCSSD ( T_ACI_CMD_SRC srcId,
UBYTE *ss_diag)
{
T_CC_CALL_TBL *ctbFail = ccShrdPrm.ctb[ccShrdPrm.cIdFail];
TRACE_FUNCTION ("qAT_PercentCSSD()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
/*
*-------------------------------------------------------------------
* get ss diagnostic
*-------------------------------------------------------------------
*/
/*
* check whether this diagnostic is within the specified parameters
* cross-check also MNCC SAP: VAL_ss_diag
* (This implementation follows version V3.19.0 (2004-06))
*/
if( (ctbFail->ssDiag >= MNCC_SS_DIAG_MOC_BAR_CUG) AND
(ctbFail->ssDiag <= MNCC_SS_DIAG_CCBS_NOT_POSSIBLE ))
{
*ss_diag = ctbFail->ssDiag;
return( AT_CMPL );
}
/* not yet initialized or not defined, return no information available */
else
{
/*reset ccShrdPrm.ctb[ccShrdPrm.cIdFail].ssDiag */
*ss_diag = ctbFail->ssDiag = MNCC_SS_DIAG_NOT_PROVIDED;
return( AT_CMPL );
}
}
#ifdef TI_PS_FF_AT_P_CMD_CUSCFG
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PercentCUSCFG |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the AT%CUSCFG query command
which returns the customization status of the facility requested.
*/
GLOBAL T_ACI_RETURN qAT_PercentCUSCFG ( T_ACI_CMD_SRC srcId,
T_ACI_CUSCFG_FAC facility,
T_ACI_CUSCFG_STAT *status)
{
TRACE_FUNCTION ("qAT_PercentCUSCFG()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
switch(facility)
{
case CUSCFG_FAC_MO_SM_Control:
*status = (T_ACI_CUSCFG_STAT)cuscfgParams.MO_SM_Control_SIM;
break;
case CUSCFG_FAC_MO_Call_Control:
*status = (T_ACI_CUSCFG_STAT)cuscfgParams.MO_Call_Control_SIM;
break;
case CUSCFG_FAC_MO_SS_Control:
*status = (T_ACI_CUSCFG_STAT)cuscfgParams.MO_SS_Control_SIM;
break;
case CUSCFG_FAC_MO_USSD_Control:
*status = (T_ACI_CUSCFG_STAT)cuscfgParams.MO_USSD_Control_SIM;
break;
case CUSCFG_FAC_2_Digit_Call:
*status = (T_ACI_CUSCFG_STAT)cuscfgParams.Two_digit_MO_Call;
break;
case CUSCFG_FAC_Ext_USSD_Res:
*status = (T_ACI_CUSCFG_STAT)cuscfgParams.Ext_USSD_Response;
break;
case CUSCFG_FAC_T_MOBILE_Eons:
*status = (T_ACI_CUSCFG_STAT)cuscfgParams.T_MOBILE_Eons;
break;
case CUSCFG_FAC_USSD_As_MO_Call:
*status = (T_ACI_CUSCFG_STAT)cuscfgParams.USSD_As_MO_Call;
break;
default:
ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
return( AT_FAIL );
}
return(AT_CMPL);
}
#endif /* TI_PS_FF_AT_P_CMD_CUSCFG */
#ifdef TI_PS_FF_AT_P_CMD_STDR
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PercentSTDR |
+--------------------------------------------------------------------+
PURPOSE : This is the functional counterpart to the AT%STDR command
which returns the value of global variable <std>.
*/
GLOBAL T_ACI_RETURN qAT_PercentSTDR ( T_ACI_CMD_SRC srcId,
UBYTE *rvstd)
{
TRACE_FUNCTION ("qAT_PercentSTDR()");
/*
*-------------------------------------------------------------------
* check command source
*-------------------------------------------------------------------
*/
if(!cmh_IsVldCmdSrc (srcId))
{
return( AT_FAIL );
}
/*
*-------------------------------------------------------------------
* Read <std>
*-------------------------------------------------------------------
*/
*rvstd = std;
return( AT_CMPL );
}
#endif /* TI_PS_FF_AT_P_CMD_STDR */
/* Implements Measure 47 and 216 */
/*
+------------------------------------------------------------------------------
| Function : qAT_plus_percent_CLCC
+------------------------------------------------------------------------------
| Purpose : This is common functional counterpart to the %CLCC? and +CLCC?
|
| Parameters : srcId - AT command source identifier
| calLst - Points to CLCC current call
| list element.
| at_cmd_id - AT Command Identifier
| ( AT_CMD_CLCC or AT_CMD_P_CLCC )
|
| rdlcId - Redial Call Identifier , NO_ENTRY if no redial
|
| Return : ACI functional return codes
+------------------------------------------------------------------------------
*/
LOCAL T_ACI_RETURN qAT_plus_percent_CLCC( T_ACI_CMD_SRC srcId,
T_ACI_CLCC_CALDESC *calLst,
T_ACI_AT_CMD at_cmd_id,
SHORT rdlcId )
{
SHORT ctbIdx;
SHORT lstIdx;
int index;
TRACE_FUNCTION ("qAT_plus_percent_CLCC()");
index = ( at_cmd_id EQ AT_CMD_P_CLCC )?1:0;
/*
*-------------------------------------------------------------------
* for every call of the call table
*-------------------------------------------------------------------
*/
for( ctbIdx = 0, lstIdx = 0; ctbIdx < MAX_CALL_NR; ctbIdx++ )
{
if ( (ccShrdPrm.ctb[ctbIdx] NEQ NULL) AND (rdlcId EQ NO_ENTRY) )
{
/*
*---------------------------------------------------------------
* fill in call type
*---------------------------------------------------------------
*/
if ( ( psaCC_ctb(ctbIdx)->calType >= CT_MOC ) AND
( psaCC_ctb(ctbIdx)->calType <= CT_MOC_RDL ))
{
calLst[lstIdx].dir =
(T_ACI_CLCC_DIR) aci_clcc_dir[psaCC_ctb(ctbIdx)->calType][index];
}
/*
*---------------------------------------------------------------
* fill in call status
*---------------------------------------------------------------
*/
switch( psaCC_ctb(ctbIdx)->calStat )
{
case( CS_ACT_REQ ):
switch( psaCC_ctb(ctbIdx)->calType )
{
case( CT_MOC ):
case( CT_MOC_RDL ):
if( psaCC_ctb(ctbIdx)->alrtStat EQ AS_SND )
{
calLst[lstIdx].stat = CLCC_STAT_Alerting;
}
else
{
calLst[lstIdx].stat = CLCC_STAT_Dialing;
}
break;
case( CT_MTC ):
if ( psaCC_ctbCallInUse ( ) )
{
calLst[lstIdx].stat = CLCC_STAT_Waiting;
}
else
{
calLst[lstIdx].stat = CLCC_STAT_Incoming;
}
break;
}
break;
case( CS_ACT ):
case( CS_DSC_REQ ):
/*
* Also show calls in disconnecting state since in 4.08/5.4.4.2.1.1 ii)
* the user is still connected to the network.
* This call is then either terminated from the network side.
* (after the operator announcement) or user initiated by ATH
*/
case( CS_MDF_REQ ):
case( CS_HLD_REQ ):
calLst[lstIdx].stat = CLCC_STAT_Active;
break;
case( CS_HLD ):
calLst[lstIdx].stat = CLCC_STAT_Held;
break;
case( CS_IDL ):
case( CS_CPL_REQ ):
continue;
}
/*
*---------------------------------------------------------------
* fill in number of connected party
*---------------------------------------------------------------
*/
switch( psaCC_ctb(ctbIdx)->calType )
{
case( CT_MOC ):
case( CT_MOC_RDL ):
psaCC_ctbCldAdr2Num (ctbIdx, calLst[lstIdx].number,
MAX_CC_ORIG_NUM_LEN);
calLst[lstIdx].type.ton = (T_ACI_TOA_TON)psaCC_ctb(ctbIdx)->cldPty.ton;
calLst[lstIdx].type.npi = (T_ACI_TOA_NPI)psaCC_ctb(ctbIdx)->cldPty.npi;
break;
case( CT_MTC ):
psaCC_ctbClrAdr2Num (ctbIdx, calLst[lstIdx].number,
MAX_CC_ORIG_NUM_LEN);
calLst[lstIdx].type.ton = (T_ACI_TOA_TON)psaCC_ctb(ctbIdx)->clgPty.ton;
calLst[lstIdx].type.npi = (T_ACI_TOA_NPI)psaCC_ctb(ctbIdx)->clgPty.npi;
break;
}
#ifdef NO_ASCIIZ
memcpy( ( UBYTE* ) &calLst[lstIdx].alpha,
( UBYTE* ) &psaCC_ctb(ctbIdx)->alphIdUni,
sizeof( T_ACI_PB_TEXT ) );
#else /* NO_ASCIIZ */
memcpy( calLst[lstIdx].alpha,
ccShrdPrm.ctb[ctbIdx].alphIdUni.data,
ccShrdPrm.ctb[ctbIdx].alphIdUni.len );
cmh_cvtFromDefGsm ( ( CHAR* ) ccShrdPrm.ctb[ctbIdx].alphIdUni.data,
( USHORT ) ccShrdPrm.ctb[ctbIdx].alphIdUni.len,
calLst[lstIdx].alpha );
#endif /* NO_ASCIIZ */
/*
*---------------------------------------------------------------
* fill in call mode
*---------------------------------------------------------------
*/
switch( cmhCC_getcalltype(ctbIdx) )
{
case( VOICE_CALL ):
switch( psaCC_ctb(ctbIdx)->BC
[(psaCC_ctb(ctbIdx)->curBC EQ 0)?1:0].
bearer_serv)
{
case( MNCC_BEARER_SERV_ASYNC ):
if( psaCC_ctb(ctbIdx)->rptInd EQ MNCC_RI_CIRCULAR )
calLst[lstIdx].mode = CLCC_MODE_Voice;
else
calLst[lstIdx].mode = CLCC_MODE_VFDVoice;
break;
case( MNCC_BEARER_SERV_FAX ):
calLst[lstIdx].mode = CLCC_MODE_VAFVoice;
break;
case( MNCC_BEARER_SERV_NOT_PRES ):
calLst[lstIdx].mode = CLCC_MODE_Voice;
break;
default:
calLst[lstIdx].mode = CLCC_MODE_Unknown;
}
break;
#ifdef FAX_AND_DATA
case( TRANS_CALL ):
case( NON_TRANS_CALL ):
switch( psaCC_ctb(ctbIdx)->BC
[(psaCC_ctb(ctbIdx)->curBC EQ 0)?1:0].
bearer_serv)
{
case( MNCC_BEARER_SERV_SPEECH ):
if( psaCC_ctb(ctbIdx)->rptInd EQ MNCC_RI_CIRCULAR )
calLst[lstIdx].mode = CLCC_MODE_VADData;
else
calLst[lstIdx].mode = CLCC_MODE_VFDData;
break;
case( MNCC_BEARER_SERV_NOT_PRES ):
calLst[lstIdx].mode = CLCC_MODE_Data;
break;
default:
calLst[lstIdx].mode = CLCC_MODE_Unknown;
}
break;
case( FAX_CALL ):
switch( psaCC_ctb(ctbIdx)->BC
[(psaCC_ctb(ctbIdx)->curBC EQ 0)?1:0].
bearer_serv)
{
case( MNCC_BEARER_SERV_SPEECH ):
calLst[lstIdx].mode = CLCC_MODE_VAFFax;
break;
case( MNCC_BEARER_SERV_NOT_PRES ):
calLst[lstIdx].mode = CLCC_MODE_Fax;
break;
default:
calLst[lstIdx].mode = CLCC_MODE_Unknown;
}
break;
#endif /* #ifdef FAX_AND_DATA */
default:
calLst[lstIdx].mode = CLCC_MODE_Unknown;
}
/*
*---------------------------------------------------------------
* fill in multiparty status
*---------------------------------------------------------------
*/
calLst[lstIdx].mpty = (psaCC_ctb(ctbIdx)->mptyStat EQ CS_ACT)?
CLCC_MPTY_IsMember : CLCC_MPTY_NoMember;
/*
*---------------------------------------------------------------
* fill in line1 or line2
*---------------------------------------------------------------
*/
switch (cmhCC_GetCallType_from_bearer( &psaCC_ctb(ctbIdx)->BC[psaCC_ctb(ctbIdx)->curBC] ))
{
case ( CRING_SERV_TYP_Voice):
calLst[lstIdx].class_type = CLCC_CLASS_Line1;
break;
case ( CRING_SERV_TYP_AuxVoice):
calLst[lstIdx].class_type = CLCC_CLASS_Line2;
break;
default:
calLst[lstIdx].class_type = CLCC_CLASS_NotPresent;
break;
}
/*
*---------------------------------------------------------------
* fill in progress description if using BAT interface
*---------------------------------------------------------------
*/
#ifdef FF_BAT
if ( at_cmd_id EQ AT_CMD_P_CLCC )
{
calLst[lstIdx].prog_desc = psaCC_ctb(ctbIdx)->prgDesc;
}
#endif
/*
*---------------------------------------------------------------
* fill in call index
*---------------------------------------------------------------
*/
calLst[lstIdx].idx = ctbIdx+1;
lstIdx++;
}
}
/*
*-------------------------------------------------------------------
* terminate list of calls
*-------------------------------------------------------------------
*/
if( lstIdx < ctbIdx )
{
calLst[lstIdx].idx = ACI_NumParmNotPresent;
calLst[lstIdx].dir = CLCC_DIR_NotPresent;
calLst[lstIdx].stat = CLCC_STAT_NotPresent;
calLst[lstIdx].mode = CLCC_MODE_NotPresent;
calLst[lstIdx].mpty = CLCC_MPTY_NotPresent;
calLst[lstIdx].type.ton = TON_NotPresent;
calLst[lstIdx].number[0] = 0x0;
if( at_cmd_id EQ AT_CMD_P_CLCC )
{
calLst[lstIdx].class_type = CLCC_CLASS_NotPresent;
#ifdef FF_BAT
calLst[lstIdx].prog_desc = NOT_PRESENT_8BIT;
#endif
}
#ifdef NO_ASCIIZ
calLst[lstIdx].alpha.cs = CS_NotPresent;
calLst[lstIdx].alpha.len = 0;
#else /* #ifdef NO_ASCIIZ */
calLst[lstIdx].alpha[0] = 0x0;
#endif /* #ifdef NO_ASCIIZ */
}
return( AT_CMPL );
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : CMH_CCQ |
| STATE : code ROUTINE : qAT_PlusCVHU |
+--------------------------------------------------------------------+
PURPOSE : This is query call for +CVHU for the control of the voice
hangup
*/
GLOBAL T_ACI_RETURN qAT_PlusCVHU ( T_ACI_CMD_SRC srcId, T_ACI_CVHU_MODE *mode)
{
TRACE_FUNCTION("qAT_PlusCVHU()");
if(!cmh_IsVldCmdSrc (srcId))
{
ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
return( AT_FAIL );
}
*mode = ccShrdPrm.cvhu;
return( AT_CMPL );
}
/*==== EOF ========================================================*/