From 4cd6118d1289fd7f72a7f445f6cca9c15391199f Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 5 Aug 2022 18:36:56 +0200 Subject: [PATCH] Fix generating WO registers --- .../tools/connectiontool/modbusrtu.py | 30 +++++++++-------- .../tools/connectiontool/modbustcp.py | 32 +++++++++++-------- .../tools/connectiontool/toolcommon.py | 5 ++- 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/libnymea-modbus/tools/connectiontool/modbusrtu.py b/libnymea-modbus/tools/connectiontool/modbusrtu.py index 340a53b..c15c9ed 100644 --- a/libnymea-modbus/tools/connectiontool/modbusrtu.py +++ b/libnymea-modbus/tools/connectiontool/modbusrtu.py @@ -29,9 +29,11 @@ def writePropertyGetSetMethodDeclarationsRtu(fileDescriptor, registerDefinitions else: writeLine(fileDescriptor, ' /* %s - Address: %s, Size: %s */' % (registerDefinition['description'], registerDefinition['address'], registerDefinition['size'])) - writeLine(fileDescriptor, ' %s %s() const;' % (propertyTyp, propertyName)) + # Check if we require a read method + if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'RO': + writeLine(fileDescriptor, ' %s %s() const;' % (propertyTyp, propertyName)) - # Check if we require a set method + # Check if we require a write method if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'WO': writeLine(fileDescriptor, ' ModbusRtuReply *set%s(%s %s);' % (propertyName[0].upper() + propertyName[1:], propertyTyp, propertyName)) @@ -42,18 +44,20 @@ def writePropertyGetSetMethodImplementationsRtu(fileDescriptor, className, regis for registerDefinition in registerDefinitions: propertyName = registerDefinition['id'] propertyTyp = getCppDataType(registerDefinition) - # Get - if 'enum' in registerDefinition: - writeLine(fileDescriptor, '%s::%s %s::%s() const' % (className, propertyTyp, className, propertyName)) - else: - writeLine(fileDescriptor, '%s %s::%s() const' % (propertyTyp, className, propertyName)) - - writeLine(fileDescriptor, '{') - writeLine(fileDescriptor, ' return m_%s;' % propertyName) - writeLine(fileDescriptor, '}') - writeLine(fileDescriptor) - # Check if we require a set method + # Check if we require a read method + if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'RO': + if 'enum' in registerDefinition: + writeLine(fileDescriptor, '%s::%s %s::%s() const' % (className, propertyTyp, className, propertyName)) + else: + writeLine(fileDescriptor, '%s %s::%s() const' % (propertyTyp, className, propertyName)) + + writeLine(fileDescriptor, '{') + writeLine(fileDescriptor, ' return m_%s;' % propertyName) + writeLine(fileDescriptor, '}') + writeLine(fileDescriptor) + + # Check if we require a write method if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'WO': 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 bcbf73c..2f893c6 100644 --- a/libnymea-modbus/tools/connectiontool/modbustcp.py +++ b/libnymea-modbus/tools/connectiontool/modbustcp.py @@ -27,9 +27,11 @@ def writePropertyGetSetMethodDeclarationsTcp(fileDescriptor, registerDefinitions else: writeLine(fileDescriptor, ' /* %s - Address: %s, Size: %s */' % (registerDefinition['description'], registerDefinition['address'], registerDefinition['size'])) - writeLine(fileDescriptor, ' %s %s() const;' % (propertyTyp, propertyName)) + # Check if we require a read method + if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'RO': + writeLine(fileDescriptor, ' %s %s() const;' % (propertyTyp, propertyName)) - # Check if we require a set method + # Check if we require a write method if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'WO': writeLine(fileDescriptor, ' QModbusReply *set%s(%s %s);' % (propertyName[0].upper() + propertyName[1:], propertyTyp, propertyName)) @@ -40,18 +42,20 @@ def writePropertyGetSetMethodImplementationsTcp(fileDescriptor, className, regis for registerDefinition in registerDefinitions: propertyName = registerDefinition['id'] propertyTyp = getCppDataType(registerDefinition) - # Get - if 'enum' in registerDefinition: - writeLine(fileDescriptor, '%s::%s %s::%s() const' % (className, propertyTyp, className, propertyName)) - else: - writeLine(fileDescriptor, '%s %s::%s() const' % (propertyTyp, className, propertyName)) - - writeLine(fileDescriptor, '{') - writeLine(fileDescriptor, ' return m_%s;' % propertyName) - writeLine(fileDescriptor, '}') - writeLine(fileDescriptor) - # Check if we require a set method + # Check if we require a read method + if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'RO': + if 'enum' in registerDefinition: + writeLine(fileDescriptor, '%s::%s %s::%s() const' % (className, propertyTyp, className, propertyName)) + else: + writeLine(fileDescriptor, '%s %s::%s() const' % (propertyTyp, className, propertyName)) + + writeLine(fileDescriptor, '{') + writeLine(fileDescriptor, ' return m_%s;' % propertyName) + writeLine(fileDescriptor, '}') + writeLine(fileDescriptor) + + # Check if we require a write method if registerDefinition['access'] == 'RW' or registerDefinition['access'] == 'WO': writeLine(fileDescriptor, 'QModbusReply *%s::set%s(%s %s)' % (className, propertyName[0].upper() + propertyName[1:], propertyTyp, propertyName)) writeLine(fileDescriptor, '{') @@ -75,7 +79,7 @@ def writePropertyGetSetMethodImplementationsTcp(fileDescriptor, className, regis def writePropertyUpdateMethodImplementationsTcp(fileDescriptor, className, registerDefinitions): for registerDefinition in registerDefinitions: - if 'readSchedule' in registerDefinition and registerDefinition['readSchedule'] == 'init': + if 'readSchedule' not in registerDefinition or registerDefinition['readSchedule'] == 'init': continue propertyName = registerDefinition['id'] diff --git a/libnymea-modbus/tools/connectiontool/toolcommon.py b/libnymea-modbus/tools/connectiontool/toolcommon.py index 3e96702..4c6c251 100644 --- a/libnymea-modbus/tools/connectiontool/toolcommon.py +++ b/libnymea-modbus/tools/connectiontool/toolcommon.py @@ -352,7 +352,7 @@ def writeBlockGetMethodDeclarations(fileDescriptor, registerDefinitions): def writePropertyUpdateMethodDeclarations(fileDescriptor, registerDefinitions): for registerDefinition in registerDefinitions: - if 'readSchedule' in registerDefinition and registerDefinition['readSchedule'] == 'init': + if 'readSchedule' not in registerDefinition or registerDefinition['readSchedule'] == 'init': continue propertyName = registerDefinition['id'] @@ -427,6 +427,9 @@ def writeBlocksUpdateMethodDeclarations(fileDescriptor, blockDefinitions): def writeRegistersDebugLine(fileDescriptor, debugObjectParamName, registerDefinitions): for registerDefinition in registerDefinitions: + if registerDefinition['access'] == 'WO': + continue + propertyName = registerDefinition['id'] propertyTyp = getCppDataType(registerDefinition) line = ('" - %s: " << %s->%s()' % (registerDefinition['description'], debugObjectParamName, propertyName))