@@ -221,6 +221,8 @@ def __init__(
221221 after_completion ,
222222 registerFinalizer ,
223223 unregisterFinalizer ,
224+ short_is_error ,
225+ add_zero_packet ,
224226 ):
225227 """
226228 You should not instanciate this class directly.
@@ -241,6 +243,8 @@ def __init__(
241243 raise USBErrorNoMem
242244 # pylint: enable=undefined-variable
243245 self .__transfer = transfer
246+ self .setShortIsError (short_is_error )
247+ self .setAddZeroPacket (add_zero_packet )
244248 finalizer_handle = id (self )
245249 self .__close = weakref .finalize (
246250 self ,
@@ -720,6 +724,44 @@ def setBuffer(self, buffer_or_len):
720724 transfer .buffer = cast (buff , c_void_p )
721725 transfer .length = sizeof (buff )
722726
727+ def isShortAnError (self ):
728+ """
729+ Returns whether the LIBUSB_TRANSFER_SHORT_NOT_OK flag is set on this
730+ transfer.
731+ """
732+ return bool (self .__transfer .contents .flags & libusb1 .LIBUSB_TRANSFER_SHORT_NOT_OK )
733+
734+ def setShortIsError (self , state ):
735+ """
736+ state (bool)
737+ When true, LIBUSB_TRANSFER_SHORT_NOT_OK flag is set on this
738+ transfer.
739+ Otherwise, it is cleared.
740+ """
741+ if state :
742+ self .__transfer .contents .flags |= libusb1 .LIBUSB_TRANSFER_SHORT_NOT_OK
743+ else :
744+ self .__transfer .contents .flags &= ~ libusb1 .LIBUSB_TRANSFER_SHORT_NOT_OK
745+
746+ def isZeroPacketAdded (self ):
747+ """
748+ Returns whether the LIBUSB_TRANSFER_ADD_ZERO_PACKET flag is set on this
749+ transfer.
750+ """
751+ return bool (self .__transfer .contents .flags & libusb1 .LIBUSB_TRANSFER_ADD_ZERO_PACKET )
752+
753+ def setAddZeroPacket (self , state ):
754+ """
755+ state (bool)
756+ When true, LIBUSB_TRANSFER_ADD_ZERO_PACKET flag is set on this
757+ transfer.
758+ Otherwise, it is cleared.
759+ """
760+ if state :
761+ self .__transfer .contents .flags |= libusb1 .LIBUSB_TRANSFER_ADD_ZERO_PACKET
762+ else :
763+ self .__transfer .contents .flags &= ~ libusb1 .LIBUSB_TRANSFER_ADD_ZERO_PACKET
764+
723765 def isSubmitted (self ):
724766 """
725767 Tells if this transfer is submitted and still pending.
@@ -1508,11 +1550,14 @@ def interruptRead(self, endpoint, length, timeout=0):
15081550 raise
15091551 return data_buffer [:transferred ]
15101552
1511- def getTransfer (self , iso_packets = 0 ):
1553+ def getTransfer (self , iso_packets = 0 , short_is_error = False , add_zero_packet = False ):
15121554 """
15131555 Get an USBTransfer instance for asynchronous use.
15141556 iso_packets: the number of isochronous transfer descriptors to
15151557 allocate.
1558+ short_is_error: When true, short frames are reported as errors.
1559+ add_zero_packet: When true, transfers of a multiple of the endpoint
1560+ size are followed by a zero-length packet.
15161561 """
15171562 return USBTransfer (
15181563 context = self .__context ,
@@ -1522,6 +1567,8 @@ def getTransfer(self, iso_packets=0):
15221567 after_completion = self .__inflight_remove ,
15231568 registerFinalizer = self .__registerFinalizer ,
15241569 unregisterFinalizer = self .__unregisterFinalizer ,
1570+ short_is_error = short_is_error ,
1571+ add_zero_packet = add_zero_packet ,
15251572 )
15261573
15271574class USBConfiguration :
0 commit comments