|
@@ -1,6 +1,6 @@
|
|
|
/************************************************************************/
|
|
|
/* Copyright (C), 2016-2020, [Home], 保留所有权利;
|
|
|
-/* 模 块 名:异步串口模块;
|
|
|
+/* 模 块 名:同步串口模块;
|
|
|
/* 描 述:;
|
|
|
/*
|
|
|
/* 版 本:[V];
|
|
@@ -16,460 +16,68 @@
|
|
|
/* 修改内容:;
|
|
|
/************************************************************************/
|
|
|
|
|
|
-#ifndef __BASE_SERIAL__
|
|
|
-#define __BASE_SERIAL__
|
|
|
+#ifndef __SYN_SERIAL__
|
|
|
+#define __SYN_SERIAL__
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
-class CBaseSerial
|
|
|
-{
|
|
|
-public:
|
|
|
- //Enums
|
|
|
- enum FlowControl
|
|
|
- {
|
|
|
- NoFlowControl,
|
|
|
- CtsRtsFlowControl,
|
|
|
- CtsDtrFlowControl,
|
|
|
- DsrRtsFlowControl,
|
|
|
- DsrDtrFlowControl,
|
|
|
- XonXoffFlowControl
|
|
|
- };
|
|
|
+#define MAX_PORT_LEN 10
|
|
|
|
|
|
- enum Parity
|
|
|
- {
|
|
|
- NoParity = 0,
|
|
|
- OddParity = 1,
|
|
|
- EvenParity = 2,
|
|
|
- MarkParity = 3,
|
|
|
- SpaceParity = 4
|
|
|
- };
|
|
|
-
|
|
|
- enum StopBits
|
|
|
- {
|
|
|
- OneStopBit,
|
|
|
- OnePointFiveStopBits,
|
|
|
- TwoStopBits
|
|
|
- };
|
|
|
-protected:
|
|
|
- HANDLE m_hComm;
|
|
|
- OVERLAPPED m_ovWait;
|
|
|
- OVERLAPPED m_ovRead;
|
|
|
- OVERLAPPED m_ovWrite;
|
|
|
+class CSynSerial
|
|
|
+{
|
|
|
public:
|
|
|
- CBaseSerial(void);
|
|
|
- virtual ~CBaseSerial(void);
|
|
|
+ CSynSerial(void);
|
|
|
+ virtual ~CSynSerial(void);
|
|
|
|
|
|
- BOOL IsOpen() const throw() // noexcept
|
|
|
- {
|
|
|
- return m_hComm != INVALID_HANDLE_VALUE;
|
|
|
- }
|
|
|
+private:
|
|
|
+ DCB m_dcb;
|
|
|
+ HANDLE m_hSerialPort;
|
|
|
+ COMMTIMEOUTS m_cts;
|
|
|
|
|
|
- void Close() throw() // noexcept
|
|
|
- {
|
|
|
- if (IsOpen())
|
|
|
- {
|
|
|
- CloseHandle(m_hComm);
|
|
|
- m_hComm = INVALID_HANDLE_VALUE;
|
|
|
- }
|
|
|
- }
|
|
|
+ // 串口号(1~255);
|
|
|
+ TCHAR m_szSerialPort[MAX_PORT_LEN];
|
|
|
+ // 输入缓存大小(byte);
|
|
|
+ DWORD m_dwInQueue;
|
|
|
+ // 输出缓存大小(byte);
|
|
|
+ DWORD m_dwOutQueue;
|
|
|
|
|
|
- BOOL Open(LPCTSTR pszPort, BOOL bOverlapped = FALSE) throw(); // noexcept
|
|
|
- BOOL Open(
|
|
|
- int nPort,
|
|
|
- DWORD dwBaud = 9600,
|
|
|
- BYTE DataBits = 8,
|
|
|
- int parity = NoParity,
|
|
|
- int stopBits = OneStopBit,
|
|
|
- int fc = NoFlowControl,
|
|
|
- BOOL bOverlapped = FALSE
|
|
|
+public:
|
|
|
+ inline BOOL IsOpen() const {
|
|
|
+ return (m_hSerialPort == NULL || m_hSerialPort == INVALID_HANDLE_VALUE) ? FALSE : TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 打开串口;
|
|
|
+ BOOL OpenSerialPort(
|
|
|
+ IN CONST BYTE& byCommPort, // 串口号;
|
|
|
+ IN CONST DWORD& dwBaudRate, // 波特率;
|
|
|
+ IN CONST BYTE& bySize, // 数据位;
|
|
|
+ IN CONST BYTE& byParity, // 校验位;
|
|
|
+ IN CONST BYTE& byStopBits, // 停止位;
|
|
|
+ IN CONST BYTE& byStartAddr, // 起始地址;
|
|
|
+ IN CONST INT& nInterval // 间隔时间;
|
|
|
);
|
|
|
- BOOL Open(
|
|
|
- LPCTSTR pszPort,
|
|
|
- DWORD dwBaud = 9600,
|
|
|
- BYTE DataBits = 8,
|
|
|
- int parity = NoParity,
|
|
|
- int stopBits = OneStopBit,
|
|
|
- int fc = NoFlowControl,
|
|
|
- BOOL bOverlapped = FALSE
|
|
|
- ) throw(); // noexcept
|
|
|
-
|
|
|
- //////////////////////////////////////////////////////////////////////////
|
|
|
- //Reading / Writing Methods
|
|
|
- BOOL Read(void* lpBuffer, DWORD dwNumberOfBytesToRead, DWORD& dwBytesRead) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return ReadFile(m_hComm, lpBuffer, dwNumberOfBytesToRead, &dwBytesRead, NULL);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Read(void* lpBuffer, DWORD dwNumberOfBytesToRead, OVERLAPPED& overlapped, DWORD* lpNumberOfBytesRead = NULL) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return ReadFile(m_hComm, lpBuffer, dwNumberOfBytesToRead, lpNumberOfBytesRead, &overlapped);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL ReadEx(LPVOID lpBuffer, DWORD dwNumberOfBytesToRead, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return ReadFileEx(m_hComm, lpBuffer, dwNumberOfBytesToRead, lpOverlapped, lpCompletionRoutine);
|
|
|
- }
|
|
|
-
|
|
|
- // 必须先启用:SetMask(EV_ERR | EV_RXCHAR),才能使用WaitCommEvent;
|
|
|
- BOOL ReadAsyn(void* lpBuffer, DWORD dwNumberOfBytesToRead, DWORD& dwNumberOfBytesRead) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- COMSTAT cs = { 0 };
|
|
|
- DWORD dwErrors = 0;
|
|
|
- DWORD dwEvtMask = 0;
|
|
|
- DWORD dwNumberOfBytesTransferred;
|
|
|
-
|
|
|
- m_ovWait.Offset = 0;
|
|
|
- m_ovRead.Offset = 0;
|
|
|
- BOOL Status = WaitCommEvent(m_hComm, &dwEvtMask, &m_ovWait);
|
|
|
- // WaitCommEvent也是一个异步命令,所以需要等待
|
|
|
- if (!Status && GetLastError() == ERROR_IO_PENDING)
|
|
|
- {
|
|
|
- // 如果缓存中无数据线程会停在此,如果hCom关闭会立即返回False
|
|
|
- Status = ::GetOverlappedResult(m_hComm, &m_ovWait, &dwNumberOfBytesTransferred, TRUE);
|
|
|
- }
|
|
|
-
|
|
|
- ClearCommError(m_hComm, &dwErrors, &cs);
|
|
|
- if (Status && dwEvtMask & EV_RXCHAR && cs.cbInQue > 0) //有数据
|
|
|
- {
|
|
|
- dwNumberOfBytesTransferred = 0;
|
|
|
- memset(lpBuffer, 0, dwNumberOfBytesToRead);
|
|
|
- // 数据已经到达缓存区,ReadFile不会当成异步命令,而是立即读取并返回True
|
|
|
- Status = ReadFile(m_hComm, lpBuffer, dwNumberOfBytesToRead, &dwNumberOfBytesRead, &m_ovRead);
|
|
|
- PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_RXABORT);
|
|
|
- }
|
|
|
-
|
|
|
- return Status;
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Write(const void* lpBuffer, DWORD dwNumberOfBytesToWrite, DWORD& dwBytesWritten) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- dwBytesWritten = 0;
|
|
|
- return WriteFile(m_hComm, lpBuffer, dwNumberOfBytesToWrite, &dwBytesWritten, NULL);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Write(const void* lpBuffer, DWORD dwNumberOfBytesToWrite, OVERLAPPED& overlapped, DWORD* lpNumberOfBytesWritten = NULL) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return WriteFile(m_hComm, lpBuffer, dwNumberOfBytesToWrite, lpNumberOfBytesWritten, &overlapped);
|
|
|
- }
|
|
|
-
|
|
|
- // SetMask(EV_ERR | EV_RXCHAR);
|
|
|
- BOOL WriteAsyn(const void* lpBuffer, DWORD dwNumberOfBytesToWrite, DWORD& dwNumberOfBytesWritten) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- PurgeComm(m_hComm, PURGE_TXCLEAR | PURGE_TXABORT);
|
|
|
-
|
|
|
- m_ovWait.Offset = 0;
|
|
|
- BOOL bRet = WriteFile(m_hComm, lpBuffer, dwNumberOfBytesToWrite, &dwNumberOfBytesWritten, &m_ovWrite);
|
|
|
-
|
|
|
- if (!bRet && GetLastError() == ERROR_IO_PENDING)//后台读取
|
|
|
- {
|
|
|
- //等待数据写入完成
|
|
|
- if (FALSE == ::GetOverlappedResult(m_hComm, &m_ovWrite, &dwNumberOfBytesWritten, TRUE))
|
|
|
- {
|
|
|
- return FALSE;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return bRet;
|
|
|
- }
|
|
|
-
|
|
|
- BOOL WriteEx(LPCVOID lpBuffer, DWORD dwNumberOfBytesToWrite, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return WriteFileEx(m_hComm, lpBuffer, dwNumberOfBytesToWrite, lpOverlapped, lpCompletionRoutine);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL TransmitChar(char cChar) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return TransmitCommChar(m_hComm, cChar);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred, BOOL bWait) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return ::GetOverlappedResult(m_hComm, &overlapped, &dwBytesTransferred, bWait);
|
|
|
- }
|
|
|
-
|
|
|
- __if_exists(::GetOverlappedResultEx)
|
|
|
- {
|
|
|
- BOOL GetOverlappedResultEx(OVERLAPPED & overlapped, DWORD & dwBytesTransferred, DWORD dwMilliseconds, _In_ BOOL bAlertable) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return ::GetOverlappedResultEx(m_hComm, &overlapped, &dwBytesTransferred, dwMilliseconds, bAlertable);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- BOOL CancelIo() throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return ::CancelIo(m_hComm);
|
|
|
- }
|
|
|
-
|
|
|
- __if_exists(::CancelIoEx)
|
|
|
- {
|
|
|
- BOOL CancelIoEx(LPOVERLAPPED lpOverlapped = NULL) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
-
|
|
|
- return ::CancelIoEx(m_hComm, lpOverlapped);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- BOOL BytesWaiting(DWORD& dwBytesWaiting) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- //Check to see how many characters are unread
|
|
|
- dwBytesWaiting = 0;
|
|
|
- COMSTAT stat;
|
|
|
- if (!GetStatus(stat))
|
|
|
- return FALSE;
|
|
|
- dwBytesWaiting = stat.cbInQue;
|
|
|
- return TRUE;
|
|
|
- }
|
|
|
-
|
|
|
- //Configuration Methods
|
|
|
- BOOL GetConfig(COMMCONFIG& config) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
-
|
|
|
- DWORD dwSize = sizeof(COMMCONFIG);
|
|
|
- return GetCommConfig(m_hComm, &config, &dwSize);
|
|
|
- }
|
|
|
-
|
|
|
- static BOOL GetDefaultConfig(int nPort, COMMCONFIG& config)
|
|
|
- {
|
|
|
- CString sPort;
|
|
|
- sPort.Format(_T("COM%d"), nPort);
|
|
|
- //Delegate to the other version of the method
|
|
|
- return GetDefaultConfig(sPort, config);
|
|
|
- }
|
|
|
-
|
|
|
- static BOOL GetDefaultConfig(LPCTSTR pszPort, COMMCONFIG& config) throw()
|
|
|
- {
|
|
|
- DWORD dwSize = sizeof(COMMCONFIG);
|
|
|
- return GetDefaultCommConfig(pszPort, &config, &dwSize);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL SetConfig(COMMCONFIG& config) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- const DWORD dwSize = sizeof(COMMCONFIG);
|
|
|
- return SetCommConfig(m_hComm, &config, dwSize);
|
|
|
- }
|
|
|
-
|
|
|
- static BOOL SetDefaultConfig(int nPort, COMMCONFIG& config)
|
|
|
- {
|
|
|
- CString sPort;
|
|
|
- sPort.Format(_T("COM%d"), nPort);
|
|
|
- //Delegate to the other version of the method
|
|
|
- return SetDefaultConfig(sPort, config);
|
|
|
- }
|
|
|
-
|
|
|
- static BOOL SetDefaultConfig(LPCTSTR pszPort, COMMCONFIG& config) throw()
|
|
|
- {
|
|
|
- const DWORD dwSize = sizeof(COMMCONFIG);
|
|
|
- return SetDefaultCommConfig(pszPort, &config, dwSize);
|
|
|
- }
|
|
|
-
|
|
|
- //Misc RS232 Methods
|
|
|
- BOOL ClearBreak() throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return ClearCommBreak(m_hComm);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL SetBreak() throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return SetCommBreak(m_hComm);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL ClearError(DWORD& dwErrors) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return ClearCommError(m_hComm, &dwErrors, NULL);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL GetStatus(COMSTAT& stat) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- DWORD dwErrors = 0;
|
|
|
- return ClearCommError(m_hComm, &dwErrors, &stat);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL GetState(DCB& dcb) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return GetCommState(m_hComm, &dcb);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL SetState(DCB& dcb) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return SetCommState(m_hComm, &dcb);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Escape(DWORD dwFunc) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return EscapeCommFunction(m_hComm, dwFunc);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL ClearDTR() throw()
|
|
|
- {
|
|
|
- return Escape(CLRDTR);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL ClearRTS() throw()
|
|
|
- {
|
|
|
- return Escape(CLRRTS);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL SetDTR() throw()
|
|
|
- {
|
|
|
- return Escape(SETDTR);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL SetRTS() throw()
|
|
|
- {
|
|
|
- return Escape(SETRTS);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL SetXOFF() throw()
|
|
|
- {
|
|
|
- return Escape(SETXOFF);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL SetXON() throw()
|
|
|
- {
|
|
|
- return Escape(SETXON);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL GetProperties(COMMPROP& properties) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return GetCommProperties(m_hComm, &properties);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL GetModemStatus(DWORD& dwModemStatus) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return GetCommModemStatus(m_hComm, &dwModemStatus);
|
|
|
- }
|
|
|
-
|
|
|
- //Timeouts
|
|
|
- BOOL SetTimeouts(COMMTIMEOUTS& timeouts) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return SetCommTimeouts(m_hComm, &timeouts);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL GetTimeouts(COMMTIMEOUTS& timeouts) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return GetCommTimeouts(m_hComm, &timeouts);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Set0Timeout() throw()
|
|
|
- {
|
|
|
- COMMTIMEOUTS Timeouts;
|
|
|
- memset(&Timeouts, 0, sizeof(Timeouts));
|
|
|
- Timeouts.ReadIntervalTimeout = MAXDWORD;
|
|
|
- return SetTimeouts(Timeouts);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Set0WriteTimeout() throw()
|
|
|
- {
|
|
|
- COMMTIMEOUTS Timeouts;
|
|
|
- GetTimeouts(Timeouts);
|
|
|
- Timeouts.WriteTotalTimeoutMultiplier = 0;
|
|
|
- Timeouts.WriteTotalTimeoutConstant = 0;
|
|
|
- return SetTimeouts(Timeouts);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Set0ReadTimeout() throw()
|
|
|
- {
|
|
|
- COMMTIMEOUTS Timeouts;
|
|
|
- GetTimeouts(Timeouts);
|
|
|
- Timeouts.ReadIntervalTimeout = MAXDWORD;
|
|
|
- Timeouts.ReadTotalTimeoutMultiplier = 0;
|
|
|
- Timeouts.ReadTotalTimeoutConstant = 0;
|
|
|
- return SetTimeouts(Timeouts);
|
|
|
- }
|
|
|
-
|
|
|
- //Event Methods
|
|
|
- BOOL SetMask(DWORD dwMask) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return SetCommMask(m_hComm, dwMask);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL GetMask(DWORD& dwMask) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return GetCommMask(m_hComm, &dwMask);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL WaitEvent(DWORD& dwMask) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return WaitCommEvent(m_hComm, &dwMask, NULL);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL WaitEvent(DWORD& dwMask, OVERLAPPED& overlapped) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- ATLASSERT(overlapped.hEvent != NULL);
|
|
|
-
|
|
|
- return WaitCommEvent(m_hComm, &dwMask, &overlapped);
|
|
|
- }
|
|
|
-
|
|
|
- //Queue Methods
|
|
|
- BOOL Flush() throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return FlushFileBuffers(m_hComm);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Purge(DWORD dwFlags) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return PurgeComm(m_hComm, dwFlags);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL TerminateOutstandingWrites() throw()
|
|
|
- {
|
|
|
- return Purge(PURGE_TXABORT);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL TerminateOutstandingReads() throw()
|
|
|
- {
|
|
|
- return Purge(PURGE_RXABORT);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL ClearWriteBuffer() throw()
|
|
|
- {
|
|
|
- return Purge(PURGE_TXCLEAR);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL ClearReadBuffer() throw()
|
|
|
- {
|
|
|
- return Purge(PURGE_RXCLEAR);
|
|
|
- }
|
|
|
-
|
|
|
- BOOL Setup(DWORD dwInQueue, DWORD dwOutQueue) throw()
|
|
|
- {
|
|
|
- ATLASSERT(IsOpen());
|
|
|
- return SetupComm(m_hComm, dwInQueue, dwOutQueue);
|
|
|
- }
|
|
|
-
|
|
|
+ // 重装打开串口;
|
|
|
+ BOOL ReOpenSerialPort();
|
|
|
+ // 关闭串口;
|
|
|
+ void CloseSerialPort();
|
|
|
+ // 设置串口参数;
|
|
|
+ BOOL SetSerialPort(
|
|
|
+ IN CONST DWORD& dwBaudRate, // 波特率;
|
|
|
+ IN CONST BYTE& byByteSize, // 数据位;
|
|
|
+ IN CONST BYTE& byParity, // 校验位;
|
|
|
+ IN CONST BYTE& byStopBits, // 停止位;
|
|
|
+ IN CONST BYTE& byStartAddr, // 起始地址;
|
|
|
+ IN CONST DWORD& dwInQueue, // 输入缓存;
|
|
|
+ IN CONST DWORD& dwOutQueue // 输出缓存;
|
|
|
+ );
|
|
|
+
|
|
|
+ // 设置dcb参数;
|
|
|
+ void SetSerialDCB(IN CONST DCB &dcb);
|
|
|
+ // 设置commtimeouts参数;
|
|
|
+ void SetSerialCommTimeouts(IN CONST COMMTIMEOUTS &commTimeouts);
|
|
|
+
|
|
|
+ virtual DWORD WriteComm(IN BYTE *pWirteBuf, IN CONST INT32 nWriteSize);
|
|
|
+ virtual DWORD ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& dwReadSize, WORD timeout = 300);
|
|
|
};
|
|
|
|
|
|
-#endif // __ASYN_SERIAL__
|
|
|
+#endif // __SYN_SERIAL__
|