diff gsm-fw/g23m-aci/aci/aci_bat_ss.c @ 775:eedbf248bac0

gsm-fw/g23m-aci subtree: initial import from LoCosto source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 12 Oct 2014 01:45:14 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/g23m-aci/aci/aci_bat_ss.c	Sun Oct 12 01:45:14 2014 +0000
@@ -0,0 +1,434 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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" 
+#include "ati_cmd.h" 
+#include "aci_cmd.h" /* prototypes of helper functions */ 
+#include "psa.h"
+#include "cmh.h"
+#include "aci_bat_cmh.h" /* prototypes of sBAT_,qBAT_,tBAT_ */ 
+#include "aci_bat.h"
+#include "aci_bat_err.h" /*prototypes of err functions for BAT*/
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCTFR        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCTFR        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_ACI_TOA     type;
+  T_ACI_TOA    *p_type;
+  T_ACI_TOS     satype;
+  T_ACI_TOS    *p_satype;
+  //CHAR         *subadr = subBuf;
+  char          subBuf[MAX_SUBADDR_LEN]={0};
+  char*         p_subBuf;
+  SHORT         toa_oct = 0;
+  SHORT         tos_oct = 0;
+  CHAR          numBuf[MAX_B_SUBSCR_NUM_LEN];
+  
+  TRACE_FUNCTION ("sBAT_PlusCTFR()");
+
+  p_type   = &type;
+  p_satype = &satype;  
+  p_subBuf = subBuf;
+  memset( numBuf, 0, sizeof(numBuf));
+  
+  memcpy(numBuf,cmd->params.ptr_set_plus_ctfr->number,cmd->params.ptr_set_plus_ctfr->c_number);
+
+  if ( cmd->params.ptr_set_plus_ctfr->type EQ (S16)BAT_PARAMETER_NOT_PRESENT )
+  {
+    p_type = NULL;
+  }
+  else
+  {
+    toa_oct = cmd->params.ptr_set_plus_ctfr->type;
+  }
+  if ( cmd->params.ptr_set_plus_ctfr->satype EQ (S16)BAT_PARAMETER_NOT_PRESENT )
+  {
+    p_satype = NULL;
+  }
+  else
+  {
+    tos_oct = cmd->params.ptr_set_plus_ctfr->satype;
+  }
+  /* Type Of Address present */
+  type = toa_demerge (toa_oct);
+  if (type.ton < 0 OR type.npi < 0)
+  {
+    ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_OpNotAllow);
+    return (ACI_BAT_FAIL);
+  }
+  satype = tos_demerge (tos_oct);
+  if (satype.tos < 0 OR satype.oe < 0)
+  {
+    ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_OpNotAllow);
+    return (ACI_BAT_FAIL);
+  }
+     
+  if(cmd->params.ptr_set_plus_ctfr->v_subaddr)
+  {
+    memcpy(subBuf,cmd->params.ptr_set_plus_ctfr->subaddr,cmd->params.ptr_set_plus_ctfr->c_subaddr);
+  }
+  else
+  {
+   p_subBuf = NULL;
+  }
+  ret = (T_ACI_BAT_RSLT)sAT_PlusCTFR ((T_ACI_CMD_SRC)src_infos_psi->srcId, numBuf, p_type, p_subBuf, p_satype); 
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCCFC        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCCFC (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_BAT_plus_ccfc_reason       reason;
+  T_BAT_plus_ccfc_mode       mode;
+  T_ACI_TOA           type;
+  T_ACI_TOA          *p_type;
+  T_ACI_TOS           satype;
+  T_ACI_TOS          *p_satype;
+  T_BAT_plus_ccfc_bearer_class         class_type=BAT_CCFC_CLASS_NOT_PRESENT;
+  //CHAR               *subadr = subBuf;
+  char           subBuf[MAX_SUBADDR_LEN]={0};
+  char*          p_subBuf; 
+  T_BAT_plus_ccfc_time             time=BAT_CCFC_TIME_NOT_PRESENT;
+  SHORT               toa_oct=0;
+  SHORT               tos_oct=0;
+  CHAR                numBuf[MAX_B_SUBSCR_NUM_LEN];
+  CHAR*               p_numBuf;
+  
+  TRACE_FUNCTION ("sBAT_PlusCCFC()");
+
+  p_type=&type;
+  p_satype=&satype;  
+  p_subBuf = subBuf;
+  p_numBuf = numBuf;
+  memset( numBuf, 0, sizeof(numBuf));
+  
+  reason = cmd->params.ptr_set_plus_ccfc->reason;
+  mode = cmd->params.ptr_set_plus_ccfc->mode;
+  toa_oct = cmd->params.ptr_set_plus_ccfc->type;
+  tos_oct = cmd->params.ptr_set_plus_ccfc->satype;
+  class_type = cmd->params.ptr_set_plus_ccfc->bearer_class;
+  time = cmd->params.ptr_set_plus_ccfc->time;
+    
+  if (mode EQ BAT_CCFC_MODE_QUERY)                     /*query mode*/
+  {
+    ret = (T_ACI_BAT_RSLT)qAT_PlusCCFC((T_ACI_CMD_SRC)src_infos_psi->srcId,
+		      (T_ACI_CCFC_RSN)reason,(T_ACI_CLASS)class_type);
+    switch ((T_ACI_RETURN)ret)
+    {
+      case AT_EXCT:
+      case AT_BUSY:
+      case AT_FAIL:
+      {
+        return ret;
+      }
+      default:
+      {
+        return (ACI_BAT_FAIL);
+      }
+    }
+  }
+  if(cmd->params.ptr_set_plus_ccfc->v_subaddr)
+  {
+    memcpy(subBuf,cmd->params.ptr_set_plus_ccfc->subaddr,cmd->params.ptr_set_plus_ccfc->c_subaddr);
+  }
+  else
+  {
+    p_subBuf = NULL;
+  }
+
+  if ( cmd->params.ptr_set_plus_ccfc->type EQ (S16)BAT_PARAMETER_NOT_PRESENT )
+  {
+    p_type = NULL;
+  }  
+  else
+  {
+    toa_oct = cmd->params.ptr_set_plus_ccfc->type;
+  }  
+    
+  if ( cmd->params.ptr_set_plus_ccfc->satype EQ (S16)BAT_PARAMETER_NOT_PRESENT )
+  {
+    p_satype = NULL;
+  }
+  else
+  {
+    tos_oct = cmd->params.ptr_set_plus_ccfc->satype;
+  }
+    /* Type Of Address present */
+  type = toa_demerge (toa_oct);
+  if (type.ton < 0 OR type.npi < 0)
+  {
+    ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_OpNotAllow);
+    return (ACI_BAT_FAIL);
+  }
+  
+  satype = tos_demerge (tos_oct);
+  if (satype.tos < 0 OR satype.oe < 0)
+  {
+    ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_OpNotAllow);
+    return (ACI_BAT_FAIL);
+  }
+
+  if(cmd->params.ptr_set_plus_ccfc->v_number)
+  {
+    memcpy(numBuf,cmd->params.ptr_set_plus_ccfc->number,cmd->params.ptr_set_plus_ccfc->c_number);
+  }
+  else
+  {
+    p_numBuf = NULL; 	 
+  }
+  ret = (T_ACI_BAT_RSLT)sAT_PlusCCFC((T_ACI_CMD_SRC)src_infos_psi->srcId,(T_ACI_CCFC_RSN)reason,
+  	     (T_ACI_CCFC_MOD)mode,p_numBuf,p_type,(T_ACI_CLASS)class_type,p_subBuf,p_satype,time); 
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCLCK        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCLCK        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_BAT_plus_clck_fac       fac_num;
+  T_BAT_plus_clck_mode       mod;
+  T_BAT_bearer_class      class_type = BAT_CLASS_NOT_PRESENT;
+  T_BAT_cmd_response resp;
+  T_ACI_CLSSTAT       clsStat;
+  char                passwd[MAX_PWD_LENGTH]={0};
+    
+  TRACE_FUNCTION ("sBAT_PlusCLCK()");
+  
+  fac_num = cmd->params.ptr_set_plus_clck->fac;
+  mod = cmd->params.ptr_set_plus_clck->mode;
+  class_type = cmd->params.ptr_set_plus_clck->bearer_class;
+
+    
+  if (mod EQ BAT_CLCK_MODE_QUERY)                     /*query mode*/
+  {
+    T_BAT_res_set_plus_clck clck;
+    ret=(T_ACI_BAT_RSLT)qAT_PlusCLCK((T_ACI_CMD_SRC)src_infos_psi->srcId,(T_ACI_FAC)fac_num,
+		 (T_ACI_CLASS)class_type,&clsStat);
+    resp.ctrl_response = BAT_RES_SET_PLUS_CLCK;
+    resp.response.ptr_set_plus_clck = &clck;
+    resp.response.ptr_set_plus_clck->status = BAT_CLCK_STATUS_NOT_ACTIVE ; 
+    resp.response.ptr_set_plus_clck->bearer_class = BAT_CLASS_NOT_PRESENT;
+     
+    if(ret EQ ACI_BAT_CMPL)
+    {
+      switch(clsStat.status)
+      {
+        case STATUS_Active:
+          resp.response.ptr_set_plus_clck->status = BAT_CLCK_STATUS_ACTIVE;
+          break;
+        case STATUS_NotActive:
+          resp.response.ptr_set_plus_clck->status = BAT_CLCK_STATUS_NOT_ACTIVE;
+          break;        
+      }
+
+      if(clsStat.class_type NEQ CLASS_NotPresent)
+      {
+        resp.response.ptr_set_plus_clck->bearer_class = (T_BAT_bearer_class)clsStat.class_type;        
+      }
+      aci_bat_send(src_infos_psi , &resp);
+      return (ACI_BAT_CMPL);
+    }
+  }
+  else                              /*set mode*/
+  {
+    if(cmd->params.ptr_set_plus_clck->v_passwd)
+    {
+      memcpy(passwd,cmd->params.ptr_set_plus_clck->passwd,cmd->params.ptr_set_plus_clck->c_passwd);
+    }
+    ret = (T_ACI_BAT_RSLT)sAT_PlusCLCK((T_ACI_CMD_SRC)src_infos_psi->srcId,
+		(T_ACI_FAC)fac_num,(T_ACI_CLCK_MOD)mod,passwd,(T_ACI_CLASS)class_type);
+  }
+
+  switch((T_ACI_RETURN)ret)
+  {
+    case AT_EXCT:
+    case AT_FAIL:
+    {
+      break;
+    }  
+    case(AT_BUSY):
+    {
+      TRACE_EVENT("sBAT_PlusCLCK(): ME is busy");
+      break;
+    }  
+  }
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCPWD        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCPWD        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
+  T_BAT_plus_cpwd_fac      fac_num;
+  CHAR                oldpwd[MAX_PWD_LENGTH]={0};
+  CHAR                newpwd[MAX_PWD_LENGTH]={0};
+      
+  TRACE_FUNCTION ("sBAT_PlusCPWD()");
+ 
+  fac_num = cmd->params.ptr_set_plus_cpwd->fac;
+  memcpy(oldpwd, cmd->params.ptr_set_plus_cpwd->oldpwd,cmd->params.ptr_set_plus_cpwd->c_oldpwd);
+  memcpy(newpwd, cmd->params.ptr_set_plus_cpwd->newpwd,cmd->params.ptr_set_plus_cpwd->c_newpwd);
+  ret = (T_ACI_BAT_RSLT)sAT_PlusCPWD((T_ACI_CMD_SRC)src_infos_psi->srcId,(T_ACI_FAC)fac_num,oldpwd,newpwd); 
+  return(ret);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PlusCUSD        |
++--------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+GLOBAL T_ACI_BAT_RSLT sBAT_PlusCUSD        (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                            T_BAT_cmd_send    *cmd)
+{
+  T_ACI_BAT_RSLT ret;
+  T_ACI_USSD_DATA ussd;
+  T_ACI_USSD_DATA *ussd_ptr;
+  T_BAT_cmd_set_plus_cusd *cusd;
+
+  TRACE_FUNCTION ("sBAT_PlusCUSD()");
+
+  /*
+  *   Get a pointer to the BAT structure for convenience.
+  */
+  cusd=cmd->params.ptr_set_plus_cusd;
+
+  ussd_ptr=NULL;
+
+  if (cusd->v_str)
+  {
+    USHORT len;
+
+    utl_ussdDtaFromTe (
+      (UBYTE*)cusd->str,
+      cusd->c_str,
+      (UBYTE*)ussd.data,
+      &len,
+#ifdef REL99
+      sizeof(ussd.data),
+#endif /* REL99 */
+      (UBYTE)cusd->dcs);
+  
+    if (len>MAX_USSD_LEN)
+    {
+      /*
+      *   The USSD string is too big for the ACI structure. This should
+      *   not happen, and if it does means that we have overwritten
+      *   memory.
+      */
+      ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_TxtToLong);
+      return(ACI_BAT_FAIL);
+    }
+
+    ussd.len=(UBYTE)len;
+    ussd_ptr=&ussd;
+  }
+
+  /*
+  *   Call the corresponding sAT function. T_ACI_BAT_RSLT is
+  *   assumed to be equivalent to T_ACI_RESULT.
+  */
+  ret=(T_ACI_BAT_RSLT)sAT_PlusCUSD(
+        (T_ACI_CMD_SRC)src_infos_psi->srcId,
+      ussd_ptr,
+      (SHORT)cusd->dcs);
+
+  return(ret);
+}
+
+#ifdef SIM_PERS
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)            MODULE  : ACI_BAT              |
+| STATE   : code                      ROUTINE : sBAT_PercentMEPD     |
++--------------------------------------------------------------------+
+
+  PURPOSE : Mobile Equipment Personalization Data (SIM LOCK)
+            The set command has query semantic
+*/
+
+GLOBAL T_ACI_BAT_RSLT sBAT_PercentMEPD (T_ACI_DTI_PRC_PSI *src_infos_psi,
+                                        T_BAT_cmd_send    *cmd)
+{
+  T_ACI_RETURN ret;
+  T_SUP_INFO   sup_info;
+
+  TRACE_FUNCTION("sBAT_PercentMEPD()");
+
+  memset(&sup_info, 0, sizeof(T_SUP_INFO));
+  sup_info.infoType =(T_SUP_INFO_TYPE)cmd->params.ptr_set_percent_mepd->sup_info_type;
+  
+  ret = qAT_PercentMEPD((T_ACI_CMD_SRC)src_infos_psi->srcId, &sup_info);
+
+  if (ret EQ AT_CMPL)
+  {
+    T_BAT_cmd_response resp;
+    T_BAT_res_set_percent_mepd mepd;
+
+    resp.ctrl_response = BAT_RES_SET_PERCENT_MEPD;
+    resp.response.ptr_set_percent_mepd = &mepd;
+    mepd.datavalue = sup_info.datavalue;
+    
+    aci_bat_send(src_infos_psi, &resp);
+    return(ACI_BAT_CMPL);
+  }
+  
+  return((T_ACI_BAT_RSLT)ret);
+}
+#endif /* SIM_PERS */