Ejemplo n.º 1
0
 def test_dual_formats_one_right_one_wrong(self):
     samples = [
         0b010001111010110,  # L0
         0b011001000111101,  # L4
         0b000111101011001,  # M3
         0b001101110000101,  # M6
         0b110101100100011,  # Q2
         0b111010110010001,  # Q5
         0b100011110101100,  # H1
         0b101110000101001,  # H7
     ]
     for sample in samples:
         self.assertEqual(sample >> 10, validate_format_info(sample, sample))
         self.assertEqual(sample >> 10, validate_format_info(sample ^ 0b111100000000000, sample ^ 0b000100000011101))
Ejemplo n.º 2
0
    def _read_format_information(self):
        print('ImageScanner._read_format_information: {}'.format(
            self._was_read))
        '''
        Read 5 data bits and 10 BCH bits
        '''
        # Read both locations
        source_1 = (self._get_straight_bits(
            (8, -7), 7, 'd') << 8) + self._get_straight_bits((-1, 8), 8, 'l')
        source_2 = (self._get_straight_bits(
            (7, 8), 8, 'l', (1, )) << 8) + self._get_straight_bits(
                (8, 0), 9, 'd', (6, ))
        print('FI1: ', source_1)
        print('FI2: ', source_2)

        # FORMAT_INFO_MASK = 0b101010000010010
        format_info = validate_format_info(source_1 ^ FORMAT_INFO_MASK,
                                           source_2 ^ FORMAT_INFO_MASK)
        print('format information: {:b}'.format(format_info))
        print('format information: {:b}'.format(format_info >> 3))
        self.info.error_correction_level = ec_level_from_format_info_code(
            format_info >> 3)
        print('EC level: {}'.format(self.info.error_correction_level))
        self.info.mask_id = format_info & 0b111
        return
Ejemplo n.º 3
0
    def _read_format_info(self):
        source_1 = (self._get_straight_bits((8, -7), 7, 'd') << 8) + self._get_straight_bits((-1, 8), 8, 'l')
        source_2 = (self._get_straight_bits((7, 8), 8, 'l', (1,)) << 8) + self._get_straight_bits((8, 0), 9, 'd', (6,))

        format_info = validate_format_info(source_1 ^ FORMAT_INFO_MASK, source_2 ^ FORMAT_INFO_MASK)
        self.info.error_correction_level = ec_level_from_format_info_code(format_info >> 3)
        self.info.mask_id = format_info & 0b111
Ejemplo n.º 4
0
 def test_dual_formats_one_right_one_wrong(self):
     samples = [
         0b010001111010110,  # L0
         0b011001000111101,  # L4
         0b000111101011001,  # M3
         0b001101110000101,  # M6
         0b110101100100011,  # Q2
         0b111010110010001,  # Q5
         0b100011110101100,  # H1
         0b101110000101001,  # H7
     ]
     for sample in samples:
         self.assertEqual(sample >> 10,
                          validate_format_info(sample, sample))
         self.assertEqual(
             sample >> 10,
             validate_format_info(sample ^ 0b111100000000000,
                                  sample ^ 0b000100000011101))
Ejemplo n.º 5
0
 def test_completely_wrong_format_info(self):
     samples = [
         0b010001111010110,  # L0
         0b011001000111101,  # L4
         0b000111101011001,  # M3
         0b001101110000101,  # M6
         0b110101100100011,  # Q2
         0b111010110010001,  # Q5
         0b100011110101100,  # H1
         0b101110000101001,  # H7
     ]
     for sample in samples:
         self.assertNotEqual(sample >> 10, validate_format_info(sample ^ 0b111111000000000))
Ejemplo n.º 6
0
 def test_completely_wrong_format_info(self):
     samples = [
         0b010001111010110,  # L0
         0b011001000111101,  # L4
         0b000111101011001,  # M3
         0b001101110000101,  # M6
         0b110101100100011,  # Q2
         0b111010110010001,  # Q5
         0b100011110101100,  # H1
         0b101110000101001,  # H7
     ]
     for sample in samples:
         self.assertNotEqual(
             sample >> 10, validate_format_info(sample ^ 0b111111000000000))
Ejemplo n.º 7
0
    def test_validate_erroneous_format_info(self):
        single_bit_error = [
            (0b010011111010110, 0b01000),  # L0
            (0b011001010111101, 0b01100),  # L4
            (0b000111001011001, 0b00011),  # M3
            (0b001100110000101, 0b00110),  # M6
        ]
        double_bit_error = [
            (0b110101101000011, 0b11010),  # Q2
            (0b111110110011001, 0b11101),  # Q5
            (0b101011110001100, 0b10001),  # H1
            (0b111110000111001, 0b10111),  # H7
        ]
        triple_bit_error = [
            (0b110101101000010, 0b11010),  # Q2
            (0b111110110011000, 0b11101),  # Q5
            (0b101011110001101, 0b10001),  # H1
            (0b111110000111000, 0b10111),  # H7
        ]

        for sample, correct in single_bit_error + double_bit_error + triple_bit_error:
            self.assertEqual(correct, validate_format_info(sample))
Ejemplo n.º 8
0
    def test_validate_erroneous_format_info(self):
        single_bit_error = [
            (0b010011111010110, 0b01000),  # L0
            (0b011001010111101, 0b01100),  # L4
            (0b000111001011001, 0b00011),  # M3
            (0b001100110000101, 0b00110),  # M6
        ]
        double_bit_error = [
            (0b110101101000011, 0b11010),  # Q2
            (0b111110110011001, 0b11101),  # Q5
            (0b101011110001100, 0b10001),  # H1
            (0b111110000111001, 0b10111),  # H7
        ]
        triple_bit_error = [
            (0b110101101000010, 0b11010),  # Q2
            (0b111110110011000, 0b11101),  # Q5
            (0b101011110001101, 0b10001),  # H1
            (0b111110000111000, 0b10111),  # H7
        ]

        for sample, correct in single_bit_error + double_bit_error + triple_bit_error:
            self.assertEqual(correct, validate_format_info(sample))