From 014c9505800c4c41bcddcd0a1352d9a959aaf2a7 Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Tue, 21 May 2019 02:35:09 +0100 Subject: [PATCH] remote: usb: print "access denied" error When we get an error with errno 13, it means that the user doesn't have access to the USB device. Rather than silently eating this error and returning -1, print out a message to aid in debugging. Signed-off-by: Sean Cross --- litex/tools/remote/comm_usb.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/litex/tools/remote/comm_usb.py b/litex/tools/remote/comm_usb.py index 53ee4c818..302a4e4e4 100644 --- a/litex/tools/remote/comm_usb.py +++ b/litex/tools/remote/comm_usb.py @@ -111,7 +111,14 @@ class CommUSB: if value is None: raise TypeError return int.from_bytes(value, byteorder="little") - except (usb.core.USBError, TypeError): + except usb.core.USBError as e: + if e.errno == 13: + print("Access Denied. Maybe try using sudo?") + self.close() + self.open() + if depth < self.MAX_RECURSION_COUNT: + return self.usb_read(addr, depth+1) + except TypeError: self.close() self.open() if depth < self.MAX_RECURSION_COUNT: @@ -127,7 +134,7 @@ class CommUSB: def usb_write(self, addr, value, depth=0): try: - self.dev.ctrl_transfer(bmRequestType=0x43, bRequest=0x00, + value = self.dev.ctrl_transfer(bmRequestType=0x43, bRequest=0x00, wValue=addr & 0xffff, wIndex=(addr >> 16) & 0xffff, data_or_wLength=bytes([(value >> 0) & 0xff, @@ -135,7 +142,9 @@ class CommUSB: (value >> 16) & 0xff, (value >> 24) & 0xff] ), timeout=None) - except usb.core.USBError: + except usb.core.USBError as e: + if e.errno == 13: + print("Access Denied. Maybe try using sudo?") self.close() self.open() if depth < self.MAX_RECURSION_COUNT: