Hi, Gurus, I am doing a Asynchronous Bulk call to USB, everything seems to work fine, but after I call the first libusb_handle_events_timeout, I Received ABORT_PIPE from USBTrace, After the second libusb_handle_events_timeout call, the callback receive the message. (no sure why I have to call libusb_handle_events_timeout twice before I got the call back with that little data), I have legacy code (Windows API) doing the same thing but I did not receive ABORT_PIPE from USBTrace, any ideas?
I am using VS2008, Windows 7 Also I have to call err = libusb_claim_interface(this->m_handle, 0); Before submit, do not understand why I have to do that for this function, while other function seems to work without the above call. Thanks in advance. I attached comparison between the legacy USB Trace and libUSBTrace different in this email. (WriteCallback is a static function) My code is as following: class WriteData { public: int ErrorCode; int ByteTransfered; bool ExitTransfer; }; void LIBUSB_CALL USB_Device::WriteCallback(struct libusb_transfer *transfer) { WriteData* wd =(WriteData*)transfer->user_data; wd->ByteTransfered=transfer->actual_length; wd->ErrorCode==transfer->status; wd->ExitTransfer=true; } libusb_transfer* USB_Device::Alloc_Transfers( const unsigned long endpoint, const unsigned int c_uiLength, unsigned char* pbBuffer, void* userdata, int& err) { libusb_transfer* transfer =libusb_alloc_transfer(0); if (!transfer) { err=-ENOMEM; return NULL; } libusb_fill_bulk_transfer (transfer,m_handle,endpoint,pbBuffer,c_uiLength,U SB_Device::WriteCallback,userdata,ITP_TRANSFER_TIMEOUT); return transfer; } int USB_Device::BulkWrite( const unsigned long c_ulPipeNum, const unsigned int c_uiLength, unsigned char* pbBuffer, HANDLE cancelEvent) { const unsigned long endpoint=c_ulPipeNum*2; WriteData* wd=new WriteData(); wd->ExitTransfer=false; int err =0; libusb_transfer* transfer=Alloc_Transfers(endpoint,c_uiLength, pbBuffer,(void*)wd,err); if (!err) { err = libusb_claim_interface(this->m_handle, 0); //Do I need to claim err=libusb_submit_transfer(transfer); while (!wd->ExitTransfer) { struct timeval tv = { 1, 0 }; err = libusb_handle_events_timeout(NULL, &tv); if (err < 0) { break; } } } if (err < 0) { libusb_cancel_transfer(transfer); while (transfer) if (libusb_handle_events(NULL) < 0) break; return err; } } The debug log is as following: [ 4.045232] [000006d8] libusbx: debug [libusb_claim_interface] interface 0 [ 4.045232] [000006d8] libusbx: debug [winusb_claim_interface] claimed interface 0 [ 4.046232] [000006d8] libusbx: debug [libusb_get_config_descriptor] index 0 [ 4.047232] [000006d8] libusbx: debug [windows_assign_endpoints] (re)assigned endpoint 01 to interface 0 [ 4.047232] [000006d8] libusbx: debug [windows_assign_endpoints] (re)assigned endpoint 02 to interface 0 [ 4.048232] [000006d8] libusbx: debug [windows_assign_endpoints] (re)assigned endpoint 04 to interface 0 [ 4.049232] [000006d8] libusbx: debug [windows_assign_endpoints] (re)assigned endpoint 86 to interface 0 [ 4.050232] [000006d8] libusbx: debug [windows_assign_endpoints] (re)assigned endpoint 88 to interface 0 [ 4.501258] [000006d8] libusbx: debug [winusb_submit_bulk_transfer] matched endpoint 02 with interface 0 [ 4.501258] [000006d8] libusbx: debug [winusb_submit_bulk_transfer] writing 30 bytes [ 4.502258] [000006d8] libusbx: debug [usbi_add_pollfd] add fd 5 events 4 [ 4.503258] [000006d8] libusbx: debug [libusb_get_next_timeout] next timeout in 2.997276s [ 4.505258] [000006d8] libusbx: debug [libusb_handle_events_timeout_completed] doing our own event handling [ 4.506258] [000006d8] libusbx: debug [handle_events] poll() 2 fds with timeout in 1000ms [ 4.507258] [000006d8] libusbx: debug [handle_events] poll() returned 1 [ 4.508258] [000006d8] libusbx: debug [windows_handle_events] checking fd 3 with revents = 0000 [ 4.509258] [000006d8] libusbx: debug [windows_handle_events] checking fd 5 with revents = 0004 [ 4.510258] [000006d8] libusbx: debug [usbi_remove_pollfd] remove fd 5 [ 4.510258] [000006d8] libusbx: debug [windows_transfer_callback] handling I/O completion with errcode 0 [ 4.511258] [000006d8] libusbx: debug [usbi_handle_transfer_completion] transfer 005A8560 has callback 00B68CD5Title: Text Compare Text Compare
Produced: 8/2/2012 10:18:14 PM
Mode: All
Left file: C:\temp\USB\LegacyWrite.txt Right file: F:\LibUsbWriteTrace.txt
[ TXT Log File Generated By USBTrace ] | = | [ TXT Log File Generated By USBTrace ] |
--------- Request # 0 ----[OUT]---- | <> | --------- Request # 1 ----[OUT]---- |
= | ||
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER | URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER | |
Length: 0x80 | Length: 0x80 | |
USBD Status: USBD_STATUS_SUCCESS (0x0) | USBD Status: USBD_STATUS_SUCCESS (0x0) | |
EndpointAddress: 0x2 | EndpointAddress: 0x2 | |
PipeHandle: 0xFFFFFA800D63FDE8 | <> | PipeHandle: 0xFFFFFA8009BF68C8 |
TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT ) | = | TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT ) |
TransferBufferLength: 0x20 | <> | TransferBufferLength: 0x1E |
TransferBuffer: 0x0 | = | TransferBuffer: 0x0 |
TransferBufferMDL: 0x118CBBB0 | <> | TransferBufferMDL: 0x9376DF0 |
UrbLink: 0x0 | = | UrbLink: 0x0 |
** Data ** | ** Data ** | |
FB 40 01 FD 09 03 05 D0 FB F0 05 FD 02 02 40 B0 00 01 4A B0 10 00 FF B0 00 80 7F B0 00 00 00 91 | <> | 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D |
= | ||
--------- Request # 1 ----[OUT]---- | <> | --------- Request # 2 ----[OUT]---- |
= | ||
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER | URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER | |
Length: 0x80 | Length: 0x80 | |
USBD Status: USBD_STATUS_SUCCESS (0x0) | USBD Status: USBD_STATUS_SUCCESS (0x0) | |
EndpointAddress: 0x2 | EndpointAddress: 0x2 | |
PipeHandle: 0xFFFFFA800D63FDE8 | <> | PipeHandle: 0xFFFFFA8009BF68C8 |
TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT ) | = | TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT ) |
TransferBufferLength: 0x20 | <> | TransferBufferLength: 0x1E |
TransferBuffer: 0x0 | = | TransferBuffer: 0x0 |
TransferBufferMDL: 0x118CBBB0 | <> | TransferBufferMDL: 0x9376DF0 |
UrbLink: 0x0 | = | UrbLink: 0x0 |
** Data ** | ** Data ** | |
FB 40 01 FD 09 03 05 D0 FB F0 05 FD 02 02 40 B0 00 01 4A B0 10 00 FF B0 00 80 7F B0 00 00 00 91 | <> | 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D |
= | ||
--------- Request # 2 ----[IN]---- | <> | --------- Request # 3 ----[IN]---- |
= | ||
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER | URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER | |
Length: 0x80 | Length: 0x80 | |
USBD Status: USBD_STATUS_PENDING (0x40000000) | USBD Status: USBD_STATUS_PENDING (0x40000000) | |
EndpointAddress: 0x2 | EndpointAddress: 0x2 | |
PipeHandle: 0xFFFFFA800D63FDE8 | <> | PipeHandle: 0xFFFFFA8009BF68C8 |
TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT ) | = | TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT ) |
TransferBufferLength: 0x0 | TransferBufferLength: 0x0 | |
TransferBuffer: 0x0 | TransferBuffer: 0x0 | |
TransferBufferMDL: 0x118CBBB0 | <> | TransferBufferMDL: 0x9376DF0 |
UrbLink: 0x0 | = | UrbLink: 0x0 |
--------- Request # 3 ----[IN]---- | <> | --------- Request # 4 ----[IN]---- |
= | ||
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER | URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER | |
Length: 0x80 | Length: 0x80 | |
USBD Status: USBD_STATUS_SUCCESS (0x0) | USBD Status: USBD_STATUS_SUCCESS (0x0) | |
EndpointAddress: 0x2 | EndpointAddress: 0x2 | |
PipeHandle: 0xFFFFFA800D63FDE8 | <> | PipeHandle: 0xFFFFFA8009BF68C8 |
TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT ) | = | TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT ) |
TransferBufferLength: 0x20 | <> | TransferBufferLength: 0x1E |
TransferBuffer: 0x0 | = | TransferBuffer: 0x0 |
TransferBufferMDL: 0x118CBBB0 | <> | TransferBufferMDL: 0x9376DF0 |
UrbLink: 0x0 | = | UrbLink: 0x0 |
-+ | --------- Request # 5 ----[OUT]---- | |
URB_FUNCTION_ABORT_PIPE | ||
Length: 0x28 | ||
USBD Status: USBD_STATUS_SUCCESS (0x0) | ||
EndpointAddress: 0x2 | ||
PipeHandle: 0xFFFFFA8009BF68C8 | ||
--------- Request # 6 ----[OUT]---- | ||
URB_FUNCTION_ABORT_PIPE | ||
Length: 0x28 | ||
USBD Status: USBD_STATUS_SUCCESS (0x0) | ||
EndpointAddress: 0x2 | ||
PipeHandle: 0xFFFFFA8009BF68C8 | ||
--------- Request # 7 ----[IN]---- | ||
URB_FUNCTION_ABORT_PIPE | ||
Length: 0x28 | ||
USBD Status: USBD_STATUS_SUCCESS (0x0) | ||
EndpointAddress: 0x2 | ||
PipeHandle: 0xFFFFFA8009BF68C8 | ||
--------- Request # 8 ----[IN]---- | ||
URB_FUNCTION_ABORT_PIPE | ||
Length: 0x28 | ||
USBD Status: USBD_STATUS_SUCCESS (0x0) | ||
EndpointAddress: 0x2 | ||
PipeHandle: 0xFFFFFA8009BF68C8 | ||
------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________ libusbx-devel mailing list libusbx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libusbx-devel