X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Farm.git;a=blobdiff_plain;f=betty%2Fpffs.h;h=faf0d3801d8f51f9c4bbd0327cfc48bf6d256ffe;hp=92b4821013fdb366185056be1a56d917b93a2228;hb=bbf7d44cf935538f5a353665f160e5cd3ed59da8;hpb=94909b5b893d5c60bc44bbafec8de1b3c86d9595 diff --git a/betty/pffs.h b/betty/pffs.h index 92b4821..faf0d38 100644 --- a/betty/pffs.h +++ b/betty/pffs.h @@ -10,17 +10,37 @@ #include "lpc2xxx.h" #include "types.h" +#include "functions.h" /* defines */ +#define PFFS_MAX_FILENAME_SIZE 15 // in words +#define PFFS_HEADER_SIZE 3 // in words #define PFFS_REGISTERED (1<<0) +#define PFFS_INDEX_MAGIC 0x7000 + +#define PFFS_INDEX_MAGIC_MASK 0xf000 +#define PFFS_RESERVED_MASK 0x0f00 +#define PFFS_FNLEN_MASK 0x00f0 +#define PFFS_LEN_MSB_MASK 0x000f + +/* file modes */ +#define PFFS_READ 0x01 +#define PFFS_WRITE 0x02 +#define PFFS_RDWR 0x03 + +/* pffs write / read return codes */ +#define PFFS_FILE_EXISTS 0x01 +#define PFFS_FILE_NOT_FOUND 0x02 +#define PFFS_NO_SPACE_LEFT 0x04 +#define PFFS_FILENAME_TOO_LONG 0x08 + /* type definitions */ typedef struct s_pffs { /* flash specs */ u32 base_addr; - u8 sec_num; u32 *sec_addr; /* flash write, read and sector erase function pointers */ int (*fw)(u32 addr,u16 *buf,int len); @@ -28,13 +48,26 @@ typedef struct s_pffs { int (*fe)(u32 addr); /* pffs internal variables */ u8 state; - u8 sec_num_data_min; - u8 sec_num_data_max; - u8 sec_num_index[2]; - u32 data_ptr; - u32 index_ptr; + 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 } t_pffs; +typedef struct s_pffs_fd { + u32 daddr; + u32 iaddr; + char file[PFFS_MAX_FILENAME_SIZE+PFFS_MAX_FILENAME_SIZE]; + u8 fn_size; + u8 mode; + t_pffs *pffs; +} 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); #endif