📄 serialobj.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 + -