Skip to content

Commit 7723ac8

Browse files
committed
changes for RDH v3
1 parent b071819 commit 7723ac8

File tree

3 files changed

+154
-38
lines changed

3 files changed

+154
-38
lines changed

src/RAWDataHeader.h

Lines changed: 138 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,144 @@ struct RAWDataHeaderV2
103103
};
104104
};
105105

106-
using RAWDataHeader = RAWDataHeaderV2;
106+
typedef struct _RAWDataHeaderV3
107+
{
108+
// 32-bits words
109+
110+
union {
111+
uint32_t word3 = 0x00004003;
112+
// | | version 3
113+
// | header size 16x32 bit = 64 bytes
114+
struct {
115+
uint32_t version:8; /// bit 0 to 7: header version
116+
uint32_t headerSize:8; /// bit 8 to 15: header size
117+
uint32_t blockLength:16; /// bit 16 to 32: block length
118+
};
119+
};
120+
121+
union {
122+
uint32_t word2 = 0x00ffffff;
123+
struct {
124+
uint32_t feeId:8; /// bit 0 to 15: FEE id
125+
uint32_t priorityBit:8; /// bit 16 to 23: priority bit
126+
uint32_t zero2:16; /// bit 16 to 32: reserved
127+
};
128+
};
129+
130+
union {
131+
uint32_t word1 = 0x0;
132+
struct {
133+
uint32_t zero1:32; /// bit 0 to 31: reserved
134+
};
135+
};
136+
137+
union {
138+
uint32_t word0 = 0x0;
139+
struct {
140+
uint32_t linkId:8; /// bit 0 to 7: linkId
141+
uint32_t zero0:24; /// bit 8 to 31: reserved
142+
};
143+
};
144+
145+
union {
146+
uint32_t word7 = 0xffffffff;
147+
struct {
148+
uint32_t triggerOrbit; /// bit 0 to 31: TRG orbit
149+
};
150+
};
151+
152+
union {
153+
uint32_t word6 = 0xffffffff;
154+
struct {
155+
uint32_t heartbeatOrbit; /// bit 0 to 31: TRG orbit
156+
};
157+
};
158+
159+
union {
160+
uint32_t word5 = 0x0;
161+
struct {
162+
uint32_t zero5; /// bit 0 to 31: reserved
163+
};
164+
};
165+
166+
union {
167+
uint32_t word4 = 0x0;
168+
struct {
169+
uint32_t zero4; /// bit 0 to 31: reserved
170+
};
171+
};
172+
173+
union {
174+
uint32_t word11 = 0x0;
175+
struct {
176+
uint32_t triggerBC:12; /// bit 0 to 11: trigger BC ID
177+
uint32_t zero11_0:4; /// bit 12 to 15: reserved
178+
uint32_t heartbeatBC:12; /// bit 16 to 27: heartbeat BC ID
179+
uint32_t zero11_1:4; /// bit 28 to 31: reserved
180+
};
181+
};
182+
183+
union {
184+
uint32_t word10 = 0x0;
185+
struct {
186+
uint32_t triggerType:32; /// bit 0 to 31: trigger types
187+
};
188+
};
189+
190+
union {
191+
uint32_t word9 = 0x0;
192+
struct {
193+
uint32_t zero9; /// bit 0 to 31: reserved
194+
};
195+
};
196+
197+
union {
198+
uint32_t word8 = 0x0;
199+
struct {
200+
uint32_t zero8; /// bit 0 to 31: reserved
201+
};
202+
};
203+
204+
union {
205+
uint32_t word15 = 0x0;
206+
struct {
207+
uint32_t detectorField:16; /// bit 0 to 15: detector field
208+
uint32_t par:16; /// bit 16 to 31: PAR
209+
};
210+
};
211+
212+
union {
213+
uint32_t word14 = 0x0;
214+
struct {
215+
uint32_t stopBit:8; /// bit 0 to 7: stop bit
216+
uint32_t pagesCoutner:16; /// bit 8 to 23: pages counter
217+
uint32_t zero14:8; /// bit 24 to 31: reserved
218+
};
219+
};
220+
221+
union {
222+
uint32_t word13 = 0x0;
223+
struct {
224+
uint32_t zero13; /// bit 0 to 31: reserved
225+
};
226+
};
227+
228+
union {
229+
uint32_t word12 = 0x0;
230+
struct {
231+
uint32_t zero12; /// bit 0 to 31: reserved
232+
};
233+
};
234+
235+
} RAWDataHeaderV3;
236+
237+
238+
239+
240+
241+
242+
243+
using RAWDataHeader = RAWDataHeaderV3;
107244

