From 6b14004a6f9cc30ca0d2d7f59094850eedadae62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20La=C3=ADns?= Date: Fri, 26 Jul 2019 15:08:38 +0100 Subject: [PATCH] udev: fix writting to the device MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Filipe LaĆ­ns --- lib/hidapi/udev.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/hidapi/udev.py b/lib/hidapi/udev.py index f0d76d5c..29ecf153 100644 --- a/lib/hidapi/udev.py +++ b/lib/hidapi/udev.py @@ -30,6 +30,7 @@ from __future__ import absolute_import, division, print_function, unicode_litera import os as _os import errno as _errno +from time import sleep from select import select as _select from pyudev import Context as _Context, Monitor as _Monitor, Device as _Device from pyudev import DeviceNotFoundError @@ -261,16 +262,16 @@ def write(device_handle, data): assert data assert isinstance(data, bytes), (repr(data), type(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 + bytes_written = 0 + while(retrycount < 3): + bytes_written = _os.write(device_handle, data) + if bytes_written != len(data): + sleep(0.1) retrycount += 1 - continue + else: + break + if bytes_written != len(data): + raise IOError(_errno.EIO, 'written %d bytes out of expected %d' % (bytes_written, len(data))) def read(device_handle, bytes_count, timeout_ms=-1):