2 * pfs.h - pseudo flash filesystem header file
4 * author: hackbard@hackdaworld.org
13 #include "functions.h"
16 #define PFFS_MAX_FILENAME_SIZE 15 // in words
17 #define PFFS_HEADER_SIZE 3 // in words
19 /* general pffs system */
20 #define PFFS_INDEX_FOUND 0x00
21 #define PFFS_NO_INDEX_FOUND 0x01
23 #define PFFS_DATA_TMP_FOUND 0x00
24 #define PFFS_NO_DATA_TMP 0x01
26 #define PFFS_SEC_NOT_EMPTY 0x00
27 #define PFFS_SEC_EMPTY 0x01
29 #define PFFS_REGISTERED (1<<0)
31 /* pffs index format */
32 #define PFFS_INDEX_MAGIC_MASK 0xf000
33 #define PFFS_STATE_MASK 0x0f00
34 #define PFFS_FNLEN_MASK 0x00f0
35 #define PFFS_LEN_MSB_MASK 0x000f
37 #define PFFS_INDEX_MAGIC 0x7000
38 #define PFFS_INDEX_REMOVED 0x0700
41 #define PFFS_READ 0x01
42 #define PFFS_WRITE 0x02
43 #define PFFS_RDWR 0x03
46 #define PFFS_SEEK_SET 0x01
47 #define PFFS_SEEK_CUR 0x02
48 #define PFFS_SEEK_END 0x03
50 /* pffs open / write / read return codes */
51 #define PFFS_FILE_FOUND 0x01
52 #define PFFS_FILE_NOT_FOUND 0x02
53 #define PFFS_NO_SPACE_LEFT 0x04
54 #define PFFS_FILENAME_TOO_LONG 0x08
55 #define PFFS_MODE_UNSUPPORTED 0x10
57 #define PFFS_INVALID_LEN 0x01
58 #define PFFS_EINVAL 0x02
60 /* type definitions */
62 typedef struct s_pffs {
66 u8 sec_num_data[2]; // first/last sector used for data
67 u8 sec_num_index[2]; // 2 sectors used as an index
69 /* flash write, read and sector erase function pointers */
70 int (*fw)(u32 addr,u16 *buf,int len);
71 int (*fr)(u32 addr,u16 *buf,int len);
74 /* pffs internal variables */
76 u8 index_sec; // current index sector
77 u8 data_tmp_sec; // current temp data sector
80 typedef struct s_pffs_fd {
85 char file[PFFS_MAX_FILENAME_SIZE+PFFS_MAX_FILENAME_SIZE];
91 /* function prototypes */
92 int pffs_open(t_pffs *pffs,t_pffs_fd *fd,char *file,u8 mode);
93 int pffs_write(t_pffs_fd *fd,u8 *buf,int len);
94 int pffs_read(t_pffs_fd *fd,u8 *buf,int len);
95 int pffs_lseek(t_pffs_fd *fd,u8 offset,int len);
96 int pffs_close(t_pffs_fd *fd);
97 int pffs_unlink(t_pffs_fd *fd,char *file);