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 logging import threading import time -import libusb_package import usb.core import usb.util from colors import color @@ -205,16 +204,24 @@ async def open_pyusb_transport(spec): 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 collections import ctypes import platform -import libusb_package import usb1 from colors import color @@ -45,11 +44,16 @@ def load_libusb(): 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):