📄 mywin32port.h
字号:
/************************************************************************/
/* 类名称: 串口操作类 */
/* 功 能: 实现对串口的基本操作 */
/* 设计者: Jinlong|Luo */
/* 修订记录: */
/* 设计时间: 2007-9-24 */
/************************************************************************/
#ifndef _MYWIN32PORT_H
#define _MYWIN32PORT_H
#if _MSC_VER > 1000
#pragma once
#endif
#include "Afxtempl.h"
#include "Globe.h"
#include "ProtocolOfYC.h"
class DLL_EXPORT MyWin32Port
{
public:
MyWin32Port();
virtual ~MyWin32Port();
//串口操作
public:
// 关闭串口通讯并释放其占用端口
void CloseMyWin32Port() ;
// 根据输入的串口通讯参数打开串口
BOOL OpenMyWin32Port(HWND hWnd,
CString szPort,
long dwBaudRate,
char btParity = NOPARITY ,
char btSize = 8 ,
char btStopBits = ONESTOPBIT ,
long ReadIntervalTimeout = NULL,
long ReadTotalTimeoutMultiplier = NULL,
long ReadTotalTimeoutConstant = NULL,
long WriteTotalTimeoutMultiplier = NULL,
long WriteTotalTimeoutConstant = NULL,
long dwCommMask = EV_RXCHAR|EV_TXEMPTY );
// 根据输入的串口通讯参数打开串口
BOOL OpenMyWin32Port(HWND hWnd,
char btID,
long dwBaudRate,
char btParity = NOPARITY,
char btSize = 8,
char btStopBits = ONESTOPBIT ,
long ReadIntervalTimeout = NULL,
long ReadTotalTimeoutMultiplier = NULL,
long ReadTotalTimeoutConstant = NULL,
long WriteTotalTimeoutMultiplier = NULL,
long WriteTotalTimeoutConstant = NULL,
long dwCommMask = EV_RXCHAR|EV_TXEMPTY );
protected:
//启动接收线程
BOOL StartReceiveThread();
//启动解析线程
BOOL StartInfoProcessThread();
//终止接收线程
BOOL EndReceiveThread();
//终止解析线程
BOOL EndInfoProcessThread();
//处理接收队列中的信息
BOOL Process( char* pContent, int nLength );
public:
//接收线程。
static UINT ReceiveThread( PVOID pParameter );
//信息处理线程
static UINT InfoProcessThread(PVOID pParameter);
public:
BOOL m_bIsOpen ; //串口通讯是否占用端口的标识
private:
HANDLE m_hCom; //串口句柄
HWND m_hWnd; //窗口句柄
HANDLE m_hReceiveThread; //接收线程句柄
HANDLE m_hInfoProcessThread;//解析线程句柄
HANDLE m_hReceiveCloseEvent;//接收线程退出事件
HANDLE m_hInfoProcessCloseEvent;//解析线程退出事件
BYTE* m_pCurParsedContent; //当前解析协议指令
BYTE m_csRevBuf[SERIAL_CHAR_BUFFER_MAX+1]; //接受字符缓存
BYTE m_csTempBuf[SERIAL_CHAR_BUFFER_MAX*2+1]; //临时缓冲区,用于保存不完整的帧数据
};
////////////////////////////////导出函数相关//////////////////////////////////////////
EYCDataType DLL_EXPORT GetFrameTypeID (BYTE *pData, int &realLen) ;//取得帧类型
int DLL_EXPORT GetFrame1Data (BYTE *pData, int dataLen, YCFRAMEOFFirst *pFrame, int nSize) ;//取得遥测第一帧数据
int DLL_EXPORT GetFrame2Data (BYTE *pData, int dataLen, YCFRAMEOFSecond *pFrame, int nSize) ;//取得遥测第二帧数据
int DLL_EXPORT GetFrame3Data (BYTE *pData, int dataLen, YCFRAMEOFThird *pFrame, int nSize) ;//取得遥测第三帧数据
int DLL_EXPORT GetFrame4Data (BYTE *pData, int dataLen, YCFRAMEOFFourth *pFrame, int nSize) ;//取得遥测第四帧数据
int DLL_EXPORT GetFrame5Data (BYTE *pData, int dataLen, YCFRAMEOFFifth *pFrame, int nSize) ;//取得遥测第五帧数据
int DLL_EXPORT GetFrame6Data (BYTE *pData, int dataLen, YCFRAMEOFSix *pFrame, int nSize) ;//取得遥测第六帧数据
int DLL_EXPORT GetFrame7Data (BYTE *pData, int dataLen, YCFRAMEOFSeven *pFrame, int nSize) ;//取得遥测第七帧数据
int DLL_EXPORT Double48ToDouble64(BYTE sourArr[6],BYTE destArr[8]);//48位double转64位double
BOOL DLL_EXPORT RadianToDegree(double dRadian,int& degree,int& minute,int& second,int& tenSecond);//弧度转化为十进制的度分秒
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -