예제 #1
0
    def test_init_linux_stty_set_460800(self, mocker, transport):  # noqa: F811
        mocker.patch('nfc.clf.pn532.Device.__init__').return_value = None
        mocker.patch('nfc.clf.pn532.open').return_value = ["cpuinfo"]
        stty = mocker.patch('os.system')
        stty.side_effect = [-1, 0, None]
        sys.platform = "linux"

        transport.write.return_value = None
        transport.read.side_effect = [
            ACK(), RSP('03 32010607'),                    # GetFirmwareVersion
            ACK(), RSP('15'),                             # SAMConfiguration
            ACK(), RSP('11'),                             # SetSerialBaudrate
        ]
        device = nfc.clf.pn532.init(transport)
        assert isinstance(device, nfc.clf.pn532.Device)
        assert stty.mock_calls == [
            call('stty -F /dev/ttyS0 921600 2> /dev/null'),
            call('stty -F /dev/ttyS0 460800 2> /dev/null'),
            call('stty -F /dev/ttyS0 115200 2> /dev/null'),
        ]
        assert transport.write.mock_calls == [call(_) for _ in [
            HEX(10 * '00') + CMD('02'),                   # GetFirmwareVersion
            HEX(10 * '00') + CMD('14 010000'),            # SAMConfiguration
            HEX(10 * '00') + CMD('10 06'), ACK(),         # SetSerialBaudrate
        ]]
예제 #2
0
    def test_init_raspi_tty_ama(self, mocker, transport):  # noqa: F811
        mocker.patch('nfc.clf.pn532.Device.__init__').return_value = None
        mocker.patch('nfc.clf.pn532.open').return_value = ["Hardware BCM270"]
        type(transport.tty).port = PropertyMock(return_value='/dev/ttyAMA0')
        stty = mocker.patch('os.system')
        stty.return_value = -1

        sys.platform = "linux"
        transport.write.return_value = None
        transport.read.side_effect = [
            ACK(), RSP('03 32010607'),                    # GetFirmwareVersion
            ACK(), RSP('15'),                             # SAMConfiguration
        ]
        device = nfc.clf.pn532.init(transport)
        assert stty.mock_calls == [
            call('stty -F /dev/ttyAMA0 921600 2> /dev/null'),
            call('stty -F /dev/ttyAMA0 460800 2> /dev/null'),
            call('stty -F /dev/ttyAMA0 230400 2> /dev/null'),
            call('stty -F /dev/ttyAMA0 115200 2> /dev/null'),
        ]
        assert isinstance(device, nfc.clf.pn532.Device)
        assert transport.write.mock_calls == [call(_) for _ in [
            HEX(10 * '00') + CMD('02'),                   # GetFirmwareVersion
            HEX(10 * '00') + CMD('14 010000'),            # SAMConfiguration
        ]]
        assert transport.read.mock_calls == [
            call(timeout=100), call(timeout=100),
            call(timeout=100), call(timeout=100),
        ]
예제 #3
0
 def test_sense_dep_reduce_frame_size(self, device):
     device.chipset.transport.read.side_effect = [
         ACK(),
         RSP('47 0001 66f6e98d1c13dfe56de4'
             '0000000732 46666d 010112'
             '020207ff 040164 070103'),  # InJumpForPSL
         ACK(),
         RSP('09 00'),  # WriteRegister
     ]
     target = nfc.clf.RemoteTarget(
         '106A',
         atr_req=HEX('D400 30313233343536373839 00000032'
                     '46666d 010113 020207ff 040132 070107'))
     target = device.sense_dep(target)
     assert isinstance(target, nfc.clf.RemoteTarget)
     assert target.brty == '106A'
     assert target.atr_req == HEX('D400 30313233343536373839 00000022'
                                  '46666d 010113 020207ff 040132 070107')
     assert target.atr_res == HEX('D501 66f6e98d1c13dfe56de4 0000000722'
                                  '46666d 010112 020207ff 040164 070103')
     assert device.chipset.transport.write.mock_calls == [
         call(_) for _ in [
             CMD('46 010006 30313233343536373839 46666d'
                 '010113 020207ff 040132 070107'),  # InJumpForPSL
             CMD('08 63013b'),  # WriteRegister
         ]
     ]
