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

📄 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 + -