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
|