summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2019-06-07 13:50:18 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2019-06-07 13:50:18 +0200
commit30480ad795c3b7c9680b51f03a301dd67e277036 (patch)
treec5860d15b9d032e2c4c1b48c5dd744b11e0fb28d /src
parent0224db0be61f00b4af28ea57baef7c37c4e8ffae (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.cpp14
-rw-r--r--src/serialbus/qmodbusdevice.h2
-rw-r--r--src/serialbus/qmodbusdevice_p.h2
-rw-r--r--src/serialbus/qmodbusrtuserialmaster_p.h2
-rw-r--r--src/serialbus/qmodbusrtuserialslave_p.h2
-rw-r--r--src/serialbus/qmodbustcpclient_p.h2
-rw-r--r--src/serialbus/qmodbustcpserver_p.h2
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;