MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/communication/bissc/BissCChannel.hh

61 lines
2.3 KiB
C++
Raw Normal View History

2024-06-07 11:12:56 +03:00
//
// Created by titov on 25.11.2021.
//
#ifndef UMLIBRARY_DEV_COMMUNICATION_BISSCCHANNEL_HH
#define UMLIBRARY_DEV_COMMUNICATION_BISSCCHANNEL_HH
#include "../../communication/format/BinaryDataPublisher.hh"
#include "../../common/Crc.hpp"
namespace communication {
namespace bissc {
//!Формат кадра данных соотвествующий каналу протокола BiSS-C.
/*!Канал имеет контрольную сумму, флаг предупреждения и флаг ошибки данных канала.\n
* Контрольная сумма считается по всем данным канала, кроме поля crc.
* Контрольная сумма лежит в младших битах.
*
* Канал данных имеет следующие характеристики:
* * Размер от 0 до 64 бит;
* * Стоп-бит в начале кадра или его отсутвие;
* * Время обработки данных от 0 мкс до таймаута шины;
* * Выравнивание данных по правому или левому краю;
* * Код полинома CRC от 0 до 16 бит;
* * Стартовое значение CRC от 0 до 16 бит.
*/
class BissCChannel : public format::BinaryDataPublisher {
bool fault;
bool warning;
mutable bool crc_error;
uint16_t (* const crc_check)(const char * data, std::size_t size);
const std::size_t fault_offset;
const std::size_t warning_offset;
const uint16_t crc_mask;
const uint64_t data_mask;
const std::size_t crc_bitsize;
public:
BissCChannel( std::pmr::memory_resource * memory_resource,
std::size_t channel_bitsize, std::size_t crc_bitsize,
uint16_t (* crc_check)(const char * data, std::size_t size),
std::size_t fault_offset = -1,
std::size_t warning_offset = -1);
virtual void read( const void * data, std::size_t size ) override;
const bool & isFault() const;
const bool & isWarning() const;
bool isCrcError() const;
};
}
}
#endif //UMLIBRARY_DEV_COMMUNICATION_BISSCCHANNEL_HH