view src/g23m-fad/ppp/ppp_pei.c @ 407:f7f1f6f1a77d

init.c module: a chance at being correct for the D-Sample target
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 18 Jan 2018 04:45:11 +0000
parents 90eb61ecd093
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  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 module implements the process body interface
|             for the entity Point-to-Point Protocol (PPP)
|             
|             Exported functions:
|             
|             pei_create    - Create the Protocol Stack Entity
|             pei_init      - Initialize Protocol Stack Entity
|             pei_primitive - Process Primitive
|             pei_timeout   - Process Timeout
|             pei_exit      - Close resources and terminate
|             pei_run       - Process Primitive
|             pei_config    - Dynamic Configuration
|             pei_monitor   - Monitoring of physical Parameters
+----------------------------------------------------------------------------- 
*/ 

#define PPP_PEI_C

#define ENTITY_PPP

/*==== INCLUDES =============================================================*/

#include <stddef.h>
#include "typedefs.h"   /* to get Condat data types */
#include "vsi.h"        /* to get a lot of macros */
/*lint -efile(766,macdef.h) */
#include "macdef.h"     /* to get a lot of macros */
#include "custom.h"     /* to get a lot of macros */
#include "gsm.h"        /* to get a lot of macros */
/*lint -efile(766,cnf_ppp.h) */
#include "cnf_ppp.h"    /* to get cnf-definitions */
#include "mon_ppp.h"    /* to get mon-definitions */
#include "prim.h"       /* to get the definitions of used SAP and directions */
#include "dti.h"        /* to get the DTILIB definitions */
#include "ppp.h"        /* to get the global entity definitions */

#ifdef FF_STATUS_TE
#include "gdi.h"        /* To include driver type-defines */
#include "ste.h"        /* To include function interface for TE status driver */
#endif /* FF_STATUS_TE */

#include "ppp_rtf.h"     /* to get rt functions */
#include "ppp_rtp.h"     /* to get rt primitives */
#include "ppp_rts.h"     /* to get rt signals */

/*lint -efile(766,ppp_prxp.h) */
#include "ppp_prxf.h"     /* to get prx functions */
#include "ppp_prxp.h"     /* to get prx primitives */
#include "ppp_prxs.h"     /* to get prx signals */

/*lint -efile(766,ppp_ptxp.h) */
#include "ppp_ptxf.h"     /* to get ptx functions */
#include "ppp_ptxp.h"     /* to get ptx primitives */
#include "ppp_ptxs.h"     /* to get ptx signals */

/*lint -efile(766,ppp_frxp.h) */
#include "ppp_frxf.h"     /* to get frx functions */
#include "ppp_frxp.h"     /* to get frx primitives */
#include "ppp_frxs.h"     /* to get frx signals */

/*lint -efile(766,ppp_ftxp.h) */
#include "ppp_ftxf.h"     /* to get ftx functions */
#include "ppp_ftxp.h"     /* to get ftx primitives */
#include "ppp_ftxs.h"     /* to get ftx signals */

#include "ppp_arbf.h"     /* to get arb functions */
#include "ppp_arbp.h"     /* to get arb primitives */
#include "ppp_arbs.h"     /* to get arb signals */

/*lint -efile(766,ppp_lcpp.h) */
/*lint -efile(766,ppp_lcps.h) */
#include "ppp_lcpf.h"     /* to get lcp functions */
#include "ppp_lcpp.h"     /* to get lcp primitives */
#include "ppp_lcps.h"     /* to get lcp signals */

/*lint -efile(766,ppp_onap.h) */
/*lint -efile(766,ppp_onas.h) */
#include "ppp_onaf.h"     /* to get ona functions */
#include "ppp_onap.h"     /* to get ona primitives */
#include "ppp_onas.h"     /* to get ona signals */

/*lint -efile(766,ppp_ncpp.h) */
/*lint -efile(766,ppp_ncps.h) */
#include "ppp_ncpf.h"     /* to get ncp functions */
#include "ppp_ncpp.h"     /* to get ncp primitives */
#include "ppp_ncps.h"     /* to get ncp signals */

