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

📄 serialcommhelper.h

📁 此源代码是一个很复杂的串口通信的例子
💻 H
字号:
// SerialCommHelper.h: interface for the CSerialCommHelper class.
//
//////////////////////////////////////////////////////////////////////

#pragma once

#include "SerialBuffer.h"
#include "DebugDump.h"
#include <map>

typedef enum tagSERIAL_STATE
{
	SS_Unknown,
	SS_UnInit,
	SS_Init,
	SS_Started ,
	SS_Stopped ,
} SERIAL_STATE;

class CSerialCommHelper
{
private:
	SERIAL_STATE	m_eState;
	HANDLE	m_hCommPort;
	HANDLE	m_hThreadTerm;
	HANDLE	m_hThread;
	HANDLE	m_hThreadStarted;
	HANDLE	m_hDataRx;
	bool	m_abIsConnected;
	void	InvalidateHandle(HANDLE& hHandle );
	void	CloseAndCleanHandle(HANDLE& hHandle) ;
	
	CSerialBuffer m_theSerialBuffer;
	CRITICAL_SECTION m_csLock;
	SERIAL_STATE GetCurrentState() {return m_eState;}
public:
	CSerialCommHelper();
	virtual ~CSerialCommHelper();
	//void		GetEventToWaitOn(HANDLE* hEvent) {*hEvent = m_hDataRx;}
	HANDLE	GetWaitForEvent() {return m_hDataRx;} 

	inline void		LockThis()			{EnterCriticalSection ( &m_csLock );}	
	inline void		UnLockThis()		{LeaveCriticalSection (&m_csLock); }
	inline void		InitLock()			{InitializeCriticalSection (&m_csLock );}
	inline void		DelLock()				{DeleteCriticalSection (&m_csLock );}
 	inline bool		IsInputAvailable()
	{
		LockThis (); 
		bool abData = ( !m_theSerialBuffer.IsEmpty() ) ;
		UnLockThis (); 
		return abData;
	} 
	inline bool		IsConnection()		{	return m_abIsConnected;	}
 	inline void		SetDataReadEvent()	{	SetEvent ( m_hDataRx );	}
	
	HRESULT			Read_N		(std::string& data,long alCount,long alTimeOut);
	HRESULT			Read_Upto	(std::string& data,char chTerminator ,long	* alCount,long alTimeOut);
	HRESULT			ReadAvailable(std::string& data);
	HRESULT			Write (const char* data,DWORD dwSize);
	HRESULT			Init(std::string szPortName= _T("COM1"), DWORD dwBaudRate = 9600,BYTE byParity = 0,BYTE byStopBits = 1,BYTE byByteSize  = 8);
	HRESULT			Start();
	HRESULT			Stop();
	HRESULT			UnInit();

	static unsigned __stdcall ThreadFn(void*pvParam);
	//-- helper fn.
 	HRESULT  CanProcess();
	void OnSetDebugOption(long  iOpt,BOOL bOnOff);
	
};


⌨️ 快捷键说明

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