blob: ebe3b2f2ec2680b28bbc515a7d62851ec84960ff [file] [log] [blame]
/*
* Copyright (c) 2021 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef RETAINED_H_
#define RETAINED_H_
#include <inttypes.h>
/* Example of validatable retained data. */
struct retained_data {
/* The uptime from the current session the last time the
* retained data was updated.
*/
uint64_t uptime_latest;
/* Cumulative uptime from all previous sessions up through
* uptime_latest of this session.
*/
uint64_t uptime_sum;
/* Number of times the application has started. */
uint32_t boots;
/* Number of times the application has gone into system off. */
uint32_t off_count;
/* CRC used to validate the retained data. This must be
* stored little-endian, and covers everything up to but not
* including this field.
*/
uint32_t crc;
};
/* For simplicity in the sample just allow anybody to see and
* manipulate the retained state.
*/
extern struct retained_data retained;
/* Check whether the retained data is valid, and if not reset it.
*
* @return true if and only if the data was valid and reflects state
* from previous sessions.
*/
bool retained_validate(void);
/* Update any generic retained state and recalculate its checksum so
* subsequent boots can verify the retained state.
*/
void retained_update(void);
#endif /* RETAINED_H_ */