/*lint -efile(766,ppp_papp.h) */
/*lint -efile(766,ppp_paps.h) */
#include "ppp_papf.h"     /* to get pap functions */
#include "ppp_papp.h"     /* to get pap primitives */
#include "ppp_paps.h"     /* to get pap signals */

/*lint -efile(766,ppp_capp.h) */
/*lint -efile(766,ppp_caps.h) */
#include "ppp_capf.h"     /* to get chap functions */
#include "ppp_capp.h"     /* to get chap primitives */
#include "ppp_caps.h"     /* to get chap signals */

#include "ppp_dti.h"      /* to get the DTI signals */

/*==== DEFINITIONS ==========================================================*/

/*==== TYPES ================================================================*/

/*==== GLOBAL VARS ==========================================================*/

/*==== LOCAL VARS ===========================================================*/

static  BOOL          first_access  = TRUE;
static  T_MONITOR     ppp_mon;

/*
 * Jumptables to primitive handler functions. One table per SAP.
 *
 * Use MAK_FUNC_0 for primitives which contains no SDU.
 * Use MAK_FUNC_S for primitives which contains a SDU.
 */

/*
 * Function is needed for developing. This declaration can be removed
 * as soon as this function is no more called (i.e. all primitives are
 * handled).
 */

LOCAL void primitive_not_supported (void *data);
LOCAL void pei_dti_dti_ready_ind   (T_DTI2_READY_IND        *dti_ready_ind);
LOCAL void pei_dti_dti_data_req    (T_DTI2_DATA_REQ         *dti_data_req);
LOCAL void pei_dti_dti_data_ind    (T_DTI2_DATA_IND         *dti_data_ind);
LOCAL void pei_dti_dti_getdata_req (T_DTI2_GETDATA_REQ      *dti_getdata_req);
LOCAL void pei_dti_dti_data_test_ind (T_DTI2_DATA_TEST_IND  *dti_data_test_ind);
LOCAL void pei_dti_dti_data_test_req (T_DTI2_DATA_TEST_REQ  *dti_data_test_req);
LOCAL void pei_dti_dti_connect_req    (T_DTI2_CONNECT_REQ    *dti_connect_req );
LOCAL void pei_dti_dti_disconnect_ind (T_DTI2_DISCONNECT_IND *dti_disconnect_ind);   
LOCAL void pei_dti_dti_connect_cnf    (T_DTI2_CONNECT_CNF    *dti_connect_cnf);
LOCAL void pei_dti_dti_connect_ind    (T_DTI2_CONNECT_IND    *dti_connect_ind);
LOCAL void pei_dti_dti_connect_res    (T_DTI2_CONNECT_RES    *dti_connect_res);
LOCAL void pei_dti_dti_disconnect_req (T_DTI2_DISCONNECT_REQ *dti_disconnect_req);


static const T_FUNC ppp_table[] =
{
  MAK_FUNC_0(arb_ppp_establish_req,      PPP_ESTABLISH_REQ),    /* 7500 */
  MAK_FUNC_0(arb_ppp_terminate_req,      PPP_TERMINATE_REQ),    /* 7501 */
  MAK_FUNC_S(arb_ppp_pdp_activate_res,  PPP_PDP_ACTIVATE_RES),/* 7502 */
  MAK_FUNC_0(arb_ppp_pdp_activate_rej,  PPP_PDP_ACTIVATE_REJ),/* 7503 */
  MAK_FUNC_0(arb_ppp_modification_req,  PPP_MODIFICATION_REQ)  /* 7504 */
};

LOCAL const T_FUNC dti_dl_table[] = {
  MAK_FUNC_0( pei_dti_dti_connect_ind    ,   DTI2_CONNECT_IND   ),
  MAK_FUNC_0( pei_dti_dti_connect_cnf    ,   DTI2_CONNECT_CNF   ),
  MAK_FUNC_0( pei_dti_dti_disconnect_ind ,   DTI2_DISCONNECT_IND)
  ,
  MAK_FUNC_0( pei_dti_dti_ready_ind      ,   DTI2_READY_IND      ),
  MAK_FUNC_0( pei_dti_dti_data_ind       ,   DTI2_DATA_IND       )
#if defined (_SIMULATION_)
  ,
  MAK_FUNC_S( pei_dti_dti_data_test_ind  ,  DTI2_DATA_TEST_IND   )
#endif
};

