X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Ffs%2Fbattfs.h;h=d3088847a4a3b3b26c7bcdbae6beee67e0632e1f;hb=661b0df2a780f14694463915ae6103e58a69cd12;hp=ee104db85ed6dbb8dc019b1a5a404721d27fb4cd;hpb=54cdb63007e4a3dac8cd50ecdb9e601e0302e62b;p=bertos.git diff --git a/bertos/fs/battfs.h b/bertos/fs/battfs.h index ee104db8..d3088847 100644 --- a/bertos/fs/battfs.h +++ b/bertos/fs/battfs.h @@ -124,13 +124,41 @@ typedef bool (*disk_open_t) (struct BattFsSuper *d); */ typedef size_t (*disk_page_read_t) (struct BattFsSuper *d, pgcnt_t page, pgaddr_t addr, void *buf, size_t); + /** - * Type interface for disk page write function. - * \a page is the page address, \a addr the address inside the page, + * Type interface for disk page load function. + * The disk should supply a buffer used for loading/saving pages. + * This has to be done by the disk driver because it knows memory details + * (e.g. some memories can have the buffer inside the memory itself). + * \a page is the page to be loaded from the disk in the buffer. + * \return true if ok, false on errors. + */ +typedef bool (*disk_page_load_t) (struct BattFsSuper *d, pgcnt_t page); + +/** + * Type interface for disk pagebuffer write function. + * \a addr is the address inside the current loaded page, * \a size the lenght to be written. * \return the number of bytes written. */ -typedef size_t (*disk_page_write_t) (struct BattFsSuper *d, pgcnt_t page, pgaddr_t addr, const void *buf, size_t); +typedef size_t (*disk_buffer_write_t) (struct BattFsSuper *d, pgaddr_t addr, const void *buf, size_t); + +/** + * Type interface for disk pagebuffer read function. + * \a addr is the address inside the current loaded page, + * \a size the lenght to be read. + * \return the number of bytes read. + */ +typedef size_t (*disk_buffer_read_t) (struct BattFsSuper *d, pgaddr_t addr, void *buf, size_t); + +/** + * Type interface for disk page save function. + * The disk should supply a buffer used for loading/saving pages. + * For details \see disk_page_load_t. + * \a page is the page where the buffer will be written. + * \return true if ok, false on errors. + */ +typedef bool (*disk_page_save_t) (struct BattFsSuper *d, pgcnt_t page); /** * Type interface for disk page erase function. @@ -157,7 +185,10 @@ typedef struct BattFsSuper { disk_open_t open; ///< Disk init. disk_page_read_t read; ///< Page read. - disk_page_write_t write; ///< Page write. + disk_page_load_t load; ///< Page load. + disk_buffer_write_t bufferWrite; ///< Buffer write. + disk_buffer_read_t bufferRead; ///< Buffer read. + disk_page_save_t save; ///< Page save. disk_page_erase_t erase; ///< Page erase. disk_close_t close; ///< Disk deinit. @@ -172,6 +203,8 @@ typedef struct BattFsSuper * the entire disk in memory. */ pgcnt_t *page_array; + pgcnt_t curr_page; ///< Current page loaded in disk buffer. + bool cache_dirty; ///< True if current cache is dirty (nneds to be flushed). /** * Lowest address, in page array, for free pages. @@ -210,6 +243,7 @@ typedef struct BattFs BattFsSuper *disk; ///< Disk context filemode_t mode; ///< File open mode pgcnt_t *start; ///< Pointer to page_array file start position. + pgcnt_t max_off; ///< Max page offset allocated for the file. } BattFs; /**