122122_DEFAULT_RX_BUF_SIZE = const (1024 )
123123_CONTAINER_HEADER_SIZE = const (12 )
124124
125+ # Length of the bulk transfer endpoints. Maybe should be configurable?
126+ _BULK_EP_LEN = const (64 )
127+
125128# MTP struct definitions using uctypes
126129# Container header struct
127130_MTP_CONTAINER_HEADER_DESC = {
@@ -288,7 +291,7 @@ def on_reset(self):
288291 def _rx_xfer (self ):
289292 """Submit a new transfer to receive data from the host."""
290293 if self .is_open () and not self .xfer_pending (self .ep_out ) and self ._rx .writable ():
291- buf = self ._rx .pend_write ()
294+ buf = self ._rx .pend_write (_BULK_EP_LEN )
292295 self ._log ("Submitting OUT transfer, buffer size={}" , len (buf ))
293296 self .submit_xfer (self .ep_out , buf , self ._rx_cb )
294297 else :
@@ -301,19 +304,19 @@ def _rx_xfer(self):
301304
302305 def _rx_cb (self , ep , res , num_bytes ):
303306 """Callback when data is received from the host."""
304- self ._log ("OUT transfer complete: res={}, bytes={}" , res , num_bytes )
307+ # self._log("OUT transfer complete: res={}, bytes={}", res, num_bytes)
305308 if res == 0 :
306309 self ._rx .finish_write (num_bytes )
307- self ._log ("Scheduling data processing" )
310+ # self._log("Scheduling data processing")
308311 schedule (self ._process_rx , None )
309- else :
310- self ._log ("OUT transfer failed with error {}" , res )
312+ # else:
313+ # self._log("OUT transfer failed with error {}", res)
311314 self ._rx_xfer () # Continue receiving
312315
313316 def _tx_xfer (self , quiet = False ):
314317 """Submit a new transfer to send data to the host."""
315318 if self .is_open () and not self .xfer_pending (self .ep_in ) and self ._tx .readable ():
316- buf = self ._tx .pend_read ()
319+ buf = self ._tx .pend_read ()#[0:_BULK_EP_LEN]
317320 self ._log ("Submitting IN transfer, data size={}" , len (buf ))
318321 self .submit_xfer (self .ep_in , buf , self ._tx_cb )
319322 else :
@@ -963,18 +966,18 @@ def _cmd_get_object(self, params):
963966 # Write header to TX buffer
964967 self ._tx .write (container )
965968 print (f'readable: { self ._tx .readable ()} ' )
966- if self .is_open () and self .xfer_pending (self .ep_in ):
967- time .sleep_ms (11 )
969+ # if self.is_open() and self.xfer_pending(self.ep_in):
970+ # time.sleep_ms(11)
968971
969- self ._tx_xfer ()
970- print (f'container passed' )
971- if self .is_open () and self .xfer_pending (self .ep_in ):
972- time .sleep_ms (12 )
972+ # self._tx_xfer()
973+ # print(f'container passed')
974+ # if self.is_open() and self.xfer_pending(self.ep_in):
975+ # time.sleep_ms(12)
973976
974977
975978 # Now send the file data in chunks
976979 bytes_sent = 0
977- chunk_size = min (_DEFAULT_TX_BUF_SIZE , len (self ._tx ._b ))
980+ chunk_size = _MAX_PACKET_SIZE # min(_DEFAULT_TX_BUF_SIZE, len(self._tx._b))
978981
979982 while bytes_sent < filesize :
980983 # Wait until we can write to the TX buffer
@@ -984,7 +987,7 @@ def _cmd_get_object(self, params):
984987 return
985988
986989 time .sleep_ms (10 )
987- self ._tx_xfer (quiet = True )
990+ # self._tx_xfer(quiet=True)
988991
989992 # Read a chunk from the file
990993 remaining = filesize - bytes_sent
@@ -999,16 +1002,21 @@ def _cmd_get_object(self, params):
9991002 self ._tx .write (chunk )
10001003 bytes_sent += len (chunk )
10011004
1002- # Trigger transfer if buffer is getting full
1003- if self ._tx .writable () < chunk_size :
1004- self ._tx_xfer ()
1005+ # Trigger transfer # if buffer is getting full
1006+ # if self._tx.writable() < chunk_size:
1007+ # if self._tx.readable() >= chunk_size:
1008+ self ._tx_xfer (quiet = True )
10051009
10061010 # Progress indicator for large files
10071011 if filesize > 10_000 and bytes_sent % 10_000 < chunk_size :
10081012 self ._log ("File transfer progress: {:.1f}%" , (bytes_sent * 100.0 ) / filesize )
10091013
1010- # Ensure final data is sent
1011- self ._tx_xfer ()
1014+ while self ._tx .readable ():
1015+ self ._tx_xfer ()
1016+ time .sleep_ms (50 )
1017+
1018+ # # Ensure final data is sent
1019+ # self._tx_xfer()
10121020
10131021 self ._log ("File transfer complete: {} bytes sent" , bytes_sent )
10141022
0 commit comments