Wio terminal freezes with listDir() in Loop

Hi,

I have a problem with SD_Test.ino example from “SD/Seeed_SD.h” (version 2.0.2), if I use the function “lisDir()” inside the “Loop” after about 3 iterations the Wio terminal freezes, and my Arduino IDE also. (Windows 10, Arduino IDE 1.8.13, Seeed SAMD Boards 1.8.1, Seeed_Arduino_FS-master 2.0.2 )

Click to see the code

/*
    Connect the SD card to the following pins:

    SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4 (for MKRZero SD: SDCARD_SS_PIN)
*/

#include <Seeed_FS.h>
#undef USESPIFLASH
#ifdef USESPIFLASH
#define DEV SPIFLASH
#include "SFUD/Seeed_SFUD.h"
#else
#define DEV SD
#include "SD/Seeed_SD.h"
#endif 

#define SERIAL Serial

#ifdef _SAMD21_
#define SDCARD_SS_PIN 1
#define SDCARD_SPI SPI
#endif 


void listDir(fs::FS& fs, const char* dirname, uint8_t levels) {
    SERIAL.print("Listing directory: ");
    SERIAL.println(dirname);

    File root = fs.open(dirname);
    if (!root) {
        SERIAL.println("Failed to open directory");
        return;
    }
    if (!root.isDirectory()) {
        SERIAL.println("Not a directory");
        return;
    }

    File file = root.openNextFile();
    while (file) {
        if (file.isDirectory()) {
            SERIAL.print("  DIR : ");
            SERIAL.println(file.name());
            if (levels) {
                listDir(fs, file.name(), levels - 1);
            }
        } else {
            SERIAL.print("  FILE: ");
            SERIAL.print(file.name());
            SERIAL.print("  SIZE: ");
            SERIAL.println(file.size());
        }
        file = root.openNextFile();
    }
}

void createDir(fs::FS& fs, const char* path) {
    SERIAL.print("Creating Dir: ");
    SERIAL.println(path);
    if (fs.mkdir(path)) {
        SERIAL.println("Dir created");
    } else {
        SERIAL.println("mkdir failed");
    }
}

void removeDir(fs::FS& fs, const char* path) {
    SERIAL.print("Removing Dir: ");
    SERIAL.println(path);
    if (fs.rmdir(path)) {
        SERIAL.println("Dir removed");
    } else {
        SERIAL.println("rmdir failed");
    }
}

void readFile(fs::FS& fs, const char* path) {
    SERIAL.print("Reading Dir: ");
    SERIAL.println(path);
    File file = fs.open(path);
    if (!file) {
        SERIAL.println("Failed to open file for reading");
        return;
    }

    SERIAL.print("Read from file: ");
    while (file.available()) {
        SERIAL.write(file.read());
    }
    file.close();
}

void writeFile(fs::FS& fs, const char* path, const char* message) {
    SERIAL.print("Writing file: ");
    SERIAL.println(path);
    File file = fs.open(path, FILE_WRITE);
    if (!file) {
        SERIAL.println("Failed to open file for writing");
        return;
    }
    
    if (file.print(message)) {
        SERIAL.println("File written");
    } else {
        SERIAL.println("Write failed");
    }

    file.close();

}

void appendFile(fs::FS& fs, const char* path, const char* message) {
    SERIAL.print("Appending to file: ");
    SERIAL.println(path);

    File file = fs.open(path, FILE_APPEND);
    if (!file) {
        SERIAL.println("Failed to open file for appending");
        return;
    }
    if (file.print(message)) {
        SERIAL.println("Message appended");
    } else {
        SERIAL.println("Append failed");
    }
    file.close();
}

void renameFile(fs::FS& fs, const char* path1, const char* path2) {
    SERIAL.print("Renaming file ");
    SERIAL.print(path1);
    SERIAL.print(" to ");
    SERIAL.println(path2);
    if (fs.rename(path1, path2)) {
        SERIAL.println("File renamed");
    } else {
        SERIAL.println("Rename failed");
    }
}

