LibUSB驱动程序问题:超时

时间:2014-11-26 01:30:35

标签: c driver linux-device-driver libusb

我正在尝试为打印机编写linux驱动程序。我在Windows XP上运行USBSnoop并获取日志。在此日志中,它将wMaxPacketSize设置为1026.在我设置接口后,我得到75字节的响应。如果我将它设置为64(在lsusb输出中),我显然只能得到64字节。

我的问题是与设备的批量转移我得到的超时。我想我有同样的问题:http://libusb.6.n5.nabble.com/libusb-bulk-transfer-return-timeout-error-and-transferred-set-to-0-td5712761.html

我执行了libusb_clear_halt(),我得到了与上面链接帖子类似的结果。在它底部说"手动将缓冲区分成64个字节"解决它。我的问题是如何拆分数据包?这是我第一次使用LibUSB。

这是lsusb -v

的输出
Bus 002 Device 009: ID 07ce:c000  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            7 Printer
  bDeviceSubClass         1 Printer
  bDeviceProtocol         2 Bidirectional
  bMaxPacketSize0        64
  idVendor           0x07ce 
  idProduct          0xc000 
  bcdDevice            1.00
  iManufacturer           1 COPAL
  iProduct                2 COPAL USB Printer
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              200mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         7 Printer
      bInterfaceSubClass      1 Printer
      bInterfaceProtocol      2 Bidirectional
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               0.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         0
  bNumConfigurations      0
Device Status:     0x0001
  Self Powered

编辑:这是在dmesg

usb 2-1.1: new high-speed USB device number 9 using ehci_hcd
usb 2-1.1: config 1 interface 0 altsetting 0 bulk endpoint 0x1 has invalid maxpacket 64
usb 2-1.1: config 1 interface 0 altsetting 0 bulk endpoint 0x82 has invalid maxpacket 64

编辑:我认为可能是因为Linux正在阻碍。在wireshark上,我可以看到数据包正确返回但没有调用我的回调函数。我已经删除了usblp驱动程序。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

遇到了类似的问题。还没弄清楚为什么我会得到超时错误。虽然对于较大的包装尺寸,它们似乎更常出现。如果你想分割你的包,只需自己写一个函数,将你的大buffer[1024]分成64个字节的包,然后做一个循环,总是从缓冲区接下来的64个字节,把它放在{{1并通过usb发送它们。