⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asyncserialport.h

📁 串口通信mfc源码
💻 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;
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -