view src/g23m-aci/aci/aci_bat_sms.c @ 223:740a8e8fc9d7

startup sync logic rework for the new PWON button boot scheme Previously we added logic to the MMI task to hold off PEI init until R2D is running, and then extended that condition to wait for FCHG init too. However, the dependencies of MMI upon R2D and FCHG don't start until mmiInit(), and that call is driven by Switch_ON() code, hence the wait for R2D and FCHG init can be made in that code path instead of the MMI task. Furthermore, with our new way of signaling PWON button boot to MMI, we need a new wait to ensure that the MMI task is up - previously this assurance was provided by the wait for Kp pointers to be set. Solution: revert our previous PEI init hold-off additions to MMI, add a new flag indicating MMI task init done, and put the combined wait for all needed conditions into our new PWON button boot code in power.c.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 27 Apr 2021 06:24:52 +0000
parents fa8dc04885d8
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  Project :  GSM-F&D (8411)
|  Modul   :  ACI_BAT
+-----------------------------------------------------------------------------
|  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 BAT wrapper modul is ...
| 
+----------------------------------------------------------------------------- 
*/ 
 
#include "aci_all.h"     /* includes prim.h, which includes p_bat.h */ 
#include "aci_cmh.h"     /* prototypes of sAT_,qAT_,tAT_    */ 
#include "ati_cmd.h" 
#include "aci_cmd.h" 
#include "aci_bat_cmh.h" /* prototypes of sBAT_,qBAT_,tBAT_ */ 
#include "aci_bat.h"
#include "psa.h"
#include "psa_sms.h"
#include "cmh.h"

EXTERN T_SMS_SHRD_PRM smsShrdPrm;

EXTERN SHORT  cmhSMS_getPrfRge ( void );

EXTERN T_ATI_RSLT txt_rdmode_to_smsrdmode(char *txt_rdmode);