void deleteFile(fs::FS& fs, const char* path) {
    SERIAL.print("Deleting file: ");
    SERIAL.println(path);
    if (fs.remove(path)) {
        SERIAL.println("File deleted");
    } else {
        SERIAL.println("Delete failed");
    }
}

void testFileIO(fs::FS& fs, const char* path) {
    File file = fs.open(path);
    static uint8_t buf[512];
    size_t len = 0;
    uint32_t start = micros();
    uint32_t end = start;
    if (file) {
        len = file.size();
        size_t flen = len;
        start = micros();
        while (len) {
            size_t toRead = len;
            if (toRead > 512) {
                toRead = 512;
            }
            file.read(buf, toRead);
            len -= toRead;
        }
        end = micros() - start;
        SERIAL.print(flen);
        SERIAL.print(" bytes read for ");
        SERIAL.print(end);
        SERIAL.println(" ns");
        file.close();
    } else {
        SERIAL.println("Failed to open file for reading");
    }
}

void setup() {
    SERIAL.begin(115200);
    pinMode(5, OUTPUT);
    digitalWrite(5, HIGH);
    while (!SERIAL) {};
#ifdef SFUD_USING_QSPI
    while (!DEV.begin(104000000UL)) {
        SERIAL.println("Card Mount Failed");
        return;
    }
#else
    while (!DEV.begin(SDCARD_SS_PIN,SDCARD_SPI,4000000UL)) {
        SERIAL.println("Card Mount Failed");
        return;
    }
#endif 


#ifdef USESPIFLASH
    uint8_t flashType = DEV.flashType();
    if (flashType == FLASH_NONE) {
        SERIAL.println("No flash attached");
        return;
    }
#else
    uint8_t cardType = DEV.cardType();
    if (cardType == CARD_NONE) {
        SERIAL.println("No SD card attached");
        return;
    }
#endif 

#ifdef USESPIFLASH
    uint32_t flashSize = DEV.flashSize() / (1024 * 1024);
    SERIAL.print("flash Size: ");
    SERIAL.print((uint32_t)flashSize);
    SERIAL.println("MB");
#else
    uint64_t cardSize = DEV.cardSize() / (1024 * 1024);
    SERIAL.print("SD Card Size: ");
    SERIAL.print((uint32_t)cardSize);
    SERIAL.println("MB");
#endif 


    listDir(DEV, "/", 0);
    createDir(DEV, "/mydir");
    listDir(DEV, "/", 0);
    removeDir(DEV, "/mydir");
    listDir(DEV, "/", 2);
    writeFile(DEV, "/hello.txt", "Hello ");
    appendFile(DEV, "/hello.txt", "World!\n");
    readFile(DEV, "/hello.txt");
    deleteFile(DEV, "/foo.txt");
    renameFile(DEV, "/hello.txt", "/foo.txt");
    readFile(DEV, "/foo.txt");
    testFileIO(DEV, "/foo.txt");
    uint32_t totalBytes = DEV.totalBytes();
    SERIAL.print("Total space: ");
    SERIAL.print(totalBytes / (1024 * 1024));
    SERIAL.println("MB");
    uint32_t usedBytes = DEV.usedBytes();
    SERIAL.print("Used space: ");
    SERIAL.print(usedBytes / (1024 * 1024));
    SERIAL.println("MB");
}

void loop() {
    listDir(DEV, "/", 0);
    delay(1000);
}
Click to see the log
Writing file: /hello.txt
File written
Appending to file: /hello.txt
Message appended
Reading Dir: /hello.txt
Read from file: Hello World!
Deleting file: /foo.txt
File deleted
Renaming file /hello.txt to /foo.txt
File renamed
Reading Dir: /foo.txt
Read from file: Hello World!
13 bytes read for 1421 ns
Total space: 2898MB
Used space: 0MB
Listing directory: /
  DIR : /System Volume Information
  FILE: /2.bmp  SIZE: 153604
  FILE: /3.bmp  SIZE: 153604
  FILE: /4.bmp  SIZE: 153604
  FILE: /1.bmp  SIZE: 153604
  FILE: /Flight_1.json  SIZE: 94
  FILE: /foo.txt  SIZE: 13
