1
0

hw plugins: Allow custom enumerate functions

trezor: Adding support for all supported transports (HID, WebUSB, UDP, Bridge)
This commit is contained in:
slush
2018-02-06 19:11:14 +01:00
parent d56dba8039
commit 460e88ee53
3 changed files with 24 additions and 29 deletions

View File

@@ -312,6 +312,8 @@ class DeviceMgr(ThreadJob, PrintError):
# What we recognise. Each entry is a (vendor_id, product_id)
# pair.
self.recognised_hardware = set()
# Custom enumerate functions for devices we don't know about.
self.enumerate_func = set()
# For synchronization
self.lock = threading.RLock()
self.hid_lock = threading.RLock()
@@ -334,6 +336,9 @@ class DeviceMgr(ThreadJob, PrintError):
for pair in device_pairs:
self.recognised_hardware.add(pair)
def register_enumerate_func(self, func):
self.enumerate_func.add(func)
def create_client(self, device, handler, plugin):
# Get from cache first
client = self.client_lookup(device.id_)
@@ -509,6 +514,7 @@ class DeviceMgr(ThreadJob, PrintError):
self.print_error("scanning devices...")
with self.hid_lock:
hid_list = hid.enumerate(0, 0)
# First see what's connected that we know about
devices = []
for d in hid_list:
@@ -524,6 +530,10 @@ class DeviceMgr(ThreadJob, PrintError):
devices.append(Device(d['path'], interface_number,
id_, product_key, usage_page))
# Let plugin handlers enumerate devices we don't know about
for f in self.enumerate_func:
devices.extend(f())
# Now find out what was disconnected
pairs = [(dev.path, dev.id_) for dev in devices]
disconnected_ids = []