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

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