diff src/aci2/aci/aci_bat_sim.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/aci/aci_bat_sim.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,740 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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 "aci_bat_cmh.h" /* prototypes of sBAT_,qBAT_,tBAT_ */ 
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+#include "aci_bat.h"
+#include "psa.h"
+#include "cmh.h"
+#include "audio.h"
+#include "aci_ext_pers.h"
+#include "aci_slock.h"
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCPIN        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCPIN        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  char pinOld [MAX_PWD_LENGTH]={0};  
+  char pinNew [MAX_PWD_LENGTH]={0};
+  char* p_pinNew;
+  UBYTE slockBlocked = 0;
+  
+  TRACE_FUNCTION ("sBAT_PlusCPIN()");
+
+  p_pinNew = pinNew;
+  memset(pinOld,0,MAX_PWD_LENGTH);
+   
+  memcpy(pinOld,cmd->params.ptr_set_plus_cpin->pin,cmd->params.ptr_set_plus_cpin->c_pin);
+  if(cmd->params.ptr_set_plus_cpin->v_newpin)
+  {
+    memcpy(pinNew,cmd->params.ptr_set_plus_cpin->newpin,cmd->params.ptr_set_plus_cpin->c_newpin);
+  }
+  else
+  {
+    p_pinNew = NULL;
+  }
+  #ifdef SIM_PERS
+  slockBlocked = AciSLockShrd.blocked;
+  #endif
+  ret = sAT_PlusCPIN (src_infos_psi->srcId,pinOld,p_pinNew);
+
+  switch(ret)
+  {
+    case(AT_EXCT):
+    case (AT_FAIL):
+    {
+      break;
+    }
+    case(AT_BUSY):
+    {
+      ACI_ERR_DESC(ACI_ERR_CLASS_Cme, CME_ERR_SimBusy);
+      break;
+    }
+    case(AT_CMPL):
+    {
+      if (!slockBlocked)
+      {
+        ACI_ERR_DESC(ACI_ERR_CLASS_Cme, CME_ERR_Unknown);
+      }
+      break;
+    }
+  }
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : qBAT_PlusCPIN        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT qBAT_PlusCPIN        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_ACI_CPIN_RSLT code;
+  T_BAT_cmd_response resp;
+  T_BAT_res_que_plus_cpin que_cpin_buffer;
+  
+  TRACE_FUNCTION ("qBAT_PlusCPIN()");
+  
+  ret= qAT_PlusCPIN (src_infos_psi->srcId,&code);  
+  resp.ctrl_response = BAT_RES_QUE_PLUS_CPIN; /*PIN status is requested*/ 
+  resp.response.ptr_que_plus_cpin = &que_cpin_buffer;
+  
+  switch (ret)
+  {
+    case(AT_CMPL):
+    {
+      resp.response.ptr_que_plus_cpin->code = code;
+      aci_bat_send(src_infos_psi,&resp);
+      break;
+    }
+    case(AT_EXCT):
+    default :
+    {
+      break;
+    }
+  }
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCPOL        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCPOL        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_BAT_plus_cpol_format format = BAT_CPOL_FORMAT_NOT_PRESENT ;
+  SHORT           index = (SHORT)BAT_PARAMETER_NOT_PRESENT;
+  char            op[20] = {0};
+  char* p_op;
+  
+  TRACE_FUNCTION ("sBAT_PlusCPOL()");
+  
+  p_op = op;
+  
+  index = cmd->params.ptr_set_plus_cpol->index;
+  format = cmd->params.ptr_set_plus_cpol->format;
+  if(cmd->params.ptr_set_plus_cpol->v_oper)
+  {
+    memcpy(op,cmd->params.ptr_set_plus_cpol->oper,cmd->params.ptr_set_plus_cpol->c_oper);
+  }
+  else
+  {
+    p_op = NULL;
+  }  
+ 
+  ret=sAT_PlusCPOL(src_infos_psi->srcId,index,format,p_op,
+                   (SHORT)BAT_PARAMETER_NOT_PRESENT,CPOL_MOD_NotPresent);
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : tBAT_PlusCPOL        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT tBAT_PlusCPOL        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  SHORT           lastIdx=0,usdNtry=0;
+  T_BAT_cmd_response resp;
+  T_BAT_res_tst_plus_cpol tst_cpol_buffer;
+  
+  TRACE_FUNCTION ("tBAT_PlusCPOL()");
+  resp.ctrl_response = BAT_RES_TST_PLUS_CPOL;
+  resp.response.ptr_tst_plus_cpol = &tst_cpol_buffer;  
+
+  ret = tAT_PlusCPOL(src_infos_psi->srcId,&lastIdx,&usdNtry);
+  if (ret EQ AT_CMPL)
+  {
+    resp.response.ptr_tst_plus_cpol->index1 = 1;
+    resp.response.ptr_tst_plus_cpol->index2 = lastIdx;
+    aci_bat_send(src_infos_psi,&resp);
+  }
+  return ret;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : qBAT_PlusCPOL        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT qBAT_PlusCPOL        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_ACI_CPOL_LST  plmnSelLst;
+  T_BAT_cmd_response resp;
+  T_BAT_res_que_plus_cpol que_cpol_buffer;  
+  SHORT           startIdx=0,lastIdx=0;
+  UBYTE           idx;
+  BOOL            loop;
+  
+  TRACE_FUNCTION ("qBAT_PlusCPOL()");
+  resp.ctrl_response = BAT_RES_QUE_PLUS_CPOL;
+  resp.response.ptr_que_plus_cpol = &que_cpol_buffer;
+
+  switch (qAT_PlusCPOL ( src_infos_psi->srcId,1, &lastIdx,&plmnSelLst[0],CPOL_MOD_NotPresent))
+  {
+    case AT_CMPL:
+    {
+      loop = TRUE;
+      do
+      {
+        if( lastIdx EQ BAT_PARAMETER_NOT_PRESENT )
+        {
+          break;
+        }
+        startIdx = lastIdx+1;
+
+        for( idx=0; idx < MAX_OPER; idx++ )
+        {
+          if( plmnSelLst[idx].index EQ BAT_PARAMETER_NOT_PRESENT )
+          {
+            loop = FALSE;
+            break;
+          }
+          resp.response.ptr_que_plus_cpol->format = plmnSelLst[idx].format;
+          resp.response.ptr_que_plus_cpol->index = (U8)plmnSelLst[idx].index;
+          resp.response.ptr_que_plus_cpol->c_oper = strlen(plmnSelLst[idx].oper);
+          memcpy(resp.response.ptr_que_plus_cpol->oper,plmnSelLst[idx].oper,strlen(plmnSelLst[idx].oper));
+          aci_bat_send(src_infos_psi,&resp);
+        }
+
+        if( qAT_PlusCPOL(src_infos_psi->srcId, startIdx, &lastIdx, &plmnSelLst[0],
+                         CPOL_MOD_NotPresent) EQ AT_FAIL OR !loop)
+        {
+          break;
+        }
+      }
+      while( loop );
+      return ACI_BAT_CMPL;
+    }
+
+    case AT_EXCT:
+    {
+      return ACI_BAT_EXCT;
+    }  
+
+    default:
+    {
+      return ACI_BAT_FAIL;
+    }
+  }  
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCNUM        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCNUM        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+
+  TRACE_FUNCTION ("sBAT_PlusCNUM()");
+
+  if(qAT_PlusCNUM ( src_infos_psi->srcId, CNUM_MOD_NewRead) EQ AT_EXCT)
+  {
+    return ACI_BAT_EXCT;
+  }
+  return ret;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCFUN        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCFUN        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_BAT_plus_cfun_fun  fun = BAT_CFUN_FUN_NOT_PRESENT;
+  T_BAT_plus_cfun_rst rst = BAT_CFUN_RST_NOT_PRESENT;
+    
+  TRACE_FUNCTION ("sBAT_PlusCFUN()");
+
+  /*
+  *   This relies on T_BAT_VAL_plus_cfun_fun being identical to 
+  *   T_ACI_CFUN_FUN and T_BAT_VAL_plus_cfun_rst being identical
+  *   to T_ACI_CFUN_RST. At the time of writing, they are.
+  */
+  fun=(T_ACI_CFUN_FUN)cmd->params.ptr_set_plus_cfun->fun;
+  rst=(T_ACI_CFUN_RST)cmd->params.ptr_set_plus_cfun->rst;
+
+  /*
+  *   Call the corresponding sAT function. T_ACI_BAT_RSLT is
+  *   assumed to be equivalent to T_ACI_RESULT.
+  */
+  ret=(T_ACI_BAT_RSLT)sAT_PlusCFUN(src_infos_psi->srcId,fun,rst);
+
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : qBAT_PlusCFUN        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT qBAT_PlusCFUN (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                     T_BAT_cmd_send *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_ACI_CFUN_FUN fun;
+
+  TRACE_FUNCTION ("qBAT_PlusCFUN()");
+
+  /*
+  *   Call the corresponding sAT function. T_ACI_BAT_RSLT is
+  *   assumed to be equivalent to T_ACI_RESULT.
+  */
+  ret=(T_ACI_BAT_RSLT)qAT_PlusCFUN(src_infos_psi->srcId,&fun);
+
+  /*
+  *   If the query completes, we must send a response.
+  */
+  if (ret==ACI_BAT_CMPL)
+  {
+    T_BAT_cmd_response resp;
+    T_BAT_res_que_plus_cfun cfun_data;
+
+    resp.ctrl_response=BAT_RES_QUE_PLUS_CFUN;
+    resp.response.ptr_que_plus_cfun=&cfun_data;
+
+    /*
+    *   This relies on T_BAT_plus_cfun_fun being identical to 
+    *   T_ACI_CFUN_FUN.
+    */
+    cfun_data.fun=(T_BAT_plus_cfun_fun)fun;
+
+    aci_bat_send(src_infos_psi,&resp);
+  }
+
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCIMI        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCIMI        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  CHAR imsi[MAX_IMSI_LEN+1];
+  T_BAT_cmd_response resp;
+  T_BAT_res_set_plus_cimi set_cimi_buffer;
+  
+  TRACE_FUNCTION ("sBAT_PlusCIMI()");
+
+  resp.ctrl_response = BAT_RES_SET_PLUS_CIMI ;
+  resp.response.ptr_set_plus_cimi = &set_cimi_buffer;
+    
+  ret = qAT_PlusCIMI(src_infos_psi->srcId, imsi);
+  if (ret EQ AT_CMPL)
+  {
+    resp.response.ptr_set_plus_cimi->c_imsi = strlen(imsi);
+    memcpy(resp.response.ptr_set_plus_cimi->imsi,imsi,resp.response.ptr_set_plus_cimi->c_imsi);
+    aci_bat_send(src_infos_psi,&resp);
+  }
+  return ret;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCRSM        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCRSM        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_BAT_plus_crsm_command command;
+  UBYTE           *data;
+  USHORT           lenData    = 0;
+  SHORT            fileId     = (SHORT)BAT_PARAMETER_NOT_PRESENT,
+                   p1         = (SHORT)BAT_PARAMETER_NOT_PRESENT,
+                   p2         = (SHORT)BAT_PARAMETER_NOT_PRESENT,
+                   p3         = (SHORT)BAT_PARAMETER_NOT_PRESENT;
+    
+  TRACE_FUNCTION ("sBAT_PlusCRSM()");
+  
+  command = cmd->params.ptr_set_plus_crsm->command;
+  if(cmd->params.ptr_set_plus_crsm->fileid NEQ BAT_PARAMETER_NOT_PRESENT)
+  {
+    fileId = (SHORT)cmd->params.ptr_set_plus_crsm->fileid;
+  }
+  p1 = cmd->params.ptr_set_plus_crsm->p1;
+  p2 = cmd->params.ptr_set_plus_crsm->p2;
+  p3 = cmd->params.ptr_set_plus_crsm->p3;
+  data = cmd->params.ptr_set_plus_crsm->data;
+
+  ret=sAT_PlusCRSM(
+    src_infos_psi->srcId,
+    command,
+    fileId,
+    p1,p2,p3,
+    (SHORT)cmd->params.ptr_set_plus_crsm->c_data,
+    data);
+
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCSIM        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSIM        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  UBYTE           *data;
+  USHORT           lenData    = 0;
+    
+  TRACE_FUNCTION ("sBAT_PlusCSIM()");
+  
+  data = cmd->params.ptr_set_plus_csim->command;
+  lenData=(USHORT)cmd->params.ptr_set_plus_csim->c_command;
+  
+  if (lenData EQ 0)
+    return ACI_BAT_FAIL;
+
+  ret = sAT_PlusCSIM( src_infos_psi->srcId, lenData, data );
+
+  return ret;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : qBAT_PercentATR      |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT qBAT_PercentATR      (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  UBYTE phase;
+  UBYTE atr_len;
+  UBYTE atr_info[MAX_SIM_ATR];
+  T_BAT_cmd_response resp;
+  T_BAT_res_que_percent_atr que_atr_buffer;
+  
+  TRACE_FUNCTION ("qBAT_PercentATR()");
+  resp.ctrl_response = BAT_RES_QUE_PERCENT_ATR ;
+  resp.response.ptr_que_percent_atr = &que_atr_buffer;
+
+  ret = qAT_PercentATR( src_infos_psi->srcId, &phase, &atr_len, atr_info );
+  if(ret EQ AT_CMPL)
+  {
+    resp.response.ptr_que_percent_atr->phase = phase ;
+    resp.response.ptr_que_percent_atr->c_atr = atr_len;
+    memcpy(resp.response.ptr_que_percent_atr->atr,atr_info,resp.response.ptr_que_percent_atr->c_atr);
+    aci_bat_send(src_infos_psi,&resp);
+  }
+  return(ret);
+}
+  
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PercentPVRF     |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PercentPVRF     (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  CHAR            pin[10];
+  CHAR            newpin[10];
+  CHAR*           p_newpin;
+  
+  TRACE_FUNCTION ("sBAT_PercentPVRF()");
+
+  p_newpin = newpin;
+  memset(pin,0,sizeof(pin));
+  
+  if (cmd->params.ptr_set_percent_pvrf->type > BAT_P_PVRF_TYPE_PUK2)
+  {
+    ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_OpNotAllow);
+    return (ACI_BAT_FAIL);
+  }
+  memcpy(pin,cmd->params.ptr_set_percent_pvrf->pin,cmd->params.ptr_set_percent_pvrf->c_pin);
+  if(cmd->params.ptr_set_percent_pvrf->v_newpin)
+  {
+    memcpy(newpin,cmd->params.ptr_set_percent_pvrf->newpin,cmd->params.ptr_set_percent_pvrf->c_newpin);
+  }
+  else
+  {
+    p_newpin = NULL;
+  }
+  ret = sAT_PercentPVRF (src_infos_psi->srcId,cmd->params.ptr_set_percent_pvrf->type, pin, p_newpin);
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : qBAT_PercentPVRF     |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT qBAT_PercentPVRF     (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_percent_pvrf que_pvrf_buffer;
+  SHORT           pn1cnt = 0;
+  SHORT           pn2cnt = 0;
+  SHORT           pk1cnt = 0;
+  SHORT           pk2cnt = 0;
+  T_BAT_percent_pvrf_ps1 ps1 = BAT_P_PVRF_PS1_NOT_PRESENT ;
+  T_BAT_percent_pvrf_ps2 ps2 = BAT_P_PVRF_PS1_NOT_PRESENT ;
+  
+  TRACE_FUNCTION ("qBAT_PercentPVRF()");
+  
+  resp.ctrl_response = BAT_RES_QUE_PERCENT_PVRF ; 
+  resp.response.ptr_que_percent_pvrf = &que_pvrf_buffer;
+  
+  ret = qAT_PercentPVRF(src_infos_psi->srcId, &pn1cnt, &pn2cnt, &pk1cnt, &pk2cnt,(T_ACI_PVRF_STAT *)&ps1,(T_ACI_PVRF_STAT *)&ps2); 
+  resp.response.ptr_que_percent_pvrf->pn1cnt = pn1cnt;
+  resp.response.ptr_que_percent_pvrf->pn2cnt = pn2cnt;
+  resp.response.ptr_que_percent_pvrf->pk1cnt = pk1cnt;
+  resp.response.ptr_que_percent_pvrf->pk2cnt = pk2cnt;
+  resp.response.ptr_que_percent_pvrf->ps1 = ps1;
+  resp.response.ptr_que_percent_pvrf->ps2 = ps2;
+
+  aci_bat_send(src_infos_psi,&resp);
+  return (ACI_BAT_CMPL);
+ }
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PercentCUST     |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PercentCUST     (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+    
+  TRACE_FUNCTION ("sBAT_PercentCUST()");
+  
+  switch(cmd->params.ptr_set_percent_cust->mode)
+  {
+    case(BAT_P_CUST_MODE_NORMAL):
+    case(BAT_P_CUST_MODE_BEHAVIOUR_1):
+    {
+      if (sAT_PercentCUST(src_infos_psi->srcId, (UBYTE)(cmd->params.ptr_set_percent_cust->mode)) EQ AT_FAIL)
+      {
+        return (ACI_BAT_FAIL);
+      }
+      break;
+    }
+    default:
+    {
+      ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_Unknown);
+      return (ACI_BAT_FAIL);
+    }  
+  }
+  return ACI_BAT_CMPL;
+  }
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : qBAT_PercentCUST     |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT qBAT_PercentCUST     (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_BAT_percent_cust_mode   mode;
+  T_BAT_cmd_response resp;
+  T_BAT_res_que_percent_cust que_cust_buffer;
+    
+  TRACE_FUNCTION ("qBAT_PercentCUST()");
+  
+  resp.ctrl_response = BAT_RES_QUE_PERCENT_CUST; 
+  resp.response.ptr_que_percent_cust = &que_cust_buffer;
+  
+  ret = qAT_PercentCUST(src_infos_psi->srcId,(T_CUST_MOD *)&mode);
+  if (ret NEQ AT_CMPL)
+  {
+    return (ACI_BAT_FAIL);
+  }
+  resp.response.ptr_que_percent_cust->mode = mode;
+  aci_bat_send(src_infos_psi,&resp);
+  return(ret);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PercentSATCC    |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PercentSATCC (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                         T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+    
+  TRACE_FUNCTION ("sBAT_PercentSATCC()");
+
+  ret = sAT_PercentSATCC(src_infos_psi->srcId, cmd->params.ptr_set_percent_satcc->mode);
+
+  return ret;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : qBAT_PercentSATCC    |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT qBAT_PercentSATCC (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                         T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT              ret = ACI_BAT_FAIL;
+  T_BAT_percent_satcc_mode    mode;
+  T_BAT_cmd_response          resp;
+  T_BAT_res_que_percent_satcc que_satcc_buffer;
+
+  TRACE_FUNCTION ("qBAT_PercentSATCC()");
+  
+  resp.ctrl_response = BAT_RES_QUE_PERCENT_SATCC;
+
+  resp.response.ptr_que_percent_satcc = &que_satcc_buffer;
+  
+  ret = qAT_PercentSATCC(src_infos_psi->srcId,(T_SAT_CC_MOD *)&mode);
+
+  if(ret EQ ACI_BAT_CMPL)
+  {
+    resp.response.ptr_que_percent_satcc->mode = mode;
+    aci_bat_send(src_infos_psi,&resp);
+  }
+
+  return(ret);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusEFRSLT      |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PercentEFRSLT   (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_EFRSLT_RES result;
+  T_ACI_BAT_RSLT ret;
+    
+  TRACE_FUNCTION ("sBAT_PercentEFRSLT()");
+
+  /*
+  *   This relies on T_BAT_percent_efrslt_result being identical to 
+  *   T_ACI_EFRSLT_RES.
+  */
+  result=(T_ACI_EFRSLT_RES)cmd->params.ptr_set_percent_efrslt->result;
+
+  /*
+  *   Call the corresponding ACI function. T_ACI_BAT_RSLT is
+  *   assumed to be equivalent to T_ACI_RESULT.
+  */
+  ret=(T_ACI_BAT_RSLT)sAT_PercentEFRSLT(src_infos_psi->srcId,result);
+
+  return(ret);
+}
+