porttimer.c
上传用户:kongshuqi
上传日期:2013-10-09
资源大小:59k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * FreeModbus Libary: Win32 Port
  3.  * Copyright (C) 2006 Christian Walter <wolti@sil.at>
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  18.  *
  19.  * File: $Id: porttimer.c,v 1.3 2006/06/18 13:00:30 wolti Exp $
  20.  */
  21. /* ----------------------- Platform includes --------------------------------*/
  22. #include "port.h"
  23. /* ----------------------- Modbus includes ----------------------------------*/
  24. #include "mb.h"
  25. #include "mbport.h"
  26. /* ----------------------- Defines ------------------------------------------*/
  27. /* ----------------------- Static variables ---------------------------------*/
  28. DWORD           dwTimeOut;
  29. BOOL            bTimeoutEnable;
  30. DWORD           dwTimeLast;
  31. extern HANDLE   g_hSerial;
  32. /* ----------------------- Start implementation -----------------------------*/
  33. BOOL
  34. xMBPortTimersInit( USHORT usTim1Timerout50us )
  35. {
  36.     dwTimeOut = usTim1Timerout50us / 20U;
  37.     if( dwTimeOut == 0 )
  38.         dwTimeOut = 1;
  39.     return xMBPortSerialSetTimeout( dwTimeOut );
  40. }
  41. void
  42. xMBPortTimersClose(  )
  43. {
  44.     /* Does not use any hardware resources. */
  45. }
  46. void
  47. vMBPortTimerPoll(  )
  48. {
  49.     /* Timers are called from the serial layer because we have no high
  50.      * res timer in Win32. */
  51.     if( bTimeoutEnable )
  52.     {
  53.         DWORD           dwTimeCurrent = GetTickCount(  );
  54.         if( ( dwTimeCurrent - dwTimeLast ) > dwTimeOut )
  55.         {
  56.             bTimeoutEnable = FALSE;
  57.             ( void )pxMBPortCBTimerExpired(  );
  58.         }
  59.     }
  60. }
  61. void
  62. vMBPortTimersEnable(  )
  63. {
  64.     bTimeoutEnable = TRUE;
  65.     dwTimeLast = GetTickCount(  );
  66. }
  67. void
  68. vMBPortTimersDisable(  )
  69. {
  70.     bTimeoutEnable = FALSE;
  71. }