예제 #4
0
    def test_init_raspi_tty_ser(self, mocker, transport):  # noqa: F811
        mocker.patch('nfc.clf.pn532.Device.__init__').return_value = None
        device_tree_model = mocker.mock_open(read_data=b"Raspberry Pi")
        mocker.patch('nfc.clf.pn532.open', device_tree_model)
        type(transport.tty).port = PropertyMock(return_value='/dev/ttyS0')
        stty = mocker.patch('os.system')
        stty.return_value = -1
        sys.platform = "linux"

        transport.write.return_value = None
        transport.read.side_effect = [
            ACK(),
            RSP('03 32010607'),  # GetFirmwareVersion
            ACK(),
            RSP('15'),  # SAMConfiguration
        ]
        device = nfc.clf.pn532.init(transport)
        assert isinstance(device, nfc.clf.pn532.Device)
        assert stty.mock_calls == []
        assert transport.write.mock_calls == [
            call(_) for _ in [
                HEX(10 * '00') + CMD('02'),  # GetFirmwareVersion
                HEX(10 * '00') + CMD('14 010000'),  # SAMConfiguration
            ]
        ]
        assert transport.read.mock_calls == [
            call(timeout=100),
            call(timeout=100),
            call(timeout=100),
            call(timeout=100),
        ]
예제 #5
0
 def test_sense_dep_target_found(self, device):
     atr_req = HEX('D400 30313233343536373839 00000002'
                   '46666d 010113 020207ff 040132 070107')
     device.chipset.transport.read.side_effect = [
         ACK(), RSP('33'),                             # RFConfiguration
         ACK(), RSP('47 0001 66f6e98d1c13dfe56de4'
                    '0000000702 46666d 010112'
                    '020207ff 040164 070103'),         # InJumpForPSL
         ACK(), RSP('09 00'),                          # WriteRegister
     ]
     target = nfc.clf.RemoteTarget('106A', atr_req=atr_req)
     target = device.sense_dep(target)
     assert isinstance(target, nfc.clf.RemoteTarget)
     assert target.brty == '106A'
     assert target.atr_req == atr_req
     assert target.atr_res == HEX(
         'D501 66f6e98d1c13dfe56de4 0000000702'
         '46666d 010112 020207ff 040164 070103')
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('32 020b0b0a'),                           # RFConfiguration
         CMD('46 010006 30313233343536373839 46666d'
             '010113 020207ff 040132 070107'),         # InJumpForPSL
         CMD('08 63013b'),                             # WriteRegister
     ]]
     return target
예제 #6
0
    def test_init_linux_setbaud_rsp_err(self, mocker, transport):  # noqa: F811
        mocker.patch('nfc.clf.pn532.Device.__init__').return_value = None
        mocker.patch('nfc.clf.pn532.open').return_value = ["cpuinfo"]
        stty = mocker.patch('os.system')
        stty.side_effect = [-1, 0, None]
        sys.platform = "linux"

        transport.write.return_value = None
        transport.read.side_effect = [
            ACK(), RSP('03 32010607'),                    # GetFirmwareVersion
            ACK(), RSP('15'),                             # SAMConfiguration
            ACK(), ERR(),                                 # SetSerialBaudrate
        ]
        with pytest.raises(IOError) as excinfo:
            nfc.clf.pn532.init(transport)
        assert excinfo.value.errno == errno.ENODEV
        assert stty.mock_calls == [
            call('stty -F /dev/ttyS0 921600 2> /dev/null'),
            call('stty -F /dev/ttyS0 460800 2> /dev/null'),
            call('stty -F /dev/ttyS0 115200 2> /dev/null'),
        ]
        assert transport.write.mock_calls == [call(_) for _ in [
            HEX(10 * '00') + CMD('02'),                   # GetFirmwareVersion
            HEX(10 * '00') + CMD('14 010000'),            # SAMConfiguration
            HEX(10 * '00') + CMD('10 06'),                # SetSerialBaudrate
        ]]
