2014-11-26 4 views
2

프린터 용 Linux 드라이버를 작성하려고합니다. Windows XP에서 USBSnoop을 실행하고 로그를 얻었습니다. 이 로그에서 wMaxPacketSize를 1026으로 설정합니다. 인터페이스를 설정 한 후 75 바이트의 응답을받습니다. 64로 설정하면 (lsusb 출력에서) 분명히 64 바이트 만 다시 얻습니다.LibUSB 드라이버 문제 : 시간 초과

내 문제는 장치로/장치에서 대량 전송할 때 시간 초과가 발생합니다. 나는 여기에 같은 문제가 있다고 생각한다 : 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의 출력이
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 

편집

을 -v입니다 : 이것은 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 

에서 편집했다 : 나는 그 리눅스는 방법으로지고있을 수 있습니다 생각합니다. wireshark 및 패킷을 올바르게 돌아올 내 콜백 함수를 호출하지 볼 수 있습니다. 이미 usblp 드라이버를 제거했습니다. 어떤 아이디어?

+0

이 문제의 맨 아래에 도착했습니다. 비슷한 문제가 있습니다. – bph

+0

아니요 : /주의를 산만하게하고 다른 것을 시작했습니다. –

답변

0

비슷한 문제가 발생했습니다. 왜 시간 초과 오류가 발생하는지 알지 못했습니다. 비록 그것이 더 큰 패키지 크기에 대해 훨씬 더 자주 발생하는 것처럼 보입니다. 패키지를 분할하려면 커다란 buffer[1024]을 64 바이트 패키지로 나눈 다음, 항상 버퍼에서 다음 64 바이트를 가져 와서 small_buffer[64]에 넣고 usb를 통해 전송하는 루프를 작성하십시오.