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

📄 gpscomm.h

📁 非常好用的GPS串口通信
💻 H
字号:
///////////////////////////////////////////////////////////////////////////////
// GpsComm.h: interface for the CGpsComm class
//
// Copyright (c) 2004,上海合众思壮科技有限责任公司GIS部
//
// All rights reserved
//
// 文件名称:GpsComm.h
//
// 摘要    :通讯基类
//
// 作者    :Hansom
//
// 当前版本:1.1
//
// 完成日期:2004年04月12日
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_GPSCOMM_H__89659A50_A6EC_4103_95C2_6B7DEAA2EEFA__INCLUDED_)
#define AFX_GPSCOMM_H__89659A50_A6EC_4103_95C2_6B7DEAA2EEFA__INCLUDED_

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

#include <Afxtempl.h>
#include "IGpsComm.h"

///////////////////////////////////////////////////////////////////////////////
#define	WM_COMM_RXCHAR	WM_USER+500
const long BUFFER_SIZE	= 512;							// 定义通用缓冲区尺寸

///////////////////////////////////////////////////////////////////////////////
struct ST_LOG_WND
{
	CWnd *pWnd;											// 活动窗口的句柄
	WORD dwMsgType;										// 消息类型
};

///////////////////////////////////////////////////////////////////////////////
// GPS通讯基类
// OpenComm()				// 打开端口
// CloseComm()				// 关闭端口
// IsPortOpen()				// 查询端口状态
// GetCommPara()			// 查询端口当前设置
// SetCommPara()			// 设置端口参数
// GetGpsCommObjPtr()		// 得到类的指针
// SearchOneFrame()			// 从接收缓冲区搜索完整一帧,并转换为具体的数据结构
///////////////////////////////////////////////////////////////////////////////
class CGpsComm : public IGpsComm
{
public:
	CGpsComm();
	virtual ~CGpsComm();

public:
	virtual BOOL OpenComm(CWnd * pwnd, GPS_DATA_TYPE dwMsgType = ENUM_All_GPS);
	virtual BOOL CloseComm(CWnd * pwnd);
	virtual BOOL Stop();
	virtual BOOL Start();
	virtual BOOL IsPortOpen() const {return (m_hComm != NULL);};
	virtual BOOL SetCommPara(const ST_COMM_PARA &pSerialPara);
	virtual ST_COMM_PARA GetCommPara() const;
	virtual int  SearchOneFrame(char *pchRevBuf, const int nRevLen, int &nReadPtr, 
								const int nWritePtr, ST_MSG *pMsg) = 0;

	static	CGpsComm* GetGpsCommObjPtr(){return c_GpsCommObj;};
//	virtual BOOL	SendData(strucMsg* pMsg);

	

private:
	HANDLE				m_hComm;						// 串口句柄
	CWinThread			*m_Thread;						// 端口任务线程
	ST_COMM_PARA		m_SerialPara;					// 串口参数

	char				*m_pchRevBuffer;				// 接收缓冲区
	int					m_nRevRPtr;						// 接收缓冲区读指针
	int					m_nRevWPtr;						// 接收缓冲区写指针
	ST_MSG				*m_struMsg;						// 向窗口发送的消息队列
	int					m_nMsgCur;

	static CGpsComm		*c_GpsCommObj;
	BOOL				m_bThreadAlive;					// 端口任务线程是否被激活
	CList<ST_LOG_WND, ST_LOG_WND&> m_listWnd;			// 需要数据的活动窗口
	CRITICAL_SECTION	m_csCommunicationSync;			// 控制串口操作数据同步对象

private:
	void	ReceiveData();								// 接收数据
	void	WriteData(char chData);						// 写一个字符到接收缓冲区
	static	UINT CommThread(LPVOID pParam);				// 串口监听线程
	BOOL	GetNeedMsg(DWORD dwMsgType, GPS_DATA_TYPE emMsg);	// 得到需要的消息句柄

};

#endif // !defined(AFX_GPSCOMM_H__89659A50_A6EC_4103_95C2_6B7DEAA2EEFA__INCLUDED_)

⌨️ 快捷键说明

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