71 lines
2.7 KiB
C++
71 lines
2.7 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_ */
|