1

Pyusb works incorrectly with my PC. There isn't any topic about my problem on this forum. Details below. I'm trying to run a simple script that should show USB devices info:

import usb.core
import usb.util
for device in usb.core.find(find_all=True):
    print(device)

And after that i get 2 errors: usb.core.USBError: [Errno 2] Entity not found and NotImplementedError: Operation not supported or unimplemented on this platform

log

 DEVICE ID 8087:8008 on Bus 001 Address 003 =================
 bLength                :   0x12 (18 bytes)
 bDescriptorType        :    0x1 Device
 bcdUSB                 :  0x200 USB 2.0
 bDeviceClass           :    0x9 Hub
 bDeviceSubClass        :    0x0
 bDeviceProtocol        :    0x1
 bMaxPacketSize0        :   0x40 (64 bytes)
 idVendor               : 0x8087
 idProduct              : 0x8008
 bcdDevice              :    0x5 Device 0.05
 iManufacturer          :    0x0
 iProduct               :    0x0
 iSerialNumber          :    0x0
 bNumConfigurations     :    0x1
  CONFIGURATION 1: 0 mA ====================================
   bLength              :    0x9 (9 bytes)
   bDescriptorType      :    0x2 Configuration
   wTotalLength         :   0x19 (25 bytes)
   bNumInterfaces       :    0x1
   bConfigurationValue  :    0x1
   iConfiguration       :    0x0
   bmAttributes         :   0xe0 Self Powered, Remote Wakeup
   bMaxPower            :    0x0 (0 mA)
    INTERFACE 0: Hub =======================================
     bLength            :    0x9 (9 bytes)
     bDescriptorType    :    0x4 Interface
     bInterfaceNumber   :    0x0
     bAlternateSetting  :    0x0
     bNumEndpoints      :    0x1
     bInterfaceClass    :    0x9 Hub
     bInterfaceSubClass :    0x0
     bInterfaceProtocol :    0x0
     iInterface         :    0x0
      ENDPOINT 0x81: Interrupt IN ==========================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :   0x81 IN
       bmAttributes     :    0x3 Interrupt
       wMaxPacketSize   :    0x1 (1 bytes)
       bInterval        :    0xc
DEVICE ID 1c4f:0026 on Bus 003 Address 001 =================
 bLength                :   0x12 (18 bytes)
 bDescriptorType        :    0x1 Device
 bcdUSB                 :  0x110 USB 1.1
 bDeviceClass           :    0x0 Specified at interface
 bDeviceSubClass        :    0x0
 bDeviceProtocol        :    0x0
 bMaxPacketSize0        :    0x8 (8 bytes)
 idVendor               : 0x1c4f
 idProduct              : 0x0026
 bcdDevice              :  0x110 Device 1.1
 iManufacturer          :    0x1 Error Accessing String
 iProduct               :    0x2 Error Accessing String
 iSerialNumber          :    0x0
 bNumConfigurations     :    0x1
  CONFIGURATION 1: 98 mA ===================================
   bLength              :    0x9 (9 bytes)
   bDescriptorType      :    0x2 Configuration
   wTotalLength         :   0x3b (59 bytes)
   bNumInterfaces       :    0x2
   bConfigurationValue  :    0x1
   iConfiguration       :    0x0
   bmAttributes         :   0xa0 Bus Powered, Remote Wakeup
   bMaxPower            :   0x31 (98 mA)
    INTERFACE 0: Human Interface Device ====================
     bLength            :    0x9 (9 bytes)
     bDescriptorType    :    0x4 Interface
     bInterfaceNumber   :    0x0
     bAlternateSetting  :    0x0
     bNumEndpoints      :    0x1
     bInterfaceClass    :    0x3 Human Interface Device
     bInterfaceSubClass :    0x1
     bInterfaceProtocol :    0x1
     iInterface         :    0x0
      ENDPOINT 0x81: Interrupt IN ==========================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :   0x81 IN
       bmAttributes     :    0x3 Interrupt
       wMaxPacketSize   :    0x8 (8 bytes)
       bInterval        :    0xa
    INTERFACE 1: Human Interface Device ====================
     bLength            :    0x9 (9 bytes)
     bDescriptorType    :    0x4 Interface
     bInterfaceNumber   :    0x1
     bAlternateSetting  :    0x0
     bNumEndpoints      :    0x1
     bInterfaceClass    :    0x3 Human Interface Device
     bInterfaceSubClass :    0x0
     bInterfaceProtocol :    0x0
     iInterface         :    0x0
      ENDPOINT 0x82: Interrupt IN ==========================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :   0x82 IN
       bmAttributes     :    0x3 Interrupt
       wMaxPacketSize   :    0x3 (3 bytes)
       bInterval        :    0xa
