diff src/g23m-gprs/sm/sm_timer_handler.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-gprs/sm/sm_timer_handler.c	Fri Oct 16 06:25:50 2020 +0000
@@ -0,0 +1,148 @@
+/*----------------------------------------------------------------------------
+|  Project :  3G PS
+|  Module  :  SM
++-----------------------------------------------------------------------------
+|             Copyright 2003 Texas Instruments.
+|             All rights reserved. 
+| 
+|             This file is confidential and a trade secret of Texas 
+|             Instruments .
+|             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. 
++-----------------------------------------------------------------------------
+| Purpose:    3G timer handler functions implementation in the SM entity.
+|             For design details, see:
+|             8010.908 SM Detailed Specification
++---------------------------------------------------------------------------*/
+
+/*==== DECLARATION CONTROL =================================================*/
+
+/*==== INCLUDES =============================================================*/
+
+#include "sm.h"
+
+#include "sm_timer_handler.h"
+
+/*==== CONSTS ===============================================================*/
+
+/*==== TYPES ================================================================*/
+
+/*==== LOCALS ===============================================================*/
+
+/*==== PRIVATE FUNCTIONS ====================================================*/
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+/*
++------------------------------------------------------------------------------
+| Function    : sm_timer_start
++------------------------------------------------------------------------------
+| Description : Start specified timer for the given NSAPI/context
+
+| Parameters  : context    - Context data
+|               timer      - 3G timer (T3380, T3381, or T3390)
++------------------------------------------------------------------------------
+*/
+void sm_timer_start(struct T_SM_CONTEXT_DATA *context, T_SM_TIMER_TYPE timer)
+{
+  T_TIME  timeout;
+#ifdef DEBUG
+  (void)TRACE_EVENT_P2("sm_timer_start: %s on NSAPI %d",
+                       sm_timer_name((U8)timer), context->nsapi);
+#endif
+
+  switch (timer) {
+  case SM_TIMER_T3380:
+    timeout = (T_TIME)NWSM_T3380_TIMEOUT;
+    break;
+  case SM_TIMER_T3381:
+    timeout = (T_TIME)NWSM_T3381_TIMEOUT;
+    break;
+  case SM_TIMER_T3390:
+    timeout = (T_TIME)NWSM_T3390_TIMEOUT;
+    break;
+  case SM_TIMER_NONE:
+  default:
+    (void)TRACE_ERROR("sm_timer_start: Invalid timer specified - No timers started!");
+    return;
+  }
+
+  if ((T_SM_TIMER_TYPE)context->active_timer == SM_TIMER_NONE) {
+    context->active_timer = (U8)timer;
+    context->timeouts     = (U8)NWSM_MAX_TIMEOUTS;
+    (void)vsi_t_start(sm_handle, sm_nsapi_to_index(context->nsapi), timeout);
+  } else {
+    /* W00t?!? Timer already active? Bug? */
+    (void)TRACE_ERROR("A timer is already active for this NSAPI -- overriding!");
+    (void)vsi_t_stop (sm_handle, sm_nsapi_to_index(context->nsapi));
+    (void)vsi_t_start(sm_handle, sm_nsapi_to_index(context->nsapi), timeout);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : sm_timer_restart
++------------------------------------------------------------------------------
+| Description : Restart timer after timeout for the given NSAPI/context
+
+| Parameters  : context    - Context data
++------------------------------------------------------------------------------
+*/
+void sm_timer_restart(struct T_SM_CONTEXT_DATA *context)
+{
+  T_TIME  timeout;
+
+#ifdef DEBUG
+  (void)TRACE_EVENT_P3("sm_timer_restart: %s on NSAPI %d; %d timeouts remaining",
+                       sm_timer_name(context->active_timer),
+                       context->nsapi, context->timeouts);
+#endif
+
+  switch (context->active_timer) {
+  case SM_TIMER_T3380:
+    timeout = (T_TIME)NWSM_T3380_TIMEOUT;
+    break;
+  case SM_TIMER_T3381:
+    timeout = (T_TIME)NWSM_T3381_TIMEOUT;
+    break;
+  case SM_TIMER_T3390:
+    timeout = (T_TIME)NWSM_T3390_TIMEOUT;
+    break;
+  case SM_TIMER_NONE:
+  default:
+    (void)TRACE_ERROR("sm_timer_restart: Attempted to restart void timer - Aborted!");
+    return;
+  }
+
+  (void)vsi_t_start(sm_handle, sm_nsapi_to_index(context->nsapi), timeout);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : sm_timer_stop
++------------------------------------------------------------------------------
+| Description : Stop active timer for the given NSAPI/context
+
+| Parameters  : context    - Context data
++------------------------------------------------------------------------------
+*/
+void sm_timer_stop(struct T_SM_CONTEXT_DATA *context)
+{
+#ifdef DEBUG
+  (void)TRACE_EVENT_P2("sm_timer_stop: %s on NSAPI %d",
+                       sm_timer_name(context->active_timer),
+                       context->nsapi);
+#endif
+
+  if ((T_SM_TIMER_TYPE)context->active_timer != SM_TIMER_NONE) {
+    (void)vsi_t_stop (sm_handle, sm_nsapi_to_index(context->nsapi));
+    context->active_timer = (U8)SM_TIMER_NONE;
+    context->timeouts     = (U8)0;
+  }
+  /* If no timers active: No action */
+}
+
+/*==== END OF FILE ==========================================================*/