/* 
+----------------------------------------------------------------------------- 
|  Project :  GSM-PS (6147)
|  Modul   :  CMH_SSS
+----------------------------------------------------------------------------- 
|  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 SS.
+----------------------------------------------------------------------------- 
*/ 

#ifndef CMH_SSQ_C
#define CMH_SSQ_C
#endif

#include "aci_all.h"
/*==== INCLUDES ===================================================*/
#include "aci.h"
#include "aci_cmh.h"
#include "ati_cmd.h"
#include "aci_cmd.h"

#include "aci_ext_pers.h"    /* we are using personalisation extensions */
#include "aci_slock.h"          /* in order to asure interfaces */

#ifdef FAX_AND_DATA
#include "aci_fd.h"
#endif    /* of #ifdef FAX_AND_DATA */

#ifdef UART
#include "dti.h"
#include "dti_conn_mng.h"
#endif

#include "ksd.h"
#include "psa.h"
#include "psa_ss.h"
#include "psa_sim.h"
#include "cmh.h"
#include "cmh_ss.h"
#include "cmh_sim.h"

#include "aci_ext_pers.h"
#include "aci_slock.h"

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

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

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

/*==== FUNCTIONS ==================================================*/

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

  PURPOSE : This is the functional counterpart to the +CCFC AT command
            which is responsible to query the parameters for call 
            forwarding supplementary services.

            <reason> : reason for CF.
            <class>  : class of basic service.
*/

