diff src/g23m-fad/l2r/tra_dnp.c @ 174:90eb61ecd093

src/g23m-fad: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 12 Oct 2016 05:40:46 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-fad/l2r/tra_dnp.c	Wed Oct 12 05:40:46 2016 +0000
@@ -0,0 +1,217 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  CSD (8411)
+|  Modul   :  tra_dnp.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 :  This Modul defines the functions for processing
+|             of incomming primitives for the component TRA
++----------------------------------------------------------------------------- 
+*/ 
+
+#ifndef TRA_DNP_C
+#define TRA_DNP_C
+#endif
+
+#define ENTITY_L2R
+
+/*==== INCLUDES ===================================================*/
+
+#include <string.h>
+
+#include "typedefs.h"
+#include "pconst.cdg"
+#include "vsi.h"
+#include "macdef.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+#include "pei.h"
+#include "tok.h"
+#include "dti.h"
+
+#include "cl_ribu.h"
+#include "tra_pei.h"
+#include "tra.h"
+
+/*==== CONST =======================================================*/
+
+/*==== TYPES =======================================================*/
+
+/*==== VAR EXPORT ==================================================*/
+
+/*==== VAR LOCAL ===================================================*/
+
+/*==== FUNCTIONS ===================================================*/
+
+/*
++------------------------------------------------------------------------------
+|  Function    : sig_dti_tra_dn_tx_buffer_ready_ind
++------------------------------------------------------------------------------
+|  Description : Process signal DTI_REASON_TX_BUFFER_READY received from
+|                dti library callback function.
+|
+|  Parameters  : -
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_dti_tra_dn_tx_buffer_ready_ind()
+{
+  TRACE_FUNCTION ("sig_dti_tra_dn_tx_buffer_ready_ind()");
+
+  if (tra_data->dn.Brk_dti_data_ind NEQ NULL)
+  {
+    /*
+     * if there is a pending break indication to be sent via DTI,
+     * send it now
+     */
+    sig_any_tra_dn_send_break_req();
+    return;
+  }
+
+  switch (GET_STATE (DN))
+  {
+    case DN_IDLE:
+    {
+      SET_STATE (DN, DN_WAIT);
+      break;
+    }
+    case DN_SEND:
+    {
+      if (dl_send_data_ind())
+      {
+        SET_STATE (DN, DN_IDLE);
+      }
+      break;
+    }
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : sig_dti_tra_dn_tx_buffer_full_ind
++------------------------------------------------------------------------------
+|  Description : Process signal DTI_REASON_TX_BUFFER_FULL received from
+|                dti library callback function.
+|
+|  Parameters  : -
+|
+|  Return      : -
++------------------------------------------------------------------------------
+
+  The buffer function of DTILIB is not used.
+  So there is nothing to be done here yet...
+
+*/
+
+GLOBAL void sig_dti_tra_dn_tx_buffer_full_ind()
+{
+  TRACE_FUNCTION ("sig_dti_tra_dn_tx_buffer_full_ind()");
+}
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : rcv_ra_data_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RA_DATA_IND received from RA.
+|                This function is called if the primitive RA_DATA_IND is
+|                received or from the signal processing in l2r_pei (tra).
+|
+|  Parameters  : ra_data_ind -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void rcv_ra_data_ind(T_RA_DATA_IND *ra_data_ind)
+{
+  T_TRA_DN *ddl = &tra_data->dn;
+  T_FD *pFD = NULL;
+
+  TRACE_FUNCTION("rcv_ra_data_ind()");
+
+  if (GET_STATE (MGT) NEQ MGT_IDLE)
+  {
+    TRACE_EVENT ("data rcvd while not in state MGT_IDLE");
+
+    while (cl_ribu_data_avail(ddl->ribu))
+    {
+      cl_ribu_get(ddl->ribu);
+    }
+
+#ifdef _SIMULATION_
+    PFREE (ra_data_ind);
+#endif
+    return;
+  }
+
+#ifdef _SIMULATION_
+  PACCESS (ra_data_ind);
+  if (ra_data_ind->sdu.l_buf)
+  {
+    pFD = tra_get_next_FrameDesc();
+    TRACE_EVENT_P2("put - wi=%d - ri=%d", ddl->ribu->idx.wi, ddl->ribu->idx.ri);
+    memcpy(pFD->buf, ra_data_ind->sdu.buf, ra_data_ind->sdu.l_buf >> 3);
+    pFD->len = ra_data_ind->sdu.l_buf >> 3;
+  }
+#endif
+
+  ddl->sa = 0;
+  ddl->sb = 0;
+  ddl->x = 0;
+
+  if (ra_data_ind->status & ST_SA)
+    ddl->sa = DTI_SA_OFF;
+  if (ra_data_ind->status & ST_SB)
+    ddl->sb = DTI_SB_OFF;
+  if (ra_data_ind->status & ST_X)
+    ddl->x = DTI_FLOW_OFF;
+
+  if (ddl->ribu->idx.filled > 1)
+    TRACE_EVENT_P3("RIBU ddl: filled=%d; wi=%d; ri=%d", ddl->ribu->idx.filled, ddl->ribu->idx.wi, ddl->ribu->idx.ri);
+
+  while (cl_ribu_data_avail(ddl->ribu))
+  {
+    pFD = cl_ribu_get(ddl->ribu);
+    dl_prep_data_ind(pFD);
+  }
+
+  switch (GET_STATE (DN))
+  {
+  case DN_SEND:
+    break;
+
+  case DN_IDLE:
+    if (pFD NEQ NULL)
+    {
+      SET_STATE (DN, DN_SEND);
+    }
+    break;
+
+  case DN_WAIT:
+    if (dl_send_data_ind())
+    {
+      SET_STATE (DN, DN_IDLE);
+    }
+    break;
+
+  default:
+    break;
+  }
+#ifdef _SIMULATION_
+  PFREE (ra_data_ind);
+#endif
+}