@@ -9,10 +9,12 @@ RdhHandle::~RdhHandle(){
99void RdhHandle::dumpRdh () {
1010 printf (" RDH @ 0x%p\n " ,(void *)rdhPtr);
1111 printf (" Version = 0x%02X\n " ,(int )getHeaderVersion ());
12- printf (" Block length = %d bytes\n " ,(int )getBlockLength ());
12+ printf (" Header size = %d\n " ,(int )getHeaderSize ());
13+ printf (" Block length (link) = %d bytes\n " ,(int )getBlockLength ());
14+ printf (" Block length (memory) = %d bytes\n " ,(int )getMemorySize ());
1315 printf (" FEE Id = %d\n " ,(int )getFeeId ());
1416 printf (" Link Id = %d\n " ,(int )getLinkId ());
15- printf (" Header size = %d\n " ,(int )getHeaderSize ());
17+ printf (" Next block = %d\n " ,(int )getOffsetNextPacket ());
1618 // printf("%04X %04X %04X %04X\n",rdhPtr->word3,rdhPtr->word2,rdhPtr->word1,rdhPtr->word0);
1719}
1820
@@ -42,3 +44,69 @@ int RdhHandle::validateRdh(std::string &err) {
4244 // check FEE Id ?
4345 return retCode;
4446}
47+
48+
49+ RdhBlockHandle::RdhBlockHandle (void *ptr, size_t size) : blockPtr(ptr), blockSize(size) {
50+ }
51+
52+ RdhBlockHandle::~RdhBlockHandle () {
53+ }
54+
55+ int RdhBlockHandle::printSummary () {
56+ printf (" \n\n ************************\n " );
57+ printf (" Start of page %p (%d bytes)\n\n " ,blockPtr,blockSize);
58+
59+ // intialize start of block
60+ uint8_t *ptr=(uint8_t *)(blockPtr);
61+ size_t bytesLeft=blockSize;
62+
63+ int rdhcount=0 ;
64+
65+ for (;;) {
66+
67+ // check enough space for RDH
68+ if (bytesLeft<sizeof (o2::Header::RAWDataHeader)) {
69+ printf (" page too small, %d bytes left! need at least %d bytes for RDH\n " ,bytesLeft,(int )sizeof (o2::Header::RAWDataHeader));
70+ return -1 ;
71+ }
72+
73+ rdhcount++;
74+ int offset=ptr-(uint8_t *)blockPtr;
75+ printf (" *** RDH #%d @ 0x%04X = %d\n " ,rdhcount,offset,offset);
76+
77+ // print raw bytes
78+ // printf("Raw bytes dump (32-bit words):\n");
79+ for (int i=0 ;i<sizeof (o2::Header::RAWDataHeader)/sizeof (int32_t );i++) {
80+ if (i%8 ==0 ) {printf (" \n " );}
81+ printf (" %08X " ,(int )(((uint32_t *)ptr)[i]));
82+ }
83+ printf (" \n\n " );
84+
85+ RdhHandle rdh (ptr);
86+ rdh.dumpRdh ();
87+ printf (" \n " );
88+
89+ int next=rdh.getOffsetNextPacket (); // next RDH
90+ if (next==0 ) {
91+ break ;
92+ }
93+
94+ // check enough space to go to next offset
95+ if (bytesLeft<next) {
96+ printf (" page too small, %d bytes left! need at least %d bytes for next offset\n " ,bytesLeft,(int )rdh.getOffsetNextPacket ());
97+ return -1 ;
98+ }
99+
100+
101+ bytesLeft-=next;
102+ ptr+=next;
103+ if (bytesLeft==0 ) {
104+ break ;
105+ }
106+ }
107+
108+ printf (" End of page %p (%d bytes)" ,blockPtr,blockSize);
109+ printf (" \n ************************\n\n " );
110+
111+ return 0 ;
112+ }
0 commit comments