/* * Copyright (c) 2023 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Public API for retention API */ #ifndef ZEPHYR_INCLUDE_RETENTION_ #define ZEPHYR_INCLUDE_RETENTION_ #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** * @brief Retention API * @defgroup retention_api Retention API * @ingroup os_services * @{ */ typedef ssize_t (*retention_size_api)(const struct device *dev); typedef int (*retention_is_valid_api)(const struct device *dev); typedef int (*retention_read_api)(const struct device *dev, off_t offset, uint8_t *buffer, size_t size); typedef int (*retention_write_api)(const struct device *dev, off_t offset, const uint8_t *buffer, size_t size); typedef int (*retention_clear_api)(const struct device *dev); struct retention_api { retention_size_api size; retention_is_valid_api is_valid; retention_read_api read; retention_write_api write; retention_clear_api clear; }; /** * @brief Returns the size of the retention area. * * @param dev Retention device to use. * * @retval Positive value indicating size in bytes on success, else negative errno * code. */ ssize_t retention_size(const struct device *dev); /** * @brief Checks if the underlying data in the retention area is valid or not. * * @param dev Retention device to use. * * @retval 1 If successful and data is valid. * @retval 0 If data is not valid. * @retval -ENOTSUP If there is no header/checksum configured for the retention area. * @retval -errno Error code code. */ int retention_is_valid(const struct device *dev); /** * @brief Reads data from the retention area. * * @param dev Retention device to use. * @param offset Offset to read data from. * @param buffer Buffer to store read data in. * @param size Size of data to read. * * @retval 0 If successful. * @retval -errno Error code code. */ int retention_read(const struct device *dev, off_t offset, uint8_t *buffer, size_t size); /** * @brief Writes data to the retention area (underlying data does not need to be * cleared prior to writing), once function returns with a success code, the * data will be classed as valid if queried using retention_is_valid(). * * @param dev Retention device to use. * @param offset Offset to write data to. * @param buffer Data to write. * @param size Size of data to be written. * * @retval 0 on success else negative errno code. */ int retention_write(const struct device *dev, off_t offset, const uint8_t *buffer, size_t size); /** * @brief Clears all data in the retention area (sets it to 0) * * @param dev Retention device to use. * * @retval 0 on success else negative errno code. */ int retention_clear(const struct device *dev); /** * @} */ #ifdef __cplusplus } #endif #endif /* ZEPHYR_INCLUDE_RETENTION_ */