GLOBAL T_ACI_RETURN qAT_PlusCCFC  ( T_ACI_CMD_SRC   srcId,
                                    T_ACI_CCFC_RSN  reason,
                                    T_ACI_CLASS     class_type  )
{
  SHORT sId;                /* holds service id */
  UBYTE ssCd;               /* holds ss code */

  T_ACI_RETURN   retVal;


  TRACE_FUNCTION ("qAT_PlusCCFC");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

  if( cmhPrm[srcId].ssCmdPrm.mltyTrnFlg NEQ 0 )

    return( AT_BUSY );

/*
 *-------------------------------------------------------------------
 * check parameter <reason>
 *-------------------------------------------------------------------
 */  
  switch( reason )
  {
    case( CCFC_RSN_Uncond      ): ssCd = SS_CD_CFU;       break;
    case( CCFC_RSN_Busy        ): ssCd = SS_CD_CFB;       break;
    case( CCFC_RSN_NoReply     ): ssCd = SS_CD_CFNRY;     break;
    case( CCFC_RSN_NotReach    ): ssCd = SS_CD_CFNRC;     break;
    case( CCFC_RSN_Forward     ): ssCd = SS_CD_ALL_FWSS;  break;
    case( CCFC_RSN_CondForward ): ssCd = SS_CD_ALL_CFWSS; break;
    case( CCFC_RSN_NotPresent  ):
    default:
      ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
      return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * check parameter <class>
 *-------------------------------------------------------------------
 */  
  if( !cmhSS_CheckClassInterr(class_type) )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

/* SIM TOOLKIT & FDN HANDLING */

    retVal = cmhSS_CF_SAT_Handle( srcId, reason, CCFC_MOD_Query, NULL, NULL, class_type, NULL, NULL, 0);

    if( retVal NEQ AT_CMPL )
        return( retVal );

/*
 *-------------------------------------------------------------------
 * get a new service table entry to interrogate SS
 *-------------------------------------------------------------------
 */  
  sId = psaSS_stbNewEntry();

  if( sId EQ NO_ENTRY )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
    return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * start first transaction 
 *-------------------------------------------------------------------
 */  
  CCD_START;

  psaSS_asmInterrogateSS( ssCd, SS_NO_PRM, SS_NO_PRM );

  ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
  ssShrdPrm.stb[sId].ssCode     = ssCd;
  ssShrdPrm.stb[sId].srvOwn     = srcId;
  ssShrdPrm.stb[sId].ClassType  = class_type;

  ssShrdPrm.stb[sId].curCmd = AT_CMD_CCFC;
  cmhSS_flagTrn( sId, &(cmhPrm[srcId].ssCmdPrm.mltyTrnFlg));
  psaSS_NewTrns(sId);

  CCD_END;

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd                    = AT_CMD_CCFC;
  cmdLog.cmdType                  = CLOG_TYPE_Query;
  cmdLog.retCode                  = AT_EXCT;
  cmdLog.cId                      = ACI_NumParmNotPresent;
  cmdLog.sId                      = sId+1;
  cmdLog.cmdPrm.qCCFC.srcId       = srcId;
  cmdLog.cmdPrm.qCCFC.reason      = reason;
  cmdLog.cmdPrm.qCCFC.class_type       = class_type;

  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}

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

  PURPOSE : This is the functional counterpart to the +CLCK AT command
            which is responsible to query the parameters for call 
            barring supplementary services.

            <fac>  : CB facility.
            <class>: class of basic service.
*/

GLOBAL T_ACI_RETURN qAT_PlusCLCK  ( T_ACI_CMD_SRC  srcId,
                                    T_ACI_CLCK_FAC fac,
                                    T_ACI_CLASS    class_type,
                                    T_ACI_CLSSTAT *clsStat)
{
  UBYTE dummy_slockStat;
  TRACE_FUNCTION ("qAT_PlusCLCK");
  return qAT_PercentCLCK(srcId,fac,class_type, clsStat,&dummy_slockStat);
}

/*QAT_PERCENTCLCK add for Simlock in Riviear MFW

Added by Shen,Chao  April 16th, 2003
*/

GLOBAL T_ACI_RETURN qAT_PercentCLCK  ( T_ACI_CMD_SRC  srcId,
                                    T_ACI_CLCK_FAC fac,
                                    T_ACI_CLASS    class_type,
                                    T_ACI_CLSSTAT *clsStat,
                                    UBYTE *simClockStat)
{
  SHORT sId;                /* holds service id */
  UBYTE ssCd;               /* holds ss code */
  T_ACI_RETURN   retVal;
#ifdef SIM_PERS
  T_SIMLOCK_TYPE slocktype;
  T_SIMLOCK_STATUS rlockstatus;
#endif


  TRACE_FUNCTION ("qAT_PercentCLCK");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

  if( cmhPrm[srcId].ssCmdPrm.mltyTrnFlg NEQ 0 )
    return( AT_BUSY );

/*
 *-------------------------------------------------------------------
 * check parameter <fac>
 *-------------------------------------------------------------------
 */  
  switch( fac )
  {
    case( CLCK_FAC_Ao ): ssCd = SS_CD_BAOC;     break;
    case( CLCK_FAC_Oi ): ssCd = SS_CD_BOIC;     break;
    case( CLCK_FAC_Ox ): ssCd = SS_CD_BOICXH;   break;
    case( CLCK_FAC_Ai ): ssCd = SS_CD_BAIC;     break;
    case( CLCK_FAC_Ir ): ssCd = SS_CD_BICRM;    break;
    case( CLCK_FAC_Ab ): ssCd = SS_CD_ALL_CBSS; break;
    case( CLCK_FAC_Ag ): ssCd = SS_CD_BOC;      break;
    case( CLCK_FAC_Ac ): ssCd = SS_CD_BIC;      break;

    case( CLCK_FAC_Sc ):
    case( CLCK_FAC_Fd ):
    case( CLCK_FAC_Al ):
    case( CLCK_FAC_Pn ):
    case( CLCK_FAC_Pu ):
    case( CLCK_FAC_Pc ):
    case( CLCK_FAC_Pp ):
    case( CLCK_FAC_Ps ):
    case( CLCK_FAC_Pf ): ssCd = NOT_PRESENT_8BIT; break;

    case( CLCK_FAC_NotPresent  ):
    default:

      ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
      return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * if action is related to SS
 *-------------------------------------------------------------------
 */  
  if( ssCd NEQ NOT_PRESENT_8BIT )
  {
  /*
   *-------------------------------------------------------------------
   * check parameter <class>
   *-------------------------------------------------------------------
   */  
    if( !cmhSS_CheckCbClassInterr(class_type))
    { 
      ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow );
      return( AT_FAIL );
    }

    if( cmhPrm[srcId].ssCmdPrm.mltyTrnFlg NEQ 0 )

      return( AT_BUSY );
  /*
   *-------------------------------------------------------------------
   * check not allowed <fac> (only possible with mode=0 i.e unlock)   
   *-------------------------------------------------------------------
   */  
    if(fac EQ CLCK_FAC_Ab OR fac EQ CLCK_FAC_Ag OR fac EQ CLCK_FAC_Ac)
    {
      ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow );
      return( AT_FAIL );
    }

/* SIM TOOLKIT & FDN HANDLING */

    retVal = cmhSS_Call_Barr_SAT_Handle( srcId, CLCK_MODE_QUERY, fac, NULL, class_type);

    if( retVal NEQ AT_CMPL )
        return( retVal );
   
    
  /*
   *-------------------------------------------------------------------
   * get a new service table entry to interrogate SS
   *-------------------------------------------------------------------
   */  
    sId = psaSS_stbNewEntry();

    if( sId EQ NO_ENTRY )
    { 
      ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
      return( AT_FAIL );
    }

  /*
   *-------------------------------------------------------------------
   * start first transaction
   *-------------------------------------------------------------------
   */ 
    CCD_START;

    psaSS_asmInterrogateSS( ssCd, SS_NO_PRM, SS_NO_PRM );

    ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
    ssShrdPrm.stb[sId].ssCode     = ssCd;
    ssShrdPrm.stb[sId].srvOwn     = srcId;
    ssShrdPrm.stb[sId].ClassType  = class_type;

    ssShrdPrm.stb[sId].curCmd = AT_CMD_CLCK;
    cmhSS_flagTrn( sId, &(cmhPrm[srcId].ssCmdPrm.mltyTrnFlg));
    psaSS_NewTrns(sId);

    CCD_END;
  }

  /*
   *-------------------------------------------------------------------
   * if action is related to SIM
   *-------------------------------------------------------------------
   */  
  else
  {
    switch (fac)
    {
      /*
       *---------------------------------------------------------------
       * access PIN 1 status
       *---------------------------------------------------------------
       */  
      case CLCK_FAC_Sc:
        clsStat -> class_type  = CLASS_NotPresent; 
        clsStat -> status = STATUS_NotPresent;

        switch( simShrdPrm.PEDStat )
        {
          case( PEDS_ENA ): clsStat -> status = STATUS_Active;
                                       return( AT_CMPL );
          case( PEDS_DIS ): clsStat -> status = STATUS_NotActive;
                                       return( AT_CMPL );
          default:                     

            ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_SimFail );
            return( AT_FAIL );
        }
        break;

      /*
       *---------------------------------------------------------------
       * access fixed dialling feature
       *---------------------------------------------------------------
       */
      case ( CLCK_FAC_Fd ):
        clsStat -> class_type  = CLASS_NotPresent; 
        clsStat -> status = STATUS_NotPresent;

        if( simShrdPrm.SIMStat EQ SS_OK )
        {
          switch( simShrdPrm.crdFun )
          {
            case( SIM_ADN_ENABLED     ): 
            case( SIM_ADN_BDN_ENABLED ): clsStat -> status = STATUS_NotActive;
                                         return( AT_CMPL );
            case( SIM_FDN_ENABLED     ): 
            case( SIM_FDN_BDN_ENABLED ): clsStat -> status = STATUS_Active;
                                         return( AT_CMPL );
            case( SIM_NO_OPERATION    ): 
            default:                     

              ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_SimFail );
              return( AT_FAIL );
          }
        }
        else
        { 
          ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_SimFail );
          return( AT_FAIL );
        }
        break;

      /*
       *---------------------------------------------------------------
       * lock ALS setting with PIN2
       *---------------------------------------------------------------
       */  
      case CLCK_FAC_Al:
        clsStat -> class_type  = CLASS_NotPresent; 
        clsStat -> status = STATUS_NotPresent;

        switch( ALSlock )
        {
          case( ALS_MOD_SPEECH     ): 
          case( ALS_MOD_AUX_SPEECH ): 
            clsStat -> status = STATUS_Active;
            return( AT_CMPL );
            
          case( ALS_MOD_NOTPRESENT ): 
            clsStat -> status = STATUS_NotActive;
            return( AT_CMPL );
            
          default:                     
            ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotSupp );
            return( AT_FAIL );
        }
        break;

