Looks like I found the answer to my problem.
On this page http://www.libusb.org/wiki/APIs, I've read :
"libusb is not suited for HID class devices. While it is possible to use libusb with HID class devices it requires the original HID class driver to be replaced by a driver which supports libusb, and this leads to a quite poor user experience on any platform other than Linux. It is recommended to use ​HIDAPI <http://www.signal11.us/oss/hidapi/> instead. HIDAPI provides convenient cross-platform access to HID class devices and can do so without any kernel driver concerns across all supported platforms."

Nicolas

Le 28/01/2016 08:21, Nicolas Pinault a écrit :
Hi,

I'm trying to use a USB device under Windows7x64.
The device is HID like with custom protocol.
The USB device is recognised by Windows as a HID device (without error nor warning shown is device manager).
It works perfectly with a host running QNX OS.

With PyUSB :
Discovery of the device is OK.
Configuration of the device seems to be OK.
Reading/writing the device fails.

Here is the code I use :

import usb.core
import usb.util

class Test(object):
    def __init__(self):
        self.VendorId = 0x15A2
        self.ProductId = 0x0073
self.dev = usb.core.find(idVendor=self.VendorId, idProduct=self.ProductId)
        if not self.dev :
            raise ValueError("Device not found")
        print self.dev

        self.dev.set_configuration()

        cfg = self.dev.get_active_configuration()
        intf = cfg[(0,0)]
        self.interface = cfg[(0,0)].bInterfaceNumber

self.dev.set_interface_altsetting(interface = self.interface, alternate_setting = self.interface)

        print "Interface :", self.interface
        self.DeviceSetIdle()

    def DeviceSetIdle(self):
self.dev.ctrl_transfer(bmRequestType = usb.util.build_request_type(usb.util.CTRL_OUT,
usb.util.CTRL_TYPE_CLASS,
usb.util.CTRL_RECIPIENT_INTERFACE),
bRequest = USB_HID_SET_IDLE_REQUEST, # 0x0A
                               wValue   = 0,#8 << 8,
                               wIndex   = self.interface,
                               data_or_wLength = None,
                               timeout  = 0)

if __name__ == '__main__':
    t = Test()

I get the following output :
DEVICE ID 15a2:0073 on Bus 003 Address 023 =================
 bLength                :   0x12 (18 bytes)
 bDescriptorType        :    0x1 Device
 bcdUSB                 :  0x200 USB 2.0
 bDeviceClass           :    0x0 Specified at interface
 bDeviceSubClass        :    0x0
 bDeviceProtocol        :    0x0
 bMaxPacketSize0        :   0x40 (64 bytes)
 idVendor               : 0x15a2
 idProduct              : 0x0073
 bcdDevice              :    0x2 Device 0.02
 iManufacturer          :    0x1 Freescale Semiconductor Inc.
 iProduct               :    0x2 Kinetis Bootloader
 iSerialNumber          :    0x0
 bNumConfigurations     :    0x1
  CONFIGURATION 1: 100 mA ==================================
   bLength              :    0x9 (9 bytes)
   bDescriptorType      :    0x2 Configuration
   wTotalLength         :   0x29 (41 bytes)
   bNumInterfaces       :    0x1
   bConfigurationValue  :    0x1
   iConfiguration       :    0x0
   bmAttributes         :   0xc0 Self Powered
   bMaxPower            :   0x32 (100 mA)
    INTERFACE 0: Human Interface Device ====================
     bLength            :    0x9 (9 bytes)
     bDescriptorType    :    0x4 Interface
     bInterfaceNumber   :    0x0
     bAlternateSetting  :    0x0
     bNumEndpoints      :    0x2
     bInterfaceClass    :    0x3 Human Interface Device
     bInterfaceSubClass :    0x0
     bInterfaceProtocol :    0x0
     iInterface         :    0x0
      ENDPOINT 0x81: Interrupt IN ==========================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :   0x81 IN
       bmAttributes     :    0x3 Interrupt
       wMaxPacketSize   :   0x40 (64 bytes)
       bInterval        :    0xa
      ENDPOINT 0x2: Interrupt OUT ==========================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :    0x2 OUT
       bmAttributes     :    0x3 Interrupt
       wMaxPacketSize   :   0x40 (64 bytes)
       bInterval        :    0xa
Interface : 0
Traceback (most recent call last):
File "Z:\Cantar2\Processeur\Apps_2\PyCantarem2Update\src\PyCantarem2Update.py", line 244, in <module>
    t = Test()
File "Z:\Cantar2\Processeur\Apps_2\PyCantarem2Update\src\PyCantarem2Update.py", line 154, in __init__
    self.DeviceSetIdle()
File "Z:\Cantar2\Processeur\Apps_2\PyCantarem2Update\src\PyCantarem2Update.py", line 174, in DeviceSetIdle
    timeout  = 0)
File "C:\Python27\lib\site-packages\usb\core.py", line 1043, in ctrl_transfer
    self.__get_timeout(timeout))
File "C:\Python27\lib\site-packages\usb\backend\libusb1.py", line 883, in ctrl_transfer
    timeout))
File "C:\Python27\lib\site-packages\usb\backend\libusb1.py", line 595, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 22] Invalid parameter

As I am far from a USB ninja, I spent days documenting myself and searching the Internet for a solution without success.

What's wrong with my code ?

Nicolas

--
*Nicolas PINAULT
R&D electronics engineer
*** nico...@aaton.com <mailto:nico...@aaton.com>

*AATON-Digital*
38000 Grenoble - France
Tel +33 4 7642 9550

http://www.aaton.com
http://www.transvideo.eu
French Technologies for Film and Digital Cinematography

Follow us on Twitter
@Aaton_Digital
@Transvideo_HD

Like us on Facebook
https://www.facebook.com/AatonDigital



------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140


_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users


--
*Nicolas PINAULT
R&D electronics engineer
*** nico...@aaton.com <mailto:nico...@aaton.com>

*AATON-Digital*
38000 Grenoble - France
Tel +33 4 7642 9550

http://www.aaton.com
http://www.transvideo.eu
French Technologies for Film and Digital Cinematography

Follow us on Twitter
@Aaton_Digital
@Transvideo_HD

Like us on Facebook
https://www.facebook.com/AatonDigital

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users

Reply via email to