![]() |
ChimeraTK-DeviceAccess 03.20.00
|
The shared dummy device opens a mapping file defining the registers and implements them in shared memory instead of connecting to the real device. More...
#include <SharedDummyBackend.h>
Public Member Functions | |
SharedDummyBackend (const std::string &instanceId, const std::string &mapFileName, const std::string &dataConsistencyKeyDescriptor="") | |
~SharedDummyBackend () override | |
void | open () override |
Open the device. | |
void | closeImpl () override |
All backends derrived from NumericAddressedBackend must implement closeImpl() instead of close. | |
void | read (uint64_t bar, uint64_t address, int32_t *data, size_t sizeInBytes) override |
Read function to be implemented by backends. | |
void | write (uint64_t bar, uint64_t address, int32_t const *data, size_t sizeInBytes) override |
Write function to be implemented by backends. | |
std::string | readDeviceInfo () override |
Return a device information string containing hardware details like the firmware version number or the slot number used by the board. | |
VersionNumber | triggerInterrupt (uint32_t interruptNumber) override |
Simulate the arrival of an interrupt. | |
void | read (uint8_t bar, uint32_t address, int32_t *data, size_t sizeInBytes) final |
You cannot override the read version with 32 bit address any more. | |
void | write (uint8_t bar, uint32_t address, int32_t const *data, size_t sizeInBytes) final |
You cannot override the write version with 32 bit address any more. | |
![]() | |
DummyBackendBase (std::string const &mapFileName, const std::string &dataConsistencyKeyDescriptor="") | |
~DummyBackendBase () override=default | |
size_t | minimumTransferAlignment (uint64_t bar) const override |
Determines the supported minimum alignment for any read/write requests. | |
DEFINE_VIRTUAL_FUNCTION_OVERRIDE_VTABLE (NumericAddressedBackend, getRegisterAccessor_impl, boost::shared_ptr< NDRegisterAccessor< T > >(const RegisterPath &, size_t, size_t, AccessModeFlags)) | |
bool | barIndexValid (uint64_t bar) override |
All bars are valid in dummies. | |
std::map< uint64_t, size_t > | getBarSizesInBytesFromRegisterMapping () const |
Determines the size of each bar because the DummyBackends allocate memory per bar. | |
template<typename UserType > | |
boost::shared_ptr< NDRegisterAccessor< UserType > > | getRegisterAccessor_impl (const RegisterPath ®isterPathName, size_t numberOfWords, size_t wordOffsetInRegister, AccessModeFlags flags) |
Specific override which allows to create "DUMMY_INTEERRUPT_X" accessors. | |
![]() | |
NumericAddressedBackend (const std::string &mapFileName="", std::unique_ptr< NumericAddressedRegisterCatalogue > registerMapPointer=std::make_unique< NumericAddressedRegisterCatalogue >(), const std::string &dataConsistencyKeyDescriptor="") | |
~NumericAddressedBackend () override=default | |
virtual bool | canMergeRequests () const |
Determines whether the backend supports merging of requests (read or write) | |
RegisterCatalogue | getRegisterCatalogue () const override |
Return the register catalogue with detailed information on all registers. | |
MetadataCatalogue | getMetadataCatalogue () const override |
Return the device metadata catalogue. | |
NumericAddressedRegisterInfo | getRegisterInfo (const RegisterPath ®isterPathName) |
getRegisterInfo returns a NumericAddressedRegisterInfo object for the given register. | |
void | activateAsyncRead () noexcept override |
Activate asyncronous read for all transfer elements where AccessMode::wait_for_new_data is set. | |
void | close () final |
Deactivates all asynchronous accessors and calls closeImpl(). | |
virtual std::future< void > | activateSubscription (uint32_t interruptNumber, boost::shared_ptr< async::DomainImpl< std::nullptr_t > > asyncDomain) |
Activate/create the subscription for a given interrupt (for instance by starting the according interrupt handling thread). | |
void | setExceptionImpl () noexcept override |
Turn off the internal variable which remembers that async is active. | |
template<typename BackendSpecificUserType > | |
std::pair< BackendSpecificUserType, VersionNumber > | getAsyncDomainInitialValue (size_t asyncDomainId) |
Get the initial value for a certain async::Domain. | |
![]() | |
bool | isOpen () override |
Return whether a device has been opened or not. | |
bool | isConnected () final |
Deprecated since 2022-03-03. | |
void | checkActiveException () final |
Function to be called by backends when needing to check for an active exception. | |
void | setException (const std::string &message) noexcept final |
Set the backend into an exception state. | |
bool | isFunctional () const noexcept final |
Return whether a device is working as intended, usually this means it is opened and does not have any errors. | |
std::string | getActiveExceptionMessage () noexcept |
std::set< DeviceBackend::BackendID > | getInvolvedBackendIDs () override |
Get the backend IDs of all involved backends. | |
![]() | |
virtual | ~DeviceBackend ()=default |
Every virtual class needs a virtual desctructor. | |
template<typename UserType > | |
boost::shared_ptr< NDRegisterAccessor< UserType > > | getRegisterAccessor (const RegisterPath ®isterPathName, size_t numberOfWords, size_t wordOffsetInRegister, AccessModeFlags flags) |
Get a NDRegisterAccessor object from the register name. | |
DEFINE_VIRTUAL_FUNCTION_TEMPLATE_VTABLE (getRegisterAccessor_impl, boost::shared_ptr< NDRegisterAccessor< T > >(const RegisterPath &, size_t, size_t, AccessModeFlags)) | |
BackendID | getBackendID () |
Get a unique ID for this backend instance. | |
Static Public Member Functions | |
static boost::shared_ptr< DeviceBackend > | createInstance (std::string address, std::map< std::string, std::string > parameters) |
![]() | |
static void | checkSizeIsMultipleOfWordSize (size_t sizeInBytes) |
template<typename T , typename... Args> | |
static boost::shared_ptr< DeviceBackend > | returnInstance (const std::string &instanceId, Args &&... arguments) |
Backward compatibility: Leftover from the time when the dummy managed it's own map to return the same instance multiple times, and still allow to use the same map file with different instances. | |
Additional Inherited Members | |
![]() | |
using | BackendID = std::uintptr_t |
![]() | |
std::atomic< bool > | throwExceptionOpen {false} |
std::atomic< bool > | throwExceptionRead {false} |
std::atomic< bool > | throwExceptionWrite {false} |
std::atomic< size_t > | throwExceptionCounter {0} |
![]() | |
void | setOpenedAndClearException () noexcept |
Backends should call this function at the end of a (successful) open() call. | |
![]() | |
std::unique_ptr< NumericAddressedRegisterCatalogue > | _registerMapPointer |
NumericAddressedRegisterCatalogue & | _registerMap |
MetadataCatalogue | _metadataCatalogue |
metadata catalogue | |
std::mutex | _unalignedAccess |
mutex for protecting unaligned access | |
friend | NumericAddressedLowLevelTransferElement |
friend | TriggeredPollDistributor |
![]() | |
std::atomic< bool > | _opened {false} |
flag if backend is opened | |
async::DomainsContainer | _asyncDomainsContainer |
Container for async::Domains to support wait_for_new_data. | |
The shared dummy device opens a mapping file defining the registers and implements them in shared memory instead of connecting to the real device.
Thus, it provides access to the registers from several applications. The registers an application accesses can be stimulated or monitored by another process, e.g. for development and testing.
Accessing applications are required to the same mapping file (matching absolute path) and to be run by the same user.
Definition at line 47 of file SharedDummyBackend.h.
ChimeraTK::SharedDummyBackend::SharedDummyBackend | ( | const std::string & | instanceId, |
const std::string & | mapFileName, | ||
const std::string & | dataConsistencyKeyDescriptor = "" |
||
) |
Definition at line 22 of file SharedDummyBackend.cc.
|
override |
Definition at line 45 of file SharedDummyBackend.cc.
|
overridevirtual |
All backends derrived from NumericAddressedBackend must implement closeImpl() instead of close.
Like this it is assured that the deactivation of the asynchronous accessors is always executed.
Reimplemented from ChimeraTK::NumericAddressedBackend.
Definition at line 78 of file SharedDummyBackend.cc.
|
static |
Definition at line 131 of file SharedDummyBackend.cc.
|
overridevirtual |
Open the device.
Implements ChimeraTK::DeviceBackend.
Definition at line 74 of file SharedDummyBackend.cc.
|
overridevirtual |
Read function to be implemented by backends.
TODO: Add documentation!
Reimplemented from ChimeraTK::NumericAddressedBackend.
Definition at line 82 of file SharedDummyBackend.cc.
|
inlinefinalvirtual |
You cannot override the read version with 32 bit address any more.
Please change your implementation to the 64 bit signature.
Reimplemented from ChimeraTK::DummyBackendBase.
Definition at line 55 of file DummyBackendBase.h.
|
overridevirtual |
Return a device information string containing hardware details like the firmware version number or the slot number used by the board.
The format and contained information of this string is completely backend implementation dependent, so the string may only be printed to the user as an informational output. Do not try to parse this string or extract information from it programmatically.
Implements ChimeraTK::DeviceBackend.
Definition at line 111 of file SharedDummyBackend.cc.
|
overridevirtual |
Simulate the arrival of an interrupt.
For all push-type accessors which have been created for that particular interrupt number, the data will be read out through a synchronous accessor and pushed into the data transport queues of the asynchronous accessors, so they can be received by the application.
Implements ChimeraTK::DummyBackendBase.
Definition at line 157 of file SharedDummyBackend.cc.
|
overridevirtual |
Write function to be implemented by backends.
TODO: Add documentation!
Reimplemented from ChimeraTK::NumericAddressedBackend.
Definition at line 96 of file SharedDummyBackend.cc.
|
inlinefinalvirtual |
You cannot override the write version with 32 bit address any more.
Please change your implementation to the 64 bit signature.
Reimplemented from ChimeraTK::DummyBackendBase.
Definition at line 63 of file DummyBackendBase.h.