MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/DataImageF050719.hh

95 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* DataImageF050719.hh
*
* Created on: 19 февр. 2021 г.
* Author: titov
*/
#ifndef UMLIBRARY_DRIVER_DATAIMAGEF050719_HH_
#define UMLIBRARY_DRIVER_DATAIMAGEF050719_HH_
#include <climits>
#include <cstddef>
#include <utility>
#include <stdint.h>
namespace driver { namespace bf {
//!Структура описания данных в буфере: формат от 05 07 2019.
struct DataImageF050719 {
typedef uint16_t Id;
typedef uint16_t Size;
//!Заголовок: описание данных в памяти.
struct Head {
uint16_t setting_count; //!<Количество настроек.
uint16_t buff_size; //!<Суммарный размер всех настроек.
uint32_t crc; //!<Контрольная сумма образа данных.
} * head; //!<Указатель на начало образа, заголовок.
//!Информационная структура описания параметра, образ в ПЗУ.
struct SettingInfo {
uint16_t id; //!<Идентификатор настройки
uint16_t size; //!<Размер структуры
} * info; //!<Массив структур
char * data_buff; //!<Указатель на начало данных настроек.
std::size_t max_size; //!<Максимальный размер данных в буфере.
std::size_t data_align; //!<Выравнивание данных в буфере.
Size show_setting_size( Id id ) const; //!<Получить размер буфера по id, либо 0.
char * show_setting_data_buff( Id id ) const; //!<Получить буфер данных на чтение по id, либо 0.
std::pair<char *, Size> show_setting( Id id ) const;
//!Функция изменяет структуру буфера под новые потребности.
/*!Функция изменяет структуру буфера для возможности хранения настройки с идентификатором id, размером size.
* \param[in] id Идентификатор настройки, новый или существующий.
* \param[in] size Размер настройки.
* \return Признак завершения операции: true - если место под настройку выделено, false - в случае ошибки.
*/
bool change_setting_info( Id id, Size size );
//!Функция строит образ данных исходя из предоставленного массива байт.
//!\param[in] buff Массив байт в котором храняться данные соотвествующие образу.
bool build_from_buff( char * buff, std::size_t buff_size, std::size_t buff_align );
//!Функция возвращает размер образа.
std::size_t get_image_size() const;
//!Функция сбрасывает состояние образа.
void reset();
protected:
static SettingInfo default_info;
struct Setting {
SettingInfo * info;
char * buffer;
};
Setting extract_setting( Id id ) const;
private:
bool insert_new_setting( Id id, Size size );
bool change_size( Size size, Setting setting );
//!Функция перемещает отрезок памяти на выбранное смещение.
/*!Функция перемещает отрезок памяти на выбранное смещение.
* \param[in] from Указатель на начало отрезка памяти.
* \param[in] to Указатель на конец отрезка памяти.
* \param[in] delta Смещение на которое необходимо все переместить.
*/
void move_buff( char * from, char * to, int delta );
//!Функция возвращает размер занимаемой памяти в соотвествии с выравниванием.
std::size_t aligned_size( std::size_t ) const;
};
}}
#endif /* UMLIBRARY_DRIVER_DATAIMAGEF050719_HH_ */