61 lines
2.3 KiB
C++
61 lines
2.3 KiB
C++
//
|
||
// 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
|