dd
Dependencies: C12832 LM75B mbed
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 class MemFileSystem : public FATFileSystem { 00014 public: 00015 00016 // 2000 sectors, each 512 bytes (malloced as required) 00017 char *sectors[2000]; 00018 00019 MemFileSystem(const char* name) : FATFileSystem(name) { 00020 memset(sectors, 0, sizeof(sectors)); 00021 } 00022 00023 virtual ~MemFileSystem() { 00024 for(int i = 0; i < 2000; i++) { 00025 if(sectors[i]) { 00026 free(sectors[i]); 00027 } 00028 } 00029 } 00030 00031 // read a sector in to the buffer, return 0 if ok 00032 virtual int disk_read(char *buffer, int sector) { 00033 if(sectors[sector] == 0) { 00034 // nothing allocated means sector is empty 00035 memset(buffer, 0, 512); 00036 } else { 00037 memcpy(buffer, sectors[sector], 512); 00038 } 00039 return 0; 00040 } 00041 00042 // write a sector from the buffer, return 0 if ok 00043 virtual int disk_write(const char *buffer, int sector) { 00044 // if buffer is zero deallocate sector 00045 char zero[512]; 00046 memset(zero, 0, 512); 00047 if(memcmp(zero, buffer, 512)==0) { 00048 if(sectors[sector] != 0) { 00049 free(sectors[sector]); 00050 sectors[sector] = 0; 00051 } 00052 return 0; 00053 } 00054 // else allocate a sector if needed, and write 00055 if(sectors[sector] == 0) { 00056 char *sec = (char*)malloc(512); 00057 if(sec==0) { 00058 return 1; // out of memory 00059 } 00060 sectors[sector] = sec; 00061 } 00062 memcpy(sectors[sector], buffer, 512); 00063 return 0; 00064 } 00065 00066 // return the number of sectors 00067 virtual int disk_sectors() { 00068 return sizeof(sectors)/sizeof(sectors[0]); 00069 } 00070 00071 }; 00072 00073 } 00074 00075 #endif
Generated on Tue Jul 12 2022 19:00:26 by 1.7.2