⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serialobj.cpp

📁 RFID温度签的源码
💻 CPP
字号:
#include "stdafx.h"
#include ".\serialobj.h"

#include "DebugError.h"
#include <stdio.h>
#include <Windows.h>

CSerialObj::CSerialObj(void) :
	m_hSerialCom( NULL )
{
}

CSerialObj::~CSerialObj(void)
{
	ClosePort();
}

BOOL CSerialObj::OpenPort( 
				IN U32 BaudRate, IN U8 ByteSize, 
				IN U8 Parity, IN U8 StopBits, IN U8 PortID )
{
	BOOL	bRet = FALSE;
	TCHAR	chComName[16];
	DCB		dcbConfig;

	do 
	{
		ClosePort();

		_stprintf( chComName, _T("COM%d:"), PortID );
		m_hSerialCom = CreateFile(
			chComName,							// Specify port device
			GENERIC_READ | GENERIC_WRITE,       // Specify mode that open device.
			0,                                  // the devide isn't shared.
			NULL,                               // the object gets a default security.
			OPEN_EXISTING,                      // Specify which action to take on file. 
			0,                                  // default.
			NULL);                              // default.

		if( m_hSerialCom == NULL )
		{
			OutputTimeToLog(); 
			OutputDebugLog1( "CreateFile failed, error code:0x%08x\n", GetLastError() );
			break;
		}

		bRet = GetCommState( m_hSerialCom, &dcbConfig );
		if( bRet == FALSE )
		{
			OutputTimeToLog();
			OutputDebugLog1( "GetCommState failed, error code:0x%08x\n", GetLastError() );
			break;
		}

		//memset(&dcbConfig, 0, sizeof(dcbConfig));

		dcbConfig.BaudRate		= BaudRate;
		dcbConfig.ByteSize		= ByteSize;
		dcbConfig.Parity		= Parity;
		dcbConfig.StopBits		= StopBits;
		dcbConfig.fBinary		= TRUE;
		dcbConfig.fParity       = FALSE;
		bRet = SetCommState( m_hSerialCom, &dcbConfig );
		if( bRet == FALSE )
		{
			OutputTimeToLog();
			OutputDebugLog1( "SetCommState failed, error code:0x%08x\n", GetLastError() );
			break;
		}

		SetupComm(m_hSerialCom, 4096, 4096);

		COMMTIMEOUTS comTimeOut;                   
		comTimeOut.ReadIntervalTimeout = 100;
		comTimeOut.ReadTotalTimeoutMultiplier = 1;
		comTimeOut.ReadTotalTimeoutConstant = 500;
		comTimeOut.WriteTotalTimeoutMultiplier = 1;
		comTimeOut.WriteTotalTimeoutConstant = 100;

		bRet = SetCommTimeouts( m_hSerialCom, &comTimeOut );
		if( bRet == FALSE )
		{
			OutputTimeToLog();
			OutputDebugLog1( "SetCommTimeouts failed, error code:0x%08x\n", GetLastError() );
			break;
		}

		bRet = TRUE;
	} while(0);


	return bRet;
}

BOOL CSerialObj::ClearBuffer()
{
	BOOL bRet = FALSE;

	if( m_hSerialCom )
	{
		bRet = PurgeComm( m_hSerialCom, PURGE_TXCLEAR | PURGE_RXCLEAR );

	}

	return bRet;	
}

BOOL CSerialObj::ReadData( OUT U8* pDataBuffer, IN U32 BufferSize, OUT U32* pLength )
{
	BOOL bRet = FALSE;

	if( m_hSerialCom && pDataBuffer && pLength && ( BufferSize > 0 ) )
	{
		DWORD dwNumberOfRead = 0;
		bRet = ReadFile( m_hSerialCom, pDataBuffer, BufferSize, &dwNumberOfRead, NULL );
		if( bRet == FALSE )
		{
			OutputTimeToLog();
			OutputDebugLog1( "ReadFile failed, error code:0x%08x\n", GetLastError() );
		}

		*pLength = (U32)dwNumberOfRead;
	}

	return bRet;
}

BOOL CSerialObj::WriteData( 
				IN const U8* pDataBuffer, IN U32 BufferSize, OUT U32* pLength )
{
	BOOL bRet = FALSE;

	if( m_hSerialCom && pDataBuffer && pLength && ( BufferSize > 0 ) )
	{
		DWORD dwNumberOfWrite = 0;
		bRet = WriteFile( m_hSerialCom, pDataBuffer, BufferSize, &dwNumberOfWrite, NULL );
		if( bRet == FALSE )
		{
			OutputTimeToLog();
			OutputDebugLog1( "WriteFile failed, error code:0x%08x\n", GetLastError() );
		}

		*pLength = (U32)dwNumberOfWrite;
	}

	return bRet;
}

BOOL CSerialObj::ClosePort()
{
	BOOL bRet = TRUE;

	if( m_hSerialCom )
	{
		bRet = CloseHandle( m_hSerialCom );
		if( bRet == FALSE )
		{
			OutputTimeToLog();
			OutputDebugLog1( "Close failed, error code:0x%08x\n", GetLastError() );
		}
		else
		{
			m_hSerialCom = NULL;
		}
	}

	return bRet;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -