/* NVS: non volatile storage in flash * * Copyright (c) 2018 Laczen * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __NVS_PRIV_H_ #define __NVS_PRIV_H_ #ifdef __cplusplus extern "C" { #endif #define SYS_LOG_DOMAIN "fs/nvs" #define SYS_LOG_LEVEL CONFIG_NVS_LOG_LEVEL #include #define NVS_ID_GT(a, b) (((a) > (b)) ? ((((a)-(b)) > 0x7FFF) ? (0):(1)) : \ ((((b)-(a)) > 0x7FFF) ? (1):(0))) /* * Special id values */ #define NVS_ID_EMPTY 0xFFFF #define NVS_ID_SECTOR_END 0xFFFE /* * Status return values */ #define NVS_STATUS_NOSPACE 1 #define NVS_MOVE_BLOCK_SIZE 8 struct nvs_entry { off_t data_addr; /* address in flash to write data */ u16_t len; /* entry length in bytes */ u16_t id; /* entry id, is 0xFFFFF when empty, set to 0xFFFE * for the last entry in a sector */ }; struct _nvs_sector_hdr { u32_t fd_magic; u16_t fd_id; }; struct _nvs_data_hdr { u16_t id; u16_t len; }; struct _nvs_data_slt { u16_t crc16; }; int nvs_append(struct nvs_fs *fs, struct nvs_entry *entry); int nvs_append_close(struct nvs_fs *fs, const struct nvs_entry *entry); void nvs_set_start_entry(struct nvs_fs *fs, struct nvs_entry *entry); int nvs_walk_entry(struct nvs_fs *fs, struct nvs_entry *entry); int nvs_get_first_entry(struct nvs_fs *fs, struct nvs_entry *entry); int nvs_get_last_entry(struct nvs_fs *fs, struct nvs_entry *entry); int nvs_check_crc(struct nvs_fs *fs, struct nvs_entry *entry); int nvs_rotate(struct nvs_fs *fs); int nvs_compute_crc(struct nvs_fs *fs, const struct nvs_entry *entry, u16_t *crc16); int nvs_flash_read(struct nvs_fs *fs, off_t offset, void *data, size_t len); int nvs_flash_write(struct nvs_fs *fs, off_t offset, const void *data, size_t len); /** * @} */ #ifdef __cplusplus } #endif #endif /* __NVS_PRIV_H_ */