Versión sin post-procesado del software del VmRideR

Dependencies:   mbed

Committer:
jjmedina
Date:
Mon Jun 15 15:44:11 2015 +0000
Revision:
1:a3c9b672b8e2
Parent:
0:3d456b8ce449
Prueba_deutsch

Who changed what in which revision?

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