LOCAL const T_FUNC dti_ul_table[] = {
  MAK_FUNC_0( pei_dti_dti_connect_req       ,   DTI2_CONNECT_REQ   ),
  MAK_FUNC_0( pei_dti_dti_connect_res       ,   DTI2_CONNECT_RES   ),
  MAK_FUNC_0( pei_dti_dti_disconnect_req,       DTI2_DISCONNECT_REQ)
  ,
  MAK_FUNC_0( pei_dti_dti_getdata_req       ,   DTI2_GETDATA_REQ    ),
  MAK_FUNC_0( pei_dti_dti_data_req          ,   DTI2_DATA_REQ       )

#if defined (_SIMULATION_)
  ,
  MAK_FUNC_S( pei_dti_dti_data_test_req     ,   DTI2_DATA_TEST_REQ  )
#endif
};

/*==== DIAGNOSTICS ==========================================================*/
#ifdef _DEBUG
#endif /* _DEBUG */

/*==== END DIAGNOSTICS ======================================================*/

/*==== PRIVATE FUNCTIONS ====================================================*/

/*
+------------------------------------------------------------------------------
|  Function    : primitive_not_supported
+------------------------------------------------------------------------------
|  Description  :  This function handles unsupported primitives.
|
|  Parameters  :  -
|
|  Return      :  -
|
+------------------------------------------------------------------------------
*/
LOCAL void primitive_not_supported (void *data)
{
  TRACE_FUNCTION ("primitive_not_supported");

  PFREE (data);
}


/*==== PUBLIC FUNCTIONS =====================================================*/

/* qqq hier malen
+------------------------------------------------------------------------------
|  Function    : pei_primitive
+------------------------------------------------------------------------------
|  Description  :  This function is called by the frame when a primitive is
|                  received and needs to be processed.
|
|                            |        |
|                           MMI      DTI                 UPLINK
|                            |        |
|                   +--------v--------v--------+
|                   |                          |
|                   |            PPP           |
|                   |                          |
|                   +-------------^------------+
|                                 |
|                                DTI                     DOWNLINK
|                                 |
|
|
|  Parameters  :  prim      - Pointer to the received primitive
|
|  Return      :  PEI_OK    - function succeeded
|                 PEI_ERROR - function failed
|
+------------------------------------------------------------------------------
*/

/*qqq hier kucken*/
LOCAL SHORT pei_primitive (void * primptr)
{
  TRACE_FUNCTION ("pei_primitive");

  if (primptr NEQ NULL)
  {
    T_PRIM *prim  = (T_PRIM *)primptr;
    USHORT           opc = (USHORT)prim->custom.opc;
    USHORT           n;
    const T_FUNC    *table;

    /*
     * This must be called for Partition Pool supervision. Will be replaced
     * by another macro some time.
     */
    VSI_PPM_REC (&prim->custom, __FILE__, __LINE__);
    PTRACE_IN (opc);

    switch (opc & OPC_MASK)
    {
      case PPP_DL:
        table = ppp_table;
        n = TAB_SIZE (ppp_table);
        break;
      case DTI_UL:

        table = dti_ul_table;
        n = TAB_SIZE (dti_ul_table);
        break;
      case DTI_DL:
        table = dti_dl_table;
        n = TAB_SIZE (dti_dl_table);
        break;
      default:
        table = NULL;
        n = 0;
        break;
    }

    if (table NEQ NULL)
    {
#define PRIM_OFFSET_DTI2 0x50
#define PRM_MASK2 0x000F
      if (((opc & PRM_MASK) - PRIM_OFFSET_DTI2) < n)
      {
        table += opc & PRM_MASK2;
#ifdef PALLOC_TRANSITION
        P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0; /*lint !e740 !e545 */
#ifndef NO_COPY_ROUTING
        P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER);
#endif /* NO_COPY_ROUTING */
#endif /* PALLOC_TRANSITION */
        JUMP (table->func) (P2D(prim));
      }
      else
      {
        primitive_not_supported (P2D(prim));
      }
      return PEI_OK;
    }

    /*
     * primitive is not a GSM primitive - forward it to the environment
     */
    if (opc & SYS_MASK)
      vsi_c_primitive (VSI_CALLER prim); /*lint !e534 */
    else
    {
      PFREE (P2D(prim));
      return PEI_ERROR;
    }
  }
  return PEI_OK;
}


