From 8e6f96ac2e617e496f0c6f2d33ee696aefafff83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 8 Aug 2022 14:03:47 +0200 Subject: [PATCH] Make access more robust and take care in more situations if a read method is even required --- libnymea-modbus/tools/connectiontool/modbusrtu.py | 8 ++++---- libnymea-modbus/tools/connectiontool/modbustcp.py | 10 +++++----- libnymea-modbus/tools/connectiontool/toolcommon.py | 14 +++++++++++++- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/libnymea-modbus/tools/connectiontool/modbusrtu.py b/libnymea-modbus/tools/connectiontool/modbusrtu.py index c15c9ed..09d74a1 100644 --- a/libnymea-modbus/tools/connectiontool/modbusrtu.py +++ b/libnymea-modbus/tools/connectiontool/modbusrtu.py @@ -30,11 +30,11 @@ def writePropertyGetSetMethodDeclarationsRtu(fileDescriptor, registerDefinitions writeLine(fileDescriptor, ' /* %s - Address: %s, Size: %s */' % (registerDefinition['description'], registerDefinition['address'], registerDefinition['size'])) # Check if we require a read method - if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'RO': + if 'R' in registerDefinition['access']: writeLine(fileDescriptor, ' %s %s() const;' % (propertyTyp, propertyName)) # Check if we require a write method - if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'WO': + if 'W' in registerDefinition['access']: writeLine(fileDescriptor, ' ModbusRtuReply *set%s(%s %s);' % (propertyName[0].upper() + propertyName[1:], propertyTyp, propertyName)) writeLine(fileDescriptor) @@ -46,7 +46,7 @@ def writePropertyGetSetMethodImplementationsRtu(fileDescriptor, className, regis propertyTyp = getCppDataType(registerDefinition) # Check if we require a read method - if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'RO': + if 'R' in registerDefinition['access']: if 'enum' in registerDefinition: writeLine(fileDescriptor, '%s::%s %s::%s() const' % (className, propertyTyp, className, propertyName)) else: @@ -58,7 +58,7 @@ def writePropertyGetSetMethodImplementationsRtu(fileDescriptor, className, regis writeLine(fileDescriptor) # Check if we require a write method - if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'WO': + if 'W' in registerDefinition['access']: writeLine(fileDescriptor, 'ModbusRtuReply *%s::set%s(%s %s)' % (className, propertyName[0].upper() + propertyName[1:], propertyTyp, propertyName)) writeLine(fileDescriptor, '{') diff --git a/libnymea-modbus/tools/connectiontool/modbustcp.py b/libnymea-modbus/tools/connectiontool/modbustcp.py index 2f893c6..c3eef89 100644 --- a/libnymea-modbus/tools/connectiontool/modbustcp.py +++ b/libnymea-modbus/tools/connectiontool/modbustcp.py @@ -28,11 +28,11 @@ def writePropertyGetSetMethodDeclarationsTcp(fileDescriptor, registerDefinitions writeLine(fileDescriptor, ' /* %s - Address: %s, Size: %s */' % (registerDefinition['description'], registerDefinition['address'], registerDefinition['size'])) # Check if we require a read method - if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'RO': + if 'R' in registerDefinition['access']: writeLine(fileDescriptor, ' %s %s() const;' % (propertyTyp, propertyName)) # Check if we require a write method - if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'WO': + if 'W' in registerDefinition['access']: writeLine(fileDescriptor, ' QModbusReply *set%s(%s %s);' % (propertyName[0].upper() + propertyName[1:], propertyTyp, propertyName)) writeLine(fileDescriptor) @@ -44,7 +44,7 @@ def writePropertyGetSetMethodImplementationsTcp(fileDescriptor, className, regis propertyTyp = getCppDataType(registerDefinition) # Check if we require a read method - if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'RO': + if 'R' in registerDefinition['access']: if 'enum' in registerDefinition: writeLine(fileDescriptor, '%s::%s %s::%s() const' % (className, propertyTyp, className, propertyName)) else: @@ -56,7 +56,7 @@ def writePropertyGetSetMethodImplementationsTcp(fileDescriptor, className, regis writeLine(fileDescriptor) # Check if we require a write method - if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'WO': + if 'W' in registerDefinition['access']: writeLine(fileDescriptor, 'QModbusReply *%s::set%s(%s %s)' % (className, propertyName[0].upper() + propertyName[1:], propertyTyp, propertyName)) writeLine(fileDescriptor, '{') @@ -288,7 +288,7 @@ 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, ' emit checkReachabilityFailed();') writeLine(fileDescriptor, ' return;') writeLine(fileDescriptor, ' }') writeLine(fileDescriptor) diff --git a/libnymea-modbus/tools/connectiontool/toolcommon.py b/libnymea-modbus/tools/connectiontool/toolcommon.py index 4c6c251..04f2d41 100644 --- a/libnymea-modbus/tools/connectiontool/toolcommon.py +++ b/libnymea-modbus/tools/connectiontool/toolcommon.py @@ -427,7 +427,7 @@ def writeBlocksUpdateMethodDeclarations(fileDescriptor, blockDefinitions): def writeRegistersDebugLine(fileDescriptor, debugObjectParamName, registerDefinitions): for registerDefinition in registerDefinitions: - if registerDefinition['access'] == 'WO': + if not 'R' in registerDefinition['access']: continue propertyName = registerDefinition['id'] @@ -440,6 +440,9 @@ def writeRegistersDebugLine(fileDescriptor, debugObjectParamName, registerDefini def writePropertyChangedSignals(fileDescriptor, registerDefinitions): for registerDefinition in registerDefinitions: + if not 'R' in registerDefinition['access']: + continue + propertyName = registerDefinition['id'] propertyTyp = getCppDataType(registerDefinition) if propertyTyp == 'QString': @@ -452,6 +455,9 @@ def writePropertyChangedSignals(fileDescriptor, registerDefinitions): def writeProtectedPropertyMembers(fileDescriptor, registerDefinitions): for registerDefinition in registerDefinitions: + if not 'R' in registerDefinition['access']: + continue + propertyName = registerDefinition['id'] propertyTyp = getCppDataType(registerDefinition) if 'defaultValue' in registerDefinition: @@ -463,6 +469,9 @@ def writeProtectedPropertyMembers(fileDescriptor, registerDefinitions): def writePropertyProcessMethodDeclaration(fileDescriptor, registerDefinitions): propertyVariables = [] for registerDefinition in registerDefinitions: + if not 'R' in registerDefinition['access']: + continue + propertyName = registerDefinition['id'] writeLine(fileDescriptor, ' void process%sRegisterValues(const QVector values);' % (propertyName[0].upper() + propertyName[1:])) @@ -472,6 +481,9 @@ def writePropertyProcessMethodDeclaration(fileDescriptor, registerDefinitions): def writePropertyProcessMethodImplementations(fileDescriptor, className, registerDefinitions): propertyVariables = [] for registerDefinition in registerDefinitions: + if not 'R' in registerDefinition['access']: + continue + propertyName = registerDefinition['id'] propertyTyp = getCppDataType(registerDefinition)