Update UART mode
- Update `_wakeup` to come out of power_down and put the pn532 back into normal mode. - `_wait_ready` now actually checks to see if the pn532 is ready - improve how data is written out
This commit is contained in:
parent
80df78725f
commit
74deaee495
1 changed files with 17 additions and 15 deletions
|
@ -45,24 +45,34 @@ from adafruit_pn532.adafruit_pn532 import PN532, BusyError
|
|||
class PN532_UART(PN532):
|
||||
"""Driver for the PN532 connected over Serial UART"""
|
||||
|
||||
def __init__(self, uart, *, irq=None, reset=None, debug=False):
|
||||
def __init__(self, uart, *, reset=None, debug=False):
|
||||
"""Create an instance of the PN532 class using Serial connection.
|
||||
Optional IRQ pin (not used), reset pin and debugging output.
|
||||
Optional reset pin and debugging output.
|
||||
"""
|
||||
self.debug = debug
|
||||
self._irq = irq
|
||||
self._uart = uart
|
||||
super().__init__(debug=debug, reset=reset)
|
||||
|
||||
def _wakeup(self):
|
||||
"""Send any special commands/data to wake up PN532"""
|
||||
# self._write_frame([_HOSTTOPN532, _COMMAND_SAMCONFIGURATION, 0x01])
|
||||
if self._reset_pin:
|
||||
self._reset_pin.value = True
|
||||
time.sleep(0.01)
|
||||
self.low_power = False
|
||||
self._uart.write(
|
||||
b"\x55\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
) # wake up!
|
||||
self.SAM_configuration()
|
||||
|
||||
def _wait_ready(self, timeout=1):
|
||||
"""Wait `timeout` seconds"""
|
||||
time.sleep(timeout)
|
||||
return True
|
||||
timestamp = time.monotonic()
|
||||
while (time.monotonic() - timestamp) < timeout:
|
||||
if self._uart.in_waiting > 0:
|
||||
return True # No Longer Busy
|
||||
time.sleep(0.01) # lets ask again soon!
|
||||
# Timed out!
|
||||
return False
|
||||
|
||||
def _read_data(self, count):
|
||||
"""Read a specified count of bytes from the PN532."""
|
||||
|
@ -71,17 +81,9 @@ class PN532_UART(PN532):
|
|||
raise BusyError("No data read from PN532")
|
||||
if self.debug:
|
||||
print("Reading: ", [hex(i) for i in frame])
|
||||
else:
|
||||
time.sleep(0.1)
|
||||
return frame
|
||||
|
||||
def _write_data(self, framebytes):
|
||||
"""Write a specified count of bytes to the PN532"""
|
||||
while self._uart.read(
|
||||
1
|
||||
): # this would be a lot nicer if we could query the # of bytes
|
||||
pass
|
||||
self._uart.write(
|
||||
"\x55\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
) # wake up!
|
||||
self._uart.reset_input_buffer()
|
||||
self._uart.write(framebytes)
|
||||
|
|
Loading…
Reference in a new issue