trezor: Use composite transport for device detection.

master
slush 6 years ago
parent 3f1604d609
commit 66e3e60370

@ -41,12 +41,6 @@ class Trezor(interface.Device):
@property @property
def _defs(self): def _defs(self):
from . import trezor_defs from . import trezor_defs
# Allow using TREZOR bridge transport (instead of the HID default)
trezor_defs.Transport = {
'bridge': trezor_defs.BridgeTransport,
'udp': trezor_defs.UdpTransport,
'hid': trezor_defs.HidTransport,
}[os.environ.get('TREZOR_TRANSPORT', 'hid')]
return trezor_defs return trezor_defs
required_version = '>=1.4.0' required_version = '>=1.4.0'
@ -122,26 +116,27 @@ class Trezor(interface.Device):
def connect(self): def connect(self):
"""Enumerate and connect to the first USB HID interface.""" """Enumerate and connect to the first USB HID interface."""
for transport in self._defs.Transport.enumerate(): transport = self._defs.TrezorDevice.enumerate()
log.debug('transport: %s', transport) if not transport:
for _ in range(5): raise interface.NotFoundError('{} not connected'.format(self))
connection = self._defs.Client(transport)
self._override_pin_handler(connection) log.debug('transports: %s', transport)
self._override_passphrase_handler(connection) for _ in range(5):
self._verify_version(connection) connection = self._defs.Client(transport[0])
self._override_pin_handler(connection)
try: self._override_passphrase_handler(connection)
connection.ping(msg='', pin_protection=True) # unlock PIN self._verify_version(connection)
return connection
except (self._defs.PinException, ValueError) as e: try:
log.error('Invalid PIN: %s, retrying...', e) connection.ping(msg='', pin_protection=True) # unlock PIN
continue return connection
except Exception as e: except (self._defs.PinException, ValueError) as e:
log.exception('ping failed: %s', e) log.error('Invalid PIN: %s, retrying...', e)
connection.close() # so the next HID open() will succeed continue
raise except Exception as e:
log.exception('ping failed: %s', e)
raise interface.NotFoundError('{} not connected'.format(self)) connection.close() # so the next HID open() will succeed
raise
def close(self): def close(self):
"""Close connection.""" """Close connection."""

@ -5,6 +5,4 @@
from trezorlib.client import CallException, PinException from trezorlib.client import CallException, PinException
from trezorlib.client import TrezorClient as Client from trezorlib.client import TrezorClient as Client
from trezorlib.messages import IdentityType, PassphraseAck, PinMatrixAck from trezorlib.messages import IdentityType, PassphraseAck, PinMatrixAck
from trezorlib.transport_bridge import BridgeTransport from trezorlib.device import TrezorDevice
from trezorlib.transport_hid import HidTransport
from trezorlib.transport_udp import UdpTransport

Loading…
Cancel
Save