From f0c024d064feab70abe93044b6c1f235f9fae482 Mon Sep 17 00:00:00 2001 From: Comma Device Date: Sun, 18 Oct 2026 14:51:10 +0800 Subject: [PATCH] fix: reuse chestnut USB3 handle within modeld --- tinygrad_repo/tinygrad/runtime/support/usb.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tinygrad_repo/tinygrad/runtime/support/usb.py b/tinygrad_repo/tinygrad/runtime/support/usb.py index dec05ba5d..40b1189da 100644 --- a/tinygrad_repo/tinygrad/runtime/support/usb.py +++ b/tinygrad_repo/tinygrad/runtime/support/usb.py @@ -19,6 +19,8 @@ def checked(fn, msg=None): return wrapper class USB3: + _shared_handles: dict[tuple[int, int], "USB3"] = {} + @staticmethod @functools.cache def ctx(): @@ -38,6 +40,11 @@ class USB3: return ret def __init__(self, dev:c.POINTER[libusb.struct_libusb_device], *args, **kwargs): + key = (libusb.libusb_get_bus_number(dev), libusb.libusb_get_device_address(dev)) + if (shared := USB3._shared_handles.get(key)) is not None: + self.__dict__.update(shared.__dict__) + return + self._tags, self._transferred = itertools.count(1), ctypes.c_int(0) self._bulk_buf, self._bulk_mv = alloc_cbuffer(4 << 20) self._ctrl_buf, self._ctrl_mv = alloc_cbuffer(0x1000) @@ -66,6 +73,7 @@ class USB3: checked(libusb.libusb_set_configuration)(self.handle, 1) checked(libusb.libusb_claim_interface)(self.handle, 0) checked(libusb.libusb_set_interface_alt_setting)(self.handle, 0, 0) + USB3._shared_handles[key] = self def control_write(self, request:int, value:int=0, index:int=0, data:bytes=b'', timeout:int=1000): assert len(data) <= len(self._ctrl_mv)