LCOV - code coverage report
Current view: top level - zephyr/fs - nvs.h Coverage Total Hit
Test: new.info Lines: 95.0 % 20 19
Test Date: 2025-03-11 06:50:38

            Line data    Source code
       1            0 : /*  NVS: non volatile storage in flash
       2              :  *
       3              :  * Copyright (c) 2018 Laczen
       4              :  *
       5              :  * SPDX-License-Identifier: Apache-2.0
       6              :  */
       7              : #ifndef ZEPHYR_INCLUDE_FS_NVS_H_
       8              : #define ZEPHYR_INCLUDE_FS_NVS_H_
       9              : 
      10              : #include <sys/types.h>
      11              : #include <zephyr/kernel.h>
      12              : #include <zephyr/device.h>
      13              : #include <zephyr/toolchain.h>
      14              : 
      15              : #ifdef __cplusplus
      16              : extern "C" {
      17              : #endif
      18              : 
      19              : /**
      20              :  * @brief Non-volatile Storage (NVS)
      21              :  * @defgroup nvs Non-volatile Storage (NVS)
      22              :  * @since 1.12
      23              :  * @version 1.0.0
      24              :  * @ingroup file_system_storage
      25              :  * @{
      26              :  * @}
      27              :  */
      28              : 
      29              : /**
      30              :  * @brief Non-volatile Storage Data Structures
      31              :  * @defgroup nvs_data_structures Non-volatile Storage Data Structures
      32              :  * @ingroup nvs
      33              :  * @{
      34              :  */
      35              : 
      36              : /**
      37              :  * @brief Non-volatile Storage File system structure
      38              :  */
      39            1 : struct nvs_fs {
      40              :          /** File system offset in flash **/
      41            1 :         off_t offset;
      42              :         /** Allocation table entry write address.
      43              :          * Addresses are stored as uint32_t:
      44              :          * - high 2 bytes correspond to the sector
      45              :          * - low 2 bytes are the offset in the sector
      46              :          */
      47            1 :         uint32_t ate_wra;
      48              :         /** Data write address */
      49            1 :         uint32_t data_wra;
      50              :         /** File system is split into sectors, each sector must be multiple of erase-block-size */
      51            1 :         uint16_t sector_size;
      52              :         /** Number of sectors in the file system */
      53            1 :         uint16_t sector_count;
      54              :         /** Flag indicating if the file system is initialized */
      55            1 :         bool ready;
      56              :         /** Mutex */
      57            1 :         struct k_mutex nvs_lock;
      58              :         /** Flash device runtime structure */
      59            1 :         const struct device *flash_device;
      60              :         /** Flash memory parameters structure */
      61            1 :         const struct flash_parameters *flash_parameters;
      62              : #if CONFIG_NVS_LOOKUP_CACHE
      63              :         uint32_t lookup_cache[CONFIG_NVS_LOOKUP_CACHE_SIZE];
      64              : #endif
      65              : };
      66              : 
      67              : /**
      68              :  * @}
      69              :  */
      70              : 
      71              : /**
      72              :  * @brief Non-volatile Storage APIs
      73              :  * @defgroup nvs_high_level_api Non-volatile Storage APIs
      74              :  * @ingroup nvs
      75              :  * @{
      76              :  */
      77              : 
      78              : /**
      79              :  * @brief Mount an NVS file system onto the flash device specified in @p fs.
      80              :  *
      81              :  * @param fs Pointer to file system
      82              :  * @retval 0 Success
      83              :  * @retval -ERRNO errno code if error
      84              :  */
      85            1 : int nvs_mount(struct nvs_fs *fs);
      86              : 
      87              : /**
      88              :  * @brief Clear the NVS file system from flash.
      89              :  *
      90              :  * @param fs Pointer to file system
      91              :  * @retval 0 Success
      92              :  * @retval -ERRNO errno code if error
      93              :  */
      94            1 : int nvs_clear(struct nvs_fs *fs);
      95              : 
      96              : /**
      97              :  * @brief Write an entry to the file system.
      98              :  *
      99              :  * @note  When @p len parameter is equal to @p 0 then entry is effectively removed (it is
     100              :  * equivalent to calling of nvs_delete). Any calls to nvs_read for entries with data of length
     101              :  * @p 0 will return error.@n It is not possible to distinguish between deleted entry and entry
     102              :  * with data of length 0.
     103              :  *
     104              :  * @param fs Pointer to file system
     105              :  * @param id Id of the entry to be written
     106              :  * @param data Pointer to the data to be written
     107              :  * @param len Number of bytes to be written
     108              :  *
     109              :  * @return Number of bytes written. On success, it will be equal to the number of bytes requested
     110              :  * to be written. When a rewrite of the same data already stored is attempted, nothing is written
     111              :  * to flash, thus 0 is returned. On error, returns negative value of errno.h defined error codes.
     112              :  */
     113            1 : ssize_t nvs_write(struct nvs_fs *fs, uint16_t id, const void *data, size_t len);
     114              : 
     115              : /**
     116              :  * @brief Delete an entry from the file system
     117              :  *
     118              :  * @param fs Pointer to file system
     119              :  * @param id Id of the entry to be deleted
     120              :  * @retval 0 Success
     121              :  * @retval -ERRNO errno code if error
     122              :  */
     123            1 : int nvs_delete(struct nvs_fs *fs, uint16_t id);
     124              : 
     125              : /**
     126              :  * @brief Read an entry from the file system.
     127              :  *
     128              :  * @param fs Pointer to file system
     129              :  * @param id Id of the entry to be read
     130              :  * @param data Pointer to data buffer
     131              :  * @param len Number of bytes to be read
     132              :  *
     133              :  * @return Number of bytes read. On success, it will be equal to the number of bytes requested
     134              :  * to be read. When the return value is larger than the number of bytes requested to read this
     135              :  * indicates not all bytes were read, and more data is available. On error, returns negative
     136              :  * value of errno.h defined error codes.
     137              :  */
     138            1 : ssize_t nvs_read(struct nvs_fs *fs, uint16_t id, void *data, size_t len);
     139              : 
     140              : /**
     141              :  * @brief Read a history entry from the file system.
     142              :  *
     143              :  * @param fs Pointer to file system
     144              :  * @param id Id of the entry to be read
     145              :  * @param data Pointer to data buffer
     146              :  * @param len Number of bytes to be read
     147              :  * @param cnt History counter: 0: latest entry, 1: one before latest ...
     148              :  *
     149              :  * @return Number of bytes read. On success, it will be equal to the number of bytes requested
     150              :  * to be read. When the return value is larger than the number of bytes requested to read this
     151              :  * indicates not all bytes were read, and more data is available. On error, returns negative
     152              :  * value of errno.h defined error codes.
     153              :  */
     154            1 : ssize_t nvs_read_hist(struct nvs_fs *fs, uint16_t id, void *data, size_t len, uint16_t cnt);
     155              : 
     156              : /**
     157              :  * @brief Calculate the available free space in the file system.
     158              :  *
     159              :  * @param fs Pointer to file system
     160              :  *
     161              :  * @return Number of bytes free. On success, it will be equal to the number of bytes that can
     162              :  * still be written to the file system. Calculating the free space is a time consuming operation,
     163              :  * especially on spi flash. On error, returns negative value of errno.h defined error codes.
     164              :  */
     165            1 : ssize_t nvs_calc_free_space(struct nvs_fs *fs);
     166              : 
     167              : /**
     168              :  * @brief Tell how many contiguous free space remains in the currently active NVS sector.
     169              :  *
     170              :  * @param fs Pointer to the file system.
     171              :  *
     172              :  * @return Number of free bytes.
     173              :  */
     174            1 : size_t nvs_sector_max_data_size(struct nvs_fs *fs);
     175              : 
     176              : /**
     177              :  * @brief Close the currently active sector and switch to the next one.
     178              :  *
     179              :  * @note The garbage collector is called on the new sector.
     180              :  *
     181              :  * @warning This routine is made available for specific use cases.
     182              :  * It breaks the aim of the NVS to avoid any unnecessary flash erases.
     183              :  * Using this routine extensively can result in premature failure of the flash device.
     184              :  *
     185              :  * @param fs Pointer to the file system.
     186              :  *
     187              :  * @return 0 on success. On error, returns negative value of errno.h defined error codes.
     188              :  */
     189            1 : int nvs_sector_use_next(struct nvs_fs *fs);
     190              : 
     191              : /**
     192              :  * @}
     193              :  */
     194              : 
     195              : #ifdef __cplusplus
     196              : }
     197              : #endif
     198              : 
     199              : #endif /* ZEPHYR_INCLUDE_FS_NVS_H_ */
        

Generated by: LCOV version 2.0-1