Skip to content

Commit 3e748aa

Browse files
committed
attempts
1 parent 92b07b9 commit 3e748aa

File tree

1 file changed

+27
-19
lines changed
  • micropython/usb/usb-device-mtp/usb/device

1 file changed

+27
-19
lines changed

micropython/usb/usb-device-mtp/usb/device/mtp.py

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@
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

Comments
 (0)