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