diff gsm-fw/g23m-aci/aci/cmh_l2rr.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/cmh_l2rr.c	Sun Oct 12 01:45:14 2014 +0000
@@ -0,0 +1,442 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  GSM-PS (6147)
+|  Modul   :  CMH_L2RR
++----------------------------------------------------------------------------- 
+|  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 module defines the functions which are responsible
+|             for the responses of the protocol stack adapter for
+|             layer 2 relay.
++----------------------------------------------------------------------------- 
+*/ 
+
+#ifndef CMH_L2RR_C
+#define CMH_L2RR_C
+#endif
+
+#include "aci_all.h"
+
+/*==== INCLUDES ===================================================*/
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+#include "aci_lst.h"
+#include "dti.h"      /* functionality of the dti library */
+
+#include "aci_io.h"
+
+#include "aci_fd.h"
+
+#include "dti_conn_mng.h"
+#include "dti_cntrl_mng.h"
+
+#include "aci.h"
+#include "psa.h"
+#include "psa_l2r.h"
+#include "psa_cc.h"
+#include "cmh.h"
+#include "psa_ra.h"
+#include "cmh_ra.h"
+#include "cmh_l2r.h"
+#include "cmh_cc.h"
+
+#include "psa_tra.h"
+
+
+#include "cmh_ra.h"
+#ifdef UART
+#include "psa_uart.h"
+#include "cmh_uart.h"
+#endif
+
+#ifdef FF_PSI
+#include "psa_psi.h"
+#include "cmh_psi.h"
+#include "ati_src_psi.h"
+#endif /*FF_PSI*/
+
+#ifdef DTI
+#include "sap_dti.h"
+#endif
+
+/*==== CONSTANTS ==================================================*/
+
+
+/*==== TYPES ======================================================*/
+
+
+/*==== EXPORT =====================================================*/
+
+/*==== VARIABLES ==================================================*/
+
+/*==== FUNCTIONS ==================================================*/
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)    MODULE  : CMH_L2RR                     |
+|                            ROUTINE : cmhL2R_TRA_Enabled           |
++-------------------------------------------------------------------+
+
+  PURPOSE : L2R entity enabled, data mode
+
+*/
+
+GLOBAL void cmhL2R_TRA_Enabled ( void )
+{
+  SHORT cId;          /* holds call id */
+
+  TRACE_FUNCTION ("cmhL2R_TRA_Enabled()");
+
+  /* find active call */
+  cId = psaCC_ctbFindCall( OWN_SRC_INV, CS_ACT, NO_VLD_CT );
+
+  if( cId NEQ NO_ENTRY AND psaCC_ctb(cId)->curCmd EQ AT_CMD_O )
+  {
+    cmhCC_PrepareCmdEnd (cId, NULL, NULL);
+  }
+}
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)    MODULE  : CMH_L2RR                     |
+|                            ROUTINE : cmhL2R_Deactivated           |
++-------------------------------------------------------------------+
+
+  PURPOSE : L2R entity deactivated, connection disconnected
+
+*/
+
+GLOBAL void cmhL2R_Deactivated ( void )
+{
+  TRACE_FUNCTION ("cmhL2R_Deactivated()");
+
+  cmhCC_L2R_or_TRA_Deactivated(raShrdPrm.cId); /* see issue 7527 why raShrdPrm.cId */
+
+  l2rEntStat.curCmd = AT_CMD_NONE;
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)    MODULE  : CMH_L2RR                     |
+|                            ROUTINE : cmhTRA_Deactivated           |
++-------------------------------------------------------------------+
+
+  PURPOSE : TRA entity deactivated, connection disconnected
+
+*/
+
+GLOBAL void cmhTRA_Deactivated ( void )
+{
+  TRACE_FUNCTION ("cmhTRA_Deactivated()");
+
+  cmhCC_L2R_or_TRA_Deactivated(raShrdPrm.cId);
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)    MODULE  : CMH_L2RR                     |
+|                            ROUTINE : cmhL2R_TRA_Disabled          |
++-------------------------------------------------------------------+
+
+  PURPOSE : L2R entity disabled, escape from data mode
+
+*/
+
+GLOBAL void cmhL2R_TRA_Disabled ( T_DTI_ENTITY_ID entityId )
+{
+  S8 source = psaCC_ctb(raShrdPrm.cId)->calOwn;
+
+  TRACE_FUNCTION ("cmhL2R_TRA_Disabled()");
+  switch (entityId)
+  {
+#ifdef UART
+     case DTI_ENTITY_UART:
+       /* return to command mode */
+        if (uartShrdPrm.dtr_clearcall EQ FALSE)
+        {
+           R_AT( RAT_OK, (T_ACI_CMD_SRC)source )
+           ( AT_CMD_NONE );
+        }
+        break;
+#endif
+#if defined (FF_PSI) AND defined (DTI)
+     case DTI_ENTITY_PSI:
+       /* return to command mode */
+        if (psiShrdPrm.dtr_clearcall EQ FALSE)
+        {
+           R_AT( RAT_OK, (T_ACI_CMD_SRC)source )
+           ( AT_CMD_NONE );
+        }
+        break;
+#endif /*FF_PSI*/
+  }
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)    MODULE  : CMH_L2RR                     |
+|                            ROUTINE : cmhL2R_Failure               |
++-------------------------------------------------------------------+
+
+  PURPOSE : L2R entity failure, connection will be disconnected
+
+*/
+
+GLOBAL void cmhL2R_Failure ( void )
+{
+
+  TRACE_EVENT_P1("RLP ERROR: 0x%04x", l2rShrdPrm.set_prm[l2rShrdPrm.owner].err_cause );
+
+/*
+ *-------------------------------------------------------------------
+ * general failure indication
+ *-------------------------------------------------------------------
+ */
+  cmhCC_L2R_Failed();
+}
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)              MODULE  : CMH_L2RR           |
+| STATE   : code                        ROUTINE : L2R_connect_dti_cb |
++--------------------------------------------------------------------+
+
+  PURPOSE : Callback for connection between L2R and UART.
+
+*/
+#ifdef DTI
+GLOBAL BOOL L2R_connect_dti_cb(UBYTE dti_id, T_DTI_CONN_STATE result_type)
+{
+  T_ACI_DTI_PRC *srcInfos;
+#ifdef FF_PSI
+  T_ACI_DTI_PRC_PSI *srcInfos_psi;
+#endif /*FF_PSI*/
+  T_DTI_ENTITY_ID entityId = DTI_ENTITY_UART;
+  T_DTI_CNTRL    info;
+
+  TRACE_FUNCTION("L2R_connect_dti_cb");
+
+
+  if (dti_cntrl_get_info_from_dti_id( dti_id, &info) EQ FALSE)
+  {
+    TRACE_EVENT_P1("cannot find info for dti_id=%d", dti_id);
+    return FALSE;
+  }
+
+  if ((srcInfos = find_element (uart_src_params, info.src_id, cmhUARTtest_srcId)) NEQ NULL)
+    entityId = DTI_ENTITY_UART;
+#if defined (FF_PSI) AND defined (DTI)
+  if ((srcInfos_psi = find_element (psi_src_params, info.src_id, cmhPSItest_srcId)) NEQ NULL)
+    entityId = DTI_ENTITY_PSI;
+  else if (srcInfos EQ NULL AND srcInfos_psi EQ NULL)
+#else
+  else if (srcInfos EQ NULL)
+#endif /*FF_PSI*/
+  {
+    TRACE_EVENT_P1 ("[ERR] L2R_connect_dti_cb: srcId=%d not found", info.src_id);
+    return FALSE;
+  }
+
+  switch( result_type)
+  {
+    case(DTI_CONN_STATE_CONNECTED):
+      cmhL2R_TRA_Enabled();
+      break;
+
+    case(DTI_CONN_STATE_DISCONNECTED):
+
+      dti_cntrl_clear_conn_parms( dti_id );
+#ifdef FF_PSI
+      if (srcInfos_psi EQ NULL)
+      {
+        TRACE_EVENT ("[ERR] L2R_connect_dti_cb: srcInfos_psi = NULL");
+        return FALSE;
+      }
+#endif /*FF_PSI*/
+      if (srcInfos EQ NULL)
+      {
+        TRACE_EVENT ("[ERR] L2R_connect_dti_cb: srcInfos = NULL");
+        return FALSE;
+      }
+	  
+      if (l2rEntStat.isTempDisconnected)
+      {
+#ifdef FF_PSI
+        if (entityId EQ DTI_ENTITY_PSI)
+          BITFIELD_SET (srcInfos_psi->data_cntr, UART_DTI_SB_BIT);
+        else
+#endif /*FF_PSI*/
+          BITFIELD_SET (srcInfos->data_cntr, UART_DTI_SB_BIT);
+        l2rEntStat.isTempDisconnected = FALSE;
+        cmhL2R_TRA_Disabled(entityId);
+      }
+      else
+      {
+        /* action already initiated in psa_l2r */
+        /* cmhL2R_Deactivate(); */
+#ifdef FF_PSI
+        if (entityId EQ DTI_ENTITY_PSI)
+          BITFIELD_CLEAR (srcInfos_psi->data_cntr, UART_DTI_SB_BIT);
+        else
+#endif /*FF_PSI*/
+          BITFIELD_CLEAR (srcInfos->data_cntr, UART_DTI_SB_BIT);
+      }
+
+      if (dti_cntrl_is_dti_id_to_reconnect(dti_id))
+      {
+        T_DTI_ENTITY_ID entity_list[] = {DTI_ENTITY_ACI};
+        dti_cntrl_clear_dti_id_to_reconnect(dti_id);
+#ifdef FF_PSI
+        if (entityId EQ DTI_ENTITY_PSI)
+          dti_cntrl_est_dpath_indirect ( info.src_id,
+                                       entity_list,
+                                       1,
+                                       SPLIT,
+                                       atiPSI_dti_cb,
+                                       DTI_CPBLTY_CMD,
+                                       DTI_CID_NOTPRESENT);
+
+       else
+#endif /*FF_PSI*/
+          dti_cntrl_est_dpath_indirect ( info.src_id,
+                                       entity_list,
+                                       1,
+                                       SPLIT,
+                                       atiUART_dti_cb,
+                                       DTI_CPBLTY_CMD,
+                                       DTI_CID_NOTPRESENT);
+      }
+
+      break;
+
+    case(DTI_CONN_STATE_CONNECTING):
+    case(DTI_CONN_STATE_DISCONNECTING):
+      break;
+    case(DTI_CONN_STATE_ERROR):
+      dti_cntrl_close_dpath_from_dti_id( dti_id );
+      break;
+
+    default:
+      TRACE_EVENT("L2R_connect_dti_cb call with not awaited value");
+      break;
+  }
+  return TRUE;
+}
+#endif /* DTI */
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)              MODULE  : CMH_L2RR           |
+| STATE   : code                        ROUTINE : TRA_connect_dti_cb |
++--------------------------------------------------------------------+
+
+  PURPOSE : Callback for connection between TRA and UART.
+
+*/
+
+#ifdef DTI
+GLOBAL BOOL TRA_connect_dti_cb(UBYTE dti_id, T_DTI_CONN_STATE result_type)
+{
+  T_ACI_DTI_PRC *srcInfos;
+#ifdef FF_PSI
+  T_ACI_DTI_PRC_PSI *srcInfos_psi;
+#endif /*FF_PSI*/
+  T_DTI_ENTITY_ID entityId = DTI_ENTITY_UART;
+  T_DTI_CNTRL    info;
+
+  TRACE_FUNCTION("TRA_connect_dti_cb");
+
+  
+  if (dti_cntrl_get_info_from_dti_id( dti_id, &info) EQ FALSE)
+  {
+    TRACE_EVENT_P1("cannot find info for dti_id=%d", dti_id);
+    return FALSE;
+  }
+
+  if ((srcInfos = find_element (uart_src_params, info.src_id, cmhUARTtest_srcId)) NEQ NULL)
+    entityId = DTI_ENTITY_UART;
+#if defined (FF_PSI) AND defined (DTI)
+  if((srcInfos_psi= find_element (psi_src_params, info.src_id, cmhPSItest_srcId)) NEQ NULL)
+    entityId = DTI_ENTITY_PSI;
+  else if (srcInfos EQ NULL AND srcInfos_psi EQ NULL)
+#else
+  else if (srcInfos EQ NULL)
+#endif /*FF_PSI*/
+  {
+    TRACE_EVENT_P1 ("[ERR] TRA_connect_dti_cb: srcId=%d not found", info.src_id);
+    return FALSE;
+  }
+
+  switch( result_type)
+  {
+    case(DTI_CONN_STATE_CONNECTED):
+      cmhL2R_TRA_Enabled();
+      break;
+
+    case(DTI_CONN_STATE_DISCONNECTED):
+
+      dti_cntrl_clear_conn_parms( dti_id );
+#ifdef FF_PSI
+      if (srcInfos_psi EQ NULL)
+      {
+        TRACE_EVENT ("[ERR] L2R_connect_dti_cb: srcInfos_psi = NULL");
+        return FALSE;
+      }
+#endif /*FF_PSI*/
+      if (srcInfos EQ NULL)
+      {
+        TRACE_EVENT ("[ERR] L2R_connect_dti_cb: srcInfos = NULL");
+        return FALSE;
+      }
+	  
+      if (raEntStat.isTempDisconnected)
+      {
+#ifdef FF_PSI
+        if (entityId EQ DTI_ENTITY_PSI)
+          BITFIELD_SET (srcInfos_psi->data_cntr, UART_DTI_SB_BIT);
+        else
+#endif /*FF_PSI*/
+          BITFIELD_SET (srcInfos->data_cntr, UART_DTI_SB_BIT);
+        raEntStat.isTempDisconnected = FALSE;
+        cmhL2R_TRA_Disabled(entityId);
+      }
+      else
+      {
+#ifdef FF_PSI
+        if (entityId EQ DTI_ENTITY_PSI)
+          BITFIELD_CLEAR (srcInfos_psi->data_cntr, UART_DTI_SB_BIT);
+        else
+#endif /*FF_PSI*/
+          BITFIELD_CLEAR (srcInfos->data_cntr, UART_DTI_SB_BIT);
+        /* psaTRA_Deactivate(); */  /* This is done in psa_trap later, otherwise TRA will crash! */
+      }
+      break;
+
+    case(DTI_CONN_STATE_CONNECTING):
+    case(DTI_CONN_STATE_DISCONNECTING):
+      break;
+    case(DTI_CONN_STATE_ERROR):
+      dti_cntrl_close_dpath_from_dti_id( dti_id );
+      break;
+
+    default:
+      TRACE_EVENT("TRA_connect_dti_cb call with not awaited value");
+      break;
+  }
+  return TRUE;
+}
+#endif /* DTI */
+
+/*==== EOF ========================================================*/
+