Listing directory: /
  DIR : /System Volume Information
  FILE: /2.bmp  SIZE: 153604
  FILE: /3.bmp  SIZE: 153604
  FILE: /4.bmp  SIZE: 153604
  FILE: /1.bmp  SIZE: 153604
  FILE: /Flight_1.json  SIZE: 94
  FILE: /foo.txt  SIZE: 13
Listing directory: /
  DIR : /System Volume Information
  FILE: /2.bmp  SIZE: 153604
  FILE: /3.bmp  SIZE: 153604
  FILE: /4.bmp  SIZE: 153604
  FILE: /1.bmp  SIZE: 153604
  FILE: /Flight_1.json  SIZE: 94

If I use SPIFLASH (line 12: #define USESPIFLASH true), it takes about 30s before freeze:

Click to see the log with SPI
21:44:07.805 -> flash Size: 4MB
21:44:07.805 -> Listing directory: /
21:44:07.805 ->   FILE: /foo.txt  SIZE: 13
21:44:07.805 -> Creating Dir: /mydir
21:44:08.012 -> Dir created
21:44:08.012 -> Listing directory: /
21:44:08.012 ->   DIR : /mydir
21:44:08.012 ->   FILE: /foo.txt  SIZE: 13
21:44:08.012 -> Removing Dir: /mydir
21:44:08.171 -> Dir removed
21:44:08.171 -> Listing directory: /
21:44:08.171 ->   FILE: /foo.txt  SIZE: 13
21:44:08.171 -> Writing file: /hello.txt
21:44:08.218 -> File written
21:44:08.418 -> Appending to file: /hello.txt
21:44:08.418 -> Message appended
21:44:08.572 -> Reading Dir: /hello.txt
21:44:08.572 -> Read from file: Hello World!
21:44:08.572 -> Deleting file: /foo.txt
21:44:08.672 -> File deleted
21:44:08.672 -> Renaming file /hello.txt to /foo.txt
21:44:08.773 -> File renamed
21:44:08.773 -> Reading Dir: /foo.txt
21:44:08.773 -> Read from file: Hello World!
21:44:08.773 -> 13 bytes read for 691 ns
21:44:08.773 -> Total space: 3MB
21:44:08.773 -> Used space: 0MB
21:44:08.773 -> Listing directory: /
21:44:08.773 ->   FILE: /foo.txt  SIZE: 13
21:44:09.776 -> Listing directory: /
21:44:09.776 ->   FILE: /foo.txt  SIZE: 13
21:44:10.779 -> Listing directory: /
21:44:10.779 ->   FILE: /foo.txt  SIZE: 13
21:44:11.782 -> Listing directory: /
21:44:11.782 ->   FILE: /foo.txt  SIZE: 13
21:44:12.784 -> Listing directory: /
21:44:12.784 ->   FILE: /foo.txt  SIZE: 13
21:44:13.787 -> Listing directory: /
21:44:13.787 ->   FILE: /foo.txt  SIZE: 13
21:44:14.790 -> Listing directory: /
21:44:14.790 ->   FILE: /foo.txt  SIZE: 13
21:44:15.792 -> Listing directory: /
21:44:15.792 ->   FILE: /foo.txt  SIZE: 13
21:44:16.794 -> Listing directory: /
21:44:16.794 ->   FILE: /foo.txt  SIZE: 13
21:44:17.797 -> Listing directory: /
21:44:17.797 ->   FILE: /foo.txt  SIZE: 13
21:44:18.800 -> Listing directory: /
21:44:18.800 ->   FILE: /foo.txt  SIZE: 13
21:44:19.803 -> Listing directory: /
21:44:19.803 ->   FILE: /foo.txt  SIZE: 13
21:44:20.806 -> Listing directory: /
21:44:20.806 ->   FILE: /foo.txt  SIZE: 13
21:44:21.809 -> Listing directory: /
21:44:21.809 ->   FILE: /foo.txt  SIZE: 13
21:44:22.812 -> Listing directory: /
21:44:22.812 ->   FILE: /foo.txt  SIZE: 13
21:44:23.816 -> Listing directory: /
21:44:23.816 ->   FILE: /foo.txt  SIZE: 13
21:44:24.819 -> Listing directory: /
21:44:24.819 ->   FILE: /foo.txt  SIZE: 13
21:44:25.821 -> Listing directory: /
21:44:25.821 ->   FILE: /foo.txt  SIZE: 13
21:44:26.837 -> Listing directory: /
21:44:26.837 ->   FILE: /foo.txt  SIZE: 13
21:44:27.840 -> Listing directory: /
21:44:27.840 ->   FILE: /foo.txt  SIZE: 13
21:44:28.844 -> Listing directory: /
21:44:28.844 ->   FILE: /foo.txt  SIZE: 13
21:44:29.847 -> Listing directory: /
21:44:29.847 ->   FILE: /foo.txt  SIZE: 13
21:44:30.850 -> Listing directory: /
21:44:30.850 ->   FILE: /foo.txt  SIZE: 13
21:44:31.852 -> Listing directory: /
21:44:31.852 ->   FILE: /foo.txt  SIZE: 13
21:44:32.854 -> Listing directory: /
21:44:32.854 ->   FILE: /foo.txt  SIZE: 13
21:44:33.857 -> Listing directory: /
21:44:33.857 ->   FILE: /foo.txt  SIZE: 13
21:44:34.860 -> Listing directory: /
21:44:34.860 ->   FILE: /foo.txt  SIZE: 13
21:44:35.864 -> Listing directory: /
21:44:35.864 ->   FILE: /foo.txt  SIZE: 13
21:44:36.866 -> Listing directory: /
21:44:36.866 ->   FILE: /foo.txt  SIZE: 13
21:44:37.869 -> Listing directory: /
21:44:37.869 ->   FILE: /foo.txt  SIZE: 13
21:44:38.873 -> Listing directory: /
21:44:38.873 ->   FILE: /foo.txt  SIZE: 13
21:44:39.874 -> Listing directory: /
21:44:39.874 ->   FILE: /foo.txt  SIZE: 13
21:44:40.876 -> Listing directory: /

Could someone try the code to find out if the problem is with my environment?

Hi @orbat,

Please use the latest library below. We have fixed the issue and updated the library.

Best Regards,
Lakshantha

Hi @lakshan,

Many thanks for your reply, now it seems to works with SD_Test.ino but not with my code, I just include TFT_eSPI.h and SPI.h, it seems to be incompatible with these libs. Wio Terminal freezes after 30s.

Click to see the code
#include <Seeed_FS.h>
#include "SD/Seeed_SD.h"
#include <TFT_eSPI.h>
#include <SPI.h>
#include "roboto25.h"
#include "roboto50.h"
#include "roboto80.h"

#define GFXFF 1
#define RBT25 &Roboto_Regular25pt7b
#define RBT50 &Roboto_Black50pt7b
#define RBT80 &Roboto_Black80pt7b

#define  GRAVITY 9.81 // m/s²
#define  OFFSET 1.0 // Calibration Offset in m/s²

#define GMAX_CP10 6 // g
#define GMIN_CP10 -4.5 // g
#define GMAX_E 4.5 // g
#define GMIN_E -3 // g
#define GMAX_P 5 // g
#define GMIN_P 3.5 // g

float gmax2=0;
float gmin2=0;

TFT_eSPI tft = TFT_eSPI();
TFT_eSprite spr = TFT_eSprite(&tft); // Declare Sprite object “spr” with pointer to “tft” object
int flightid;

void listDir(fs::FS& fs, const char* dirname, uint8_t levels) {
  Serial.print("Listing directory: ");
  Serial.println(dirname);

  File root = fs.open(dirname);
  if (!root) {
      Serial.println("Failed to open directory");
      return;
  }
  if (!root.isDirectory()) {
      Serial.println("Not a directory");
      return;
  }
  File file = root.openNextFile();
  while (file) {
      if (file.isDirectory()) {
          Serial.print("  DIR : ");
          Serial.println(file.name());
          if (levels) {
              listDir(fs, file.name(), levels - 1);
          }
      } else {
          Serial.print("  FILE: ");
          Serial.print(file.name());
          Serial.print("  SIZE: ");
          Serial.println(file.size());
      }
      file = root.openNextFile();
  }
}

void setup(void) {
  Serial.begin(115200);
  pinMode(WIO_KEY_A, INPUT_PULLUP);
  pinMode(WIO_KEY_B, INPUT_PULLUP);
  pinMode(WIO_KEY_C, INPUT_PULLUP);
  pinMode(WIO_5S_UP, INPUT_PULLUP);
  pinMode(WIO_5S_DOWN, INPUT_PULLUP);
  pinMode(WIO_5S_LEFT, INPUT_PULLUP);
  pinMode(WIO_5S_RIGHT, INPUT_PULLUP);
  pinMode(WIO_5S_PRESS, INPUT_PULLUP);
  text_Setup();
  while (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI, 4000000UL)) {
    Serial.println("initialization failed!");
    return;
  } 
}
void loop() {
  static bool trigger=false;
  static float gmax1=0;
  static float gmin1=0;
  static long refreshtime=0;
  static long refreshtimeData=0;
  static float x_raw;
  static int trigdraw=0;
  if (millis()>refreshtime+50){
    refreshtime=millis();
    trigdraw++;
    x_raw = 0;//Kfilter.update(((event.acceleration.y + OFFSET)/GRAVITY));
  }
  if (millis()>refreshtimeData+1000){
    refreshtimeData=millis();
    listDir(SD, "/", 0);
  }
  if (x_raw>gmax1)gmax1=x_raw;
  if (x_raw>gmax2)gmax2=x_raw;
  if (x_raw<gmin1)gmin1=x_raw;
  if (x_raw<gmin2)gmin2=x_raw;
  if (digitalRead(WIO_KEY_A) == LOW) {
    gmax1=0.0;
    gmin1=0.0;
  }
  static long refreshtimetrig=0;
  if (digitalRead(WIO_5S_UP) == LOW and (millis()>refreshtimetrig+500)){
    refreshtimetrig=millis();
    if (trigger){
    }
    trigger=true;
  }
  if (digitalRead(WIO_5S_DOWN) == LOW and (millis()>refreshtimetrig+500)){
    refreshtimetrig=millis();
    if (trigger){
    }
    trigger=true;
  }
  if ((millis()>refreshtimetrig+1000)and (trigger)) {
    trigger=false;
  }
  if (trigdraw >= 4){
    drawmain(x_raw);
    trigdraw=0;
  }
  if (!trigger) {
    drawminmax(1 ,gmax1, gmin1, GMAX_E, GMIN_E);
    drawminmax(2 ,gmax2, gmin2, GMAX_CP10, GMIN_CP10);
  }
}
void drawRk(float Rk){
  spr.setFreeFont(RBT25);
  spr.setTextColor(TFT_WHITE,TFT_BLACK);
  spr.fillRect(0, 141, 320, 99, TFT_BLACK);
  spr.drawFloat(Rk, 10, 5, 145, GFXFF);
  spr.pushSprite(0, 0);
}
void drawmain(float g){
  spr.setFreeFont(RBT80);
  if (g > GMAX_E - 0.5 or g < GMIN_E + 0.5) spr.setTextColor(TFT_RED,TFT_BLACK);
  else spr.setTextColor(TFT_WHITE,TFT_BLACK);
  spr.drawFloat(abs(g), 1, 80, 10, GFXFF);
  spr.pushSprite(0, 0);
  spr.setFreeFont(RBT50);
  if (g > 0) spr.drawString("+", 15, 28, GFXFF);
  else if (g < 0 ) spr.drawString("-  ", 15, 28, GFXFF);
}
void drawminmax(int slot, float gmax, float gmin, float thmax, float thmin){
  int xpos, ypos;
  ypos= 145;
  if (slot==1){
    xpos= 173;
    spr.fillRect(160, 141, 160, 99, TFT_BLACK);
  }
  else if (slot==2){
    xpos= 10;
    spr.fillRect(0, 141, 160, 99, TFT_BLACK);
  }
  spr.setFreeFont(RBT25);
  spr.drawLine(160, 140, 160, 240, TFT_DARKGREY);
  if (gmax>thmax)spr.setTextColor(TFT_RED,TFT_BLACK);
  else spr.setTextColor(TFT_WHITE,TFT_BLACK);
  spr.drawFloat(abs(gmax),2, xpos+37, ypos, GFXFF);
  spr.drawString("+", xpos, ypos, GFXFF);
  if (gmin<thmin)spr.setTextColor(TFT_RED,TFT_BLACK);
  else spr.setTextColor(TFT_WHITE,TFT_BLACK);
  spr.drawFloat(abs(gmin),2, xpos+37, ypos+50, GFXFF);
  spr.drawString("-  ", xpos+7, ypos+49, GFXFF);
  spr.setTextColor(TFT_WHITE,TFT_BLACK);
}
void text_Setup(){
  tft.init();
  tft.setRotation(3);
  tft.fillScreen(TFT_BLACK);
  spr.createSprite(320, 240);
  spr.drawLine(0, 140, 320, 140, TFT_DARKGREY);
  spr.drawLine(160, 140, 160, 240, TFT_DARKGREY);
}
Click to see the log

