import logging import platform import sys import termios import time import traceback from datetime import datetime from pathlib import Path import serial import ndef from src.lib import nfc as nfc from src.lib.nfc.clf import RemoteTarget logging.basicConfig( format="{asctime}:{name}:{levelname}:{message}", datefmt="%Y-%m-%dT%H-%M-%S%z", style="{", level="INFO", handlers=[ logging.StreamHandler(stream=sys.stderr), logging.FileHandler( Path("data/logs") / f"{datetime.now().isoformat().replace(':', '_')}.log", mode="a", encoding="utf-8", delay=False, **({"errors": "surrogateescape"} if sys.version_info.major >= 3 and sys.version_info.minor >= 10 else {}), ), ], force=True, **({"encoding": "utf-8"} if sys.version_info.major >= 3 and sys.version_info.minor >= 10 else {}), **({"errors": "surrogateescape"} if sys.version_info.major >= 3 and sys.version_info.minor >= 10 else {}), ) connected = False is_win = platform.system().lower() == "windows" if is_win: dev_list = ['com:COM5:pn532'] else: #dev_list = ['tty:USB0:pn532', 'tty:USB1:pn532', 'tty:USB2:pn532'] dev_list = ['tty:USB1:pn532', 'tty:USB2:pn532'] while True: try: if not connected: clf = nfc.ContactlessFrontend() for dev in dev_list: connected = clf.open(dev) if connected: print(f"CONNECTED TO {dev}") break else: print(f"UNABLE TO CONNECT TO {dev}") if connected: target = clf.sense(RemoteTarget('106A'), RemoteTarget('106B'), RemoteTarget('212F')) if target is not None: tag = nfc.tag.activate(clf, target) if tag is not None: print(tag) if tag.ndef is not None: if not len(tag.ndef.records): print("EMPTY TAG - WRITING...") if not tag.ndef.is_writeable: print("This Tag is not writeable.") break else: tag.format() #tag.ndef.records = [ndef.TextRecord("Errecinque"),ndef.TextRecord("5812345678")] record=ndef.TextRecord("Errecinque,fixture,5812345678") tag.ndef.records = [record] if tag.ndef.has_changed: print("WRITE ERROR") else: print("WRITE OK") for record in tag.ndef.records: print(record) else: print("ERROR NOT NDEF") else: print("NO TARGET") else: print("NOT CONNECTED") except IOError as io_err: print(f"IOError: {io_err}") traceback.print_exc() connected = False try: clf.close() except termios.error: pass except Exception as e: print(f"General Exception: {e}") traceback.print_exc() connected = False try: clf.close() except termios.error: pass time.sleep(1) print("EXITING") clf.close()