CbmRoot
Loading...
Searching...
No Matches
StsXyterMessage.h
Go to the documentation of this file.
1/* Copyright (C) 2017-2020 Facility for Antiproton and Ion Research in Europe, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Pierre-Alain Loizeau [committer] */
4
5/************************************************************
6 *
7 ************************************************************/
8
9#ifndef STSXYTERMESSAGE_H
10#define STSXYTERMESSAGE_H
11
12// C/C++ headers
13#include <cstdint>
14#include <iostream>
15
16#include <xpu/device.h>
17
18namespace stsxyter
19{
20
21// tools: Use to this allow bitwise operations on C++11 enums
22// This needs to be included in the same namespace to work...
23#include "bitmask_operators.hpp"
24
27 struct MessField {
28 uint16_t fusPos;
29 uint16_t fusLen;
30
31 constexpr MessField(uint16_t usPos, uint16_t usLen) : fusPos(usPos), fusLen(usLen) {};
32 };
34 enum class MessType : uint16_t
35 {
36 Dummy,
37 Hit,
38 TsMsb,
39 Epoch,
40 Status,
41 Empty,
43 };
46 enum class MessSubType : uint16_t
47 {
48 TsMsb = 0,
49 Epoch = 1,
50 Status = 2,
51 Empty = 3
52 };
54 enum class MessagePrintMask : uint16_t
55 {
56 msg_print_Prefix = (0x1 << 0),
57 msg_print_Data = (0x1 << 1),
58 msg_print_Hex = (0x1 << 2),
59 msg_print_Human = (0x1 << 3)
60 };
63 enum class MsErrorFlags : uint16_t
64 {
65 MsErrOutFifoAlmostFull = (0x1 << 0),
66 MsErrOutFifoOverflow = (0x1 << 1),
68 MsErrBinOverflow = (0x1 << 3)
69 };
70
72 static constexpr uint16_t kusPosNotHitFlag = 31;
73 static constexpr uint16_t kusPosLinkIndex = 22;
74 // Hit message
75 static constexpr uint16_t kusPosHitChannel = 15;
76 static constexpr uint16_t kusPosHitAdc = 10;
77 static constexpr uint16_t kusPosHitTsOver = 9;
78 static constexpr uint16_t kusPosHitTs = 1;
79 static constexpr uint16_t kusPosHitEmFlag = 0;
80 // Non-hit messages
81 static constexpr uint16_t kusPosSubtype = 29;
82 // TS_MSB message
83 static constexpr uint16_t kusPosTsMsbVal = 0;
84 // Epoch
85 static constexpr uint16_t kusPosEpochVal = 0;
86 // Status
87 static constexpr uint16_t kusPosStatLinkId = 20;
88 static constexpr uint16_t kusPosStatSxTs = 14;
89 static constexpr uint16_t kusPosStatStatus = 10;
90 static constexpr uint16_t kusPosStatDpbTs = 1;
91 static constexpr uint16_t kusPosStatCpFlag = 0;
92 // Empty/End of MS
93 static constexpr uint16_t kusPosEmptyFlag = 28;
94 static constexpr uint16_t kusPosMsErrType = 1;
95 static constexpr uint16_t kusPosMsErrFlag = 0;
98 static constexpr uint16_t kusLenNotHitFlag = 1;
99 static constexpr uint16_t kusLenLinkIndex = 9;
100 // Hit message
101 static constexpr uint16_t kusLenHitChannel = 7;
102 static constexpr uint16_t kusLenHitAdc = 5;
103 static constexpr uint16_t kusLenHitTsFull = 9; // Includes 1 bit overlap with TS message ?
104 static constexpr uint16_t kusLenHitTsOver = 0; // 0 bit overlap with TS message
105 static constexpr uint16_t kusLenHitTs = 9; // No overlap in this version of FW
106 static constexpr uint16_t kusLenHitEmFlag = 1;
107 // Other message
108 static constexpr uint16_t kusLenSubtype = 2;
109 // TS_MSB message
110 static constexpr uint16_t kusLenTsMsbVal = 22;
111 static constexpr uint16_t kusLenTsMsbValBinning = 29;
112 // Epoch
113 static constexpr uint16_t kusLenEpochVal = 29;
114 // Status
115 static constexpr uint16_t kusLenStatLinkId = 9;
116 static constexpr uint16_t kusLenStatSxTs = 6;
117 static constexpr uint16_t kusLenStatStatus = 4;
118 static constexpr uint16_t kusLenStatDpbTs = 9;
119 static constexpr uint16_t kusLenStatCpFlag = 1;
120 // Empty/End of MS
121 static constexpr uint16_t kusLenEmptyFlag = 1;
122 static constexpr uint16_t kusLenMsErrType = 4;
123 static constexpr uint16_t kusLenMsErrFlag = 1;
124
128 // Hit message
135 // Non-hit messages
137 // TS_MSB message
140 // Epoch message
142 // Status
148 // Empty/End of MS
152
154 static constexpr uint32_t kuHitNbAdcBins = (0 < kusLenHitAdc ? 1 << kusLenHitAdc : 0);
155 static constexpr uint32_t kuHitNbTsBins = (0 < kusLenHitTs ? 1 << kusLenHitTs : 0);
156 static constexpr uint32_t kuHitNbOverBins = (0 < kusLenHitTsOver ? 1 << kusLenHitTsOver : 0);
157 static constexpr uint32_t kuTsMsbNbTsBins = (0 < kusLenTsMsbVal ? 1 << kusLenTsMsbVal : 0);
158 static constexpr uint64_t kulTsCycleNbBins =
159 static_cast<uint64_t>(kuTsMsbNbTsBins) * static_cast<uint64_t>(kuHitNbTsBins);
160 static constexpr uint16_t kusMaskTsMsbOver = (1 << kusLenHitTsOver) - 1;
161 static constexpr uint32_t kulClockCycleNom = 25;
162 static constexpr uint32_t kulClockCycleDen = 8;
163 static constexpr double kdClockCycleNs = static_cast<double>(kulClockCycleNom) / kulClockCycleDen; // ns, not rounded
164
165 // Binning FW adds 1 bit to TS in HIT message => Quick and dirty hack is a factor 2!!!
166 static constexpr uint32_t kuHitNbTsBinsBinning = 1 << 10;
167 static constexpr uint32_t kuTsMsbNbTsBinsBinning = 1 << kusLenTsMsbValBinning;
168 static constexpr uint64_t kulTsCycleNbBinsBinning =
169 static_cast<uint64_t>(kuTsMsbNbTsBinsBinning) * static_cast<uint64_t>(kuHitNbTsBinsBinning);
170
171 class Message {
172 private:
173 protected:
174 uint32_t fuData; // main and only storage field for the message
175
176 public:
177 XPU_D Message() : fuData(0) {}
178
179 XPU_D Message(const Message& src) : fuData(src.fuData) {}
180
181 XPU_D Message(uint32_t uDataIn) : fuData(uDataIn) {}
182
183 XPU_D ~Message(){};
184
185 XPU_D void assign(const Message& src) { fuData = src.fuData; }
186
187 XPU_D Message& operator=(const Message& src)
188 {
189 assign(src);
190 return *this;
191 }
192
193 XPU_D inline void reset() { fuData = 0; }
194
195 // --------------------------- Accessors ---------------------------------
196 XPU_D inline uint32_t GetData() const { return fuData; }
197 XPU_D inline void SetData(uint32_t uValue) { fuData = uValue; }
198
199 XPU_D inline uint32_t GetField(uint32_t uShift, uint32_t uLen) const
200 {
201 return (fuData >> uShift) & (((static_cast<uint32_t>(1)) << uLen) - 1);
202 }
203
204 XPU_D inline uint8_t GetBit(uint32_t uShift) const { return (fuData >> uShift) & 1; }
205
206 XPU_D inline uint32_t GetFieldBE(uint32_t uShift, uint32_t uLen) const
207 {
208 return (DataBE() >> uShift) & (((static_cast<uint32_t>(1)) << uLen) - 1);
209 }
210 XPU_D inline uint8_t GetBitBE(uint32_t uShift) const { return (DataBE() >> uShift) & 1; }
211 XPU_D inline uint32_t DataBE() const
212 {
213 return ((fuData & 0x000000FF) << 24) + ((fuData & 0x0000FF00) << 8) + ((fuData >> 8) & 0x0000FF00)
214 + ((fuData >> 24) & 0x000000FF);
215 }
216
217 // --------------------------- Setters ---------------------------------------
218 XPU_D inline void SetField(uint32_t uShift, uint32_t uLen, uint32_t uValue)
219 {
220 fuData = (fuData & ~((((static_cast<uint32_t>(1)) << uLen) - 1) << uShift))
221 | ((static_cast<uint64_t>(uValue)) << uShift);
222 }
223
224 XPU_D inline void SetBit(uint32_t uShift, uint8_t uValue)
225 {
226 fuData =
227 uValue ? (fuData | ((static_cast<uint32_t>(1)) << uShift)) : (fuData & ~((static_cast<uint32_t>(1)) << uShift));
228 }
229
230 // --------------------------- Simplified Acc_or/Setters ---------------------
231 XPU_D inline uint32_t GetField(MessField field) const { return GetField(field.fusPos, field.fusLen); }
232 XPU_D inline uint8_t GetBit(MessField field) const { return GetBit(field.fusPos); }
233 XPU_D inline bool GetFlag(MessField field) const { return (1 == GetBit(field.fusPos)); }
234 XPU_D inline uint32_t GetFieldBE(MessField field) const { return GetFieldBE(field.fusPos, field.fusLen); }
235 XPU_D inline uint8_t GetBitBE(MessField field) const { return GetBitBE(field.fusPos); }
236
237 XPU_D inline void SetField(MessField field, uint32_t uValue) { SetField(field.fusPos, field.fusLen, uValue); }
238 XPU_D inline void SetBit(MessField field, uint8_t ucValue) { SetBit(field.fusPos, ucValue); }
239
240 // --------------------------- common fields ---------------------------------
242 XPU_D inline uint16_t GetLinkIndex() const { return GetField(kFieldLinkIndex); }
244 XPU_D inline bool IsHit() const { return !GetFlag(kFieldNotHitFlag); }
246 XPU_D inline bool IsDummy() const { return IsHit() && (0 == GetHitAdc()); }
248 XPU_D inline bool IsTsMsb() const { return (!IsHit() && MessSubType::TsMsb == GetSubType()); }
261
262 // ------------------------ Hit message fields -------------------------------
264 XPU_D inline uint16_t GetHitChannel() const { return GetField(kFieldHitChannel); }
265
267 XPU_D inline uint16_t GetHitAdc() const { return GetField(kFieldHitAdc); }
268
270 XPU_D inline uint16_t GetHitTimeFull() const { return GetField(kFieldHitTsFull); }
271
273 XPU_D inline uint16_t GetHitTimeOver() const { return GetField(kFieldHitTsOver); }
274
276 XPU_D inline uint16_t GetHitTime() const { return GetField(kFieldHitTs); }
277
280 XPU_D inline uint16_t GetHitTimeBinning() const
281 {
282 return ((static_cast<uint16_t>(GetBit(30)) << 9) + GetField(kFieldHitTs));
283 }
284
287 XPU_D inline uint16_t GetLinkIndexHitBinning() const { return GetField(kFieldLinkIndex) & 0x3F; }
288
290 XPU_D inline bool IsHitMissedEvts() const { return GetFlag(kFieldHitEmFlag); }
291
293 XPU_D inline void SetHitChannel(uint16_t usVal) { SetField(kFieldHitChannel, usVal); }
294
296 XPU_D inline void SetHitAdc(uint16_t usVal) { SetField(kFieldHitAdc, usVal); }
297
299 XPU_D inline void SetHitTimeFull(uint16_t usVal) { SetField(kFieldHitTsFull, usVal); }
300
302 XPU_D inline void SetHitTimeOver(uint16_t usVal) { SetField(kFieldHitTsOver, usVal); }
303
305 XPU_D inline void SetHitTime(uint16_t usVal) { SetField(kFieldHitTs, usVal); }
306
308 XPU_D inline void SetHitMissEvtsFlag(bool bVal) { SetBit(kFieldHitEmFlag, bVal); }
309
310 // ----------------------- Non-Hit message fields ----------------------------
312 // inline MessSubType GetSubType() const { return static_cast< uint16_t >( GetField( kFieldSubtype ) ); }
314 {
315 switch (GetField(kFieldSubtype)) {
316 case static_cast<uint16_t>(MessSubType::TsMsb): return MessSubType::TsMsb;
317 case static_cast<uint16_t>(MessSubType::Epoch): return MessSubType::Epoch;
318 case static_cast<uint16_t>(MessSubType::Status): return MessSubType::Status;
319 default: return MessSubType::Empty;
320 } // switch( static_cast< uint16_t>( GetField( kFieldSubtype ) ) )
321 }
322
323 // ------------------------ TS_MSB message fields ----------------------------
325 XPU_D inline uint32_t GetTsMsbVal() const { return GetField(kFieldTsMsbVal); }
326
328 XPU_D inline uint32_t GetTsMsbValBinning() const { return GetField(kFieldTsMsbValBinning); }
329
331 XPU_D inline void SetTsMsbVal(uint32_t uVal) { SetField(kFieldTsMsbVal, uVal); }
332
333 // ------------------------ Epoch message fields -----------------------------
335 XPU_D inline uint32_t GetEpochVal() const { return GetField(kFieldEpochVal); }
336
338 XPU_D inline void SetEpochVal(uint32_t uVal) { SetField(kFieldEpochVal, uVal); }
339
340 // ------------------------ Status message fields ----------------------------
342 XPU_D inline uint16_t GetStatusLink() const { return GetField(kFieldStatLinkId); }
343
345 XPU_D inline uint16_t GetStatusSxTs() const { return GetField(kFieldStatSxTs); }
346
348 XPU_D inline uint16_t GetStatusStatus() const { return GetField(kFieldStatStatus); }
349
351 XPU_D inline uint16_t GetStatusDpbTs() const { return GetField(kFieldStatDpbTs); }
352
354 XPU_D inline bool IsCpFlagOn() const { return GetField(kFieldStatCpFlag); }
355
357 XPU_D inline void SetStatusLink(uint16_t usVal) { SetField(kFieldStatLinkId, usVal); }
358
360 XPU_D inline void SetStatusSxTs(uint16_t usVal) { SetField(kFieldStatSxTs, usVal); }
361
363 XPU_D inline void SetStatusStatus(uint16_t usVal) { SetField(kFieldStatStatus, usVal); }
364
366 XPU_D inline void SetStatusDpbTs(uint16_t usVal) { SetField(kFieldStatDpbTs, usVal); }
367
369 XPU_D inline void SetCpFlag(bool bVal) { SetField(kFieldStatCpFlag, bVal); }
370
371 // -------------------- Empty/End of MS message fields -----------------------
373 XPU_D inline bool IsEmptyMsg() const { return GetField(kFieldEmptyFlag); }
374
376 XPU_D inline bool IsMsErrorFlagOn() const { return GetField(kFieldMsErrFlag); }
377
379 XPU_D inline uint16_t GetMsErrorType() const { return GetField(kFieldMsErrType); }
380
382 XPU_D inline void SetEmptyMsgFlag(bool bVal) { SetField(kFieldEmptyFlag, bVal); }
383
385 XPU_D inline void SetMsErrorFlag(bool bVal) { SetField(kFieldMsErrFlag, bVal); }
386
388 XPU_D inline void SetMsErrorType(uint16_t usVal) { SetField(kFieldMsErrType, usVal); }
389
390 // ------------------------ General OP ---------------------------------------
392 bool bBinning = true) const;
393
394
395 static std::string PrintMessType(MessType type);
396 };
397} // namespace stsxyter
398#endif // STSXYTERMESSAGE_H
#define ENABLE_BITMASK_OPERATORS(x)
XPU_D bool IsHitMissedEvts() const
For Hit data: Returns Missed event flag (1 bit field)
XPU_D void SetData(uint32_t uValue)
XPU_D void SetCpFlag(bool bVal)
For Status data: Sets the Status (1 bit field)
XPU_D uint32_t GetTsMsbValBinning() const
For TS MSB data: Returns the TS MSB 29 bit field)
XPU_D Message(uint32_t uDataIn)
XPU_D void SetMsErrorFlag(bool bVal)
For End of MS data data: Sets the MS Error flag (1 bit field)
XPU_D uint16_t GetStatusSxTs() const
For Status data: Returns the SMX TS from ACK frame (6 bit field)
XPU_D uint32_t GetFieldBE(uint32_t uShift, uint32_t uLen) const
XPU_D uint16_t GetHitAdc() const
For Hit data: Returns ADC value (5 bit field)
XPU_D void SetHitTimeOver(uint16_t usVal)
For Hit data: Sets timestamp overlap bits (2 bits field, overlap with 2 LSBs of TS_MSB message)
XPU_D uint16_t GetHitChannel() const
For Hit data: Returns StsXYTER channel number (7 bit field)
bool PrintMess(std::ostream &os, MessagePrintMask ctrl=MessagePrintMask::msg_print_Human, bool bBinning=true) const
XPU_D Message & operator=(const Message &src)
XPU_D void SetHitAdc(uint16_t usVal)
For Hit data: Sets ADC value (5 bit field)
XPU_D uint16_t GetLinkIndex() const
For all data: Returns the (global) index of the eLink on which the message was received (n bit field)
XPU_D void SetField(MessField field, uint32_t uValue)
XPU_D void SetField(uint32_t uShift, uint32_t uLen, uint32_t uValue)
XPU_D void assign(const Message &src)
XPU_D bool GetFlag(MessField field) const
XPU_D Message(const Message &src)
XPU_D bool IsCpFlagOn() const
For Status data: Returns the CP flag from ACK frame (1 bit field)
XPU_D void SetHitChannel(uint16_t usVal)
For Hit data: Sets StsXYTER channel number (7 bit field)
XPU_D uint16_t GetStatusStatus() const
For Status data: Returns the Status field from ACK frame (4 bit field)
XPU_D uint8_t GetBit(MessField field) const
XPU_D void SetBit(MessField field, uint8_t ucValue)
XPU_D void SetMsErrorType(uint16_t usVal)
For End of MS data: Sets the MS error type field (2 bit field)
XPU_D bool IsTsMsb() const
Check if the message if a Ts_Msb.
XPU_D MessType GetMessType() const
Returns the message type, see enum MessType.
XPU_D bool IsHit() const
Check if the message if a Hit Message.
XPU_D uint32_t DataBE() const
XPU_D uint8_t GetBitBE(uint32_t uShift) const
XPU_D uint16_t GetLinkIndexHitBinning() const
XPU_D uint8_t GetBitBE(MessField field) const
XPU_D void SetBit(uint32_t uShift, uint8_t uValue)
XPU_D uint32_t GetFieldBE(MessField field) const
XPU_D bool IsEmptyMsg() const
For Empty/End of MS data: Check if this is an empty message (1 bit field)
XPU_D void SetHitTimeFull(uint16_t usVal)
For Hit data: Sets Full timestamp (10 bit field including 2 bits overlap)
XPU_D uint32_t GetData() const
XPU_D MessSubType GetSubType() const
For non-Hit data: Returns subtype (2 bit field)
XPU_D void SetStatusLink(uint16_t usVal)
For Status data: Sets the Status (9 bit field)
XPU_D uint16_t GetHitTime() const
For Hit data: Returns timestamp (8 bit field, 2 MSB bits overlap removed)
XPU_D uint8_t GetBit(uint32_t uShift) const
XPU_D uint32_t GetTsMsbVal() const
For TS MSB data: Returns the TS MSB 22 bit field)
XPU_D void SetHitTime(uint16_t usVal)
For Hit data: Sets Full timestamp (8 bit field, 2 MSB bits overlap removed)
XPU_D uint16_t GetHitTimeFull() const
For Hit data: Returns Full timestamp (10 bit field including 2 bits overlap)
XPU_D uint32_t GetField(MessField field) const
XPU_D uint16_t GetHitTimeBinning() const
XPU_D void SetStatusStatus(uint16_t usVal)
For Status data: Sets the Status (4 bit field)
XPU_D void SetHitMissEvtsFlag(bool bVal)
For Hit data: Sets Missed event flag (1 bit field)
XPU_D uint32_t GetEpochVal() const
For Epoch data: Returns the Epoch (29 bit field)
XPU_D uint16_t GetStatusDpbTs() const
For Status data: Returns the DPB TS when frame received (9 bit field)
XPU_D uint16_t GetHitTimeOver() const
For Hit data: Returns timestamp overlap bits (2 bits field, overlap with 2 LSBs of TS_MSB message)
XPU_D uint16_t GetStatusLink() const
For Status data: Returns the Link Inedx (9 bit field)
XPU_D void SetStatusDpbTs(uint16_t usVal)
For Status data: Sets the Status (9 bit field)
XPU_D bool IsDummy() const
Check if the message if a Dummy Hit Message.
static std::string PrintMessType(MessType type)
XPU_D void SetEmptyMsgFlag(bool bVal)
For Empty/End of MS data data: Sets the Empty message flag (1 bit field)
XPU_D uint32_t GetField(uint32_t uShift, uint32_t uLen) const
XPU_D void SetTsMsbVal(uint32_t uVal)
For TS MSB data: Sets the TS MSB (22 bit field)
XPU_D uint16_t GetMsErrorType() const
For End of MS data: Returns the MS error type field (2 bit field)
XPU_D bool IsMsErrorFlagOn() const
For End of MS data: Returns the MS error flag (1 bit field)
XPU_D void SetEpochVal(uint32_t uVal)
For Epoch data: Sets the Epoch (29 bit field)
XPU_D void SetStatusSxTs(uint16_t usVal)
For Status data: Sets the Status (6 bit field)
static constexpr uint32_t kuTsMsbNbTsBins
static constexpr uint16_t kusPosStatCpFlag
static constexpr MessField kFieldNotHitFlag(kusPosNotHitFlag, kusLenNotHitFlag)
static constexpr MessField kFieldTsMsbValBinning(kusPosTsMsbVal, kusLenTsMsbValBinning)
static constexpr uint16_t kusPosEmptyFlag
static constexpr MessField kFieldStatCpFlag(kusPosStatCpFlag, kusLenStatCpFlag)
static constexpr MessField kFieldStatSxTs(kusPosStatSxTs, kusLenStatSxTs)
static constexpr uint16_t kusPosEpochVal
static constexpr uint16_t kusLenStatDpbTs
static constexpr uint32_t kulClockCycleDen
Clock cycle denominator, equivalent to 2*160 MHz clock.
static constexpr uint16_t kusPosTsMsbVal
MsErrorFlags
MS error flags.
static constexpr MessField kFieldStatLinkId(kusPosStatLinkId, kusLenStatLinkId)
static constexpr MessField kFieldSubtype(kusPosSubtype, kusLenSubtype)
static constexpr MessField kFieldTsMsbVal(kusPosTsMsbVal, kusLenTsMsbVal)
static constexpr uint32_t kuHitNbTsBinsBinning
static constexpr uint16_t kusLenNotHitFlag
Fields length (bits)
static constexpr MessField kFieldEmptyFlag(kusPosEmptyFlag, kusLenEmptyFlag)
static constexpr uint16_t kusLenHitEmFlag
static constexpr uint16_t kusPosStatDpbTs
static constexpr uint16_t kusLenMsErrFlag
static constexpr uint16_t kusLenHitTs
static constexpr uint16_t kusLenTsMsbVal
static constexpr MessField kFieldStatDpbTs(kusPosStatDpbTs, kusLenStatDpbTs)
static constexpr uint64_t kulTsCycleNbBins
static constexpr uint16_t kusLenStatSxTs
static constexpr uint16_t kusPosHitChannel
static constexpr uint16_t kusPosHitTs
static constexpr uint16_t kusPosHitAdc
static constexpr MessField kFieldLinkIndex(kusPosLinkIndex, kusLenLinkIndex)
Fields Info.
static constexpr uint16_t kusLenLinkIndex
static constexpr uint16_t kusPosMsErrFlag
static constexpr MessField kFieldMsErrFlag(kusPosMsErrFlag, kusLenMsErrFlag)
static constexpr uint16_t kusLenSubtype
MessagePrintMask
Printout control.
static constexpr uint16_t kusLenStatCpFlag
static constexpr uint64_t kulTsCycleNbBinsBinning
static constexpr MessField kFieldHitTsOver(kusPosHitTsOver, kusLenHitTsOver)
static constexpr uint16_t kusLenEmptyFlag
static constexpr MessField kFieldHitAdc(kusPosHitAdc, kusLenHitAdc)
static constexpr uint16_t kusPosHitEmFlag
static constexpr uint16_t kusPosStatStatus
MessSubType
Non-hit Message sub-types.
static constexpr uint16_t kusPosHitTsOver
static constexpr uint16_t kusPosStatLinkId
static constexpr uint32_t kuHitNbTsBins
static constexpr uint32_t kulClockCycleNom
Clock cycle nominator [ns], equivalent to 2*160 MHz clock.
static constexpr uint16_t kusPosSubtype
static constexpr uint16_t kusMaskTsMsbOver
static constexpr uint32_t kuHitNbAdcBins
Status/properties constants.
static constexpr MessField kFieldHitTs(kusPosHitTs, kusLenHitTs)
static constexpr MessField kFieldMsErrType(kusPosMsErrType, kusLenMsErrType)
static constexpr double kdClockCycleNs
MessType
Message types.
static constexpr MessField kFieldEpochVal(kusPosEpochVal, kusLenEpochVal)
static constexpr uint16_t kusLenHitChannel
static constexpr uint16_t kusLenHitAdc
static constexpr MessField kFieldHitTsFull(kusPosHitTs, kusLenHitTsFull)
static constexpr uint16_t kusLenHitTsFull
static constexpr uint32_t kuHitNbOverBins
static constexpr MessField kFieldHitChannel(kusPosHitChannel, kusLenHitChannel)
static constexpr uint16_t kusLenMsErrType
static constexpr uint16_t kusLenTsMsbValBinning
static constexpr MessField kFieldStatStatus(kusPosStatStatus, kusLenStatStatus)
static constexpr MessField kFieldHitEmFlag(kusPosHitEmFlag, kusLenHitEmFlag)
static constexpr uint16_t kusLenStatStatus
static constexpr uint16_t kusPosNotHitFlag
Fields position (Start bit index)
static constexpr uint16_t kusPosMsErrType
static constexpr uint16_t kusLenStatLinkId
static constexpr uint16_t kusPosStatSxTs
static constexpr uint16_t kusLenHitTsOver
static constexpr uint32_t kuTsMsbNbTsBinsBinning
static constexpr uint16_t kusPosLinkIndex
static constexpr uint16_t kusLenEpochVal
uint16_t fusLen
Start bit index.
constexpr MessField(uint16_t usPos, uint16_t usLen)
Field length.