diff g23m/condat/ms/src/aci/gaci.c @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/condat/ms/src/aci/gaci.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,272 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  
+|  Modul   :  J:\g23m-aci\aci\gaci.c
++----------------------------------------------------------------------------- 
+|  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 :  
++----------------------------------------------------------------------------- 
+*/ 
+#if defined (GPRS) && defined (DTI)
+
+#ifndef GACI_C
+#define GACI_C
+#endif
+
+#include "aci_all.h"
+/*==== INCLUDES ===================================================*/
+#include "dti.h"      /* functionality of the dti library */
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+
+#include "dti_conn_mng.h"
+
+#include "gaci.h"
+#include "gaci_cmh.h"
+#include "psa.h"
+#include "psa_sm.h"
+#include "psa_gppp.h"
+#include "psa_gmm.h"
+
+#include "cmh.h"
+#ifdef SIM_TOOLKIT
+#include "psa_cc.h"
+#include "psa_sat.h"
+#include "cmh_sat.h"
+#endif /* SIM_TOOLKIT */
+#include "cmh_sm.h"
+#include "cmh_gppp.h"
+#include "cmh_gmm.h"
+#include "gaci_srcc.h"
+
+/*==== CONSTANTS ==================================================*/
+static T_ACI_CMD_SRC _ATZ_srcId;
+
+#ifdef FF_SAT_E
+static USHORT SAT_error_cause = SAT_GPRS_INV_CAUSE;
+#endif /* FF_SAT_E */
+
+/*==== EXPORT =====================================================*/
+
+/*==== VARIABLES ==================================================*/
+
+GLOBAL void gaci_init ( void )
+{
+  /* Init of intern variable */
+  _ATZ_srcId = CMD_SRC_NONE;
+
+  /* GPRS Init */
+  gpppEntStat.curCmd = AT_CMD_NONE;
+  gpppEntStat.entOwn = OWN_NONE;
+
+  cmhGMM_Init();
+  cmhSM_Init();
+
+  srcc_init();
+
+  gaci_reset();
+}
+
+GLOBAL void gaci_reset( void )
+{
+  cmhSM_Reset();
+}
+
+GLOBAL void gaci_ATZ_reset( void )
+{
+  cmhSM_ResetNonWorkingContexts();
+}
+
+GLOBAL void gaci_finit ( void )
+{
+  /* here will be a functionality */
+}
+
+EXTERN T_ACI_RETURN sGsmAT_Z ( T_ACI_CMD_SRC srcId );
+
+GLOBAL T_ACI_RETURN sGprsAT_Z ( T_ACI_CMD_SRC srcId )
+{
+  SHORT cid_array[1] = { INVALID_CID };
+
+ /*
+  *-------------------------------------------------------------------
+  *   rejects waiting network requests for PDP context activation
+  *-------------------------------------------------------------------
+  */
+  if ( ( at.rngPrms.isRng EQ TRUE ) && ( at.rngPrms.mode EQ CRING_MOD_Gprs) ) /* GPRS call */
+  {
+   /*
+    *   brz patch: In the case of context reactivation over SMREG_PDP_ACTIVATE_IND with an used ti
+    *              the GPRS ATZ command doesn't do anything!
+    *
+    *   Why?       Because the Windows Dial-Up Networking client send every time an ATZ after termination
+    *              of the connection and with this a context reactivation was impossible. 
+    */
+    if ( gprs_call_table[current_gprs_ct_index].reactivation EQ GCTT_NORMAL )
+    {
+      sAT_PlusCGANS(srcId, CGANS_RESPONSE_REJECT, NULL, GPRS_CID_OMITTED);
+    }
+    else
+    { /* Reactivation: stop GPRS ATZ */
+      return sGsmAT_Z ( srcId );
+    }
+  }
+  if ( AT_EXCT EQ sAT_PlusCGACT ( srcId, CGACT_STATE_DEACTIVATED, cid_array ))
+  {
+    _ATZ_srcId = srcId;    /* hold source Id */
+    return( AT_EXCT );
+  }
+  
+  srcId_cb = srcId;
+  gaci_ATZ_reset();
+  return sGsmAT_Z ( srcId );
+}
+
+LOCAL void endOfGprsAT_Z ( void )
+{
+  srcId_cb = _ATZ_srcId;
+  gaci_ATZ_reset();
+  if ( AT_CMPL EQ sGsmAT_Z ( _ATZ_srcId ) )
+  {
+    R_AT( RAT_OK, _ATZ_srcId ) ( AT_CMD_Z );
+
+    /* log result */
+    cmh_logRslt ( _ATZ_srcId,
+                  RAT_OK, AT_CMD_Z, -1, -1, -1 );
+  }
+
+  _ATZ_srcId = CMD_SRC_NONE;
+}
+
+GLOBAL BOOL gaci_isATZcmd ( void )
+{
+  if ( _ATZ_srcId NEQ CMD_SRC_NONE )
+  {
+    endOfGprsAT_Z();
+    return TRUE;
+  }
+  
+  return FALSE;
+}
+
+
+GLOBAL SHORT gaci_get_cid_over_dti_id ( UBYTE  dti_id )
+{
+  SHORT i = 0;
+
+  /* compare only the DTI ID part of the Link ID */
+  for (i = 0; i < MAX_CID; i++)
+  {
+    if ( dti_id EQ EXTRACT_DTI_ID(pdp_context[i].link_id_sn)    OR
+         dti_id EQ EXTRACT_DTI_ID(pdp_context[i].link_id_uart)  OR
+         dti_id EQ EXTRACT_DTI_ID(pdp_context[i].link_id_new)      ) 
+    {
+      return i + 1;
+    }
+  }
+  return INVALID_CID;
+}
+
+GLOBAL SHORT gaci_get_cid_over_link_id ( T_DTI_CONN_LINK_ID  link_id )
+{
+  return gaci_get_cid_over_dti_id((UBYTE)EXTRACT_DTI_ID(link_id));
+}
+
+/*
+ *  Assumption: there is only one connection between SNDCP and the peer
+ */
+GLOBAL T_DTI_CONN_LINK_ID gaci_get_link_id_over_peer ( T_DTI_ENTITY_ID entity_id )
+{
+  SHORT i;
+
+  for (i = 0; i < MAX_CID; i++)
+  {
+    if(pdp_context[i].entity_id EQ entity_id) 
+    {
+      return cmhSM_get_link_id_SNDCP_peer((SHORT)(i + 1), SNDCP_PEER_NORMAL);
+    }
+  }
+  return DTI_LINK_ID_NOTPRESENT;
+}
+
+#ifdef FF_SAT_E
+GLOBAL void gaci_SAT_err(USHORT cause)
+{
+  SAT_error_cause = cause;
+}
+#endif /* FF_SAT_E */
+
+GLOBAL void gaci_RAT_caller ( SHORT rat_id, SHORT cid, UBYTE cmdBuf, UBYTE cme_err )
+{
+  T_ACI_CMD_SRC  rat_owner = get_owner_over_cid( cid );
+
+  TRACE_FUNCTION("gaci_RAT_caller()");
+
+#ifdef FF_SAT_E
+  if ( !cmhSAT_OpChnGPRSPend( cid, OPCH_NONE ))
+#endif /* FF_SAT_E */
+  {
+    switch ( rat_id )
+    {
+      case RAT_OK:
+        R_AT( RAT_OK, rat_owner ) ( cmdBuf );
+        break;
+      case RAT_CME:
+        ACI_ERR_DESC( ACI_ERR_CLASS_Cme, cme_err );     /* align aciErrDesc to cme_err */
+        R_AT( RAT_CME, rat_owner ) ( cmdBuf, cme_err );
+        /* log result */
+        cmh_logRslt ( (T_ACI_CMD_SRC) rat_owner, RAT_CME, (T_ACI_AT_CMD) cmdBuf, -1, -1, cme_err );
+        break;
+      case RAT_NO_CARRIER:
+        if (!(cmhSM_getSrcIdOfRunningCGACTDeactivation(cid) EQ rat_owner))
+        {
+          R_AT( RAT_NO_CARRIER, rat_owner ) ( cmdBuf, 0 );
+        }
+        /* log result */
+        cmh_logRslt ( (T_ACI_CMD_SRC) rat_owner, RAT_NO_CARRIER, (T_ACI_AT_CMD)cmdBuf, (SHORT) 0, -1, -1 );
+        break;
+    }
+  }
+#ifdef FF_SAT_E
+  else
+  {
+    /*
+     *    SIM callback for SAT-class CE 
+     */
+    switch ( rat_id )
+    {
+      case RAT_OK:
+        /* connection deactivated */
+        cmhSAT_OpChnGPRSStat(SAT_GPRS_ACT, SAT_GPRS_INV_CAUSE); /* no cause given by primitive */
+        break;
+      case RAT_CME:
+        if ( cmdBuf EQ AT_CMD_CGDATA )
+        { /* Attach before ATD (SNDCP <-> IP <-> UDP <-> SIM) fails */
+          cmhSAT_OpChnGPRSStat(SAT_GPRS_ATT_FAILED, SAT_error_cause);  
+        }
+        else
+        { /* activate connection SNDCP <-> SIM fails */
+          cmhSAT_OpChnGPRSStat(SAT_GPRS_ACT_FAILED, SAT_error_cause);  
+        }
+        break;
+      case RAT_NO_CARRIER:
+          /* activate connection SNDCP <-> IP <-> UDP <-> SIM fails */
+          cmhSAT_OpChnGPRSStat(SAT_GPRS_ACT_FAILED, SAT_error_cause);
+        break;
+    }
+  }
+#endif /* FF_SAT_E */
+}
+
+#endif  /* GPRS */