From 155e2f8c4066b1061fd9151563f9b1c7095f72b9 Mon Sep 17 00:00:00 2001 From: Matthias Fulz Date: Fri, 26 Jul 2019 12:27:48 +0200 Subject: [PATCH] fix: #531 #537. Better handling of EPIPE during hid write. --- lib/hidapi/udev.py | 14 +++++++++++--- lib/logitech_receiver/receiver.py | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/hidapi/udev.py b/lib/hidapi/udev.py index abcd8113..f0d76d5c 100644 --- a/lib/hidapi/udev.py +++ b/lib/hidapi/udev.py @@ -260,9 +260,17 @@ def write(device_handle, data): assert device_handle assert data assert isinstance(data, bytes), (repr(data), type(data)) - bytes_written = _os.write(device_handle, data) - if bytes_written != len(data): - raise IOError(_errno.EIO, 'written %d bytes out of expected %d' % (bytes_written, len(data))) + retrycount = 0 + while(True and retrycount < 3): + try: + bytes_written = _os.write(device_handle, data) + if bytes_written != len(data): + raise IOError(_errno.EIO, 'written %d bytes out of expected %d' % (bytes_written, len(data))) + except IOError as e: + if e.errno != _errno.EPIPE: + raise e + retrycount += 1 + continue def read(device_handle, bytes_count, timeout_ms=-1): diff --git a/lib/logitech_receiver/receiver.py b/lib/logitech_receiver/receiver.py index 30ee460a..92414b24 100644 --- a/lib/logitech_receiver/receiver.py +++ b/lib/logitech_receiver/receiver.py @@ -345,7 +345,7 @@ class Receiver(object): self.serial = 0 self.max_devices = 6 - if self.product_id == 'c539' or slef.product_id == 'c53a': + if self.product_id == 'c539' or self.product_id == 'c53a': self.name = 'Lightspeed Receiver' elif self.max_devices == 6: self.name = 'Unifying Receiver'