hw plugins: Allow custom enumerate functions
trezor: Adding support for all supported transports (HID, WebUSB, UDP, Bridge)
This commit is contained in:
@@ -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 = []
|
||||
|
||||
Reference in New Issue
Block a user