diff --git a/src/urh/signalprocessing/ProtocolAnalyzerContainer.py b/src/urh/signalprocessing/ProtocolAnalyzerContainer.py index a4679073..2141f4e2 100644 --- a/src/urh/signalprocessing/ProtocolAnalyzerContainer.py +++ b/src/urh/signalprocessing/ProtocolAnalyzerContainer.py @@ -72,7 +72,7 @@ class ProtocolAnalyzerContainer(ProtocolAnalyzer): except Exception as e: logger.error("Duplicating line ", str(e)) - def fuzz(self, mode: FuzzMode): + def fuzz(self, mode: FuzzMode, default_pause=None): result = [] appd_result = result.append @@ -97,7 +97,8 @@ class ProtocolAnalyzerContainer(ProtocolAnalyzer): for start, end, fuz_val in combination: cpy_bits[start:end] = [True if bit == "1" else False for bit in fuz_val] - fuz_msg = Message(plain_bits=cpy_bits, pause=msg.pause, + pause = default_pause if default_pause is not None else msg.pause + fuz_msg = Message(plain_bits=cpy_bits, pause=pause, rssi=msg.rssi, message_type=msg.message_type.copy_for_fuzzing(), modulator_indx=msg.modulator_indx, decoder=msg.decoder, fuzz_created=True) @@ -106,28 +107,28 @@ class ProtocolAnalyzerContainer(ProtocolAnalyzer): self.messages = result """:type: list of Message """ - def fuzz_successive(self): + def fuzz_successive(self, default_pause=None): """ Führt ein sukzessives Fuzzing über alle aktiven Fuzzing Label durch. Sequentiell heißt, ein Label wird durchgefuzzt und alle anderen Labels bleiben auf Standardwert. Das entspricht dem Vorgang nacheinander immer nur ein Label aktiv zu setzen. """ - self.fuzz(FuzzMode.successive) + self.fuzz(FuzzMode.successive, default_pause=default_pause) - def fuzz_concurrent(self): + def fuzz_concurrent(self, default_pause=None): """ Führt ein gleichzeitiges Fuzzing durch, das heißt bei mehreren Labels pro Message werden alle Labels gleichzeitig iteriert. Wenn ein Label keine FuzzValues mehr übrig hat, wird der erste Fuzzing Value (per Definition der Standardwert) genommen. """ - self.fuzz(FuzzMode.concurrent) + self.fuzz(FuzzMode.concurrent, default_pause=default_pause) - def fuzz_exhaustive(self): + def fuzz_exhaustive(self, default_pause=None): """ Führt ein vollständiges Fuzzing durch. D.h. wenn es mehrere Label pro Message gibt, werden alle möglichen Kombinationen erzeugt (Kreuzprodukt!) """ - self.fuzz(FuzzMode.exhaustive) + self.fuzz(FuzzMode.exhaustive, default_pause=default_pause) def create_fuzzing_label(self, start, end, msg_index) -> ProtocolLabel: fuz_lbl = self.messages[msg_index].message_type.add_protocol_label(start=start, end=end) diff --git a/src/urh/ui/actions/Fuzz.py b/src/urh/ui/actions/Fuzz.py index 45046733..25d839e5 100644 --- a/src/urh/ui/actions/Fuzz.py +++ b/src/urh/ui/actions/Fuzz.py @@ -2,6 +2,7 @@ import copy from PyQt5.QtWidgets import QUndoCommand +from urh import constants from urh.signalprocessing.ProtocolAnalyzerContainer import ProtocolAnalyzerContainer @@ -15,12 +16,16 @@ class Fuzz(QUndoCommand): self.orig_messages = copy.deepcopy(self.proto_analyzer_container.messages) def redo(self): + if constants.SETTINGS.value('use_default_fuzzing_pause', True, bool): + default_pause = constants.SETTINGS.value("default_fuzzing_pause", 10**6, int) + else: + default_pause = None if self.fuz_mode == "Successive": - self.proto_analyzer_container.fuzz_successive() + self.proto_analyzer_container.fuzz_successive(default_pause=default_pause) elif self.fuz_mode == "Concurrent": - self.proto_analyzer_container.fuzz_concurrent() + self.proto_analyzer_container.fuzz_concurrent(default_pause=default_pause) elif self.fuz_mode == "Exhaustive": - self.proto_analyzer_container.fuzz_exhaustive() + self.proto_analyzer_container.fuzz_exhaustive(default_pause=default_pause) def undo(self): self.proto_analyzer_container.messages = self.orig_messages diff --git a/ui/options.ui b/ui/options.ui index 22319e6e..62c2594d 100644 --- a/ui/options.ui +++ b/ui/options.ui @@ -17,7 +17,7 @@ - 1 + 2 @@ -146,7 +146,7 @@ Generation - + 20 @@ -158,6 +158,9 @@ + + <html><head/><body><p>If you disable the default pause, the pause of the fuzzed message will be used.</p></body></html> + Use a default pause for fuzzed messages