📄 commport.h
字号:
// This class is exported from the CommPort.dll
class CCommPort {
public:
CCommPort();
~CCommPort();
public:
//事件设置
typedef enum
{
EEventNone = -1, // 未触发事件
EEventBreak = EV_BREAK, // 检测到输入中止
EEventCTS = EV_CTS, // CTS变
EEventDSR = EV_DSR, // DSR变
EEventError = EV_ERR, // 发生了线路状态错误
EEventRing = EV_RING, // 检测到振铃
EEventRLSD = EV_RLSD, // RLSD信号改变状态
EEventRecv = EV_RXCHAR, // 接收到一个字符,并放入输入缓冲区
EEventRcvEv = EV_RXFLAG, // 接收到事件字符
EEventSend = EV_TXEMPTY, // 输出缓冲区最后一个字符发送出去
}
EEvent;
// 波特率设置
typedef enum
{
EBaudUnknown = -1, //未知
EBaud110 = CBR_110, // 110 bits/s
EBaud300 = CBR_300, // 300 bits/s
EBaud600 = CBR_600, // 600 bits/s
EBaud1200 = CBR_1200, // 1200 bits/
EBaud2400 = CBR_2400, // 2400 bits/s
EBaud4800 = CBR_4800, // 4800 bits/s
EBaud9600 = CBR_9600, // 9600 bits/s
EBaud14400 = CBR_14400, // 14400 bits/s
EBaud19200 = CBR_19200, // 19200 bits/sec
EBaud38400 = CBR_38400, // 38400 bits/sec
EBaud56000 = CBR_56000, // 56000 bits/sec
EBaud57600 = CBR_57600, // 57600 bits/sec
EBaud115200 = CBR_115200, // 115200 bits/sec
EBaud128000 = CBR_128000, // 128000 bits/sec
EBaud256000 = CBR_256000, // 256000 bits/sec
}
EBaudrate;
// 数据位(5-8)
typedef enum
{
EDataUnknown = -1, // Unknown
EData5 = 5, // 5 bits per byte
EData6 = 6, // 6 bits per byte
EData7 = 7, // 7 bits per byte
EData8 = 8 // 8 bits per byte (default)
}
EDataBits;
// 奇偶较验
typedef enum
{
EParUnknown = -1, // 未知
EParNone = NOPARITY, // 无校验
EParOdd = ODDPARITY, // 奇校验
EParEven = EVENPARITY, // 偶校验
EParMark = MARKPARITY, // 标号校验
EParSpace = SPACEPARITY // 空格校验
}
EParity;
// 停止位
typedef enum
{
EStopUnknown = -1, // 未知
EStop1 = ONESTOPBIT, // 1 stopbit (default)
EStop1_5 = ONE5STOPBITS, // 1.5 stopbit
EStop2 = TWOSTOPBITS // 2 stopbits
}
EStopBits;
// 握手信号
typedef enum
{
EHandshakeUnknown = -1, // 未知
EHandshakeOff = 0, // 无
EHandshakeHardware = 1, // 硬件握手
EHandshakeSoftware = 2 // 软件握手
}
EHandshake;
// 超时设置
typedef enum
{
EReadTimeoutUnknown = -1, // 未知
EReadTimeoutNonblocking = 0, // 总是立即返回
EReadTimeoutBlocking = 1 //
}
EReadTimeout;
// 串口状态
typedef enum
{
EPortUnknownError = -1, // Unknown error occurred
EPortAvailable = 0, // Port is available
EPortNotAvailable = 1, // Port is not present
EPortInUse = 2 // Port is in use
}
EPort;
//----------------------------------------------------------------------------
public:
//----------------------------------------------------------------------------
int OpenPort (int nDataBit=EData8,int nStopBit=EStop1,int nParity=EParNone);
//----------------------------------------------------------------------------
void ClosePort (BOOL bR = TRUE);
//----------------------------------------------------------------------------
BOOL SetCommBaud(int baud);
//-----------------------------------------------------------------------------
BOOL SetCommPort(int port);
//-----------------------------------------------------------------------------
BOOL SetFrameHead(int nHead);
//-----------------------------------------------------------------------------
int SendOrder(BYTE* pOrderBuff,BYTE* pAckBuff,int nTimeOuts);
//-----------------------------------------------------------------------------
int SendData(BYTE* pOrderBuff,BYTE* pAckBuff,int nSendLen,int nTimeOuts,
int nRcv,BYTE cEnd, BOOL bIfRcv);
//-----------------------------------------------------------------------------
int ReadBlock(BYTE* pAckBuff,int nLen,int nTimeOuts);
//-----------------------------------------------------------------------------
HANDLE GetCommHandle(void);
//----------------------------------------------------------------------------
BOOL SetDTR();
//----------------------------------------------------------------------------
BOOL ClrDTR();
//----------------------------------------------------------------------------
BOOL SetRTS();
//----------------------------------------------------------------------------
BOOL ClrRTS();
//----------------------------------------------------------------------------
int CommWatch(int &nLen,BYTE* pBuff);
private:
int Setup (EBaudrate eBaudrate = EBaud9600,
EDataBits eDataBits = EData8,
EParity eParity= EParNone,
EStopBits eStopBits =EStop1 );
//----------------------------------------------------------------------------
int SetupReadTimeouts (int nBlockRead);
//---------------------------------------------------------------------------
int SetMask (DWORD dwMask = EV_RXCHAR);
//----------------------------------------------------------------------------
int Flush (void);
//---------------------------------------------------------------------------
int Write (BYTE* pData, size_t iLen, DWORD* pdwWritten = 0, LPOVERLAPPED lpOverlapped = 0, DWORD dwTimeout = INFINITE);
//----------------------------------------------------------------------------
int Read (BYTE* pData, size_t iLen, DWORD* pdwRead = 0, LPOVERLAPPED lpOverlapped = 0, DWORD dwTimeout = INFINITE);
//-----------------------------------------------------------------------------
int WaitEvent (BYTE* Buff,int nTimeOuts);
//----------------------------------------------------------------------------
int Wait_Cnt(BYTE* Buff,int nTimeOuts,int nRcvCnt);
//----------------------------------------------------------------------------
int Wait_Byte(BYTE* Buff,int nTimeOuts,BYTE cEndByte);
private:
HANDLE hComm;
EEvent m_eEvent;
HANDLE m_hevtOverlapped;
int nFrameHead;
DCB m_dcb;
LPCTSTR lpszPort; //端口
EBaudrate eBaudrates; //波特率
int ErrorTimes; //Error Thresholds
int nFrameNum; //每帧所传字节个数
int nTimePerByte;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -