コード例 #1
0
ファイル: FormatFinder.py プロジェクト: shekkbuilder/urh
    def __init__(self, protocol, participants=None, field_types=None):
        """

        :type protocol: urh.signalprocessing.ProtocolAnalyzer.ProtocolAnalyzer
        :param participants:
        """
        if participants is not None:
            protocol.auto_assign_participants(participants)

        self.protocol = protocol
        self.bitvectors = [np.array(msg.decoded_bits, dtype=np.int8) for msg in self.protocol.messages]
        self.len_cluster = self.cluster_lengths()
        self.xor_matrix = self.build_xor_matrix()


        mt = self.protocol.message_types

        field_types = FieldType.load_from_xml() if field_types is None else field_types

        self.preamble_component = Preamble(fieldtypes=field_types, priority=0, messagetypes=mt)
        self.length_component = Length(fieldtypes=field_types, length_cluster=self.len_cluster, priority=1,
                                       predecessors=[self.preamble_component], messagetypes=mt)
        self.address_component = Address(fieldtypes=field_types, xor_matrix=self.xor_matrix, priority=2,
                                         predecessors=[self.preamble_component], messagetypes=mt)
        self.sequence_number_component = SequenceNumber(fieldtypes=field_types, priority=3,
                                                        predecessors=[self.preamble_component])
        self.type_component = Type(priority=4, predecessors=[self.preamble_component])
        self.flags_component = Flags(priority=5, predecessors=[self.preamble_component])
コード例 #2
0
    def test_build_component_order(self):
        expected_default = [
            Preamble(fieldtypes=[]),
            Length(fieldtypes=[], length_cluster=None),
            Address(fieldtypes=[], xor_matrix=None),
            SequenceNumber(fieldtypes=[]),
            Type(),
            Flags()
        ]

        format_finder = FormatFinder(self.protocol)

        for expected, actual in zip(expected_default,
                                    format_finder.build_component_order()):
            assert type(expected) == type(actual)

        expected_swapped = [
            Preamble(fieldtypes=[]),
            Address(fieldtypes=[], xor_matrix=None),
            Length(fieldtypes=[], length_cluster=None),
            SequenceNumber(fieldtypes=[]),
            Type(),
            Flags()
        ]
        format_finder.length_component.priority = 2
        format_finder.address_component.priority = 1

        for expected, actual in zip(expected_swapped,
                                    format_finder.build_component_order()):
            assert type(expected) == type(actual)

        # Test duplicate Priority
        format_finder.sequence_number_component.priority = 4
        with self.assertRaises(ValueError) as context:
            format_finder.build_component_order()
            self.assertTrue('Duplicate priority' in context.exception)
        format_finder.sequence_number_component.priority = 3
        self.assertTrue(format_finder.build_component_order())