#ifdef SIM_PERS
      /*
       *---------------------------------------------------------------
       * ME Personalisation
       *---------------------------------------------------------------
       */
            
      case CLCK_FAC_Pn:
      case CLCK_FAC_Pu:
      case CLCK_FAC_Pp:
      case CLCK_FAC_Pc:
      case CLCK_FAC_Ps:
      case CLCK_FAC_Pf:
        clsStat -> class_type  = CLASS_NotPresent; 
        clsStat -> status = STATUS_NotPresent;
        switch (fac)
        {
          case CLCK_FAC_Pn: slocktype = SIMLOCK_NETWORK; break;
          case CLCK_FAC_Pu: slocktype = SIMLOCK_NETWORK_SUBSET; break;
          case CLCK_FAC_Pp: slocktype = SIMLOCK_SERVICE_PROVIDER; break;
          case CLCK_FAC_Pc: slocktype = SIMLOCK_CORPORATE; break;
          case CLCK_FAC_Ps: slocktype = SIMLOCK_SIM; break;
          case CLCK_FAC_Pf: slocktype = SIMLOCK_FIRST_SIM; break;
          default: slocktype = SIMLOCK_NETWORK;
        }
   aci_ext_personalisation_init();
        rlockstatus = aci_personalisation_get_status(slocktype);  /* Changed to aci_personalisatio_get_status 
                                                                 from aci_ext_personalisatio_get_status on 11/03/2005 */
   aci_ext_personalisation_free();
   if (rlockstatus EQ SIMLOCK_ENABLED)
   {
          clsStat -> status = STATUS_Active;
     return( AT_CMPL );
   }
   else if (rlockstatus EQ SIMLOCK_DISABLED)
   {
     clsStat -> status = STATUS_NotActive;
          return( AT_CMPL );
   }
   else
   {
          ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown );
          return( AT_FAIL );
   }

 #endif
    
      /*
       *---------------------------------------------------------------
       * Error handling
       *---------------------------------------------------------------
       */
      default:
        ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown );
        return( AT_FAIL );
    }
  }

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd                   = AT_CMD_CLCK;
  cmdLog.cmdType                 = CLOG_TYPE_Query;
  cmdLog.retCode                 = AT_EXCT;
  cmdLog.cId                     = ACI_NumParmNotPresent;
  cmdLog.sId                     = sId+1;
  cmdLog.cmdPrm.qCLCK.srcId      = srcId;
  cmdLog.cmdPrm.qCLCK.fac        = fac;
  cmdLog.cmdPrm.qCLCK.class_type = class_type;

  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}

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

  PURPOSE : This is the functional counterpart to the +CCWA AT command
            which is responsible to query the parameters for call
            waiting supplementary services.

            <class>   : class of basic service.
