1// Copyright (C) 2012 Denis Shienkov <denis.shienkov@gmail.com>
2// Copyright (C) 2013 Laszlo Papp <lpapp@kde.org>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#ifndef QSERIALPORT_H
6#define QSERIALPORT_H
7
8#include <QtCore/qiodevice.h>
9#include <QtCore/qproperty.h>
10
11#include <QtSerialPort/qserialportglobal.h>
12
13QT_BEGIN_NAMESPACE
14
15class QSerialPortInfo;
16class QSerialPortPrivate;
17
18class Q_SERIALPORT_EXPORT QSerialPort : public QIODevice
19{
20 Q_OBJECT
21 Q_DECLARE_PRIVATE(QSerialPort)
22
23 Q_PROPERTY(qint32 baudRate READ baudRate WRITE setBaudRate NOTIFY baudRateChanged)
24 Q_PROPERTY(DataBits dataBits READ dataBits WRITE setDataBits NOTIFY dataBitsChanged
25 BINDABLE bindableDataBits)
26 Q_PROPERTY(Parity parity READ parity WRITE setParity NOTIFY parityChanged BINDABLE bindableParity)
27 Q_PROPERTY(StopBits stopBits READ stopBits WRITE setStopBits NOTIFY stopBitsChanged
28 BINDABLE bindableStopBits)
29 Q_PROPERTY(FlowControl flowControl READ flowControl WRITE setFlowControl NOTIFY flowControlChanged
30 BINDABLE bindableFlowControl)
31 Q_PROPERTY(bool dataTerminalReady READ isDataTerminalReady WRITE setDataTerminalReady
32 NOTIFY dataTerminalReadyChanged)
33 Q_PROPERTY(bool requestToSend READ isRequestToSend WRITE setRequestToSend NOTIFY requestToSendChanged)
34 Q_PROPERTY(SerialPortError error READ error RESET clearError NOTIFY errorOccurred BINDABLE bindableError)
35 Q_PROPERTY(bool breakEnabled READ isBreakEnabled WRITE setBreakEnabled NOTIFY breakEnabledChanged
36 BINDABLE bindableIsBreakEnabled)
37
38#if defined(Q_OS_WIN32)
39 typedef void* Handle;
40#else
41 typedef int Handle;
42#endif
43
44public:
45
46 enum Direction {
47 Input = 1,
48 Output = 2,
49 AllDirections = Input | Output
50 };
51 Q_FLAG(Direction)
52 Q_DECLARE_FLAGS(Directions, Direction)
53
54 enum BaudRate {
55 Baud1200 = 1200,
56 Baud2400 = 2400,
57 Baud4800 = 4800,
58 Baud9600 = 9600,
59 Baud19200 = 19200,
60 Baud38400 = 38400,
61 Baud57600 = 57600,
62 Baud115200 = 115200
63 };
64 Q_ENUM(BaudRate)
65
66 enum DataBits {
67 Data5 = 5,
68 Data6 = 6,
69 Data7 = 7,
70 Data8 = 8
71 };
72 Q_ENUM(DataBits)
73
74 enum Parity {
75 NoParity = 0,
76 EvenParity = 2,
77 OddParity = 3,
78 SpaceParity = 4,
79 MarkParity = 5
80 };
81 Q_ENUM(Parity)
82
83 enum StopBits {
84 OneStop = 1,
85 OneAndHalfStop = 3,
86 TwoStop = 2
87 };
88 Q_ENUM(StopBits)
89
90 enum FlowControl {
91 NoFlowControl,
92 HardwareControl,
93 SoftwareControl
94 };
95 Q_ENUM(FlowControl)
96
97 enum PinoutSignal {
98 NoSignal = 0x00,
99 DataTerminalReadySignal = 0x04,
100 DataCarrierDetectSignal = 0x08,
101 DataSetReadySignal = 0x10,
102 RingIndicatorSignal = 0x20,
103 RequestToSendSignal = 0x40,
104 ClearToSendSignal = 0x80,
105 SecondaryTransmittedDataSignal = 0x100,
106 SecondaryReceivedDataSignal = 0x200
107 };
108 Q_FLAG(PinoutSignal)
109 Q_DECLARE_FLAGS(PinoutSignals, PinoutSignal)
110
111 enum SerialPortError {
112 NoError,
113 DeviceNotFoundError,
114 PermissionError,
115 OpenError,
116 WriteError,
117 ReadError,
118 ResourceError,
119 UnsupportedOperationError,
120 UnknownError,
121 TimeoutError,
122 NotOpenError
123 };
124 Q_ENUM(SerialPortError)
125
126 explicit QSerialPort(QObject *parent = nullptr);
127 explicit QSerialPort(const QString &name, QObject *parent = nullptr);
128 explicit QSerialPort(const QSerialPortInfo &info, QObject *parent = nullptr);
129 virtual ~QSerialPort();
130
131 void setPortName(const QString &name);
132 QString portName() const;
133
134 void setPort(const QSerialPortInfo &info);
135
136 bool open(OpenMode mode) override;
137 void close() override;
138
139 bool setBaudRate(qint32 baudRate, Directions directions = AllDirections);
140 qint32 baudRate(Directions directions = AllDirections) const;
141
142 bool setDataBits(DataBits dataBits);
143 DataBits dataBits() const;
144 QBindable<DataBits> bindableDataBits();
145
146 bool setParity(Parity parity);
147 Parity parity() const;
148 QBindable<Parity> bindableParity();
149
150 bool setStopBits(StopBits stopBits);
151 StopBits stopBits() const;
152#if QT_SERIALPORT_REMOVED_SINCE(6, 7)
153 QBindable<bool> bindableStopBits();
154#endif
155 QBindable<StopBits> bindableStopBits(QT6_DECL_NEW_OVERLOAD);
156
157 bool setFlowControl(FlowControl flowControl);
158 FlowControl flowControl() const;
159 QBindable<FlowControl> bindableFlowControl();
160
161 bool setDataTerminalReady(bool set);
162 bool isDataTerminalReady();
163
164 bool setRequestToSend(bool set);
165 bool isRequestToSend();
166
167 PinoutSignals pinoutSignals();
168
169 bool flush();
170 bool clear(Directions directions = AllDirections);
171
172 SerialPortError error() const;
173 void clearError();
174 QBindable<SerialPortError> bindableError() const;
175
176 qint64 readBufferSize() const;
177 void setReadBufferSize(qint64 size);
178
179 bool isSequential() const override;
180
181 qint64 bytesAvailable() const override;
182 qint64 bytesToWrite() const override;
183 bool canReadLine() const override;
184
185 bool waitForReadyRead(int msecs = 30000) override;
186 bool waitForBytesWritten(int msecs = 30000) override;
187
188 bool setBreakEnabled(bool set = true);
189 bool isBreakEnabled() const;
190 QBindable<bool> bindableIsBreakEnabled();
191
192 Handle handle() const;
193
194Q_SIGNALS:
195 void baudRateChanged(qint32 baudRate, QSerialPort::Directions directions);
196 void dataBitsChanged(QSerialPort::DataBits dataBits);
197 void parityChanged(QSerialPort::Parity parity);
198 void stopBitsChanged(QSerialPort::StopBits stopBits);
199 void flowControlChanged(QSerialPort::FlowControl flowControl);
200 void dataTerminalReadyChanged(bool set);
201 void requestToSendChanged(bool set);
202 void errorOccurred(QSerialPort::SerialPortError error);
203 void breakEnabledChanged(bool set);
204
205protected:
206 qint64 readData(char *data, qint64 maxSize) override;
207 qint64 readLineData(char *data, qint64 maxSize) override;
208 qint64 writeData(const char *data, qint64 maxSize) override;
209
210private:
211 Q_DISABLE_COPY(QSerialPort)
212
213#if defined(Q_OS_WIN32)
214 Q_PRIVATE_SLOT(d_func(), bool _q_startAsyncWrite())
215 Q_PRIVATE_SLOT(d_func(), void _q_notified(quint32, quint32, OVERLAPPED*))
216#endif
217};
218
219Q_DECLARE_OPERATORS_FOR_FLAGS(QSerialPort::Directions)
220Q_DECLARE_OPERATORS_FOR_FLAGS(QSerialPort::PinoutSignals)
221
222QT_END_NAMESPACE
223
224#endif // QSERIALPORT_H
225

Provided by KDAB

Privacy Policy
Start learning QML with our Intro Training
Find out more

source code of qtserialport/src/serialport/qserialport.h