String fields (> 4 Bytes) can be switched to numbers

This commit is contained in:
2020-10-10 18:01:21 +02:00
parent da88d8016d
commit 60233792fe
4 changed files with 56 additions and 8 deletions

3
.idea/misc.xml generated
View File

@@ -4,4 +4,7 @@
<option name="languageLevel" value="ES6" /> <option name="languageLevel" value="ES6" />
</component> </component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6" project-jdk-type="Python SDK" />
<component name="PythonCompatibilityInspectionAdvertiser">
<option name="version" value="3" />
</component>
</project> </project>

View File

@@ -187,7 +187,7 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
win = self.dict_windows[position] win = self.dict_windows[position]
for io in self.dict_ios[io_type][position]: # type: list for io in self.dict_ios[io_type][position]: # type: list
# ['name', bitlength, byte_address, 'bmk', bitaddress, 'byteorder', signed] # ['name', bitlength, byte_address, 'bmk', bitaddress, 'byteorder', signed]
value_procimg = ba_values[io[2]:io[2] + io[1]] value_procimg = bytes(ba_values[io[2]:io[2] + io[1]])
if io[4] >= 0: if io[4] >= 0:
# Bit-IO # Bit-IO
value_procimg = bool( value_procimg = bool(

View File

@@ -118,7 +118,13 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
# Bytes or string # Bytes or string
val = QtWidgets.QLineEdit() val = QtWidgets.QLineEdit()
val.setReadOnly(read_only) val.setReadOnly(read_only)
val.setProperty("big_endian", byteorder == "big")
val.setProperty("byte_length", byte_length)
val.setProperty("signed", signed)
val.setProperty("struct_type", "text")
val.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) val.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
val.customContextMenuRequested.connect(self.on_context_menu)
# Set alias to use the same function name on all widget types # Set alias to use the same function name on all widget types
val.setValue = val.setText val.setValue = val.setText
@@ -186,6 +192,14 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
sender = self.sender() sender = self.sender()
men = QtWidgets.QMenu(sender) men = QtWidgets.QMenu(sender)
if sender.property("byte_length") > 4:
# Textbox needs format buttons
act_as_text = QtWidgets.QAction(self.tr("as text"))
men.addAction(act_as_text)
act_as_number = QtWidgets.QAction(self.tr("as number"))
men.addAction(act_as_number)
men.addSeparator()
act_signed = QtWidgets.QAction(self.tr("signed"), men) act_signed = QtWidgets.QAction(self.tr("signed"), men)
act_signed.setCheckable(True) act_signed.setCheckable(True)
act_signed.setChecked(sender.property("signed") or False) act_signed.setChecked(sender.property("signed") or False)
@@ -215,10 +229,17 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
elif rc == act_byteorder: elif rc == act_byteorder:
sender.setProperty("big_endian", act_byteorder.isChecked()) sender.setProperty("big_endian", act_byteorder.isChecked())
sender.setProperty("frm", "{0}{1}".format( if sender.property("frm"):
">" if act_byteorder.isChecked() else "<", sender.setProperty("frm", "{0}{1}".format(
sender.property("struct_type").lower() if act_signed.isChecked() else sender.property("struct_type").upper() ">" if act_byteorder.isChecked() else "<",
)) sender.property("struct_type").lower() if act_signed.isChecked()
else sender.property("struct_type").upper()
))
elif sender.property("byte_length") > 4:
if rc == act_as_text:
sender.setProperty("struct_type", "text")
elif rc == act_as_number:
sender.setProperty("struct_type", "number")
self.set_value(sender.objectName(), actual_value) self.set_value(sender.objectName(), actual_value)
men.deleteLater() men.deleteLater()
@@ -280,6 +301,23 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
return struct.pack(child.property("frm"), int(actual_value)), \ return struct.pack(child.property("frm"), int(actual_value)), \
struct.pack(child.property("frm"), int(last_value)) struct.pack(child.property("frm"), int(last_value))
elif type(actual_value) == str: elif type(actual_value) == str:
if child.property("struct_type") == "number":
try:
actual_value = int(actual_value).to_bytes(
child.property("byte_length"),
byteorder="big" if child.property("big_endian") else "little",
signed=child.property("signed") or False
)
last_value = int(last_value).to_bytes(
child.property("byte_length"),
byteorder="big" if child.property("big_endian") else "little",
signed=child.property("signed") or False
)
return actual_value, last_value
except Exception:
pi.logger.error("Could not convert '{0}' to bytes".format(actual_value))
pass
return actual_value.encode(), last_value.encode() return actual_value.encode(), last_value.encode()
else: else:
return actual_value, last_value return actual_value, last_value
@@ -311,8 +349,15 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
child = self.__qwa[io_name] child = self.__qwa[io_name]
if child.property("frm"): if child.property("frm"):
value = struct.unpack(child.property("frm"), value)[0] value = struct.unpack(child.property("frm"), value)[0]
elif type(value) == bytearray: elif type(value) == bytes:
value = value.decode() if child.property("struct_type") == "number":
value = str(int.from_bytes(
value,
byteorder="big" if child.property("big_endian") else "little",
signed=child.property("signed") or False
))
else:
value = value.decode()
child.setProperty("last_value", value) child.setProperty("last_value", value)
child.setValue(value) child.setValue(value)

View File

@@ -329,7 +329,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
) )
self.lbl_path_revpi.setToolTip(self.lbl_path_revpi.text()) self.lbl_path_revpi.setToolTip(self.lbl_path_revpi.text())
if lst_revpi: if lst_revpi is not None:
lst_revpi.sort() lst_revpi.sort()
for path_file in lst_revpi: for path_file in lst_revpi: