23#ifndef ALICEO2_DATAFORMATSTPC_IDC_H
24#define ALICEO2_DATAFORMATSTPC_IDC_H
30static constexpr uint32_t Links = 10;
31static constexpr uint32_t Channels = 80;
32static constexpr uint32_t DataWordSizeBits = 256;
33static constexpr uint32_t DataWordSizeBytes = DataWordSizeBits / 8;
34static constexpr uint32_t IDCvalueBits = 25;
35static constexpr uint32_t IDCvalueBitsMask = (uint32_t(1) << IDCvalueBits) - 1;
36static constexpr uint32_t SignificantBits = 2;
37static constexpr float FloatConversion = 1.f / float(1 << SignificantBits);
89 const uint32_t
offset = link * IDCvalueBits;
90 const uint32_t selectedWord =
offset / 8;
91 const uint32_t requiredShift =
offset % 8;
92 const uint32_t
value = (*(uint32_t*)(
dataWords + selectedWord)) >> requiredShift;
93 return value & IDCvalueBitsMask;
98 const uint32_t
offset = link * IDCvalueBits;
99 const uint32_t selectedWord =
offset / 8;
100 const uint32_t requiredShift =
offset % 8;
101 auto dataWrite = (uint64_t*)&
dataWords[selectedWord];
102 *dataWrite = (
value & IDCvalueBitsMask) << requiredShift;
128 return float(
channelData[channel].getLinkValue(link)) * FloatConversion;
GLsizei const GLfloat * value
void setChannelValue(const uint32_t link, const uint32_t channel, uint32_t value)
Header header
IDC data header.
float getChannelValueFloat(const uint32_t link, const uint32_t channel) const
Data channelData[Channels]
data values for all channels in each link
void setChannelValueFloat(const uint32_t link, const uint32_t channel, float value)
bool hasLink(const uint32_t link)
uint32_t getChannelValue(const uint32_t link, const uint32_t channel) const
uint8_t dataWords[DataWordSizeBytes]
25bit ADC values
uint32_t getLinkValue(const uint32_t link) const
void setLinkValue(const uint32_t link, const uint32_t value)