Skip to content

Commit 4a5d3c2

Browse files
RoC: Add rudimentary CRU data format interface
1 parent 59fe3ca commit 4a5d3c2

File tree

3 files changed

+73
-86
lines changed

3 files changed

+73
-86
lines changed

src/Cru/DataFormat.h

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,47 @@
1-
//
2-
// Created by pboescho on 8/4/17.
3-
//
1+
/// \file Cru/DataFormat.h
2+
/// \brief Definitions of CRU data format functions
3+
///
4+
/// \author Pascal Boeschoten ([email protected])
45

5-
#ifndef READOUTCARD_DATAFORMAT_H
6-
#define READOUTCARD_DATAFORMAT_H
6+
#ifndef ALICEO2_READOUTCARD_CRU_DATAFORMAT
7+
#define ALICEO2_READOUTCARD_CRU_DATAFORMAT
78

8-
#endif //READOUTCARD_DATAFORMAT_H
9+
#include <cstddef>
10+
#include <cstdint>
11+
#include <cstring>
12+
#include "Utilities/Util.h"
13+
14+
namespace AliceO2
15+
{
16+
namespace roc
17+
{
18+
namespace Cru
19+
{
20+
namespace DataFormat
21+
{
22+
namespace
23+
{
24+
uint32_t getWord(const char* data, int i)
25+
{
26+
uint32_t word = 0;
27+
memcpy(&word, &data[sizeof(word)*i], sizeof(word));
28+
return word;
29+
}
30+
} // Anonymous namespace
31+
32+
uint32_t getLinkId(const char* data)
33+
{
34+
return Utilities::getBits(getWord(data, 2), 4, 4+8-1);
35+
}
36+
37+
uint32_t getEventSize(const char* data)
38+
{
39+
return Utilities::getBits(getWord(data, 3), 4, 4+12-1);
40+
}
41+
42+
} // namespace DataFormat
43+
} // namespace Cru
44+
} // namespace roc
45+
} // namespace AliceO2
46+
47+
#endif // ALICEO2_READOUTCARD_CRU_DATAFORMAT

