MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/communication/bissc/BissCChannel.hh
2024-06-07 11:12:56 +03:00

61 lines
2.3 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.

//
// 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