예제 #7
0
 def test_listen_tta_not_activated(self, device):
     super(TestDevice, self).test_listen_tta_not_activated(device)
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('08 63013f'),                             # WriteRegister
         CMD('8c 0144000102030000 0102030405060708'
             '   090a0b0c0d0e0f10 1100010203040506'
             '   0700000000'),                         # TgInitAsTarget
         ACK(),
     ]]
예제 #8
0
 def test_sense_tta_target_is_tt2(self, device):
     target = super(TestDevice, self).test_sense_tta_target_is_tt2(device)
     assert target.sens_res == HEX('4400')
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('4A 0100'),                               # InListPassiveTarget
         CMD('06 6303'),                               # ReadRegister
         CMD('08 63037f'),                             # WriteRegister
     ]]
     return target
예제 #9
0
 def test_listen_dep_not_activated(self, device):
     super(TestDevice, self).test_listen_dep_not_activated(device)
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('08 63017b6302b06303b0'),                 # WriteRegister
         CMD('8c 0201010102034001 fe01020304050600'
             '   0000000000000000 0001fe0102030405'
             '   0600000000'),                         # TgInitAsTarget
         ACK(),
     ]]
예제 #10
0
 def test_sense_tta_target_is_tt1(self, device):
     target = super(TestDevice, self).test_sense_tta_target_is_tt1(device)
     assert isinstance(target, nfc.clf.RemoteTarget)
     assert target.rid_res == HEX('1148 B2565400')
     assert target.sens_res == HEX('000C')
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('4A 0100'),                               # InListPassiveTarget
         CMD('06 6339'),                               # ReadRegister
         CMD('4A 0104'),                               # InListPassiveTarget
         CMD('40 0178000000000000'),                   # InDataExchange
     ]]
     return target
예제 #11
0
class TestChipset(base_clf_pn53x.TestChipset):
    @pytest.fixture()
    def chipset(self, transport):
        return nfc.clf.pn531.Chipset(transport, logger=nfc.clf.pn531.log)

    @pytest.mark.parametrize("mode, timeout, command", [
        ("normal", 0, CMD('14 01 00')),
        ("virtual", 1, CMD('14 02 01')),
        ("wired", 2, CMD('14 03 02')),
        ("dual", 3, CMD('14 04 03')),
    ])
    def test_sam_configuration(self, chipset, mode, timeout, command):
        chipset.transport.read.side_effect = [ACK(), RSP('15')]
        assert chipset.sam_configuration(mode, timeout) is None
        assert chipset.transport.write.mock_calls == [call(command)]
        assert chipset.transport.read.mock_calls == [call(100), call(100)]

    @pytest.mark.parametrize("wakeup_enable, command", [
        ("INT0", '16 01'),
        ("INT1", '16 02'),
        ("USB", '16 04'),
        ("RF", '16 08'),
        ("HSU", '16 10'),
        ("SPI", '16 20'),
        ("INT0, INT1, RF", '16 0B'),
        ("SPI, HSU, USB", '16 34'),
    ])
    def test_power_down(self, chipset, wakeup_enable, command):
        chipset.transport.read.side_effect = [ACK(), RSP('17 00')]
        assert chipset.power_down(wakeup_enable) is None
        assert chipset.transport.write.mock_calls == [call(CMD(command))]
        assert chipset.transport.read.mock_calls == [call(100), call(100)]
        chipset.transport.read.side_effect = [ACK(), RSP('17 01')]
        with pytest.raises(chipset.Error) as excinfo:
            chipset.power_down(wakeup_enable)
        assert excinfo.value.errno == 1

    def test_tg_init_tama_target(self, chipset):
        chipset.transport.read.side_effect = [ACK(), RSP('8D 01 02 03')]
        mifare = HEX('010203040506')
        felica = HEX('010203040506070809101112131415161718')
        nfcid3 = HEX('01020304050607080910')
        gbytes = HEX('313233')
        args = (0x03, mifare, felica, nfcid3, gbytes, 0.5)
        assert chipset.tg_init_tama_target(*args) == HEX('01 02 03')
        assert chipset.transport.read.mock_calls == [call(100), call(500)]
        assert chipset.transport.write.mock_calls == [
            call(
                CMD('8C 03 010203040506 010203040506070809101112131415161718'
                    '01020304050607080910 313233'))
        ]
