diff options
author | Karsten Heimrich <karsten.heimrich@qt.io> | 2019-06-07 13:50:18 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2019-06-07 13:50:18 +0200 |
commit | 30480ad795c3b7c9680b51f03a301dd67e277036 (patch) | |
tree | c5860d15b9d032e2c4c1b48c5dd744b11e0fb28d /src | |
parent | 0224db0be61f00b4af28ea57baef7c37c4e8ffae (diff) |
Expose the underling QIODevice used for Modbus communication
Sometimes it is necessary to get the device to set some special
option on the device, like setting the HW flow control (RTS/CTS)
parameters on the QSerialPort etc.
Task-number: QTBUG-75405
Task-number: QTBUG-76232
Change-Id: I20e4824dcb8bde7020972607c6a76a01a5d01fc1
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/serialbus/qmodbusdevice.cpp | 14 | ||||
-rw-r--r-- | src/serialbus/qmodbusdevice.h | 2 | ||||
-rw-r--r-- | src/serialbus/qmodbusdevice_p.h | 2 | ||||
-rw-r--r-- | src/serialbus/qmodbusrtuserialmaster_p.h | 2 | ||||
-rw-r--r-- | src/serialbus/qmodbusrtuserialslave_p.h | 2 | ||||
-rw-r--r-- | src/serialbus/qmodbustcpclient_p.h | 2 | ||||
-rw-r--r-- | src/serialbus/qmodbustcpserver_p.h | 2 |
7 files changed, 25 insertions, 1 deletions
diff --git a/src/serialbus/qmodbusdevice.cpp b/src/serialbus/qmodbusdevice.cpp index 9891d16..1daabcd 100644 --- a/src/serialbus/qmodbusdevice.cpp +++ b/src/serialbus/qmodbusdevice.cpp @@ -337,6 +337,20 @@ QString QModbusDevice::errorString() const } /*! + \since 5.13 + + Returns the underlying \l QIODevice used for ModBus communication or + \c nullptr if the device was not yet fully initialized. + + \note Do not store a pointer to the underlying device, because it can be + invalidated at any point in time. +*/ +QIODevice *QModbusDevice::device() const +{ + return d_func()->device(); +} + +/*! \fn bool QModbusDevice::open() This function is called by connectDevice(). Subclasses must provide diff --git a/src/serialbus/qmodbusdevice.h b/src/serialbus/qmodbusdevice.h index 468fdf4..d25e6d3 100644 --- a/src/serialbus/qmodbusdevice.h +++ b/src/serialbus/qmodbusdevice.h @@ -100,6 +100,8 @@ public: Error error() const; QString errorString() const; + QIODevice *device() const; + Q_SIGNALS: void errorOccurred(QModbusDevice::Error error); void stateChanged(QModbusDevice::State state); diff --git a/src/serialbus/qmodbusdevice_p.h b/src/serialbus/qmodbusdevice_p.h index a845a89..9957b32 100644 --- a/src/serialbus/qmodbusdevice_p.h +++ b/src/serialbus/qmodbusdevice_p.h @@ -79,6 +79,8 @@ public: QString m_networkAddress = QStringLiteral("127.0.0.1"); QHash<int, QVariant> m_userConnectionParams; + + virtual QIODevice *device() const { return nullptr; } }; QT_END_NAMESPACE diff --git a/src/serialbus/qmodbusrtuserialmaster_p.h b/src/serialbus/qmodbusrtuserialmaster_p.h index 9672684..9abd378 100644 --- a/src/serialbus/qmodbusrtuserialmaster_p.h +++ b/src/serialbus/qmodbusrtuserialmaster_p.h @@ -427,6 +427,8 @@ public: return false; } + QIODevice *device() const override { return m_serialPort; } + Timer m_responseTimer; QByteArray m_responseBuffer; diff --git a/src/serialbus/qmodbusrtuserialslave_p.h b/src/serialbus/qmodbusrtuserialslave_p.h index da59e5e..f613077 100644 --- a/src/serialbus/qmodbusrtuserialslave_p.h +++ b/src/serialbus/qmodbusrtuserialslave_p.h @@ -355,6 +355,8 @@ public: m_requestBuffer.clear(); } + QIODevice *device() const override { return m_serialPort; } + QByteArray m_requestBuffer; bool m_processesBroadcast = false; QSerialPort *m_serialPort = nullptr; diff --git a/src/serialbus/qmodbustcpclient_p.h b/src/serialbus/qmodbustcpclient_p.h index db1d4e4..43a394e 100644 --- a/src/serialbus/qmodbustcpclient_p.h +++ b/src/serialbus/qmodbustcpclient_p.h @@ -255,6 +255,8 @@ public: inline void incrementTransactionId() { m_transactionId++; } inline int transactionId() const { return m_transactionId; } + QIODevice *device() const override { return m_socket; } + QTcpSocket *m_socket = nullptr; QByteArray responseBuffer; QHash<quint16, QueueElement> m_transactionStore; diff --git a/src/serialbus/qmodbustcpserver_p.h b/src/serialbus/qmodbustcpserver_p.h index 56c45e9..a5cfaeb 100644 --- a/src/serialbus/qmodbustcpserver_p.h +++ b/src/serialbus/qmodbustcpserver_p.h @@ -224,7 +224,7 @@ public: }); } - QTcpServer *m_tcpServer; + QTcpServer *m_tcpServer { nullptr }; QVector<QTcpSocket *> connections; std::unique_ptr<QModbusTcpConnectionObserver> m_observer; |