some more pffs code (structures become identifiable ;)
[my-code/arm.git] / betty / pffs.h
index faf0d38..a37876e 100644 (file)
 #define PFFS_MAX_FILENAME_SIZE 15              // in words
 #define PFFS_HEADER_SIZE       3               // in words
 
-#define PFFS_REGISTERED                (1<<0)
+/* general pffs system */
+#define PFFS_INDEX_FOUND       0x00
+#define PFFS_NO_INDEX_FOUND    0x01
 
-#define PFFS_INDEX_MAGIC       0x7000
+#define PFFS_DATA_TMP_FOUND    0x00
+#define PFFS_NO_DATA_TMP       0x01
+
+#define PFFS_SEC_NOT_EMPTY     0x00
+#define PFFS_SEC_EMPTY         0x01
 
+#define PFFS_REGISTERED                (1<<0)
+
+/* pffs index format */
 #define PFFS_INDEX_MAGIC_MASK  0xf000
-#define PFFS_RESERVED_MASK     0x0f00
+#define PFFS_STATE_MASK                0x0f00
 #define PFFS_FNLEN_MASK                0x00f0
 #define PFFS_LEN_MSB_MASK      0x000f
 
+#define PFFS_INDEX_MAGIC       0x7000
+#define PFFS_INDEX_REMOVED     0x0700
+
 /* file modes */
 #define PFFS_READ              0x01
 #define PFFS_WRITE             0x02
 #define PFFS_RDWR              0x03
 
-/* pffs write / read return codes */
-#define PFFS_FILE_EXISTS       0x01
+/* lseek offsets */
+#define PFFS_SEEK_SET          0x01
+#define PFFS_SEEK_CUR          0x02
+#define PFFS_SEEK_END          0x03
+
+/* pffs open / write / read return codes */
+#define PFFS_FILE_FOUND                0x01
 #define PFFS_FILE_NOT_FOUND    0x02
 #define PFFS_NO_SPACE_LEFT     0x04
 #define PFFS_FILENAME_TOO_LONG 0x08
+#define PFFS_MODE_UNSUPPORTED  0x10
+
+#define PFFS_INVALID_LEN       0x01
+#define PFFS_EINVAL            0x02
 
 /* type definitions */
 
@@ -42,21 +63,25 @@ typedef struct s_pffs {
        /* flash specs */
        u32 base_addr;
        u32 *sec_addr;
+       u8 sec_num_data[2];             // first/last sector used for data
+       u8 sec_num_index[2];            // 2 sectors used as an index
+
        /* flash write, read and sector erase function pointers */
        int (*fw)(u32 addr,u16 *buf,int len);
        int (*fr)(u32 addr,u16 *buf,int len);
        int (*fe)(u32 addr);
+
        /* pffs internal variables */
        u8 state;
-       u32 data_ptr;                   // pointer where new data goes
-       u32 index_ptr[3];               // 0: start, 1: new, 2: current
-       u8 sec_num_data[2];             // data start/end sectors
-       u8 sec_num_index[2];            // 2 index sectors
+       u8 index_sec;                   // current index sector
+       u8 data_tmp_sec;                // current temp data sector
 } t_pffs;
 
 typedef struct s_pffs_fd {
        u32 daddr;
+       u32 dptr;
        u32 iaddr;
+       u16 len;
        char file[PFFS_MAX_FILENAME_SIZE+PFFS_MAX_FILENAME_SIZE];
        u8 fn_size;
        u8 mode;
@@ -64,10 +89,11 @@ typedef struct s_pffs_fd {
 } t_pffs_fd;
 
 /* function prototypes */
-int pffs_open(t_pffs *pffs,char *file,u8 mode);
-int pffs_write(t_pffs *pffs,int fd,u8 *buf,int len);
-int pffs_read(t_pffs *pffs,int fd,u8 *buf,int len);
-int pffs_close(t_pffs *pffs,int fd);
-int pffs_unlink(t_pffs *pffs,char *file);
+int pffs_open(t_pffs *pffs,t_pffs_fd *fd,char *file,u8 mode);
+int pffs_write(t_pffs_fd *fd,u8 *buf,int len);
+int pffs_read(t_pffs_fd *fd,u8 *buf,int len);
+int pffs_lseek(t_pffs_fd *fd,u8 offset,int len);
+int pffs_close(t_pffs_fd *fd);
+int pffs_unlink(t_pffs_fd *fd,char *file);
 
 #endif