ChimeraTK-DeviceAccess 03.25.00
Loading...
Searching...
No Matches
SubdeviceRegisterAccessor.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
6#include "SubdeviceBackend.h"
7
8#include <algorithm>
9
10namespace ChimeraTK {
11
12 /********************************************************************************************************************/
13
15 public:
16 SubdeviceRegisterAccessor(boost::shared_ptr<SubdeviceBackend> backend, const std::string& registerPathName,
17 boost::shared_ptr<NDRegisterAccessor<int32_t>> accAddress,
18 boost::shared_ptr<NDRegisterAccessor<int32_t>> accDataArea,
19 boost::shared_ptr<NDRegisterAccessor<int32_t>> accStatus, size_t byteOffset, size_t numberOfWords);
20
21 void doReadTransferSynchronously() override;
22
23 bool doWriteTransfer(ChimeraTK::VersionNumber versionNumber) override;
24
25 void doPreRead(TransferType type) override;
26
27 void doPostRead(TransferType type, bool hasNewData) override;
28
29 void doPreWrite(TransferType type, VersionNumber) override;
30
31 void doPostWrite(TransferType type, VersionNumber) override;
32
33 bool mayReplaceOther(const boost::shared_ptr<TransferElement const>&) const override;
34
35 bool isReadOnly() const override;
36
37 bool isReadable() const override;
38
39 bool isWriteable() const override;
40
41 protected:
43 boost::shared_ptr<SubdeviceBackend> _backend;
44
46 boost::shared_ptr<NDRegisterAccessor<int32_t>> _accAddress; // address register, if present
47 boost::shared_ptr<NDRegisterAccessor<int32_t>> _accDataArea; // data or area register
48 boost::shared_ptr<NDRegisterAccessor<int32_t>> _accStatus; // status register, if present
49
52
54 std::vector<int32_t> _buffer;
55
56 std::vector<boost::shared_ptr<TransferElement>> getHardwareAccessingElements() override;
57
58 std::list<boost::shared_ptr<TransferElement>> getInternalElements() override;
59
60 void replaceTransferElement(boost::shared_ptr<TransferElement> newElement) override;
61 };
62
63} // namespace ChimeraTK
N-dimensional register accessor.
boost::shared_ptr< NDRegisterAccessor< int32_t > > _accDataArea
std::vector< int32_t > _buffer
internal buffer
bool isReadOnly() const override
Check if transfer element is read only, i.e.
void doReadTransferSynchronously() override
Implementation version of readTransfer() for synchronous reads.
size_t _startAddress
start address and length
void replaceTransferElement(boost::shared_ptr< TransferElement > newElement) override
Search for all underlying TransferElements which are considered identical (see sameRegister()) with t...
void doPostRead(TransferType type, bool hasNewData) override
Backend specific implementation of postRead().
std::list< boost::shared_ptr< TransferElement > > getInternalElements() override
Obtain the full list of TransferElements internally used by this TransferElement.
bool isWriteable() const override
Check if transfer element is writeable.
boost::shared_ptr< SubdeviceBackend > _backend
Pointer to the backend.
boost::shared_ptr< NDRegisterAccessor< int32_t > > _accAddress
Pointers to the three accessors.
bool isReadable() const override
Check if transfer element is readable.
bool doWriteTransfer(ChimeraTK::VersionNumber versionNumber) override
Implementation version of writeTransfer().
void doPreRead(TransferType type) override
Backend specific implementation of preRead().
std::vector< boost::shared_ptr< TransferElement > > getHardwareAccessingElements() override
Obtain the underlying TransferElements with actual hardware access.
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...
void doPreWrite(TransferType type, VersionNumber) override
Backend specific implementation of preWrite().
void doPostWrite(TransferType type, VersionNumber) override
Backend specific implementation of postWrite().
boost::shared_ptr< NDRegisterAccessor< int32_t > > _accStatus
Class for generating and holding version numbers without exposing a numeric representation.
TransferType
Used to indicate the applicable operation on a Transferelement.