105 lines
3.4 KiB
Python
105 lines
3.4 KiB
Python
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()
|