Класс CSerialPort v1.03 - интерфейс обмена данными с
последовательным портом.
Автор: PJ Naughter
Скачать исходник - 18 Kb
Добро пожаловать в MFC класс CSerialPort, который
позволяет осуществлять любые операции с
последовательным портом. В Классе имеется
довольно большой набор функций.
Расширенные возможности
- Поддерживается система исключений C++.
- Поддержка Unicode.
- Поддержка overlapped, blocking и callback моделей
последовательных портов. (Callback поддерживается
только в NT).
Использование
- Чтобы использовать класс в своём коде, включите
файл serialport.cpp в Ваш проект, и соответственно
добавьте строчку #include serialport.h в соответствующих
модулях, в которых требуется вызовы данного
класса.
- Пример использования класса содержится в файле
"app.cpp".
Краткий пример использования класса:
try {
CSerialPort port;
port.Open(1, 1200, CSerialPort::NoParity, 8, CSerialPort::OneStopBit, CSerialPort::XonXoffFlowControl);
char sBuf[] = "This should appear on the serial port";
port.Write(sBuf, strlen(sBuf));
port.Flush();
port.Close();
}
catch (CSerialException* pEx)
{
TRACE(_T("Handle Exception, Message:%s\n"), pEx->GetErrorMessage());
pEx->Delete();
}
Функции, содержащиеся в классе
CSerialException::CSerialException
CSerialException::GetErrorMessage
CSerialException::m_dwError
CSerialPort::CSerialPort
CSerialPort::~CSerialPort
CSerialPort::Open
CSerialPort::Close
CSerialPort::Attach
CSerialPort::Detach
CSerialPort::operator HANDLE()
CSerialPort::IsOpen
CSerialPort::Dump
CSerialPort::Read
CSerialPort::ReadEx
CSerialPort::Write
CSerialPort::WriteEx
CSerialPort::TransmitChar
CSerialPort::GetOverlappedResult
CSerialPort::CancelIo
CSerialPort::GetConfig
CSerialPort::GetDefaultConfig
CSerialPort::SetConfig
CSerialPort::SetDefaultConfig
CSerialPort::ClearBreak
CSerialPort::SetBreak
CSerialPort::ClearError
CSerialPort::GetStatus
CSerialPort::GetState
CSerialPort::SetState
CSerialPort::Escape
CSerialPort::ClearDTR
CSerialPort::ClearRTS
CSerialPort::SetDTR
CSerialPort::SetRTS
CSerialPort::SetXOFF
CSerialPort::SetXON
CSerialPort::GetProperties
CSerialPort::GetModemStatus
CSerialPort::SetTimeouts
CSerialPort::GetTimeouts
CSerialPort::Set0Timeout
CSerialPort::Set0WriteTimeout
CSerialPort::Set0ReadTimeout
CSerialPort::SetMask
CSerialPort::GetMask
CSerialPort::WaitEvent
CSerialPort::Flush
CSerialPort::Purge
CSerialPort::TerminateOutstandingWrites
CSerialPort::TerminateOutstandingReads
CSerialPort::ClearWriteBuffer
CSerialPort::ClearReadBuffer
CSerialPort::Setup
CSerialPort::OnCompletion
CSerialException::CSerialException
CSerialException( DWORD dwError = 0);
Parameters
dwError Ошибка, которая вызвада
исключение.
Remarks
Данная функция вызывается, если создан объект
CSerialException. To throw a CSerialException, call the global function
AfxThrowSerialException. If you call if using the default value for dwError, then
internally it will call GetLastError for you.
CSerialException::GetErrorMessage
virtual BOOL GetErrorMessage( LPTSTR lpszError, UINT nMaxError,
PUINT pnHelpContext = NULL );
CString GetErrorMessage();
Return Value
1) Ненулевое, если функция выполнилась успешно;
иначе 0, если текстовое сообщение не доступно.
2) CString представление ошибки
Parameters
lpszError указатель на буфер, который
будет содержать сообщение об ошибке.
nMaxError The maximum number of characters the buffer can hold,
including the NULL terminator.
pnHelpContext The address of a UINT that will receive the help
context ID. If NULL, no ID will be returned.
Remarks
Call this member function to provide text about an error that has occurred.
CSerialException::m_dwError
Remarks
The error that caused the exception. This error value is a system error code as found
in WINERROR.H.
For a list of Win32 error codes, see Error Codes in the Win32 SDK.
CSerialPort::CSerialPort
CSerialPort();
Remarks
Стандартный конструктор класса. Устанавливает
переменные класса в значения по умолчанию.
CSerialPort::~CSerialPort
~CSerialPort();
Remarks
Стандартный деструктор класса. Закрывает порт,
если он был открыт.
CSerialException::Open
void Open( int nPort, DWORD dwBaud = 9600, Parity parity
= NoParity, BYTE DataBits = 8, StopBits stopbits =
OneStopBit, FlowControl fc = NoFlowControl, BOOL bOverlapped =
FALSE);
throw( CSerialException );
Parameters
nPort Номер порт, который будет
открыт.
dwBaud Скорость порта в бодах
parity Контроль чётности. Может принимать
следующие значения:
enum Parity
{
EvenParity,
MarkParity,
NoParity,
OddParity,
SpaceParity
};
Databits Количество бит данных
stopbits Количество стоповых бит. Может
принимать следующие значения:
enum StopBits
{
OneStopBit,
OnePointFiveStopBits,
TwoStopBits
};
fc Метод использующийся для контроля потока
данных. Может принимать след. значения:
enum FlowControl
{
NoFlowControl,
CtsRtsFlowControl,
CtsDtrFlowControl,
DsrRtsFlowControl,
DsrDtrFlowControl,
XonXoffFlowControl
};
bOverlapped TRUE если Вы хотите открыть в режиме
overlapped, иначе FALSE для использования блокирующих
вызовов.
Remarks
Функция открывает коммуникационный порт.
Внутри класса, для открытия порта, будет
использоваться функция CreateFile , а затем SetState для
установления различных установок RS-232 . При
возникновении ошибки, сработает CSerialException
CSerialPort::Close
Close();
Remarks
Закрывает уже открытый коммуникационный порт.
CSerialPort::Attach
void Attach(HANDLE hComm);
Parameters
hComm SDK обработчик открытого порта.
Remarks
Позволяет приаттачить экземпляр CSerialPort к
существующему обработчику коммуникационного
порта. Данная функция работает подобно CWnd::Attach в
MFC.
CSerialPort::Detach
HANDLE Detach();
Return Value
HANDLE порта.
Remarks
Делает обратное действие предыдущей функции
Attach. Соответственно работает аналогично MFC
функции CWnd::Detach.
CSerialPort::operator HANDLE
operator HANDLE();
Return Value
HANDLE порта.
Remarks
Позволяет получить обработчик порта. Можно
использовать это хэндл для вызова Windows API
напрямую
CSerialPort::IsOpen
BOOL IsOpen() const
Return Value
TRUE если порт открыт, иначе FALSE
CSerialPort::Dump
void Dump(CDumpContext& dc) const
Remarks
Стандартная функция MFC для диагностики
CSerialPort::Read \ ReadEx
DWORD Read(void* lpBuf, DWORD dwCount);
BOOL Read(void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped);
void ReadEx(void* lpBuf, DWORD dwCount);
throw( CSerialException );
Return Value
1) Количество прочитанных байт.
2) TRUE если overlapped чтение завершилось синхронно,
FALSE если операция завершилась асинхронно.
Parameters
lpBuf Указатель на буфер, куда будут
считаны данные из последовательного порта
dwCount Указывает количество байт,
которые надо считать из последовательного порта.
overlapped ссылка на структуру OVERLAPPED.
Необходимо, если порт был открыт в режиме overlapped.
Remarks
Эти 3 функции являются надстройками над SDK
вызовами ReadFile и ReadFileEx. Вторая версия функции Read
для режима overlapped.
CSerialPort::Write \ WriteEx
DWORD Write(const void* lpBuf, DWORD dwCount);
BOOL Write(const void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped);
void WriteEx(const void* lpBuf, DWORD dwCount);
throw( CSerialException );
Return Value
1) Количество записанных байт.
2) TRUE если overlapped запись завершилась синхронно,
FALSE если операция завершилась асинхронно.
Parameters
lpBuf Указатель на буфер, содержащий
данные для записи в последовательный порт
dwCount Указывает количество байт,
которые надо записать в последовательный порт.
overlapped ссылка на структуру OVERLAPPED.
Необходимо, если порт был открыт в режиме overlapped.
Remarks
Эти 3 функции являются надстройками над SDK
вызовами WriteFile и WriteFileEx. Вторая версия функции Write
для режима overlapped.
CSerialPort::TransmitChar
void TransmitChar(char cChar) const
throw( CSerialException );
Remarks
Простая надстройка для SDK функции TransmitCommChar.
Смотрите Win32 SDK для подробной информации.
CSerialPort::GetOverlappedResult
void GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred,
BOOL bWait)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetOverlappedResult.
Смотрите Win32 SDK для подробной информации.
CSerialPort::CancelIo
void CancelIo()
throw( CSerialException );
Remarks
Простая надстройка для SDK функции CancelIo.
Смотрите Win32 SDK для подробной информации. Данная
функция доступна только в NT 4 или Windows 98 или выше.
CSerialPort::GetConfig
void GetConfig(COMMCONFIG& config)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetCommConfig.
Смотрите Win32 SDK для подробной информации.
CSerialPort::GetDefaultConfig
static void GetDefaultConfig(int nPort, COMMCONFIG& config)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetDefaultCommConfig.
Смотрите Win32 SDK для подробной информации.
CSerialPort::SetConfig
void SetConfig(COMMCONFIG& config)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции SetCommConfig.
Смотрите Win32 SDK для подробной информации.
CSerialPort::SetDefaultConfig
static void SetDefaultConfig(int nPort, COMMCONFIG& config)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции SetDefaultCommConfig.
Смотрите Win32 SDK для подробной информации.
CSerialPort::ClearBreak
void ClearBreak()
throw( CSerialException );
Remarks
Простая надстройка для SDK функции ClearCommBreak.
Смотрите Win32 SDK для подробной информации.
CSerialPort::SetBreak
void SetBreak()
throw( CSerialException );
Remarks
Простая надстройка для SDK функции SetCommBreak.
Смотрите Win32 SDK для подробной информации.
CSerialPort::ClearError
void ClearError(DWORD& dwErrors)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции ClearCommError.
Смотрите Win32 SDK для подробной информации.
CSerialPort::GetStatus
void GetStatus(COMMSTAT& stat)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetCommStatus.
Смотрите Win32 SDK для подробной информации.
CSerialPort::GetState
void GetState(DCB& dcb)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetCommState.
Смотрите Win32 SDK для подробной информации.
CSerialPort::SetState
void SetState(DCB& dcb)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции SetCommState.
Смотрите Win32 SDK для подробной информации.
CSerialPort::Escape
void Escape(DWORD dwFunc)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции EscapeCommFunction.
Смотрите Win32 SDK для подробной информации.
CSerialPort::ClearDTR
void ClearDTR()
throw( CSerialException );
Remarks
Calls the Escape function using the constant CLRDTR which lowers the DTR line.
CSerialPort::ClearRTS
void ClearRTS()
throw( CSerialException );
Remarks
Calls the Escape function using the constant CLRRTS which lowers the RTS line.
CSerialPort::SetDTR
void SetDTR()
throw( CSerialException );
Remarks
Calls the Escape function using the constant SETDTR which raises the DTR line.
CSerialPort::SetRTS
void SetRTS()
throw( CSerialException );
Remarks
Calls the Escape function using the constant SETRTS which raises the RTS line.
CSerialPort::SetXOFF
void SetXOFF()
throw( CSerialException );
Remarks
Calls the Escape function using the constant SETXOFF which causes transmission to act
as if an XOFF character has been received..
CSerialPort::SetXON
void SetXON()
throw( CSerialException );
Remarks
Calls the Escape function using the constant SETXON which causes transmission to act as
if an XON character has been received..
CSerialPort::GetProperties
void GetProperties(COMMPROP& properties)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetCommProperties.
Смотрите Win32 SDK для подробной информации.
CSerialPort::GetModemStatus
void GetModemStatus(DWORD& dwModemStatus)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetCommModemStatus.
Смотрите Win32 SDK для подробной информации.
CSerialPort::SetTimeouts
void SetTimeouts(COMMTIMEOUTS& timeouts)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции SetCommTimeouts.
Смотрите Win32 SDK для подробной информации.
CSerialPort::GetTimeouts
void GetTimeouts(COMMTIMEOUTS& timeouts)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetCommTimeouts.
Смотрите Win32 SDK для подробной информации.
CSerialPort::Set0Timeout
void Set0Timeout()
throw( CSerialException );
Remarks
Устанавливает тайм аут посылки с приёма в 0. This
cause writes to return immediately and for reads to return with whatever data is waiting
in the receive buffer rather than wait for the specified amount of bytes to arrive.
CSerialPort::Set0WriteTimeout
void Set0WriteTimeout()
throw( CSerialException );
Remarks
Устанавливает передающий тайм аут в 0.
CSerialPort::Set0ReadTimeout
void Set0ReadTimeout()
throw( CSerialException );
Remarks
Устанавливает тайм аут считывания в 0. This cause reads
to return with whatever data is waiting in the receive buffer rather than wait for the
specified amount of bytes to arrive.
CSerialPort::SetMask
void SetMask(DWORD dwMask)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции SetCommMask.
Смотрите Win32 SDK для подробной информации.
CSerialPort::GetMask
void GetMask(DWORD& dwMask)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции GetCommMask.
Смотрите Win32 SDK для подробной информации.
CSerialPort::WaitEvent
void WaitEvent(DWORD& dwMask)
void WaitEvent(DWORD& dwMask, OVERLAPPED& overlapped)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции WaitCommEvent.
Вторая WaitEvent это overlapped версия. Смотрите Win32 SDK для
подробной информации.
CSerialPort::Flush
void Flush()
throw( CSerialException );
Remarks
Простая надстройка для SDK функции FlushFileBuffers.
Смотрите Win32 SDK для подробной информации.
CSerialPort::Purge
void Purge(DWORD dwFlags)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции PurgeComm.
Смотрите Win32 SDK для подробной информации.
CSerialPort::TerminateOutstandingWrites
void TerminateOutstandingWrites()
throw( CSerialException );
Remarks
Calls the Purge function using the constant PURGE_TXABORT which terminates all
outstanding write operations and returns immediately, even if the write operations have
not been completed.
CSerialPort::TerminateOutstandingReads
void TerminateOutstandingReads()
throw( CSerialException );
Remarks
Calls the Purge function using the constant PURGE_RXABORT which terminates all
outstanding read operations and returns immediately, even if the read operations have not
been completed.
CSerialPort::ClearWriteBuffer
void ClearWriteBuffer()
throw( CSerialException );
Remarks
Очищает выходной буфер, используя константу
PURGE_TXCLEAR..
CSerialPort::ClearReadBuffer
void ClearReadBuffer()
throw( CSerialException );
Remarks
Очищает входной буфер, используя константу
PURGE_RXCLEAR..
CSerialPort::Setup
void Setup(DWORD dwInQueue, DWORD dwOutQueue)
throw( CSerialException );
Remarks
Простая надстройка для SDK функции SetupComm.
Смотрите Win32 SDK для подробной информации.
CSerialPort::OnCompletion
virtual void OnCompletion(DWORD dwErrorCode, DWORD dwCount,
LPOVERLAPPED lpOverlapped);
throw( CSerialException );
Parameters
dwErrorCode
Specifies the I/O completion status. This parameter may be one of the following values:
Value |
Meaning |
0 |
I/O завершился успешно. |
ERROR_HANDLE_EOF |
The ReadFileEx function tried to read past the end of the file. |
dwCount Указывает на количество переданных
байт. Если ошибка, то этот параметр - ноль
lpOverlapped Указательна на структуру OVERLAPPED ,
определённую для ассинхронных I/O функций.
Remarks
Данная функция вызывается, как процедура
завершения для различных ассинхронных вызовов в
WriteEx или ReadEx. В Вашем наследованном от CSerialPort
классе, Вы можете определить собственную функцию
для реакции на ассинхронные вызовы.
|