예제 #12
0
 def test_sense_tta_large_mem_tt1(self, device):
     device.chipset.transport.read.side_effect = [
         ACK(), RSP('4B 00'),                          # InListPassiveTarget
         ACK(), self.reg_rsp('93'),                    # ReadRegister
         ACK(), RSP('4B 01010c00b2565400'),            # InListPassiveTarget
         ACK(), RSP('41 001248b2565400'),              # InDataExchange
     ]
     assert device.sense_tta(nfc.clf.RemoteTarget('106A')) is None
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('4A 0100'),                               # InListPassiveTarget
         CMD('06 6339'),                               # ReadRegister
         CMD('4A 0104'),                               # InListPassiveTarget
         CMD('40 0178000000000000'),                   # InDataExchange
     ]]
예제 #13
0
    def test_init_sam_cfg_rsp_err(self, mocker, transport):  # noqa: F811
        mocker.patch('nfc.clf.pn532.Device.__init__').return_value = None
        sys.platform = ""

        transport.write.return_value = None
        transport.read.side_effect = [
            ACK(), RSP('03 32010607'),                    # GetFirmwareVersion
            ACK(), ERR(),                                 # SAMConfiguration
        ]
        with pytest.raises(IOError) as excinfo:
            nfc.clf.pn532.init(transport)
        assert excinfo.value.errno == errno.ENODEV
        assert transport.write.mock_calls == [call(_) for _ in [
            HEX(10 * '00') + CMD('02'),                   # GetFirmwareVersion
            HEX(10 * '00') + CMD('14 010000'),            # SAMConfiguration
        ]]
예제 #14
0
 def test_sense_tta_target_is_dep(self, device):
     target = super(TestDevice, self).test_sense_tta_target_is_dep(device)
     assert target.sens_res == HEX('4400')
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('4A 0100'),                               # InListPassiveTarget
     ]]
     return target
예제 #15
0
    def test_init_linux_stty_set_none(self, mocker, transport):  # noqa: F811
        mocker.patch('nfc.clf.pn532.Device.__init__').return_value = None
        mocker.patch('nfc.clf.pn532.open').return_value = ["cpuinfo"]
        mocker.patch('os.system').return_value = -1
        sys.platform = "linux"

        transport.write.return_value = None
        transport.read.side_effect = [
            ACK(), RSP('03 32010607'),                    # GetFirmwareVersion
            ACK(), RSP('15'),                             # SAMConfiguration
        ]
        device = nfc.clf.pn532.init(transport)
        assert isinstance(device, nfc.clf.pn532.Device)
        assert transport.write.mock_calls == [call(_) for _ in [
            HEX(10 * '00') + CMD('02'),                   # GetFirmwareVersion
            HEX(10 * '00') + CMD('14 010000'),            # SAMConfiguration
        ]]
예제 #16
0
 def device(self, transport):
     transport.write.return_value = None
     transport.read.side_effect = [
         ACK(),
         RSP('01 00' + hexlify(bytearray(range(251))).decode()),  # Diagnose
         ACK(),
         RSP('03 0304'),  # GetFirmwareVersion
         ACK(),
         RSP('15'),  # SAMConfiguration
         ACK(),
         RSP('13'),  # SetTAMAParameters
         ACK(),
         RSP('33'),  # RFConfiguration
         ACK(),
         RSP('33'),  # RFConfiguration
         ACK(),
         RSP('33'),  # RFConfiguration
         ACK(),
         RSP('33'),  # RFConfiguration
     ]
     device = nfc.clf.pn531.init(transport)
     device._path = 'usb:001:001'
     assert isinstance(device, nfc.clf.pn531.Device)
     assert isinstance(device.chipset, nfc.clf.pn531.Chipset)
     assert transport.write.mock_calls == [
         call(_) for _ in [
             CMD('00 00' +
                 hexlify(bytearray(range(251))).decode()),  # Diagnose
             CMD('02'),  # GetFirmwareVersion
             CMD('14 0100'),  # SAMConfiguration
             CMD('12 00'),  # SetTAMAParameters
             CMD('32 02000b0a'),  # RFConfiguration
             CMD('32 0400'),  # RFConfiguration
             CMD('32 05010001'),  # RFConfiguration
             CMD('32 0102'),  # RFConfiguration
         ]
     ]
     transport.write.reset_mock()
     transport.read.reset_mock()
     yield device
     transport.write.reset_mock()
     transport.read.reset_mock()
     transport.read.side_effect = [
         ACK(),
         RSP('33'),  # RFConfiguration
     ]
     device.close()
     assert transport.write.mock_calls == [
         call(CMD('32 0102')),  # RFConfiguration
     ]
