Great - thanks for the feedback. Comments online below:

On 09/09/11 03:22, Charles Lepple wrote:
Hi,

Apologies for what might be a basic libhid question.

I'm running Ubuntu, and using libhid via Python to communicate with a HID device (and have used 'lsusb' to glean all the details of the device).

I've started out with the example code here: http://anonscm.debian.org/viewvc/libhid/trunk/swig/test_libhid.py .I added the vendor and product ID and the example code itself worked FINE.

I then added some code to the example. From the 'snooping' on the communication with the device under Windows it needs a control message with an initialisation string to initialise the device, which I thought would be:

Not to sound too nit-picky, but is it an actual USB control transfer, or is it just a message that is being sent to the device?

USB has the notion of Control endpoints (EP0 IN and OUT), and also Interrupt endpoints. Not all devices have interrupt endpoints, but if you post the output of 'lsusb -v' (run as root, preferably after something like libhid has detached the kernel HID driver), we can see which endpoints are available.

Good question - I'm not sure if its a control message required??? I expect it might just be a normal 'write' message (as on double checking the on the windows output the 'request' filed was set as listed as 'set report' )

Ok - 'lsusb -v' is at base of post.

ret = hid_interrupt_write(hid, 0, INIT_SEQ, 8)
if ret != HID_RET_SUCCESS:
       log_error("hid_set_output_report", ret)

But when I added the above spinet to the example and run it I get:
(ALL messages fine up to here)
---------------------
NOTICE: hid_force_open(): successfully opened USB device 006/002[0].
TRACE: hid_reset_parser(): resetting the HID parser for USB device 006/002[0]... TRACE: hid_dump_tree(): iterating the parse tree for USB device 006/002[0]... TRACE: hid_reset_parser(): resetting the HID parser for USB device 006/002[0]... TRACE: hid_interrupt_write(): writing interrupt report to device 006/002[0] ... WARNING: hid_interrupt_write(): failed to perform interrupt write to device 006/002[0]: error submitting URB: No such file or directory
---------------------

Ah, I think I see what's going on: you passed endpoint 0 to hid_interrupt_write() - it should be 1 or higher. Again, lsusb output will pin this down.


Thanks.

James
-----------------------------------------------------------------
jamespk@hal:~/project/driver/hidapi$ sudo lsusb -v -d 0fde:ca01

Bus 006 Device 002: ID 0fde:ca01
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x0fde
  idProduct          0xca01
  bcdDevice            3.02
  iManufacturer           0
  iProduct                1 Universal Bridge
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      34
          Report Descriptor: (length is 34)
            Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
                            (null)
            Item(Local ): Usage, data= [ 0x01 ] 1
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Local ): Usage, data= [ 0x01 ] 1
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x02 ] 2
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Output, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
Device Status:     0x0000
  (Bus Powered)
--------------------------------------------



_______________________________________________
libhid-discuss mailing list
libhid-discuss@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/libhid-discuss
http://libhid.alioth.debian.org/

Reply via email to