95 lines
4.2 KiB
C++
95 lines
4.2 KiB
C++
|
|
/*
|
|||
|
|
* 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_ */
|