*/

GLOBAL  T_ACI_RETURN qAT_PlusCCWA (T_ACI_CMD_SRC  srcId, 
                                   T_ACI_CLASS    class_type)
{
  SHORT sId;         /* holds service id */

  T_ACI_RETURN   retVal;

  TRACE_FUNCTION ("qAT_PlusCCWA ()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

  if( cmhPrm[srcId].ssCmdPrm.mltyTrnFlg NEQ 0 )

    return( AT_BUSY );

/*
 *-------------------------------------------------------------------
 * check parameter <class>
 *-------------------------------------------------------------------
 */  
  if( !cmhSS_CheckClassInterr(class_type) )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

/* SIM TOOLKIT & FDN HANDLING */
    retVal = cmhSS_CW_SAT_Handle( srcId, CCWA_MOD_Query, class_type);

    if( retVal NEQ AT_CMPL )
        return( retVal );

/*
 *-------------------------------------------------------------------
 * get a new service table entry to interrogate SS
 *-------------------------------------------------------------------
 */  
  sId = psaSS_stbNewEntry();

  if( sId EQ NO_ENTRY )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
    return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * start first transaction
 *-------------------------------------------------------------------
 */ 
  CCD_START;

  psaSS_asmInterrogateSS( SS_CD_CW, SS_NO_PRM, SS_NO_PRM );

  ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
  ssShrdPrm.stb[sId].ssCode     = SS_CD_CW;
  ssShrdPrm.stb[sId].srvOwn     = srcId;
  ssShrdPrm.stb[sId].ClassType  = class_type;

  ssShrdPrm.stb[sId].curCmd = AT_CMD_CCWA;
  cmhSS_flagTrn( sId, &(cmhPrm[srcId].ssCmdPrm.mltyTrnFlg));
  psaSS_NewTrns(sId);

  CCD_END;

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd                   = AT_CMD_CCWA;
  cmdLog.cmdType                 = CLOG_TYPE_Query;
  cmdLog.retCode                 = AT_EXCT;
  cmdLog.cId                     = ACI_NumParmNotPresent;
  cmdLog.sId                     = sId+1;
  cmdLog.cmdPrm.qCCWA.srcId      = srcId;
  cmdLog.cmdPrm.qCCWA.class_type = class_type;

  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}

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

  PURPOSE : This is the functional counterpart to the +CLIP AT command
            which is responsible to query the setting for calling
            line indication supplementary services.

            <stat>   : CLIP status.
*/

GLOBAL T_ACI_RETURN qAT_PlusCLIP  ( T_ACI_CMD_SRC srcId,
                                    T_ACI_CLIP_STAT * stat)
{
  SHORT sId;                /* holds service id */

   T_ACI_RETURN   retVal;
 
  TRACE_FUNCTION ("qAT_PlusCLIP ()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

/* SIM TOOLKIT & FDN HANDLING */
    retVal = cmhSS_CLIP_SAT_Handle( srcId);

    if( retVal NEQ AT_CMPL )
        return( retVal );
/*
 *-------------------------------------------------------------------
 * get a new service table entry to interrogate SS
 *-------------------------------------------------------------------
 */  
  sId = psaSS_stbNewEntry();

  if( sId EQ NO_ENTRY )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
    return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * set up  facility information element
 *-------------------------------------------------------------------
 */ 
  CCD_START;

  psaSS_asmInterrogateSS( SS_CD_CLIP, SS_NO_PRM, SS_NO_PRM );
/*
 *-----------------------------------------------------------------
 * declare service table entry as used and the owner of the service
 *-----------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
  ssShrdPrm.stb[sId].srvOwn     = srcId;

/*
 *-------------------------------------------------------------------
 * start a new transaction 
 *-------------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].curCmd = AT_CMD_CLIP;
  psaSS_NewTrns(sId);

  CCD_END;

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd              = AT_CMD_CLIP;
  cmdLog.cmdType            = CLOG_TYPE_Query;
  cmdLog.retCode            = AT_EXCT;
  cmdLog.cId                = ACI_NumParmNotPresent;
  cmdLog.sId                = sId+1;
  cmdLog.cmdPrm.qCLIP.srcId = srcId;
  cmdLog.cmdPrm.qCLIP.stat  = stat;

  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}

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

  PURPOSE : This is the functional counterpart to the +CLIR AT command
            which is responsible to query the setting for calling
            line restriction supplementary services.

            <mode>   : CLIR mode.
            <stat>   : CLIR status.
*/

GLOBAL T_ACI_RETURN qAT_PlusCLIR  ( T_ACI_CMD_SRC srcId,
                                    T_ACI_CLIR_MOD * mode,
                                    T_ACI_CLIR_STAT * stat)
{
  SHORT sId;                /* holds service id */

   T_ACI_RETURN   retVal;
 
  TRACE_FUNCTION ("qAT_PlusCLIR ()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

/* SIM TOOLKIT & FDN HANDLING */
    retVal = cmhSS_CLIR_SAT_Handle( srcId);

    if( retVal NEQ AT_CMPL )
        return( retVal );


/*
 *-------------------------------------------------------------------
 * get a new service table entry to interrogate SS
 *-------------------------------------------------------------------
 */  
  sId = psaSS_stbNewEntry();

  if( sId EQ NO_ENTRY )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
    return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * set up  facility information element
 *-------------------------------------------------------------------
 */ 
  CCD_START;

  psaSS_asmInterrogateSS( SS_CD_CLIR, SS_NO_PRM, SS_NO_PRM );
/*
 *-----------------------------------------------------------------
 * declare service table entry as used and the owner of the service
 *-----------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
  ssShrdPrm.stb[sId].srvOwn     = srcId;

/*
 *-------------------------------------------------------------------
 * start a new transaction 
 *-------------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].curCmd = AT_CMD_CLIR;
  psaSS_NewTrns(sId);

  CCD_END;

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd              = AT_CMD_CLIR;
  cmdLog.cmdType            = CLOG_TYPE_Query;
  cmdLog.retCode            = AT_EXCT;
  cmdLog.cId                = ACI_NumParmNotPresent;
  cmdLog.sId                = sId+1;
  cmdLog.cmdPrm.qCLIR.srcId = srcId;
  cmdLog.cmdPrm.qCLIR.stat  = stat;
  cmdLog.cmdPrm.qCLIR.mode  = mode;

  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}


GLOBAL T_ACI_RETURN qAT_PercentCLIR  ( T_ACI_CMD_SRC srcId,
                                    T_ACI_CLIR_MOD * mode)
{
   T_CC_CMD_PRM  *pCCCmdPrm;  /* points to CC command parameters */
   TRACE_FUNCTION ("qAT_PercentCLIR ()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

   pCCCmdPrm  = &cmhPrm[srcId].ccCmdPrm;   
   *mode = pCCCmdPrm->CLIRmode;
  
   return AT_CMPL;
}

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

  PURPOSE : This is the functional counterpart to the +COLP AT command
            which is responsible to query the setting for connected
            line presentation supplementary services.

            <stat>   : COLP status.
*/

GLOBAL T_ACI_RETURN qAT_PlusCOLP  ( T_ACI_CMD_SRC srcId,
                                    T_ACI_COLP_STAT * stat)
{
  SHORT sId;                /* holds service id */

  T_ACI_RETURN   retVal;

  TRACE_FUNCTION ("qAT_PlusCOLP ()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

/* SIM TOOLKIT & FDN HANDLING */
    retVal = cmhSS_COLP_SAT_Handle( srcId);

    if( retVal NEQ AT_CMPL )
        return( retVal );


/*
 *-------------------------------------------------------------------
 * get a new service table entry to interrogate SS
 *-------------------------------------------------------------------
 */  
  sId = psaSS_stbNewEntry();

  if( sId EQ NO_ENTRY )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
    return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * set up  facility information element
 *-------------------------------------------------------------------
 */ 
  CCD_START;

  psaSS_asmInterrogateSS( SS_CD_COLP, SS_NO_PRM, SS_NO_PRM );
/*
 *-----------------------------------------------------------------
 * declare service table entry as used and the owner of the service
 *-----------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
  ssShrdPrm.stb[sId].srvOwn     = srcId;

/*
 *-------------------------------------------------------------------
 * start a new transaction 
 *-------------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].curCmd = AT_CMD_COLP;
  psaSS_NewTrns(sId);

  CCD_END;

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd              = AT_CMD_COLP;
  cmdLog.cmdType            = CLOG_TYPE_Query;
  cmdLog.retCode            = AT_EXCT;
  cmdLog.cId                = ACI_NumParmNotPresent;
  cmdLog.sId                = sId+1;
  cmdLog.cmdPrm.qCOLP.srcId = srcId;
  cmdLog.cmdPrm.qCOLP.stat  = stat;

  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}

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

  PURPOSE : This is the functional counterpart to the %COLR AT command
            which is responsible to query the setting for connected
            line restriction supplementary services.

            <stat>   : COLR status.
*/

GLOBAL T_ACI_RETURN qAT_PercentCOLR  ( T_ACI_CMD_SRC srcId )
{
  SHORT sId;                /* holds service id */

  T_ACI_RETURN   retVal;

  TRACE_FUNCTION ("qAT_PercentCOLR ()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

/* SIM TOOLKIT & FDN HANDLING */
    retVal = cmhSS_COLR_SAT_Handle( srcId);

    if( retVal NEQ AT_CMPL )
        return( retVal );
/*
 *-------------------------------------------------------------------
 * get a new service table entry to interrogate SS
 *-------------------------------------------------------------------
 */  
  sId = psaSS_stbNewEntry();

  if( sId EQ NO_ENTRY )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
    return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * set up  facility information element
 *-------------------------------------------------------------------
 */ 
  CCD_START;

  psaSS_asmInterrogateSS( SS_CD_COLR, SS_NO_PRM, SS_NO_PRM );
/*
 *-----------------------------------------------------------------
 * declare service table entry as used and the owner of the service
 *-----------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
  ssShrdPrm.stb[sId].srvOwn     = srcId;

/*
 *-------------------------------------------------------------------
 * start a new transaction 
 *-------------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].curCmd = AT_CMD_COLR;
  psaSS_NewTrns(sId);

  CCD_END;

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd              = AT_CMD_COLR;
  cmdLog.cmdType            = CLOG_TYPE_Query;
  cmdLog.retCode            = AT_EXCT;
  cmdLog.cId                = ACI_NumParmNotPresent;
  cmdLog.sId                = sId+1;
  cmdLog.cmdPrm.qCOLR.srcId = srcId;
  
  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}

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

  PURPOSE : This is the functional counterpart to the %CCBS AT command
            which is responsible to query the setting for connected
            line restriction supplementary services.

*/

GLOBAL T_ACI_RETURN qAT_PercentCCBS  ( T_ACI_CMD_SRC srcId )
{
  SHORT sId;                /* holds service id */

   T_ACI_RETURN   retVal;
 

  TRACE_FUNCTION ("qAT_PercentCCBS ()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

/* SIM TOOLKIT & FDN HANDLING */
    retVal = cmhSS_CCBS_SAT_Handle( srcId, CCFC_MOD_Query, -1);

    if( retVal NEQ AT_CMPL )
        return( retVal );
  


/*
 *-------------------------------------------------------------------
 * get a new service table entry to interrogate SS
 *-------------------------------------------------------------------
 */  
  sId = psaSS_stbNewEntry();

  if( sId EQ NO_ENTRY )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
    return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * set up  facility information element
 *-------------------------------------------------------------------
 */ 
  CCD_START;

  psaSS_asmInterrogateSS( SS_CD_CCBS, SS_NO_PRM, SS_NO_PRM );
/*
 *-----------------------------------------------------------------
 * declare service table entry as used and the owner of the service
 *-----------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
  ssShrdPrm.stb[sId].srvOwn     = srcId;

/*
 *-------------------------------------------------------------------
 * start a new transaction 
 *-------------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].curCmd = AT_CMD_CCBS;
  psaSS_NewTrns(sId);

  CCD_END;

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd              = AT_CMD_CCBS;
  cmdLog.cmdType            = CLOG_TYPE_Query;
  cmdLog.retCode            = AT_EXCT;
  cmdLog.cId                = ACI_NumParmNotPresent;
  cmdLog.sId                = sId+1;
  cmdLog.cmdPrm.qCCBS.srcId = srcId;

  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}

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

  PURPOSE : This is the functional counterpart to the %CNAP AT command
            which is responsible to query the setting for calling
            name presentation supplementary services.

*/

GLOBAL T_ACI_RETURN qAT_PercentCNAP  ( T_ACI_CMD_SRC srcId )
{
  SHORT sId;                /* holds service id */

  T_ACI_RETURN   retVal;

  TRACE_FUNCTION ("qAT_PercentCNAP ()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */  
  if(!cmh_IsVldCmdSrc (srcId)) 
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

/* SIM TOOLKIT & FDN HANDLING */
    retVal = cmhSS_CNAP_SAT_Handle( srcId);

    if( retVal NEQ AT_CMPL )
        return( retVal );

/*
 *-------------------------------------------------------------------
 * get a new service table entry to interrogate SS
 *-------------------------------------------------------------------
 */  
  sId = psaSS_stbNewEntry();

  if( sId EQ NO_ENTRY )
  { 
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_SrvTabFull );
    return( AT_FAIL );
  }

/*
 *-------------------------------------------------------------------
 * set up  facility information element
 *-------------------------------------------------------------------
 */ 
  CCD_START;

  psaSS_asmInterrogateSS( SS_CD_CNAP, SS_NO_PRM, SS_NO_PRM ); 


/*
 *-----------------------------------------------------------------
 * declare service table entry as used and the owner of the service
 *-----------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].ntryUsdFlg = TRUE;
  ssShrdPrm.stb[sId].srvOwn     = srcId;

/*
 *-------------------------------------------------------------------
 * start a new transaction 
 *-------------------------------------------------------------------
 */  
  ssShrdPrm.stb[sId].curCmd = AT_CMD_CNAP;    
  psaSS_NewTrns(sId);

  CCD_END;

/*
 *-------------------------------------------------------------------
 * log command execution
 *-------------------------------------------------------------------
 */  
#if defined SMI OR defined MFW OR defined FF_MMI_RIV
  {
  T_ACI_CLOG cmdLog;        /* holds logging info */

  cmdLog.atCmd              = AT_CMD_CNAP;
  cmdLog.cmdType            = CLOG_TYPE_Query;
  cmdLog.retCode            = AT_EXCT;
  cmdLog.cId                = ACI_NumParmNotPresent;
  cmdLog.sId                = sId+1;
  cmdLog.cmdPrm.qCCBS.srcId = srcId;

  rAT_PercentCLOG( &cmdLog );
  }
#endif

  return( AT_EXCT );
}


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

  PURPOSE : This is the functional counterpart to the %CSCN AT command
            which is responsible to query the settings.

*/
GLOBAL T_ACI_RETURN qAT_PercentCSCN ( T_ACI_CMD_SRC srcId,
                                   T_ACI_SS_CSCN_MOD_STATE     *ss_switch,
                                   T_ACI_SS_CSCN_MOD_DIRECTION *ss_direction,
                                   T_ACI_CC_CSCN_MOD_STATE     *cc_switch,
                                   T_ACI_CC_CSCN_MOD_DIRECTION *cc_direction )
{
  TRACE_FUNCTION ("qAT_PercentCSCN ()");

  if(!cmh_IsVldCmdSrc (srcId))
  { /* check command source */
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }

  *ss_switch    = cmhPrm[srcId].ssCmdPrm.CSCNss_mode.SsCSCNModeState;
  *ss_direction = cmhPrm[srcId].ssCmdPrm.CSCNss_mode.SsCSCNModeDirection;
  *cc_switch    = cmhPrm[srcId].ccCmdPrm.CSCNcc_mode.CcCSCNModeState;
  *cc_direction = cmhPrm[srcId].ccCmdPrm.CSCNcc_mode.CcCSCNModeDirection;

  return( AT_CMPL);
}

#ifdef SIM_PERS
/*
+===========================================================+
| PROJECT : GSM-PS (6147)      MODULE  : CMH_SSQ            |
| STATE   : code               ROUTINE : qAT_PercentMEPD    |
|                                                           |
|This is the functional counterpart to the %MEPD AT command |
|which is responsible to query MEPD Configuration Data.     |
+===========================================================+
*/



GLOBAL T_ACI_RETURN qAT_PercentMEPD( T_ACI_CMD_SRC srcId, T_SUP_INFO *sup_info)
{
  T_OPER_RET_STATUS rlockstatus;

  TRACE_FUNCTION ("qAT_ PercentMEPD()");

/*
 *-------------------------------------------------------------------
 * check command source
 *-------------------------------------------------------------------
 */
  if(!cmh_IsVldCmdSrc (srcId))
  {
    ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter );
    return( AT_FAIL );
  }
  rlockstatus=aci_slock_sup_info(sup_info);

  if (rlockstatus EQ OPER_SUCCESS)
  {
    return (AT_CMPL);
  }
  else if (rlockstatus EQ OPER_FAIL)
  {
    ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown);
    return( AT_FAIL );
  }
  return( AT_EXCT );
}
#endif //SIM_PERS
/*==== EOF ========================================================*/
