diff src/aci2/aci/aci_bat_sms.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_sms.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,1269 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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);
+
+LOCAL SHORT  length_of_pdu_message = 0;
+LOCAL UBYTE  pdu_error_detected = FALSE;
+/*
++--------------------------------------------------------------------+
+| 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 = sAT_PlusCSMS(src_infos_psi->srcId,cmd->params.ptr_set_plus_csms->service);
+  if (ret EQ AT_FAIL)
+  {
+    /* within sAT_PlusCSMS() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+  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 = qAT_PlusCSMS(src_infos_psi->srcId,&service,&mt,&mo,&bm);
+  if (ret EQ ATI_CMPL)
+  {
+    resp.response.ptr_que_plus_csms->service = service;
+    resp.response.ptr_que_plus_csms->mt = mt;
+    resp.response.ptr_que_plus_csms->mo = mo;
+    resp.response.ptr_que_plus_csms->bm = bm;
+    aci_bat_send(src_infos_psi,&resp);
+    return (ACI_BAT_CMPL);
+  }
+  if (ret EQ ATI_EXCT)
+  {
+    return (ACI_BAT_EXCT);
+  }
+  else
+  {
+    /* within qAT_PlusCSMS() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return ACI_BAT_FAIL;
+  }
+}
+
+/*
++--------------------------------------------------------------------+
+| 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_MEM2_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 = sAT_PlusCPMS ( src_infos_psi->srcId,mem1, mem2, mem3);
+  if (ret NEQ ACI_BAT_CMPL)
+  {
+    /* within sAT_PlusCPMS() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+  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 = qAT_PlusCPMS ( 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 */
+  if ( ret EQ AT_CMPL )
+  {
+    return (ACI_BAT_CMPL);
+  }
+  else if ( ret EQ AT_EXCT )
+  {
+    return (ACI_BAT_EXCT);
+  }
+  else
+  {
+    /* within qAT_PlusCPMS() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+}
+
+/*
++--------------------------------------------------------------------+
+| 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;
+  SHORT         octet=0;
+  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 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 = sAT_PlusCSCA(src_infos_psi->srcId,sca,p_tosca);
+  if (ret EQ AT_FAIL)
+  {
+    /* within sAT_PlusCSCA() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+  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 = qAT_PlusCSCA (src_infos_psi->srcId,sca,&tosca);
+  resp.ctrl_response = BAT_RES_QUE_PLUS_CSCA; 
+  resp.response.ptr_que_plus_csca = &que_csca_buffer;
+  if (ret EQ AT_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);
+    return (ACI_BAT_CMPL);
+  }
+  else
+  {
+    /* within qAT_PlusCSCA() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+}
+
+/*
++--------------------------------------------------------------------+
+| 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=sAT_PlusCSCB(src_infos_psi->srcId, cmd->params.ptr_set_plus_cscb->mode, p_mids, p_dcss);
+  if (ret EQ AT_FAIL)
+  {
+    /* within sAT_PlusCSCB() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+  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 = qAT_PlusCSCB(src_infos_psi->srcId,
+                    (T_ACI_CSCB_MOD*)&cscb.mode,
+                     cscb.mids,
+                     cscb.dcss);
+
+  if(ret EQ AT_CMPL)
+  {
+    i = 0;
+    
+    if  ((cscb.mids[0] NEQ 0xFFFF) 
+     AND (cscb.mids[1] NEQ 0xFFFF))
+    {
+      cscb.v_mids = TRUE;
+    }
+    
+    while ((cscb.mids[i]   NEQ 0xFFFF) 
+      AND  (cscb.mids[i+1] NEQ 0xFFFF) 
+      AND  (i < BAT_MAX_IDENTS-1))
+    {
+      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 ((cscb.dcss[i]   NEQ 0xFF)
+      AND  (cscb.dcss[i+1] NEQ 0xFF)
+      AND  (i < BAT_MAX_IDENTS-1))
+    {
+      i += 2;
+      cscb.c_dcss += 2;
+    }
+    
+    aci_bat_send(src_infos_psi,&resp);
+    return (ACI_BAT_CMPL);
+  }
+  else
+  {
+    /* within qAT_PlusCSCB() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+}
+
+
+#pragma message( __TODO__"FF_HOMEZONE is currently a problem for linking" )
+/* #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 = sAT_PlusCSAS (src_infos_psi->srcId,cmd->params.ptr_set_plus_csas->profile);
+  if (ret EQ AT_FAIL)
+  {
+    /* within sAT_PlusCSAS() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+  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;
+
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+      
+  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 = sAT_PlusCRES (src_infos_psi->srcId,cmd->params.ptr_set_plus_cres->profile);
+  if (ret EQ AT_FAIL)
+  {
+    /* within sAT_PlusCRES() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+  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 = tAT_PlusCRES (src_infos_psi->srcId, &profile);
+  switch (ret)
+  {
+    case AT_CMPL:
+    {
+      break;
+    }
+    case AT_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 = sAT_PlusCMGR_Gl(src_infos_psi->srcId, (UBYTE)idx, SMS_READ_Normal, NULL);
+ /* 
+  TO DO 
+  ret = sAT_PlusCMGR_Gl(src_infos_psi->srcId, (UBYTE)idx, cmglRead, NULL);
+ 
+*/
+ if ((ret EQ AT_CMPL) OR (ret EQ AT_EXCT))
+ {
+   return ret;
+ }
+ else
+ {
+   /* within sAT_PlusCMGR_Gl() the appropriate error value has been set */
+   /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+   return (ACI_BAT_FAIL);
+ }
+}
+
+  /*
++--------------------------------------------------------------------+
+| 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(src_infos_psi->srcId, &mode);
+    if (mode EQ 0)
+    {
+      /*
+       * %CMGR=[index],[preview]
+       */
+      idx = cmd->params.ptr_set_percent_cmgr->sms_index;
+      smsReadMode  = 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 = &cmd->params.ptr_set_percent_cmgr->rdmode;
+      ret = txt_rdmode_to_smsrdmode(txtRdMode);
+      if (ret EQ ATI_FAIL)
+      {
+        return (ACI_BAT_FAIL);
+      }
+    }
+    ret = sAT_PercentCMGR_Gl(src_infos_psi->srcId, (UBYTE)idx, smsReadMode , NULL);
+
+ if ((ret EQ AT_CMPL) OR (ret EQ AT_EXCT))
+ {
+   return ret;
+ }
+ else
+ {
+   return (ACI_BAT_FAIL);
+ }
+}
+/*
++--------------------------------------------------------------------+
+| 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(AT_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(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 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 = sAT_PlusCMSS_Gl(src_infos_psi->srcId, (UBYTE)index, p_da, p_toda, NULL, NULL);
+  if (ret EQ AT_EXCT)
+  {
+    return ACI_BAT_EXCT;
+  }
+  else
+  {
+    /* within sAT_PlusCMSS_Gl() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ATI_FAIL);
+  }
+}
+
+/*
++--------------------------------------------------------------------+
+| 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 = 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 = sAT_PlusCMGWPdu (src_infos_psi->srcId, (UBYTE)stat, &pdu);
+  if ( ret NEQ AT_EXCT )
+  {
+    /* within sAT_PlusCMGWPdu() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+  return ACI_BAT_EXCT;
+}
+
+/*
+|+--------------------------------------------------------------------+
+| 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;
+  UBYTE pdu_message_octets_lenth = 0;
+  
+  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 = sAT_PlusCNMAPdu (src_infos_psi->srcId, (SHORT)cmd->params.ptr_set_plus_cnma->n, p_pdu);
+  if(ret EQ AT_FAIL)
+  {
+    /* within sAT_PlusCNMAPdu() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+  }
+  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;
+  UBYTE 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 0;
+  }
+
+  if (status > BAT_CMGD_DEL_INDEX)
+  {
+    index = 0;
+  }
+  ret = sAT_PlusCMGD_Gl(src_infos_psi->srcId,(UBYTE)index,status,NULL,NULL);
+  if (ret EQ AT_EXCT)
+  {
+    return (ACI_BAT_EXCT);
+  }
+  else
+  {
+    /* within sAT_PlusCMGD_Gl() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+}
+  
+/*
++--------------------------------------------------------------------+
+| 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;
+  UBYTE pdu_message_octets_length = 0;
+
+  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 = sAT_PlusCMGCPdu ( src_infos_psi->srcId, &pdu );
+  if ( ret NEQ AT_EXCT )
+  {
+    /* within sAT_PlusCMGCPdu() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+  return ACI_BAT_EXCT;  
+}
+
+/*
++--------------------------------------------------------------------+
+| 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 = sAT_PlusCMGL ( src_infos_psi->srcId, cmd->params.ptr_set_plus_cmgl->stat, 0, SMS_READ_Normal );
+  if ( ret EQ AT_EXCT )
+  {
+    return (ACI_BAT_EXCT);
+  }
+  else
+  {
+    /* within sAT_PlusCMGL() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ACI_BAT_FAIL);
+  }
+}
+
+/*
++--------------------------------------------------------------------+
+| 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(src_infos_psi->srcId, &mode);
+    if (mode EQ 0)
+    {
+      /*
+       * %CMGL=[stat],[preview]
+       */
+      smsReadMode  = cmd->params.ptr_set_percent_cmgl->rdmode;
+      cmglStat = 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  < 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 = &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;
+
+      ret = txt_rdmode_to_smsrdmode(txtRdMode);
+      if (ret EQ ATI_FAIL)
+      {
+        return (ACI_BAT_FAIL);
+      }
+    }
+
+  ret = sAT_PercentCMGL ( src_infos_psi->srcId, cmglStat, smsReadMode  );
+  if ( ret EQ AT_EXCT )
+  {
+    return (ACI_BAT_EXCT);
+  }
+  else
+  {
+    return (ACI_BAT_FAIL);
+  }
+}
+
+/*
++--------------------------------------------------------------------+
+| 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 = sAT_PlusCNMI ( src_infos_psi->srcId, cmd->params.ptr_set_plus_cnmi->mt, cmd->params.ptr_set_plus_cnmi->bm, cmd->params.ptr_set_plus_cnmi->ds );
+  if ( (ret EQ AT_FAIL) OR (ret EQ AT_BUSY) )
+  {
+    /* within sAT_PlusCNMI() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+  }
+  else
+  {  
+    if(src_infos_psi->srcId NEQ CMD_SRC_LCL)
+    {
+      smsShrdPrm.smsSrcId = src_infos_psi->srcId;
+    }
+  }
+
+  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;
+
+  if ( qAT_PlusCNMI ( src_infos_psi->srcId,(T_ACI_CNMI_MT*)&mt,(T_ACI_CNMI_BM*)&bm,(T_ACI_CNMI_DS*)&ds ) EQ AT_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);
+    return ACI_BAT_CMPL ;
+  }
+    /* within qAT_PlusCNMI() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+  return (ACI_BAT_FAIL);
+}
+
+/*
++--------------------------------------------------------------------+
+| 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 = sAT_PercentCPRSM(src_infos_psi->srcId, cmd->params.ptr_set_percent_cprsm->mode);
+  switch (ret)
+  {
+    case (AT_CMPL):
+    case (AT_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 = qAT_PercentCPRSM( src_infos_psi->srcId );
+  /* Does not fill in the response structure? */
+  /* ACI does not fill in response mode in qAT_PercentCPRSM?*/
+  if (ret EQ AT_EXCT)
+  {
+    return (ACI_BAT_EXCT);
+  }
+  else
+  {
+    /* within qAT_PlusCPRSM() the appropriate error value has been set */
+    /* ACI_ERR_DESC(ACI_ERR_CLASS_Cms,CMS_ERR_NotPresent); */
+    return (ATI_FAIL);
+  }
+}
+