diff --git a/lib/plugins.py b/lib/plugins.py index 506eb019..3b064a4c 100644 --- a/lib/plugins.py +++ b/lib/plugins.py @@ -227,7 +227,7 @@ class BasePlugin(PrintError): def settings_dialog(self): pass -Device = namedtuple("Device", "path id_ product_key") +Device = namedtuple("Device", "path interface_number id_ product_key") DeviceInfo = namedtuple("DeviceInfo", "device description initialized") class DeviceMgr(PrintError): @@ -423,8 +423,8 @@ class DeviceMgr(PrintError): for d in hid.enumerate(0, 0): product_key = (d['vendor_id'], d['product_id']) if product_key in self.recognised_hardware: - devices.append(Device(d['path'], d['serial_number'], - product_key)) + devices.append(Device(d['path'], d['interface_number'], + d['serial_number'], product_key)) # Now find out what was disconnected pairs = [(dev.path, dev.id_) for dev in devices] diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py index 3d9d4cdb..313650f2 100644 --- a/plugins/trezor/plugin.py +++ b/plugins/trezor/plugin.py @@ -209,16 +209,18 @@ class TrezorCompatiblePlugin(BasePlugin, ThreadJob): wallet.last_operation = self.prevent_timeout def create_client(self, device, handler): - path = device.path - pair = ((None, path) if self.HidTransport._detect_debuglink(path) - else (path, None)) + if device.interface_number == 1: + pair = [None, device.path] + else: + pair = [device.path, None] + try: transport = self.HidTransport(pair) except BaseException as e: # We were probably just disconnected; never mind - self.print_error("cannot connect at", path, str(e)) + self.print_error("cannot connect at", device.path, str(e)) return None - self.print_error("connected to device at", path) + self.print_error("connected to device at", device.path) client = self.client_class(transport, handler, self)