/*
+------------------------------------------------------------------------------
|  Function    : pei_init
+------------------------------------------------------------------------------
|  Description  : This function is called by the frame. It is used to initialise
|                 the entitiy.
|
|  Parameters  :  handle            - task handle
|
|  Return      :  PEI_OK            - entity initialised
|                 PEI_ERROR         - entity not (yet) initialised
|
+------------------------------------------------------------------------------
*/

/*qqq hier Kommunikationskanaele eintragen*/
LOCAL SHORT pei_init (T_HANDLE handle)
{

  TRACE_FUNCTION ("pei_init");

  /*
   * Initialize task handle
   */
  PPP_handle = handle;
  /*
   * Open communication channel
   */
  if (hCommMMI < VSI_OK)
  {
    if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK) /*lint !e605 */
      return PEI_ERROR;
  }

  if (hCommPPP < VSI_OK)
  {
    if ((hCommPPP = vsi_c_open (VSI_CALLER PPP_NAME)) < VSI_OK) /*lint !e605 */
      return PEI_ERROR;
  }

  /*
   * Initialize global pointer ppp_data. This is required to access all
   * entity data.
   */
  ppp_data = &ppp_data_base;
  ppp_data->fcstab      = fcstab_base;
  ppp_data->ftx.accmtab = accmtab_base;


  /*
   * Initialize entity data (call init function of every service)
   */
  rt_init();
  prx_init();
  ptx_init();
  frx_init();
  ftx_init();
  arb_init();
  lcp_init();
  ona_init();
  ncp_init();
  pap_init();
  chap_init();

  /*
   * initialize global entity variables
   */
  ppp_data->mc = PPP_MC_DEFAULT;
  ppp_data->mt = PPP_MT_DEFAULT;
  ppp_data->mf = PPP_MF_DEFAULT;

    /*
     * a value different from 0 indicates an error or 
     * administrative termination
     */
  ppp_data->ppp_cause = 0;

  ppp_data->mru  = PPP_MRU_DEFAULT;
  ppp_data->n_hc = PPP_HC_OFF;

  ppp_data->pco_mask = PPP_PCO_MASK_DEFAULT;

 /*
  * Init DTILIB channels and allocate the DTI Database
  */     
  if ( (
    ppp_data->ppphDTI = dti_init (
      MAX_PPP_LINKS,
      PPP_handle,
      DTI_DEFAULT_OPTIONS,
      sig_callback
      )
    ) EQ D_NO_DATA_BASE)
  {
    TRACE_ERROR("Open the DTILIB Databank not correct");
    return PEI_ERROR;
  }
  return PEI_OK;
}

/*
+------------------------------------------------------------------------------
|  Function    : pei_timeout
+------------------------------------------------------------------------------
|  Description  : This function is called by the frame when a timer has expired.
|
|  Parameters  :  index             - timer index
|
|  Return      :  PEI_OK            - timeout processed
|                 PEI_ERROR         - timeout not processed
|
+------------------------------------------------------------------------------
*/
/*qqq hier noch ppp timer eintragen!!!*/
LOCAL SHORT pei_timeout (USHORT index)
{
  TRACE_FUNCTION ("pei_timeout");

  /*
   * Process timeout
   */
  switch (index)
  {
    case RT_INDEX:
      /*
       * RT expired.
       */
      rt_rt_expired();
      break;
    default:
      TRACE_ERROR("Unknown Timeout");
      break;
  }

  return PEI_OK;
}



