Handling short transfers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Daniel:

I've got an idea for improving the way libusb handles short bulk-IN
transfers (under Linux, anyway -- I don't know about Windows or Mac
OS).  It would require some changes to usbfs and corresponding changes
to libusb.

usbfs would be changed so that whenever a bulk URB with the
URB_SHORT_NOT_OK flag set ended with a short packet, all the
outstanding URBs queued to the same endpoint would be unlinked
immediately.  In addition, an "endpoint blocked" flag would prevent
further URBs from being submitted to that endpoint until it was cleared
by a new USBDEVFS_UNBLOCKEP ioctl.

(I would use USBDEVFS_RESETEP for this, but it already has an 
established meaning -- even though it is essentially unuseable.)

In turn, whenever libusb has to break a large bulk-IN transfer up into
several URBs, it would set the USBDEVFS_URB_SHORT_NOT_OK flag in all of
them.  If any of them fail with -EREMOTEIO status, libusb would have to
stop submitting the URBs and issue the UNBLOCKEP ioctl.  This would
prevent any further data after the short packet from mistakenly being
packaged up in the same transfer.

Does that sound like a feasible solution?

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux