[libhid-discuss] Announce hidmon and some questions and remarks about libhid

drd frederikreiss at gmx.de
Tue Jan 23 13:11:38 CET 2007


Charles Lepple schrieb:
> On Jan 22, 2007, at 7:11 PM, Frederik Reiß wrote:
>
>> i am developing a small programm[0] to control my TFT display via the
>> Monitor Control Class[1]. I use libhid for that job, and it works great
>> (but not perfect). It sould be able to control other HID compatible
>> displays.
>
> Hi Frederik,
>
> looks cool! I tried writing a program to do this with libhid a while
> ago, but it turns out my Apple CRT had some issues with its report
> descriptor, and I sold the monitor before I made any real progress.
>
>> Now i have some questions and remarks:
>>
>> Is there any way to get the needed buffer size for hid_get_input_report
>> and friends ?
>
> I admit that I don't know much about the MGE HIDParser code - there
> should be a way to extract it from the parsed report structures that
> it creates, but I am not sure the exact syntax.
>
> That function was meant for a device where the buffer size was known
> ahead of time.
that's not good, because it makes something like this necessary (at last
for me):


  hid_ret=hid_get_feature_report(dev, path, c->path.size, buffer, 0);
...
  size_bits=dev->hid_data->Size;
  while(size_bits % 8 != 0)
    size_bits++;
  size_bytes=size_bits / 8;
...
  hid_ret=hid_get_feature_report(dev, path, c->path.size, buffer,
size_bytes+1);

n.b. when using the linux HID api you don't need to know the size.
>
>> It would be nice if the functions which take a path as argument use
>> somthing like the HIDPath struct (in hidtypes.h) instead of letting the
>> user play with ints !
>
> I would actually prefer to see something along the lines of Apple's
> HID API, where you pass in "cookies" which are really hash values for
> the paths.
>
> Granted, you would still need a HIDPath struct to determine the
> cookie, but it gets you closer to O(1) lookups when you need to find
> the report ID and offset.
>
sounds nice :)
>> hid_get_item_value does not return a proper value for me (but all/some
>> of the other fields in HIDInterface get filled correctly).
>
> Please note the TODO items:
>
> http://www.ghz.cc/~clepple/libhid/doc/html/hid__exchange_8c.html#3d57558be35776185e33c4cdce3d6b19
>
>
> Do you have an idea of what the value should look like? Are you sure
> the report descriptor is correct?
Yes, first i wrote the programm so, that it used hid_get_input_report
which worked (returns e.g. 200), then i just repleaced
hid_get_input_report with hid_get_item_value, but hid_get_item_value
returned always zero.
>
>> if hid_get_item_value is called it seems that it passes the ?parser? the
>> size of the data in bits, but the parser wants the size in bytes, which
>> results in an warning.
>
> Can you post the hex dump of the HID report descriptor, and some
> context for this error?
See the atachments for a sample program which triggers this problem, and
a trace (which includes a hex dump) from the program
>
> regards,
>
> --Charles Lepple
>
regards Frederik

