com_utils.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:7k
源码类别:

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   com_utils.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  COM port utility source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  * 
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. //---------------------------------------------------------------------------
  66. #include <windows.h>
  67. #include <stdio.h>
  68. #pragma hdrstop
  69. DCB dcb;
  70. //------------------------------------------------------------------------------
  71. //------------------------------------------------------------------------------
  72.   bool open_com_port( HANDLE &hCOM_HANDLE, int i_com_port, int i_baud_rate)
  73.   {
  74.         if ( hCOM_HANDLE != NULL && hCOM_HANDLE != INVALID_HANDLE_VALUE )
  75.         {
  76.                 PurgeComm( hCOM_HANDLE, PURGE_TXABORT);
  77.                 PurgeComm( hCOM_HANDLE, PURGE_RXABORT);
  78.                 PurgeComm( hCOM_HANDLE, PURGE_TXCLEAR);
  79.                 PurgeComm( hCOM_HANDLE, PURGE_RXCLEAR);
  80.                 CloseHandle( hCOM_HANDLE);
  81.                 hCOM_HANDLE = NULL;
  82.         }
  83. char c_com[50];
  84.         ::sprintf(c_com, "\\.\COM%d", i_com_port);
  85. hCOM_HANDLE = ::CreateFile( c_com,
  86.      GENERIC_READ|GENERIC_WRITE,
  87.      0,
  88.      NULL,
  89.      OPEN_EXISTING,
  90.      FILE_ATTRIBUTE_NORMAL,
  91.      NULL);
  92. if( hCOM_HANDLE==INVALID_HANDLE_VALUE )
  93.         {
  94. //            ShowMessage(" COM" + IntToStr( i_com_port) + " is used by other program.");
  95.             hCOM_HANDLE = NULL;
  96.     return false;
  97. }
  98. if( ::SetupComm(hCOM_HANDLE, 8192, 8192)==FALSE )
  99. return false;
  100. if( ::PurgeComm(hCOM_HANDLE, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR)==FALSE )
  101. return false;
  102.         COMMTIMEOUTS TimeOut;
  103.         TimeOut.ReadIntervalTimeout = 0;
  104.         TimeOut.ReadTotalTimeoutMultiplier = 1;
  105.         TimeOut.ReadTotalTimeoutConstant = 700;
  106.         TimeOut.WriteTotalTimeoutMultiplier = 1;
  107.         TimeOut.WriteTotalTimeoutConstant = 700;
  108.         SetCommTimeouts(hCOM_HANDLE, &TimeOut);
  109. char c_dcb[50];
  110.         ::sprintf( c_dcb, "%d,n,8,1", i_baud_rate);
  111.         BuildCommDCB( c_dcb, &dcb );
  112.         SetCommState( hCOM_HANDLE, &dcb );
  113.         return true;
  114.  }
  115. //------------------------------------------------------------------------------
  116.   bool set_com_port( HANDLE &hCOM_HANDLE, int i_baud_rate)
  117.   {
  118. if( hCOM_HANDLE==INVALID_HANDLE_VALUE )
  119.         {
  120.             hCOM_HANDLE = NULL;
  121.     return false;
  122. }
  123. if( hCOM_HANDLE==NULL )
  124.         {
  125.     return false;
  126. }
  127.         if ( PurgeComm( hCOM_HANDLE, PURGE_TXABORT)==0 || PurgeComm( hCOM_HANDLE, PURGE_RXABORT)==0 ||
  128.              PurgeComm( hCOM_HANDLE, PURGE_TXCLEAR)==0 || PurgeComm( hCOM_HANDLE, PURGE_RXCLEAR)==0 )
  129.         {
  130.     return false;
  131.         }
  132. if( ::SetupComm(hCOM_HANDLE, 8192, 8192)==FALSE )
  133. return false;
  134. if( ::PurgeComm(hCOM_HANDLE, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR)==FALSE )
  135. return false;
  136.         COMMTIMEOUTS TimeOut;
  137.         TimeOut.ReadIntervalTimeout = 0;
  138.         TimeOut.ReadTotalTimeoutMultiplier = 1;
  139.         TimeOut.ReadTotalTimeoutConstant = 700;
  140.         TimeOut.WriteTotalTimeoutMultiplier = 1;
  141.         TimeOut.WriteTotalTimeoutConstant = 700;
  142.         SetCommTimeouts( hCOM_HANDLE, &TimeOut);
  143. char c_dcb[50];
  144.         ::sprintf( c_dcb, "%d,n,8,1", i_baud_rate);
  145.         BuildCommDCB( c_dcb, &dcb );
  146.         SetCommState( hCOM_HANDLE, &dcb );
  147.         return true;
  148.  }
  149. //------------------------------------------------------------------------------
  150.  void close_com_port( HANDLE &hCOM_HANDLE  )
  151.  {
  152.         if ( hCOM_HANDLE != NULL && hCOM_HANDLE != INVALID_HANDLE_VALUE )
  153.         {
  154.                 PurgeComm( hCOM_HANDLE, PURGE_TXABORT);
  155.                 PurgeComm( hCOM_HANDLE, PURGE_RXABORT);
  156.                 PurgeComm( hCOM_HANDLE, PURGE_TXCLEAR);
  157.                 PurgeComm( hCOM_HANDLE, PURGE_RXCLEAR);
  158.                 CloseHandle( hCOM_HANDLE);
  159.                 hCOM_HANDLE = NULL;
  160.         }
  161.         if ( hCOM_HANDLE == INVALID_HANDLE_VALUE )
  162.         {
  163.            hCOM_HANDLE = NULL;
  164.         }
  165.  }
  166. //------------------------------------------------------------------------------