/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCSMS        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSMS        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;

  TRACE_FUNCTION ("sBAT_PlusCSMS()");

  ret = (T_ACI_BAT_RSLT)sAT_PlusCSMS((T_ACI_CMD_SRC)src_infos_psi->srcId,(T_ACI_CSMS_SERV)cmd->params.ptr_set_plus_csms->service);
  
  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : qBAT_PlusCSMS        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT qBAT_PlusCSMS        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  T_ACI_CSMS_SERV service;
  T_ACI_CSMS_SUPP mt;
  T_ACI_CSMS_SUPP mo;
  T_ACI_CSMS_SUPP bm;
  T_BAT_cmd_response resp;
  T_BAT_res_que_plus_csms que_csms_buffer;
  
  TRACE_FUNCTION ("qBAT_PlusCSMS()");
  
  resp.ctrl_response = BAT_RES_QUE_PLUS_CSMS; 
  resp.response.ptr_que_plus_csms = &que_csms_buffer;
  ret = (T_ACI_BAT_RSLT)qAT_PlusCSMS((T_ACI_CMD_SRC)src_infos_psi->srcId,&service,&mt,&mo,&bm);
  switch(ret)
  {
  case ACI_BAT_CMPL :
    resp.response.ptr_que_plus_csms->service = (T_BAT_plus_csms_service)service;
    resp.response.ptr_que_plus_csms->mt = (T_BAT_plus_csms_mt)mt;
    resp.response.ptr_que_plus_csms->mo = (T_BAT_plus_csms_mo)mo;
    resp.response.ptr_que_plus_csms->bm = (T_BAT_plus_csms_bm)bm;
    aci_bat_send(src_infos_psi,&resp);
   /*lint -fallthrough*/
  default :
    return (ret);
  }  
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCPMS        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCPMS        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  T_BAT_plus_cpms_mem1      mem1;    
  T_BAT_plus_cpms_mem2      mem2 = BAT_CPMS_MEM2_NOT_PRESENT;
  T_BAT_plus_cpms_mem3      mem3 = BAT_CPMS_MEM3_NOT_PRESENT;  
  
  TRACE_FUNCTION ("sBAT_PlusCPMS()");

  mem1 = cmd->params.ptr_set_plus_cpms->mem1;  
  mem2 = cmd->params.ptr_set_plus_cpms->mem2;
  mem3 = cmd->params.ptr_set_plus_cpms->mem3;  
  ret = (T_ACI_BAT_RSLT)sAT_PlusCPMS ( (T_ACI_CMD_SRC)src_infos_psi->srcId,(T_ACI_SMS_STOR)mem1, (T_ACI_SMS_STOR)mem2, (T_ACI_SMS_STOR)mem3);
  
  return (ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : qBAT_PlusCPMS        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT qBAT_PlusCPMS        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  
  TRACE_FUNCTION ("qBAT_PlusCPMS()");
  ret = (T_ACI_BAT_RSLT)qAT_PlusCPMS ( (T_ACI_CMD_SRC)src_infos_psi->srcId );
  /* ..............RECEHECK............. */
  /* Needs to be looked into. The cmd params are not filled thru this function call
  see implementation of qAT_plusCPMS, Needs to be rewritten */

  return (ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCSCA        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSCA        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  T_ACI_TOA     tosca;
  T_ACI_TOA    *p_tosca;
  CHAR          sca[MAX_SMS_NUM_LEN];
  
  TRACE_FUNCTION ("sBAT_PlusCSCA()");

  memset (sca, 0, sizeof(sca));
  p_tosca=&tosca;

  if(cmd->params.ptr_set_plus_csca->tosca EQ (S16)BAT_PARAMETER_NOT_PRESENT)
  {
    p_tosca = NULL;
  }
  else
  {
    tosca=toa_demerge(cmd->params.ptr_set_plus_csca->tosca);
    if (tosca.ton < 0 OR tosca.npi < 0)
    {
      ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
      return (ACI_BAT_FAIL);
    }
  }
  memcpy(sca,cmd->params.ptr_set_plus_csca->sca,cmd->params.ptr_set_plus_csca->c_sca);  
  ret = (T_ACI_BAT_RSLT)sAT_PlusCSCA((T_ACI_CMD_SRC)src_infos_psi->srcId,sca,p_tosca);

  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : qBAT_PlusCSCA        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT qBAT_PlusCSCA        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  T_ACI_TOA     tosca;
  SHORT         octet=0;
  CHAR          sca[MAX_SMS_NUM_LEN];
  T_BAT_cmd_response resp;
  T_BAT_res_que_plus_csca que_csca_buffer;
  
  TRACE_FUNCTION ("qBAT_PlusCSCA()");
  ret = (T_ACI_BAT_RSLT)qAT_PlusCSCA ((T_ACI_CMD_SRC)src_infos_psi->srcId,sca,&tosca);
  resp.ctrl_response = BAT_RES_QUE_PLUS_CSCA; 
  resp.response.ptr_que_plus_csca = &que_csca_buffer;
  switch(ret)
  {
  case ACI_BAT_CMPL :
    octet=toa_merge(tosca);
    resp.response.ptr_que_plus_csca->tosca = (U8)octet;
    resp.response.ptr_que_plus_csca->c_sca = strlen(sca);
    /* Are we sure the length is strlen(sca)? */
    memcpy(resp.response.ptr_que_plus_csca->sca,sca,strlen(sca));
    aci_bat_send(src_infos_psi,&resp);
  /*lint -fallthrough*/
  default :
    return (ret);
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCSCB        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSCB        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  USHORT *p_mids;
  UBYTE  *p_dcss;
  
  TRACE_FUNCTION ("sBAT_PlusCSCB()");

  if(cmd->params.ptr_set_plus_cscb->v_mids)
  {
    p_mids = cmd->params.ptr_set_plus_cscb->mids;
  }
  else
  {
    p_mids = NULL;
  }
  if(cmd->params.ptr_set_plus_cscb->v_dcss)
  {
    p_dcss = cmd->params.ptr_set_plus_cscb->dcss;
  }
  else
  {
    p_dcss = NULL;
  }
  ret=(T_ACI_BAT_RSLT)sAT_PlusCSCB((T_ACI_CMD_SRC)src_infos_psi->srcId, (T_ACI_CSCB_MOD)cmd->params.ptr_set_plus_cscb->mode, p_mids, p_dcss);

  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : qBAT_PlusCSCB        |
+--------------------------------------------------------------------+

  PURPOSE : to query the cell broadcast channels, we pass to qAT_PlusCSCB()
            two arrays (mids and dcss), which are filled in the following way:
            - two consecutive array entries form one logical information
            - when both entries have the same value, then it is a single channel
            - when both entries have different values, then it is a range of channels.
            mids is more or less a copy of EF CBMIR of the SIM. refer to 11.11
            A string based response +CSCB: 0,"2,3,4-6,7,922-1003","0-3,5"
            is on binary level as follow:
            mode = BAT_CSCB_MODE_ACCEPT; <=== 0 = accepted
            mids[0] = 0x0002;
            mids[1] = 0x0002;
            mids[2] = 0x0003;
            mids[3] = 0x0003;
            mids[4] = 0x0004; <=== range lower bound
            mids[5] = 0x0006; <=== range upper bound
            mids[6] = 0x0007;
            mids[7] = 0x0007;
            mids[8] = 0x039A; <=== range lower bound  
            mids[9] = 0x03EB; <=== range upper bound
            dcss[0] = 0x00;
            dcss[1] = 0x03;
            dcss[2] = 0x05;
            dcss[3] = 0x05;
            
*/
GLOBAL T_ACI_BAT_RSLT qBAT_PlusCSCB        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT       ret = ACI_BAT_FAIL;
  T_BAT_cmd_response   resp;
  T_BAT_res_que_plus_cscb cscb;
  int i;
  
  TRACE_FUNCTION ("qBAT_PlusCSCB()");
  
  resp.ctrl_response = BAT_RES_QUE_PLUS_CSCB; 
  resp.response.ptr_que_plus_cscb = &cscb;

  cscb.c_mids = 0;
  cscb.v_mids = FALSE;
  cscb.c_dcss = 0;
  cscb.v_dcss = FALSE;

  memset(cscb.mids, 0xFF, BAT_MAX_IDENTS);
  memset(cscb.dcss, 0xFF, BAT_MAX_IDENTS);
  
  ret = (T_ACI_BAT_RSLT)qAT_PlusCSCB((T_ACI_CMD_SRC)src_infos_psi->srcId,
                    (T_ACI_CSCB_MOD*)&cscb.mode,
                     cscb.mids,
                     cscb.dcss);

  switch(ret)
  {
  case ACI_BAT_CMPL :
    i = 0;
    
    if  ((cscb.mids[0] NEQ 0xFFFF) 
     AND (cscb.mids[1] NEQ 0xFFFF))
    {
      cscb.v_mids = TRUE;
    }
    
    while ((i < BAT_MAX_IDENTS-1)
      AND  (cscb.mids[i]   NEQ 0xFFFF) 
      AND  (cscb.mids[i+1] NEQ 0xFFFF))
    {
      i += 2;
      cscb.c_mids += 2;
    }
    
    i = 0;
    
    if  ((cscb.dcss[0]   NEQ 0xFF)    
     AND (cscb.dcss[1] NEQ 0xFF))
    {
      cscb.v_dcss = TRUE;
    }
    
    while ((i < BAT_MAX_IDENTS-1)
      AND  (cscb.dcss[i]   NEQ 0xFF)
      AND  (cscb.dcss[i+1] NEQ 0xFF))
    {
      i += 2;
      cscb.c_dcss += 2;
    }
    
    aci_bat_send(src_infos_psi,&resp);
  /*lint -fallthrough*/
  default :
    return (ret);
  }
}

#ifdef _SIMULATION_
#pragma message( __TODO__"FF_HOMEZONE is currently a problem for linking" )
#endif
/* #ifdef FF_HOMEZONE */
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PercentCBHZ     |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PercentCBHZ     (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
 
  TRACE_FUNCTION ("sBAT_PercentCBHZ()");
  
/* CBHZ_xxx depends on FF_HOMEZONE
  ret = sAT_PercentCBHZ(src_infos_psi->srcId,cmd->params.ptr_set_percent_cbhz->mode
                          ,cmd->params.ptr_set_percent_cbhz->dcs,
                          cmd->params.ptr_set_percent_cbhz->timeout);
  if (ret EQ AT_FAIL)
  {
    ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_Unknown);
    return (ACI_BAT_FAIL);
  }
  return (ACI_BAT_CMPL); 
*/
  return(ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : tBAT_PercentCBHZ     |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT tBAT_PercentCBHZ     (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
/* CBHZ_xxx depends on FF_HOMEZONE  
  T_BAT_cmd_response resp;
  T_BAT_res_tst_percent_cbhz tst_cbhz_buffer;
  T_BAT_percent_cbhz_mode   mode;
  T_ACI_CS        dcs;
  T_BAT_percent_cbhz_timeout timeout = BAT_P_CBHZ_TIMOUT_NOT_PRESENT;
  
  TRACE_FUNCTION ("tBAT_PercentCBHZ()");
  resp.ctrl_response = BAT_RES_QUE_PERCENT_CBHZ; 
  resp.response.ptr_tst_percent_cbhz = &tst_cbhz_buffer;


  resp.response.ptr_tst_percent_cbhz->mode =  CBHZ_MOD_Active;
  resp.response.ptr_tst_percent_cbhz->dcs =  CS_Ascii; 
  resp.response.ptr_tst_percent_cbhz->timeout = CBHZ_MAX_TIMEOUT;

  dont know how to fill the lower values ??? 
  CBHZ_xxx depends on FF_HOMEZONE
  aci_bat_send(src_infos_psi,&resp);
  return(ACI_BAT_CMPL);
*/
  return(ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : qBAT_PercentCBHZ     |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT qBAT_PercentCBHZ     (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
/* qAT_PercentCBHZ depends on FF_HOMEZONE
  T_BAT_percent_cbhz_mode   mode;
  T_ACI_CS        dcs;
  T_BAT_percent_cbhz_timeout timeout = BAT_P_CBHZ_TIMOUT_NOT_PRESENT;
  T_BAT_cmd_response resp;
  T_BAT_res_que_percent_cbhz que_cbhz_buffer;
  
  TRACE_FUNCTION ("qBAT_PercentCBHZ()");

  resp.ctrl_response = BAT_RES_QUE_PERCENT_CBHZ; 
  resp.response.ptr_que_percent_cbhz = &que_cbhz_buffer;
  ret = qAT_PercentCBHZ(src_infos_psi->srcId, &mode, &dcs, &timeout);
  if (ret EQ AT_FAIL)
  {
    ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_NotPresent);
    return (ATI_FAIL);
  }
  resp.response.ptr_que_percent_cbhz->mode = mode;
  resp.response.ptr_que_percent_cbhz->timeout = timeout;
  resp.response.ptr_que_percent_cbhz->dcs = dcs;
*/
  return(ret);
}

/* #endif *//* FF_HOMEZONE */
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCSAS        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSAS        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
      
  TRACE_FUNCTION ("sBAT_PlusCSAS()");

  ret = (T_ACI_BAT_RSLT)sAT_PlusCSAS ((T_ACI_CMD_SRC)src_infos_psi->srcId,cmd->params.ptr_set_plus_csas->profile);

  return ret;
}


/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : tBAT_PlusCSAS        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT tBAT_PlusCSAS        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  SHORT        profile  = -1;
  T_BAT_cmd_response resp;
  T_BAT_res_tst_plus_csas tst_csas_buffer;

      
  TRACE_FUNCTION ("tBAT_PlusCSAS()");

  if ((profile = cmhSMS_getPrfRge ()) < 1)
  {
    ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_MemFail );
    return (ACI_BAT_FAIL);
  }
  else
  {
    resp.ctrl_response = BAT_RES_TST_PLUS_CSAS; 
    resp.response.ptr_tst_plus_csas = &tst_csas_buffer;
    resp.response.ptr_tst_plus_csas->max = (profile - 1) ;
    aci_bat_send(src_infos_psi,&resp);
    return (ACI_BAT_CMPL);
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCRES        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCRES        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  
  TRACE_FUNCTION ("sBAT_PlusCRES()");

  ret = (T_ACI_BAT_RSLT)sAT_PlusCRES ((T_ACI_CMD_SRC)src_infos_psi->srcId,cmd->params.ptr_set_plus_cres->profile);

  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : tBAT_PlusCRES        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT tBAT_PlusCRES        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_CRES       profile ;
  T_BAT_cmd_response resp;
  T_BAT_res_tst_plus_cres tst_cres_buffer;
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
      
  TRACE_FUNCTION ("tBAT_PlusCRES()");

  ret = (T_ACI_BAT_RSLT)tAT_PlusCRES ((T_ACI_CMD_SRC)src_infos_psi->srcId, &profile);
  switch (ret)
  {
    case ACI_BAT_CMPL:
    {
      break;
    }
    case ACI_BAT_FAIL:
    default:
    {
      ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_MemFail );
      return (ACI_BAT_FAIL);
    }
  }
  resp.ctrl_response = BAT_RES_TST_PLUS_CRES; 
  resp.response.ptr_tst_plus_cres = &tst_cres_buffer;
  resp.response.ptr_tst_plus_cres->max = profile.max ;
  /* there is no min field to fill in */
  //resp.response.ptr_tst_plus_cres->min = profile.min ;
  aci_bat_send(src_infos_psi,&resp);
  return (ACI_BAT_CMPL);
}


  /*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCMGR        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMGR        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  SHORT idx=-1;
  
  TRACE_FUNCTION ("sBAT_PlusCMGR()");

  idx = cmd->params.ptr_set_plus_cmgr->sms_index;
  if ( idx > 255 OR idx < 0)
  {
    ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
    return (ACI_BAT_FAIL);
  }
  ret = (T_ACI_BAT_RSLT)sAT_PlusCMGR_Gl((T_ACI_CMD_SRC)src_infos_psi->srcId, (UBYTE)idx, SMS_READ_Normal, NULL);
 /* 
  TO DO 
  ret = sAT_PlusCMGR_Gl(src_infos_psi->srcId, (UBYTE)idx, cmglRead, NULL);
 
*/
  return (ret);
}

  /*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PercentCMGR     |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PercentCMGR    (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  SHORT idx=-1;
#ifdef SMS_PDU_SUPPORT
  T_ACI_CMGF_MOD mode;
#endif
  CHAR           *txtRdMode = NULL;

  
  TRACE_FUNCTION ("sBAT_PercentCMGR()");

  smsReadMode  = SMS_READ_Normal;

#ifdef SMS_PDU_SUPPORT
    /*
     * request current mode
     */
    qAT_PlusCMGF((T_ACI_CMD_SRC)src_infos_psi->srcId, &mode);
    if (mode EQ 0)
    {
      /*
       * %CMGR=[index],[preview]
       */
      idx = cmd->params.ptr_set_percent_cmgr->sms_index;
      smsReadMode  = (T_ACI_SMS_READ)cmd->params.ptr_set_percent_cmgr->rdmode;
      if ( idx > 255 OR idx < 0 OR smsReadMode  > SMS_READ_StatusChange)
      {
        ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
        return (ACI_BAT_FAIL);
      }
    }
    else
#endif
    {
      idx = cmd->params.ptr_set_percent_cmgr->sms_index;
      if ( idx > 255 OR idx < 0)
      {
        ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
        return (ACI_BAT_FAIL);
      }
      txtRdMode = (CHAR *)&cmd->params.ptr_set_percent_cmgr->rdmode;
      if (txt_rdmode_to_smsrdmode(txtRdMode) EQ ATI_FAIL)
      {
        return (ACI_BAT_FAIL);
      }
    }
    ret = (T_ACI_BAT_RSLT)sAT_PercentCMGR_Gl((T_ACI_CMD_SRC)src_infos_psi->srcId, (UBYTE)idx, smsReadMode , NULL);

  return (ret);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCMGS        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMGS        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret;
  T_ACI_SM_DATA pdu;

  TRACE_FUNCTION ("sBAT_PlusCMGS()");

  /*
  *   Check that 'data' in the T_ACI_SM_DATA structure is large enough
  *   to store the data in the BAT command. If it isn't then we may
  *   as well give up.
  */
  if (cmd->params.ptr_set_plus_cmgs->c_pdu>MAX_SM_LEN)
  {
    ACI_ERR_DESC(ACI_ERR_CLASS_Ext,EXT_ERR_Parameter);
    return(ACI_BAT_FAIL);
  }
  
  /*
  *   Copy the data, secure in the knowledge that we have enough room.
  */
  memcpy(
    pdu.data,
    cmd->params.ptr_set_plus_cmgs->pdu,
    MAX_SM_LEN);

  pdu.len=cmd->params.ptr_set_plus_cmgs->c_pdu;

  /*
  *   Call the corresponding sAT function. T_ACI_BAT_RSLT is
  *   assumed to be equivalent to T_ACI_RESULT.
  */
  ret=(T_ACI_BAT_RSLT)sAT_PlusCMGSPdu((T_ACI_CMD_SRC)src_infos_psi->srcId,&pdu);

  return(ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCMSS        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMSS        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  T_ACI_TOA     toda;
  T_ACI_TOA    *p_toda;
  SHORT         index=-1,
                toda_val=0;
  CHAR          da[MAX_SMS_NUM_LEN] , *p_da;
  
  TRACE_FUNCTION ("sBAT_PlusCMSS()");

  p_toda=&toda;
  p_da=da;

  index = cmd->params.ptr_set_plus_cmss->index;
  if(cmd->params.ptr_set_plus_cmss->v_da)
  {
    memcpy(da,cmd->params.ptr_set_plus_cmss->da,cmd->params.ptr_set_plus_cmss->c_da);
  }
  else
  {
    p_da = NULL;
  }
  toda_val=cmd->params.ptr_set_plus_cmss->toda;
  if(toda_val EQ (SHORT)BAT_PARAMETER_NOT_PRESENT)
  {
    p_toda=NULL;
  }
  else
  {
    toda=toa_demerge(toda_val);
    if (toda.ton < 0 OR toda.npi < 0)
    {
      ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); 
      return (ACI_BAT_FAIL);
    }
  }
  ret = (T_ACI_BAT_RSLT)sAT_PlusCMSS_Gl((T_ACI_CMD_SRC)src_infos_psi->srcId, (UBYTE)index, p_da, p_toda, NULL, NULL);

  return (ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCMGW        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMGW        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  T_ACI_SMS_STAT    stat;
  T_ACI_SM_DATA     pdu;
  UBYTE sca_len;
  UBYTE pdu_message_octets_length = 0;
  
  TRACE_FUNCTION ("sBAT_PlusCMGW()");
  
  stat = (T_ACI_SMS_STAT)cmd->params.ptr_set_plus_cmgw->sms_stat;
  sca_len = cmd->params.ptr_set_plus_cmgw->pdu[0];
  /* The first octet in pdu is length of sca */  
  
  if (sca_len > ((MAX_SMS_ADDR_DIG+1)/2) + 1)
  {
    TRACE_ERROR("SCA too long !!!");
    ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
    return (ACI_BAT_FAIL);
  }

  pdu_message_octets_length = (cmd->params.ptr_set_plus_cmgw->length-2-sca_len*2)/2;
  if(pdu_message_octets_length NEQ cmd->params.ptr_set_plus_cmgw->length)
  {
    ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
    TRACE_EVENT("ERROR: input pdu message length do not match the real length!");
    return (ACI_BAT_FAIL);
  }
  memcpy(pdu.data,cmd->params.ptr_set_plus_cmgw->pdu,cmd->params.ptr_set_plus_cmgw->c_pdu);
  ret = (T_ACI_BAT_RSLT)sAT_PlusCMGWPdu ((T_ACI_CMD_SRC)src_infos_psi->srcId, (UBYTE)stat, &pdu);

  return (ret);
}

/*
|+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT               |
| STATE   : code                       ROUTINE : sBAT_PlusCNMA        |
+---------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCNMA        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{  
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  T_ACI_SM_DATA  pdu = {0}, *p_pdu;
  
  TRACE_FUNCTION ("sBAT_PlusCNMA()");
  p_pdu = &pdu;
  if(cmd->params.ptr_set_plus_cnma->v_pdu)
  {
    memcpy(pdu.data,cmd->params.ptr_set_plus_cnma->pdu,cmd->params.ptr_set_plus_cnma->c_pdu);
    pdu.len = cmd->params.ptr_set_plus_cnma->c_pdu ; 
  }
  else
  {
    p_pdu = NULL;
  }
  ret = (T_ACI_BAT_RSLT)sAT_PlusCNMAPdu ((T_ACI_CMD_SRC)src_infos_psi->srcId, (SHORT)cmd->params.ptr_set_plus_cnma->n, p_pdu);

  return(ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCMGD        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMGD        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  SHORT index=-1;
  SHORT status = BAT_CMGD_DEL_INDEX;

  
  TRACE_FUNCTION ("sBAT_PlusCMGD()");
 
  index = cmd->params.ptr_set_plus_cmgd->index;
  status = cmd->params.ptr_set_plus_cmgd->status;

  if((index > 255 OR index < 0) OR ((status < BAT_CMGD_DEL_INDEX) OR (status > BAT_CMGD_DEL_ALL)))
  {
    ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
    return (ACI_BAT_CMPL);
  }

  if (status > BAT_CMGD_DEL_INDEX)
  {
    index = 0;
  }
  ret = (T_ACI_BAT_RSLT)sAT_PlusCMGD_Gl((T_ACI_CMD_SRC)src_infos_psi->srcId,(UBYTE)index,status,NULL,NULL);

  return (ret);
}
  
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCMGC        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMGC (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_SM_DATA     pdu;
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  UBYTE sca_len;

  TRACE_FUNCTION ("sBAT_PlusCMGC()");

  sca_len = cmd->params.ptr_set_plus_cmgc->pdu[0];
  /* The first octet in pdu is length of sca */  

  if (sca_len > ((MAX_SMS_ADDR_DIG+1)/2) + 1)
  {
    TRACE_ERROR("SCA too long !!!");
    ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
    return (ACI_BAT_FAIL);
  }
   /*
  pdu_message_octets_length = (cmd->params.ptr_set_plus_cmgc->length-2-sca_len*2)/2;
 
  if(pdu_message_octets_length NEQ cmd->params.ptr_set_plus_cmgc->length)
  {
    ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
    TRACE_EVENT("ERROR: input pdu message length in cmgc do not match the real length!");
    return (ACI_BAT_FAIL);
  }
  length paramter is not present in cmgc struct ??? its there in old ati code
  */
  memcpy(pdu.data,cmd->params.ptr_set_plus_cmgc->pdu,cmd->params.ptr_set_plus_cmgc->c_pdu);
  pdu.len = cmd->params.ptr_set_plus_cmgc->c_pdu ;
  ret = (T_ACI_BAT_RSLT)sAT_PlusCMGCPdu ( (T_ACI_CMD_SRC)src_infos_psi->srcId, &pdu );

  return (ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCMGL        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMGL        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  
  TRACE_FUNCTION ("sBAT_PlusCMGL()");

  ret = (T_ACI_BAT_RSLT)sAT_PlusCMGL ( (T_ACI_CMD_SRC)src_infos_psi->srcId, (T_ACI_SMS_STAT)cmd->params.ptr_set_plus_cmgl->stat, 0, SMS_READ_Normal );

  return (ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PercentCMGL     |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PercentCMGL   (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
#ifdef SMS_PDU_SUPPORT
  T_ACI_CMGF_MOD mode;
#endif
  CHAR           *txtRdMode = NULL;
  CHAR           *txtStat = NULL;
  USHORT i;

  TRACE_FUNCTION ("sBAT_PercentCMGL()");

#ifdef SMS_PDU_SUPPORT
    /*
     * request current mode
     */
    qAT_PlusCMGF((T_ACI_CMD_SRC)src_infos_psi->srcId, &mode);
    if (mode EQ 0)
    {
      /*
       * %CMGL=[stat],[preview]
       */
      smsReadMode  = (T_ACI_SMS_READ)cmd->params.ptr_set_percent_cmgl->rdmode;
      cmglStat = (T_ACI_SMS_STAT)cmd->params.ptr_set_percent_cmgl->stat;
      if ( ((cmglStat < SMS_STAT_RecUnread OR cmglStat > SMS_STAT_All)
                  AND smsReadMode EQ SMS_READ_NotPresent) 
            OR (smsReadMode  < (T_ACI_SMS_READ)SMS_STAT_RecUnread AND smsReadMode  > SMS_READ_NotPresent) 
            OR (smsReadMode  > SMS_READ_StatusChange))
      {
        ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
        return (ACI_BAT_FAIL);
      }
    }
    else
#endif
    {
      txtStat = (char*)&cmd->params.ptr_set_percent_cmgl->stat;
      txtRdMode = (char*)&cmd->params.ptr_set_percent_cmgl->rdmode;
      if (txtStat[0] EQ '\0')
      {
        strcpy (txtStat, sms_stat[4].name); /* ALL as default */
      }
      i = 0;
      while ( sms_stat[i].name NEQ NULL            AND
              strcmp ( sms_stat[i].name, txtStat ) NEQ 0 )
        i++;

      if ( sms_stat[i].name EQ NULL )
      {
        ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_OpNotAllowed);
        return (ACI_BAT_FAIL);
      }
      cmglStat = sms_stat[i].stat;

      if (txt_rdmode_to_smsrdmode(txtRdMode) EQ ATI_FAIL)
      {
        return (ACI_BAT_FAIL);
      }
    }

  ret = (T_ACI_BAT_RSLT)sAT_PercentCMGL ( (T_ACI_CMD_SRC)src_infos_psi->srcId, cmglStat, smsReadMode  );

  return (ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PlusCNMI        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/


GLOBAL T_ACI_BAT_RSLT sBAT_PlusCNMI        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  
  TRACE_FUNCTION ("sBAT_PlusCNMI()");

  ret = (T_ACI_BAT_RSLT)sAT_PlusCNMI ( (T_ACI_CMD_SRC)src_infos_psi->srcId, (T_ACI_CNMI_MT)cmd->params.ptr_set_plus_cnmi->mt, (T_ACI_CNMI_BM)cmd->params.ptr_set_plus_cnmi->bm, (T_ACI_CNMI_DS)cmd->params.ptr_set_plus_cnmi->ds );
  switch(ret)
  {
  case ACI_BAT_CMPL :
    if(src_infos_psi->srcId NEQ CMD_SRC_LCL)
    {
      smsShrdPrm.smsSrcId = (T_ACI_CMD_SRC)src_infos_psi->srcId;
    }
  /*lint -fallthrough*/
  default :
    return(ret);
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : qBAT_PlusCNMI        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT qBAT_PlusCNMI        (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret           = ACI_BAT_FAIL;
  T_BAT_plus_cnmi_mt        mt = BAT_CNMI_MT_NOT_PRESENT;                       /*<  0:  4> (enum=32bit)<->T_BAT_plus_cnmi_mt Indication routing for SMS-DELIVERs */
  T_BAT_plus_cnmi_bm        bm = BAT_CNMI_BM_NOT_PRESENT;                       /*<  4:  4> (enum=32bit)<->T_BAT_plus_cnmi_bm Indication routing for CBMs */
  T_BAT_plus_cnmi_ds        ds = BAT_CNMI_DS_NOT_PRESENT;        
  T_BAT_cmd_response resp;
  T_BAT_res_que_plus_cnmi que_cnmi_buffer;
  
  TRACE_FUNCTION ("qBAT_PlusCNMI()");

  resp.ctrl_response = BAT_RES_QUE_PLUS_CNMI; 
  resp.response.ptr_que_plus_cnmi = &que_cnmi_buffer;

  ret = (T_ACI_BAT_RSLT)qAT_PlusCNMI ( (T_ACI_CMD_SRC)src_infos_psi->srcId,(T_ACI_CNMI_MT*)&mt,(T_ACI_CNMI_BM*)&bm,(T_ACI_CNMI_DS*)&ds );
  switch(ret)
  {
  case ACI_BAT_CMPL :
    resp.response.ptr_que_plus_cnmi->mt = mt;
    resp.response.ptr_que_plus_cnmi->bm = bm;
    resp.response.ptr_que_plus_cnmi->ds = ds;
    aci_bat_send(src_infos_psi,&resp);
  /*lint -fallthrough*/
  default :
    return (ret);
  }
}

#ifdef TI_PS_FF_AT_P_CMD_CPRSM
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : sBAT_PercentCPRSM    |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT sBAT_PercentCPRSM    (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  //T_ACI_CPRSM_MOD mode = CPRSM_MOD_NotPresent;
  
  TRACE_FUNCTION ("sBAT_PercentCPRSM()");
  
  ret = (T_ACI_BAT_RSLT)sAT_PercentCPRSM((T_ACI_CMD_SRC)src_infos_psi->srcId, (T_ACI_CPRSM_MOD)cmd->params.ptr_set_percent_cprsm->mode);
  switch (ret)
  {
    case (ACI_BAT_CMPL):
    case (ACI_BAT_EXCT):
    {
      break;
    }
    default:
    {      
      TRACE_EVENT_P1("+CPRSM ERROR: undefined result: %d", ret);
      ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_UnknownErr);
      return ACI_BAT_FAIL;
    }
  }
  return(ret);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
| STATE   : code                      ROUTINE : qBAT_PercentCPRSM    |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_BAT_RSLT qBAT_PercentCPRSM    (T_ACI_DTI_PRC_PSI *src_infos_psi,
                                            T_BAT_cmd_send    *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
    
  TRACE_FUNCTION ("qBAT_PercentCPRSM()");
  ret = (T_ACI_BAT_RSLT)qAT_PercentCPRSM( (T_ACI_CMD_SRC)src_infos_psi->srcId );
  /* Does not fill in the response structure? */
  /* ACI does not fill in response mode in qAT_PercentCPRSM?*/
  
  return (ret);
}
#endif /* TI_PS_FF_AT_P_CMD_CPRSM */

#ifdef REL99
GLOBAL T_ACI_BAT_RSLT sBAT_PercentCMGRS   (T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_send *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;

  TRACE_FUNCTION("sBAT_PercentCMGRS()");

  if(cmd->params.ptr_set_percent_cmgrs->mode > BAT_CMGRS_MODE_MANUAL_RETRANS)
  {
    return (ACI_BAT_FAIL);
  }

  ret = (T_ACI_BAT_RSLT)sAT_PercentCMGRS((T_ACI_CMD_SRC)src_infos_psi->srcId,
                         (T_ACI_CMGRS_MODE)cmd->params.ptr_set_percent_cmgrs->mode);
  return (ret);
}

GLOBAL T_ACI_BAT_RSLT qBAT_PercentCMGRS   (T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_send *cmd)
{
  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
  T_BAT_cmd_response resp;
  UBYTE        auto_rep_flag;
  T_BAT_res_que_percent_cmgrs que_cmgrs;

  TRACE_FUNCTION ("qBAT_PercentCMGRS()");

  resp.ctrl_response = BAT_RES_QUE_PERCENT_CMGRS;
  resp.response.ptr_que_percent_cmgrs = &que_cmgrs;

  ret = (T_ACI_BAT_RSLT)qAT_PercentCMGRS((T_ACI_CMD_SRC)src_infos_psi->srcId,&auto_rep_flag);

  switch(ret)
  {
  case ACI_BAT_CMPL :
    resp.response.ptr_que_percent_cmgrs->mode = (T_BAT_percent_cmgrs_mode)auto_rep_flag;
    aci_bat_send(src_infos_psi,&resp);
  /*lint -fallthrough*/
  default :
    return (ret);
  }
} 
#endif /* REL99 */