CbmRoot
Loading...
Searching...
No Matches
CommonUnpacker.cxx
Go to the documentation of this file.
1/* Copyright (C) 2024 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Felix Weiglhofer [committer], Dominik Smith */
4#include "CommonUnpacker.h"
5
6#include <iomanip>
7
8using namespace cbm::algo;
9
10detail::MSData::MSData(const fles::Timeslice& ts, fles::Subsystem subsystem, gsl::span<u16> legalEqIds)
11{
12 monitor.system = subsystem;
13
14 for (uint64_t comp = 0; comp < ts.num_components(); comp++) {
15 auto this_subsystem = static_cast<fles::Subsystem>(ts.descriptor(comp, 0).sys_id);
16
17 if (this_subsystem != subsystem) {
18 continue;
19 }
20
21 const u64 numMsInComp = ts.num_microslices(comp);
22 const u16 componentId = ts.descriptor(comp, 0).eq_id;
23
24 if (std::find(legalEqIds.begin(), legalEqIds.end(), componentId) == legalEqIds.end()) {
25 L_(error) << "Invalid equipment id 0x" << std::hex << std::setw(4) << componentId << std::dec << " for subsystem "
26 << ToString(subsystem);
28 continue;
29 }
30
32 monitor.sizeBytesIn += ts.size_component(comp);
33 monitor.numMs += numMsInComp;
34 for (u64 mslice = 0; mslice < numMsInComp; mslice++) {
35 msDesc.push_back(ts.descriptor(comp, mslice));
36 msContent.push_back(ts.content(comp, mslice));
37 }
38 }
39 L_(debug) << "Found " << monitor.numMs << " microslices for subsystem " << ToString(subsystem);
40}
#define L_(level)
std::string_view ToString(T t)
Definition EnumDict.h:64
std::uint64_t u64
Definition Definitions.h:23
std::uint16_t u16
Definition Definitions.h:19
MSData(const fles::Timeslice &ts, fles::Subsystem system, gsl::span< u16 > legalEqIds)
UnpackMonitorBase monitor
std::vector< const u8 * > msContent
std::vector< fles::MicrosliceDescriptor > msDesc