diff --git a/include/DeviceAccessor.h b/include/DeviceAccessor.h index 7fa28eaccf05e0d1a4de010b3952bd2d6978147d..0849735f3d5025ba4616ef2f5ce615d71906c64d 100644 --- a/include/DeviceAccessor.h +++ b/include/DeviceAccessor.h @@ -41,9 +41,9 @@ namespace ChimeraTK { } bool readNonBlocking() { - bool ret = impl->readNonBlocking(); + impl->read(); /// @todo FIXME this is wrong, but otherwise DeviceAccess fails to work properly right now mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0].swap(impl->accessChannel(0)); - return ret; + return true; } void write() { diff --git a/include/FanOut.h b/include/FanOut.h index ebbeb87113002e897b52666a095355f35eaf20c9..42c452eaee1ca00bc98243419a0ac5b45608ae08 100644 --- a/include/FanOut.h +++ b/include/FanOut.h @@ -166,9 +166,10 @@ namespace ChimeraTK { bool readNonBlocking() { bool ret = impl->readNonBlocking(); + mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0].swap(impl->accessChannel(0)); if(ret) { for(auto &slave : slaves) { // send out copies to slaves - slave->accessData(0) = impl->accessData(0); + slave->accessChannel(0) = mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0]; slave->write(); } } @@ -177,10 +178,12 @@ namespace ChimeraTK { void write() { for(auto &slave : slaves) { // send out copies to slaves - slave->accessData(0) = impl->accessData(0); + slave->accessChannel(0) = mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0]; slave->write(); } + impl->accessChannel(0).swap(mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0]); impl->write(); + impl->accessChannel(0).swap(mtca4u::NDRegisterAccessor<UserType>::buffer_2D[0]); return; } diff --git a/tests/executables_src/testControlSystemAccessors.cc b/tests/executables_src/testControlSystemAccessors.cc index 9fe798a1a38342163ef6e75d6fe473ab1f82d539..37bb579f56cde4edb7e2dcf9266d6c468829a9d8 100644 --- a/tests/executables_src/testControlSystemAccessors.cc +++ b/tests/executables_src/testControlSystemAccessors.cc @@ -73,21 +73,21 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testFeedToCS, T, test_types ) { app.makeConnections(); BOOST_CHECK_EQUAL(pvManagers.first->getAllProcessVariables().size(), 1); - auto myFeeder = pvManagers.first->getProcessScalar<T>("/myFeeder"); + auto myFeeder = pvManagers.first->getProcessArray<T>("/myFeeder"); app.testModule.feeder = 42; BOOST_CHECK_EQUAL(myFeeder->readNonBlocking(), false); app.testModule.feeder.write(); BOOST_CHECK_EQUAL(myFeeder->readNonBlocking(), true); BOOST_CHECK_EQUAL(myFeeder->readNonBlocking(), false); - BOOST_CHECK(*myFeeder == 42); + BOOST_CHECK(myFeeder->accessData(0) == 42); app.testModule.feeder = 120; BOOST_CHECK_EQUAL(myFeeder->readNonBlocking(), false); app.testModule.feeder.write(); BOOST_CHECK_EQUAL(myFeeder->readNonBlocking(), true); BOOST_CHECK_EQUAL(myFeeder->readNonBlocking(), false); - BOOST_CHECK(*myFeeder == 120); + BOOST_CHECK(myFeeder->accessData(0) == 120); } @@ -105,14 +105,14 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testConsumeFromCS, T, test_types ) { app.makeConnections(); BOOST_CHECK_EQUAL(pvManagers.first->getAllProcessVariables().size(), 1); - auto myConsumer = pvManagers.first->getProcessScalar<T>("/myConsumer"); + auto myConsumer = pvManagers.first->getProcessArray<T>("/myConsumer"); - *myConsumer = 42; + myConsumer->accessData(0) = 42; myConsumer->write(); app.testModule.consumer.read(); BOOST_CHECK(app.testModule.consumer == 42); - *myConsumer = 120; + myConsumer->accessData(0) = 120; myConsumer->write(); app.testModule.consumer.read(); BOOST_CHECK(app.testModule.consumer == 120); @@ -136,10 +136,10 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultiplePublications, T, test_types ) { app.run(); // make the connections and start the FanOut threads BOOST_CHECK_EQUAL(pvManagers.first->getAllProcessVariables().size(), 4); - auto myFeeder0 = pvManagers.first->getProcessScalar<T>("/myFeeder0"); - auto myFeeder1 = pvManagers.first->getProcessScalar<T>("/myFeeder1"); - auto myFeeder2 = pvManagers.first->getProcessScalar<T>("/myFeeder2"); - auto myFeeder3 = pvManagers.first->getProcessScalar<T>("/myFeeder3"); + auto myFeeder0 = pvManagers.first->getProcessArray<T>("/myFeeder0"); + auto myFeeder1 = pvManagers.first->getProcessArray<T>("/myFeeder1"); + auto myFeeder2 = pvManagers.first->getProcessArray<T>("/myFeeder2"); + auto myFeeder3 = pvManagers.first->getProcessArray<T>("/myFeeder3"); app.testModule.feeder = 42; BOOST_CHECK(myFeeder0->readNonBlocking() == false); @@ -152,10 +152,10 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultiplePublications, T, test_types ) { BOOST_CHECK(myFeeder1->readNonBlocking() == true); BOOST_CHECK(myFeeder2->readNonBlocking() == true); BOOST_CHECK(myFeeder3->readNonBlocking() == true); - BOOST_CHECK(*myFeeder0 == 42); - BOOST_CHECK(*myFeeder1 == 42); - BOOST_CHECK(*myFeeder2 == 42); - BOOST_CHECK(*myFeeder3 == 42); + BOOST_CHECK(myFeeder0->accessData(0) == 42); + BOOST_CHECK(myFeeder1->accessData(0) == 42); + BOOST_CHECK(myFeeder2->accessData(0) == 42); + BOOST_CHECK(myFeeder3->accessData(0) == 42); BOOST_CHECK(myFeeder0->readNonBlocking() == false); BOOST_CHECK(myFeeder1->readNonBlocking() == false); BOOST_CHECK(myFeeder2->readNonBlocking() == false); @@ -172,10 +172,10 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultiplePublications, T, test_types ) { BOOST_CHECK(myFeeder1->readNonBlocking() == true); BOOST_CHECK(myFeeder2->readNonBlocking() == true); BOOST_CHECK(myFeeder3->readNonBlocking() == true); - BOOST_CHECK(*myFeeder0 == 120); - BOOST_CHECK(*myFeeder1 == 120); - BOOST_CHECK(*myFeeder2 == 120); - BOOST_CHECK(*myFeeder3 == 120); + BOOST_CHECK(myFeeder0->accessData(0) == 120); + BOOST_CHECK(myFeeder1->accessData(0) == 120); + BOOST_CHECK(myFeeder2->accessData(0) == 120); + BOOST_CHECK(myFeeder3->accessData(0) == 120); BOOST_CHECK(myFeeder0->readNonBlocking() == false); BOOST_CHECK(myFeeder1->readNonBlocking() == false); BOOST_CHECK(myFeeder2->readNonBlocking() == false); @@ -192,10 +192,10 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultiplePublications, T, test_types ) { BOOST_CHECK(myFeeder1->readNonBlocking() == true); BOOST_CHECK(myFeeder2->readNonBlocking() == true); BOOST_CHECK(myFeeder3->readNonBlocking() == true); - BOOST_CHECK(*myFeeder0 == 120); - BOOST_CHECK(*myFeeder1 == 120); - BOOST_CHECK(*myFeeder2 == 120); - BOOST_CHECK(*myFeeder3 == 120); + BOOST_CHECK(myFeeder0->accessData(0) == 120); + BOOST_CHECK(myFeeder1->accessData(0) == 120); + BOOST_CHECK(myFeeder2->accessData(0) == 120); + BOOST_CHECK(myFeeder3->accessData(0) == 120); BOOST_CHECK(myFeeder0->readNonBlocking() == false); BOOST_CHECK(myFeeder1->readNonBlocking() == false); BOOST_CHECK(myFeeder2->readNonBlocking() == false); @@ -204,7 +204,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultiplePublications, T, test_types ) { } /*********************************************************************************************************************/ -/* test multiple re-publications of a variable fed from teh control system */ +/* test multiple re-publications of a variable fed from the control system */ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultipleRePublications, T, test_types ) { @@ -220,12 +220,12 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultipleRePublications, T, test_types ) { app.run(); // make the connections and start the FanOut threads BOOST_CHECK_EQUAL(pvManagers.first->getAllProcessVariables().size(), 4); - auto myConsumer = pvManagers.first->getProcessScalar<T>("/myConsumer"); - auto myConsumer_copy1 = pvManagers.first->getProcessScalar<T>("/myConsumer_copy1"); - auto myConsumer_copy2 = pvManagers.first->getProcessScalar<T>("/myConsumer_copy2"); - auto myConsumer_copy3 = pvManagers.first->getProcessScalar<T>("/myConsumer_copy3"); + auto myConsumer = pvManagers.first->getProcessArray<T>("/myConsumer"); + auto myConsumer_copy1 = pvManagers.first->getProcessArray<T>("/myConsumer_copy1"); + auto myConsumer_copy2 = pvManagers.first->getProcessArray<T>("/myConsumer_copy2"); + auto myConsumer_copy3 = pvManagers.first->getProcessArray<T>("/myConsumer_copy3"); - *myConsumer = 42; + myConsumer->accessData(0) = 42; BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); @@ -234,16 +234,16 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultipleRePublications, T, test_types ) { BOOST_CHECK(myConsumer_copy1->readNonBlocking() == true); BOOST_CHECK(myConsumer_copy2->readNonBlocking() == true); BOOST_CHECK(myConsumer_copy3->readNonBlocking() == true); - BOOST_CHECK(*myConsumer_copy1 == 42); - BOOST_CHECK(*myConsumer_copy2 == 42); - BOOST_CHECK(*myConsumer_copy3 == 42); + BOOST_CHECK(myConsumer_copy1->accessData(0) == 42); + BOOST_CHECK(myConsumer_copy2->accessData(0) == 42); + BOOST_CHECK(myConsumer_copy3->accessData(0) == 42); BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); app.testModule.consumer.read(); BOOST_CHECK(app.testModule.consumer == 42); - *myConsumer = 120; + myConsumer->accessData(0) = 120; BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); @@ -252,9 +252,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultipleRePublications, T, test_types ) { BOOST_CHECK(myConsumer_copy1->readNonBlocking() == true); BOOST_CHECK(myConsumer_copy2->readNonBlocking() == true); BOOST_CHECK(myConsumer_copy3->readNonBlocking() == true); - BOOST_CHECK(*myConsumer_copy1 == 120); - BOOST_CHECK(*myConsumer_copy2 == 120); - BOOST_CHECK(*myConsumer_copy3 == 120); + BOOST_CHECK(myConsumer_copy1->accessData(0) == 120); + BOOST_CHECK(myConsumer_copy2->accessData(0) == 120); + BOOST_CHECK(myConsumer_copy3->accessData(0) == 120); BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); @@ -270,9 +270,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testMultipleRePublications, T, test_types ) { BOOST_CHECK(myConsumer_copy1->readNonBlocking() == true); BOOST_CHECK(myConsumer_copy2->readNonBlocking() == true); BOOST_CHECK(myConsumer_copy3->readNonBlocking() == true); - BOOST_CHECK(*myConsumer_copy1 == 120); - BOOST_CHECK(*myConsumer_copy2 == 120); - BOOST_CHECK(*myConsumer_copy3 == 120); + BOOST_CHECK(myConsumer_copy1->accessData(0) == 120); + BOOST_CHECK(myConsumer_copy2->accessData(0) == 120); + BOOST_CHECK(myConsumer_copy3->accessData(0) == 120); BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); diff --git a/tests/executables_src/testTrigger.cc b/tests/executables_src/testTrigger.cc index c5b1dbb1e317520f8d85e083300772fc9fdcce2e..9167e071872fc856cfe44b573085555178637695 100644 --- a/tests/executables_src/testTrigger.cc +++ b/tests/executables_src/testTrigger.cc @@ -151,7 +151,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testTriggerDevToCS, T, test_types ) { app.run(); BOOST_CHECK_EQUAL(pvManagers.first->getAllProcessVariables().size(), 1); - auto myCSVar = pvManagers.first->getProcessScalar<T>("/myCSVar"); + auto myCSVar = pvManagers.first->getProcessArray<T>("/myCSVar"); // single theaded test only, since the receiving process scalar does not support blocking BOOST_CHECK(myCSVar->readNonBlocking() == false); @@ -161,7 +161,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testTriggerDevToCS, T, test_types ) { BOOST_CHECK(myCSVar->readNonBlocking() == false); app.testModule.theTrigger.write(); CHECK_TIMEOUT(myCSVar->readNonBlocking() == true, 30000); - BOOST_CHECK(*myCSVar == 42); + BOOST_CHECK(myCSVar->accessData(0) == 42); BOOST_CHECK(myCSVar->readNonBlocking() == false); app.testModule.feedingToDevice = 120; @@ -170,7 +170,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testTriggerDevToCS, T, test_types ) { BOOST_CHECK(myCSVar->readNonBlocking() == false); app.testModule.theTrigger.write(); CHECK_TIMEOUT(myCSVar->readNonBlocking() == true, 30000); - BOOST_CHECK(*myCSVar == 120); + BOOST_CHECK(myCSVar->accessData(0) == 120); BOOST_CHECK(myCSVar->readNonBlocking() == false); } @@ -198,29 +198,29 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testTriggerByCS, T, test_types ) { app.run(); BOOST_CHECK_EQUAL(pvManagers.first->getAllProcessVariables().size(), 2); - auto myCSVar = pvManagers.first->getProcessScalar<T>("/myCSVar"); - auto theTrigger = pvManagers.first->getProcessScalar<T>("/theTrigger"); - + auto myCSVar = pvManagers.first->getProcessArray<T>("/myCSVar"); + auto theTrigger = pvManagers.first->getProcessArray<T>("/theTrigger"); + // single theaded test only, since the receiving process scalar does not support blocking BOOST_CHECK(myCSVar->readNonBlocking() == false); app.testModule.feedingToDevice = 42; BOOST_CHECK(myCSVar->readNonBlocking() == false); app.testModule.feedingToDevice.write(); BOOST_CHECK(myCSVar->readNonBlocking() == false); - *theTrigger = 0; + myCSVar->accessData(0) = 0; theTrigger->write(); CHECK_TIMEOUT(myCSVar->readNonBlocking() == true, 30000); - BOOST_CHECK(*myCSVar == 42); + BOOST_CHECK(myCSVar->accessData(0) == 42); BOOST_CHECK(myCSVar->readNonBlocking() == false); app.testModule.feedingToDevice = 120; BOOST_CHECK(myCSVar->readNonBlocking() == false); app.testModule.feedingToDevice.write(); BOOST_CHECK(myCSVar->readNonBlocking() == false); - *theTrigger = 0; + myCSVar->accessData(0) = 0; theTrigger->write(); CHECK_TIMEOUT(myCSVar->readNonBlocking() == true, 30000); - BOOST_CHECK(*myCSVar == 120); + BOOST_CHECK(myCSVar->accessData(0) == 120); BOOST_CHECK(myCSVar->readNonBlocking() == false); }