예제 #17
0
 def test_write_register(self, chipset, args, command):
     chipset.transport.read.side_effect = [ACK(), RSP('09 00')]
     assert chipset.write_register(*args) is None
     chipset.transport.read.side_effect = [ACK(), RSP('09 01')]
     with pytest.raises(nfc.clf.rcs956.Chipset.Error) as excinfo:
         chipset.write_register(*args)
     assert excinfo.value.errno == 0xfe
     assert chipset.transport.read.mock_calls == 2 * [call(100), call(250)]
     assert chipset.transport.write.mock_calls == 2 * [call(CMD(command))]
예제 #18
0
 def test_power_down(self, chipset, wakeup_enable, command):
     chipset.transport.read.side_effect = [ACK(), RSP('17 00')]
     assert chipset.power_down(wakeup_enable) is None
     assert chipset.transport.write.mock_calls == [call(CMD(command))]
     assert chipset.transport.read.mock_calls == [call(100), call(100)]
     chipset.transport.read.side_effect = [ACK(), RSP('17 01')]
     with pytest.raises(chipset.Error) as excinfo:
         chipset.power_down(wakeup_enable)
     assert excinfo.value.errno == 1
예제 #19
0
 def __test_chipset_communication_fails(self, transport):
     transport.write.return_value = None
     transport.read.side_effect = [ACK(), ERR()]       # Diagnose
     chipset = nfc.clf.rcs956.Chipset(transport, logger=nfc.clf.rcs956.log)
     with pytest.raises(IOError):
         nfc.clf.rcs956.Device(chipset, logger=nfc.clf.rcs956.log)
     assert chipset.transport.write.mock_calls == [call(
         CMD('00 00' + ''.join(["%02x" % (x % 256) for x in range(262)])))
     ]
예제 #20
0
 def test_read_register(self, chipset, args, command, response, value):
     chipset.transport.read.side_effect = [ACK(), RSP(response)]
     assert chipset.read_register(*args) == value
     chipset.transport.read.side_effect = [ACK(), RSP('07 01')]
     with pytest.raises(nfc.clf.pn533.Chipset.Error) as excinfo:
         chipset.read_register(*args)
     assert excinfo.value.errno == 1
     assert chipset.transport.read.mock_calls == 2 * [call(100), call(250)]
     assert chipset.transport.write.mock_calls == 2 * [call(CMD(command))]
예제 #21
0
 def test_send_cmd_recv_rsp_tt1_fifo(self, device, cmd, crcb1, crcb2):
     target = self.test_sense_tta_target_is_tt1(device)
     device.chipset.transport.write.reset_mock()
     device.chipset.transport.read.reset_mock()
     device.chipset.transport.read.side_effect = [
         ACK(), self.reg_rsp('00 00 00'),              # ReadRegister
         ACK(), RSP('09 00'),                          # WriteRegister
         ACK(), RSP('33'),                             # RFConfiguration
     ]
     tt1_cmd = HEX('%s 10 0000000000000000' % cmd) + target.rid_res[2:6]
     with pytest.raises(nfc.clf.TransmissionError) as excinfo:
         device.send_cmd_recv_rsp(target, tt1_cmd, 1.0)
     assert str(excinfo.value) == "tt1 command can not be send"
     print(device.chipset.transport.read.call_count)
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('06 6302 6303 6305'),                     # ReadRegister
         CMD('08 630200 630300 630540'),               # WriteRegister
         CMD('32 020a0b0f'),                           # RFConfiguration
     ]]