108245
}
109246
}

src/RdhUtils.cxx

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "RdhUtils.h"
22
RdhHandle::RdhHandle(void *data) {
3-
rdhPtr=(RDH *)data;
3+
rdhPtr=(o2::Header::RAWDataHeader *)data;
44
}
55

66
RdhHandle::~RdhHandle(){
@@ -9,21 +9,22 @@ RdhHandle::~RdhHandle(){
99
void RdhHandle::dumpRdh() {
1010
printf("RDH @ 0x%p\n",(void *)rdhPtr);
1111
printf("Version = 0x%02X\n",(int)getHeaderVersion());
12-
printf("Block length = %d 256b words\n",(int)getBlockLength());
12+
printf("Block length = %d bytes\n",(int)getBlockLength());
1313
printf("FEE Id = %d\n",(int)getFeeId());
1414
printf("Link Id = %d\n",(int)getLinkId());
1515
printf("Header size = %d\n",(int)getHeaderSize());
16+
//printf("%04X %04X %04X %04X\n",rdhPtr->word3,rdhPtr->word2,rdhPtr->word1,rdhPtr->word0);
1617
}
1718

1819
int RdhHandle::validateRdh(std::string &err) {
1920
int retCode=0;
20-
// expecting RDH V1
21-
if (getHeaderVersion()!=1) {
21+
// expecting RDH V3
22+
if (getHeaderVersion()!=3) {
2223
err+="Wrong header version\n";
2324
retCode++;
2425
}
25-
// expecting 2x256 bits for header
26-
if (getHeaderSize()!=2) {
26+
// expecting 16*32bits=64 bytes for header
27+
if (getHeaderSize()!=64) {
2728
err+="Wrong header size\n";
2829
retCode++;
2930
}
@@ -32,18 +33,12 @@ int RdhHandle::validateRdh(std::string &err) {
3233
err+="Wrong link ID\n";
3334
retCode++;
3435
}
35-
// expecting block length <= 256 x 256bits words (8kB)
36-
if (getBlockLength()>256) {
36+
// expecting block length <= 8kB
37+
if (getBlockLength()>8*1024) {
3738
err+="Wrong block length\n";
3839
retCode++;
3940

4041
}
4142
// check FEE Id ?
4243
return retCode;
4344
}
44-
45-
void RdhHandle::reset() {
46-
for (int i=0;i<RDH_WORDS/2;i++) {
47-
rdhPtr->lwords[i]=0;
48-
}
49-
}

src/RdhUtils.h

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,7 @@
22

33

44
#include <string>
5-
6-
7-
// flat RDH definition
8-
#define RDH_WORDS 16
9-
typedef struct {
10-
union {
11-
uint32_t words[RDH_WORDS];
12-
uint64_t lwords[RDH_WORDS/2];
13-
};
14-
} RDH;
5+
#include "RAWDataHeader.h"
156

167

178
// Utility class to access RDH fields and check them
@@ -34,28 +25,21 @@ class RdhHandle {
3425
// access RDH fields
3526
// functions defined inline here
3627
inline uint8_t getHeaderVersion() {
37-
return rdhPtr->words[3] & 0xF;
28+
return rdhPtr->version;
3829
}
3930
inline uint16_t getBlockLength() {
40-
return (uint16_t) ((rdhPtr->words[3] >> 4 ) & 0xFFFF);
41-
}
42-
inline uint16_t getBlockLengthBytes() {
43-
return getBlockLength()*32;
31+
return (uint16_t) rdhPtr->blockLength;
4432
}
4533
inline uint16_t getFeeId() {
46-
//return ((rdhPtr->words[3] >> 20 ) & 0xFFF) | ((rdhPtr->words[2] & 0xF) << 12);
47-
return ((rdhPtr->lwords[1] >> 20 ) & 0xFFFF);
34+
return (uint16_t) rdhPtr->feeId;
4835
}
4936
inline uint8_t getLinkId() {
50-
return (rdhPtr->words[2] >> 4 ) & 0xFF;
37+
return (uint8_t) rdhPtr->linkId;
5138
}
5239
inline uint8_t getHeaderSize() {
53-
return (rdhPtr->words[2] >> 12 ) & 0xFF;
40+
return rdhPtr->headerSize;
5441
}
5542

56-
// initialize a RDH with default fields
57-
void reset();
58-
5943
private:
60-
RDH *rdhPtr; // pointer to RDH in memory
44+
o2::Header::RAWDataHeader *rdhPtr; // pointer to RDH in memory
6145
};

0 commit comments

Comments
 (0)