src/Pda/PdaDmaBuffer.cxx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ PdaDmaBuffer::PdaDmaBuffer(PdaDevice::PdaPciDevice pciDevice, void* userBufferAd
7171
while (node != nullptr) {
7272
if (requireHugepage) {
7373
size_t hugePageMinSize = 1024 * 1024 * 2; // 2 MiB, the smallest hugepage size
74-
printf("node->length=%lu\n", node->length);
7574
if (node->length < hugePageMinSize) {
7675
BOOST_THROW_EXCEPTION(
7776
PdaException() << ErrorInfo::Message("Scatter-gather node smaller than 2 MiB (minimum hugepage"

test/TestCruDataFormat.cxx

Lines changed: 28 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,42 @@
1-
/// \file TestBarAcessor.cxx
2-
/// \brief Tests for BarAccessor
1+
/// \file TestCruDataFormat.cxx
2+
/// \brief Tests for CruDataFormat
33
///
44
/// \author Pascal Boeschoten ([email protected])
55

6-
#define BOOST_TEST_MODULE RORC_TestBarAccessor
6+
#define BOOST_TEST_MODULE RORC_TestCruDataFormat
77
#define BOOST_TEST_MAIN
88
#define BOOST_TEST_DYN_LINK
99
#include <boost/test/unit_test.hpp>
10-
#include <assert.h>
11-
#include "ReadoutCard/BarInterface.h"
12-
#include "Cru/BarAccessor.h"
10+
#include "Cru/DataFormat.h"
1311

1412
using namespace AliceO2::roc;
13+
using namespace Cru::DataFormat;
1514

16-
BOOST_AUTO_TEST_CASE(TestFirmwareFeatures)
15+
static const std::vector<uint32_t> link18Test1 = {
16+
0xabcd, 0x0, 0x212d, 0xead01001, 0x0, 0x0, 0xda1e5afe, 0x0,
17+
0x0, 0x0, 0x111caf, 0xebeef102, 0x0, 0x0, 0x12345, 0x67810000,
18+
};
19+
20+
static const std::vector<uint32_t> link18Test2 = {
21+
0x85, 0x0, 0x212d, 0xead01001, 0x0, 0x0, 0xda1e5afe, 0x3fb,
22+
0x0, 0x0, 0x111caf, 0xebeefbb7, 0x0, 0x0, 0x12345, 0x67810000,
23+
};
24+
25+
static const std::vector<uint32_t> link21Test1 = {
26+
0x0, 0x0, 0x215d, 0xead01001, 0x0, 0x0, 0xda1e5afe, 0x0,
27+
0x0, 0x0, 0x111caf, 0xebeef405, 0x0, 0x0, 0x12345, 0x67810000,
28+
};
29+
30+
BOOST_AUTO_TEST_CASE(TestGetLinkId)
1731
{
18-
{
19-
// Integrated firmware should have everything
20-
FirmwareFeatures f = Cru::BarAccessor::convertToFirmwareFeatures(0x40000000);
21-
BOOST_CHECK(!f.standalone);
22-
BOOST_CHECK(f.serial);
23-
BOOST_CHECK(f.dataSelection);
24-
BOOST_CHECK(f.temperature);
25-
BOOST_CHECK(f.firmwareInfo);
26-
}
27-
{
28-
// Standalone with everything enabled
29-
FirmwareFeatures f = Cru::BarAccessor::convertToFirmwareFeatures(0x40005AFE);
30-
BOOST_CHECK(f.standalone);
31-
BOOST_CHECK(f.serial);
32-
BOOST_CHECK(f.dataSelection);
33-
BOOST_CHECK(f.temperature);
34-
BOOST_CHECK(f.firmwareInfo);
35-
}
36-
{
37-
// Standalone with everything disabled
38-
FirmwareFeatures f = Cru::BarAccessor::convertToFirmwareFeatures(0x40005AFE + (0b1111 << 16));
39-
BOOST_CHECK(f.standalone);
40-
BOOST_CHECK(!f.serial);
41-
BOOST_CHECK(!f.dataSelection);
42-
BOOST_CHECK(!f.temperature);
43-
BOOST_CHECK(!f.firmwareInfo);
44-
}
45-
{
46-
// Standalone individual features disabled
47-
BOOST_CHECK(!Cru::BarAccessor::convertToFirmwareFeatures(0x40005AFE + (1 << 16)).dataSelection);
48-
BOOST_CHECK(!Cru::BarAccessor::convertToFirmwareFeatures(0x40005AFE + (1 << 17)).temperature);
49-
BOOST_CHECK(!Cru::BarAccessor::convertToFirmwareFeatures(0x40005AFE + (1 << 18)).serial);
50-
BOOST_CHECK(!Cru::BarAccessor::convertToFirmwareFeatures(0x40005AFE + (1 << 19)).firmwareInfo);
51-
}
32+
BOOST_CHECK_EQUAL(getLinkId(reinterpret_cast<const char*>(link18Test1.data())), 18);
33+
BOOST_CHECK_EQUAL(getLinkId(reinterpret_cast<const char*>(link18Test2.data())), 18);
34+
BOOST_CHECK_EQUAL(getLinkId(reinterpret_cast<const char*>(link21Test1.data())), 21);
5235
}
5336

54-
BOOST_AUTO_TEST_CASE(TestDataGeneratorConfiguration)
37+
BOOST_AUTO_TEST_CASE(TestGetEventSize)
5538
{
56-
{
57-
uint32_t bits = 0;
58-
Cru::BarAccessor::setDataGeneratorEnableBits(bits, true);
59-
BOOST_CHECK(bits == 0x1);
60-
Cru::BarAccessor::setDataGeneratorEnableBits(bits, false);
61-
BOOST_CHECK(bits == 0x0);
62-
}
63-
{
64-
uint32_t bits = 0;
65-
Cru::BarAccessor::setDataGeneratorRandomSizeBits(bits, true);
66-
BOOST_CHECK(bits == (1 << 16));
67-
Cru::BarAccessor::setDataGeneratorRandomSizeBits(bits, false);
68-
BOOST_CHECK(bits != (1 << 16));
69-
}
70-
{
71-
uint32_t bits = 0;
72-
Cru::BarAccessor::setDataGeneratorEnableBits(bits, true);
73-
BOOST_CHECK(bits == 0x1);
74-
Cru::BarAccessor::setDataGeneratorPatternBits(bits, GeneratorPattern::Incremental);
75-
BOOST_CHECK(bits == 0x3);
76-
Cru::BarAccessor::setDataGeneratorSizeBits(bits, 8*1024);
77-
BOOST_CHECK(bits == 0xff03);
78-
}
79-
{
80-
uint32_t bits = 0;
81-
Cru::BarAccessor::setDataGeneratorEnableBits(bits, true);
82-
Cru::BarAccessor::setDataGeneratorPatternBits(bits, GeneratorPattern::Incremental);
83-
Cru::BarAccessor::setDataGeneratorSizeBits(bits, 32);
84-
BOOST_CHECK(bits == 0x0003);
85-
}
86-
{
87-
uint32_t bits = 0;
88-
// Too high value
89-
BOOST_CHECK_THROW(Cru::BarAccessor::setDataGeneratorSizeBits(bits, 8*1024 + 1), std::exception);
90-
// Not a multiple of 256 bits
91-
BOOST_CHECK_THROW(Cru::BarAccessor::setDataGeneratorSizeBits(bits, 257), std::exception);
92-
}
39+
BOOST_CHECK_EQUAL(getEventSize(reinterpret_cast<const char*>(link18Test1.data())), 256);
40+
BOOST_CHECK_EQUAL(getEventSize(reinterpret_cast<const char*>(link18Test2.data())), 256);
41+
BOOST_CHECK_EQUAL(getEventSize(reinterpret_cast<const char*>(link21Test1.data())), 256);
9342
}

0 commit comments

Comments
 (0)