Switch to new disk write interface:the disk should now supply the write buffer.
[bertos.git] / bertos / fs / battfs_test.c
index dad64712739475d76649a4fc5f082dc7c8e6cc7a..0580495feff209f39a5b522332bec16c5e7b5bd7 100644 (file)
@@ -53,6 +53,7 @@
 FILE *fp;
 const char test_filename[]="battfs_disk.bin";
 
+static uint8_t page_buffer[PAGE_SIZE];
 
 static bool disk_open(struct BattFsSuper *d)
 {
@@ -73,11 +74,25 @@ static size_t disk_page_read(struct BattFsSuper *d, pgcnt_t page, pgaddr_t addr,
        return fread(buf, 1, size, fp);
 }
 
-static size_t disk_page_write(struct BattFsSuper *d, pgcnt_t page, pgaddr_t addr, const void *buf, size_t size)
+static size_t disk_buffer_write(struct BattFsSuper *d, pgaddr_t addr, const void *buf, size_t size)
 {
        //TRACEMSG("page:%d, addr:%d, size:%d\n", page, addr, size);
-       fseek(fp, page * d->page_size + addr, SEEK_SET);
-       return fwrite(buf, 1, size, fp);
+       ASSERT(addr + size <= d->page_size);
+       memcpy(&page_buffer[addr], buf, size);
+
+       return size;
+}
+
+static bool disk_page_load(struct BattFsSuper *d, pgcnt_t page)
+{
+       fseek(fp, page * d->page_size, SEEK_SET);
+       return fread(page_buffer, 1, d->page_size, fp) == d->page_size;
+}
+
+static bool disk_page_save(struct BattFsSuper *d, pgcnt_t page)
+{
+       fseek(fp, page * d->page_size, SEEK_SET);
+       return fwrite(page_buffer, 1, d->page_size, fp) == d->page_size;
 }
 
 static bool disk_page_erase(struct BattFsSuper *d, pgcnt_t page)
@@ -526,7 +541,9 @@ int battfs_testRun(void)
 
        disk.open = disk_open;
        disk.read = disk_page_read;
-       disk.write = disk_page_write;
+       disk.load = disk_page_load;
+       disk.bufferWrite = disk_buffer_write;
+       disk.save = disk_page_save;
        disk.erase = disk_page_erase;
        disk.close = disk_close;
        test1(&disk);