예제 #22
0
 def test_close_transport_type_not_tty(self, device):
     device.chipset.transport.TYPE = "test"
     transport = device.chipset.transport
     chipset = device.chipset
     transport.read.side_effect = [ACK(), RSP('1700')]
     device.close()
     assert transport.write.mock_calls == [call(ACK()), call(CMD('16b000'))]
     device.chipset = chipset
     device.chipset.transport = transport
     device.chipset.transport.TYPE = "TTY"
예제 #23
0
 def test_sense_tta_target_tt2_cascade(self, device, sdd, sdd_res):
     device.chipset.transport.read.side_effect = [
         ACK(),
         RSP('4B 01 01 0044 00' + sdd),  # InListPassiveTarget
         ACK(),
         self.reg_rsp('FF'),  # ReadRegister
         ACK(),
         RSP('09 00'),  # WriteRegister
     ]
     target = device.sense_tta(nfc.clf.RemoteTarget('106A'))
     assert isinstance(target, nfc.clf.RemoteTarget)
     assert target.sel_res == HEX('00')
     assert target.sdd_res == HEX(sdd_res)
     assert target.sens_res == HEX('0044')  # reversed for PN531
     assert device.chipset.transport.write.mock_calls == [
         call(_) for _ in [
             CMD('4A 0100'),  # InListPassiveTarget
             CMD('06 6303'),  # ReadRegister
             CMD('08 63037f'),  # WriteRegister
         ]
     ]
예제 #24
0
 def test_sense_dep_no_target_found(self, device):
     atr_req = HEX('D400 30313233343536373839 00000000')
     device.chipset.transport.read.side_effect = [
         ACK(), RSP('33'),                             # RFConfiguration
         ACK(), RSP('47 01'),                          # InJumpForPSL
         ACK(), RSP('09 00'),                          # WriteRegister
     ]
     target = nfc.clf.RemoteTarget('106A', atr_req=atr_req)
     assert device.sense_dep(target) is None
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('32 020b0b0a'),                           # RFConfiguration
         CMD('46 01000230313233343536373839'),         # InJumpForPSL
         CMD('08 63013b'),                             # WriteRegister
     ]]
     device.chipset.transport.read.reset_mock()
     device.chipset.transport.write.reset_mock()
     device.chipset.transport.read.side_effect = [
         ACK(), RSP('33'),                             # RFConfiguration
         ACK(), RSP('47 02'),                          # InJumpForPSL
         ACK(), RSP('09 00'),                          # WriteRegister
     ]
     target = nfc.clf.RemoteTarget('106A', atr_req=atr_req)
     assert device.sense_dep(target) is None
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('32 020b0b0a'),                           # RFConfiguration
         CMD('46 01000230313233343536373839'),         # InJumpForPSL
         CMD('08 63013b'),                             # WriteRegister
     ]]
예제 #25
0
 def test_listen_dep_not_activated(self, device):
     device.chipset.transport.read.side_effect = [
         ACK(), RSP('19'),                           # ResetMode
         ACK(), RSP('09 00'),                        # WriteRegister
         ACK(), RSP('33'),                           # RFConfiguration
         ACK(), RSP('13'),                           # SetParameters
         ACK(), RSP('09 00'),                        # WriteRegister
         ACK(), IOError(errno.ETIMEDOUT, ""),        # TgInitAsTarget
     ]
     target = nfc.clf.LocalTarget()
     target.sensf_res = HEX("01 01fe010203040506 0000000000000000 0000")
     target.sens_res = HEX("0101")
     target.sel_res = HEX("40")
     target.sdd_res = HEX("08010203")
     target.atr_res = HEX("D501 d0d1d2d3d4d5d6d7d8d9 0000000800")
     assert device.listen_dep(target, 0.001) is None
     assert device.chipset.transport.read.call_count == 12
     assert device.chipset.transport.write.mock_calls == [call(_) for _ in [
         CMD('18 01'), ACK(),                        # ResetMode
         CMD('08 630b80'),                           # WriteRegister
         CMD('32 82080208'),                         # RFConfiguration
         CMD('12 08'),                               # SetParameters
         CMD('08 63017b6302b06303b0'),               # WriteRegister
         CMD('8c 0201010102034001 fe01020304050600'
             '   0000000000000000 0001fe0102030405'
             '   060000'),                           # TgInitAsTarget
         ACK(),
     ]]
