1
0

Merge pull request #3863 from slush0/master

trezor: Add support for non-HID devices
This commit is contained in:
ThomasV
2018-02-07 17:03:23 +01:00
committed by GitHub
4 changed files with 431 additions and 444 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 = []