summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@theqtcompany.com>2016-03-01 14:27:07 +0100
committerKarsten Heimrich <karsten.heimrich@theqtcompany.com>2016-03-01 14:23:34 +0000
commite40343337940705ceb830f9f20a09084185ab198 (patch)
tree4e02bcafa5bb1b0b1b2d0c98fe9244b3b60e2967
parent75dbf60352157085f106faf88e89e97288217ae2 (diff)
Move clearing or updating values into a common function.
Change-Id: I25ee09e5fe70464048500dc4d376d4e38805ca50 Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
-rw-r--r--src/serialbus/qmodbusrtuserialmaster.cpp7
-rw-r--r--src/serialbus/qmodbusrtuserialmaster_p.h36
-rw-r--r--src/serialbus/qmodbusrtuserialslave.cpp4
-rw-r--r--src/serialbus/qmodbusrtuserialslave_p.h5
4 files changed, 27 insertions, 25 deletions
diff --git a/src/serialbus/qmodbusrtuserialmaster.cpp b/src/serialbus/qmodbusrtuserialmaster.cpp
index 17d12ad..afdcac9 100644
--- a/src/serialbus/qmodbusrtuserialmaster.cpp
+++ b/src/serialbus/qmodbusrtuserialmaster.cpp
@@ -97,12 +97,8 @@ bool QModbusRtuSerialMaster::open()
return true;
Q_D(QModbusRtuSerialMaster);
-
- d->responseBuffer.clear();
-
- d->updateSerialPortConnectionInfo();
if (d->m_serialPort->open(QIODevice::ReadWrite)) {
- d->m_serialPort->clear();
+ d->setupEnvironment();
setState(QModbusDevice::ConnectedState);
} else {
setError(d->m_serialPort->errorString(), QModbusDevice::ConnectionError);
@@ -119,7 +115,6 @@ void QModbusRtuSerialMaster::close()
return;
Q_D(QModbusRtuSerialMaster);
-
if (d->m_serialPort->isOpen())
d->m_serialPort->close();
diff --git a/src/serialbus/qmodbusrtuserialmaster_p.h b/src/serialbus/qmodbusrtuserialmaster_p.h
index 9517777..c3b1b5a 100644
--- a/src/serialbus/qmodbusrtuserialmaster_p.h
+++ b/src/serialbus/qmodbusrtuserialmaster_p.h
@@ -218,32 +218,38 @@ public:
Q_Q(QModbusRtuSerialMaster);
if (q->state() != QModbusDevice::ClosingState)
q->close();
+ m_sendTimer.stop();
+ m_responseTimer.stop();
});
}
- void updateSerialPortConnectionInfo() {
+ void setupEnvironment() {
if (m_serialPort) {
+ m_serialPort->clear();
m_serialPort->setPortName(m_comPort);
m_serialPort->setParity(m_parity);
m_serialPort->setBaudRate(m_baudRate);
m_serialPort->setDataBits(m_dataBits);
m_serialPort->setStopBits(m_stopBits);
+ }
- // According to the Modbus specification, in RTU mode message frames
- // are separated by a silent interval of at least 3.5 character times.
- // Calculate the timeout if we are less than 19200 baud, use a fixed
- // timeout for everything equal or greater than 19200 baud.
- if (m_baudRate < 19200) {
- // Example: 9600 baud, 11 bit per packet -> 872 char/sec
- // so: 1000 ms / 872 char = 1.147 ms/char * 3.5 character
- // Always round up because the spec requests at least 3.5 char.
- m_timeoutThreeDotFiveMs = qCeil(3500. / (qreal(m_baudRate) / 11.));
- } else {
- // The spec recommends a timeout value of 1.750 msec. Without such
- // precise single-shot timers use a approximated value of 1.750 msec.
- m_timeoutThreeDotFiveMs = 2;
- }
+ // According to the Modbus specification, in RTU mode message frames
+ // are separated by a silent interval of at least 3.5 character times.
+ // Calculate the timeout if we are less than 19200 baud, use a fixed
+ // timeout for everything equal or greater than 19200 baud.
+ if (m_baudRate < 19200) {
+ // Example: 9600 baud, 11 bit per packet -> 872 char/sec
+ // so: 1000 ms / 872 char = 1.147 ms/char * 3.5 character
+ // Always round up because the spec requests at least 3.5 char.
+ m_timeoutThreeDotFiveMs = qCeil(3500. / (qreal(m_baudRate) / 11.));
+ } else {
+ // The spec recommends a timeout value of 1.750 msec. Without such
+ // precise single-shot timers use a approximated value of 1.750 msec.
+ m_timeoutThreeDotFiveMs = 2;
}
+
+ responseBuffer.clear();
+ m_state = QModbusRtuSerialMasterPrivate::Idle;
}
void scheduleNextRequest() {
diff --git a/src/serialbus/qmodbusrtuserialslave.cpp b/src/serialbus/qmodbusrtuserialslave.cpp
index 56293b8..718d739 100644
--- a/src/serialbus/qmodbusrtuserialslave.cpp
+++ b/src/serialbus/qmodbusrtuserialslave.cpp
@@ -107,9 +107,8 @@ bool QModbusRtuSerialSlave::open()
return true;
Q_D(QModbusRtuSerialSlave);
- d->updateSerialPortConnectionInfo();
if (d->m_serialPort->open(QIODevice::ReadWrite)) {
- d->m_serialPort->clear();
+ d->setupEnvironment();
setState(QModbusDevice::ConnectedState);
} else {
setError(d->m_serialPort->errorString(), QModbusDevice::ConnectionError);
@@ -126,7 +125,6 @@ void QModbusRtuSerialSlave::close()
return;
Q_D(QModbusRtuSerialSlave);
-
if (d->m_serialPort->isOpen())
d->m_serialPort->close();
diff --git a/src/serialbus/qmodbusrtuserialslave_p.h b/src/serialbus/qmodbusrtuserialslave_p.h
index 49c7b1c..213572c 100644
--- a/src/serialbus/qmodbusrtuserialslave_p.h
+++ b/src/serialbus/qmodbusrtuserialslave_p.h
@@ -321,14 +321,17 @@ public:
});
}
- void updateSerialPortConnectionInfo() {
+ void setupEnvironment() {
if (m_serialPort) {
+ m_serialPort->clear();
m_serialPort->setPortName(m_comPort);
m_serialPort->setParity(m_parity);
m_serialPort->setBaudRate(m_baudRate);
m_serialPort->setDataBits(m_dataBits);
m_serialPort->setStopBits(m_stopBits);
}
+
+ m_requestBuffer.clear();
}
QByteArray m_requestBuffer;;