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