X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fdataflash.c;h=8c29d168959d35ff82a536ffc7d62c052581aa65;hb=3c9f76acbd25f6f9d656736cf7b376ef8b4869c1;hp=69b4bdf06c3b64ddc674509cb89e429780920ba1;hpb=d79a3f750f985e4e316758018d0ed3bf56d9c1b9;p=bertos.git diff --git a/bertos/drv/dataflash.c b/bertos/drv/dataflash.c index 69b4bdf0..8c29d168 100644 --- a/bertos/drv/dataflash.c +++ b/bertos/drv/dataflash.c @@ -31,7 +31,6 @@ * * \brief Function library for dataflash AT45DB family (implementation). * - * \version $Id: dataflash.c 21658 2008-06-05 16:42:54Z asterix $ * \author Daniele Basile * \author Francesco Sacchi */ @@ -52,7 +51,7 @@ #include -#include +#include #include /* cpu_relax() */ @@ -277,6 +276,8 @@ static void dataflash_loadPage(DataFlash *fd, dataflash_page_t page_addr) dataflash_cmd(fd, page_addr, 0x00, DFO_MOV_MEM_TO_BUFF1); } +/* Battfs disk interface section */ +#if 0 static size_t dataflash_disk_page_read(struct BattFsSuper *d, pgcnt_t page, pgaddr_t addr, void *buf, size_t len) { DataFlash *fd = DATAFLASH_CAST((KFile *)d->disk_ctx); @@ -295,7 +296,7 @@ static size_t dataflash_disk_buffer_write(struct BattFsSuper *d, pgaddr_t addr, { DataFlash *fd = DATAFLASH_CAST((KFile *)d->disk_ctx); dataflash_writeBlock(fd, addr, buf, len); - return true; + return len; } static size_t dataflash_disk_buffer_read(struct BattFsSuper *d, pgaddr_t addr, void *buf, size_t len) @@ -336,6 +337,36 @@ static bool dataflash_disk_page_erase(struct BattFsSuper *d, pgcnt_t page) return true; } +static int dataflash_close(struct KFile *_fd); + +static bool dataflash_disk_close(struct BattFsSuper *d) +{ + DataFlash *fd = DATAFLASH_CAST((KFile *)d->disk_ctx); + return dataflash_close(&fd->fd) == 0; +} + +bool dataflash_diskInit(struct BattFsSuper *d, DataFlash *fd, pgcnt_t *page_array) +{ + ASSERT(d); + ASSERT(fd); + d->read = dataflash_disk_page_read; + d->load = dataflash_disk_page_load; + d->bufferWrite = dataflash_disk_buffer_write; + d->bufferRead = dataflash_disk_buffer_read; + d->save = dataflash_disk_page_save; + d->erase = dataflash_disk_page_erase; + d->close = dataflash_disk_close; + d->disk_ctx = fd; + d->page_size = mem_info[fd->dev].page_size; + d->page_count = mem_info[fd->dev].page_cnt; + ASSERT(page_array); + d->page_array = page_array; + return d->page_array && fd; +} +#endif + +/* Kfile interface section */ + /** * Flush select page (stored in buffer) in data flash main memory page. */ @@ -353,7 +384,6 @@ static int dataflash_flush(KFile *_fd) return 0; } -/* Kfile interface section */ /** * Close file \a fd.