MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/common/ICrcUnit.hpp

71 lines
2.0 KiB
C++

/*
* ICrcUnit.hpp
*
* Created on: 19 Apr 2023
* Author: malyarenko
*/
#ifndef UMLIBRARY_COMMON_ICRCUNIT_HPP_
#define UMLIBRARY_COMMON_ICRCUNIT_HPP_
#include <stdint.h>
#include <cstddef>
#include "CrcType.hpp"
namespace common {
namespace crc {
class ICrcUnit {
public:
/**
* @brief Функция расчёта CRC на блоке данных
*
* Параметры:
* - @c data - Указатель на данные
* - @c octet_size - Размер данных в 8-битных байтах (октетах)
*
* Возвращаемое значение: Расчитанный CRC
*
* @note Если размер данных превышает максимальный поддерживаемый,
* то будет обработана лишь начальная часть данных,
* размером не превышающая данный передел.
*
* @warning Порядок байтов прямой (MSB -> LSB):
* Просмотр данных производится последовательно от старшего байта к младшему
* независимо от расположения и размера адресуемого байта в модели памяти платформы.
* Пример 1: 8-битный адресуемый байт
*
* Октеты данных в памяти: [ D1 ][ D2 ][ D3 ][ D4 ]
* Порядок обработки: D1 -> D2 -> D3
*
* Пример 2: 16-битный адресуемый байт
*
* Октеты данных в памяти: [ D1 | D2 ][ D3 | D4 ]
* Порядок обработки: D1 -> D2 -> D3 -> D4
*/
typedef uint32_t (*CrcCalcualtor) ( const char * data, std::size_t octet_size );
/**
* @brief Инстанцирование обработчика расчёта CRC заданного типа
*
* @param crc_type Тип (стандарт) CRC
* @return Указатель на функцию расчёта CRC;
* @c nullptr в случае, если указанный тип CRC не поддерживается
*/
virtual CrcCalcualtor instance( CrcType crc_type ) = 0;
/**
* @brief Получение максимального размера данных для рассчёта CRC
*
* @return Максимальный размер данных в 8-битных байтах (октетах)
*/
virtual std::size_t getMaxDataSize() = 0;
};
} /* namepsace crc */
} /* namepsace common */
#endif /* UMLIBRARY_COMMON_ICRCUNIT_HPP_ */