X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Farm.git;a=blobdiff_plain;f=betty%2Fpffs.h;h=a37876e8336289e9d2ef9e8fa084cd5530ccc2bb;hp=faf0d3801d8f51f9c4bbd0327cfc48bf6d256ffe;hb=476b73692511eeed9602d71e773da5ab24831b74;hpb=bbf7d44cf935538f5a353665f160e5cd3ed59da8 diff --git a/betty/pffs.h b/betty/pffs.h index faf0d38..a37876e 100644 --- a/betty/pffs.h +++ b/betty/pffs.h @@ -16,25 +16,46 @@ #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