lda: filter reports when waiting for command response

This commit is contained in:
Yann Sionneau 2014-11-28 17:36:26 +01:00 committed by Sebastien Bourdeauducq
parent 075e540032
commit 81ab801fe4

View File

@ -175,8 +175,6 @@ class Lda:
self.write(command, len(data), data) self.write(command, len(data), data)
def get(self, command, length, timeout=1000): def get(self, command, length, timeout=1000):
# FIXME: this can collide with the status reports that the
# device sends out by itself
"""Sends a GET command to read back some value of the Lab Brick device. """Sends a GET command to read back some value of the Lab Brick device.
:param int command: Command ID, most significant bit must be cleared. :param int command: Command ID, most significant bit must be cleared.
@ -187,13 +185,15 @@ class Lda:
""" """
assert not command & 0x80 assert not command & 0x80
status = None
self.write(command, length) self.write(command, length)
buf = ctypes.create_string_buffer(8) buf = ctypes.create_string_buffer(8)
res = self._check_error(hidapi.hid_read_timeout(self._dev, while status != command:
buf, len(buf), timeout)) res = self._check_error(hidapi.hid_read_timeout(self._dev,
assert res == len(buf), res buf, len(buf), timeout))
command, length, data = struct.unpack("BB6s", buf.raw) assert res == len(buf), res
data = data[:length] status, length, data = struct.unpack("BB6s", buf.raw)
data = data[:length]
logger.info("%s %s %r", command, length, data) logger.info("%s %s %r", command, length, data)
return data return data