mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-23 17:47:31 +00:00
keepkey: use libusb to enumerate devices instead of hid
This commit is contained in:
parent
ace61d2d20
commit
a8e81c0bd2
1 changed files with 27 additions and 5 deletions
|
@ -9,6 +9,7 @@ from electrum import constants
|
||||||
from electrum.i18n import _
|
from electrum.i18n import _
|
||||||
from electrum.transaction import Transaction, PartialTransaction, PartialTxInput, PartialTxOutput
|
from electrum.transaction import Transaction, PartialTransaction, PartialTxInput, PartialTxOutput
|
||||||
from electrum.keystore import Hardware_KeyStore
|
from electrum.keystore import Hardware_KeyStore
|
||||||
|
from electrum.plugin import Device
|
||||||
from electrum.base_wizard import ScriptTypeNotSupported
|
from electrum.base_wizard import ScriptTypeNotSupported
|
||||||
|
|
||||||
from ..hw_wallet import HW_PluginBase
|
from ..hw_wallet import HW_PluginBase
|
||||||
|
@ -16,8 +17,10 @@ from ..hw_wallet.plugin import (is_any_tx_output_on_change_branch, trezor_valida
|
||||||
get_xpubs_and_der_suffixes_from_txinout)
|
get_xpubs_and_der_suffixes_from_txinout)
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
import usb1
|
||||||
from .client import KeepKeyClient
|
from .client import KeepKeyClient
|
||||||
|
|
||||||
|
|
||||||
# TREZOR initialization methods
|
# TREZOR initialization methods
|
||||||
TIM_NEW, TIM_RECOVER, TIM_MNEMONIC, TIM_PRIVKEY = range(0, 4)
|
TIM_NEW, TIM_RECOVER, TIM_MNEMONIC, TIM_PRIVKEY = range(0, 4)
|
||||||
|
|
||||||
|
@ -84,21 +87,40 @@ class KeepKeyPlugin(HW_PluginBase):
|
||||||
self.types = keepkeylib.client.types
|
self.types = keepkeylib.client.types
|
||||||
self.DEVICE_IDS = (keepkeylib.transport_hid.DEVICE_IDS +
|
self.DEVICE_IDS = (keepkeylib.transport_hid.DEVICE_IDS +
|
||||||
keepkeylib.transport_webusb.DEVICE_IDS)
|
keepkeylib.transport_webusb.DEVICE_IDS)
|
||||||
self.device_manager().register_devices(self.DEVICE_IDS)
|
# only "register" hid device id:
|
||||||
|
self.device_manager().register_devices(keepkeylib.transport_hid.DEVICE_IDS)
|
||||||
|
# for webusb transport, use custom enumerate function:
|
||||||
|
self.device_manager().register_enumerate_func(self.enumerate)
|
||||||
self.libraries_available = True
|
self.libraries_available = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
self.libraries_available = False
|
self.libraries_available = False
|
||||||
|
|
||||||
|
def enumerate(self):
|
||||||
|
from keepkeylib.transport_webusb import WebUsbTransport
|
||||||
|
results = []
|
||||||
|
for dev in WebUsbTransport.enumerate():
|
||||||
|
path = self._dev_to_str(dev)
|
||||||
|
results.append(Device(path=path,
|
||||||
|
interface_number=-1,
|
||||||
|
id_=path,
|
||||||
|
product_key=(dev.getVendorID(), dev.getProductID()),
|
||||||
|
usage_page=0,
|
||||||
|
transport_ui_string=f"webusb:{path}"))
|
||||||
|
return results
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _dev_to_str(dev: "usb1.USBDevice") -> str:
|
||||||
|
return ":".join(str(x) for x in ["%03i" % (dev.getBusNumber(),)] + dev.getPortNumberList())
|
||||||
|
|
||||||
def hid_transport(self, pair):
|
def hid_transport(self, pair):
|
||||||
from keepkeylib.transport_hid import HidTransport
|
from keepkeylib.transport_hid import HidTransport
|
||||||
return HidTransport(pair)
|
return HidTransport(pair)
|
||||||
|
|
||||||
def webusb_transport(self, device):
|
def webusb_transport(self, device):
|
||||||
from keepkeylib.transport_webusb import WebUsbTransport
|
from keepkeylib.transport_webusb import WebUsbTransport
|
||||||
for d in WebUsbTransport.enumerate():
|
for dev in WebUsbTransport.enumerate():
|
||||||
if device.id_.startswith(d.getSerialNumber()):
|
if device.path == self._dev_to_str(dev):
|
||||||
return WebUsbTransport(d)
|
return WebUsbTransport(dev)
|
||||||
return WebUsbTransport(device)
|
|
||||||
|
|
||||||
def _try_hid(self, device):
|
def _try_hid(self, device):
|
||||||
self.logger.info("Trying to connect over USB...")
|
self.logger.info("Trying to connect over USB...")
|
||||||
|
|
Loading…
Add table
Reference in a new issue