From bf9ad9cbeccb61ebb8931b30be723df9bd7b1c08 Mon Sep 17 00:00:00 2001 From: H1ghBre4k3r Date: Tue, 13 Apr 2021 01:22:12 +0200 Subject: [PATCH] Store CRC and 'not-deleted' flag in last byte of each entry --- src/ens/ens_fs.c | 19 ++++++++++++++++--- src/ens/ens_fs.h | 3 ++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/ens/ens_fs.c b/src/ens/ens_fs.c index 18cee7b..c1444f6 100644 --- a/src/ens/ens_fs.c +++ b/src/ens/ens_fs.c @@ -1,8 +1,11 @@ #include #include +#include #include "ens_fs.h" +#define SEED 42 + int ens_fs_init(ens_fs_t* fs, uint8_t id, uint64_t entry_size) { int rc = flash_area_open(id, &fs->area); if (rc) { @@ -36,9 +39,11 @@ end: int ens_fs_write(ens_fs_t* fs, uint64_t id, void* data) { - uint64_t offset = id * fs->entry_size; + // Set CRC and not-deleted-flag + uint8_t* obj = data; + obj[fs->entry_size - 1] = crc7_be(SEED, obj, fs->entry_size - 1) | 1; - // TODO lome: set CRC + uint64_t offset = id * fs->entry_size; int rc = flash_area_write(fs->area, offset, data, fs->entry_size); if(rc) { goto end; @@ -49,7 +54,15 @@ end: } int ens_fs_delete(ens_fs_t* fs, uint64_t id) { - // TODO lome: Overwrite deleted flag. + + // TODO lome: Maybe overwrite last 4 bytes? Or make it file system dependend? + // uint8_t data = 0; + // uint64_t offset = (id + 1) * fs->entry_size - 1; + + // int rc = flash_area_write(fs->area, offset, &data, 0); + // if(rc) { + // goto end; + // } return 0; } diff --git a/src/ens/ens_fs.h b/src/ens/ens_fs.h index e62801d..8b147ab 100644 --- a/src/ens/ens_fs.h +++ b/src/ens/ens_fs.h @@ -14,7 +14,8 @@ typedef struct ens_fs { */ const struct flash_area* area; /** - * Size of each individual entry. + * Size of each individual entry. The last byte will be used by + * ens_fs to store metadata about each individual entry. */ size_t entry_size; /**