1 /* mbed Microcontroller Library - MemFileSystem 2 * Copyright (c) 2008, sford 3 */ 4 5 6 #ifndef MBED_MEMFILESYSTEM_H 7 #define MBED_MEMFILESYSTEM_H 8 9 #include "FATFileSystem.h" 10 11 namespace mbed 12 { 13 14 class MemFileSystem : public FATFileSystem 15 { 16 public: 17 18 // 2000 sectors, each 512 bytes (malloced as required) 19 char *sectors[2000]; 20 MemFileSystem(const char * name)21 MemFileSystem(const char* name) : FATFileSystem(name) { 22 memset(sectors, 0, sizeof(sectors)); 23 } 24 ~MemFileSystem()25 virtual ~MemFileSystem() { 26 for(int i = 0; i < 2000; i++) { 27 if(sectors[i]) { 28 free(sectors[i]); 29 } 30 } 31 } 32 33 // read a sector in to the buffer, return 0 if ok disk_read(char * buffer,int sector)34 virtual int disk_read(char *buffer, int sector) { 35 if(sectors[sector] == 0) { 36 // nothing allocated means sector is empty 37 memset(buffer, 0, 512); 38 } else { 39 memcpy(buffer, sectors[sector], 512); 40 } 41 return 0; 42 } 43 44 // write a sector from the buffer, return 0 if ok disk_write(const char * buffer,int sector)45 virtual int disk_write(const char *buffer, int sector) { 46 // if buffer is zero deallocate sector 47 char zero[512]; 48 memset(zero, 0, 512); 49 if(memcmp(zero, buffer, 512)==0) { 50 if(sectors[sector] != 0) { 51 free(sectors[sector]); 52 sectors[sector] = 0; 53 } 54 return 0; 55 } 56 // else allocate a sector if needed, and write 57 if(sectors[sector] == 0) { 58 char *sec = (char*)malloc(512); 59 if(sec==0) { 60 return 1; // out of memory 61 } 62 sectors[sector] = sec; 63 } 64 memcpy(sectors[sector], buffer, 512); 65 return 0; 66 } 67 68 // return the number of sectors disk_sectors()69 virtual int disk_sectors() { 70 return sizeof(sectors)/sizeof(sectors[0]); 71 } 72 73 }; 74 75 } 76 77 #endif 78