/*
+------------------------------------------------------------------------------
|  Function    : pei_signal
+------------------------------------------------------------------------------
|  Description  : This function is called by the frame when a signal has been 
|                 received.
|
|  Parameters  :  opc               - signal operation code
|                 *data             - pointer to primitive
|
|  Return      :  PEI_OK            - signal processed
|                 PEI_ERROR         - signal not processed
|
+------------------------------------------------------------------------------
*/
LOCAL SHORT pei_signal (ULONG opc, void *data)
{
  TRACE_FUNCTION ("pei_signal");

  /*
   * Process signal
   */
  switch (opc)
  {
#ifdef FF_STATUS_TE
    /*
     * Call-back from TE status driver - power status has changed
     */
    case NEW_POWER_STATUS:      
      new_power_status_TE ( );
      break;
#endif /* FF_STATUS_TE */

    default:
      TRACE_ERROR("Unknown Signal OPC");
      break;
  } /*lint !e764 switch statement does not have a case */

  return PEI_OK;
} /*lint !e715 data not referenced */



/*
+------------------------------------------------------------------------------
|  Function    : pei_exit
+------------------------------------------------------------------------------
|  Description  : This function is called by the frame when the entity is
|                 terminated. All open resources are freed.
|
|  Parameters  :  -
|
|  Return      :  PEI_OK            - exit sucessful
|                 PEI_ERROR         - exit not sueccessful
|
+------------------------------------------------------------------------------
*/
LOCAL SHORT pei_exit (void)
{
  TRACE_FUNCTION ("pei_exit");

  /*
   * Stop timer
   */
  sig_any_rt_srt_req ();

  /*
   * Close communication channel
   */
  vsi_c_close (VSI_CALLER hCommMMI); /*lint !e534 Ignoring return value */
  hCommMMI = VSI_ERROR;

  /*
   *  Deinit the DTI Database
   */
  dti_deinit(ppp_data->ppphDTI);

  return PEI_OK;
}



/*
+------------------------------------------------------------------------------
|  Function    : pei_run
+------------------------------------------------------------------------------
|  Description  : This function is called by the frame when entering the main
|                 loop. This fucntion is only required in the active variant.
|
|                 This function is not used.
|
|  Parameters  :  handle            - Communication handle
|
|  Return      :  PEI_OK            - sucessful
|                 PEI_ERROR         - not successful
|
+------------------------------------------------------------------------------
*/
LOCAL SHORT pei_run (T_HANDLE TaskHandle, T_HANDLE ComHandle )
{
  return PEI_OK;
} /*lint !e715 TaskHandle and ComHandle not referenced */



/*
+------------------------------------------------------------------------------
|  Function    : pei_config
+------------------------------------------------------------------------------
|  Description  : This function is called by the frame when a primitive is
|                 received indicating dynamic configuration.
|
|                 This function is not used in this entity.
|
|  Parameters  :  handle            - Communication handle
|
|  Return      :  PEI_OK            - sucessful
|                 PEI_ERROR         - not successful
|
+------------------------------------------------------------------------------
*/
LOCAL SHORT pei_config (char *inString)
{
#ifndef NCONFIG
  ULONG new_mask;
#endif /* !NCONFIG */

  TRACE_FUNCTION ("pei_config");
  TRACE_FUNCTION (inString);

#ifndef NCONFIG
  /*
   * Parse next keyword and number of variables
   */

  /*if(!strcmp(inString,"PCO="))*/
  if (inString[0] EQ 'P' &&
      inString[1] EQ 'C' &&
      inString[2] EQ 'O' &&
      inString[3] EQ '=')
  {
    TRACE_EVENT ("New PCO content:");
    new_mask = 0;
    /*
     * LCP MRU
     */
    if((inString[4] EQ 0x31) ||
       ((inString[4] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_LCP_MRU)))
    {
      TRACE_EVENT(" - LCP MRU");
      new_mask|= PPP_PCO_MASK_LCP_MRU;
    }
    /*
     * LCP AP
     */
    if((inString[5] EQ 0x31) ||
       ((inString[5] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_LCP_AP)))
    {
      TRACE_EVENT(" - LCP Authentication protocol");
      new_mask|= PPP_PCO_MASK_LCP_AP;
    }
    /*
     * LCP TWO
     */
    if((inString[6] EQ 0x31) ||
       ((inString[6] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_LCP_TWO)))
    {
      TRACE_EVENT(" - two LCP packets");
      new_mask|= PPP_PCO_MASK_LCP_TWO;
    }
    /*
     * Authentication Protocol
     */
    if((inString[7] EQ 0x31) ||
       ((inString[7] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_AUTH_PROT)))
    {
      TRACE_EVENT(" - PAP/CHAP Authentication packet(s)");
      new_mask|= PPP_PCO_MASK_AUTH_PROT;
    }
    /*
     * IPCP HC
     */
    if((inString[8] EQ 0x31) ||
       ((inString[8] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_HC)))
    {
      TRACE_EVENT(" - VJ Header Compression");
      new_mask|= PPP_PCO_MASK_IPCP_HC;
    }
    /*
     * IPCP IP
     */
    if((inString[9] EQ 0x31) ||
       ((inString[9] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_IP)))
    {
      TRACE_EVENT(" - IP address");
      new_mask|= PPP_PCO_MASK_IPCP_IP;
    }
    /*
     * IPCP PDNS
     */
    if((inString[10] EQ 0x31) ||
       ((inString[10] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_PDNS)))
    {
      TRACE_EVENT(" - primary DNS address");
      new_mask|= PPP_PCO_MASK_IPCP_PDNS;
    }
    /*
     * IPCP SDNS
     */
    if((inString[11] EQ 0x31) ||
       ((inString[11] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_SDNS)))
    {
      TRACE_EVENT(" - secondary DNS address");
      new_mask|= PPP_PCO_MASK_IPCP_SDNS;
    }
    /*
     * IPCP GATEWAY
     */
    if((inString[12] EQ 0x31) ||
       ((inString[12] NEQ 0x30) && 
        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_GATEWAY)))
    {
      TRACE_EVENT(" - Gateway address");
      new_mask|= PPP_PCO_MASK_IPCP_GATEWAY;
    }

    if(new_mask EQ 0)
    {
      TRACE_EVENT(" - no content");
    }
    /*
     * set new PCO mask
     */
    ppp_data->pco_mask = new_mask;
  }
  else
  {
    TRACE_ERROR("config command does not exist");
  }
