vpelletier / python-libusb1

Python ctype-based wrapper around libusb1
GNU Lesser General Public License v2.1
168 stars 65 forks source link

UsbDK support #99

Open wynwxst opened 1 month ago

wynwxst commented 1 month ago

Dear vpelletier, Is there any way to force usbDK support? I've seen the pyusb conversation about it here However, when I use python-libusb1 to set option to 1: image I understand UsbDK is unstable but I need to use it for the project I'm working on.

EDIT: libusb_set_option returns -5 and the device I am trying to access is under libusbK

Code:

        mayRaiseUSBError(libusb1.libusb_init(byref(self.__context_p)))
        self.set_option = libusb1.libusb_set_option(self.__context_p,1)
        print(self.set_option)

EDIT: it seems to suddenly now return 0 instead of -5, perhaps because the device isn't connected, I'll check

EDIT: Now it works but at parts requiring libusb_reset_device and then device.close() #usb1.USBDevice, the code randomly breaks off with a chance of moving to the next step ctx.close() # usb1.USBContext before breaking off. Code:

        mayRaiseUSBError(libusb1.libusb_init(byref(self.__context_p)))

        self.set_option = libusb1.libusb_set_option(self.__context_p,1,3)
        assert self.set_option == 0

Threading seems to be somewhat effective if done in a daemon form

vpelletier commented 1 month ago

In the temporary "next" branch, I pushed a few weeks back several libusb features that I was not wrapping yet. One of which is libusb_init_context, exposed as new arguments to USBContext.__init__, especially use_usbdk which takes a boolean (false by default). libusb_init_context allows side-stepping the libusb_set_option variadic topic.

Could you try that branch and report whether it works, and how usable it looks to you ?

One caveat: as this is not released yet, I consider I am still allowed to change the newly introduced API. Basically, the argument name could change or it could have to be provided in another way. But I think I am happy enough with the current implementation.

And on another level: I am currently very busy on a personal level, so I have basically no time to work on the next release. Things should hopefully calm down in the next few months, freeing some time.

wynwxst commented 1 month ago

In the temporary "next" branch, I pushed a few weeks back several libusb features that I was not wrapping yet. One of which is libusb_init_context, exposed as new arguments to USBContext.__init__, especially use_usbdk which takes a boolean (false by default). libusb_init_context allows side-stepping the libusb_set_option variadic topic.

Could you try that branch and report whether it works, and how usable it looks to you ?

One caveat: as this is not released yet, I consider I am still allowed to change the newly introduced API. Basically, the argument name could change or it could have to be provided in another way. But I think I am happy enough with the current implementation.

And on another level: I am currently very busy on a personal level, so I have basically no time to work on the nex

Sure, don't worry about being busy or anything else and focus on whatever you need to. It's also perfectly fine if it changes. I'll let you know how it goes after trying it.

wynwxst commented 1 month ago

In the temporary "next" branch, I pushed a few weeks back several libusb features that I was not wrapping yet. One of which is libusb_init_context, exposed as new arguments to USBContext.__init__, especially use_usbdk which takes a boolean (false by default). libusb_init_context allows side-stepping the libusb_set_option variadic topic.

Could you try that branch and report whether it works, and how usable it looks to you ?

One caveat: as this is not released yet, I consider I am still allowed to change the newly introduced API. Basically, the argument name could change or it could have to be provided in another way. But I think I am happy enough with the current implementation.

And on another level: I am currently very busy on a personal level, so I have basically no time to work on the next release. Things should hopefully calm down in the next few months, freeing some time.

Apologies for the late reply: It doesn't seem to work as now what happens is

libusb: error [windows_set_option] UsbDk backend not available
# error traceback
  result = self.getByVendorIDAndProductID(
    self.open()
mayRaiseUSBError(libusb1.libusb_init_context(
raise __STATUS_TO_EXCEPTION_DICT.get(value, __USBError)(value)
LIBUSB_ERROR_NOT_FOUND [-5]