MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/BiSSCMasterLogic.hh

94 lines
3.4 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.

/*
* BiSSCMasterLogic.hh
*
* Created on: 7 сент. 2021 г.
* Author: sozonov
*/
#ifndef UMLIBRARY_DRIVER_BISSCMASTERLOGIC_HH_
#define UMLIBRARY_DRIVER_BISSCMASTERLOGIC_HH_
#include <stdint.h>
#include <memory_resource>
#include "../systemic/IProcess.hh"
#include "../peripheral/IMemoryAccess.hh"
#include "../peripheral/ISerialPort.hh"
#include "../communication/format/BinaryDataPublisher.hh"
namespace driver {
enum CrcPolinom : uint16_t{
crc6_BiSS_C,
};
class BiSSCMasterLogic : public communication::ISubscriberRegistrator, public systemic::IProcess {
public:
explicit BiSSCMasterLogic ( peripheral::ISerialPort *_serial_port, uint16_t _crc_polinom, std::pmr::memory_resource * memory_resource );
//todo: необходимо изменить, после релизации метода CRC во время инициализации (tasks: UFC-677, UFC-680)
typedef CrcPolinom CrcType;
// communication::ISubscriberRegistrator override methods
virtual void addSubscriber( std::size_t bit_address, std::size_t bit_len, communication::IBinaryDataSubscriber * subscriber ) override ;
//!Основной фоновый метод, отвечающий за прием и чтение и разбор фрейма данных.
void process();
/*!Метод разбора сообщения на составляющие: флаги предепреждения и ошибки, проверка контрольной суммы, а так-же "полезные" данные из фрейма.
*
* @param data - указатель на данные, которые в процессе работы разбирутся на составляющие, в указателе останется только "чистая информация", без crc и fW, fE
* @return флаг проверки контрольной суммы (1/0 - успех/неудача)
*/
bool parce( uint16_t *data);
private:
communication::format::BinaryDataPublisher binary_sybscriber; //!Абонент.
peripheral::ISerialPort *serial_port; //!Интерфейс последовательного порта, по которому будет производится получение пакета данных.
CrcType crc_type; //!<Тип полинома для подсчёта контрольной суммы.
uint16_t data_lenght; //!<Длина данных в битах, получаемых по протоколу BiSS-C.
bool f_reading_data; //!<Флаг, указывающий на то, в какой буфер вести чтение данных.
uint16_t crc_size; //!<Размер контрольной суммы, содержащейся в посылке.
uint16_t err_warn_size; //!<Количество бит, отвечающие за статсы ошибок и предупреждений.
const uint16_t size_of_array = ( data_lenght + ( ( data_lenght ) % CHAR_BIT ) ) / CHAR_BIT ;
uint16_t tmp_data_to_transm[32];
uint16_t data_first[32]; //!<Буфер данных, которых необходимо записать в память.
bool fE; //!<Статус ошибки, пришедший в BiSS-C фрейме данных.
bool fW; //!<Статус предупреждения, пришедший в BiSS-C фрейме данных.
bool crc_error; //!<Статус ошибки проверки контрольной суммы.
bool read_complete;
bool write_complete;
bool spi_tx_result = false;
void update_size( std::size_t binary_sybscriber_BitSize );
std::size_t data_lenth_to_subscriber;
public:
const bool & get_fE() { return fE; };
const bool & get_fW() { return fW; };
const bool & get_crcError() { return crc_error; };
//!Получение значения текущего времени.
float getData() const { return ( static_cast<float>( data_first[0] ) ); }
};
} /* namespace driver */
#endif /* UMLIBRARY_DRIVER_BISSCMASTERLOGIC_HH_ */