mFS file system library for EEPROM memory chips.
Diff: mfs.h
- 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