My File System, no changes from official.

Fork of FATFileSystem by mbed official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MemFileSystem.h Source File

MemFileSystem.h

00001 /* mbed Microcontroller Library - MemFileSystem
00002  * Copyright (c) 2008, sford
00003  */
00004 
00005 
00006 #ifndef MBED_MEMFILESYSTEM_H
00007 #define MBED_MEMFILESYSTEM_H
00008 
00009 #include "FATFileSystem.h"
00010 
00011 namespace mbed
00012 {
00013 
00014     class MemFileSystem : public FATFileSystem
00015     {
00016     public:
00017     
00018         // 2000 sectors, each 512 bytes (malloced as required)
00019         char *sectors[2000];
00020     
00021         MemFileSystem(const char* name) : FATFileSystem(name) {
00022             memset(sectors, 0, sizeof(sectors));
00023         }
00024     
00025         virtual ~MemFileSystem() {
00026             for(int i = 0; i < 2000; i++) {
00027                 if(sectors[i]) {
00028                     free(sectors[i]);
00029                 }
00030             }
00031         }
00032     
00033         // read a sector in to the buffer, return 0 if ok
00034         virtual int disk_read(char *buffer, int sector) {
00035             if(sectors[sector] == 0) {
00036                 // nothing allocated means sector is empty
00037                 memset(buffer, 0, 512);
00038             } else {
00039                 memcpy(buffer, sectors[sector], 512);
00040             }
00041             return 0;
00042         }
00043     
00044         // write a sector from the buffer, return 0 if ok
00045         virtual int disk_write(const char *buffer, int sector) {
00046             // if buffer is zero deallocate sector
00047             char zero[512];
00048             memset(zero, 0, 512);
00049             if(memcmp(zero, buffer, 512)==0) {
00050                 if(sectors[sector] != 0) {
00051                     free(sectors[sector]);
00052                     sectors[sector] = 0;
00053                 }
00054                 return 0;
00055             }
00056             // else allocate a sector if needed, and write
00057             if(sectors[sector] == 0) {
00058                 char *sec = (char*)malloc(512);
00059                 if(sec==0) {
00060                     return 1; // out of memory
00061                 }
00062                 sectors[sector] = sec;
00063             }
00064             memcpy(sectors[sector], buffer, 512);
00065             return 0;
00066         }
00067     
00068         // return the number of sectors
00069         virtual int disk_sectors() {
00070             return sizeof(sectors)/sizeof(sectors[0]);
00071         }
00072     
00073     };
00074 
00075 }
00076 
00077 #endif