//==============================================================================
//com class
//Edited by yangyong, 2011/08/31
//Header: com.h
//==============================================================================
#include "com.h"
//==============================================================================
Com::Com():
itsPortHandle(INVALID_HANDLE_VALUE),
itsCharsAvailable(0),
itsPortNumber(cpCOM_1),
itsBaudRate(brB_9600),
itsByteSize(8),
itsParity(ptNoParity),
itsStopBits(sbOne)
{
}
//==============================================================================
Com::Com(ComPort portNumber):
itsPortHandle(INVALID_HANDLE_VALUE),
itsCharsAvailable(0),
itsPortNumber(portNumber),
itsBaudRate(brB_9600),
itsByteSize(8),
itsParity(ptNoParity),
itsStopBits(sbOne)
{
}
//==============================================================================
Com::Com(ComPort portNumber, BaudRate buadRate):
itsPortHandle(INVALID_HANDLE_VALUE),
itsCharsAvailable(0),
itsPortNumber(portNumber),
itsBaudRate(buadRate),
itsByteSize(8),
itsParity(ptNoParity),
itsStopBits(sbOne)
{
}
//==============================================================================
Com::Com(ComPort portNumber, BaudRate buadRate, char byteSize):
itsPortHandle(INVALID_HANDLE_VALUE),
itsCharsAvailable(0),
itsPortNumber(portNumber),
itsBaudRate(buadRate),
itsByteSize(byteSize),
itsParity(ptNoParity),
itsStopBits(sbOne)
{
}
//==============================================================================
Com::Com(ComPort portNumber, BaudRate buadRate, char byteSize, ParityType parity):
itsPortHandle(INVALID_HANDLE_VALUE),
itsCharsAvailable(0),
itsPortNumber(portNumber),
itsBaudRate(buadRate),
itsByteSize(byteSize),
itsParity(parity),
itsStopBits(sbOne)
{
}
//==============================================================================
Com::Com(ComPort portNumber, BaudRate buadRate,
char byteSize, ParityType parity, StopBits stopBits):
itsPortHandle(INVALID_HANDLE_VALUE),
itsCharsAvailable(0),
itsPortNumber(portNumber),
itsBaudRate(buadRate),
itsByteSize(byteSize),
itsParity(parity),
itsStopBits(stopBits)
{
}
//==============================================================================
Com::~Com()
{
this->Close();
}
//==============================================================================
bool Com::IsOpen()
{
return (itsPortHandle != INVALID_HANDLE_VALUE);
}
//==============================================================================
bool Com::Open()
{
std::string StrCom = "COM";
DCB dcbPort;
if(IsOpen())
{
Close();
}
//将数字转变成字符,并通过append函数添加在字符串StrCom结尾
//组合成串口号
if((itsPortNumber >= 0) && (itsPortNumber <= 9))
{
StrCom.append(1,(char)(itsPortNumber + '0'));
itsPortHandle = CreateFile(StrCom.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
long (0));
}
if(IsOpen())
{
if(GetCommState(itsPortHandle,&dcbPort))
{
dcbPort.BaudRate = itsBaudRate;
dcbPort.ByteSize = itsByteSize;
dcbPort.Parity = itsParity;
dcbPort.StopBits = itsStopBits;
SetCommState(itsPortHandle,&dcbPort);
}
}
return (IsOpen());
}
//==============================================================================
bool Com::Write(const char* WriteDataPtr,const char WriteLen)
{
unsigned long dwCharsWritten;
bool Result;
Result = false;
if(IsOpen())
{
dwCharsWritten = 0;
WriteFile(itsPortHandle,WriteDataPtr,WriteLen,&dwCharsWritten,NULL);
if(dwCharsWritten == (unsigned long)WriteLen)
{
Result = true;
}
}
return Result;
}
//==============================================================================
unsigned long Com::Read(char *ReadDataPtr)
{
unsigned long ReadLen;
if(IsOpen())
{
if(itsCharsAvailable > 0)
{
ReadFile(itsPortHandle,ReadDataPtr,itsCharsAvailable,&ReadLen,NULL);
}
}
return ReadLen;
}
//==============================================================================
void Com::Flush()
{
if(IsOpen())
PurgeComm(itsPortHandle,PURGE_TXABORT|PURGE_RXABORT|
PURGE_TXCLEAR|PURGE_RXCLEAR);
}
//==============================================================================
void Com::Close()
{
if(IsOpen())
{
CloseHandle(itsPortHandle);
itsPortHandle = INVALID_HANDLE_VALUE;
}
}
//==============================================================================
void Com::SetPortNumber(const ComPort PortNumberToSet)
{
if(itsPortNumber != PortNumberToSet)
{
itsPortNumber = PortNumberToSet;
if(IsOpen())
{
Close();
Open();
}
}
}
//==============================================================================
void Com::SetBaudRate(const BaudRate BaudRateToSet)
{
if(itsBaudRate != BaudRateToSet)
{
itsBaudRate = BaudRateToSet;
if(IsOpen())
{
Close();
Open();
}
}
}
//==============================================================================
void Com::SetStopBits(const StopBits StopBitsToSet)
{
if(itsStopBits != StopBitsToSet)
{
itsStopBits = StopBitsToSet;
if(IsOpen())
{
Close();
Open();
}
}
}
//==============================================================================
void Com::SetParity(const ParityType ParityToSet)
{
if(itsParity != ParityToSet)
{
itsParity = ParityToSet;
if(IsOpen())
{
Close();
Open();
}
}
}
//==============================================================================
ComPort Com::GetPortNumber()
{
return itsPortNumber;
}
//==============================================================================
BaudRate Com::GetBaudRate()
{
return itsBaudRate;
}
//==============================================================================
StopBits Com::GetStopBits()
{
return itsStopBits;
}
//==============================================================================
ParityType Com::GetParity()
{
return itsParity;
}
//==============================================================================
long Com::IsRxData()
{
COMSTAT statPort;
unsigned long dwErrorCode;
itsCharsAvailable = 0;
if(IsOpen())
{
ClearCommError(itsPortHandle,&dwErrorCode,&statPort);
itsCharsAvailable = statPort.cbInQue;
}
return itsCharsAvailable;
}
//==============================================================================
没有合适的资源?快使用搜索试试~ 我知道了~
ComClass(串口类winAPI)
共3个文件
cpp:2个
h:1个
需积分: 10 10 下载量 107 浏览量
2018-08-30
20:22:35
上传
评论
收藏 5KB ZIP 举报
温馨提示
PC程序跟RS232串口进行通信算是比较老的题目了,不过老归老,只要用这个接口的硬件还在,就难免要去折腾它。而这个时候就会发现老的坏处在于资料都是半截入土,拍一拍烟尘四起,抖一抖蛛丝乱飞的玩意。 现在做这个的基本都是用的SerialPort这个类,而这个类的最新更新已经有一段岁月,所以本人在下载了这个东西之后,费了些功夫才将其修改到能运行在VS2015版本的PC程序上,在此把修改完的版本贴出来做下记录。并将一般调试串口程序都会用到的两个软件拿出来和大家分享。
资源推荐
资源详情
资源评论
收起资源包目录
ComClass(串口类winAPI).zip (3个子文件)
ComClass(串口类winAPI)
Com.cpp 7KB
Com.h 4KB
main.cpp 444B
共 3 条
- 1
资源评论
菜头叔
- 粉丝: 3
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功