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

📄 serialcomm.h

📁 一个通过USB->UART读取C8051F060的程序
💻 H
字号:
// SerialComm.h: interface for the CSerialComm class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SERIALCOMM_H__3BFD1D9A_8F1A_411E_979F_DF734858DC97__INCLUDED_)
#define AFX_SERIALCOMM_H__3BFD1D9A_8F1A_411E_979F_DF734858DC97__INCLUDED_

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

#include "AFXMT.H"
#include "AFXTEMPL.H"
#include "mscomm.h"
#include "DataReaderImpl.h"

#define  __USEUSBXPRESS1
#define  WM_CALCOMMAND  WM_USER+0x333

/************************************************************************/
/* 定义发送命令信息的结构体(转换成字符串送到串口缓存)                   */
/************************************************************************/
#define   MAXBYTESIZE   34
typedef   struct/*class AFX_EXT_CLASS*/ _tagArgCmdToCom
{
public:
		unsigned char  szCmdBuff[MAXBYTESIZE];	//命令字节内容
		int   nActualLen;						//实际使用的字节数
}CalSpeed_ArgCmdToCom, *LPCalSpeed_ArgCmdToCom;

#define  SERIALPORT_DUMMY 0xCC		//串口未接受到数据
#define  SERIALPORT_OK    0x01		//串口正确
#define  SEIALPORT_ERR    0xFD      //串口错误
#define  OVERTIMES_ERR    0xFE      //超时错误
#define  CHECKSUM_ERR     0xFF      //校验和错误

#define  CHECKERR_MSG	   _T("校验和错误")
#define  OVERTIMEERR_MSG   _T("通讯超时错误!")
#define  SEIALPORTERR_MSG  _T("串口错误!")
#define  MCUOK_MSG		   _T("通讯正常!")

#define  FETCHSERIALPORTTHREADID  0
#define  REALSHOWTHREADID		  1

/***********************************************************************
* 定义命令信息的全局变量                                                          
************************************************************************/
class  CSyncHelper
{
public:
	CSyncHelper(CCriticalSection *pSync, UINT nElapseTime = 2000)
		:m_pSync(pSync)
	{
		if (m_pSync !=NULL)
			m_pSync->Lock(nElapseTime);
	}

	virtual ~CSyncHelper()
	{
		if (m_pSync !=NULL)
			m_pSync->Unlock();
	}

protected:
	CCriticalSection *m_pSync;
};

class  CBaseCommIntf
{
public:
	static	BOOL       m_bRealUpload;//实时数据上报
	static	CCriticalSection  g_critSec;

public:
	virtual	void   InitThread();

	//
	virtual BOOL   SendUiCmd(void *pArg, BOOL bImmd = TRUE) {return FALSE;}	  //下发界面的命令参数	
	virtual	void   SendBytes(char szBuffer[], int nLen){;}

	//清空接收缓冲区
	virtual	void   ClearBuff(){;}

	//返回接收字节数
	virtual	int    ReadNumBytes() {return 0;}
    virtual	int    RecvBytes(char *&szBuff, int nLen){return 0;}

	//配置信息
	virtual	BOOL   ConfigPort(short nPort, int nBaudRate){return FALSE;}		

	//接受数据显示对象
	virtual	void   AcceptConsumer(CDataReaderImpl *pReader);
	virtual	CDataReaderImpl* GetConsumer();

	//开始通信
	virtual	BOOL   StartComm();

	//停止通信
	virtual	BOOL   StopComm(BOOL bCleanup);
	virtual	BOOL   IsOpen();

	//接收字符串转发给接收者对象从而进行间接数据处理
	virtual void RecieveStr(){;}
	//接收字符串转换成结构体输出
	virtual void RecieveStr(void *&pData){;}

protected:
	static BOOL		  m_bPortUsed;		//串口是否有效
	CDataReaderImpl   *m_pReader;		//
	static BOOL       m_bInitThread;
};


#ifdef __USEUSBXPRESS
/*******************************************************************************
*  声明具体的UART->USB串口执行对象,这是一个线程安全类,供外部使用的方法均要同步。                                              
********************************************************************************/
#include "SiUSBXp.h"
#pragma comment (lib, "SiUSBXp.lib")
class  CUART2USBComm :public CBaseCommIntf
{
public:
	CUART2USBComm();
	virtual ~CUART2USBComm();

	//定义界面上设定参数的命令函数
	virtual BOOL  SendUiCmd(void *pArg, BOOL bImmd = TRUE);	  //下发界面的命令参数	
	void   SendBytes(char szBuffer[], int nLen = 256);

	//清空接收缓冲区
	void   ClearBuff();

	//返回接收字节数
	int  ReadNumBytes();
    int  RecvBytes(char *&szBuff, int nLen = 256);

	//配置串口信息
	BOOL   ConfigPort(short nPort, int nBaudRate=500000);

	//接收字符串转发给接收者对象从而进行间接数据处理
	virtual void RecieveStr();
	//接收字符串转换成结构体输出
	virtual void RecieveStr(void *&pData);	

protected:
	//发送字符串
	BOOL SendStr(const char *pSendBuff, int nBufSize=4096);
	void ClearOutBuff();

private:
	HANDLE			  m_cyHandle;
	BOOL			  m_bConfig;
};
#endif

///////////////////////////////////////////////////////////////////////////
//
#include "PlotDataStream.h"
extern CPlotDataStream	g_sDataStream;

#define  _USECVIRS232
/************************************************************************
*  声明具体的串口执行对象,这是一个线程安全类,供外部使用的方法均要同步。                                              
************************************************************************/
class  CSerialComm :public CBaseCommIntf
{
public:
	CSerialComm();
	virtual ~CSerialComm();

	//定义界面上设定参数的命令函数
	virtual BOOL  SendUiCmd(void *pArg, BOOL bImmd = TRUE);	  //下发界面的命令参数	
	void   SendBytes(char szBuffer[], int nLen = 256);
	
	//
	void   InitArv();

	//清空接收缓冲区
	void   ClearBuff();

	//从COM口接收字符串转换成结构体输出
	virtual void RecieveStr(void *&pData);	
	
	//返回接收字节数
	int  ReadNumBytes();
    int  RecvBytes(char *&szBuff, int nLen = 256);

	//配置串口信息
	BOOL   ConfigPort(short nPort, int nBaudRate=9600);		
	void   ClosePort();
	//从COM口接收字符串转发给接收者对象从而进行间接数据处理
	virtual void RecieveStr();

protected:
	//向COM口发送字符串
	BOOL   SendStr(const char *pSendBuff, int nBufSize=0);
	void   ClearOutBuff();

private:

#ifdef	_USEMSCOMM
	static CMSComm    m_Comm;			//串口通讯对象
	static VARIANT	  m_vResponse;
#else
	int		m_nPortNo;
#endif

	BOOL			  m_bConfig;
};


/************************************************************************/
/*==========此处定义全局对象/函数============*/
extern CSerialComm		g_objCalSerialComm;
extern CDataReaderImpl	g_objBaseDataReader;

#ifdef __USEUSBXPRESS
extern CUART2USBComm      g_objUART2USBComm;
#endif 



#endif // !defined(AFX_SERIALCOMM_H__3BFD1D9A_8F1A_411E_979F_DF734858DC97__INCLUDED_)

⌨️ 快捷键说明

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