-------------- next part --------------
  TRACE: hid_init(): initialising USB subsystem...
  TRACE: hid_init(): scanning for USB busses...
  TRACE: hid_init(): scanning for USB devices...
  TRACE: hid_new_HIDInterface(): creating a new HIDInterface instance...
  TRACE: hid_force_open(): forcefully opening a device interface according to matching criteria...
  TRACE: hid_get_usb_handle(): acquiring handle for a USB device...
  TRACE: hid_find_usb_device(): enumerating USB busses...
  TRACE: hid_find_usb_device(): enumerating USB devices on bus 004...
  TRACE: hid_find_usb_device(): inspecting USB device 004/001[0]...
  TRACE: hid_compare_usb_device(): comparing match specifications to USB device...
  TRACE: hid_compare_usb_device(): inspecting vendor ID...
  TRACE: hid_compare_usb_device(): no match on vendor ID.
  TRACE: hid_compare_usb_device(): inspecting product ID...
  TRACE: hid_compare_usb_device(): no match on product ID.
  TRACE: hid_compare_usb_device(): no custom matching function supplied.
  TRACE: hid_find_usb_device(): enumerating USB devices on bus 003...
  TRACE: hid_find_usb_device(): inspecting USB device 003/031[0]...
  TRACE: hid_compare_usb_device(): comparing match specifications to USB device...
  TRACE: hid_compare_usb_device(): inspecting vendor ID...
  TRACE: hid_compare_usb_device(): no match on vendor ID.
  TRACE: hid_compare_usb_device(): inspecting product ID...
  TRACE: hid_compare_usb_device(): match on product ID: 0x0003.
  TRACE: hid_compare_usb_device(): no custom matching function supplied.
  TRACE: hid_find_usb_device(): inspecting USB device 003/001[0]...
  TRACE: hid_compare_usb_device(): comparing match specifications to USB device...
  TRACE: hid_compare_usb_device(): inspecting vendor ID...
  TRACE: hid_compare_usb_device(): no match on vendor ID.
  TRACE: hid_compare_usb_device(): inspecting product ID...
  TRACE: hid_compare_usb_device(): no match on product ID.
  TRACE: hid_compare_usb_device(): no custom matching function supplied.
  TRACE: hid_find_usb_device(): enumerating USB devices on bus 002...
  TRACE: hid_find_usb_device(): inspecting USB device 002/001[0]...
  TRACE: hid_compare_usb_device(): comparing match specifications to USB device...
  TRACE: hid_compare_usb_device(): inspecting vendor ID...
  TRACE: hid_compare_usb_device(): no match on vendor ID.
  TRACE: hid_compare_usb_device(): inspecting product ID...
  TRACE: hid_compare_usb_device(): no match on product ID.
  TRACE: hid_compare_usb_device(): no custom matching function supplied.
  TRACE: hid_find_usb_device(): enumerating USB devices on bus 001...
  TRACE: hid_find_usb_device(): inspecting USB device 001/096[0]...
  TRACE: hid_compare_usb_device(): comparing match specifications to USB device...
  TRACE: hid_compare_usb_device(): inspecting vendor ID...
  TRACE: hid_compare_usb_device(): no match on vendor ID.
  TRACE: hid_compare_usb_device(): inspecting product ID...
  TRACE: hid_compare_usb_device(): no match on product ID.
  TRACE: hid_compare_usb_device(): no custom matching function supplied.
  TRACE: hid_find_usb_device(): inspecting USB device 001/095[0]...
  TRACE: hid_compare_usb_device(): comparing match specifications to USB device...
  TRACE: hid_compare_usb_device(): inspecting vendor ID...
  TRACE: hid_compare_usb_device(): match on vendor ID: 0x056d.
  TRACE: hid_compare_usb_device(): inspecting product ID...
  TRACE: hid_compare_usb_device(): match on product ID: 0x0002.
  TRACE: hid_compare_usb_device(): no custom matching function supplied.
  TRACE: hid_force_open(): claiming USB device 001/095[0].
  TRACE: hid_init_parser(): initialising the HID parser for USB Device 001/095[0]...
  TRACE: hid_init_parser(): allocating space for HIDData structure...
  TRACE: hid_init_parser(): successfully allocated memory for HIDData strcture.
  TRACE: hid_init_parser(): allocating space for HIDParser structure...
  TRACE: hid_init_parser(): successfully allocated memory for HIDParser strcture.
  TRACE: hid_prepare_hid_descriptor(): initialising the HID descriptor for USB device 001/095[0]...
  TRACE: hid_prepare_hid_descriptor(): retrieving HID descriptor for USB device 001/095[0]...
  TRACE: hid_prepare_report_descriptor(): initialising the report descriptor for USB device 001/095[0]...
  TRACE: hid_prepare_report_descriptor(): retrieving report descriptor for USB device 001/095[0]...
  TRACE: hid_prepare_parser(): setting up the HID parser for USB device 001/095[0]...
  TRACE: hid_reset_parser(): resetting the HID parser for USB device 001/095[0]...
  TRACE: hid_prepare_parser(): dumping the raw report descriptor
  TRACE: hid_prepare_parser(): 0x000: 0x05 0x80 0x09 0x01 0xa1 0x01 0x75 0x08 
  TRACE: hid_prepare_parser(): 0x008: 0x95 0x80 0x15 0x00 0x26 0xff 0x00 0x85 
  TRACE: hid_prepare_parser(): 0x010: 0x01 0x09 0x02 0xb2 0x02 0x01 0x05 0x82 
  TRACE: hid_prepare_parser(): 0x018: 0x75 0x10 0x95 0x01 0x25 0x64 0x85 0x20 
  TRACE: hid_prepare_parser(): 0x020: 0x09 0x12 0x81 0x02 0x09 0x12 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x028: 0x26 0xc8 0x00 0x85 0x21 0x09 0x10 0x81 
  TRACE: hid_prepare_parser(): 0x030: 0x02 0x09 0x10 0xb1 0x02 0x26 0xff 0x00 
  TRACE: hid_prepare_parser(): 0x038: 0x85 0x22 0x09 0x16 0x81 0x02 0x09 0x16 
  TRACE: hid_prepare_parser(): 0x040: 0xb1 0x02 0x85 0x23 0x09 0x18 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x048: 0x09 0x18 0xb1 0x02 0x85 0x24 0x09 0x1a 
  TRACE: hid_prepare_parser(): 0x050: 0x81 0x02 0x09 0x1a 0xb1 0x02 0x16 0x80 
  TRACE: hid_prepare_parser(): 0x058: 0x02 0x26 0x40 0x06 0x85 0x30 0x09 0x20 
  TRACE: hid_prepare_parser(): 0x060: 0x81 0x02 0x09 0x20 0xb1 0x02 0x15 0x0a 
  TRACE: hid_prepare_parser(): 0x068: 0x25 0x64 0x85 0x38 0x09 0x30 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x070: 0x09 0x30 0xb1 0x02 0x75 0x20 0x15 0x00 
  TRACE: hid_prepare_parser(): 0x078: 0x27 0x40 0x0d 0x03 0x00 0x85 0x10 0x09 
  TRACE: hid_prepare_parser(): 0x080: 0xac 0x81 0x02 0x09 0xac 0xb1 0x02 0x75 
  TRACE: hid_prepare_parser(): 0x088: 0x10 0x26 0x20 0x4e 0x09 0xae 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x090: 0x09 0xae 0xb1 0x02 0x75 0x02 0x15 0x01 
  TRACE: hid_prepare_parser(): 0x098: 0x25 0x02 0x85 0x02 0x09 0x60 0xa1 0x02 
  TRACE: hid_prepare_parser(): 0x0a0: 0x05 0x81 0x09 0x01 0x09 0x02 0x81 0x00 
  TRACE: hid_prepare_parser(): 0x0a8: 0xc0 0x75 0x06 0x81 0x03 0x05 0x82 0x75 
  TRACE: hid_prepare_parser(): 0x0b0: 0x02 0x09 0x60 0xa1 0x02 0x05 0x81 0x09 
  TRACE: hid_prepare_parser(): 0x0b8: 0x01 0x09 0x02 0xb1 0x00 0xc0 0x75 0x06 
  TRACE: hid_prepare_parser(): 0x0c0: 0xb1 0x03 0x05 0x82 0x75 0x02 0x85 0x18 
  TRACE: hid_prepare_parser(): 0x0c8: 0x09 0xb0 0xa1 0x02 0x05 0x81 0x09 0x01 
  TRACE: hid_prepare_parser(): 0x0d0: 0x09 0x02 0xb1 0x00 0xc0 0x75 0x06 0xb1 
  TRACE: hid_prepare_parser(): 0x0d8: 0x03 0x15 0x00 0x06 0x00 0xff 0x75 0x10 
  TRACE: hid_prepare_parser(): 0x0e0: 0x95 0x01 0x27 0xff 0xff 0x00 0x00 0x85 
  TRACE: hid_prepare_parser(): 0x0e8: 0x50 0x09 0x09 0x81 0x02 0x09 0x09 0xb1 
  TRACE: hid_prepare_parser(): 0x0f0: 0x02 0x95 0x02 0x85 0x64 0x09 0x2f 0x81 
  TRACE: hid_prepare_parser(): 0x0f8: 0x02 0x09 0x2f 0xb1 0x02 0x95 0x01 0x85 
  TRACE: hid_prepare_parser(): 0x100: 0x51 0x09 0x30 0xb1 0x02 0x85 0x52 0x09 
  TRACE: hid_prepare_parser(): 0x108: 0x31 0xb1 0x02 0x75 0x20 0x27 0xff 0xff 
  TRACE: hid_prepare_parser(): 0x110: 0xff 0x00 0x85 0x53 0x09 0x32 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x118: 0x75 0x08 0x26 0xff 0x00 0x85 0x54 0x09 
  TRACE: hid_prepare_parser(): 0x120: 0x33 0xb1 0x02 0x95 0x80 0x85 0x55 0x09 
  TRACE: hid_prepare_parser(): 0x128: 0x34 0xb2 0x02 0x01 0x75 0x10 0x95 0x01 
  TRACE: hid_prepare_parser(): 0x130: 0x25 0x06 0x85 0x56 0x09 0xbc 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x138: 0x09 0xbc 0xb1 0x02 0x75 0x08 0x95 0x10 
  TRACE: hid_prepare_parser(): 0x140: 0x26 0xff 0x00 0x85 0x57 0x09 0x35 0xb2 
  TRACE: hid_prepare_parser(): 0x148: 0x02 0x01 0x95 0x03 0x85 0x58 0x09 0x37 
  TRACE: hid_prepare_parser(): 0x150: 0xb1 0x02 0x95 0x11 0x85 0x59 0x09 0x36 
  TRACE: hid_prepare_parser(): 0x158: 0xb2 0x02 0x01 0x95 0x21 0x85 0x5a 0x09 
  TRACE: hid_prepare_parser(): 0x160: 0x38 0xb2 0x02 0x01 0x85 0x5b 0x09 0x39 
  TRACE: hid_prepare_parser(): 0x168: 0xb2 0x02 0x01 0x85 0x5c 0x09 0x3a 0xb2 
  TRACE: hid_prepare_parser(): 0x170: 0x02 0x01 0x95 0x11 0x85 0x5d 0x09 0x3b 
  TRACE: hid_prepare_parser(): 0x178: 0xb2 0x02 0x01 0x95 0x01 0x25 0x01 0x85 
  TRACE: hid_prepare_parser(): 0x180: 0x5e 0x09 0xbf 0xb1 0x02 0x85 0x5f 0x09 
  TRACE: hid_prepare_parser(): 0x188: 0xbd 0xb1 0x02 0x95 0x04 0x26 0xff 0x00 
  TRACE: hid_prepare_parser(): 0x190: 0x85 0x60 0x09 0xbe 0xb1 0x02 0x95 0x01 
  TRACE: hid_prepare_parser(): 0x198: 0x25 0x01 0x85 0x61 0x09 0xb8 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x1a0: 0x09 0xb8 0xb1 0x02 0x95 0x01 0x75 0x10 
  TRACE: hid_prepare_parser(): 0x1a8: 0x85 0x81 0x09 0xc1 0x81 0x02 0x09 0xc1 
  TRACE: hid_prepare_parser(): 0x1b0: 0xb1 0x02 0x25 0x1f 0x85 0x82 0x09 0xc5 
  TRACE: hid_prepare_parser(): 0x1b8: 0x81 0x02 0x75 0x08 0x95 0x02 0x95 0x01 
  TRACE: hid_prepare_parser(): 0x1c0: 0x25 0x77 0x85 0x83 0x09 0xc6 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x1c8: 0x75 0x08 0x25 0x02 0x85 0x86 0x09 0xc9 
  TRACE: hid_prepare_parser(): 0x1d0: 0xb1 0x02 0x75 0x10 0x25 0x0a 0x85 0x90 
  TRACE: hid_prepare_parser(): 0x1d8: 0x09 0xe1 0xb1 0x02 0x75 0x08 0x25 0x01 
  TRACE: hid_prepare_parser(): 0x1e0: 0x85 0x91 0x09 0xe2 0xb1 0x02 0x95 0x80 
  TRACE: hid_prepare_parser(): 0x1e8: 0x26 0xff 0x00 0x85 0x92 0x09 0xe3 0xb2 
  TRACE: hid_prepare_parser(): 0x1f0: 0x02 0x01 0x95 0x01 0x75 0x10 0x25 0x06 
  TRACE: hid_prepare_parser(): 0x1f8: 0x85 0xc3 0x09 0x15 0x81 0x02 0x09 0x15 
  TRACE: hid_prepare_parser(): 0x200: 0xb1 0x02 0x25 0x7f 0x85 0xa4 0x09 0x86 
  TRACE: hid_prepare_parser(): 0x208: 0x81 0x02 0x09 0x86 0xb1 0x02 0x85 0xa5 
  TRACE: hid_prepare_parser(): 0x210: 0x09 0x87 0x81 0x02 0x09 0x87 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x218: 0x85 0xa6 0x09 0x88 0x81 0x02 0x09 0x88 
  TRACE: hid_prepare_parser(): 0x220: 0xb1 0x02 0x26 0xff 0x00 0x85 0xa7 0x09 
  TRACE: hid_prepare_parser(): 0x228: 0x89 0x81 0x02 0x09 0x89 0xb1 0x02 0x85 
  TRACE: hid_prepare_parser(): 0x230: 0xa8 0x09 0x8a 0x81 0x02 0x09 0x8a 0xb1 
  TRACE: hid_prepare_parser(): 0x238: 0x02 0x85 0xa9 0x09 0x8b 0x81 0x02 0x09 
  TRACE: hid_prepare_parser(): 0x240: 0x8b 0xb1 0x02 0x85 0xaa 0x09 0x8c 0x81 
  TRACE: hid_prepare_parser(): 0x248: 0x02 0x09 0x8c 0xb1 0x02 0x26 0x00 0x05 
  TRACE: hid_prepare_parser(): 0x250: 0x16 0x40 0x01 0x85 0xb1 0x09 0xca 0xb1 
  TRACE: hid_prepare_parser(): 0x258: 0x02 0x26 0x00 0x04 0x16 0xc8 0x00 0x85 
  TRACE: hid_prepare_parser(): 0x260: 0xb9 0x09 0xcb 0xb1 0x02 0x25 0x06 0x15 
  TRACE: hid_prepare_parser(): 0x268: 0x00 0x85 0xc0 0x09 0x10 0x81 0x02 0x09 
  TRACE: hid_prepare_parser(): 0x270: 0x10 0xb1 0x02 0x27 0xff 0xff 0x00 0x00 
  TRACE: hid_prepare_parser(): 0x278: 0x85 0xc2 0x09 0x0f 0x81 0x02 0x09 0x0f 
  TRACE: hid_prepare_parser(): 0x280: 0xb1 0x02 0x15 0x00 0x25 0x01 0x85 0xc4 
  TRACE: hid_prepare_parser(): 0x288: 0x09 0xa8 0x81 0x02 0x09 0xa8 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x290: 0x25 0x17 0x85 0xc5 0x09 0xaa 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x298: 0x09 0xaa 0xb1 0x02 0x25 0x04 0x85 0xc7 
  TRACE: hid_prepare_parser(): 0x2a0: 0x09 0xab 0x81 0x02 0x09 0xab 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x2a8: 0x25 0x01 0x85 0xc9 0x09 0xac 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x2b0: 0x09 0xac 0xb1 0x02 0x26 0xfe 0x0f 0x85 
  TRACE: hid_prepare_parser(): 0x2b8: 0xcb 0x09 0xa0 0x81 0x02 0x09 0xa0 0xb1 
  TRACE: hid_prepare_parser(): 0x2c0: 0x02 0x25 0x1f 0x85 0xcc 0x09 0xa1 0x81 
  TRACE: hid_prepare_parser(): 0x2c8: 0x02 0x09 0xa1 0xb1 0x02 0x25 0x0f 0x85 
  TRACE: hid_prepare_parser(): 0x2d0: 0xcd 0x09 0x81 0x81 0x02 0x09 0x81 0xb1 
  TRACE: hid_prepare_parser(): 0x2d8: 0x02 0x26 0xff 0x00 0x85 0xce 0x09 0xc4 
  TRACE: hid_prepare_parser(): 0x2e0: 0xb1 0x02 0x85 0xcf 0x09 0x82 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x2e8: 0x09 0x82 0xb1 0x02 0x95 0x01 0x25 0x0f 
  TRACE: hid_prepare_parser(): 0x2f0: 0x85 0xd6 0x09 0x07 0x81 0x02 0x09 0x07 
  TRACE: hid_prepare_parser(): 0x2f8: 0xb1 0x02 0x26 0xff 0x00 0x85 0xd7 0x09 
  TRACE: hid_prepare_parser(): 0x300: 0xb3 0x81 0x02 0x09 0xb3 0xb1 0x02 0x25 
  TRACE: hid_prepare_parser(): 0x308: 0x40 0x85 0xd8 0x09 0xb4 0x81 0x02 0x09 
  TRACE: hid_prepare_parser(): 0x310: 0xb4 0xb1 0x02 0x26 0xff 0x01 0x85 0xd9 
  TRACE: hid_prepare_parser(): 0x318: 0x09 0xb5 0x81 0x02 0x09 0xb5 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x320: 0x85 0xda 0x09 0xb6 0x81 0x02 0x09 0xb6 
  TRACE: hid_prepare_parser(): 0x328: 0xb1 0x02 0x85 0xdb 0x09 0xb7 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x330: 0x09 0xb7 0xb1 0x02 0x75 0x08 0x95 0x07 
  TRACE: hid_prepare_parser(): 0x338: 0x26 0xff 0x00 0x85 0x80 0x09 0xc3 0xb2 
  TRACE: hid_prepare_parser(): 0x340: 0x02 0x01 0x75 0x10 0x95 0x01 0x85 0xf0 
  TRACE: hid_prepare_parser(): 0x348: 0x09 0x75 0x81 0x02 0x09 0x75 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x350: 0x85 0xf1 0x09 0x73 0x81 0x02 0x09 0x73 
  TRACE: hid_prepare_parser(): 0x358: 0xb1 0x02 0x85 0xf2 0x09 0x74 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x360: 0x09 0x74 0xb1 0x02 0x25 0x3f 0x85 0xab 
  TRACE: hid_prepare_parser(): 0x368: 0x09 0x8d 0x81 0x02 0x09 0x8d 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x370: 0x85 0xac 0x09 0x8e 0x81 0x02 0x09 0x8e 
  TRACE: hid_prepare_parser(): 0x378: 0xb1 0x02 0x85 0xad 0x09 0x8f 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x380: 0x09 0x8f 0xb1 0x02 0x25 0x05 0x85 0xf3 
  TRACE: hid_prepare_parser(): 0x388: 0x09 0x76 0x81 0x02 0x09 0x76 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x390: 0x25 0x08 0x85 0xd4 0x09 0x66 0x81 0x02 
  TRACE: hid_prepare_parser(): 0x398: 0x09 0x66 0xb1 0x02 0x75 0x08 0x95 0x01 
  TRACE: hid_prepare_parser(): 0x3a0: 0x25 0x43 0x85 0x62 0x09 0x3d 0xb1 0x02 
  TRACE: hid_prepare_parser(): 0x3a8: 0x95 0x80 0x26 0xff 0x00 0x85 0x63 0x09 
  TRACE: hid_prepare_parser(): 0x3b0: 0x3e 0xb2 0x02 0x01 0x85 0x70 0x09 0xcd 
  TRACE: hid_prepare_parser(): 0x3b8: 0x81 0x02 0xc0 
  TRACE: hid_prepare_parser(): parsing the HID tree of USB device 001/095[0]...
  TRACE: hid_get_item_value(): retrieving report from USB device 001/095[0]...
  TRACE: hid_prepare_parse_path(): preparing search path of depth 2 for parse tree of USB device 001/095[0]...
  TRACE: hid_prepare_parse_path(): search path prepared for parse tree of USB device 001/095[0].
WARNING: hid_get_item_value(): failed to retrieve complete report from USB device 001/095[0]; requested: 16 bytes, got: 3 bytes.
hid_get_item_value: 0.000000
  TRACE: hid_close(): closing USB device 001/095[0]...
  TRACE: hid_close(): closing handle of USB device 001/095[0]...
  TRACE: hid_reset_parser(): resetting the HID parser for USB device 001/095[0]...
  TRACE: hid_close(): freeing memory allocated for HID parser...
  TRACE: hid_close(): resetting HIDInterface...



More information about the libhid-discuss mailing list