/** ************************************************************************** * @file set_to_mem.h * @brief Заголовочный файл для записи в память настроек. ************************************************************************** * @defgroup SETMEM_TOOLS Settings to Memory Tools * @brief Модуль для записи/считывания настроек в память ************************************************************************** @details Есть следующие настройки: - @ref SETTINGS_USE_SETTINGS_FROM_BUFFER : выкидывать в память данные по указателю на разные настройки - Для работы надо объявить в структуре данные которые будут записываться (@ref SettingsInMemTypeDef) и указатели на эти данные (@ref SettingsSourceTypeDef) - Добавить @ref CompareSettings на каждый массив настроек, для отслеживания изменений. При отличии - выставляется флаг для записи настроек в память - Добавить @ref WriteSettingToBuffer и @ref ReadSettingFromBuffer для синхронизации каждого элемента структуры буфера и реальных настроек. (_CompareSettings`, WriteSettingToBuffer` и ReadSettingFromBuffer` это дефайны которые принимают название элемента структуры и уже вызывают нужные функции_)   - @ref SETTINGS_USE_SETTINGS_FROM_POINTER : заполнять необходимыми настройками буфер и полностью выкидывать его в память - Для работы надо объявить в структуре данные которые будут записываться (@ref SettingsInMemTypeDef) - Инициализировать каждый элемент структуры функцией @ref InitSettingsToMem - Добавить @ref WriteSettingsArrayToMem и @ref ReadSettingsArrayFromMem для записи/считывания каждого элемента структуры в память - Выставлять флаг @ref f.settings_need_to_update для записи настроек в память, когда необходимо это сделать (само по себе оно не может определить когда надо записать, т.к. нет буфера для отслеживания изменений) - @ref SETTINGS_MEMORY_PROTECT_ENABLE : включение защиты на память. Перед записью защита снимается, и после записи ставится обратно. * @{ *************************************************************************/ #ifndef _SET_TO_MEM_H_ #define _SET_TO_MEM_H_ #include "mylibs_include.h" #include "params_flash.h" #include "memspi.h" /** * @brief Структура для записи одного массива настроек по указателю. * @details Используется при @ref SETTINGS_USE_SETTINGS_FROM_POINTER */ typedef struct { uint32_t adr; ///< Адрес в памяти uint32_t length; ///< Размер блока uint8_t *real_ptr; ///< Указатель на реальные рабочие данные uint8_t *mem_ptr; ///< Указатель на данные, которые пишутся в память }SettingArrayTypeDef; #define MEMORY_ERROR_EMPTY ((uint32_t)(1<<0)) ///< Бит ошибки - память пустая #define MEMORY_ERROR_WRITE ((uint32_t)(1<<1)) ///< Бит ошибки - запись #define MEMORY_ERROR_READ ((uint32_t)(1<<2)) ///< Бит ошибки - чтение typedef struct { unsigned settings_need_to_update:1; unsigned settings_is_updated:1; }SettingsFlagsTypeDef; /** * @brief Структура для хранения настроек устройства. * @details Содержит указатели на настройки и другие параметры для их обработки. */ typedef struct { MEMSPI_HandleTypeDef *hmemspi; ///< Указатель на хендл для работы с памятью #ifdef SETTINGS_USE_WEAR_LEVELING_FLASH ParamsFlashHandle_t flash_handle; ///< Хендл для равномерного использования флеш памяти #endif #ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER uint8_t *buffer; #endif SettingArrayTypeDef setarr[32]; ///< Структура настроек для хранения в памяти uint8_t setarr_count; uint32_t start_adr; ///< Начальный адрес в памяти для записи настроек uint32_t settings_size; ///< Размер всего массива настроек SettingsFlagsTypeDef f; ///< Флаг для обновления настроек в памяти uint32_t settings_error; ///< Флаг ошибки настроек }SettingsTypeDef; extern SettingsTypeDef Settings; /** * @defgroup SETMEM_GENERAL_FUNC General functions for writing/reading settings * @ingroup SETMEM_TOOLS * @brief Общие функции для работы с настройками в памяти. * @{ */ /* Инициализаия обзего хендла для работы с настройками */ HAL_StatusTypeDef Settings_Init(SettingsTypeDef *settings, SPI_HandleTypeDef *hspi, uint32_t adr); /* Добавление массива настроек для хранения в памяти */ HAL_StatusTypeDef Settings_AddArray(SettingsTypeDef *settings, uint8_t *pRealArray, uint32_t *startadr, uint32_t sizeofarray); /* Запись настроек в память */ void Settings_WriteSettings(SettingsTypeDef *settings); /* Чтение настроек из памяти */ void Settings_ReadSettings(SettingsTypeDef *settings); /* Проверить настройки на валидность. */ void Settings_CheckSettings(SettingsTypeDef *settings); /** SETMEM_GENERAL_FUNC * @} */ /** * @defgroup SETMEM_SUPPORT_FUNC Support functions for writing/reading * @ingroup SETMEM_TOOLS * @brief Служебные функции для работы с настройками в памяти * @{ */ /* Запись настроек в память в зависимости от конфигурации */ void WriteSettingsToMem(SettingsTypeDef *settings); /* Чтение настроек из памяти в зависимости от конфигурации */ void ReadSettingsFromMem(SettingsTypeDef *settings); /* Записывает массив настроек через указатель в память */ void WriteSettingsArrayToMem(SettingsTypeDef *settings, SettingArrayTypeDef *settingarr); /* итает массив настроек через указатель в память */ void ReadSettingsArrayFromMem(SettingsTypeDef *settings, SettingArrayTypeDef *settingarr); /** SETMEM_SUPPORT_FUNC * @} */ /** SETMEM_TOOLS * @} */ #endif //_SET_TO_MEM_H_