1111
1212
1313class Reader (Thread ):
14- def __init__ (self , usb_id = "/dev/ttyUSB0" ):
14+ def __init__ (self , usb_id ):
1515 super ().__init__ ()
1616 self ._usb_id = usb_id
1717 self ._pn532 = None
1818 self ._pending_tag = None
19- if usb_id is None :
20- logging .error ("No card reader USB ID configured, exiting" )
21- sys .exit (1 )
2219 if not exists (usb_id ):
2320 logging .error ("Card reader not found at %s, exiting" , usb_id )
2421 sys .exit (1 )
25- self ._init_pn532 ()
26- logging .info ("Card reader init finished" )
22+ for attempt in range (1 , 6 ):
23+ try :
24+ self ._init_pn532 ()
25+ logging .info ("Card reader init finished" )
26+ break
27+ except Exception as e :
28+ logging .warning ("Card reader init attempt %d/5 failed: %s" , attempt , e )
29+ if attempt == 5 :
30+ logging .error ("Card reader failed to initialize after 5 attempts, exiting" )
31+ sys .exit (1 )
32+ time .sleep (attempt * 0.5 )
2733
2834 def _init_pn532 (self ):
2935 uart = serial .Serial (self ._usb_id , baudrate = 115200 , timeout = 0.1 )
36+ uart .reset_input_buffer ()
37+ uart .reset_output_buffer ()
38+ time .sleep (0.1 )
3039 self ._pn532 = PN532_UART (uart , debug = False )
31- self ._pn532 .SAM_configuration ()
3240
3341 def reconnect (self ):
3442 if not exists (self ._usb_id ):
3543 return False
3644 try :
3745 self ._init_pn532 ()
3846 return True
39- except Exception :
47+ except Exception as e :
48+ logging .warning ("Card reader reconnect attempt failed: %s" , e )
4049 self ._pn532 = None
4150 return False
4251
@@ -47,8 +56,8 @@ def get_ser_in_waiting(self):
4756 raise OSError (f"PN532 error: { e } " )
4857 if uid :
4958 self ._pending_tag = "" .join (f"{ b :02X} " for b in uid )
50- time .sleep (0.01 ) # let any remaining in-flight bytes arrive
51- self ._pn532 ._uart .reset_input_buffer () # and flush them
59+ time .sleep (0.01 )
60+ self ._pn532 ._uart .reset_input_buffer ()
5261 return expected_characters
5362 self ._pending_tag = None
5463 return 0
0 commit comments