207 size_t pageStart = 0;
208 std::cout <<
"----\n";
209 while (pageStart < frameSize) {
210 RDH* rdh = (
RDH*)(&(framePtr[pageStart]));
213 auto rdhHeaderSize = o2::raw::RDHUtils::getHeaderSize(rdh);
214 uint16_t cruID = o2::raw::RDHUtils::getCRUID(rdh) & 0x3F;
215 uint8_t endPointID = o2::raw::RDHUtils::getEndPointID(rdh);
216 uint8_t linkID = o2::raw::RDHUtils::getLinkID(rdh);
217 uint16_t feeID = cruID * 2 + endPointID;
218 auto stopBit = o2::raw::RDHUtils::getStop(rdh);
219 auto triggerType = o2::raw::RDHUtils::getTriggerType(rdh);
220 auto pageSize = o2::raw::RDHUtils::getOffsetToNext(rdh);
221 auto pageCounter = RDHUtils::getPageCounter(rdh);
223 printf(
"%6d: V %X offset %4d packet %3d srcID %d cruID %2d dp %d link %2d orbit %u bc %4d trig 0x%08X p %d s %d",
224 (
int)0, (
int)rdhVersion, (
int)pageSize,
225 (
int)RDHUtils::getPacketCounter(rdh), (
int)RDHUtils::getSourceID(rdh),
226 (
int)cruID, (
int)endPointID, (
int)linkID,
227 (uint32_t)RDHUtils::getHeartBeatOrbit(rdh), (
int)RDHUtils::getTriggerBC(rdh),
228 (
int)triggerType, (
int)pageCounter, (
int)stopBit);
229 if ((triggerType & 0x800) != 0) {
233 pageStart += pageSize;
235 std::cout <<
"----\n";
269 uint32_t orbitMin = 0xFFFFFFFF;
270 int maxQueueSize = 0;
271 for (
int feeId = 0; feeId < NFEEID; feeId++) {
272 for (
int linkId = 0; linkId < NLINKS; linkId++) {
274 if (tfQueue.empty()) {
278 std::cout << fmt::format(
"FEE ID {} LINK {} orbit {} queue size {}", feeId, linkId, tfQueue.front().firstOrbit, tfQueue.size()) << std::endl;
280 if (tfQueue.front().firstOrbit < orbitMin) {
281 orbitMin = tfQueue.front().firstOrbit;
283 if (tfQueue.size() > maxQueueSize) {
284 maxQueueSize = tfQueue.size();
289 if (maxQueueSize < 3) {
293 char* outBuf{
nullptr};
295 for (
int feeId = 0; feeId < NFEEID; feeId++) {
296 for (
int linkId = 0; linkId < NLINKS; linkId++) {
299 if (
tf.firstOrbit != orbitMin) {
303 size_t newSize = outSize +
tf.totalSize;
305 outBuf = (
char*)realloc(outBuf, newSize);
306 if (outBuf ==
nullptr) {
307 std::cout <<
"failed to allocate output buffer of size " << newSize <<
" bytes" << std::endl;
311 std::cout << fmt::format(
"Appending FEE ID {} LINK {} orbit {} to current TF", feeId, linkId,
tf.firstOrbit) << std::endl;
314 char* bufPtr = outBuf + outSize;
315 memcpy(bufPtr,
tf.buf,
tf.totalSize);
317 outSize +=
tf.totalSize;
323 std::cout <<
"Sending TF " << orbitMin <<
" (previous " << mLastTForbit <<
" delta " << (orbitMin - mLastTForbit) <<
")" << std::endl
326 mLastTForbit = orbitMin;
327 auto freefct = [](
void*
data,
void* ) { free(
data); };
341 if (mTimeFrameMax > 0 && TFid == mTimeFrameMax) {
349 if (mFrameMax == 0) {
354 if (mPrint &&
false) {
355 printf(
"mFrameMax: %d\n", mFrameMax);
363 std::cout <<
"Reading " <<
sizeof(
RDH) <<
" for RDH from input file\n";
365 mInputFile.read((
char*)(&rdh),
sizeof(
RDH));
366 if (mInputFile.fail()) {
368 std::cout <<
"end of file reached" << std::endl;
376 auto rdhHeaderSize = o2::raw::RDHUtils::getHeaderSize(rdh);
377 uint16_t cruID = o2::raw::RDHUtils::getCRUID(rdh) & 0x3F;
378 uint8_t endPointID = o2::raw::RDHUtils::getEndPointID(rdh);
379 uint8_t linkID = o2::raw::RDHUtils::getLinkID(rdh);
380 uint16_t feeID = cruID * 2 + endPointID;
381 auto stopBit = o2::raw::RDHUtils::getStop(rdh);
382 auto triggerType = o2::raw::RDHUtils::getTriggerType(rdh);
383 auto pageSize = o2::raw::RDHUtils::getOffsetToNext(rdh);
384 auto pageCounter = RDHUtils::getPageCounter(rdh);
385 auto orbit = RDHUtils::getHeartBeatOrbit(rdh);
386 int bc = (
int)RDHUtils::getTriggerBC(rdh);
389 printf(
"%6d: V %X offset %4d packet %3d srcID %d cruID %2d dp %d link %2d orbit %u bc %4d trig 0x%08X p %d s %d",
390 (
int)0, (
int)rdhVersion, (
int)pageSize,
391 (
int)RDHUtils::getPacketCounter(rdh), (
int)RDHUtils::getSourceID(rdh),
392 (
int)cruID, (
int)endPointID, (
int)linkID,
393 orbit,
bc, (
int)triggerType, (
int)pageCounter, (
int)stopBit);
394 if ((triggerType & 0x800) != 0) {
399 if (rdhVersion < 4 || rdhVersion > 6 || rdhHeaderSize != 64) {
406 if (mPrint &&
false) {
407 std::cout <<
"pageSize=" << pageSize << std::endl;
411 if (pageSize < rdhHeaderSize) {
412 std::cout << mFrameMax <<
" - pageSize too small: " << pageSize << std::endl;
418 mTimeFrameBufs[feeID][linkID] = (
char*)realloc(mTimeFrameBufs[feeID][linkID], mTimeFrameSizes[feeID][linkID] + pageSize);
419 if (mTimeFrameBufs[feeID][linkID] ==
nullptr) {
420 std::cout << mFrameMax <<
" - failed to allocate buffer" << std::endl;
426 std::cout <<
"Copying RDH into buf " << (
int)feeID <<
"," << (
int)linkID << std::endl;
427 std::cout <<
" frame size: " << mTimeFrameSizes[feeID][linkID] << std::endl;
430 memcpy(mTimeFrameBufs[feeID][linkID] + mTimeFrameSizes[feeID][linkID], &rdh, rdhHeaderSize);
434 std::cout <<
"Reading " << pageSize - rdhHeaderSize <<
" for payload from input file\n";
435 std::cout <<
"Copying payload into buf " << (
int)feeID <<
"," << (
int)linkID << std::endl;
436 std::cout <<
" frame size: " << mTimeFrameSizes[feeID][linkID] << std::endl;
438 mInputFile.read(mTimeFrameBufs[feeID][linkID] + mTimeFrameSizes[feeID][linkID] + rdhHeaderSize, pageSize - rdhHeaderSize);
441 if (mInputFile.fail()) {
443 std::cout <<
"end of file reached" << std::endl;
450 mTimeFrameSizes[feeID][linkID] += pageSize;
452 if ((triggerType & 0x800) != 0 &&
bc == 0) {
455 std::cout <<
"tfQueue.size(): " << tfQueue.size() << std::endl;
458 tfQueue.back().firstOrbit =
orbit;
461 if (stopBit && tfQueue.size() > 0) {
465 std::cout <<
"Appending HBF from " << (
int)feeID <<
"," << (
int)linkID <<
" to TF #" << tfQueue.size() << std::endl;
466 std::cout <<
" frame size: " << mTimeFrameSizes[feeID][linkID] << std::endl;
467 printHBF(mTimeFrameBufs[feeID][linkID], mTimeFrameSizes[feeID][linkID]);
469 if (!
appendHBF(tfQueue.back(), mTimeFrameBufs[feeID][linkID], mTimeFrameSizes[feeID][linkID],
true)) {
470 std::cout << mFrameMax <<
" - failed to append HBframe" << std::endl;
476 free(mTimeFrameBufs[feeID][linkID]);
477 mTimeFrameBufs[feeID][linkID] =
nullptr;
478 mTimeFrameSizes[feeID][linkID] = 0;
506 if (mFrameMax == 0) {
512 printf(
"mFrameMax: %d\n", mFrameMax);
519 mInputFile.read((
char*)(&rdh),
sizeof(
RDH));
520 if (mInputFile.fail()) {
522 std::cout <<
"end of file reached" << std::endl;
530 auto rdhHeaderSize = o2::raw::RDHUtils::getHeaderSize(rdh);
532 std::cout <<
"header_version=" << (
int)rdhVersion << std::endl;
534 if (rdhVersion < 4 || rdhVersion > 6 || rdhHeaderSize != 64) {
539 auto frameSize = o2::raw::RDHUtils::getOffsetToNext(rdh);
541 std::cout <<
"frameSize=" << frameSize << std::endl;
545 if (frameSize < rdhHeaderSize) {
546 std::cout << mFrameMax <<
" - frameSize too small: " << frameSize << std::endl;
553 if (
buf ==
nullptr) {
554 std::cout << mFrameMax <<
" - failed to allocate buffer" << std::endl;
563 mInputFile.read(
buf +
bufSize + rdhHeaderSize, frameSize - rdhHeaderSize);
566 if (mInputFile.fail()) {
568 std::cout <<
"end of file reached" << std::endl;
578 auto stopBit = o2::raw::RDHUtils::getStop(rdh);
582 if ((stopBit != 0) || (mFullHBF ==
false)) {
584 auto freefct = [](
void*
data,
void* ) { free(
data); };