#endif /* !NCONFIG */

  return PEI_OK;
}



/*
+------------------------------------------------------------------------------
|  Function    : pei_config
+------------------------------------------------------------------------------
|  Description  : This function is called by the frame in case sudden entity
|                 specific data is requested (e.g. entity Version).
|
|  Parameters  :  out_monitor       - return the address of the data to be
|                                     monitoredCommunication handle
|
|  Return      :  PEI_OK            - sucessful (address in out_monitor is valid)
|                 PEI_ERROR         - not successful
|
+------------------------------------------------------------------------------
*/
LOCAL SHORT pei_monitor (void ** out_monitor)
{
  TRACE_FUNCTION ("pei_monitor");

  /*
   * Version = "0.S" (S = Step).
   */
  ppp_mon.version = VERSION_PPP; /*lint !e605 Increase in pointer capability */
  *out_monitor = &ppp_mon;

  return PEI_OK;
}



/*
+------------------------------------------------------------------------------
|  Function    : pei_create
+------------------------------------------------------------------------------
|  Description  :  This function is called by the frame when the process is 
|                  created.
|
|  Parameters  :  out_name          - Pointer to the buffer in which to locate
|                                     the name of this entity
|
|  Return      :  PEI_OK            - entity created successfuly
|                 PEI_ERROR         - entity could not be created
|
+------------------------------------------------------------------------------
*/
GLOBAL SHORT pei_create (T_PEI_INFO **info)
{
  static T_PEI_INFO pei_info =
              {
               "PPP",         /*lint !e605 Increase in pointer capability */
               {              /* pei-table */
                 pei_init,
                 pei_exit,
                 pei_primitive,
                 pei_timeout,
                 pei_signal,
                 pei_run,
                 pei_config,
                 pei_monitor
               },
               2048,          /* stack size */
               10,            /* queue entries */
               185,           /* priority (1->low, 255->high) */
               TIMER_MAX,     /* number of timers */
               0x03|PRIM_NO_SUSPEND /* flags: bit 0   active(0) body/passive(1) */
              };              /*        bit 1   com by copy(0)/reference(1) */


  TRACE_FUNCTION ("pei_create");

  /*
   * Close Resources if open
   */
  if (first_access)
    first_access = FALSE;
  else
    pei_exit(); /*lint !e534 Ignoring return value */

  /*
   * Export startup configuration data
   */
  *info = &pei_info;

  return PEI_OK;
}

