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

📄 serialcomm.h

📁 研华ADAN4050 检测程序(自做) 压缩文件中 无密码
💻 H
字号:
// SerialComm.h: interface for the CSerialComm class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(CCL_SERIALCOMM_H__BB2E42A9_8F66_481a_B3EC_5BF1B825FF6F__INCLUDED_)
#define CCL_SERIALCOMM_H__BB2E42A9_8F66_481a_B3EC_5BF1B825FF6F__INCLUDED_


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//#define SC_MSCOMOBJECT

#if !defined(SC_MSCOMOBJECT)

#define SC_MAXCOMNUM				256
#define SC_MAXCOMNAME				6

#endif //if !defined(SC_MSCOMOBJECT)

/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// -->-> class CSerialComm <-<--                                           //
//                                                                         //
//     串行通讯类,可以用在利用计算机的串行通讯口进行数据通讯的的场合。该  //
// 类简化了串行通讯的操作步骤,同时也提供了灵活的控制方法。                //
//     CSerialComm有两种完全不同实现形式,通过定义SC_MSCOMOBJECT标识符来决 //
// 定是以COM组件的形式实现还是纯C++形式来实现。如果是C++形式,则在该类中实 //
// 现所有功能,而如果是COM组件形式,则CSerialComm只是一个对SerialComm组件  //
// 进行访问地封装。                                                        //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////

class CSerialComm  
{
public:
	void ClearWriteBuffer(void);
	void ClearReadBuffer(void);
	BYTE GetStopBits(void);
	void SetStopBits(BYTE ucStopBits);
	BYTE GetParity(void);
	void SetParity(BYTE ucParity);
	BYTE GetByteSize(void);
	void SetByteSize(BYTE ucSize);
	DWORD GetBaudrate(void);
	void SetBaudrate(DWORD dwBaudrate);
	BOOL GetCommState(DCB * pDCB);
	BOOL SetCommState(DCB * pDCB);
	BOOL ScanAddr(LPBYTE pucAddr);
	long WriteTo(BYTE ucAddr, LPVOID pData, long lWriteSize);
	BOOL GetAsyncOutput(void);
	void SetAsyncOutput(BOOL bAsyncOutput = TRUE);
	BOOL CommConfigDialog(void);
	long Write(LPVOID pData, long lWriteSize);
	long Read(LPVOID pBuff, long lReadSize);
	LPCTSTR IsOpened(void);
	void Close(void);
	BOOL Open(LPCTSTR lpszCOMName, DWORD dwBaudrate = 0xFFFFFFFFl, DWORD dwParity = 0xFFFFFFFFl);
	static int GetCOMs(LPCTSTR ** pppCOMs);
	CSerialComm();
	virtual ~CSerialComm();

protected:

#if !defined(SC_MSCOMOBJECT)

	void SetDefaultConfig(DWORD dwBaudrate, BYTE ucParity);
	//归整化波特率
	//<参数>
	//	dwBaudrate: 输入波特率,该波特率可能不是一个合法值
	//<返回值>
	//	返回一个标准的波特率。
	DWORD FormatBaudrate(DWORD dwBaudrate)
	{
		const DWORD adwStdBdrs[] =
		{
			CBR_110, CBR_300,
			CBR_600, CBR_1200,
			CBR_2400, CBR_4800,
			CBR_9600, CBR_14400,
			CBR_19200, CBR_38400,
			CBR_56000, CBR_57600,
			CBR_115200, CBR_128000,
			CBR_256000
		};
		for (int i = 0; i < sizeof(adwStdBdrs) / sizeof(DWORD) - 1; i++)
		{
			if (adwStdBdrs[i] >= dwBaudrate)
				break;
		}
		return DWORD(adwStdBdrs[i]);
	}
	//归整化校验方式
	//<参数>
	//	ucParity: 输入校验方式,该校验方式可能不是一个合法值
	//<返回值>
	//	返回一个标准的校验方式。
	BYTE FormatParity(BYTE ucParity)
	{
		const BYTE aucStdPars[] =
		{
			NOPARITY,
			ODDPARITY,
			EVENPARITY,
			MARKPARITY,
			SPACEPARITY
		};
		int iIndex=0;
		for (int i=0; i < sizeof(aucStdPars) / sizeof(BYTE); i++)
		{
			if (aucStdPars[i] == ucParity)
			{
				iIndex = i;
				break;
			}
		}
		return BYTE(aucStdPars[iIndex]);
	}

	HANDLE m_hCOM; //串口句柄
	OVERLAPPED m_stROverlapped; //用于读串口的重叠变量
	OVERLAPPED m_stWOverlapped; //用于写串口的重叠变量
	TCHAR m_atcCurCOM[SC_MAXCOMNAME]; //当前已经打开的串口名称
	DCB m_stDCB; //当前串行通讯口DCB的镜像
	COMMTIMEOUTS m_stCTO; //当前串行通讯口COMMTIMEOUTS的镜像
	BOOL m_bAsyncOutput; //异步输出
	BOOL m_bShowCommConfigDialog; //标识当前是否显示

#endif //if !defined(SC_MSCOMOBJECT)
};

#endif // !defined(CCL_SERIALCOMM_H__BB2E42A9_8F66_481a_B3EC_5BF1B825FF6F__INCLUDED_)

⌨️ 快捷键说明

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