LoRa_Access_Point
Embed:
(wiki syntax)
Show/hide line numbers
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 Sun Jul 17 2022 05:42:39 by 1.7.2