4#define BOOST_TEST_DYN_LINK
5#define BOOST_TEST_MODULE VoidRegisterAccessorTest
6#include <boost/test/unit_test.hpp>
7using namespace boost::unit_test_framework;
18 Device d(
"(dummy?map=goodMapFile.map)");
31 auto isReadFinished = std::async(std::launch::async, [&] { asyncAccessor.
read(); });
33 BOOST_CHECK(isReadFinished.wait_for(std::chrono::seconds(1)) == std::future_status::timeout);
35 auto dummy = boost::dynamic_pointer_cast<DummyBackend>(d.
getBackend());
37 dummy->triggerInterrupt(interruptNumber);
38 BOOST_CHECK(isReadFinished.wait_for(std::chrono::seconds(3)) == std::future_status::ready);
42 dummy->triggerInterrupt(interruptNumber);
43 dummy->triggerInterrupt(interruptNumber);
48 dummy->triggerInterrupt(interruptNumber);
49 dummy->triggerInterrupt(interruptNumber);
60 Device d(
"(ExceptionDummy?map=goodMapFile.map)");
64 auto writeableAsyncAccessor =
66 BOOST_CHECK(!writeableAsyncAccessor.isReadOnly());
68 BOOST_CHECK(writeableAsyncAccessor.isWriteable());
71 writeableIntAccessor = 42;
72 writeableIntAccessor.write();
83 writeableAsyncAccessor.write();
84 writeableIntAccessor.read();
85 BOOST_CHECK_EQUAL(
int(writeableIntAccessor), 0);
90 Device d(
"(dummy?map=goodMapFile.map)");
98 Device d(
"(dummy?map=goodMapFile.map)");
102 BOOST_CHECK(!voidAccessor.isReadOnly());
103 BOOST_CHECK(!voidAccessor.isReadable());
104 BOOST_CHECK(voidAccessor.isWriteable());
112 for(
unsigned int i = 0; i < intAccessor.getNElements(); ++i) {
113 intAccessor[i] = i + 42;
117 voidAccessor.write();
121 for(
auto val : intAccessor) {
122 BOOST_CHECK_EQUAL(val, 0);
Class allows to read/write registers from device.
boost::shared_ptr< DeviceBackend > getBackend()
Obtain the backend.
VoidRegisterAccessor getVoidRegisterAccessor(const RegisterPath ®isterPathName, const AccessModeFlags &flags=AccessModeFlags({})) const
Get a VoidRegisterAccessor object for the given register.
ScalarRegisterAccessor< UserType > getScalarRegisterAccessor(const RegisterPath ®isterPathName, size_t wordOffsetInRegister=0, const AccessModeFlags &flags=AccessModeFlags({})) const
Get a ScalarRegisterObject object for the given register.
OneDRegisterAccessor< UserType > getOneDRegisterAccessor(const RegisterPath ®isterPathName, size_t numberOfWords=0, size_t wordOffsetInRegister=0, const AccessModeFlags &flags=AccessModeFlags({})) const
Get a OneDRegisterAccessor object for the given register.
void activateAsyncRead() noexcept
Activate asyncronous read for all transfer elements where AccessMode::wait_for_new_data is set.
void open(std::string const &aliasName)
Open a device by the given alias name from the DMAP file.
Class to store a register path name.
bool isWriteable() const
Check if transfer element is writeable.
Accessor class to read and write void-typed registers.
Exception thrown when a logic error has occured.
BOOST_AUTO_TEST_CASE(TestAsyncRO)
void testAsyncRO(RegisterPath name, unsigned int interruptNumber)