/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/*	(c) Copyright Systems Integration Specialists Company, Inc.,	*/
/*	1996-2003 All Rights Reserved					*/
/*									*/
/* MODULE NAME : tp4port.c						*/
/* PRODUCT(S)  : Lean-T Stack						*/
/*									*/
/* MODULE DESCRIPTION :							*/
/*	Functions for porting to new operating systems.			*/
/*	The purpose of these functions is to cause "tp4_timer_tick"	*/
/*	to be called on 1 second intervals.  These functions are	*/
/*	appropriate for MS-DOS or any other single tasking OS.		*/
/*	They may be replaced by any Operating System appropriate code	*/
/*	which causes the same result.					*/
/*									*/
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE :				*/
/*	tp4_init_timer ()						*/
/*	tp4_check_timer ()						*/
/*									*/
/* MODIFICATION LOG :							*/
/*  Date     Who   Rev     Comments					*/
/* --------  ---  ------   -------------------------------------------  */
/* 12/19/03  JRB    04     Use sGetMsTime instead of "time" function to	*/
/*			   avoid problems when system time changed.	*/
/* 09/11/00  JRB    03     Make sure tp4_check_timer called at least	*/
/*			     once a second. If NOT, write msg to log.	*/
/* 08/13/98  JRB    02     Lint cleanup.				*/
/* 05/27/97  JRB   7.00    MMSEASE 7.0 release.				*/
/* 07/17/96  JRB    01     Created					*/
/************************************************************************/

#include "glbtypes.h"
#include "sysincs.h"
#include "tp4api.h"		/* User definitions for tp4	*/
#include "tp4_log.h"

#ifdef DEBUG_SISCO
SD_CONST static ST_CHAR *SD_CONST thisFileName = __FILE__;
#endif

static ST_DOUBLE oldtime;	/* milliseconds	*/
static ST_DOUBLE newtime;	/* milliseconds	*/

/************************************************************************/
/* tp4_init_timer							*/
/************************************************************************/
ST_VOID tp4_init_timer (ST_VOID)
  {
  oldtime = sGetMsTime ();
  }

/************************************************************************/
/* tp4_check_timer							*/
/************************************************************************/
ST_VOID tp4_check_timer (ST_VOID)
  {
#ifdef DEBUG_SISCO
static ST_BOOLEAN time_problem;	/* Timing problem detected.		*/
#endif

  newtime = sGetMsTime ();

#ifdef DEBUG_SISCO	/* Don't check for problem if can't log it.	*/
  /* Check time since last call.					*/
  /* This function should be called at least every second, so time diff	*/
  /* should be < 1000 ms. If difference is > 3000 ms, service loop may	*/
  /* be too slow.							*/
 /* //renxiaobao 通讯超时
//if (newtime - oldtime > 3000.0)
*/  if (newtime - oldtime > 10000.0)
    {
    TP_LOG_ERR1 ("WARNING: stack not serviced for %.3f seconds.", (newtime-oldtime)/1000.0);
    if (!time_problem)
      {
      /* Log this message only the first time it happens.	*/
      TP_LOGC_ERR0 ("MAY CAUSE UNEXPECTED TIMEOUTS, DISCONNECTS, ABORTS.");
      time_problem = SD_TRUE;
      }
    }
#endif

  /* Increment "oldtime" by 1000 ms increments as much as possible	*/
  /* without exceeding "newtime".					*/
  /* Call "tp4_timer_tick" once for each increment.			*/
  /*renxiaobao 通讯超时*/
  while (oldtime + 5000.0 < newtime)
    {
    tp4_timer_tick ();		/* Call function to process timer tick.	*/
    oldtime += 5000.0;
    }
/*  //while (oldtime + 1000.0 < newtime)
  //{
//	tp4_timer_tick ();		 Call function to process timer tick.	 
	//  oldtime += 1000.0;
  //}
*/  
}

