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

📄 mywin32port.h

📁 多线程
💻 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 + -