9#ifndef STSXYTERMESSAGE_H
10#define STSXYTERMESSAGE_H
16#include <xpu/device.h>
23#include "bitmask_operators.hpp"
199 XPU_D
inline uint32_t
GetField(uint32_t uShift, uint32_t uLen)
const
201 return (
fuData >> uShift) & (((
static_cast<uint32_t
>(1)) << uLen) - 1);
204 XPU_D
inline uint8_t
GetBit(uint32_t uShift)
const {
return (
fuData >> uShift) & 1; }
206 XPU_D
inline uint32_t
GetFieldBE(uint32_t uShift, uint32_t uLen)
const
208 return (
DataBE() >> uShift) & (((
static_cast<uint32_t
>(1)) << uLen) - 1);
210 XPU_D
inline uint8_t
GetBitBE(uint32_t uShift)
const {
return (
DataBE() >> uShift) & 1; }
213 return ((
fuData & 0x000000FF) << 24) + ((
fuData & 0x0000FF00) << 8) + ((
fuData >> 8) & 0x0000FF00)
214 + ((
fuData >> 24) & 0x000000FF);
218 XPU_D
inline void SetField(uint32_t uShift, uint32_t uLen, uint32_t uValue)
220 fuData = (
fuData & ~((((
static_cast<uint32_t
>(1)) << uLen) - 1) << uShift))
221 | ((
static_cast<uint64_t
>(uValue)) << uShift);
224 XPU_D
inline void SetBit(uint32_t uShift, uint8_t uValue)
227 uValue ? (
fuData | ((
static_cast<uint32_t
>(1)) << uShift)) : (
fuData & ~((
static_cast<uint32_t
>(1)) << uShift));
392 bool bBinning =
true)
const;
#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
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.