Simple SD File System test using mbed-os, FATFileSystem + sd-driver

Dependencies:   sd-driver

Fork of mbed-os-example-fat-filesystem by mbed-os-examples

Revision:
0:ab69df6f1c47
Child:
9:4cbf1601a4a5
diff -r 000000000000 -r ab69df6f1c47 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Mar 09 17:45:26 2017 +0000
@@ -0,0 +1,82 @@
+#include "mbed.h"
+#include "FATFileSystem.h"
+#include "HeapBlockDevice.h"
+#include <stdio.h>
+#include <errno.h>
+
+HeapBlockDevice bd(128 * 512, 512);
+FATFileSystem fs("fs");
+
+void return_error(int ret_val){
+  if (ret_val)
+    printf("Failure. %d\r\n", ret_val);
+  else
+    printf("done.\r\n");
+}
+
+void errno_error(void* ret_val){
+  if (ret_val == NULL)
+    printf(" Failure. %d \r\n", errno);
+  else
+    printf(" done.\r\n");
+}
+
+int main() {
+  int error = 0;
+  printf("Welcome to the filesystem example.\r\n"
+         "Formatting a FAT, RAM-backed filesystem. ");
+  error = FATFileSystem::format(&bd);
+  return_error(error);
+
+  printf("Mounting the filesystem on \"/fs\". ");
+  error = fs.mount(&bd);
+  return_error(error);
+
+  printf("Opening a new file, numbers.txt.");
+  FILE* fd = fopen("/fs/numbers.txt", "w");
+  errno_error(fd);
+
+  for (int i = 0; i < 20; i++){
+    printf("Writing decimal numbers to a file (%d/20)\r", i);
+    fprintf(fd, "%d\r\n", i);
+  }
+  printf("Writing decimal numbers to a file (20/20) done.\r\n");
+
+  printf("Closing file.");
+  fclose(fd);
+  printf(" done.\r\n");
+
+  printf("Re-opening file read-only.");
+  fd = fopen("/fs/numbers.txt", "r");
+  errno_error(fd);
+
+  printf("Dumping file to screen.\r\n");
+  char buff[16] = {0};
+  while (!feof(fd)){
+    int size = fread(&buff[0], 1, 15, fd);
+    fwrite(&buff[0], 1, size, stdout);
+  }
+  printf("EOF.\r\n");
+
+  printf("Closing file.");
+  fclose(fd);
+  printf(" done.\r\n");
+
+  printf("Opening root directory.");
+  DIR* dir = opendir("/fs/");
+  errno_error(fd);
+
+  struct dirent* de;
+  printf("Printing all filenames:\r\n");
+  while((de = readdir(dir)) != NULL){
+    printf("  %s\r\n", &(de->d_name)[0]);
+  }
+
+  printf("Closeing root directory. ");
+  error = closedir(dir);
+  return_error(error);
+  printf("Filesystem Demo complete.\r\n");
+
+  while (true) {}
+}
+