μHAL (v2.8.17)
Part of the IPbus software repository
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
test_config_space.cpp
Go to the documentation of this file.
1/*
2---------------------------------------------------------------------------
3
4 This file is part of uHAL.
5
6 uHAL is a hardware access library and programming framework
7 originally developed for upgrades of the Level-1 trigger of the CMS
8 experiment at CERN.
9
10 uHAL is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 3 of the License, or
13 (at your option) any later version.
14
15 uHAL is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with uHAL. If not, see <http://www.gnu.org/licenses/>.
22
23 Marc Magrans de Abril, CERN
24 email: marc.magrans.de.abril <AT> cern.ch
25
26 Andrew Rose, Imperial College, London
27 email: awr01 <AT> imperial.ac.uk
28
29 Tom Williams, Rutherford Appleton Laboratory, Oxfordshire
30 email: tom.williams <AT> cern.ch
31
32---------------------------------------------------------------------------
33*/
34
35#include "uhal/uhal.hpp"
37
40#include "uhal/tests/tools.hpp"
41
42#include <boost/test/unit_test.hpp>
43
44
45
46namespace uhal {
47namespace tests {
48
49
50UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(ConfigSpaceTestSuite, read_fullWord, DummyHardwareFixture,
51{
52 HwInterface hw = getHwInterface();
53
54 IPbusCore& client = dynamic_cast<IPbusCore&>(hw.getClient());
55
56 for (size_t i = 0; i < 10; i++) {
57 const uint32_t expectedValue = uint16_t(getpid()) << 16 | i;
58
59 switch (deviceType) {
60 case IPBUS_1_3_UDP :
61 case IPBUS_1_3_TCP :
63 BOOST_CHECK_THROW(client.readConfigurationSpace(i), exception::ValidationError);
64 break;
65 default:
67
69 BOOST_CHECK_EQUAL(x.value(), expectedValue);
70 }
71 }
72}
73)
74
76{
77 HwInterface hw = getHwInterface();
78
79 IPbusCore& client = dynamic_cast<IPbusCore&>(hw.getClient());
80
81 for (size_t i = 0; i < 10; i++) {
82 const uint32_t expectedValue = uint16_t(getpid()) << 16 | i;
83
84 switch (deviceType) {
85 case IPBUS_1_3_UDP :
86 case IPBUS_1_3_TCP :
88 BOOST_CHECK_THROW(ValWord<uint32_t> x_lower = client.readConfigurationSpace(i, 0xFF), exception::ValidationError);
89 break;
90 default:
93 ValWord<uint32_t> x_upper = client.readConfigurationSpace(i, 0xFF000000);
94
96 BOOST_CHECK_EQUAL(x_lower.value(), uint32_t(expectedValue & 0xFF));
97 BOOST_CHECK_EQUAL(x_mid.value(), uint32_t((expectedValue & 0xFFFF00) >> 8));
98 BOOST_CHECK_EQUAL(x_upper.value(), uint32_t((expectedValue & 0xFF000000) >> 24));
99 }
100 }
101}
102)
103
104} // end ns tests
105} // end ns uhal
106
void dispatch()
Method to dispatch all queued transactions, and wait until all corresponding responses have been rece...
A class which bundles a node tree and an IPbus client interface together providing everything you nee...
Definition: HwInterface.hpp:56
ClientInterface & getClient()
Get the underlying IPbus client.
Definition: HwInterface.cpp:78
A class providing the core IPbus packing functionality.
ValWord< uint32_t > readConfigurationSpace(const uint32_t &aAddr)
Read a single, unmasked, unsigned word from the configuration address space.
A class which wraps a single word of data and marks whether or not it is valid.
Definition: ValMem.hpp:189
T value() const
Return the value of the validated memory with check on validity.
Definition: ValMem.cpp:141
None tests(nox.Session session)
Definition: noxfile.py:19
BOOST_CHECK_THROW(hw.getNode("REG").writeBlockOffset(xx, 0), uhal::exception::BulkTransferOffsetRequestedForSingleRegister)
BOOST_CHECK_EQUAL(mem.size(), N)
IPbusCore & client
HwInterface hw
uint32_t x
Definition: test_single.cpp:93
@ IPBUS_1_3_CONTROLHUB
Definition: definitions.hpp:42
#define UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(test_suite_name, test_case_name, test_fixture, test_case_contents)
Definition: definitions.hpp:53