21#include <QtCore/QDeadlineTimer>
22#include <QtCore/QLoggingCategory>
23#include <QtCore/QMutex>
24#include <QtCore/QWaitCondition>
25#include <QtCore/private/qiodevice_p.h>
26#include <QtCore/private/qproperty_p.h>
42#ifndef QSERIALPORT_BUFFERSIZE
43#define QSERIALPORT_BUFFERSIZE DEFAULT_WRITE_BUFFER_SIZE
46Q_DECLARE_LOGGING_CATEGORY(AndroidSerialPortLog)
56 const QString& newErrorString = QString());
68 bool open(QIODevice::OpenMode mode);
74 bool clear(QSerialPort::Directions directions);
82 bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions);
101 return q_func()->setDataBits(dataBits_);
108 return q_func()->setParity(parity_);
115 return q_func()->setStopBits(stopBits_);
122 return q_func()->setFlowControl(flowControl_);
127 bool setBindableBreakEnabled(
bool isBreakEnabled_)
129 return q_func()->setBreakEnabled(isBreakEnabled_);
132 &QSerialPortPrivate::setBindableBreakEnabled,
false)
134 bool waitForReadyRead(
int msec);
139 qint64
writeData(const
char* data, qint64 maxSize);
153 qint64 _writeToPort(const
char* data, qint64 maxSize,
int timeout =
DEFAULT_WRITE_TIMEOUT,
bool async = false);
155 qint64 _writeToPortWithProgress(const
char* data, qint64 maxSize,
int timeout);
156 void _scheduleWrite();
157 static
int _writeTimeoutMs(const QDeadlineTimer& deadline);
158 bool _stopAsyncRead();
159 void _scheduleReadyRead();
160 qsizetype _pendingSizeLocked() const;
161 void _compactPendingDataLocked();
162 qint64 _drainPendingDataLocked(qint64 maxBytes = -1);
167 static
int _stopBitsToAndroidStopBits(
QSerialPort::StopBits stopBits);
168 static
int _dataBitsToAndroidDataBits(
QSerialPort::DataBits dataBits);
169 static
int _parityToAndroidParity(
QSerialPort::Parity parity);
170 static
int _flowControlToAndroidFlowControl(
QSerialPort::FlowControl flowControl);
173 bool _posixOpen(QIODevice::OpenMode mode);
175 bool _posixStartAsyncRead();
176 bool _posixStopAsyncRead();
177 qint64 _posixWrite(const
char* data, qint64 maxSize,
int timeoutMs);
178 qint64 _posixWriteWithProgress(const
char* data, qint64 maxSize,
int timeoutMs);
179 bool _posixApplyPortSettings(qint32 baudRate,
QSerialPort::DataBits dataBits,
182 bool _posixClear(
QSerialPort::Directions directions);
184 bool _posixSetDataTerminalReady(
bool set);
185 bool _posixSetRequestToSend(
bool set);
186 bool _posixSetBreakEnabled(
bool set);
187 bool _posixWaitForReadyRead(
int msecs);
188 void _posixReadActivated();
190 QSocketNotifier* _posixReadNotifier =
nullptr;
194 std::atomic<
bool> _readyReadPending{
false};
195 bool _writePending =
false;
196 std::atomic<qint64> _bufferBytesEstimate{0};
198 QWaitCondition _readWaitCondition;
199 QByteArray _pendingData;
200 qsizetype _pendingDataOffset = 0;
QSerialPort::SerialPortError errorCode
Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QSerialPortPrivate, QSerialPort::Parity, parity, &QSerialPortPrivate::setBindableParity, QSerialPort::NoParity) bool setBindableStopBits(QSerialPort
bool waitForBytesWritten(int msec)
void setError(const QSerialPortErrorInfo &errorInfo)
bool setDataTerminalReady(bool set)
bool setStopBits(QSerialPort::StopBits stopBits)
bool setFlowControl(QSerialPort::FlowControl flowControl)
Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QSerialPortPrivate, QSerialPort::StopBits, stopBits, &QSerialPortPrivate::setBindableStopBits, QSerialPort::OneStop) bool setBindableFlowControl(QSerialPort
Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QSerialPortPrivate, QSerialPort::DataBits, dataBits, &QSerialPortPrivate::setBindableDataBits, QSerialPort::Data8) bool setBindableParity(QSerialPort
QSerialPort::PinoutSignals pinoutSignals()
bool clear(QSerialPort::Directions directions)
bool setDataBits(QSerialPort::DataBits dataBits)
bool open(QIODevice::OpenMode mode)
void setBindableError(QSerialPort::SerialPortError error_)
Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QSerialPortPrivate, QSerialPort::SerialPortError, error, &QSerialPortPrivate::setBindableError, QSerialPort::NoError) bool setBindableDataBits(QSerialPort
static QList< qint32 > standardBaudRates()
qint64 writeData(const char *data, qint64 maxSize)
bool setRequestToSend(bool set)
void exceptionArrived(const QString &ex)
Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QSerialPortPrivate, bool, isBreakEnabled, &QSerialPortPrivate::setBindableBreakEnabled, false) bool waitForReadyRead(int msec)
bool setParity(QSerialPort::Parity parity)
void newDataArrived(const char *bytes, int length)
bool setBreakEnabled(bool set)
Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QSerialPortPrivate, QSerialPort::FlowControl, flowControl, &QSerialPortPrivate::setBindableFlowControl, QSerialPort::NoFlowControl) bool setBindableBreakEnabled(bool isBreakEnabled_)
Provides functions to access serial ports.
DataBits
This enum describes the number of data bits used.
Parity
This enum describes the parity scheme used.
SerialPortError
This enum describes the errors that may be contained by the QSerialPort::error property.
StopBits
This enum describes the number of stop bits used.
FlowControl
This enum describes the flow control used.
constexpr qint64 DEFAULT_WRITE_BUFFER_SIZE
constexpr qint64 MAX_READ_SIZE
constexpr int MIN_READ_TIMEOUT
constexpr int DEFAULT_READ_TIMEOUT
constexpr int EMIT_THRESHOLD
constexpr int INVALID_DEVICE_ID
constexpr qint64 DEFAULT_READ_BUFFER_SIZE
constexpr int CLOSE_WRITE_TIMEOUT
constexpr int DEFAULT_WRITE_TIMEOUT