Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of FATFileSystem by
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
Generated on Thu Jul 28 2022 16:31:07 by
