-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSerialPortService.h
More file actions
77 lines (66 loc) · 1.64 KB
/
SerialPortService.h
File metadata and controls
77 lines (66 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#pragma once
#include <boost/asio/io_service.hpp>
#include <boost/asio/serial_port.hpp>
#include <string>
typedef struct _comproperty
{
//串口编号
std::string strSerialPort;
//波特率
unsigned int nBaudRate;
//通信字节位数
int nDataBits;
//(0:1个停止位 1:1.5个停止位(Linux暂不支持1.5个停止位) 2:2个停止位)
int nStopBits;
//(0:不使用校验 1:奇数校验 2:偶数校验 3:标记校验(Linux下没有此项) 4:空格校验)
int nPairty;
//(0:不使用流控 1:使用硬件流控)
bool bFlowControl;
_comproperty()
{
strSerialPort = "";
nBaudRate = 9600;
nDataBits = 8;
nStopBits = 0;
nPairty = 0;
bFlowControl = false;
}
}COMPROPERTY, *LPCOMPROPERTY;
class CSerialPortService
{
public:
CSerialPortService();
~CSerialPortService();
void SetSerialPortOption(const COMPROPERTY& Options)
{
m_SerialOption = Options;
}
//开启服务
void StartSerialPortService(void);
//停止服务
void StopSerialPortService(void);
//设置传感器开始采集
void AsyncWriteData(BYTE* pData, int nDataLength);
private:
//接收完成通知
void ReadHandler(const boost::system::error_code& ec, std::size_t bytes_transferred);
//判断是否有整包数据
int HandlerData(BYTE* pData,int nDataLength);
//进行CRC校验和
BYTE CalCRC8(BYTE* pBuf, unsigned int nsize);
//发送完成通知
void WriteHandler(BYTE* pData, int nDataLength, const boost::system::error_code& ec, std::size_t bytes_transferred);
private:
//初始化串口
bool InitSerialPort(void);
//接收缓冲区
BYTE* m_pRecvBuffer;
//已经占用的字节
int m_nUseBufferBytes;
//串口通信配置项
COMPROPERTY m_SerialOption;
//IoService
boost::asio::io_service m_IoService;
boost::asio::io_service::work m_Work;
boost::asio::serial_port m_SerialPort;
};