122
122
_DEFAULT_RX_BUF_SIZE = const (1024 )
123
123
_CONTAINER_HEADER_SIZE = const (12 )
124
124
125
+ # Length of the bulk transfer endpoints. Maybe should be configurable?
126
+ _BULK_EP_LEN = const (64 )
127
+
125
128
# MTP struct definitions using uctypes
126
129
# Container header struct
127
130
_MTP_CONTAINER_HEADER_DESC = {
@@ -288,7 +291,7 @@ def on_reset(self):
288
291
def _rx_xfer (self ):
289
292
"""Submit a new transfer to receive data from the host."""
290
293
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 )
292
295
self ._log ("Submitting OUT transfer, buffer size={}" , len (buf ))
293
296
self .submit_xfer (self .ep_out , buf , self ._rx_cb )
294
297
else :
@@ -301,19 +304,19 @@ def _rx_xfer(self):
301
304
302
305
def _rx_cb (self , ep , res , num_bytes ):
303
306
"""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)
305
308
if res == 0 :
306
309
self ._rx .finish_write (num_bytes )
307
- self ._log ("Scheduling data processing" )
310
+ # self._log("Scheduling data processing")
308
311
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)
311
314
self ._rx_xfer () # Continue receiving
312
315
313
316
def _tx_xfer (self , quiet = False ):
314
317
"""Submit a new transfer to send data to the host."""
315
318
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]
317
320
self ._log ("Submitting IN transfer, data size={}" , len (buf ))
318
321
self .submit_xfer (self .ep_in , buf , self ._tx_cb )
319
322
else :
@@ -963,18 +966,18 @@ def _cmd_get_object(self, params):
963
966
# Write header to TX buffer
964
967
self ._tx .write (container )
965
968
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)
968
971
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)
973
976
974
977
975
978
# Now send the file data in chunks
976
979
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))
978
981
979
982
while bytes_sent < filesize :
980
983
# Wait until we can write to the TX buffer
@@ -984,7 +987,7 @@ def _cmd_get_object(self, params):
984
987
return
985
988
986
989
time .sleep_ms (10 )
987
- self ._tx_xfer (quiet = True )
990
+ # self._tx_xfer(quiet=True)
988
991
989
992
# Read a chunk from the file
990
993
remaining = filesize - bytes_sent
@@ -999,16 +1002,21 @@ def _cmd_get_object(self, params):
999
1002
self ._tx .write (chunk )
1000
1003
bytes_sent += len (chunk )
1001
1004
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 )
1005
1009
1006
1010
# Progress indicator for large files
1007
1011
if filesize > 10_000 and bytes_sent % 10_000 < chunk_size :
1008
1012
self ._log ("File transfer progress: {:.1f}%" , (bytes_sent * 100.0 ) / filesize )
1009
1013
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()
1012
1020
1013
1021
self ._log ("File transfer complete: {} bytes sent" , bytes_sent )
1014
1022
0 commit comments