Skip to content

Commit 8483415

Browse files
committed
Allow UART to go even faster with some janky recursion
1 parent 9820d4d commit 8483415

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

adafruit_bno055.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,9 @@ def _write_register(self, register, data): # pylint: disable=arguments-differ
392392
if not isinstance(data, bytes):
393393
data = bytes([data])
394394
self._uart.write(bytes([0xAA, 0x00, register, len(data)]) + data)
395-
time.sleep(0.01)
395+
now = time.time()
396+
while self._uart.in_waiting < 2 and time.time() - now < 0.25:
397+
pass
396398
resp = self._uart.read(self._uart.in_waiting)
397399
if len(resp) < 2:
398400
raise OSError("UART access error.")
@@ -401,12 +403,27 @@ def _write_register(self, register, data): # pylint: disable=arguments-differ
401403

402404
def _read_register(self, register, length=1): # pylint: disable=arguments-differ
403405
self._uart.write(bytes([0xAA, 0x01, register, length]))
404-
time.sleep(0.01)
406+
now = time.time()
407+
while self._uart.in_waiting < length + 2 and time.time() - now < 0.25:
408+
pass
405409
resp = self._uart.read(self._uart.in_waiting)
410+
411+
if resp[0] != 0xBB: # Recursion
412+
self._uart.write(bytes([0xAA, 0x01, register, length]))
413+
now = time.time()
414+
while self._uart.in_waiting < length + 2 and time.time() - now < 0.25:
415+
pass
416+
resp = self._uart.read(self._uart.in_waiting)
417+
if len(resp) < 2:
418+
raise OSError("UART access error.")
419+
if resp[0] != 0xBB:
420+
raise RuntimeError("UART read error: {}".format(resp[1]))
421+
if length > 1:
422+
return resp[2:]
423+
return int(resp[2])
424+
406425
if len(resp) < 2:
407426
raise OSError("UART access error.")
408-
if resp[0] != 0xBB:
409-
raise RuntimeError("UART read error: {}".format(resp[1]))
410427
if length > 1:
411428
return resp[2:]
412429
return int(resp[2])

examples/bno055_simpletest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
print("Linear acceleration (m/s^2): {}".format(sensor.linear_acceleration))
2323
print("Gravity (m/s^2): {}".format(sensor.gravity))
2424
print()
25-
except RuntimeError:
26-
continue
25+
except RuntimeError as e:
26+
print(e)
2727

2828
time.sleep(1)

0 commit comments

Comments
 (0)