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