MTP Responder Contribution

Real quick. Thanks. I posted a test sketch that covers all the storage areas in the other thread. Was planning on checking some other functions in the morning. Will download the latest first though
 
@WMXZ.
Just did a little testing using 2 SD cards (internal and External), 1 RAM disk, 2 SPIFlash, and 1 QSPI. Just tested some basic MTP functions like copy/paste, delete etc from windows explorer. For the most part this is what I found:
Code:
Copy/Pasting
	1. [COLOR="#FF0000"]Between devices on Teensy fails and hangs from doing anything else.[/COLOR]
	2. [COLOR="#FF0000"]Disabling and enabling does not work.  Can do it but Teensy does not show up in Win Explorer after re-enabling[/COLOR]
	3. Copying from PC to devices works for a txt and imgs. Tested with a PDF buf funny same [COLOR="#FF0000"]PDF copied to 5 devices sucessfully and opened correct but when copied to the 6 (propshield flash) failed and lost Propshield in Explorer.  When I restared T4.1 file did actually copy to Propshield.[/COLOR].  May just have been a glitch.
	4. Coping from all devices worked for me.
	
Deleting
	1. Able to delete files from all devices
	2. Can do multiple file deletions
	3.[COLOR="#FF0000"] Can not delete a directory with files in it. Have to delete files first. This was on the SD Cards (external and Internal). [/COLOR] [B]However it does work on qspi, ram and SPI flash
	[/B]
Move - Create Directory - Rename
	1. Created a directory on each device and renamed it successfully.
	2. After creating a directory moved a file from that device into the newly created directory no issue
	3. Restarted and everything was where it was created.
	4. Also copied file from desktop into sub directory auccessfully
This is the sketch I used using your updated mtp_test sketch.

Code:
#include "Arduino.h"

#include "SD.h"
#include "MTP.h"
#include "usb1_mtp.h"

#define HAVE_LITTLEFS 1 // set to zero if no LtttleFS is existing or to be used

/****  Start device specific change area  ****/

  // edit SPI to reflect your configuration (following is fot T4.1)
  #define SD_MOSI 11
  #define SD_MISO 12
  #define SD_SCK  13

  #define SPI_SPEED SD_SCK_MHZ(16)  // adjust to sd card 

// SDClasses
  const char *sd_str[]={"sdio","sd0"}; // edit to reflect your configuration
  const int cs[] = {BUILTIN_SDCARD, 4}; // edit to reflect your configuration
  const int nsd = sizeof(cs)/sizeof(int);

SDClass sdx[nsd];

//LittleFS classes
#if HAVE_LITTLEFS==1
  #include "LittleFS.h"
  #define USE_RAM 1
    const char *ram_str[]={"RAM1"};     // edit to reflect your configuration
    const int ram_size[] = {4'000'000};
    const int ram_nsd = sizeof(ram_size)/sizeof(int);
    LittleFS_RAM ramfs[ram_nsd]; // needs to be declared if LittleFS is used in storage.h

  #define USE_SPI 1
    const char *spi_str[]={"PROPSHIELD", "WINBOND"};     // edit to reflect your configuration
    const int spi_cs[] = {6, 10}; // edit to reflect your configuration
    const int spi_nsd = sizeof(spi_cs)/sizeof(int);
    LittleFS_SPIFlash spifs[spi_nsd]; // needs to be declared if LittleFS is used in storage.h
    
  #define USE_QSPI 1
    const char *qspi_str[]={"QSPI0"};     // edit to reflect your configuration
    const int qspi_nsd = 1;
    LittleFS_QSPIFlash qspifs[qspi_nsd]; // needs to be declared if LittleFS is used in storage.h
    
 
#endif

MTPStorage_SD storage;
MTPD       mtpd(&storage);


