Just out of curiosity did you try it the way T3.x does it - probably should run a test to see if it works. Stay tuned
As I think I posted above, it looks like the T3.x does real simple for USB packet it gets it does a write.
I have not tried that way yet.
I did try some code that, if the file is greater than my bigbuffer it tries to do a extmem_alloc() of the whole file and so far left most of the rest of the code the same, so it does not actually wrap at that point.
I cut the delay between reads to 1ms... And ran it.
Again with the larger file from before it did transfer the whole file but still timed out waiting for me to send back a response.
The debug output:
Code:
MTPD::SendObject: len:341024
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+WR 8192 8192 259628 0 143235
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+WR 8192 8192 209964 8192 97096
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+WR 8192 8192 158764 16384 99778
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+WR 8192 8192 108076 24576 99825
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+WR 8192 8192 57388 32768 98534
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+WR 8192 8192 9260 40960 93950
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+[COLOR="#FF0000"]$[/COLOR]WR 8192 8192 0 49152 97991
WR 8192 8192 0 57344 103734
WR 8192 8192 0 65536 94605
WR 8192 8192 0 73728 99163
WR 8192 8192 0 81920 99886
WR 8192 8192 0 90112 100052
WR 8192 8192 0 98304 101480
WR 8192 8192 0 106496 94145
WR 8192 8192 0 114688 103839
WR 8192 8192 0 122880 100163
WR 8192 8192 0 131072 95135
WR 8192 8192 0 139264 99310
WR 8192 8192 0 147456 102106
WR 8192 8192 0 155648 98636
WR 8192 8192 0 163840 99002
WR 8192 8192 0 172032 98981
WR 8192 8192 0 180224 98646
WR 8192 8192 0 188416 95891
WR 8192 8192 0 196608 99518
WR 8192 8192 0 204800 99510
WR 8192 8192 0 212992 100233
WR 8192 8192 0 221184 99552
WR 8192 8192 0 229376 99777
WR 8192 8192 0 237568 99828
WR 8192 8192 0 245760 98013
WR 8192 8192 0 253952 100298
WR 8192 8192 0 262144 97712
WR 8192 8192 0 270336 97267
WR 8192 8192 0 278528 100637
WR 8192 8192 0 286720 102458
WR 8192 8192 0 294912 101941
WR 8192 8192 0 303104 97371
WR 8192 8192 0 311296 100749
WR 8192 8192 0 319488 100859
WR 8192 8192 0 327680 95343
WR 5152 0 335872 50696
CL 341024
So with the debug output the final
$
Shows that it finished reading the file. It then went through the process of writting each of the 8192 blocks.
I wonder if it would make any differences in the timing if instead. of looping calling the write with 8192, I instead called it with the whole count of the data I had available at that time...
But the progress dialog stayed up fully showing all the way to end and then heard the timeout error. I then went back and reset the teensy and was able to open that file as a JPG, so it looks like the data got there.
A possible partial work around might be to have the code send the command completed while still processing the writes. But then not sure what would happen if for example the user had chosen two files to transfer and would it try to start up the second file while I am still doing the writes and would that time out?
I keep looking through MTP document and the google around to see if there are some other work around to this, something like:
a) Maybe some response to send back that says, I am partially done... Don't see one.
b) Or maybe some form of heartbeat event... Again I don't see any, but again don't see anything appropriate. But maybe send the undefined... Maybe it will trigger the host code to say the device must still be there...
c) I don't see any way for the host to send event to device....