我正在尝试为打印机编写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驱动程序。有任何想法吗?
答案 0 :(得分:0)
遇到了类似的问题。还没弄清楚为什么我会得到超时错误。虽然对于较大的包装尺寸,它们似乎更常出现。如果你想分割你的包,只需自己写一个函数,将你的大buffer[1024]
分成64个字节的包,然后做一个循环,总是从缓冲区接下来的64个字节,把它放在{{1并通过usb发送它们。