Skip to content

Commit

Permalink
Make the use of libusb-package optional
Browse files Browse the repository at this point in the history
pyocd/probe/*:
Attempt to import libusb-package's `find()` function, else fall back to using pyusb's `find()` function.
This allows to use pyusb by just removing the project's requirement on libusb-package, as python-pyusb and libusb
packaging go hand-in-hand on Linux distributions.
  • Loading branch information
dvzrv committed Feb 11, 2022
1 parent 6a6fa28 commit 0b980cf
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 10 deletions.
8 changes: 6 additions & 2 deletions pyocd/probe/picoprobe.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
from array import array

from time import sleep
try:
from libusb_package import find as usb_find
except ImportError:
from usb.core import find as usb_find

from usb import core, util
import libusb_package

import platform
import errno
Expand Down Expand Up @@ -108,7 +112,7 @@ def enumerate_picoprobes(cls, uid=None) -> List["PicoLink"]:
"""@brief Find and return all Picoprobes """
try:
# Use a custom matcher to make sure the probe is a Picoprobe and accessible.
return [PicoLink(probe) for probe in libusb_package.find(find_all=True, custom_match=FindPicoprobe(uid))]
return [PicoLink(probe) for probe in usb_find(find_all=True, custom_match=FindPicoprobe(uid))]
except core.NoBackendError:
show_no_libusb_warning()
return []
Expand Down
11 changes: 8 additions & 3 deletions pyocd/probe/pydapaccess/interface/pyusb_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,19 @@
TRACE.setLevel(logging.CRITICAL)

try:
import libusb_package
import usb.core
import usb.util
except ImportError:
IS_AVAILABLE = False
else:
IS_AVAILABLE = True

try:
from libusb_package import find as usb_find
except ImportError:
from usb.core import find as usb_find


class PyUSB(Interface):
"""@brief CMSIS-DAP USB interface class using pyusb for the backend."""

Expand All @@ -70,7 +75,7 @@ def open(self):
assert self.closed is True

# Get device handle
dev = libusb_package.find(custom_match=FindDap(self.serial_number))
dev = usb_find(custom_match=FindDap(self.serial_number))
if dev is None:
raise DAPAccessIntf.DeviceError("Device %s not found" % self.serial_number)

Expand Down Expand Up @@ -161,7 +166,7 @@ def get_all_connected_interfaces():
"""
# find all cmsis-dap devices
try:
all_devices = libusb_package.find(find_all=True, custom_match=FindDap())
all_devices = usb_find(find_all=True, custom_match=FindDap())
except usb.core.NoBackendError:
if not PyUSB.did_show_no_libusb_warning:
LOG.warning("CMSIS-DAPv1 probes may not be detected because no libusb library was found.")
Expand Down
11 changes: 8 additions & 3 deletions pyocd/probe/pydapaccess/interface/pyusb_v2_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,19 @@
TRACE.setLevel(logging.CRITICAL)

try:
import libusb_package
import usb.core
import usb.util
except ImportError:
IS_AVAILABLE = False
else:
IS_AVAILABLE = True

try:
from libusb_package import find as usb_find
except ImportError:
from usb.core import find as usb_find


class PyUSBv2(Interface):
"""@brief CMSIS-DAPv2 interface using pyUSB."""

Expand Down Expand Up @@ -84,7 +89,7 @@ def open(self):
assert self.closed is True

# Get device handle
dev = libusb_package.find(custom_match=HasCmsisDapv2Interface(self.serial_number))
dev = usb_find(custom_match=HasCmsisDapv2Interface(self.serial_number))
if dev is None:
raise DAPAccessIntf.DeviceError("Device %s not found" %
self.serial_number)
Expand Down Expand Up @@ -187,7 +192,7 @@ def get_all_connected_interfaces():
"""@brief Returns all the connected devices with a CMSIS-DAPv2 interface."""
# find all cmsis-dap devices
try:
all_devices = libusb_package.find(find_all=True, custom_match=HasCmsisDapv2Interface())
all_devices = usb_find(find_all=True, custom_match=HasCmsisDapv2Interface())
except usb.core.NoBackendError:
common.show_no_libusb_warning()
return []
Expand Down
7 changes: 5 additions & 2 deletions pyocd/probe/stlink/usb.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.

import libusb_package
try:
from libusb_package import find as usb_find
except ImportError:
from usb.core import find as usb_find
import usb.core
import usb.util
import logging
Expand Down Expand Up @@ -101,7 +104,7 @@ def _usb_match(cls, dev):
@classmethod
def get_all_connected_devices(cls):
try:
devices = libusb_package.find(find_all=True, custom_match=cls._usb_match)
devices = usb_find(find_all=True, custom_match=cls._usb_match)
except usb.core.NoBackendError:
common.show_no_libusb_warning()
return []
Expand Down

0 comments on commit 0b980cf

Please sign in to comment.