Commit 2de0cd93 authored by Jakob Moser's avatar Jakob Moser
Browse files

Embed reader into PoolPay's CardReader framework

parent 1a9820b9
Loading
Loading
Loading
Loading

better.py

deleted100755 → 0
+0 −27
Original line number Diff line number Diff line
#!/usr/bin/env python3

from pirc522 import RFID

rdr = RFID(pin_irq=None)

# rdr.wait_for_tag()

(error, anticoll_uid) = rdr.anticoll()
uid = tuple(rdr.read_id())
anticoll_uid = (0x88,) + uid[0:3] + (0x8A,)

print("Card read UID: ", [hex(i) for i in uid])
print("Anticoll UID: ", [hex(i) for i in anticoll_uid])
print("Anticoll successful: ", not error)

r = rdr.select_tag(anticoll_uid)
print(r)

rdr.card_auth(rdr.auth_a, 10, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], uid)
print("Reading block 10: " + str(rdr.read(10)))

# Always stop crypto1 when done working
rdr.stop_crypto()

# Calls GPIO cleanup
rdr.cleanup()
+43 −0
Original line number Diff line number Diff line
from collections.abc import Callable, Sequence

from pirc522 import RFID

from poolpay.card.CardReader import CardReader


class Pirc522CardReader(CardReader):
    def __init__(self) -> None:
        self._reader = RFID(pin_irq=None)

    def read_id(self) -> Sequence[int]:
        # TODO Cleanup implementation
        (error, anticoll_uid) = self._reader.anticoll()
        uid = tuple(self._reader.read_id())
        anticoll_uid = (0x88,) + uid[0:3] + (0x8A,)

        print("Card read UID: ", [hex(i) for i in uid])
        print("Anticoll UID: ", [hex(i) for i in anticoll_uid])
        print("Anticoll successful: ", not error)

        return uid

        # TODO See if we can do something with this code
        r = self._reader.select_tag(anticoll_uid)
        print(r)

        self._reader.card_auth(self._reader.auth_a, 10, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], uid)
        print("Reading block 10: " + str(self._reader.read(10)))

    def on_card_presented(self, handle_card: Callable[[CardReader], None]) -> None:
        # TODO Do all this repeatedly in a background thread
        # TODO This only works if the interrupt pin (pin_irq) is correctly initialized
        self._reader.wait_for_tag()
        # TODO Call handle method

    def close(self) -> None:
        # TODO Maybe integrate this better
        # Always stop crypto1 when done working
        self._reader.stop_crypto()

        # Calls GPIO cleanup
        self._reader.cleanup()