/*
+------------------------------------------------------------------------------
|  Function    : sig_callback
+------------------------------------------------------------------------------
|  Description  :  This is the DTI Callback Function which handles the DTI signals.
|          
|
|  Parameters  :  instance        -   DTI instance  
|                 inter_face      -   DTI interface
|                 channel         -   DTI channel
|                 reason          -   DTI reason
|                 *dti_data_ind   -   Ptr. to the data primitive
|
+------------------------------------------------------------------------------
*/

GLOBAL void sig_callback(U8 instance, U8 inter_face, U8 channel,
                         U8 reason, T_DTI2_DATA_IND *dti_data_ind)
{
  DTI_HANDLE hDTI;

  TRACE_FUNCTION("sig_callback");
  
  hDTI = ppp_data->ppphDTI;
  
  if (hDTI NEQ D_NO_DATA_BASE)
  {
    switch (reason)
    {
      case DTI_REASON_CONNECTION_OPENED:
        /*
         *  DTI connect
         */
        sig_dti_arb_connection_opened_ind (hDTI, instance, inter_face, channel);
        break;

      case DTI_REASON_CONNECTION_CLOSED:
        /*
         *  DTI disconnect
         */
        sig_dti_arb_connection_closed_ind (hDTI, instance, inter_face, channel);
        break;

      case DTI_REASON_DATA_RECEIVED:
        if(inter_face EQ PROT_LAYER)          
          /*
           *  Data packet recived from Protocol Layer. Process it and send.
           */
          sig_dti_prx_data_received_ind(dti_data_ind);
        else
          /*
           *  Data packet recived from Peer Layer. Process it and send.
           */            
          sig_dti_frx_data_received_ind (dti_data_ind);
        break;

      case DTI_REASON_TX_BUFFER_FULL:
        if(inter_face EQ PROT_LAYER)
            /*
             *  Buffer full for sending data to Protocol Layer.
             */
            sig_dti_ptx_tx_buffer_full_ind();
         else
            /*
             *  Buffer full for sending data to Peer Layer.
             */
            sig_dti_ftx_tx_buffer_full_ind ();
        break;

      case DTI_REASON_TX_BUFFER_READY:
        if(inter_face EQ PROT_LAYER)
            /*
             *  Buffer ready Protocol Layer.
             */
            sig_dti_ptx_tx_buffer_ready_ind();
          else
            /*
             *  Buffer ready Peer Layer.
             */
            sig_dti_ftx_tx_buffer_ready_ind();
        break;

      default:
        TRACE_ERROR("Pointer to no DTI database");
        break;
    } /* end switch */
  } /* end if */
  else 
  {
    TRACE_ERROR("Pointer to DTILIB database non existing");
  }
} /* sig_callback() */

/*
+------------------------------------------------------------------------------
| Function    : sig_any_dti_data_ind
+------------------------------------------------------------------------------
| Description : This function sends a Data Primitive
|
| Parameters  : *hDTI           -   Ptr. to DTI Databank
|               *dti_data_ind   -   Ptr. to Primitive which shall be sended
|               instance        -   DTI instance
|               interface       -   DTI interface
|               channel         -   DTI channel
|
+------------------------------------------------------------------------------
*/

GLOBAL void sig_any_dti_data_ind (
  DTI_HANDLE hDTI,
  T_DTI2_DATA_IND *dti_data_ind,
  UBYTE instance,
  UBYTE inter_face,
  UBYTE channel,
  UBYTE p_id
  )
{
  T_desc2*  temp_desc;

  TRACE_FUNCTION ("sig_any_dti_data_ind()");
                                            
  dti_data_ind->parameters.p_id                   = p_id;
  dti_data_ind->parameters.st_lines.st_flow       = DTI_FLOW_ON;
  dti_data_ind->parameters.st_lines.st_line_sa    = DTI_SA_ON;
  dti_data_ind->parameters.st_lines.st_line_sb    = DTI_SB_ON;
  dti_data_ind->parameters.st_lines.st_break_len  = DTI_BREAK_OFF;

  /*
   *  This PPP does not support handle of offset in the descriptor. 
   *  Offset is set to 0 and size to len.
   */
  temp_desc = (T_desc2*)dti_data_ind->desc_list2.first;
  while(temp_desc)
  {
    temp_desc->offset = 0;
    temp_desc->size   = temp_desc->len;
    temp_desc         = (T_desc2*)temp_desc->next;
  }
  
  dti_send_data(hDTI, instance, inter_face, channel, dti_data_ind);
} /* sig_any_dti_data_ind () */


