diff src/g23m-gsm/ss/ss_em.c @ 1:fa8dc04885d8

src/g23m-*: import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:25:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-gsm/ss/ss_em.c	Fri Oct 16 06:25:50 2020 +0000
@@ -0,0 +1,194 @@
+/*
++-----------------------------------------------------------------------------
+|  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 defines the engineering mode (EM) device driver for the
+|             G23 protocol stack. This driver is used to control all engineering
+|             mode related functions.
++-----------------------------------------------------------------------------
+*/
+
+#ifndef SS_EM_C
+#define SS_EM_C
+
+#define ENTITY_SS
+
+/*==== INCLUDES ===================================================*/
+
+#include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include "typedefs.h"
+#include "pcm.h"
+#include "pconst.cdg"
+#include "mconst.cdg"
+#include "message.h"
+#include "ccdapi.h"
+#include "vsi.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+#include "cnf_ss.h"
+#include "mon_ss.h"
+#include "pei.h"
+#include "tok.h"
+#include "ss.h"
+#include "ss_em.h"
+
+/*==== EXPORT =====================================================*/
+
+/*==== PRIVAT =====================================================*/
+
+/*==== VARIABLES ==================================================*/
+#ifdef FF_EM_MODE
+GLOBAL UBYTE em_ss_event_buffer[EM_SS_BUFFER_SIZE ];
+GLOBAL UBYTE em_ss_buffer_write;
+
+/* Event tracing flags for EM */
+GLOBAL BOOL ss_v[EM_MAX_SS_EVENTS];
+
+static UBYTE em_ss_trace_occured;
+
+/*==== FUNCTIONS ==================================================*/
+
+/*
++------------------------------------------------------------------------------
+|  Function     : em_write_buffer_3
++------------------------------------------------------------------------------
+|  Description  :  Perform buffer check and store corresponding data in it.
+|
+|  Parameters   :  Event number, data value
+|
+|  Return       :  TRUE/FALSE
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL UBYTE em_write_buffer_3  (UBYTE event_no, UBYTE value)
+{
+  TRACE_FUNCTION ("ss_em_write_buffer_3()");
+
+  if (check_write_index(3))
+  {
+    em_ss_event_buffer[em_ss_buffer_write++] = event_no; /* Tag: Event number */
+    em_ss_event_buffer[em_ss_buffer_write++] = 1;        /* Length: 0 equals no value */
+    em_ss_event_buffer[em_ss_buffer_write++] = value;    /* Value: Data to be stored */
+    return FALSE; /* Data is stored inside buffer, reset flag */
+  }
+  else
+    return TRUE;  /* No more space inside buffer, serve flag next time */
+}
+
+
+/*
++------------------------------------------------------------------------------
+|  Function     : check_write_index
++------------------------------------------------------------------------------
+|  Description  :  Checks the write index inside the buffer. No reset when
+|                  buffer is full.
+|
+|  Parameters   :  Number of bytes to be stored in buffer
+|
+|  Return       :  TRUE/FALSE
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL UBYTE check_write_index (UBYTE n)
+{
+  TRACE_FUNCTION ("ss_check_write_index()");
+
+  if (em_ss_buffer_write + n < EM_SS_BUFFER_SIZE )
+  {
+    /*
+     * ACI is informed about the first event trace,
+     * used for later data processing.
+     */
+    if (em_ss_trace_occured == 0)
+    {
+      PALLOC(em_notification, EM_DATA_IND);
+      em_notification->entity = EM_SS;
+      PSENDX(MMI, em_notification);
+      em_ss_trace_occured++;
+    }
+    return TRUE;
+  }
+  else
+    return FALSE;
+}
+
+
+/*
++------------------------------------------------------------------------------
+|  Function     : em_init_ss_event_trace
++------------------------------------------------------------------------------
+|  Description  :  Initialize the event tracing flags for SMS
+|
+|  Parameters   :
+|
+|  Return       :
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void em_init_ss_event_trace(void)
+{
+  UBYTE i;
+
+  TRACE_FUNCTION ("em_init_ss_event_trace()");
+
+  for(i = 1; i < EM_MAX_SS_EVENTS; i++)
+    ss_v[i] = 0;
+
+  em_ss_buffer_write = 0;
+}
+
+
+/*
++------------------------------------------------------------------------------
+|  Function     : ss_em_ss_event_req
++------------------------------------------------------------------------------
+|  Description  :  Set the event tracing flags according the bitmask
+|
+|  Parameters   :  Primitive    - Bitmask
+|
+|  Return       :
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void ss_em_ss_event_req (T_EM_SS_EVENT_REQ *em_ss_event_req)
+{
+  UBYTE i;
+
+  TRACE_FUNCTION ("em_ss_em_ss_event_req()");
+
+  /*
+   *  The event tracing flags are set according the bitmask. ss_v[i] are
+   *  the flags belonging to the event number described in 8443.601
+   */
+  for(i=1; i<(EM_MAX_SS_EVENTS); i++)
+    ss_v[i] = ((em_ss_event_req->bitmask_ss & (0x01<<(i-1))) > 0) ? TRUE : FALSE;
+
+  /*
+   * A new event trace is generated therefor the flag is reset.
+   */
+  em_ss_trace_occured = 0;
+
+  PFREE(em_ss_event_req);
+}
+
+#endif /* FF_EM_MODE */
+
+#endif /* #ifndef SS_EM_C */