mFS file system library for EEPROM memory chips.

Revision:
9:52c01cb100ac
Parent:
8:e67733ad4427
Child:
10:211cb54339a0
--- a/mfs.h	Mon Feb 21 22:41:13 2011 +0000
+++ b/mfs.h	Tue Feb 22 18:57:37 2011 +0000
@@ -44,10 +44,13 @@
  *                                   *Added possibility change I2C speed
  *                                   *I2C autoreset on failure
  * 0.4     2011-02-22 Olli Vanhoja   *mfs::renameFile(char [20], char [20] function added
+ *                                   *Incresed fault tolerance by first allocating new
+ *                                    block and then linking to it from previous block
  *
  * TODO :
- *       Directory support (VOL labeled blocks)
- *
+ *          *Directory support (VOL labeled blocks)
+ *          *Change 16bit integers to 32bit where it's possible
+            *Support for >256 blocks
  *H*/
 
 #ifndef MFS_H
@@ -61,8 +64,6 @@
 const char mEOF='\x01'; // End Of File/Section marked
 const unsigned int BUF=400; /**< File buffer length */
 
-typedef unsigned short int uint16;
-
 /** mFS File System class
  * 
  * This class is used as a handle for the fs in use.
@@ -85,7 +86,7 @@
     * @param n Bytes to be read.
     * @returns Error code. 0 = OK, 1 = Incorrect input
     */
-    char read(char *data, char block, unsigned int byte, unsigned int n);
+    char read(char *data, char block, uint32_t byte, uint32_t n);
     
     /** Writes data to specified fs block
     *
@@ -95,7 +96,7 @@
     * @param n Bytes to be read.
     * @returns Error code. 0 = OK, 1 = Incorrect input
     */
-    char write(char *data, char block, unsigned int byte, unsigned int n);
+    char write(char *data, char block, uint32_t byte, uint32_t n);
     
     /** Locate next free block
     *
@@ -110,14 +111,14 @@
     * @param *filenameOut Return name of the file found.
     * @returns Block number of the file found or 0xFFFF to indicate empty file system.
     */
-    unsigned int findNextFile(unsigned int block, char *filenameOut);
+    uint32_t findNextFile(char block, char *filenameOut);
     
     /** Get number of the first block of the given file. (FBOF flag)
     *
     * @param filename[20] Filename input.
     * @returns Block number of the file or 0xFFFF to indicate that file not found.
     */
-    uint16 getFirstBlockOfFile(char filename[20]);
+    uint32_t getFirstBlockOfFile(char filename[20]);
     
     /** Create a new empty file
     *
@@ -168,7 +169,7 @@
     *
     * @returns Number of free blocks.
     */
-    uint16 free();
+    char free();
     
     /** Format new file system
     *
@@ -188,21 +189,32 @@
     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
+    uint32_t 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
+    uint32_t blockPos; // "head" position on the current block
 public:
     /** Open new file handle
     *
-    * File must be created before it can be opened!
+    * \warning {File must be created before it can be opened!
+    * Opening non-existing file will trip the system to error();}
     *
     * @param filename[20] Filename input.
     * @param operation 0 = read only, 1 = read and write. If read only file is opened in rw mode system will trip to error().
     */
     file(mfs *fs_ref, char filename[20], char operation);
     
+    /** Open new file handle with timed flush
+    *
+    * \warning {File must be created before it can be opened!
+    * Opening non-existing file will trip the system to error();}
+    *
+    * @param filename[20] Filename input.
+    * @param operation 0 = read only, 1 = read and write. If read only file is opened in rw mode system will trip to error().
+    * @param autoFlushInterval Interval between flushes in seconds.
+    */
+    file(mfs *fs_ref, char filename[20], char operation, float autoFlushInterval);
+    
     /** Close file handle
     *
     * Flushes the file and closes the handle.
@@ -219,7 +231,7 @@
     * @param n Number of blocks to be rewinded.
     * @returns Error code. 0 = OK, 1 = First block of file.
     */
-    char rewind(uint16 n);
+    char rewind(uint32_t n);
     
     /** Forward one byte
     *
@@ -232,7 +244,7 @@
     * @param n Number of blocks.
     * @returns Error code. 0 = OK, 1 = End of file.
     */
-    char forward(uint16 n);
+    char forward(uint32_t n);
     
     /** Reads a string of bytes
     *
@@ -242,7 +254,7 @@
     * @param n Number of bytes to be read.
     * @returns Error code. 0 = OK, 1 = Last block of the file
     */
-    void read(char *data, unsigned int n);
+    void read(char *data, uint32_t n);
     /** Reads a binary array of bytes
     *
     * Doesn't add '\0' at the end of data array and doesn't respect mEOF byte.
@@ -251,7 +263,7 @@
     * @param n Number of bytes to be read.
     */
     
-    void readBin(char *data, unsigned int n);
+    void readBin(char *data, uint32_t n);
     /** Write byte array to a file (buffer)
     *
     * @param data Input data.
@@ -259,7 +271,7 @@
     * @returns Error code. 0 = OK, 1 = Flush failed.
     */
     
-    char write(char *data, unsigned int n);
+    char write(char *data, uint32_t n);
     
     /** Flush file buffer
     * Writes buffer to the EEPROM chip in use.