Traceback (most recent call last):
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 746, in __str__
    for configuration in self:
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 1128, in __iter__
    yield Configuration(self, i)
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 603, in __init__
    desc = backend.get_configuration_descriptor(
  File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 773, in get_configuration_descriptor
    _check(self.lib.libusb_get_config_descriptor(
  File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 604, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 2] Entity not found
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "usbtesta.py", line 31, in <module>
    print(device)
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 750, in __str__
    configuration = self.get_active_configuration()
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 909, in get_active_configuration
    return self._ctx.get_active_configuration(self)
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 113, in wrapper
    return f(self, *args, **kwargs)
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 247, in get_active_configuration
    self.managed_open()
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 113, in wrapper
    return f(self, *args, **kwargs)
  File "f:\newpy\venv\lib\site-packages\usb\core.py", line 131, in managed_open
    self.handle = self.backend.open_device(self.dev)
  File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 804, in open_device
    return _DeviceHandle(dev)
  File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 652, in __init__
    _check(_lib.libusb_open(self.devid, byref(self.handle)))
  File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 600, in _check
    raise NotImplementedError(_strerror(ret))
NotImplementedError: Operation not supported or unimplemented on this platform

I saw a similar problem on the internet but there was a trouble about working with a specific USB device and it solved by installing Zadig and choosing the right driver. That way doesn't help me because I work not with some USB device but only with code trying to see a list of devices. The problem is not in PATH. I've tried to run my script with the next configuration: win10, python 3.8.5, and also 3.7.9, pyusb 1.1.0, libusb 1.0.23b1 / libusb-win32. If I run the script with libusb-win32 (libusb0.dll) nothing happens, python just returns an empty line and waits for the new command. If I run a script with libusb, python shows those errors above in this post. The first error disappears when I add to script line set_configuration()

for device in usb.core.find(find_all=True):
    print(device)
    device.set_configuration()

But how to fix the second error? In the same configuration on mac os (pyusb, libusb 1.0, python 3.7.9) this script running successfully

screen_mac

Strangely, but this script running successfully:

for device in usb.core.find(find_all=True):
    print(device.bDeviceClass) # running only if i indicate parameter of variable "device" like here

Also strangely that pyusb finds some USB devices (as u can see in log) but in the end, appears errors. On another PC my script not running at all, errors appear right after start. So how can I see a list of connected devices? I'm glad to get any help

eLencie
  • 11
  • 4

1 Answers1

0

enter image description result  here

    import sys
    import ctypes as ct
    import libusb as usb
    
    
    def print_devs(devs):
    
        path = (ct.c_uint8 * 8)()
    
        i = 0
        while devs[i]:
            dev = devs[i]
    
            desc = usb.device_descriptor()
            r = usb.get_device_descriptor(dev, ct.byref(desc))
            if r < 0:
                print("failed to get device descriptor", file=sys.stderr)
                return
    
            print("{:04x}:{:04x} (bus {:d}, device {:d})".format(
                  desc.idVendor, desc.idProduct,
                  usb.get_bus_number(dev), usb.get_device_address(dev)), end="")
    
            r = usb.get_port_numbers(dev, path, ct.sizeof(path))
            if r > 0:
                print(" path: {:d}".format(path[0]), end="")
                for j in range(1, r):
                    print(".{:d}".format(path[j]), end="")
    
            print()
            i += 1
    
    
    def main():
    
        r = usb.init(None)
        if r < 0:
            return r
    
        try:
            devs = ct.POINTER(ct.POINTER(usb.device))()
            cnt = usb.get_device_list(None, ct.byref(devs))
            if cnt < 0:
                return cnt
    
            print_devs(devs)
    
            usb.free_device_list(devs, 1)
        finally:
            usb.exit(None)
    
        return 0
    
    
    sys.exit(main() or 0)
Arthur Morris
  • 1,253
  • 1
  • 15
  • 21
amigo
  • 1
  • 1
  • Thank you, ur script runs. I'm a beginner in working with USB devices so I also wanna ask, can u give me any advices about what i should to know to work with USB? For example I know what is vendor/product ID, but i don't know another parameters of device so i can't get it by code. Futhermore your code contains 'ctypes' library which is unavailable for me yet. Where can I see all parameters of device like manufacturer, name? – eLencie Oct 01 '20 at 07:49