예제 #26
0
 def test_tg_init_as_target(self, chipset):
     chipset.transport.read.side_effect = [ACK(), RSP('8D 01 02 03')]
     mifare = HEX('010203040506')
     felica = HEX('010203040506070809101112131415161718')
     nfcid3 = HEX('01020304050607080910')
     gbytes = HEX('313233')
     args = (0x02, mifare, felica, nfcid3, gbytes, 0.5)
     assert chipset.tg_init_target(*args) == HEX('01 02 03')
     assert chipset.transport.read.mock_calls == [call(100), call(500)]
     assert chipset.transport.write.mock_calls == [
         call(CMD('8C 02 010203040506 010203040506070809101112131415161718'
                  '01020304050607080910 313233'))
     ]
예제 #27
0
    def test_init_linux_version_rsp_err(self, mocker, transport):  # noqa: F811
        mocker.patch('nfc.clf.pn532.Device.__init__').return_value = None
        mocker.patch('nfc.clf.pn532.open').return_value = ["cpuinfo"]
        mocker.patch('os.system').return_value = -1
        sys.platform = "linux"

        transport.write.return_value = None
        transport.read.side_effect = [
            ACK(), ERR(),                                 # GetFirmwareVersion
        ]
        with pytest.raises(IOError) as excinfo:
            nfc.clf.pn532.init(transport)
        assert excinfo.value.errno == errno.ENODEV
        assert transport.write.mock_calls == [call(_) for _ in [
            HEX(10 * '00') + CMD('02'),                   # GetFirmwareVersion
        ]]
예제 #28
0
 def test_send_cmd_recv_rsp_tt1_fifo(self, device, cmd_code, crcb1, crcb2):
     target = self.test_sense_tta_target_is_tt1(device)
     device.chipset.transport.write.reset_mock()
     device.chipset.transport.read.reset_mock()
     device.chipset.transport.read.side_effect = [
         ACK(),
         self.reg_rsp('00 00 00'),  # ReadRegister
         ACK(),
         RSP('09 00'),  # WriteRegister
         ACK(),
         RSP('33'),  # RFConfiguration
         ACK(),
         RSP('09 00'),  # WriteRegister
         ACK(),
         RSP('09 00'),  # WriteRegister
         ACK(),
         self.reg_rsp('05'),  # ReadRegister
         ACK(),
         self.reg_rsp('00 01 1E 7D 08'),  # ReadRegister
     ]
     cmd = HEX('%s 10 0000000000000000' % cmd_code) + target.rid_res[2:6]
     assert device.send_cmd_recv_rsp(target, cmd, 1.0) == HEX('0000')
     assert device.chipset.transport.write.mock_calls == [
         call(_) for _ in [
             CMD('06 6302 6303 6305'),  # ReadRegister
             CMD('08 630200 630300 630540'),  # WriteRegister
             CMD('32 020a0b0f'),  # RFConfiguration
             CMD('08 6339%s 633d07 633104 633d00 630d30'
                 '   633910 633104 633107'
                 '   633900 633104 633107'
                 '   633900 633104 633107'
                 '   633900 633104 633107'
                 '   633900 633104 633107'
                 '   633900 633104 633107'
                 '   633900 633104 633107'
                 '   633900 633104 633107'
                 '   633900 633104 633107'
                 '   6339b2 633104 633107'
                 '   633956 633104 633107'
                 '   633954 633104 633107'
                 '   633900 633104 633107'
                 '   6339%s 633104 633107'
                 '   6339%s 633104 633107'
                 '   633108' % (cmd_code, crcb1, crcb2)),  # WriteRegister
             CMD('08 630d20'),  # WriteRegister
             CMD('06 633a'),  # ReadRegister
             CMD('06 6339 6339 6339 6339 6339'),  # ReadRegister
         ]
     ]
