DoocsIfff.h 2.07 KiB
#pragma once
#include <D_xy.h>
#include <boost/noncopyable.hpp>
#include <ChimeraTK/NDRegisterAccessor.h>
#include <ChimeraTK/DataConsistencyGroup.h>
class EqFct;
namespace ChimeraTK {
class DoocsUpdater;
class DoocsIfff : public D_ifff, public boost::noncopyable {
public:
// Constructor with history enabled
DoocsIfff(EqFct* eqFct, std::string const& doocsPropertyName,
boost::shared_ptr<NDRegisterAccessor<int>> const& i1Value,
boost::shared_ptr<NDRegisterAccessor<float>> const& f1Value,
boost::shared_ptr<NDRegisterAccessor<float>> const& f2Value,
boost::shared_ptr<NDRegisterAccessor<float>> const& f3Value, DoocsUpdater& updater);
// Constructor without history
DoocsIfff(std::string const& doocsPropertyName, EqFct* eqFct,
boost::shared_ptr<NDRegisterAccessor<int>> const& i1Value,
boost::shared_ptr<NDRegisterAccessor<float>> const& f1Value,
boost::shared_ptr<NDRegisterAccessor<float>> const& f2Value,
boost::shared_ptr<NDRegisterAccessor<float>> const& f3Value, DoocsUpdater& updater);
void set(EqAdr* eqAdr, EqData* data1, EqData* data2, EqFct* eqFct) override;
void auto_init(void) override;
void setMacroPulseNumberSource(boost::shared_ptr<ChimeraTK::NDRegisterAccessor<int64_t>> macroPulseNumberSource);
void publishZeroMQ() { _publishZMQ = true; }
DataConsistencyGroup _consistencyGroup;
protected:
void updateAppToDoocs(TransferElementID& elementId);
void sendToApplication();
void registerVariable(const ChimeraTK::TransferElementAbstractor& var);
void registerIfffSources();
void checkSourceConsistency();
boost::shared_ptr<NDRegisterAccessor<int>> _i1Value;
boost::shared_ptr<NDRegisterAccessor<float>> _f1Value;
boost::shared_ptr<NDRegisterAccessor<float>> _f2Value;
boost::shared_ptr<NDRegisterAccessor<float>> _f3Value;
DoocsUpdater& _updater;
EqFct* _eqFct;
bool _publishZMQ{false};
bool isWriteable;
boost::shared_ptr<ChimeraTK::NDRegisterAccessor<int64_t>> _macroPulseNumberSource;
};
} // namespace ChimeraTK