diff src/g23m-gprs/llc/llc_t200s.c @ 183:219afcfc6250

src/g23m-gprs: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 13 Oct 2016 04:24:13 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-gprs/llc/llc_t200s.c	Thu Oct 13 04:24:13 2016 +0000
@@ -0,0 +1,263 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  
+|  Modul   :  
++----------------------------------------------------------------------------- 
+|  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 modul is part of the entity LLC and implements all 
+|             functions to handles the incoming process internal signals as  
+|             described in the SDL-documentation (T200-statemachine)
++----------------------------------------------------------------------------- 
+*/ 
+
+#ifndef LLC_T200S_C
+#define LLC_T200S_C
+#endif
+
+#define ENTITY_LLC
+
+/*==== INCLUDES =============================================================*/
+
+#include "typedefs.h"   /* to get Condat data types */
+#include "vsi.h"        /* to get a lot of macros */
+#include "macdef.h"
+#include "gprs.h"
+#include "gsm.h"        /* to get a lot of macros */
+#include "cnf_llc.h"    /* to get cnf-definitions */
+#include "mon_llc.h"    /* to get mon-definitions */
+#include "prim.h"       /* to get the definitions of used SAP and directions */
+#include "llc.h"        /* to get the global entity definitions */
+
+#include "llc_t200f.h"  /* to get local T200 functions */
+#include "llc_us.h"     /* to get signal interface to U */
+#include "llc_f.h"     /* to get llc functions */
+
+
+/*==== CONST ================================================================*/
+
+/*==== LOCAL VARS ===========================================================*/
+
+/*==== PRIVATE FUNCTIONS ====================================================*/
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_llme_t200_assign_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_LLME_T200_ASSIGN_REQ
+|
+| Parameters  : 
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_llme_t200_assign_req (void)
+{ 
+  TRACE_ISIG( "sig_llme_t200_assign_req" );
+  
+  switch (GET_STATE(T200))
+  {
+    case T200_TLLI_UNASSIGNED:
+      SET_STATE (T200, T200_RESET);
+      break;
+    default:
+      TRACE_ERROR( "SIG_LLME_T200_ASSIGN_REQ unexpected" );
+      break;
+  }
+} /* sig_llme_t200_assign_req() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_llme_t200_unassign_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_LLME_T200_UNASSIGN_REQ
+|
+| Parameters  : 
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_llme_t200_unassign_req (void)
+{ 
+  TRACE_ISIG( "sig_llme_t200_unassign_req" );
+  
+  switch (GET_STATE(T200))
+  {
+    case T200_RESET:
+      SET_STATE (T200, T200_TLLI_UNASSIGNED);
+      break;
+    case T200_RUNNING:
+      t200_stop();
+
+      /*
+       * Indicate that no frame with P bit set to 1 is currently outstanding
+       */
+      llc_data->sapi->pbit_outstanding = FALSE;
+
+      SET_STATE (T200, T200_TLLI_UNASSIGNED);
+      break;
+    default:
+      TRACE_ERROR( "SIG_LLME_T200_UNASSIGN_REQ unexpected" );
+      break;
+  }
+} /* sig_llme_t200_unassign_req() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_u_t200_start_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_U_T200_START_REQ
+|
+| Parameters  : frame - a valid pointer to the frame that shall be associated
+|                       with the timer
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_u_t200_start_req 
+(
+#ifdef LL_DESC
+  T_LL_UNITDESC_REQ *frame, 
+#else
+  T_LL_UNITDATA_REQ *frame, 
+#endif
+  UBYTE cause
+)
+{ 
+  TRACE_ISIG( "sig_u_t200_start_req" );
+  
+  switch (GET_STATE(T200))
+  {
+    case T200_RESET:
+      t200_start (frame, cause, SERVICE_U);
+
+      /*
+       * Indicate that a frame with P bit set to 1 is currently outstanding
+       */
+      llc_data->sapi->pbit_outstanding = TRUE;
+
+      SET_STATE (T200, T200_RUNNING);
+      break;
+    default:
+#ifdef LL_DESC
+      /*
+       * The descriptor contents of the primitive structure
+       * must be freed as well.
+       */
+      llc_cl_desc3_free((T_desc3*)frame->desc_list3.first);
+#endif /* LL_DESC */
+      PFREE (frame);
+      TRACE_ERROR( "SIG_U_T200_START_REQ unexpected" );
+      break;
+  }
+} /* sig_u_t200_start_req() */
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_u_t200_stop_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_U_T200_STOP_REQ
+|
+| Parameters  : 
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_u_t200_stop_req (void)
+{ 
+  TRACE_ISIG( "sig_u_t200_stop_req" );
+  
+  switch (GET_STATE(T200))
+  {
+    case T200_RUNNING:
+      t200_stop();
+
+      /*
+       * Indicate that no frame with P bit set to 1 is currently outstanding
+       */
+      llc_data->sapi->pbit_outstanding = FALSE;
+
+      SET_STATE (T200, T200_RESET);
+      break;
+    default:
+      break;
+  }
+} /* sig_u_t200_stop_req() */
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_u_t200_expire_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_U_T200_EXPIRE_REQ
+|
+| Parameters  : 
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_u_t200_expire_req (void)
+{ 
+#ifndef LL_DESC 
+  T_LL_UNITDATA_REQ *frame;
+#else
+  T_LL_UNITDESC_REQ *frame;
+#endif
+  UBYTE             cause;
+  T_SERVICE         originator;
+
+  TRACE_ISIG( "sig_u_t200_expire_req" );
+  
+  switch (GET_STATE(T200))
+  {
+    case T200_RUNNING:
+      SET_STATE (T200, T200_RESET);
+
+      /*
+       * No frame with P bit set to 1 is currently outstanding
+       */
+      llc_data->sapi->pbit_outstanding = FALSE;
+
+      /*
+       * Get associated timer data (frame, cause, originating service)
+       * and send T200 expired signal, if originator is set. Otherwise
+       * just PFREE the frame.
+       */
+      t200_get_timer_data (&frame, &cause, &originator);
+      if (originator EQ SERVICE_U)
+      {
+        sig_t200_u_expired_ind (frame, cause, EXPIRY_REQUESTED);
+      }
+      else
+      {
+        TRACE_0_INFO("T200 expired, no service associated, frame discarded");
+#ifdef LL_DESC
+      /*
+       * The descriptor contents of the primitive structure
+       * must be freed as well.
+       */
+      llc_cl_desc3_free((T_desc3*)frame->desc_list3.first);
+#endif /* LL_DESC */
+        PFREE (frame);
+      }
+      break;
+
+    default:
+      TRACE_ERROR( "SIG_U_T200_EXPIRE_REQ unexpected" );
+      break;
+  }
+} /* sig_u_t200_expire_req() */
+