trezorctl: add USB reset command for stuck devices

pull/25/head
matejcik 5 years ago
parent 50fe0d96bb
commit 34052af9db

@ -774,6 +774,18 @@ def self_test(connect):
return debuglink.self_test(connect())
@cli.command()
def usb_reset():
"""Perform USB reset on a stuck device.
This can fix LIBUSB_ERROR_PIPE and similar errors when connecting to a device
in a messed state.
"""
from trezorlib.transport.webusb import WebUsbTransport
WebUsbTransport.enumerate(usb_reset=True)
#
# Basic coin functions
#

@ -106,7 +106,7 @@ class WebUsbTransport(ProtocolBasedTransport):
return "%s:%s" % (self.PATH_PREFIX, dev_to_str(self.device))
@classmethod
def enumerate(cls) -> Iterable["WebUsbTransport"]:
def enumerate(cls, usb_reset=False) -> Iterable["WebUsbTransport"]:
if cls.context is None:
cls.context = usb1.USBContext()
cls.context.open()
@ -128,6 +128,11 @@ class WebUsbTransport(ProtocolBasedTransport):
devices.append(WebUsbTransport(dev))
except usb1.USBErrorNotSupported:
pass
except usb1.USBErrorPipe:
if usb_reset:
handle = dev.open()
handle.resetDevice()
handle.close()
return devices
def find_debug(self) -> "WebUsbTransport":

Loading…
Cancel
Save