dd

Dependencies:   C12832 mbed

Revision:
0:caecb0d1e7d3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FileSystem/FatFileSystem/MemFileSystem.h	Wed Apr 08 08:27:55 2015 +0000
@@ -0,0 +1,75 @@
+/* mbed Microcontroller Library - MemFileSystem
+ * Copyright (c) 2008, sford
+ */
+
+
+#ifndef MBED_MEMFILESYSTEM_H
+#define MBED_MEMFILESYSTEM_H
+
+#include "FATFileSystem.h"
+
+namespace mbed {
+
+class MemFileSystem : public FATFileSystem {
+public:
+
+    // 2000 sectors, each 512 bytes (malloced as required)
+    char *sectors[2000];
+
+    MemFileSystem(const char* name) : FATFileSystem(name) {
+        memset(sectors, 0, sizeof(sectors));
+    }
+
+    virtual ~MemFileSystem() {
+        for(int i = 0; i < 2000; i++) {
+            if(sectors[i]) {
+                free(sectors[i]);
+            }
+        }
+    }
+
+    // read a sector in to the buffer, return 0 if ok
+    virtual int disk_read(char *buffer, int sector) {
+        if(sectors[sector] == 0) {
+            // nothing allocated means sector is empty
+            memset(buffer, 0, 512);
+        } else {
+            memcpy(buffer, sectors[sector], 512);
+        }
+        return 0;
+    }
+
+    // write a sector from the buffer, return 0 if ok
+    virtual int disk_write(const char *buffer, int sector) {
+        // if buffer is zero deallocate sector
+        char zero[512];
+        memset(zero, 0, 512);
+        if(memcmp(zero, buffer, 512)==0) {
+            if(sectors[sector] != 0) {
+                free(sectors[sector]);
+                sectors[sector] = 0;
+            }
+            return 0;
+        }
+        // else allocate a sector if needed, and write
+        if(sectors[sector] == 0) {
+            char *sec = (char*)malloc(512);
+            if(sec==0) {
+                return 1; // out of memory
+            }
+            sectors[sector] = sec;
+        }
+        memcpy(sectors[sector], buffer, 512);
+        return 0;
+    }
+        
+    // return the number of sectors
+    virtual int disk_sectors() {
+        return sizeof(sectors)/sizeof(sectors[0]);
+    }
+
+};
+    
+}
+
+#endif