📄 multithreadserial.h
字号:
/*****************************************************************
||文件 : MultiThreadSerial.h(多线程串口通信类)
||编者 : 许伟群
||EMail: xuweiqun@126.com
||QQ : 12626946
||日期 : 2004-05
||修改 : 2005-09
||使用 :
|| 1、设置DCB
|| 最好使用简单设置(4个主要参数)SetDCB(int nBaudRate,int nDataBit,int nCheckBit,int nStopBit );
|| 也可以自定义设置SetDCB(DCB dcb)(对各个变量不熟悉,自定义很容易出错)
|| 不设置默认为:波特率9600 数据位8 偶校验 停止位1
|| 2、初使化串口InitComm(传入串口号和窗口句柄m_hWnd)
|| 3、BeginComm启动串口接收数据的线程
|| 4、当串口收到数据,向m_hWnd发送WM_ACTIVE_TRANS消息,并且发送了串口号
|| 在消息处理函数中处理数据(通过串口号判断是哪个串口对象来接收数据)
|| 然后调用ReceiveData函数接收数据.
|| 5、写数据通过WriteComm函数
******************************************************************/
#if !defined(AFX_BIM10001_H__247217B6_8D3F_11D4_84B3_0050BF117318__INCLUDED_)
#define AFX_BIM10001_H__247217B6_8D3F_11D4_84B3_0050BF117318__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif
#define FAIL 0 //返回成功定义为0
#define COMM232GETDATAMAX 204800 //接收缓冲区 200K
#define COMM232SENDDATAMAX 204800 //发送缓冲区 200K
//消息定义
#define WM_ACTIVE_TRANS WM_USER + 101 //接收数据
class MultiThreadSerial
{
public:
MultiThreadSerial();
virtual ~MultiThreadSerial();
public:
bool BeginComm();
bool InitComm(int nCom, HWND hWnd);
void CloseComm();
DWORD WriteComm(unsigned char *buf, DWORD dwLength);
//自定义设置
void SetDCB(DCB dcb);
//简单设置
void SetDCB(int nBaudRate,int nDataBit,int nCheckBit,int nStopBit );
int GetComNum();
int GetBaudRate();
int GetDataBit();
int GetCheckBit();
int GetStopBit();
bool ComIsOpen(); //串口是否打开
bool ComIsConnected(); //是否启动了线程
void ReceiveData(BYTE* psz); //接收数据
void OnCommRecvNotify(WPARAM wParam, LPARAM lParam);
public:
volatile HANDLE hPostMsgEvent; //用于WM_COMMNOTIFY消息的事件对象
bool bCommRxSign; //Com读信号
bool bCommTxSign; //Com写信号
volatile HANDLE m_hCom;
private:
DWORD ReadComm(unsigned char *buf, DWORD dwLength);
private:
HWND m_hWnd;
BYTE m_sRtnData[COMM232SENDDATAMAX]; // 从缓冲里读出,保存
CWinThread *pThread; //辅助线程指针
int m_nBaudRate;
int m_nDataBit;
int m_nCheckBit;
int m_nStopBit;
volatile bool m_bComIsOpen; //串口是否打开
volatile bool m_bCommConnected; //线程是否启动
private:
int m_nCom;
BYTE m_sCommSendBuffer[COMM232SENDDATAMAX]; //发送缓冲区
BYTE m_sCommGetBuffer[COMM232GETDATAMAX]; //接收缓冲区COM
int m_nCommGetCounter; //接收数据计数器
OVERLAPPED osRead,osWrite; //用于重叠读/写
DCB m_DCB; //串口状态描述字
};
#endif
/*********************************************************************************
波特率 : CBR_110 CBR_19200
CBR_300 CBR_38400
CBR_600 CBR_56000
CBR_1200 CBR_57600
CBR_2400 CBR_115200
CBR_4800 CBR_128000
CBR_9600 CBR_256000
CBR_14400
校验 : NOPARITY 无
ODDPARITY 奇校验
EVENPARITY 偶校验
MARKPARITY Mark
SPACEPARITY Space
停止位 : ONESTOPBIT 1
ONE5STOPBITS 1.5
TWOSTOPBITS 2
数据位 : 4
5
6
7
8
**********************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -