Issue #18: Write init of safety memory

This commit is contained in:
2020-09-05 15:15:31 +02:00
parent 04008a07c0
commit c9a5a2c2ff
5 changed files with 258 additions and 0 deletions

View File

@@ -34,6 +34,8 @@
*/
#define SAFETY_MEMORY_HEADER_ADDRESS 0UL
#define SAFETY_MEMORY_CONFIG_OVERRIDE_COUNT 512
/**
* @brief Safety memory header
*/
@@ -52,4 +54,57 @@ struct safety_memory_boot_status {
uint32_t code_updated;
};
enum safety_memory_state {
SAFETY_MEMORY_INIT_FRESH = 0,
SAFETY_MEMORY_INIT_CORRUPTED = 1,
SAFETY_MEMORY_INIT_VALID_MEMORY = 2,
};
enum safety_memory_error_entry_type {
SAFETY_MEMORY_ERR_ENTRY_FLAG = 1,
SAFETY_MEMORY_ERR_ENTRY_NOP = 2,
};
struct error_memory_entry {
enum safety_memory_error_entry_type type;
uint16_t flag_num;
};
enum config_override_entry_type {
SAFETY_MEMORY_CONFIG_OVERRIDE_WEIGHT = 1,
SAFETY_MEMORY_CONFIG_OVERRIDE_PERSISTANCE = 2,
};
struct config_override {
enum config_override_entry_type type;
union {
struct {
uint16_t flag;
uint8_t weight;
} weight_override;
struct {
uint16_t flag;
uint8_t persistance;
} persistance_override;
} entry;
};
int safety_memory_init(enum safety_memory_state *found_state);
int safety_memory_get_boot_status(struct safety_memory_boot_status *status);
int safety_memory_get_error_entry_count(uint32_t *count);
int safety_memory_check(void);
int safety_memory_get_error_entry(uint32_t idx, struct error_memory_entry *entry);
int safety_memory_insert_error_entry(struct error_memory_entry *entry);
int safety_memory_insert_config_override(struct config_override *config_override);
int safety_memory_get_config_override_count(uint32_t *count);
int safety_memory_get_config_override(uint32_t idx, struct config_override *config_override);
#endif /* __SAFETY_MEMORY_H__ */

View File

@@ -53,3 +53,5 @@ int backup_ram_get_data(uint32_t addr, uint32_t *data, uint32_t count);
* @return 0 if successful
*/
int backup_ram_write_data(uint32_t addr, const uint32_t *data, uint32_t count);
uint32_t backup_ram_get_size_in_words(void);