From a58c5736b1029ae0dff7218fbdeaab383662b5ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 1 Aug 2022 15:15:40 +0200 Subject: [PATCH] Inform about failed reachable verification --- libnymea-modbus/tools/connectiontool/modbusrtu.py | 7 ++++++- libnymea-modbus/tools/connectiontool/modbustcp.py | 6 +++++- libnymea-modbus/tools/generate-connection.py | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libnymea-modbus/tools/connectiontool/modbusrtu.py b/libnymea-modbus/tools/connectiontool/modbusrtu.py index 030cb6b..340a53b 100644 --- a/libnymea-modbus/tools/connectiontool/modbusrtu.py +++ b/libnymea-modbus/tools/connectiontool/modbusrtu.py @@ -282,17 +282,22 @@ def writeTestReachabilityImplementationsRtu(fileDescriptor, className, registerD writeLine(fileDescriptor, ' m_testRechableReply = read%s();' % (propertyName[0].upper() + propertyName[1:])) writeLine(fileDescriptor, ' if (!m_testRechableReply) {') writeLine(fileDescriptor, ' qCDebug(dc%s()) << "Error occurred verifying reachability by reading \\"%s\\" register";' % (className, checkReachableRegister['description'])) + writeLine(fileDescriptor, ' emit checkReachabilityFailed();') writeLine(fileDescriptor, ' return;') writeLine(fileDescriptor, ' }') writeLine(fileDescriptor) writeLine(fileDescriptor, ' if (m_testRechableReply->isFinished()) {') writeLine(fileDescriptor, ' m_testRechableReply = nullptr;') + writeLine(fileDescriptor, ' emit checkReachabilityFailed();') writeLine(fileDescriptor, ' return;') writeLine(fileDescriptor, ' }') writeLine(fileDescriptor) - writeLine(fileDescriptor, ' connect(m_testRechableReply, &ModbusRtuReply::finished, this, [this, m_testRechableReply](){') + writeLine(fileDescriptor, ' connect(m_testRechableReply, &ModbusRtuReply::finished, this, [this](){') writeLine(fileDescriptor, ' // Note: we don\'t care about the result here, only the error') writeLine(fileDescriptor, ' handleModbusError(m_testRechableReply->error());') + writeLine(fileDescriptor, ' if (m_testRechableReply->error() != ModbusRtuReply::NoError)') + writeLine(fileDescriptor, ' emit checkReachabilityFailed();') + writeLine(fileDescriptor) writeLine(fileDescriptor, ' m_testRechableReply = nullptr;') writeLine(fileDescriptor, ' });') writeLine(fileDescriptor) diff --git a/libnymea-modbus/tools/connectiontool/modbustcp.py b/libnymea-modbus/tools/connectiontool/modbustcp.py index 8cc8ab2..bcbf73c 100644 --- a/libnymea-modbus/tools/connectiontool/modbustcp.py +++ b/libnymea-modbus/tools/connectiontool/modbustcp.py @@ -284,18 +284,22 @@ def writeTestReachabilityImplementationsTcp(fileDescriptor, className, registerD writeLine(fileDescriptor, ' m_testRechableReply = read%s();' % (propertyName[0].upper() + propertyName[1:])) writeLine(fileDescriptor, ' if (!m_testRechableReply) {') writeLine(fileDescriptor, ' qCDebug(dc%s()) << "Error occurred verifying reachability by reading \\"%s\\" register";' % (className, checkReachableRegister['description'])) + writeLine(fileDescriptor, ' emit checkReachabilityFailed();') writeLine(fileDescriptor, ' return;') writeLine(fileDescriptor, ' }') writeLine(fileDescriptor) writeLine(fileDescriptor, ' if (m_testRechableReply->isFinished()) {') writeLine(fileDescriptor, ' m_testRechableReply->deleteLater(); // Broadcast reply returns immediatly') writeLine(fileDescriptor, ' m_testRechableReply = nullptr;') + writeLine(fileDescriptor, ' emit checkReachabilityFailed();') writeLine(fileDescriptor, ' return;') writeLine(fileDescriptor, ' }') writeLine(fileDescriptor) writeLine(fileDescriptor, ' connect(m_testRechableReply, &QModbusReply::finished, this, [this](){') - writeLine(fileDescriptor, ' // Note: we don\'t care about the result here, only the error') writeLine(fileDescriptor, ' handleModbusError(m_testRechableReply->error());') + writeLine(fileDescriptor, ' if (m_testRechableReply->error() != QModbusDevice::NoError)') + writeLine(fileDescriptor, ' emit checkReachabilityFailed();') + writeLine(fileDescriptor) writeLine(fileDescriptor, ' m_testRechableReply->deleteLater();') writeLine(fileDescriptor, ' m_testRechableReply = nullptr;') writeLine(fileDescriptor, ' });') diff --git a/libnymea-modbus/tools/generate-connection.py b/libnymea-modbus/tools/generate-connection.py index 0156fad..c089bec 100644 --- a/libnymea-modbus/tools/generate-connection.py +++ b/libnymea-modbus/tools/generate-connection.py @@ -107,12 +107,14 @@ def writeTcpHeaderFile(): # Write registers value changed signals writeLine(headerFile, 'signals:') writeLine(headerFile, ' void reachableChanged(bool reachable);') + writeLine(headerFile, ' void checkReachabilityFailed();') writeLine(headerFile) writeLine(headerFile, ' void initializationFinished(bool success);') writeLine(headerFile, ' void updateFinished();') writeLine(headerFile) writeLine(headerFile, ' void endiannessChanged(ModbusDataUtils::ByteOrder endianness);') writeLine(headerFile) + writePropertyChangedSignals(headerFile, registerJson['registers']) writeLine(headerFile) if 'blocks' in registerJson: @@ -427,6 +429,7 @@ def writeRtuHeaderFile(): # Write registers value changed signals writeLine(headerFile, 'signals:') writeLine(headerFile, ' void reachableChanged(bool reachable);') + writeLine(headerFile, ' void checkReachabilityFailed();') writeLine(headerFile) writeLine(headerFile, ' void initializationFinished(bool success);') writeLine(headerFile, ' void updateFinished();')