mFS file system library for EEPROM memory chips.

Revision:
0:cbf45dde2b49
Child:
3:1cbc15648de1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mfs.h	Mon Feb 21 07:35:16 2011 +0000
@@ -0,0 +1,80 @@
+/*H****************************************************************************
+* FILENAME :        mfs.h                                                     *
+*                                                                             *
+* DESCRIPTION :                                                               *
+*       mFS file system implementation for mBED with external I2C EEEPROM.    *
+*                                                                             *
+* Block Flags:                                                                *
+* 7:FBOF      Begining of file                                                *
+* 6:LBOF      Last block of file                                              *
+* 5:RO        Read only file (Used only with FBOF)                            *
+* 4:HIDDEN    Hidden file (Used only with FBOF)                               *
+* 3:INUSE     Block in use                                                    *
+* 2:NBAD      Bad block (INV)                                                 *
+* 1:VOL       Volume label (Used only with FBOF)                              *
+* 0:LOCK      Locked file (Used only with FBOF)                               *
+*                                                                             *
+* AUTHOR :    Olli Vanhoja        START DATE :    2011-02-18                  *
+*******************************************************************************
+*
+* CHANGES :
+*
+* VERSION DATE       WHO             DETAIL
+* 0.1     2011-02-21 Olli Vanhoja    Initial release version
+*
+*H*/
+
+#ifndef MFS_H
+#define MFS_H
+
+#include "i2c_eeprom.h"
+
+const unsigned int VOL_SIZE=40960; // 40 kB EEPROM chip
+const unsigned int BS=4096; // 4096 bytes per block
+const unsigned int BC=VOL_SIZE / BS; // 128 blocks
+const char mEOF='\x01'; // End Of File/Section marked
+const unsigned int BUF=400; // file buffer length
+
+typedef unsigned short int uint16;
+
+class mfs {
+private:
+    i2c_eeprom *mem; // Only 512 kB I2C EEPROM is supported ATM
+public:
+    mfs(int i2c_address);
+    char read(char *data, char block, unsigned int byteOffset, unsigned int n); // Read bytes from block
+    char write(char *data, char block, unsigned int byteOffset, unsigned int n); // write bytes to block
+    char getNextFreeBlock(char *blockOut); // Reserve next free block from begining
+    unsigned int findNextFile(unsigned int block, char *filenameOut); // Returns block number
+    uint16 getFirstBlockOfFile(char filename[20]);
+    char createFile(char filename[20]);
+    char removeFile(char filename[20]);
+    char setFileFlags(char *flags, char filename[20]);
+    char getFileFlags(char *flags, char filename[20]);
+    uint16 free();
+    char mkfs(char);
+};
+
+class file {
+private:
+    mfs *fs;   // Reference to the file system in use
+    char attr; // RW = 1; RO = 0
+    char buffer[BUF]; // Write buffer
+    unsigned int bufPos; // "Cursor" position in buffer
+    char firstBlock; // First block of the file
+    char currBlock; // Current block in use
+    unsigned int blockPos; // "head" position on the current block
+    void needsFlush(); // check if flush is needed before read operation
+public:
+    file(mfs *fs_ref, char filename[20], char operation); // Open file handle
+    ~file(); // Close file handle and flush
+    void rewind(); // Rewind to start postion of the file
+    char forward(); // Forward one block
+    //char seek(unsigned int byte); // seek to the byte
+    void read(char *data, unsigned int n);
+    void readBin(char *data, unsigned int n);
+    char write(char *data, unsigned int n); // Write byte array
+    char flush();
+};
+
+#endif
\ No newline at end of file