?? asyncserialport.h
字號:
// ***************************************************************
// AutoRecvSerialPort version: 1.0 · date: 06/30/2006
// -------------------------------------------------------------
//
// -------------------------------------------------------------
// Write by : Deng Yangjun
// Copyright (C) 2001-2006 - Midapexsoft All Rights Reserved
// ***************************************************************
//
// ***************************************************************
#pragma once
#include "serialport.h"
#include "Thread.h"
#include <list>
using namespace std;
class ISerialPortObserver;
class CAsyncSerialPort :
public CSerialPort,public CThread
{
public:
CAsyncSerialPort(void);
void Open(int nPort, DWORD dwBaud = 9600, Parity parity = NoParity, BYTE DataBits = 8,
StopBits stopbits = OneStopBit, FlowControl fc = NoFlowControl, BOOL bOverlapped = FALSE);
virtual void Close();
virtual void WriteEx(const void* lpBuf, DWORD dwCount);
void AtachObserver(ISerialPortObserver *pObserver);
void DetchObserver(ISerialPortObserver *pObserver);
public:
virtual ~CAsyncSerialPort(void);
protected:
virtual int Run();
virtual void OnRead(const byte *pData, size_t dataLength);
virtual void OnWrite(const byte *pData, size_t dataLength);
virtual void OnBreak(DWORD dwMask);
virtual void OnError(LPCTSTR lpszErrorMessage);
void SetBreakEvent(DWORD &dwMask);
void HandleBreakEvent(DWORD &dwMask);
void SetReadEvent(OVERLAPPED& overlapped);
void HandleReadEvent(OVERLAPPED& overlapped);
void HandleWriteEvent(OVERLAPPED& overlapped);
HANDLE m_portClosingEvent; //Send port close singal
HANDLE m_readEvent; //Using by m_readOverlapped
HANDLE m_breakEvent; //Using by m_breakOverlapped
HANDLE m_writeEvent; //Using by m_writeOverlapped
OVERLAPPED m_readOverlapped; //Read Event for async API
OVERLAPPED m_breakOverlapped; //Break Event for async API
OVERLAPPED m_writeOverlapped; //Write Event for async API
static const int ReadBufferLength = 4096;
static const int WriteBufferLength= 4096;
byte m_readBuffer[ReadBufferLength];
byte m_writeBuffer[WriteBufferLength];
BOOL m_isWriting;
typedef list<ISerialPortObserver *> PortObserverList;
PortObserverList m_portObservers;
};
class ISerialPortObserver
{
public:
virtual void OnPortOpen(CSerialPort *pSerialPort)=0;
virtual void OnPortClose(CSerialPort *pSerialPort)=0;
virtual void OnWrite(CSerialPort *pSerialPort, const byte *pData, size_t nDataLen)=0;
virtual void OnRead(CSerialPort *pSerialPort, const byte *pData, size_t nDataLen)=0;
virtual void OnError(CSerialPort *pSerialPort, LPCTSTR lpszMessage)=0;
};
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -