[libhid-discuss] broken pipe error

Christopher raccoonone at procyongames.com
Tue Aug 26 16:11:49 UTC 2008


Here's the tree dump, and lsusb. I'm not good at understanding all the 
information that lsusb gives, is there a guide that explains how to 
interpret that?
Thanks,
Christopher

parse tree of HIDInterface 001/003[0]:
  path: 0xffa00001.0xffa00002.0xffa10003; type: 0x80
  path: 0xffa00001.0xffa00002.0xffa10004; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0xffa10005; type: 0x90
  path: 0xffa00001.0xffa00002.0xffa10006; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90


Bus 001 Device 003: ID 1781:0898 Multiple Vendors
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x1781 Multiple Vendors
  idProduct          0x0898
  bcdDevice            0.00
  iManufacturer           1 Runtime
  iProduct                2 PxRC PhoenixRC USB Interface
  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.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      52
          Report Descriptor: (length is 52)
            Item(Global): Usage Page, data= [ 0xa0 0xff ] 65440
                            (null)
            Item(Local ): Usage, data= [ 0x01 ] 1
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Local ): Usage, data= [ 0x02 ] 2
                            (null)
            Item(Main  ): Collection, data= [ 0x00 ] 0
                            Physical
            Item(Global): Usage Page, data= [ 0xa1 0xff ] 65441
                            (null)
            Item(Local ): Usage, data= [ 0x03 ] 3
                            (null)
            Item(Local ): Usage, data= [ 0x04 ] 4
                            (null)
            Item(Global): Logical Minimum, data= [ 0x80 ] 128
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Physical Minimum, data= [ 0x00 ] 0
            Item(Global): Physical Maximum, data= [ 0xff ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position 
Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x05 ] 5
                            (null)
            Item(Local ): Usage, data= [ 0x06 ] 6
                            (null)
            Item(Global): Logical Minimum, data= [ 0x80 ] 128
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Physical Minimum, data= [ 0x00 ] 0
            Item(Global): Physical Maximum, data= [ 0xff ] 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
            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              10
Device Status:     0x0000
  (Bus Powered)


Charles Lepple wrote:
> On Aug 26, 2008, at 2:54 AM, Christopher wrote:
>
>> Now that I've got my code compiling (thanks, Marian), I've having some
>> problems talking to the USB device I've got connected.
>> hid_interrupt_read seems to work just fine, but I keep getting "broken
>> pipe" errors when I use hid_get_input_report(). I seem to have the path
>> right, but I'm totally new to USB programming so I could be messing up
>> something really basic.
>> Thanks for any help,
>> Christopher
>
> One thing that might help is posting the hid_dump_tree() output for 
> your device, and optionally the output of 'lsusb -vvv' (run as root, 
> preferably after detaching the kernel usbhid driver so that the report 
> descriptor shows up in the output.)
>
>> This is the message I get:
>>   TRACE: hid_get_input_report(): looking up report ID...
>>   TRACE: hid_prepare_parse_path(): preparing search path of depth 3 for
>> parse tree of USB device 001/002[0]...
>>   TRACE: hid_prepare_parse_path(): search path prepared for parse tree
>> of USB device 001/002[0].
>>  NOTICE: hid_find_object(): found requested item.
>>   TRACE: hid_get_input_report(): retrieving report ID 0x00 (length:
>> 1024) from USB device 001/002[0]...
>
> This doesn't seem to match the code below (the buffer in the code is 
> 16 bytes). In USB, the size of the transfer matters. Also, I don't 
> know if report ID 0 is valid.
>
>> WARNING: hid_get_input_report(): failed to retrieve report from USB
>> device 001/002[0]:error sending control message: Broken pipe.
>
> "Broken pipe" is a way for the HID device firmware to signal an error 
> to the host. Unfortunately, there isn't an easy way to figure out why 
> it is not happy with what it received.
>
>> This is the function I use to call hid_get_input_report:
>> hid_return ReadReport(HIDInterface *hid, int const *path, int const 
>> pathlen)
>> {
>>     /* trys to get a 16byte report from the specified path. */
>>     int const RECV_PACKET_LEN = 16;
>>     char packet[RECV_PACKET_LEN];
>>     int i;
>>     hid_return result;
>>     printf("Attempting to read from");
>>     for(i = 0; i < pathlen; i++)
>>     {
>>         printf(" 0x%08x", path[i]);
>>     }
>>     printf("\n");
>>     result = hid_get_input_report(hid, path, pathlen, packet,
>> RECV_PACKET_LEN);
>>     if (result != HID_RET_SUCCESS)
>>     {
>>         printf("hid_get_input_report() failed. Error code: %d\n", 
>> result);
>>     }
>>     else
>>     {
>>         printf("Input report: %s\n", packet);
>>     }
>>     return result;
>> }
>>
>> And then I call it like this:
>>     int const PATHIN_1[PATHLEN] = { 0xffa00001, 0xffa00002, 
>> 0xffa10003 };
>>     ReadReport(hid, PATHIN_1, PATHLEN);
>>
>> PATHLEN is #defined as 3
>>
>> _______________________________________________
>> libhid-discuss mailing list
>> libhid-discuss at lists.alioth.debian.org
>> http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss
>
>



More information about the libhid-discuss mailing list