Michael Spencer / Mbed 2 deprecated LaOS

Dependencies:   mbed

Committer:
Michael J. Spencer
Date:
Wed Mar 05 06:14:02 2014 -0800
Revision:
1:f5ac63519541
Initial commit.

Who changed what in which revision?

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