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