transport: make libusb_package optional
diff --git a/bumble/transport/pyusb.py b/bumble/transport/pyusb.py
index e0757fd..f804d66 100644
--- a/bumble/transport/pyusb.py
+++ b/bumble/transport/pyusb.py
@@ -20,7 +20,6 @@
import threading
import time
-import libusb_package
import usb.core
import usb.util
from colors import color
@@ -205,16 +204,24 @@
await self.sink.stop()
usb.util.release_interface(self.device, 0)
+ usb_find = usb.core.find
+ try:
+ import libusb_package
+ except ImportError:
+ logger.debug('libusb_package is not available')
+ else:
+ usb_find = libusb_package.find
+
# Find the device according to the spec moniker
if ':' in spec:
vendor_id, product_id = spec.split(':')
- device = libusb_package.find(
+ device = usb_find(
idVendor=int(vendor_id, 16), idProduct=int(product_id, 16)
)
else:
device_index = int(spec)
devices = list(
- libusb_package.find(
+ usb_find(
find_all=1,
bDeviceClass=USB_DEVICE_CLASS_WIRELESS_CONTROLLER,
bDeviceSubClass=USB_DEVICE_SUBCLASS_RF_CONTROLLER,
diff --git a/bumble/transport/usb.py b/bumble/transport/usb.py
index 173e1b3..928e5b5 100644
--- a/bumble/transport/usb.py
+++ b/bumble/transport/usb.py
@@ -22,7 +22,6 @@
import ctypes
import platform
-import libusb_package
import usb1
from colors import color
@@ -45,11 +44,16 @@
If the library does not exists, do nothing and usb1 will search default system paths
when usb1.USBContext is created.
'''
- if libusb_path := libusb_package.get_library_path():
- logger.debug(f'loading libusb library at {libusb_path}')
- dll_loader = ctypes.WinDLL if platform.system() == 'Windows' else ctypes.CDLL
- libusb_dll = dll_loader(str(libusb_path), use_errno=True, use_last_error=True)
- usb1.loadLibrary(libusb_dll)
+ try:
+ import libusb_package
+ except ImportError:
+ logger.debug('libusb_package is not available')
+ else:
+ if libusb_path := libusb_package.get_library_path():
+ logger.debug(f'loading libusb library at {libusb_path}')
+ dll_loader = ctypes.WinDLL if platform.system() == 'Windows' else ctypes.CDLL
+ libusb_dll = dll_loader(str(libusb_path), use_errno=True, use_last_error=True)
+ usb1.loadLibrary(libusb_dll)
async def open_usb_transport(spec):