📄 serialport.cpp
字号:
// SerialPort.cpp: implementation of the CSerialPort class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SerialPort.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSerialPort::CSerialPort()
{
m_hComm = INVALID_HANDLE_VALUE;
}
CSerialPort::~CSerialPort()
{
CloseHandle(m_hComm);
}
int CSerialPort::ListComm(char* pPortGroup)
{
int pos = 0;
HANDLE hCom;
char pPort[5]="COM0";
pPort[4]='\0';
for(int i=1;i<10;i++)
{
pPort[3]='0'+i;
hCom = CreateFile(pPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (hCom != INVALID_HANDLE_VALUE)
{
strcpy(pPortGroup+pos,pPort);
pos+=5;
}
CloseHandle(hCom);
}
return pos/5;
}
int CSerialPort::ReadComm(void *pData, int nLength)
{
DWORD dwNumRead; // 串口收到的数据长度
ReadFile(m_hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
return (int)dwNumRead;
}
void CSerialPort::WriteComm(void *pData, int nLength)
{
DWORD dwNumWrite; // 串口发出的数据长度
WriteFile(m_hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}
bool CSerialPort::OpenComm(const char *pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
DCB dcb; // 串口控制块
COMMTIMEOUTS timeouts ={3000,1,500,1,10};
m_hComm = CreateFile(pPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (m_hComm == INVALID_HANDLE_VALUE)
return FALSE;
// 打开串口失败
GetCommState(m_hComm, &dcb); // 取DCB
dcb.BaudRate = nBaudRate;
dcb.ByteSize = nByteSize;
dcb.Parity = nParity;
dcb.StopBits = nStopBits;
SetCommState(m_hComm, &dcb); // 设置DCB
SetupComm(m_hComm, 1024, 1024); // 设置输入输出缓冲区大小
SetCommTimeouts(m_hComm, &timeouts); // 设置超时
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -