<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
<font face="sans-serif">Hi<br>
<br>
I notice this list has been very quite recently,&nbsp; so I hope someone is
still out there?<br>
<br>
I am trying to write an interface in C so I can communicate with a PIC
chip via USB using libhid, but I do not understand how to use the path
information I am seeing to send and receive massages. <br>
<br>
This is the output I get when I run the example code that I downloaded
from the libhid site.<br>
<br>
&nbsp;NOTICE: hid_find_usb_device(): found a matching USB device 004/003[0].<br>
&nbsp; TRACE: hid_force_open(): claiming USB device 004/003[0].<br>
&nbsp;NOTICE: hid_force_open(): successfully claimed USB device 004/003[0].<br>
&nbsp; TRACE: hid_init_parser(): initialising the HID parser for USB Device
004/003[0]...<br>
&nbsp; TRACE: hid_init_parser(): allocating space for HIDData structure...<br>
&nbsp; TRACE: hid_init_parser(): successfully allocated memory for HIDData
strcture.<br>
&nbsp; TRACE: hid_init_parser(): allocating space for HIDParser structure...<br>
&nbsp; TRACE: hid_init_parser(): successfully allocated memory for HIDParser
strcture.<br>
&nbsp;NOTICE: hid_init_parser(): successfully initialised the HID parser for
USB Device 004/003[0].<br>
&nbsp; TRACE: hid_prepare_hid_descriptor(): initialising the HID descriptor
for USB device 004/003[0]...<br>
&nbsp; TRACE: hid_prepare_hid_descriptor(): retrieving HID descriptor for
USB device 004/003[0]...<br>
&nbsp;NOTICE: hid_prepare_hid_descriptor(): successfully initialised HID
descriptor for USB device 004/003[0] (29 bytes).<br>
&nbsp; TRACE: hid_prepare_report_descriptor(): initialising the report
descriptor for USB device 004/003[0]...<br>
&nbsp; TRACE: hid_prepare_report_descriptor(): retrieving report descriptor
for USB device 004/003[0]...<br>
&nbsp;NOTICE: hid_prepare_report_descriptor(): successfully initialised
report descriptor for USB device 004/003[0].<br>
&nbsp; TRACE: hid_prepare_parser(): setting up the HID parser for USB device
004/003[0]...<br>
&nbsp; TRACE: hid_reset_parser(): resetting the HID parser for USB device
004/003[0]...<br>
&nbsp; TRACE: hid_prepare_parser(): dumping the raw report descriptor<br>
&nbsp; TRACE: hid_prepare_parser(): 0x000: 0x06 0x00 0xff 0x09 0x01 0xa1
0x01 0x19 <br>
&nbsp; TRACE: hid_prepare_parser(): 0x008: 0x01 0x29 0x40 0x15 0x00 0x26
0xff 0x00 <br>
&nbsp; TRACE: hid_prepare_parser(): 0x010: 0x75 0x08 0x95 0x40 0x81 0x00
0x19 0x01 <br>
&nbsp; TRACE: hid_prepare_parser(): 0x018: 0x29 0x40 0x91 0x00 0xc0 <br>
&nbsp; TRACE: hid_prepare_parser(): parsing the HID tree of USB device
004/003[0]...<br>
&nbsp;NOTICE: hid_prepare_parser(): successfully set up the HID parser for
USB device 004/003[0].<br>
&nbsp;NOTICE: hid_force_open(): successfully opened USB device 004/003[0].<br>
device identification of HIDInterface 004/003[0]:<br>
&nbsp; dev_handle:&nbsp;&nbsp;&nbsp; 0x00a68ea0<br>
&nbsp; device:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x00a7c470<br>
&nbsp; location:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 004/003<br>
&nbsp; manufacturer:&nbsp; Microchip Technology Inc.<br>
&nbsp; product:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Simple HID Device Demo<br>
&nbsp; TRACE: hid_reset_parser(): resetting the HID parser for USB device
004/003[0]...<br>
&nbsp; TRACE: hid_dump_tree(): iterating the parse tree for USB device
004/003[0]...<br>
parse tree of HIDInterface 004/003[0]:<br>
&nbsp; path: 0xff000001.0x00000000; type: 0x80<br>
&nbsp; {listed a total of 64 times} <br>
<br>
&nbsp; path: 0xff000001.0x00000000; type: 0x90<br>
</font><font face="sans-serif">&nbsp; {listed a total of 64 times} </font><br>
<font face="sans-serif"><br>
&nbsp; TRACE: hid_reset_parser(): resetting the HID parser for USB device
004/003[0]...<br>
&nbsp; TRACE: hid_close(): closing USB device 004/003[0]...<br>
&nbsp; TRACE: hid_close(): closing handle of USB device 004/003[0]...<br>
&nbsp;NOTICE: hid_close(): successfully closed USB device 004/003[0].<br>
&nbsp; TRACE: hid_reset_parser(): resetting the HID parser for USB device
004/003[0]...<br>
&nbsp; TRACE: hid_close(): freeing memory allocated for HID parser...<br>
&nbsp; TRACE: hid_close(): resetting HIDInterface...<br>
&nbsp;NOTICE: hid_cleanup(): successfully deinitialised HID library.<br>
<br>
I have tried the following code in an attempt to read some data:<br>
<br>
unsigned char const RECV_PACKET_LEN = 64;<br>
char packet[RECV_PACKET_LEN];<br>
unsigned char const PATHLEN = 2;<br>
int const PATH_IN[2] = { 0xff000001, 0 };<br>
int i;<br>
<br>
ret = hid_get_input_report(hid, PATH_IN, PATHLEN, packet,
RECV_PACKET_LEN);<br>
&nbsp; if (ret != HID_RET_SUCCESS)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, "hid_get_input_report failed with return code
%d\n", ret);<br>
&nbsp;&nbsp;&nbsp; }<br>
else<br>
&nbsp; {<br>
&nbsp; &nbsp; printf("data...\n");<br>
<br>
&nbsp;&nbsp;&nbsp; for (i=0; i&lt;RECV_PACKET_LEN; i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("0x%02X ", (unsigned char) packet[i]);<br>
<br>
&nbsp;&nbsp;&nbsp; printf("\n");<br>
&nbsp; }<br>
<br>
But it complains of a broken pipe.....<br>
<br>
&nbsp; TRACE: hid_reset_parser(): resetting the HID parser for USB device
004/003[0]...<br>
&nbsp; TRACE: hid_get_input_report(): looking up report ID...<br>
&nbsp; TRACE: hid_prepare_parse_path(): preparing search path of depth 2 for
parse tree of USB device 004/003[0]...<br>
&nbsp; TRACE: hid_prepare_parse_path(): search path prepared for parse tree
of USB device 004/003[0].<br>
&nbsp;NOTICE: hid_find_object(): found requested item.<br>
&nbsp; TRACE: hid_get_input_report(): retrieving report ID 0x00 (length: 64)
from USB device 004/003[0]...<br>
WARNING: hid_get_input_report(): failed to retrieve report from USB
device 004/003[0]:error sending control message: Broken pipe.<br>
hid_get_input_report failed with return code 20<br>
&nbsp; TRACE: hid_close(): closing USB device 004/003[0]...<br>
&nbsp; TRACE: hid_close(): closing handle of USB device 004/003[0]...<br>
&nbsp;NOTICE: hid_close(): successfully closed USB device 004/003[0].<br>
&nbsp; TRACE: hid_reset_parser(): resetting the HID parser for USB device
004/003[0]...<br>
&nbsp; TRACE: hid_close(): freeing memory allocated for HID parser...<br>
&nbsp; TRACE: hid_close(): resetting HIDInterface...<br>
&nbsp;NOTICE: hid_cleanup(): successfully deinitialised HID library.<br>
<br>
<br>
<br>
This is the output I get from lsusb<br>
<br>
$ sudo lsusb -d 0x04d8:0x003f -vvv<br>
<br>
Bus 004 Device 003: ID 04d8:003f Microchip Technology, Inc. <br>
Device Descriptor:<br>
&nbsp; bLength&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18<br>
&nbsp; bDescriptorType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>
&nbsp; bcdUSB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.00<br>
&nbsp; bDeviceClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 (Defined at Interface level)<br>
&nbsp; bDeviceSubClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 <br>
&nbsp; bDeviceProtocol&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 <br>
&nbsp; bMaxPacketSize0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8<br>
&nbsp; idVendor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x04d8 Microchip Technology, Inc.<br>
&nbsp; idProduct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x003f <br>
&nbsp; bcdDevice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.02<br>
&nbsp; iManufacturer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 Microchip Technology Inc.<br>
&nbsp; iProduct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 Simple HID Device Demo<br>
&nbsp; iSerial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 <br>
&nbsp; bNumConfigurations&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>
&nbsp; Configuration Descriptor:<br>
&nbsp;&nbsp;&nbsp; bLength&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9<br>
&nbsp;&nbsp;&nbsp; bDescriptorType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br>
&nbsp;&nbsp;&nbsp; wTotalLength&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 41<br>
&nbsp;&nbsp;&nbsp; bNumInterfaces&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>
&nbsp;&nbsp;&nbsp; bConfigurationValue&nbsp;&nbsp;&nbsp;&nbsp; 1<br>
&nbsp;&nbsp;&nbsp; iConfiguration&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 <br>
&nbsp;&nbsp;&nbsp; bmAttributes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xc0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Self Powered<br>
&nbsp;&nbsp;&nbsp; MaxPower&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100mA<br>
&nbsp;&nbsp;&nbsp; Interface Descriptor:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bLength&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bDescriptorType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bInterfaceNumber&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bAlternateSetting&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bNumEndpoints&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bInterfaceClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 Human Interface Device<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bInterfaceSubClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 No Subclass<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bInterfaceProtocol&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 None<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iInterface&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ** UNRECOGNIZED:&nbsp; 09 21 11 01 00 01 22 1d 00<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Endpoint Descriptor:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bLength&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bDescriptorType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bEndpointAddress&nbsp;&nbsp;&nbsp;&nbsp; 0x81&nbsp; EP 1 IN<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bmAttributes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transfer Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interrupt<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Synch Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Usage Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Data<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wMaxPacketSize&nbsp;&nbsp;&nbsp;&nbsp; 0x0040&nbsp; 1x 64 bytes<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bInterval&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Endpoint Descriptor:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bLength&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bDescriptorType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bEndpointAddress&nbsp;&nbsp;&nbsp;&nbsp; 0x01&nbsp; EP 1 OUT<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bmAttributes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transfer Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interrupt<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Synch Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Usage Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Data<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wMaxPacketSize&nbsp;&nbsp;&nbsp;&nbsp; 0x0040&nbsp; 1x 64 bytes<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bInterval&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>
Device Status:&nbsp;&nbsp;&nbsp;&nbsp; 0x0001<br>
&nbsp; Self Powered<br>
<br>
<br>
Can someone give me some pointers as I am a little stuck.<br>
<br>
Thanks<br>
<br>
<br>
Tim<br>
</font>
</body>
</html>