Skip to content

Commit 5c75384

Browse files
authored
Fix SPI read_passive_target timeout
1 parent 3f75987 commit 5c75384

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

adafruit_pn532/spi.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@
5151
def reverse_bit(num):
5252
"""Turn an LSB byte to an MSB byte, and vice versa. Used for SPI as
5353
it is LSB for the PN532, but 99% of SPI implementations are MSB only!"""
54-
return int('{:08b}'.format(num)[::-1], 2)
54+
result = 0
55+
for _ in range(8):
56+
result <<= 1
57+
result += (num & 1)
58+
num >>= 1
59+
return result
5560

5661
class PN532_SPI(PN532):
5762
"""Driver for the PN532 connected over SPI. Pass in a hardware or bitbang
@@ -78,11 +83,11 @@ def _wait_ready(self, timeout=1):
7883
timestamp = time.monotonic()
7984
with self._spi as spi:
8085
while (time.monotonic() - timestamp) < timeout:
81-
time.sleep(0.02) # required (not needed when tested on rPi 3)
86+
time.sleep(0.02) # required
8287
spi.write_readinto(status, status) #pylint: disable=no-member
8388
if reverse_bit(status[1]) == 0x01: # LSB data is read in MSB
8489
return True # Not busy anymore!
85-
else: # (not needed when tested on rPi 3)
90+
else:
8691
time.sleep(0.01) # pause a bit till we ask again
8792
# We timed out!
8893
return False
@@ -95,7 +100,7 @@ def _read_data(self, count):
95100
frame[0] = reverse_bit(_SPI_DATAREAD)
96101

97102
with self._spi as spi:
98-
time.sleep(0.02) # required (not needed when tested on rPi 3)
103+
time.sleep(0.02) # required
99104
spi.write_readinto(frame, frame) #pylint: disable=no-member
100105
for i, val in enumerate(frame):
101106
frame[i] = reverse_bit(val) # turn LSB data to MSB
@@ -111,5 +116,5 @@ def _write_data(self, framebytes):
111116
if self.debug:
112117
print("Writing: ", [hex(i) for i in rev_frame])
113118
with self._spi as spi:
114-
time.sleep(0.02) # required (not needed when tested on rPi 3)
119+
time.sleep(0.02) # required
115120
spi.write(bytes(rev_frame)) #pylint: disable=no-member

0 commit comments

Comments
 (0)