void storage_configure()
{
    #if defined SD_SCK
      SPI.setMOSI(SD_MOSI);
      SPI.setMISO(SD_MISO);
      SPI.setSCK(SD_SCK);
    #endif

    for(int ii=0; ii<nsd; ii++)
    { if(cs[ii] == BUILTIN_SDCARD)
      {
        if(!sdx[ii].sdfs.begin(SdioConfig(FIFO_SDIO))) {Serial.println("No storage"); while(1);};
        storage.addFilesystem(sdx[ii], sd_str[ii]);
      }
      else if(cs[ii]<BUILTIN_SDCARD)
      {
        pinMode(cs[ii],OUTPUT); digitalWriteFast(cs[ii],HIGH);
        if(!sdx[ii].sdfs.begin(SdSpiConfig(cs[ii], SHARED_SPI, SPI_SPEED))) {Serial.println("No storage"); while(1);}
        storage.addFilesystem(sdx[ii], sd_str[ii]);
      }
        uint64_t totalSize = sdx[ii].totalSize();
        uint64_t usedSize  = sdx[ii].usedSize();
        Serial.printf("Storage %d %d %s ",ii,cs[ii],sd_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
    }
    #if HAVE_LITTLEFS==1
      #if USE_RAM == 1
        for(int ii=0; ii<ram_nsd;ii++)
        {
          { if(!ramfs[ii].begin(ram_size[ii])) { Serial.println("No storage"); while(1);}
            storage.addFilesystem(ramfs[ii], ram_str[ii]);
          }
          uint64_t totalSize = ramfs[ii].totalSize();
          uint64_t usedSize  = ramfs[ii].usedSize();
          Serial.printf("Storage %d %s ",ii,ram_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
        }
      #endif

      #if USE_SPI == 1
        for(int ii=0; ii<spi_nsd;ii++) {
          pinMode(spi_cs[ii],OUTPUT); digitalWriteFast(cs[ii],HIGH);
          if(!spifs[ii].begin(spi_cs[ii], SPI)) {Serial.println("No storage"); while(1);}
          storage.addFilesystem(spifs[ii], spi_str[ii]);
          
        uint64_t totalSize = spifs[ii].totalSize();
        uint64_t usedSize  = spifs[ii].usedSize();
        Serial.printf("Storage %d %d %s ",ii,spi_cs[ii],spi_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
        }
      #endif

      #if USE_QSPI == 1
       for(int ii=0; ii<qspi_nsd;ii++) {
          if(!qspifs[ii].begin()) {Serial.println("No storage"); while(1);}
          storage.addFilesystem(qspifs[ii], qspi_str[ii]);
     
          uint64_t totalSize = qspifs[ii].totalSize();
          uint64_t usedSize  = qspifs[ii].usedSize();
          Serial.printf("Storage %d %s ",ii,qspi_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
        }
      #endif
      
    #endif
}
/****  End of device specific change area  ****/

  // Call back for file timestamps.  Only called for file create and sync(). needed by SDFat-beta
   #include "TimeLib.h"
  void dateTime(uint16_t* date, uint16_t* time, uint8_t* ms10) 
  { *date = FS_DATE(year(), month(), day());
    *time = FS_TIME(hour(), minute(), second());
    *ms10 = second() & 1 ? 100 : 0;
  }

void logg(uint32_t del, const char *txt)
{ static uint32_t to;
  if(millis()-to > del)
  {
    Serial.println(txt); 
    to=millis();
  }
}

void setup()
{ 
  while(!Serial); 
  Serial.println("MTP_test");
  
  // Set Time callback // needed for SDFat-beta
  FsDateTime::callback = dateTime;

  usb_mtp_configure();
  storage_configure();

  #if HAVE_LITTLEFS==1
  // store some files into disks (but only once)
  for(int ii=0; ii<10;ii++)
  { char filename[80];
    sprintf(filename,"test_%d.txt",ii);
    if(!ramfs[0].exists(filename))
    {
      File file=ramfs[0].open(filename,FILE_WRITE_BEGIN);
        file.println("This is a test line");
      file.close();
    }
  }
  #endif
  
  const char *str = "test1.txt";
  if(sdx[0].exists(str)) sdx[0].remove(str);
  File file=sdx[0].open(str,FILE_WRITE_BEGIN);
      file.println("This is a test line");
  file.close();

  Serial.println("\n**** dir of sd[0] ****");
  sdx[0].sdfs.ls();
  Serial.println();

  Serial.println("Setup done");
  Serial.flush();
}

void loop()
{ 
  mtpd.loop();

  //logg(1000,"loop");
  //asm("wfi"); // may wait forever on T4.x
}
 
@WMXZ
Set it up so that I now have 7 devices showing under Teensy. The other night when I tested with the old method was only able to to 6.

Other thing is when I went back and retest deleting a folder with a file in it, it now fails when when I try to deleted the folder on s SPIFLash chip. As opposed to just sd card
 
@WMXZ.
Just did a little testing using 2 SD cards (internal and External), 1 RAM disk, 2 SPIFlash, and 1 QSPI. Just tested some basic MTP functions like copy/paste, delete etc from windows explorer. For the most part this is what I found:
Code:
Copy/Pasting
	1. [COLOR="#FF0000"]Between devices on Teensy fails and hangs from doing anything else.[/COLOR]
	2. [COLOR="#FF0000"]Disabling and enabling does not work.  Can do it but Teensy does not show up in Win Explorer after re-enabling[/COLOR]
	3. Copying from PC to devices works for a txt and imgs. Tested with a PDF buf funny same [COLOR="#FF0000"]PDF copied to 5 devices sucessfully and opened correct but when copied to the 6 (propshield flash) failed and lost Propshield in Explorer.  When I restared T4.1 file did actually copy to Propshield.[/COLOR].  May just have been a glitch.
	4. Coping from all devices worked for me.
	
Deleting
	1. Able to delete files from all devices
	2. Can do multiple file deletions
	3.[COLOR="#FF0000"] Can not delete a directory with files in it. Have to delete files first. This was on the SD Cards (external and Internal). [/COLOR] [B]However it does work on qspi, ram and SPI flash
	[/B]
Move - Create Directory - Rename
	1. Created a directory on each device and renamed it successfully.
	2. After creating a directory moved a file from that device into the newly created directory no issue
	3. Restarted and everything was where it was created.
	4. Also copied file from desktop into sub directory auccessfully

OK, to the red points
I will look into them

-copying works only from and to Teensy. (MTP calls that get and send, teensy should say PC copy failed, have never tested failing operation, was happy if something is not failing)
-Disabling and enabling Teensy with device manager is working for me to refresh (at least when I did it). but it is a very bad workaround to clean-up index file.
The problem with MTP is that it designed to remember and Responder (Teensy) cannot take initiative. So question is how to tell PC to close and reopen a session.
one needs a windows bat file to close and reopen session
- deleting directories. I had a problems with that code so I need to work on it. One problem is different devices all have root objects and MTP server (initiator) labels all roots with -1. Code originally written by @hubbe was dealing with a single storage
 
Last edited:
OK, to the red points
I will look into them

-copying works only from and to Teensy. (MTP calls that get and send, teensy should say PC failed, have never tested failing operation, was happy if something is not failing)
-Disabling and enabling Teensy with device manager is working for me to refresh (at least when I did it). but it is a very bad workaround to clean-up index file.
The problem with MTP is that it designed to remember and Responder (Teensy) cannot take initiative. So question is how to tell PC to close and reopen a session.
one needs a windows bat file to close and reopen session
- deleting directories. I had a problems with that code so I need to work on it. One problem is different devices all have root objects and MTP server (initiator) labels all roots with -1. Code originally written by @hubbe was dealing with a single storage

Thanks for the explanation, its been kind of interesting to dig around the guts of MTP when I was trying to do it myself. Gave me a new appreciation of the effort to get it working. Kudo's

Refresh MTPIndex: Not sure there is much you can do with that. But was thinking that if I reclick on Teensy (the device) what command get sent, and if you could use that to rescan the roots with scandir. Or what happens if the refresh button is hit - does it send anything back? This is just me rambling at this point - need more coffee , lots more coffee.

EDIT: Just tested my thought can't there from here. Its read directory once.
 
Last edited:
But was thinking that if I reclick on Teensy (the device) what command get sent, and if you could use that to rescan the roots with scandir. Or what happens if the refresh button is hit - does it send anything back?
If you go into MTP.cpp at the top define DEGUG to 1 then Terminal will send you all commands and replies over serial. The first word is always a teensy command or answer
To see what it does go to MTP::loop
 
If you go into MTP.cpp at the top define DEGUG to 1 then Terminal will send you all commands and replies over serial. The first word is always a teensy command or answer
To see what it does go to MTP::loop

Yep just did that so printContainer would work. After the first click on the device or sub directory nothing additional gets sent. If I hit refresh same thing. I edited my post basically to say doesn't work :(
 
Morning all,

@mjs513 I grabbed your updated sketch. I also setup MTP Serial, which is nice to get outputs, to see what is going on. It would be great if we got some of this built in.

I commented out your second SPI Flash (WINBOND) as I only have setup a propshield with it. First several attempts the external SD did not work and nothing would show up.
Debug output just said no storage or some such message.

I rechecked things and used different SD Card and now appears to show up... :D

However with this T4.1 I am still running into issue of trying to copy a 384KB image file to SD, QSPI... It does copy to RAM drive.

Will see about turning on debug

EDIT: I turned on DEBUG in first level MTP.cpp and now the copy works... Here is output with debug not sure if it will help or not.
Code:
MTP_test
After usb_mtp_configure
Storage 0 254 sdio 264289280 53494784
Storage 1 4 sd0 64055410688 1703936
Storage 0 RAM1 4000000 512
Storage 0 6 PROPSHIELD 8388608 8192
Storage 0 QSPI0 16777216 552960
After storage_configure

**** dir of sd[0] ****
overlays/
kernel7.img
mtpindex.dat
kernel.img
bcm2710-rpi-3-b-plus.dtb
test1.txt
kernel7l.img
kernel8.img
bcm2708-rpi-b-plus.dtb
issue.txt
bcm2708-rpi-b.dtb
bcm2708-rpi-cm.dtb
bcm2708-rpi-zero-w.dtb
bcm2708-rpi-zero.dtb
bcm2709-rpi-2-b.dtb
bcm2710-rpi-2-b.dtb
start_cd.elf
start.elf
cmdline.txt
config.txt
bcm2710-rpi-3-b.dtb
bcm2710-rpi-cm3.dtb
bcm2711-rpi-4-b.dtb
COPYING.linux
start_db.elf
start_x.elf
fixup.dat
fixup_cd.dat
fixup_db.dat
fixup_x.dat
bootcode.bin
start4.elf
start4cd.elf
start4db.elf
start4x.elf
fixup4.dat
fixup4cd.dat
fixup4db.dat
fixup4x.dat
LICENCE.broadcom

Setup done
1002 16 1 0: 1 0 0
2001 16 3 0: 1 0 0
1001 12 1 1: 1 0 0
2001 12 3 1: 0 0 0
1014 16 1 2: d402 0 0
2001 16 3 2: d402 0 0
1004 12 1 3: d402 0 0
2001 12 3 3: d402 0 0
1005 16 1 4: 1 0 0
2001 16 3 4: 1 0 0
1005 16 1 5: 2 0 0
2001 16 3 5: 2 0 0
1005 16 1 6: 3 0 0
2001 16 3 6: 3 0 0
1005 16 1 7: 4 0 0
2001 16 3 7: 4 0 0
1005 16 1 8: 5 0 0
2001 16 3 8: 5 0 0
9801 16 1 9: 3000 0 0
2001 16 3 9: 3000 0 0
9801 16 1 10: 3001 0 0
2001 16 3 10: 3001 0 0
1007 24 1 11: 1 0 ffffffff
2001 24 3 11: 1 0 ffffffff
9803 20 1 12: 2d dc02 ffffffff
2001 20 3 12: 2d dc02 ffffffff
9802 20 1 13: dc03 3000 ffffffff
2001 20 3 13: dc03 3000 ffffffff
9803 20 1 14: 2d dc03 ffffffff
2001 20 3 14: 2d dc03 ffffffff
9802 20 1 15: dc04 3000 ffffffff
2001 20 3 15: dc04 3000 ffffffff
9803 20 1 16: 2d dc04 ffffffff
2001 20 3 16: 2d dc04 ffffffff
1008 16 1 17: 2d dc04 ffffffff
2001 16 3 17: 2d dc04 ffffffff
9802 20 1 18: dc01 3000 ffffffff
2001 20 3 18: dc01 3000 ffffffff
9803 20 1 19: 2d dc01 ffffffff
2001 20 3 19: 2d dc01 ffffffff
9802 20 1 20: dc07 3000 ffffffff
2001 20 3 20: dc07 3000 ffffffff
9803 20 1 21: 2d dc07 ffffffff
2001 20 3 21: 2d dc07 ffffffff
9802 20 1 22: dc41 3000 ffffffff
2001 20 3 22: dc41 3000 ffffffff
9803 20 1 23: 2d dc41 ffffffff
2001 20 3 23: 2d dc41 ffffffff
9802 20 1 24: dc44 3000 ffffffff
2001 20 3 24: dc44 3000 ffffffff
9803 20 1 25: 2d dc44 ffffffff
2001 20 3 25: 2d dc44 ffffffff
9803 20 1 26: 2c dc02 ffffffff
2001 20 3 26: 2c dc02 ffffffff
9803 20 1 27: 2c dc03 ffffffff
2001 20 3 27: 2c dc03 ffffffff
9803 20 1 28: 2c dc04 ffffffff
2001 20 3 28: 2c dc04 ffffffff
1008 16 1 29: 2c dc04 ffffffff
2001 16 3 29: 2c dc04 ffffffff
9803 20 1 30: 2c dc01 ffffffff
2001 20 3 30: 2c dc01 ffffffff
9803 20 1 31: 2c dc07 ffffffff
2001 20 3 31: 2c dc07 ffffffff
9803 20 1 32: 2c dc41 ffffffff
2001 20 3 32: 2c dc41 ffffffff
9803 20 1 33: 2c dc44 ffffffff
2001 20 3 33: 2c dc44 ffffffff
9803 20 1 34: 2b dc02 ffffffff
2001 20 3 34: 2b dc02 ffffffff
9803 20 1 35: 2b dc03 ffffffff
2001 20 3 35: 2b dc03 ffffffff
9803 20 1 36: 2b dc04 ffffffff
2001 20 3 36: 2b dc04 ffffffff
1008 16 1 37: 2b dc04 ffffffff
2001 16 3 37: 2b dc04 ffffffff
9803 20 1 38: 2b dc01 ffffffff
2001 20 3 38: 2b dc01 ffffffff
9803 20 1 39: 2b dc07 ffffffff
2001 20 3 39: 2b dc07 ffffffff
9803 20 1 40: 2b dc41 ffffffff
2001 20 3 40: 2b dc41 ffffffff
9803 20 1 41: 2b dc44 ffffffff
2001 20 3 41: 2b dc44 ffffffff
9803 20 1 42: 2a dc02 ffffffff
2001 20 3 42: 2a dc02 ffffffff
9803 20 1 43: 2a dc03 ffffffff
2001 20 3 43: 2a dc03 ffffffff
9803 20 1 44: 2a dc04 ffffffff
2001 20 3 44: 2a dc04 ffffffff
1008 16 1 45: 2a dc04 ffffffff
2001 16 3 45: 2a dc04 ffffffff
9803 20 1 46: 2a dc01 ffffffff
2001 20 3 46: 2a dc01 ffffffff
9803 20 1 47: 2a dc07 ffffffff
2001 20 3 47: 2a dc07 ffffffff
9803 20 1 48: 2a dc41 ffffffff
2001 20 3 48: 2a dc41 ffffffff
9803 20 1 49: 2a dc44 ffffffff
2001 20 3 49: 2a dc44 ffffffff
9803 20 1 50: 29 dc02 ffffffff
2001 20 3 50: 29 dc02 ffffffff
9802 20 1 51: dc03 3001 ffffffff
2001 20 3 51: dc03 3001 ffffffff
9803 20 1 52: 29 dc03 ffffffff
2001 20 3 52: 29 dc03 ffffffff
9802 20 1 53: dc04 3001 ffffffff
2001 20 3 53: dc04 3001 ffffffff
9803 20 1 54: 29 dc04 ffffffff
2001 20 3 54: 29 dc04 ffffffff
1008 16 1 55: 29 dc04 ffffffff
2001 16 3 55: 29 dc04 ffffffff
9802 20 1 56: dc01 3001 ffffffff
2001 20 3 56: dc01 3001 ffffffff
9803 20 1 57: 29 dc01 ffffffff
2001 20 3 57: 29 dc01 ffffffff
9802 20 1 58: dc07 3001 ffffffff
2001 20 3 58: dc07 3001 ffffffff
9803 20 1 59: 29 dc07 ffffffff
2001 20 3 59: 29 dc07 ffffffff
9802 20 1 60: dc41 3001 ffffffff
2001 20 3 60: dc41 3001 ffffffff
9803 20 1 61: 29 dc41 ffffffff
2001 20 3 61: 29 dc41 ffffffff
9802 20 1 62: dc44 3001 ffffffff
2001 20 3 62: dc44 3001 ffffffff
9803 20 1 63: 29 dc44 ffffffff
2001 20 3 63: 29 dc44 ffffffff
9803 20 1 64: 28 dc02 ffffffff
2001 20 3 64: 28 dc02 ffffffff
9803 20 1 65: 28 dc03 ffffffff
2001 20 3 65: 28 dc03 ffffffff
9803 20 1 66: 28 dc04 ffffffff
2001 20 3 66: 28 dc04 ffffffff
1008 16 1 67: 28 dc04 ffffffff
2001 16 3 67: 28 dc04 ffffffff
9803 20 1 68: 28 dc01 ffffffff
2001 20 3 68: 28 dc01 ffffffff
9803 20 1 69: 28 dc07 ffffffff
2001 20 3 69: 28 dc07 ffffffff
9803 20 1 70: 28 dc41 ffffffff
2001 20 3 70: 28 dc41 ffffffff
9803 20 1 71: 28 dc44 ffffffff
2001 20 3 71: 28 dc44 ffffffff
9803 20 1 72: 27 dc02 ffffffff
2001 20 3 72: 27 dc02 ffffffff
9803 20 1 73: 27 dc03 ffffffff
2001 20 3 73: 27 dc03 ffffffff
9803 20 1 74: 27 dc04 ffffffff
2001 20 3 74: 27 dc04 ffffffff
1008 16 1 75: 27 dc04 ffffffff
2001 16 3 75: 27 dc04 ffffffff
9803 20 1 76: 27 dc01 ffffffff
2001 20 3 76: 27 dc01 ffffffff
9803 20 1 77: 27 dc07 ffffffff
2001 20 3 77: 27 dc07 ffffffff
9803 20 1 78: 27 dc41 ffffffff
2001 20 3 78: 27 dc41 ffffffff
9803 20 1 79: 27 dc44 ffffffff
2001 20 3 79: 27 dc44 ffffffff
9803 20 1 80: 26 dc02 ffffffff
2001 20 3 80: 26 dc02 ffffffff
9803 20 1 81: 26 dc03 ffffffff
2001 20 3 81: 26 dc03 ffffffff
9803 20 1 82: 26 dc04 ffffffff
2001 20 3 82: 26 dc04 ffffffff
1008 16 1 83: 26 dc04 ffffffff
2001 16 3 83: 26 dc04 ffffffff
9803 20 1 84: 26 dc01 ffffffff
2001 20 3 84: 26 dc01 ffffffff
9803 20 1 85: 26 dc07 ffffffff
2001 20 3 85: 26 dc07 ffffffff
9803 20 1 86: 26 dc41 ffffffff
2001 20 3 86: 26 dc41 ffffffff
9803 20 1 87: 26 dc44 ffffffff
2001 20 3 87: 26 dc44 ffffffff
9803 20 1 88: 25 dc02 ffffffff
2001 20 3 88: 25 dc02 ffffffff
9803 20 1 89: 25 dc03 ffffffff
2001 20 3 89: 25 dc03 ffffffff
9803 20 1 90: 25 dc04 ffffffff
2001 20 3 90: 25 dc04 ffffffff
1008 16 1 91: 25 dc04 ffffffff
2001 16 3 91: 25 dc04 ffffffff
9803 20 1 92: 25 dc01 ffffffff
2001 20 3 92: 25 dc01 ffffffff
9803 20 1 93: 25 dc07 ffffffff
2001 20 3 93: 25 dc07 ffffffff
9803 20 1 94: 25 dc41 ffffffff
2001 20 3 94: 25 dc41 ffffffff
9803 20 1 95: 25 dc44 ffffffff
2001 20 3 95: 25 dc44 ffffffff
9803 20 1 96: 24 dc02 ffffffff
2001 20 3 96: 24 dc02 ffffffff
9803 20 1 97: 24 dc03 ffffffff
2001 20 3 97: 24 dc03 ffffffff
9803 20 1 98: 24 dc04 ffffffff
2001 20 3 98: 24 dc04 ffffffff
1008 16 1 99: 24 dc04 ffffffff
2001 16 3 99: 24 dc04 ffffffff
9803 20 1 100: 24 dc01 ffffffff
2001 20 3 100: 24 dc01 ffffffff
9803 20 1 101: 24 dc07 ffffffff
2001 20 3 101: 24 dc07 ffffffff
9803 20 1 102: 24 dc41 ffffffff
2001 20 3 102: 24 dc41 ffffffff
9803 20 1 103: 24 dc44 ffffffff
2001 20 3 103: 24 dc44 ffffffff
9803 20 1 104: 23 dc02 ffffffff
2001 20 3 104: 23 dc02 ffffffff
9803 20 1 105: 23 dc03 ffffffff
2001 20 3 105: 23 dc03 ffffffff
9803 20 1 106: 23 dc04 ffffffff
2001 20 3 106: 23 dc04 ffffffff
1008 16 1 107: 23 dc04 ffffffff
2001 16 3 107: 23 dc04 ffffffff
9803 20 1 108: 23 dc01 ffffffff
2001 20 3 108: 23 dc01 ffffffff
9803 20 1 109: 23 dc07 ffffffff
2001 20 3 109: 23 dc07 ffffffff
9803 20 1 110: 23 dc41 ffffffff
2001 20 3 110: 23 dc41 ffffffff
9803 20 1 111: 23 dc44 ffffffff
2001 20 3 111: 23 dc44 ffffffff
9803 20 1 112: 22 dc02 ffffffff
2001 20 3 112: 22 dc02 ffffffff
9803 20 1 113: 22 dc03 ffffffff
2001 20 3 113: 22 dc03 ffffffff
9803 20 1 114: 22 dc04 ffffffff
2001 20 3 114: 22 dc04 ffffffff
1008 16 1 115: 22 dc04 ffffffff
2001 16 3 115: 22 dc04 ffffffff
9803 20 1 116: 22 dc01 ffffffff
2001 20 3 116: 22 dc01 ffffffff
9803 20 1 117: 22 dc07 ffffffff
2001 20 3 117: 22 dc07 ffffffff
9803 20 1 118: 22 dc41 ffffffff
2001 20 3 118: 22 dc41 ffffffff
9803 20 1 119: 22 dc44 ffffffff
2001 20 3 119: 22 dc44 ffffffff
9803 20 1 120: 21 dc02 ffffffff
2001 20 3 120: 21 dc02 ffffffff
9803 20 1 121: 21 dc03 ffffffff
2001 20 3 121: 21 dc03 ffffffff
9803 20 1 122: 21 dc04 ffffffff
2001 20 3 122: 21 dc04 ffffffff
1008 16 1 123: 21 dc04 ffffffff
2001 16 3 123: 21 dc04 ffffffff
9803 20 1 124: 21 dc01 ffffffff
2001 20 3 124: 21 dc01 ffffffff
9803 20 1 125: 21 dc07 ffffffff
2001 20 3 125: 21 dc07 ffffffff
9803 20 1 126: 21 dc41 ffffffff
2001 20 3 126: 21 dc41 ffffffff
9803 20 1 127: 21 dc44 ffffffff
2001 20 3 127: 21 dc44 ffffffff
9803 20 1 128: 20 dc02 ffffffff
2001 20 3 128: 20 dc02 ffffffff
9803 20 1 129: 20 dc03 ffffffff
2001 20 3 129: 20 dc03 ffffffff
9803 20 1 130: 20 dc04 ffffffff
2001 20 3 130: 20 dc04 ffffffff
1008 16 1 131: 20 dc04 ffffffff
2001 16 3 131: 20 dc04 ffffffff
9803 20 1 132: 20 dc01 ffffffff
2001 20 3 132: 20 dc01 ffffffff
9803 20 1 133: 20 dc07 ffffffff
2001 20 3 133: 20 dc07 ffffffff
9803 20 1 134: 20 dc41 ffffffff
2001 20 3 134: 20 dc41 ffffffff
9803 20 1 135: 20 dc44 ffffffff
2001 20 3 135: 20 dc44 ffffffff
9803 20 1 136: 1f dc02 ffffffff
2001 20 3 136: 1f dc02 ffffffff
9803 20 1 137: 1f dc03 ffffffff
2001 20 3 137: 1f dc03 ffffffff
9803 20 1 138: 1f dc04 ffffffff
2001 20 3 138: 1f dc04 ffffffff
1008 16 1 139: 1f dc04 ffffffff
2001 16 3 139: 1f dc04 ffffffff
9803 20 1 140: 1f dc01 ffffffff
2001 20 3 140: 1f dc01 ffffffff
9803 20 1 141: 1f dc07 ffffffff
2001 20 3 141: 1f dc07 ffffffff
9803 20 1 142: 1f dc41 ffffffff
2001 20 3 142: 1f dc41 ffffffff
9803 20 1 143: 1f dc44 ffffffff
2001 20 3 143: 1f dc44 ffffffff
9803 20 1 144: 1e dc02 ffffffff
2001 20 3 144: 1e dc02 ffffffff
9803 20 1 145: 1e dc03 ffffffff
2001 20 3 145: 1e dc03 ffffffff
9803 20 1 146: 1e dc04 ffffffff
2001 20 3 146: 1e dc04 ffffffff
1008 16 1 147: 1e dc04 ffffffff
2001 16 3 147: 1e dc04 ffffffff
9803 20 1 148: 1e dc01 ffffffff
2001 20 3 148: 1e dc01 ffffffff
9803 20 1 149: 1e dc07 ffffffff
2001 20 3 149: 1e dc07 ffffffff
9803 20 1 150: 1e dc41 ffffffff
2001 20 3 150: 1e dc41 ffffffff
9803 20 1 151: 1e dc44 ffffffff
2001 20 3 151: 1e dc44 ffffffff
9803 20 1 152: 1d dc02 ffffffff
2001 20 3 152: 1d dc02 ffffffff
9803 20 1 153: 1d dc03 ffffffff
2001 20 3 153: 1d dc03 ffffffff
9803 20 1 154: 1d dc04 ffffffff
2001 20 3 154: 1d dc04 ffffffff
1008 16 1 155: 1d dc04 ffffffff
2001 16 3 155: 1d dc04 ffffffff
9803 20 1 156: 1d dc01 ffffffff
2001 20 3 156: 1d dc01 ffffffff
9803 20 1 157: 1d dc07 ffffffff
2001 20 3 157: 1d dc07 ffffffff
9803 20 1 158: 1d dc41 ffffffff
2001 20 3 158: 1d dc41 ffffffff
9803 20 1 159: 1d dc44 ffffffff
2001 20 3 159: 1d dc44 ffffffff
9803 20 1 160: 1c dc02 ffffffff
2001 20 3 160: 1c dc02 ffffffff
9803 20 1 161: 1c dc03 ffffffff
2001 20 3 161: 1c dc03 ffffffff
9803 20 1 162: 1c dc04 ffffffff
2001 20 3 162: 1c dc04 ffffffff
1008 16 1 163: 1c dc04 ffffffff
2001 16 3 163: 1c dc04 ffffffff
9803 20 1 164: 1c dc01 ffffffff
2001 20 3 164: 1c dc01 ffffffff
9803 20 1 165: 1c dc07 ffffffff
2001 20 3 165: 1c dc07 ffffffff
9803 20 1 166: 1c dc41 ffffffff
2001 20 3 166: 1c dc41 ffffffff
9803 20 1 167: 1c dc44 ffffffff
2001 20 3 167: 1c dc44 ffffffff
9803 20 1 168: 1b dc02 ffffffff
2001 20 3 168: 1b dc02 ffffffff
9803 20 1 169: 1b dc03 ffffffff
2001 20 3 169: 1b dc03 ffffffff
9803 20 1 170: 1b dc04 ffffffff
2001 20 3 170: 1b dc04 ffffffff
1008 16 1 171: 1b dc04 ffffffff
2001 16 3 171: 1b dc04 ffffffff
9803 20 1 172: 1b dc01 ffffffff
2001 20 3 172: 1b dc01 ffffffff
9803 20 1 173: 1b dc07 ffffffff
2001 20 3 173: 1b dc07 ffffffff
9803 20 1 174: 1b dc41 ffffffff
2001 20 3 174: 1b dc41 ffffffff
9803 20 1 175: 1b dc44 ffffffff
2001 20 3 175: 1b dc44 ffffffff
9803 20 1 176: 1a dc02 ffffffff
2001 20 3 176: 1a dc02 ffffffff
9803 20 1 177: 1a dc03 ffffffff
2001 20 3 177: 1a dc03 ffffffff
9803 20 1 178: 1a dc04 ffffffff
2001 20 3 178: 1a dc04 ffffffff
1008 16 1 179: 1a dc04 ffffffff
2001 16 3 179: 1a dc04 ffffffff
9803 20 1 180: 1a dc01 ffffffff
2001 20 3 180: 1a dc01 ffffffff
9803 20 1 181: 1a dc07 ffffffff
2001 20 3 181: 1a dc07 ffffffff
9803 20 1 182: 1a dc41 ffffffff
2001 20 3 182: 1a dc41 ffffffff
9803 20 1 183: 1a dc44 ffffffff
2001 20 3 183: 1a dc44 ffffffff
9803 20 1 184: 19 dc02 ffffffff
2001 20 3 184: 19 dc02 ffffffff
9803 20 1 185: 19 dc03 ffffffff
2001 20 3 185: 19 dc03 ffffffff
9803 20 1 186: 19 dc04 ffffffff
2001 20 3 186: 19 dc04 ffffffff
1008 16 1 187: 19 dc04 ffffffff
2001 16 3 187: 19 dc04 ffffffff
9803 20 1 188: 19 dc01 ffffffff
2001 20 3 188: 19 dc01 ffffffff
9803 20 1 189: 19 dc07 ffffffff
2001 20 3 189: 19 dc07 ffffffff
9803 20 1 190: 19 dc41 ffffffff
2001 20 3 190: 19 dc41 ffffffff
9803 20 1 191: 19 dc44 ffffffff
2001 20 3 191: 19 dc44 ffffffff
9803 20 1 192: 18 dc02 ffffffff
2001 20 3 192: 18 dc02 ffffffff
9803 20 1 193: 18 dc03 ffffffff
2001 20 3 193: 18 dc03 ffffffff
9803 20 1 194: 18 dc04 ffffffff
2001 20 3 194: 18 dc04 ffffffff
1008 16 1 195: 18 dc04 ffffffff
2001 16 3 195: 18 dc04 ffffffff
9803 20 1 196: 18 dc01 ffffffff
2001 20 3 196: 18 dc01 ffffffff
9803 20 1 197: 18 dc07 ffffffff
2001 20 3 197: 18 dc07 ffffffff
9803 20 1 198: 18 dc41 ffffffff
2001 20 3 198: 18 dc41 ffffffff
9803 20 1 199: 18 dc44 ffffffff
2001 20 3 199: 18 dc44 ffffffff
9803 20 1 200: 17 dc02 ffffffff
2001 20 3 200: 17 dc02 ffffffff
9803 20 1 201: 17 dc03 ffffffff
2001 20 3 201: 17 dc03 ffffffff
9803 20 1 202: 17 dc04 ffffffff
2001 20 3 202: 17 dc04 ffffffff
1008 16 1 203: 17 dc04 ffffffff
2001 16 3 203: 17 dc04 ffffffff
9803 20 1 204: 17 dc01 ffffffff
2001 20 3 204: 17 dc01 ffffffff
9803 20 1 205: 17 dc07 ffffffff
2001 20 3 205: 17 dc07 ffffffff
9803 20 1 206: 17 dc41 ffffffff
2001 20 3 206: 17 dc41 ffffffff
9803 20 1 207: 17 dc44 ffffffff
2001 20 3 207: 17 dc44 ffffffff
9803 20 1 208: 16 dc02 ffffffff
2001 20 3 208: 16 dc02 ffffffff
9803 20 1 209: 16 dc03 ffffffff
2001 20 3 209: 16 dc03 ffffffff
9803 20 1 210: 16 dc04 ffffffff
2001 20 3 210: 16 dc04 ffffffff
1008 16 1 211: 16 dc04 ffffffff
2001 16 3 211: 16 dc04 ffffffff
9803 20 1 212: 16 dc01 ffffffff
2001 20 3 212: 16 dc01 ffffffff
9803 20 1 213: 16 dc07 ffffffff
2001 20 3 213: 16 dc07 ffffffff
9803 20 1 214: 16 dc41 ffffffff
2001 20 3 214: 16 dc41 ffffffff
9803 20 1 215: 16 dc44 ffffffff
2001 20 3 215: 16 dc44 ffffffff
9803 20 1 216: 15 dc02 ffffffff
2001 20 3 216: 15 dc02 ffffffff
9803 20 1 217: 15 dc03 ffffffff
2001 20 3 217: 15 dc03 ffffffff
9803 20 1 218: 15 dc04 ffffffff
2001 20 3 218: 15 dc04 ffffffff
1008 16 1 219: 15 dc04 ffffffff
2001 16 3 219: 15 dc04 ffffffff
9803 20 1 220: 15 dc01 ffffffff
2001 20 3 220: 15 dc01 ffffffff
9803 20 1 221: 15 dc07 ffffffff
2001 20 3 221: 15 dc07 ffffffff
9803 20 1 222: 15 dc41 ffffffff
2001 20 3 222: 15 dc41 ffffffff
9803 20 1 223: 15 dc44 ffffffff
2001 20 3 223: 15 dc44 ffffffff
9803 20 1 224: 14 dc02 ffffffff
2001 20 3 224: 14 dc02 ffffffff
9803 20 1 225: 14 dc03 ffffffff
2001 20 3 225: 14 dc03 ffffffff
9803 20 1 226: 14 dc04 ffffffff
2001 20 3 226: 14 dc04 ffffffff
1008 16 1 227: 14 dc04 ffffffff
2001 16 3 227: 14 dc04 ffffffff
9803 20 1 228: 14 dc01 ffffffff
2001 20 3 228: 14 dc01 ffffffff
9803 20 1 229: 14 dc07 ffffffff
2001 20 3 229: 14 dc07 ffffffff
9803 20 1 230: 14 dc41 ffffffff
2001 20 3 230: 14 dc41 ffffffff
9803 20 1 231: 14 dc44 ffffffff
2001 20 3 231: 14 dc44 ffffffff
9803 20 1 232: 13 dc02 ffffffff
2001 20 3 232: 13 dc02 ffffffff
9803 20 1 233: 13 dc03 ffffffff
2001 20 3 233: 13 dc03 ffffffff
9803 20 1 234: 13 dc04 ffffffff
2001 20 3 234: 13 dc04 ffffffff
1008 16 1 235: 13 dc04 ffffffff
2001 16 3 235: 13 dc04 ffffffff
9803 20 1 236: 13 dc01 ffffffff
2001 20 3 236: 13 dc01 ffffffff
9803 20 1 237: 13 dc07 ffffffff
2001 20 3 237: 13 dc07 ffffffff
9803 20 1 238: 13 dc41 ffffffff
2001 20 3 238: 13 dc41 ffffffff
9803 20 1 239: 13 dc44 ffffffff
2001 20 3 239: 13 dc44 ffffffff
9803 20 1 240: 12 dc02 ffffffff
2001 20 3 240: 12 dc02 ffffffff
9803 20 1 241: 12 dc03 ffffffff
2001 20 3 241: 12 dc03 ffffffff
9803 20 1 242: 12 dc04 ffffffff
2001 20 3 242: 12 dc04 ffffffff
1008 16 1 243: 12 dc04 ffffffff
2001 16 3 243: 12 dc04 ffffffff
9803 20 1 244: 12 dc01 ffffffff
2001 20 3 244: 12 dc01 ffffffff
9803 20 1 245: 12 dc07 ffffffff
2001 20 3 245: 12 dc07 ffffffff
9803 20 1 246: 12 dc41 ffffffff
2001 20 3 246: 12 dc41 ffffffff
9803 20 1 247: 12 dc44 ffffffff
2001 20 3 247: 12 dc44 ffffffff
9803 20 1 248: 11 dc02 ffffffff
2001 20 3 248: 11 dc02 ffffffff
9803 20 1 249: 11 dc03 ffffffff
2001 20 3 249: 11 dc03 ffffffff
9803 20 1 250: 11 dc04 ffffffff
2001 20 3 250: 11 dc04 ffffffff
1008 16 1 251: 11 dc04 ffffffff
2001 16 3 251: 11 dc04 ffffffff
9803 20 1 252: 11 dc01 ffffffff
2001 20 3 252: 11 dc01 ffffffff
9803 20 1 253: 11 dc07 ffffffff
2001 20 3 253: 11 dc07 ffffffff
9803 20 1 254: 11 dc41 ffffffff
2001 20 3 254: 11 dc41 ffffffff
9803 20 1 255: 11 dc44 ffffffff
2001 20 3 255: 11 dc44 ffffffff
9803 20 1 256: 10 dc02 ffffffff
2001 20 3 256: 10 dc02 ffffffff
9803 20 1 257: 10 dc03 ffffffff
2001 20 3 257: 10 dc03 ffffffff
9803 20 1 258: 10 dc04 ffffffff
2001 20 3 258: 10 dc04 ffffffff
1008 16 1 259: 10 dc04 ffffffff
2001 16 3 259: 10 dc04 ffffffff
9803 20 1 260: 10 dc01 ffffffff
2001 20 3 260: 10 dc01 ffffffff
9803 20 1 261: 10 dc07 ffffffff
2001 20 3 261: 10 dc07 ffffffff
9803 20 1 262: 10 dc41 ffffffff
2001 20 3 262: 10 dc41 ffffffff
9803 20 1 263: 10 dc44 ffffffff
2001 20 3 263: 10 dc44 ffffffff
9803 20 1 264: f dc02 ffffffff
2001 20 3 264: f dc02 ffffffff
9803 20 1 265: f dc03 ffffffff
2001 20 3 265: f dc03 ffffffff
9803 20 1 266: f dc04 ffffffff
2001 20 3 266: f dc04 ffffffff
1008 16 1 267: f dc04 ffffffff
2001 16 3 267: f dc04 ffffffff
9803 20 1 268: f dc01 ffffffff
2001 20 3 268: f dc01 ffffffff
9803 20 1 269: f dc07 ffffffff
2001 20 3 269: f dc07 ffffffff
9803 20 1 270: f dc41 ffffffff
2001 20 3 270: f dc41 ffffffff
9803 20 1 271: f dc44 ffffffff
2001 20 3 271: f dc44 ffffffff
9803 20 1 272: e dc02 ffffffff
2001 20 3 272: e dc02 ffffffff
9803 20 1 273: e dc03 ffffffff
2001 20 3 273: e dc03 ffffffff
9803 20 1 274: e dc04 ffffffff
2001 20 3 274: e dc04 ffffffff
1008 16 1 275: e dc04 ffffffff
2001 16 3 275: e dc04 ffffffff
9803 20 1 276: e dc01 ffffffff
2001 20 3 276: e dc01 ffffffff
9803 20 1 277: e dc07 ffffffff
2001 20 3 277: e dc07 ffffffff
9803 20 1 278: e dc41 ffffffff
2001 20 3 278: e dc41 ffffffff
9803 20 1 279: e dc44 ffffffff
2001 20 3 279: e dc44 ffffffff
9803 20 1 280: d dc02 ffffffff
2001 20 3 280: d dc02 ffffffff
9803 20 1 281: d dc03 ffffffff
2001 20 3 281: d dc03 ffffffff
9803 20 1 282: d dc04 ffffffff
2001 20 3 282: d dc04 ffffffff
1008 16 1 283: d dc04 ffffffff
2001 16 3 283: d dc04 ffffffff
9803 20 1 284: d dc01 ffffffff
2001 20 3 284: d dc01 ffffffff
9803 20 1 285: d dc07 ffffffff
2001 20 3 285: d dc07 ffffffff
9803 20 1 286: d dc41 ffffffff
2001 20 3 286: d dc41 ffffffff
9803 20 1 287: d dc44 ffffffff
2001 20 3 287: d dc44 ffffffff
9803 20 1 288: c dc02 ffffffff
2001 20 3 288: c dc02 ffffffff
9803 20 1 289: c dc03 ffffffff
2001 20 3 289: c dc03 ffffffff
9803 20 1 290: c dc04 ffffffff
2001 20 3 290: c dc04 ffffffff
1008 16 1 291: c dc04 ffffffff
2001 16 3 291: c dc04 ffffffff
9803 20 1 292: c dc01 ffffffff
2001 20 3 292: c dc01 ffffffff
9803 20 1 293: c dc07 ffffffff
2001 20 3 293: c dc07 ffffffff
9803 20 1 294: c dc41 ffffffff
2001 20 3 294: c dc41 ffffffff
9803 20 1 295: c dc44 ffffffff
2001 20 3 295: c dc44 ffffffff
9803 20 1 296: b dc02 ffffffff
2001 20 3 296: b dc02 ffffffff
9803 20 1 297: b dc03 ffffffff
2001 20 3 297: b dc03 ffffffff
9803 20 1 298: b dc04 ffffffff
2001 20 3 298: b dc04 ffffffff
1008 16 1 299: b dc04 ffffffff
2001 16 3 299: b dc04 ffffffff
9803 20 1 300: b dc01 ffffffff
2001 20 3 300: b dc01 ffffffff
9803 20 1 301: b dc07 ffffffff
2001 20 3 301: b dc07 ffffffff
9803 20 1 302: b dc41 ffffffff
2001 20 3 302: b dc41 ffffffff
9803 20 1 303: b dc44 ffffffff
2001 20 3 303: b dc44 ffffffff
9803 20 1 304: a dc02 ffffffff
2001 20 3 304: a dc02 ffffffff
9803 20 1 305: a dc03 ffffffff
2001 20 3 305: a dc03 ffffffff
9803 20 1 306: a dc04 ffffffff
2001 20 3 306: a dc04 ffffffff
1008 16 1 307: a dc04 ffffffff
2001 16 3 307: a dc04 ffffffff
9803 20 1 308: a dc01 ffffffff
2001 20 3 308: a dc01 ffffffff
9803 20 1 309: a dc07 ffffffff
2001 20 3 309: a dc07 ffffffff
9803 20 1 310: a dc41 ffffffff
2001 20 3 310: a dc41 ffffffff
9803 20 1 311: a dc44 ffffffff
2001 20 3 311: a dc44 ffffffff
9803 20 1 312: 9 dc02 ffffffff
2001 20 3 312: 9 dc02 ffffffff
9803 20 1 313: 9 dc03 ffffffff
2001 20 3 313: 9 dc03 ffffffff
9803 20 1 314: 9 dc04 ffffffff
2001 20 3 314: 9 dc04 ffffffff
1008 16 1 315: 9 dc04 ffffffff
2001 16 3 315: 9 dc04 ffffffff
9803 20 1 316: 9 dc01 ffffffff
2001 20 3 316: 9 dc01 ffffffff
9803 20 1 317: 9 dc07 ffffffff
2001 20 3 317: 9 dc07 ffffffff
9803 20 1 318: 9 dc41 ffffffff
2001 20 3 318: 9 dc41 ffffffff
9803 20 1 319: 9 dc44 ffffffff
2001 20 3 319: 9 dc44 ffffffff
9803 20 1 320: 8 dc02 ffffffff
2001 20 3 320: 8 dc02 ffffffff
9803 20 1 321: 8 dc03 ffffffff
2001 20 3 321: 8 dc03 ffffffff
9803 20 1 322: 8 dc04 ffffffff
2001 20 3 322: 8 dc04 ffffffff
1008 16 1 323: 8 dc04 ffffffff
2001 16 3 323: 8 dc04 ffffffff
9803 20 1 324: 8 dc01 ffffffff
2001 20 3 324: 8 dc01 ffffffff
9803 20 1 325: 8 dc07 ffffffff
2001 20 3 325: 8 dc07 ffffffff
9803 20 1 326: 8 dc41 ffffffff
2001 20 3 326: 8 dc41 ffffffff
9803 20 1 327: 8 dc44 ffffffff
2001 20 3 327: 8 dc44 ffffffff
9803 20 1 328: 7 dc02 ffffffff
2001 20 3 328: 7 dc02 ffffffff
9803 20 1 329: 7 dc03 ffffffff
2001 20 3 329: 7 dc03 ffffffff
9803 20 1 330: 7 dc04 ffffffff
2001 20 3 330: 7 dc04 ffffffff
1008 16 1 331: 7 dc04 ffffffff
2001 16 3 331: 7 dc04 ffffffff
9803 20 1 332: 7 dc01 ffffffff
2001 20 3 332: 7 dc01 ffffffff
9803 20 1 333: 7 dc07 ffffffff
2001 20 3 333: 7 dc07 ffffffff
9803 20 1 334: 7 dc41 ffffffff
2001 20 3 334: 7 dc41 ffffffff
9803 20 1 335: 7 dc44 ffffffff
2001 20 3 335: 7 dc44 ffffffff
9803 20 1 336: 6 dc02 ffffffff
2001 20 3 336: 6 dc02 ffffffff
9803 20 1 337: 6 dc03 ffffffff
2001 20 3 337: 6 dc03 ffffffff
9803 20 1 338: 6 dc04 ffffffff
2001 20 3 338: 6 dc04 ffffffff
1008 16 1 339: 6 dc04 ffffffff
2001 16 3 339: 6 dc04 ffffffff
9803 20 1 340: 6 dc01 ffffffff
2001 20 3 340: 6 dc01 ffffffff
9803 20 1 341: 6 dc07 ffffffff
2001 20 3 341: 6 dc07 ffffffff
9803 20 1 342: 6 dc41 ffffffff
2001 20 3 342: 6 dc41 ffffffff
9803 20 1 343: 6 dc44 ffffffff
2001 20 3 343: 6 dc44 ffffffff
9803 20 1 344: 5 dc02 ffffffff
2001 20 3 344: 5 dc02 ffffffff
9803 20 1 345: 5 dc03 ffffffff
2001 20 3 345: 5 dc03 ffffffff
9803 20 1 346: 5 dc04 ffffffff
2001 20 3 346: 5 dc04 ffffffff
1008 16 1 347: 5 dc04 ffffffff
2001 16 3 347: 5 dc04 ffffffff
9803 20 1 348: 5 dc01 ffffffff
2001 20 3 348: 5 dc01 ffffffff
9803 20 1 349: 5 dc07 ffffffff
2001 20 3 349: 5 dc07 ffffffff
9803 20 1 350: 5 dc41 ffffffff
2001 20 3 350: 5 dc41 ffffffff
9803 20 1 351: 5 dc44 ffffffff
2001 20 3 351: 5 dc44 ffffffff
100c 20 1 352: 1 ffffffff ffffffff
2001 24 3 352: 1 ffffffff 2e
100d 12 1 353: 0 3000 60109
2001 12 3 353: 0 dae819fe 7679a24d
9803 20 1 354: 2e dc02 7679a24d
2001 20 3 354: 2e dc02 7679a24d
9803 20 1 355: 2e dc01 7679a24d
2001 20 3 355: 2e dc01 7679a24d
9803 20 1 356: 2e dc07 7679a24d
2001 20 3 356: 2e dc07 7679a24d
9802 20 1 357: dc0b 3000 7679a24d
2001 20 3 357: dc0b 3000 7679a24d
9803 20 1 358: 2e dc0b 7679a24d
2001 20 3 358: 2e dc0b 7679a24d
9803 20 1 359: 2e dc41 7679a24d
2001 20 3 359: 2e dc41 7679a24d
9803 20 1 360: 2e dc44 7679a24d
2001 20 3 360: 2e dc44 7679a24d
9803 20 1 361: 2e dc03 7679a24d
2001 20 3 361: 2e dc03 7679a24d
9803 20 1 362: 2e dc04 7679a24d
2001 20 3 362: 2e dc04 7679a24d
1008 16 1 363: 2e dc04 7679a24d
2001 16 3 363: 2e dc04 7679a24d
1005 16 1 364: 1 dc04 7679a24d
2001 16 3 364: 1 dc04 7679a24d
100c 20 1 365: 1 ffffffff 7679a24d
2001 24 3 365: 1 ffffffff 2f
100d 12 1 366: 0 3000 5321e
2001 12 3 366: 0 8aa228 8aa228
9803 20 1 367: 2f dc02 8aa228
2001 20 3 367: 2f dc02 8aa228
9803 20 1 368: 2f dc01 8aa228
2001 20 3 368: 2f dc01 8aa228
9803 20 1 369: 2f dc07 8aa228
2001 20 3 369: 2f dc07 8aa228
9803 20 1 370: 2f dc0b 8aa228
2001 20 3 370: 2f dc0b 8aa228
9803 20 1 371: 2f dc41 8aa228
2001 20 3 371: 2f dc41 8aa228
9803 20 1 372: 2f dc44 8aa228
2001 20 3 372: 2f dc44 8aa228
9803 20 1 373: 2f dc03 8aa228
2001 20 3 373: 2f dc03 8aa228
9803 20 1 374: 2f dc04 8aa228
2001 20 3 374: 2f dc04 8aa228
1008 16 1 375: 2f dc04 8aa228
2001 16 3 375: 2f dc04 8aa228
1005 16 1 376: 1 dc04 8aa228
2001 16 3 376: 1 dc04 8aa228
 
Morning @KurtE
Cool that you got it working. Can you send me your image. The one I copied is only 214kb. Want to use the exact one for testing on this end. Having a problem with 1 pdf out of the several I tried.
 
Update I turned off debug, and the directory shows up with the two files I copied, but show them with 0 length:

View attachment 22548

Note with debug turned off, again I tried drag and drop files:
I was able to copy a 94K file, then 116kb file and a 215KB file, but when I tried a 293kb file it errored out. Sound of device going away. Again almost like there is some hard code 256KB buffer somewhere that is overrun.. Note: I was running at 450mhz, will try 600...
 
@KurtE
Ok just downloaded your screenshot.jpg (105KB) to QSPI flash. It copied it over and shows as 105kb. Then I copied a 1.1MB PDF to QSPI and it worked as well. Both files copied and opened correctly when I double clicked on them.

Now the fun thing. When I try and copy the same the 1.1MB PDF to the Propshield or the Winbond breakout board both fail and I get that annoying Windows. beep :) After that access seems to blocked and I can not copy any other files to any other storage media including the SDCard.

Think it may be a MTP issue or a windows issue.

Between this morning when I tested I installed the new Windows update so now not sure that is a contributing factor?

Something strange going on.
 
looks like we cross posted. I tried again at 600mhz cpu and I was able to copy a 232KB image to the disk.
It failed with a 259KB file. I believe it did copy that file to some of the devices.

But I also got it to error out on Propshield with 215KB file. At first was thinking maybe it is the QSPI flash chip... As I think it worked on original T4.1 beta board, which has in theory same FLASH and PSRAM... May try to swap that board in here again and try.
 
Really getting confusing now. Especially since I was checking it this morning

Ok just tried my propsheild again with a 914kb jpg which failed. Then tried with a 90kb file and it worked.

copied 2 more jpgs to qspi 152, and 453kbs, those worked. Just tried coping the 453 again to Propshield and it failed. LittleFS or MTP issue?
 
My guess is there is some form of timing window or the like that we are hitting, where we are hitting something where we either hang or we miss an event.

Could be something like:
<Setup something in a queue that will trigger event>
<Clear event flag>
<Wait for event>

Where most the time not a problem as it takes some time for whatever it was you triggered to happen, but then once in awhile some other interrupt happens as you are triggering the event and so your event happens which sets the event flag which you then clear out...

Been bit by that sort of thing many times. We still have a similar issue with HardwareSerial and transmitterEnable pin. There is a timing window which can cause us to not have the transmitter enable enabled properly. So far have not found a fix for that one as it appears like the hardware knows that the queue is empty and transmit complete, but has not triggered it yet, we clear that state, but it then goes ahead and does the transmit complete interrupt... But that is a different topic, which I was supposed to remind @Paul about...
 
OK
Please remember that for T4.1 there is a custom MTP USB implementation (i.e. it is not made by Paul, but by me). It was done at a time when there was only USB_Serial, HID and SEREMU
i.e. in the early days of T4.0 beta. T4.x is so fast that handling USB messages seems to be tricky.

Coming back to MTP issues: I got a corrupt file on one of the disks (copied a file twice to Teensy, it was appended (FILE_WRITE!!!!) and not overwriting, so it got not readable.
Consequently delete (remove) does not work on this file (don't know why). Have to remove uSD from teensy and delete file in PC.
 
Before someone else discovers this:
Size of used disc space is only interrogated at the beginning of a MTP session.
Any PC to Teensy copy, deletion of files, does not change the "used disk space" indication in the initial file explorer window (at least on Windows)
 
@WMXZ - Are there things that would help us banging on now, or are there places that would help if we tried to localize issues down to?

I do have have plenty of other distractions to play with :D
 
I do have have plenty of other distractions to play with :D
Honestly, the same is here. But as it happened, I needed a multi disk MTP responder for an important project of mine.
But I'm always available to chase down bugs as they surface.

IMHO, the next step would be that Paul looks into MTP especially the USB interfaces.
 
Before someone else discovers this:
Size of used disc space is only interrogated at the beginning of a MTP session.
Any PC to Teensy copy, deletion of files, does not change the "used disk space" indication in the initial file explorer window (at least on Windows)

Yep = already figured that one out :)
 
My guess is there is some form of timing window or the like that we are hitting, where we are hitting something where we either hang or we miss an event.

Could be something like:
<Setup something in a queue that will trigger event>
<Clear event flag>
<Wait for event>

Where most the time not a problem as it takes some time for whatever it was you triggered to happen, but then once in awhile some other interrupt happens as you are triggering the event and so your event happens which sets the event flag which you then clear out...

Been bit by that sort of thing many times. We still have a similar issue with HardwareSerial and transmitterEnable pin. There is a timing window which can cause us to not have the transmitter enable enabled properly. So far have not found a fix for that one as it appears like the hardware knows that the queue is empty and transmit complete, but has not triggered it yet, we clear that state, but it then goes ahead and does the transmit complete interrupt... But that is a different topic, which I was supposed to remind @Paul about...

Hi Kurt
Just got back on line and catching up -- see I missed a bunch. As @WMXZ could a problem with USB interface. Think Paul may have to check it out when he gets some time.
 
Is there any restriction on the length of filenames?
64, perhaps? (if yes: that's way too short)

I had some MP3 with longer filenames.
As a test i removed them.. and guess what... i can copy the files now from teensy to mpc.
before, nothing worked.
 
That was with files from SD.
I'm pretty sure there is a limitation to ~64 somewhere in the MTP or SdFatCode.
I removed those files, and everything works now...
 
Back
Top