예제 #29
0
 def device(self, transport):
     transport.write.return_value = None
     transport.read.side_effect = [
         ACK(), RSP('19'),                             # ResetMode
         ACK(), RSP('01'
                    '000102030405060708090a0b0c0d0e0f'
                    '101112131415161718191a1b1c1d1e1f'
                    '202122232425262728292a2b2c2d2e2f'
                    '303132333435363738393a3b3c3d3e3f'
                    '404142434445464748494a4b4c4d4e4f'
                    '505152535455565758595a5b5c5d5e5f'
                    '606162636465666768696a6b6c6d6e6f'
                    '707172737475767778797a7b7c7d7e7f'
                    '808182838485868788898a8b8c8d8e8f'
                    '909192939495969798999a9b9c9d9e9f'
                    'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf'
                    'b0b1b2b3b4b5b6b7b8b9babbbcbdbebf'
                    'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf'
                    'd0d1d2d3d4d5d6d7d8d9dadbdcdddedf'
                    'e0e1e2e3e4e5e6e7e8e9eaebecedeeef'
                    'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'
                    '000102030405'),                   # Diagnose
         ACK(), RSP('03 33013007'),                    # GetFirmwareVersion
         ACK(), RSP('19'),                             # ResetMode
         ACK(), RSP('33'),                             # RFConfiguration
         ACK(), RSP('33'),                             # RFConfiguration
         ACK(), RSP('33'),                             # RFConfiguration
         ACK(), RSP('33'),                             # RFConfiguration
         ACK(), RSP('33'),                             # RFConfiguration
         ACK(), RSP('13'),                             # SetParameters
         ACK(), RSP('19'),                             # ResetMode
         ACK(), RSP('09 00'),                          # WriteRegister
     ]
     device = nfc.clf.rcs956.init(transport)
     device._path = 'usb:001:001'
     assert isinstance(device, nfc.clf.rcs956.Device)
     assert isinstance(device.chipset, nfc.clf.rcs956.Chipset)
     assert transport.write.mock_calls == [call(_) for _ in [
         ACK(),
         CMD('18 01'), ACK(),                          # ResetMode
         CMD('00 00'
             '000102030405060708090a0b0c0d0e0f'
             '101112131415161718191a1b1c1d1e1f'
             '202122232425262728292a2b2c2d2e2f'
             '303132333435363738393a3b3c3d3e3f'
             '404142434445464748494a4b4c4d4e4f'
             '505152535455565758595a5b5c5d5e5f'
             '606162636465666768696a6b6c6d6e6f'
             '707172737475767778797a7b7c7d7e7f'
             '808182838485868788898a8b8c8d8e8f'
             '909192939495969798999a9b9c9d9e9f'
             'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf'
             'b0b1b2b3b4b5b6b7b8b9babbbcbdbebf'
             'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf'
             'd0d1d2d3d4d5d6d7d8d9dadbdcdddedf'
             'e0e1e2e3e4e5e6e7e8e9eaebecedeeef'
             'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'
             '000102030405'),                          # Diagnose
         CMD('02'),                                    # GetFirmwareVersion
         CMD('18 01'), ACK(),                          # ResetMode
         CMD('32 0102'),                               # RFConfiguration
         CMD('32 020b0b0a'),                           # RFConfiguration
         CMD('32 0400'),                               # RFConfiguration
         CMD('32 05000001'),                           # RFConfiguration
         CMD('32 0a5af43f114d85616f266287'),           # RFConfiguration
         CMD('12 08'),                                 # SetParameters
         CMD('18 01'), ACK(),                          # ResetMode
         CMD('08 032859'),                             # WriteRegister
     ]]
     transport.write.reset_mock()
     transport.read.reset_mock()
     yield device
     transport.write.reset_mock()
     transport.read.reset_mock()
     transport.read.side_effect = [
         ACK(), RSP('19'),                             # ResetMode
         ACK(), RSP('33'),                             # RFConfiguration
     ]
     device.close()
     assert transport.write.mock_calls == [call(_) for _ in [
         CMD('18 01'), ACK(),                          # ResetMode
         CMD('32 0102'),                               # RFConfiguration
     ]]
예제 #30
0
 def test_read_register(self, chipset, args, command, response, value):
     chipset.transport.read.side_effect = [ACK(), RSP(response)]
     assert chipset.read_register(*args) == value
     assert chipset.transport.read.mock_calls == [call(100), call(250)]
     assert chipset.transport.write.mock_calls == [call(CMD(command))]