/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_connect_req
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_connect_req
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/

GLOBAL void pei_dti_dti_connect_req (
                    T_DTI2_CONNECT_REQ   *dti_connect_req
                  )
{
    dti_dti_connect_req (ppp_data->ppphDTI, dti_connect_req);
}


/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_disconnect_ind
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_disconnect_ind
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/

GLOBAL void pei_dti_dti_disconnect_ind (
                    T_DTI2_DISCONNECT_IND   *dti_disconnect_ind
                  )
{
    dti_dti_disconnect_ind (ppp_data->ppphDTI, dti_disconnect_ind);
}

/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_connect_cnf
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_connect_cnf
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_connect_cnf (
                    T_DTI2_CONNECT_CNF   *dti_connect_cnf
                  )
{
    dti_dti_connect_cnf(ppp_data->ppphDTI, dti_connect_cnf);
}


/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_connect_ind
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_connect_ind
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_connect_ind (
                    T_DTI2_CONNECT_IND   *dti_connect_ind
                  )
{    
    dti_dti_connect_ind(ppp_data->ppphDTI, dti_connect_ind);
}


/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_connect_res
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_connect_res
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_connect_res (
                    T_DTI2_CONNECT_RES   *dti_connect_res
                  )
{
    dti_dti_connect_res(ppp_data->ppphDTI, dti_connect_res);  
}

/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_disconnect_req
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_disconnect_req
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_disconnect_req (
                    T_DTI2_DISCONNECT_REQ   *dti_disconnect_req
                  )
{
    dti_dti_disconnect_req (ppp_data->ppphDTI, dti_disconnect_req);
}


/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_ready_ind
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_ready_ind
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_ready_ind (
                    T_DTI2_READY_IND   *dti_ready_ind
                  )
{
    dti_dti_ready_ind (ppp_data->ppphDTI, dti_ready_ind);
}

/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_data_req
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_data_req
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/

GLOBAL void pei_dti_dti_data_req (
                    T_DTI2_DATA_REQ   *dti_data_req
                  )
{
    dti_dti_data_req (ppp_data->ppphDTI, dti_data_req);
}

/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_data_ind
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_data_ind
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_data_ind (
                    T_DTI2_DATA_IND   *dti_data_ind
                  )
{
    dti_dti_data_ind (ppp_data->ppphDTI, dti_data_ind);
}

/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_getdata_req
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_getdata_req
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_getdata_req (
                    T_DTI2_GETDATA_REQ   *dti_getdata_req
                  )
{
  dti_dti_getdata_req (ppp_data->ppphDTI, dti_getdata_req);
}
 
/*==== Start functions only use with Windows ===============================*/

#if defined (_SIMULATION_)

/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_data_test_req
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_data_test_req
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_data_test_req (
                    T_DTI2_DATA_TEST_REQ   *dti_data_test_req
                  )
{
    dti_dti_data_test_req (ppp_data->ppphDTI, dti_data_test_req);
}

/*
+------------------------------------------------------------------------------
| Function    : pei_dti_dti_data_test_ind
+------------------------------------------------------------------------------
| Description : Helpfunction to activate dti_dti_data_test_req
|
| Parameters  : Ptr. to primitive
|
+------------------------------------------------------------------------------
*/
    
GLOBAL void pei_dti_dti_data_test_ind (
                    T_DTI2_DATA_TEST_IND   *dti_data_test_ind
                  )
{
  dti_dti_data_test_ind (ppp_data->ppphDTI, dti_data_test_ind);   
}

#endif /* _SIMULATION_) */

/*==== END OF FILE =========================================================*/