18:55:07.453 -> Listing directory: /
18:55:07.453 -> DIR : /System Volume Information
18:55:07.453 -> FILE: /Flight_1.json SIZE: 94
18:55:08.467 -> Listing directory: /
18:55:08.467 -> DIR : /System Volume Information
18:55:08.467 -> FILE: /Flight_1.json SIZE: 94
18:55:09.454 -> Listing directory: /
18:55:09.454 -> DIR : /System Volume Information
18:55:09.487 -> FILE: /Flight_1.json SIZE: 94
18:55:10.470 -> Listing directory: /
18:55:10.470 -> DIR : /System Volume Information
18:55:10.470 -> FILE: /Flight_1.json SIZE: 94
18:55:11.487 -> Listing directory: /
18:55:11.487 -> DIR : /System Volume Information
18:55:11.487 -> FILE: /Flight_1.json SIZE: 94
18:55:12.507 -> Listing directory: /
18:55:12.507 -> DIR : /System Volume Information
18:55:12.507 -> FILE: /Flight_1.json SIZE: 94
18:55:13.521 -> Listing directory: /
18:55:13.521 -> DIR : /System Volume Information
18:55:13.521 -> FILE: /Flight_1.json SIZE: 94
18:55:14.533 -> Listing directory: /
18:55:14.533 -> DIR : /System Volume Information
18:55:14.533 -> FILE: /Flight_1.json SIZE: 94
18:55:15.524 -> Listing directory: /
18:55:15.524 -> DIR : /System Volume Information
18:55:15.559 -> FILE: /Flight_1.json SIZE: 94
18:55:16.538 -> Listing directory: /
18:55:16.538 -> DIR : /System Volume Information
18:55:16.538 -> FILE: /Flight_1.json SIZE: 94
18:55:17.554 -> Listing directory: /
18:55:17.554 -> DIR : /System Volume Information
18:55:17.554 -> FILE: /Flight_1.json SIZE: 94
18:55:18.573 -> Listing directory: /
18:55:18.573 -> DIR : /System Volume Information
18:55:18.573 -> FILE: /Flight_1.json SIZE: 94
18:55:19.562 -> Listing directory: /
18:55:19.562 -> DIR : /System Volume Information
18:55:19.562 -> FILE: /Flight_1.json SIZE: 94
18:55:20.577 -> Listing directory: /
18:55:20.577 -> DIR : /System Volume Information
18:55:20.577 -> FILE: /Flight_1.json SIZE: 94
18:55:21.594 -> Listing directory: /
18:55:21.594 -> DIR : /System Volume Information
18:55:21.594 -> FILE: /Flight_1.json SIZE: 94
18:55:22.609 -> Listing directory: /
18:55:22.609 -> DIR : /System Volume Information
18:55:22.609 -> FILE: /Flight_1.json SIZE: 94
18:55:23.630 -> Listing directory: /
18:55:23.630 -> DIR : /System Volume Information
18:55:23.630 -> FILE: /Flight_1.json SIZE: 94
18:55:24.615 -> Listing directory: /
18:55:24.615 -> DIR : /System Volume Information
18:55:24.615 -> FILE: /Flight_1.json SIZE: 94
18:55:25.628 -> Listing directory: /
18:55:25.628 -> DIR : /System Volume Information
18:55:25.628 -> FILE: /Flight_1.json SIZE: 94
18:55:26.643 -> Listing directory: /
18:55:26.643 -> DIR : /System Volume Information
18:55:26.643 -> FILE: /Flight_1.json SIZE: 94
18:55:27.661 -> Listing directory: /
18:55:27.661 -> DIR : /System Volume Information
18:55:27.661 -> FILE: /Flight_1.json SIZE: 94
18:55:28.647 -> Listing directory: /
18:55:28.647 -> DIR : /System Volume Information
18:55:28.681 -> FILE: /Flight_1.json SIZE: 94
18:55:29.669 -> Listing directory: /
18:55:29.669 -> DIR : /System Volume Information
18:55:29.669 -> FILE: /Flight_1.json SIZE: 94
18:55:30.686 -> Listing directory: /
18:55:30.686 -> DIR : /System Volume Information
18:55:30.686 -> FILE: /Flight_1.json SIZE: 94
18:55:31.698 -> Listing directory: /
18:55:31.698 -> DIR : /System Volume Information
18:55:31.698 -> FILE: /Flight_1.json SIZE: 94
18:55:32.711 -> Listing directory: /
18:55:32.711 -> DIR : /System Volume Information
18:55:32.711 -> FILE: /Flight_1.json SIZE: 94
18:55:33.701 -> Listing directory: /
18:55:33.701 -> DIR : /System Volume Information
18:55:33.701 -> FILE: /Flight_1.json SIZE: 94
18:55:34.715 -> Listing directory: /
18:55:34.715 -> DIR : /System Volume Information
18:55:34.715 -> FILE: /Flight_1.json SIZE: 94
18:55:35.733 -> Listing directory: /
18:55:35.733 -> DIR : /System Volume Information
18:55:35.733 -> FILE: /Flight_1.json SIZE: 94
18:55:36.722 -> Listing directory: /
18:55:36.722 -> DIR : /System Volume Information
18:55:36.755 -> FILE: /Flight_1.json SIZE: 94
18:55:37.738 -> Listing directory: /
18:55:37.738 -> DIR : /System Volume Information
18:55:37.738 -> FILE: /Flight_1.json SIZE: 94
18:55:38.754 -> Listing directory: /
18:55:38.754 -> DIR : /System Volume Information
18:55:38.754 -> FILE: /Flight_1.json SIZE: 94
18:55:39.767 -> Listing directory: /
18:55:39.767 -> DIR : /System Volume Information

roboto25.h
roboto50.h
roboto80.h

Best regards.