-
Martin Christoph Hierholzer authoredMartin Christoph Hierholzer authored
DeviceAccessor.h 2.91 KiB
/*
* DeviceAccessor.h
*
* Created on: Jun 10, 2016
* Author: Martin Hierholzer
*/
#ifndef CHIMERATK_DEVICE_ACCESSOR_H
#define CHIMERATK_DEVICE_ACCESSOR_H
#include <mtca4u/NDRegisterAccessor.h>
#include "Accessor.h"
namespace ChimeraTK {
/** A DeviceAccessor is used to provide access to register accessors from the DeviceAccess library. It is a temporary
* adapter class which harmonises the different interfaces. @todo TODO Once the control system adapter and the
* DeviceAccess interfaces have been harmonised, this class is no longer needed! */
template< typename UserType >
class DeviceAccessor : public mtca4u::NDRegisterAccessor<UserType> {
public:
/** */
DeviceAccessor(boost::shared_ptr<mtca4u::NDRegisterAccessor<UserType>> ndRegisterAccessor, VariableDirection direction,
UpdateMode mode)
: mtca4u::NDRegisterAccessor<UserType>(ndRegisterAccessor->getName()),
impl(ndRegisterAccessor),
_direction(direction),
_mode(mode)
{
mtca4u::NDRegisterAccessor<UserType>::buffer_2D.resize( impl->getNumberOfChannels() );
for(size_t i=0; i<impl->getNumberOfChannels(); i++) {
mtca4u::NDRegisterAccessor<UserType>::buffer_2D[i].resize( impl->getNumberOfSamples() );
}
}
void doReadTransfer() override {
impl->read();
}
bool doReadTransferNonBlocking() override {
return impl->readNonBlocking();
}
void postRead() override {
mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0].swap(impl->accessChannel(0));
}
void write() override {
mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0].swap(impl->accessChannel(0));
impl->write();
mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0].swap(impl->accessChannel(0));
}
unsigned int getNInputQueueElements() const override {
return impl->getNInputQueueElements();
}
bool isSameRegister(const boost::shared_ptr<const mtca4u::TransferElement>& other) const override {
return impl->isSameRegister(other);
}
bool isReadOnly() const override {
return impl->isReadOnly();
}
bool isReadable() const override {
return impl->isReadable();
}
bool isWriteable() const override {
return impl->isWriteable();
}
std::vector<boost::shared_ptr<mtca4u::TransferElement> > getHardwareAccessingElements() override {
return impl->getHardwareAccessingElements();
}
void replaceTransferElement(boost::shared_ptr<mtca4u::TransferElement> other) override {
impl->replaceTransferElement(other);
}
protected:
boost::shared_ptr<mtca4u::NDRegisterAccessor<UserType>> impl;
VariableDirection _direction;
UpdateMode _mode;
};
} /* namespace ChimeraTK */
#endif /* CHIMERATK_DEVICE_ACCESSOR_H */