diff gsm-fw/L1/stand/forwarder.c @ 618:0c736bd8385e

L1 standalone: forwarder entity implemented
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 31 Aug 2014 00:06:00 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/L1/stand/forwarder.c	Sun Aug 31 00:06:00 2014 +0000
@@ -0,0 +1,117 @@
+/*
+ * This module implements the special "forwarder" (L1IF) GPF entity
+ * for L1 standalone operation described in README.
+ */
+
+/*==== INCLUDES =============================================================*/
+
+#include <string.h>
+#include "typedefs.h"	/* to get Condat data types */
+#include "vsi.h"        /* to get a lot of macros */
+#include "pei.h"        /* to get PEI interface */
+#include "tools.h"      /* to get common tools */
+#include "header.h"
+#include "os.h"
+#include "../../gpf/frame/route.h"
+
+/*==== LOCALS ================================================================*/
+
+static T_HANDLE       Our_Handle;
+
+#define VSI_CALLER Our_Handle,
+
+static T_HANDLE       hCommTST = VSI_ERROR;
+
+/*==== PRIVATE FUNCTIONS =====================================================*/
+
+
+/*
++------------------------------------------------------------------------------
+|  Function     : pei_init
++------------------------------------------------------------------------------
+|  Description  :  Initialize Protocol Stack Entity
+|
+|  Parameters   :  handle    - task handle
+|
+|  Return       :  PEI_OK    - entity initialised
+|                  PEI_ERROR - entity not (yet) initialised
++------------------------------------------------------------------------------
+*/
+LOCAL SHORT pei_init ( T_HANDLE Handle )
+{
+  Our_Handle = Handle;
+
+  if (hCommTST < VSI_OK)
+  {
+    if ((hCommTST = vsi_c_open (VSI_CALLER "TST")) < VSI_OK)
+      return PEI_ERROR;
+  }
+
+  return PEI_OK;
+}
+
+LOCAL SHORT pei_primitive (void *primitive)
+{
+  OS_QDATA OS_Msg = { 0 };
+  T_VOID_STRUCT *prim = (T_VOID_STRUCT *) primitive;
+
+  OS_Msg.data16 = MSG_PRIMITIVE;
+  OS_Msg.e_id = Our_Handle;
+  OS_Msg.ptr = prim;
+  OS_Msg.data32 = P_OPC(prim);
+  os_GetTime(0, &OS_Msg.time);
+
+  rt_ExtPrimitive(Our_Handle, hCommTST, Our_Handle, "EXT", &OS_Msg);
+
+  return PEI_OK;
+}
+
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+/*
++------------------------------------------------------------------------------
+|  Function     :  pei_create
++------------------------------------------------------------------------------
+|  Description  :  Create the Protocol Stack Entity.
+|
+|  Parameters   :  info        - Pointer to the structure of entity parameters
+|
+|  Return       :  PEI_OK      - entity created successfully
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL SHORT l1stand_fwd_pei_create ( T_PEI_INFO **info )
+{
+  static T_PEI_INFO pei_info =
+  {
+    "L1IF",
+    {
+      pei_init,
+      NULL,
+      pei_primitive,
+      NULL,             /* no timeout function */
+      NULL,             /* no signal function  */
+      NULL,		/* no run function */
+      NULL,		/* no config function */
+      NULL,		/* no monitor function */
+    },
+    1000,     /* Stack Size      */
+    50,       /* Queue Entries   */
+    20,       /* Priority        */
+    0,        /* number of timer */
+    PASSIVE_BODY | COPY_BY_REF | TRC_NO_SUSPEND      /* flags           */
+  };
+
+  /*
+   * export startup configuration data
+   */
+  *info = &pei_info;
+  /*
+   *  Initialize entity data
+   */
+
+  return PEI_OK;
+}
+
+/*==== END OF FILE ==========================================================*/