mirror of
https://github.com/jopohl/urh.git
synced 2026-03-21 23:47:05 +01:00
save labelsets and labels to project file
This commit is contained in:
@@ -20,7 +20,7 @@ class FuzzingDialogController(QDialog):
|
||||
block_index = block_index if block_index != -1 else 0
|
||||
self.ui.spinBoxFuzzBlock.setValue(block_index+1)
|
||||
self.ui.spinBoxFuzzBlock.setMinimum(1)
|
||||
self.ui.spinBoxFuzzBlock.setMaximum(self.protocol.num_blocks+1)
|
||||
self.ui.spinBoxFuzzBlock.setMaximum(self.protocol.num_blocks)
|
||||
|
||||
self.proto_view = proto_view
|
||||
self.fuzz_table_model = FuzzingTableModel(self.current_label, proto_view)
|
||||
|
||||
@@ -76,12 +76,17 @@ class ProtocolAnalyzer(object):
|
||||
|
||||
@property
|
||||
def default_labelset(self):
|
||||
if len(self.labelsets) == 0:
|
||||
self.labelsets.append(LabelSet("default"))
|
||||
|
||||
return self.labelsets[0]
|
||||
|
||||
@default_labelset.setter
|
||||
def default_labelset(self, val: LabelSet):
|
||||
self.labelsets[0] = val
|
||||
|
||||
if len(self.labelsets) > 0:
|
||||
self.labelsets[0] = val
|
||||
else:
|
||||
self.labelsets.append(val)
|
||||
|
||||
@property
|
||||
def protocol_labels(self):
|
||||
@@ -594,7 +599,7 @@ class ProtocolAnalyzer(object):
|
||||
labelset.clear()
|
||||
except TypeError:
|
||||
pass # No labelsets defined
|
||||
self.labelsets = None
|
||||
self.labelsets = []
|
||||
self.blocks = None
|
||||
|
||||
def estimate_frequency_for_one(self, sample_rate: float, nbits=42) -> float:
|
||||
@@ -665,9 +670,7 @@ class ProtocolAnalyzer(object):
|
||||
# Save data
|
||||
data_tag = ET.SubElement(root, "blocks")
|
||||
for i, block in enumerate(self.blocks):
|
||||
block_tag = block.to_xml(decoders=decoders, include_labelset=False)
|
||||
block_tag.set("bits", block.plain_bits_str)
|
||||
data_tag.append(block_tag)
|
||||
data_tag.append(block.to_xml(decoders=decoders, include_labelset=False))
|
||||
|
||||
# Save labelsets separatively as not saved in blocks already
|
||||
labelsets_tag = ET.SubElement(root, "labelsets")
|
||||
@@ -677,16 +680,17 @@ class ProtocolAnalyzer(object):
|
||||
return root
|
||||
|
||||
def from_xml(self, protocol_tag: ET.Element, participants, decoders):
|
||||
self.used_symbols.clear()
|
||||
symbols_tag = protocol_tag.find("symbols")
|
||||
if symbols_tag:
|
||||
for symbol_tag in symbols_tag.findall("symbol"):
|
||||
s = Symbol(symbol_tag.get("name"), int(symbol_tag.get("nbits")),
|
||||
int(symbol_tag.get("pulsetype")), int(symbol_tag.get("nsamples")))
|
||||
self.used_symbols.add(s)
|
||||
if protocol_tag:
|
||||
self.used_symbols.clear()
|
||||
symbols_tag = protocol_tag.find("symbols")
|
||||
if symbols_tag:
|
||||
for symbol_tag in symbols_tag.findall("symbol"):
|
||||
s = Symbol(symbol_tag.get("name"), int(symbol_tag.get("nbits")),
|
||||
int(symbol_tag.get("pulsetype")), int(symbol_tag.get("nsamples")))
|
||||
self.used_symbols.add(s)
|
||||
|
||||
block_tags = protocol_tag.find("data").findall("block")
|
||||
block_tags = protocol_tag.find("blocks").findall("block")
|
||||
|
||||
for i, block_tag in enumerate(block_tags):
|
||||
self.blocks[i].from_xml(tag=block_tag, participants=participants, decoders=decoders)
|
||||
self.blocks[i].pause = Formatter.str2val(block_tag.get("pause"), int)
|
||||
for i, block_tag in enumerate(block_tags):
|
||||
self.blocks[i].from_xml(tag=block_tag, participants=participants, decoders=decoders, labelsets=self.labelsets)
|
||||
self.blocks[i].pause = Formatter.str2val(block_tag.get("pause"), int)
|
||||
@@ -623,5 +623,8 @@ class encoding(object):
|
||||
return "0" * (4 * len(inpt.lstrip('0x')) - len(bitstring)) + bitstring
|
||||
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.get_chain() == other.get_chain()
|
||||
|
||||
if __name__ == "__main__":
|
||||
e = encoding()
|
||||
|
||||
@@ -5,6 +5,7 @@ from PyQt5.QtCore import QDir, Qt, QObject, pyqtSignal
|
||||
from PyQt5.QtWidgets import QMessageBox
|
||||
|
||||
from urh import constants
|
||||
from urh.signalprocessing.LabelSet import LabelSet
|
||||
from urh.signalprocessing.Modulator import Modulator
|
||||
from urh.signalprocessing.Participant import Participant
|
||||
from urh.signalprocessing.ProtocoLabel import ProtocolLabel
|
||||
@@ -64,12 +65,7 @@ class ProjectManager(QObject):
|
||||
self.gain = int(gain)
|
||||
self.device = device
|
||||
|
||||
def read_parameters(self):
|
||||
if self.project_file is None:
|
||||
return
|
||||
tree = ET.parse(self.project_file)
|
||||
root = tree.getroot()
|
||||
|
||||
def read_parameters(self, root):
|
||||
self.frequency = float(root.get("frequency", 433.92e6))
|
||||
self.sample_rate = float(root.get("sample_rate", 1e6))
|
||||
self.bandwidth = float(root.get("bandwidth", 1e6))
|
||||
@@ -81,6 +77,22 @@ class ProjectManager(QObject):
|
||||
except AttributeError:
|
||||
self.participants = []
|
||||
|
||||
def read_compare_frame_blocks(self, root, compare_frame_controller):
|
||||
tag = root.find("protocol")
|
||||
cfc = compare_frame_controller
|
||||
cfc.proto_analyzer.from_xml(protocol_tag=tag, participants=self.participants, decoders=cfc.decodings)
|
||||
|
||||
def read_labelsets(self):
|
||||
if self.project_file is None:
|
||||
return None
|
||||
|
||||
tree = ET.parse(self.project_file)
|
||||
root = tree.getroot()
|
||||
try:
|
||||
return [LabelSet.from_xml(lblset_tag) for lblset_tag in root.find("labelsets").findall("labelset")]
|
||||
except AttributeError:
|
||||
return []
|
||||
|
||||
def set_project_folder(self, path, ask_for_new_project=True):
|
||||
if path != self.project_path:
|
||||
self.maincontroller.close_all()
|
||||
@@ -103,9 +115,12 @@ class ProjectManager(QObject):
|
||||
tree = ET.ElementTree(root)
|
||||
tree.write(self.project_file)
|
||||
else:
|
||||
self.read_parameters()
|
||||
tree = ET.parse(self.project_file)
|
||||
root = tree.getroot()
|
||||
|
||||
self.read_parameters(root)
|
||||
self.maincontroller.add_files(self.read_opened_filenames())
|
||||
self.read_compare_frame_groups() # Labels are read out here
|
||||
self.read_compare_frame_groups(root)
|
||||
cfc = self.maincontroller.compare_frame_controller
|
||||
cfc.load_decodings()
|
||||
cfc.fill_decoding_combobox()
|
||||
@@ -113,6 +128,10 @@ class ProjectManager(QObject):
|
||||
for group_id, decoding_index in self.read_decodings().items():
|
||||
cfc.groups[group_id].decoding = cfc.decodings[decoding_index]
|
||||
|
||||
cfc.proto_analyzer.labelsets = self.read_labelsets()
|
||||
cfc.fill_labelset_combobox()
|
||||
self.read_compare_frame_blocks(root=root, compare_frame_controller=cfc)
|
||||
|
||||
#cfc.ui.cbDecoding.setCurrentIndex(index)
|
||||
cfc.updateUI()
|
||||
modulators = self.read_modulators_from_project_file()
|
||||
@@ -288,6 +307,7 @@ class ProjectManager(QObject):
|
||||
group_tag.set("name", str(group.name))
|
||||
group_tag.set("id", str(i))
|
||||
|
||||
# TODO Remove as decoding will be blockwise
|
||||
try:
|
||||
decoding_index = cfc.decodings.index(group.decoding)
|
||||
except ValueError:
|
||||
@@ -301,26 +321,11 @@ class ProjectManager(QObject):
|
||||
show = "1" if proto_frame.show else "0"
|
||||
proto_tag.set("show", show)
|
||||
|
||||
for label in group_tag.findall('label'):
|
||||
group_tag.remove(label)
|
||||
|
||||
root.append(cfc.proto_analyzer.to_xml(decoders=cfc.decodings))
|
||||
|
||||
labelsets_tag = ET.SubElement(root, "labelsets")
|
||||
for labelset in cfc.proto_analyzer.labelsets:
|
||||
labelset_tag = ET.SubElement(root, "labelset")
|
||||
labelset_tag.set("name", str(labelset.name))
|
||||
labelset_tag.set("id", str(labelset.id))
|
||||
|
||||
for plabel in labelset:
|
||||
label_tag = ET.SubElement(labelset_tag, "label")
|
||||
label_tag.set("name", plabel.name)
|
||||
label_tag.set("start", str(plabel.start))
|
||||
label_tag.set("end", str(plabel.end - 1))
|
||||
label_tag.set("display_type_index", str(plabel.display_type_index))
|
||||
|
||||
apply_decoding = "1" if plabel.apply_decoding else "0"
|
||||
|
||||
label_tag.set("color_index", str(plabel.color_index))
|
||||
label_tag.set("apply_decoding", apply_decoding)
|
||||
labelsets_tag.append(labelset.to_xml())
|
||||
|
||||
xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ")
|
||||
with open(self.project_file, "w") as f:
|
||||
@@ -406,13 +411,7 @@ class ProjectManager(QObject):
|
||||
return fileNames
|
||||
return []
|
||||
|
||||
def read_compare_frame_groups(self):
|
||||
if self.project_file is None:
|
||||
return
|
||||
|
||||
tree = ET.parse(self.project_file)
|
||||
root = tree.getroot()
|
||||
|
||||
def read_compare_frame_groups(self, root):
|
||||
proto_tree_model = self.maincontroller.compare_frame_controller.proto_tree_model
|
||||
tree_root = proto_tree_model.rootItem
|
||||
pfi = proto_tree_model.protocol_tree_items
|
||||
@@ -442,20 +441,6 @@ class ProjectManager(QObject):
|
||||
group.appendChild(proto_frame_item)
|
||||
proto_frame_item.show_in_compare_frame = Qt.Checked if show == "1" else Qt.Unchecked
|
||||
|
||||
group = proto_tree_model.groups[int(id)]
|
||||
|
||||
for label_tag in group_tag.iter("label"):
|
||||
name = label_tag.attrib["name"]
|
||||
start = int(label_tag.attrib["start"])
|
||||
end = int(label_tag.attrib["end"])
|
||||
color_index = int(label_tag.attrib["color_index"])
|
||||
|
||||
proto_label = ProtocolLabel(name=name, start=start, end=end, val_type_index= 0, color_index=color_index)
|
||||
proto_label.display_type_index = int(label_tag.attrib["display_type_index"])
|
||||
|
||||
# Todo Remove group.add_label
|
||||
group.add_label(proto_label)
|
||||
|
||||
self.maincontroller.compare_frame_controller.expand_group_node(int(id))
|
||||
|
||||
self.maincontroller.compare_frame_controller.refresh()
|
||||
|
||||
@@ -80,7 +80,7 @@ class TestFuzzing(unittest.TestCase):
|
||||
self.gframe.ui.cbViewType.setCurrentIndex(1) # hex view
|
||||
QTest.qWait(10)
|
||||
|
||||
fdc = FuzzingDialogController(self.gframe.table_model.protocol.blocks[0], 0, 0, parent=self.gframe)
|
||||
fdc = FuzzingDialogController(protocol=self.gframe.table_model.protocol, label_index=0, block_index=0, proto_view=0, parent=self.gframe)
|
||||
fdc.finished.connect(self.gframe.refresh_label_list)
|
||||
fdc.finished.connect(self.gframe.refresh_table)
|
||||
fdc.finished.connect(self.gframe.set_fuzzing_ui_status)
|
||||
@@ -95,7 +95,7 @@ class TestFuzzing(unittest.TestCase):
|
||||
self.gframe.ui.cbViewType.setCurrentIndex(1) # hex view
|
||||
QTest.qWait(10)
|
||||
|
||||
fdc = FuzzingDialogController(self.gframe.table_model.protocol.blocks[0], 0, 1, parent=self.gframe)
|
||||
fdc = FuzzingDialogController(self.gframe.table_model.protocol, 0, 1, 1, parent=self.gframe)
|
||||
fdc.finished.connect(self.gframe.refresh_label_list)
|
||||
fdc.finished.connect(self.gframe.refresh_table)
|
||||
fdc.finished.connect(self.gframe.set_fuzzing_ui_status)
|
||||
|
||||
Reference in New Issue
Block a user