Skip to content

Commit bf2df37

Browse files
improve error logging and close old serial port on reader reconnect
1 parent 68e2f04 commit bf2df37

2 files changed

Lines changed: 11 additions & 1 deletion

File tree

src/controllers/rfid_reader_controller.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import time
22
import socket
33
import logging
4+
from os.path import exists
45
from threading import Thread
56

67
from PyQt6.QtCore import QTimer
@@ -37,9 +38,12 @@ def _run(self, reader):
3738
try:
3839
in_waiting = reader.get_ser_in_waiting()
3940
except OSError as e:
40-
if not scanner_error:
41+
if not exists(reader._usb_id):
4142
logging.error("Card reader disconnected, disabling until reconnection: %s", e)
4243
scanner_error = True
44+
else:
45+
logging.debug("Card reader transient error, retrying: %s", e)
46+
time.sleep(0.2)
4347
continue
4448

4549
if in_waiting >= 14:

src/hardware/rfid_reader.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ def __init__(self, usb_id):
3232
time.sleep(attempt * 0.5)
3333

3434
def _init_pn532(self):
35+
if self._pn532 is not None:
36+
try:
37+
self._pn532._uart.close()
38+
except Exception as e:
39+
logging.warning("Failed to close card reader serial port: %s", e)
40+
self._pn532 = None
3541
uart = serial.Serial(self._usb_id, baudrate=115200, timeout=0.1)
3642
uart.reset_input_buffer()
3743
uart.reset_output_buffer()

0 commit comments

Comments
 (0)