ChimeraTK-DeviceAccess 03.25.00
Loading...
Searching...
No Matches
LNMBackendVariableAccessor.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
2// SPDX-License-Identifier: LGPL-3.0-or-later
3#pragma once
4
5#include "Device.h"
7#include "LNMAccessorPlugin.h"
8#include "LNMMathPlugin.h"
10#include "NDRegisterAccessor.h"
11
12#include <ChimeraTK/cppext/finally.hpp>
13
14#include <algorithm>
15
16namespace ChimeraTK {
17
18 /********************************************************************************************************************/
19
20 template<typename UserType>
22 public:
23 LNMBackendVariableAccessor(const boost::shared_ptr<DeviceBackend>& dev, const RegisterPath& registerPathName,
24 size_t numberOfWords, size_t wordOffsetInRegister, AccessModeFlags flags);
25
27
28 void doReadTransferSynchronously() override;
29
30 void doPreWrite(TransferType type, VersionNumber) override;
31
32 void doPostWrite(TransferType type, VersionNumber versionNumber) override;
33
35
36 [[nodiscard]] bool mayReplaceOther(const boost::shared_ptr<TransferElement const>&) const override;
37
38 [[nodiscard]] bool isReadOnly() const override;
39
40 [[nodiscard]] bool isReadable() const override;
41
42 [[nodiscard]] bool isWriteable() const override;
43
44 void doPreRead(TransferType) override;
45
46 void doPostRead(TransferType, bool hasNewData) override;
47
48 void interrupt() override;
49
50 protected:
53
55 boost::shared_ptr<LogicalNameMappingBackend> _dev;
56
60 // RegisterInfo _info;
63
67
70
73
75 std::list<boost::shared_ptr<LNMBackend::MathPluginFormulaHelper>> _formulaHelpers;
76
77 std::vector<boost::shared_ptr<TransferElement>> getHardwareAccessingElements() override {
78 return {boost::enable_shared_from_this<TransferElement>::shared_from_this()};
79 }
80
81 std::list<boost::shared_ptr<TransferElement>> getInternalElements() override { return {}; }
82
83 void replaceTransferElement(boost::shared_ptr<TransferElement> /*newElement*/) override {} // LCOV_EXCL_LINE
84 };
85
87
88 /********************************************************************************************************************/
89
90} // namespace ChimeraTK
#define DECLARE_TEMPLATE_FOR_CHIMERATK_USER_TYPES(TemplateClass)
Set of AccessMode flags with additional functionality for an easier handling.
Definition AccessMode.h:48
RegisterInfo structure for the LogicalNameMappingBackend.
void doPostWrite(TransferType type, VersionNumber versionNumber) override
Backend specific implementation of postWrite().
void doPreRead(TransferType) override
Backend specific implementation of preRead().
std::list< boost::shared_ptr< TransferElement > > getInternalElements() override
Obtain the full list of TransferElements internally used by this TransferElement.
void doReadTransferSynchronously() override
Implementation version of readTransfer() for synchronous reads.
bool isReadOnly() const override
Check if transfer element is read only, i.e.
size_t _wordOffsetInRegister
Word offset when reading.
void doPostRead(TransferType, bool hasNewData) override
Backend specific implementation of postRead().
std::vector< boost::shared_ptr< TransferElement > > getHardwareAccessingElements() override
Obtain the underlying TransferElements with actual hardware access.
LNMBackendRegisterInfo _info
register information.
boost::shared_ptr< LogicalNameMappingBackend > _dev
backend device
void replaceTransferElement(boost::shared_ptr< TransferElement >) override
Search for all underlying TransferElements which are considered identical (see sameRegister()) with t...
void doPreWrite(TransferType type, VersionNumber) override
Backend specific implementation of preWrite().
std::list< boost::shared_ptr< LNMBackend::MathPluginFormulaHelper > > _formulaHelpers
in case a MathPlugin formulas are using this variable, references to the FormulaHelpers
bool doWriteTransfer(ChimeraTK::VersionNumber) override
Implementation version of writeTransfer().
bool mayReplaceOther(const boost::shared_ptr< TransferElement const > &) const override
Check whether the TransferElement can be used in places where the TransferElement "other" is currentl...
bool isReadable() const override
Check if transfer element is readable.
VersionNumber currentVersion
Version number of the last transfer.
RegisterPath _registerPathName
register and module name
void interrupt() override
Return from a blocking read immediately and throw boost::thread_interrupted.
bool isWriteable() const override
Check if transfer element is writeable.
LNMVariable::ValueTable< UserType >::QueuedValue _queueValue
Intermediate buffer used when receiving value from queue, as writing to application buffer must only ...
N-dimensional register accessor.
Class to store a register path name.
Class for generating and holding version numbers without exposing a numeric representation.
TransferType
Used to indicate the applicable operation on a Transferelement.