stream  0.10.0
stream analysis framework
Message.h
1 #ifndef BASE_MESSAGE_H
2 #define BASE_MESSAGE_H
3 
4 #include <cstdint>
5 #include <iostream>
6 
7 #include "base/defines.h"
8 
9 namespace base {
10 
12  enum MessageFormat {
13  formatEth1 = 0,
14  formatOptic1 = 1,
15  formatEth2 = 2,
16  formatOptic2 = 3,
17  formatNormal = 4
18  };
19 
21  enum MessageTypes {
22  MSG_NOP = 0,
23  MSG_HIT = 1,
24  MSG_EPOCH = 2,
25  MSG_SYNC = 3,
26  MSG_AUX = 4,
27  MSG_EPOCH2 = 5,
28  MSG_GET4 = 6,
29  MSG_SYS = 7
30  };
31 
33  enum SysMessageTypes {
34  SYSMSG_DAQ_START = 1,
35  SYSMSG_DAQ_FINISH = 2,
36  SYSMSG_NX_PARITY = 3,
37  SYSMSG_SYNC_PARITY = 4,
38  SYSMSG_DAQ_RESUME = 5,
39  SYSMSG_FIFO_RESET = 6,
40  SYSMSG_USER = 7,
41  SYSMSG_PCTIME = 8,
42  SYSMSG_ADC = 9,
43  SYSMSG_PACKETLOST = 10,
44  SYSMSG_GET4_EVENT = 11,
45  SYSMSG_CLOSYSYNC_ERROR = 12,
46  SYSMSG_TS156_SYNC = 13
47  };
48 
50  enum SysMessageUserTypes {
51  SYSMSG_USER_CALIBR_ON = 7,
52  SYSMSG_USER_CALIBR_OFF = 8,
53  SYSMSG_USER_RECONFIGURE = 9
54  };
55 
57  enum MessagePrintMask {
58  msg_print_Prefix = 1,
59  msg_print_Data = 2,
60  msg_print_Hex = 4,
61  msg_print_Human = 8
62  };
63 
65  class Message {
66 
67  protected:
68  uint64_t data;
69 
70  public:
72  Message() : data(0) {}
73 
75  Message(const Message& src) : data(src.data) {}
76 
78  void assign(const Message& src) { data = src.data; }
79 
81  Message& operator=(const Message& src) { assign(src); return *this; }
82 
84  inline void reset() { data = 0; }
85 
87  inline uint32_t getField(uint32_t shift, uint32_t len) const
88  { return (data >> shift) & ((((uint32_t)1) << len) - 1); }
89 
91  inline void setField(uint32_t shift, uint32_t len, uint32_t value)
92  { data = (data & ~(((((uint64_t) 1) << len) - 1) << shift)) | (((uint64_t) value) << shift); }
93 
95  inline uint8_t getBit(uint32_t shift) const
96  { return (data >> shift) & 1; }
97 
99  inline void setBit(uint32_t shift, uint8_t value)
100  { data = value ? (data | (((uint64_t) 1) << shift)) : (data & ~(((uint64_t) 1) << shift)) ; }
101 
102 
103  // --------------------------- common fields ---------------------------------
104 
106  inline uint8_t getMessageType() const { return getField(0, 4); }
107 
112  inline uint16_t getRocNumber() const { return getField(48, 16); }
113 
115  inline void setMessageType(uint8_t v) { setField(0, 4, v); }
116 
118  inline void setRocNumber(uint16_t v) { setField(48, 16, v); }
119 
120  // ---------- Epoch marker access methods ------------
121 
122  // 2 bit unused
123 
127  inline uint32_t getEpochNumber() const { return data >> 8; }
128 
129 
131  inline uint8_t getEpochMissed() const { return getField(40, 8); }
132 
134  inline void setEpochNumber(uint32_t v) { setField(8, 32, v); }
135 
137  inline void setEpochMissed(uint8_t v) { setField(40, 8, v); }
138 
139 
140  // ---------- Sync marker access methods -------------
141 
143  inline uint8_t getSyncChNum() const { return getField(6, 2); }
144 
146  inline uint16_t getSyncTs() const { return getField(8, 13) << 1; }
147 
149  inline uint8_t getSyncEpochLSB() const { return getBit(21); }
150 
152  inline uint32_t getSyncData() const { return getField(22, 24); }
153 
155  inline uint8_t getSyncStFlag() const { return getField(46, 2); }
156 
157 
159  inline void setSyncChNum(uint8_t v) { setField(6, 2, v); }
160 
162  inline void setSyncTs(uint16_t v) { setField(8, 13, v >> 1); }
163 
165  inline void setSyncEpochLSB(uint8_t v) { setBit(21, v); }
166 
168  inline void setSyncData(uint32_t v) { setField(22, 24, v); }
169 
171  inline void setSyncStFlag(uint8_t v) { setField(46, 2, v); }
172 
173 
174  // ---------- AUX marker access methods --------------
175 
177  inline uint8_t getAuxChNum() const { return getField(6, 7); }
178 
180  inline uint16_t getAuxTs() const { return getField(13, 13) << 1; }
181 
183  inline uint8_t getAuxEpochLSB() const { return getBit(26); }
184 
186  inline uint8_t getAuxFalling() const { return getBit(27); }
187 
189  inline uint8_t getAuxOverflow() const { return getBit(28); }
190 
191 
193  inline void setAuxChNum(uint8_t v) { setField(6, 7, v); }
194 
196  inline void setAuxTs(uint16_t v) { setField(13, 13, v >> 1); }
197 
199  inline void setAuxEpochLSB(uint8_t v) { setBit(26, v); }
200 
202  inline void setAuxFalling(uint8_t v) { setBit(27, v); }
203 
205  inline void setAuxOverflow(uint8_t v) { setBit(28, v); }
206 
207  // ---------- System message access methods ----------
208 
209  // 2 bit unused
210 
212  inline uint8_t getSysMesType() const { return getField(8, 8); }
213 
215  // inline uint32_t getSysMesData() const { return getField(16, 32); }
216  // on some machine 32-bit field not working
217  inline uint32_t getSysMesData() const { return data >> 16; }
218 
220  inline void setSysMesType(uint8_t v) { setField(8, 8, v); }
221 
223  inline void setSysMesData(uint32_t v) { setField(16, 32, v); }
224 
225 
226  // ---------- Common functions -----------------------
227 
229  inline bool isNopMsg() const { return getMessageType() == MSG_NOP; }
231  inline bool isEpochMsg() const { return getMessageType() == MSG_EPOCH;}
233  inline bool isSyncMsg() const { return getMessageType() == MSG_SYNC; }
235  inline bool isAuxMsg() const { return getMessageType() == MSG_AUX; }
237  inline bool isSysMsg() const { return getMessageType() == MSG_SYS; }
238 
240  inline bool isStartDaqMsg() const
241  { return isSysMsg() && (getSysMesType() == SYSMSG_DAQ_START); }
243  inline bool isStopDaqMsg() const
244  { return isSysMsg() && (getSysMesType() == SYSMSG_DAQ_FINISH); }
245 
246  // -------------------- methods for working with different formats
247 
248  static uint32_t RawSize(int fmt);
249 
250  };
251 
252 }
253 
254 
255 #endif
ROC Message.
Definition: Message.h:65
uint8_t getAuxEpochLSB() const
For Aux data: Returns LSB of true epoch (1 bit field)
Definition: Message.h:183
void setEpochMissed(uint8_t v)
For Epoch data: Sets missed hits count (8 bit field)
Definition: Message.h:137
uint8_t getAuxOverflow() const
For Aux data: Returns overflow flag (1 bit field)
Definition: Message.h:189
void setEpochNumber(uint32_t v)
For Epoch data: Sets epoch number (32 bit field)
Definition: Message.h:134
bool isEpochMsg() const
Returns true is message type is #MSG_EPOCH (epoch marker)
Definition: Message.h:231
uint8_t getMessageType() const
Returns the message type. Valid for all message types. 4 bit.
Definition: Message.h:106
uint8_t getSyncStFlag() const
For Sync data: Returns sync status flags (2 bit field)
Definition: Message.h:155
bool isSyncMsg() const
Returns true is message type is #MSG_SYNC.
Definition: Message.h:233
uint32_t getField(uint32_t shift, uint32_t len) const
get field
Definition: Message.h:87
void setAuxEpochLSB(uint8_t v)
For Aux data: Set LSB of true epoch (1 bit field)
Definition: Message.h:199
uint8_t getAuxFalling() const
For Aux data: Returns falling edge flag (1 bit flag)
Definition: Message.h:186
uint32_t getEpochNumber() const
For Epoch data: Returns current epoch number (32 bit field) inline uint32_t getEpochNumber() const { ...
Definition: Message.h:127
Message(const Message &src)
constructor
Definition: Message.h:75
void setSyncEpochLSB(uint8_t v)
For Sync data: Set LSB of true epoch (1 bit field)
Definition: Message.h:165
bool isStopDaqMsg() const
Returns true if system message and subtype #ROC_SYSMSG_DAQ_FINISH.
Definition: Message.h:243
void setBit(uint32_t shift, uint8_t value)
set bit
Definition: Message.h:99
void setSyncStFlag(uint8_t v)
For Sync data: Set sync status flags (2 bit field)
Definition: Message.h:171
uint8_t getSysMesType() const
For SysMes data: Returns system message subtype (8 bit field)
Definition: Message.h:212
void setSysMesType(uint8_t v)
For SysMes data: Set system message type (8 bit field)
Definition: Message.h:220
bool isAuxMsg() const
Returns true is message type is #MSG_AUX.
Definition: Message.h:235
void setSyncTs(uint16_t v)
For Sync data: Set sync time stamp (13 bit field, 2 ns bins )
Definition: Message.h:162
void setAuxOverflow(uint8_t v)
For Aux data: Set overflow flag (1 bit field)
Definition: Message.h:205
void setRocNumber(uint16_t v)
Sets the ROC number field in the current message.
Definition: Message.h:118
static uint32_t RawSize(int fmt)
returns raw size
Definition: Message.cxx:6
uint8_t getAuxChNum() const
For Aux data: Returns aux channel number (7 bit field)
Definition: Message.h:177
uint16_t getAuxTs() const
For Aux data: Returns aux time stamp (13 bit field, 2 ns bins)
Definition: Message.h:180
void setAuxFalling(uint8_t v)
For Aux data: Set falling edge flag (1 bit flag)
Definition: Message.h:202
uint32_t getSyncData() const
For Sync data: Returns sync message data (24 bit field)
Definition: Message.h:152
void setField(uint32_t shift, uint32_t len, uint32_t value)
set field
Definition: Message.h:91
void setSyncChNum(uint8_t v)
For Sync data: Set sync channel number (2 bit field)
Definition: Message.h:159
uint8_t getEpochMissed() const
For Epoch data: Returns number of missed hits (8 bit field)
Definition: Message.h:131
bool isSysMsg() const
Returns true is message type is #MSG_SYS (system message)
Definition: Message.h:237
void setAuxTs(uint16_t v)
For Aux data: Set aux time stamp (13 bit field)
Definition: Message.h:196
bool isNopMsg() const
Returns true is message type is #MSG_NOP (filler message)
Definition: Message.h:229
uint8_t getBit(uint32_t shift) const
get bit
Definition: Message.h:95
uint64_t data
main and only storage field for the message
Definition: Message.h:68
bool isStartDaqMsg() const
Returns true if system message and subtype #ROC_SYSMSG_DAQ_START.
Definition: Message.h:240
void setAuxChNum(uint8_t v)
For Aux data: Set aux channel number (7 bit field)
Definition: Message.h:193
Message()
constructor
Definition: Message.h:72
void reset()
reset
Definition: Message.h:84
uint32_t getSysMesData() const
For SysMes data: Returns system message data (32 bit field)
Definition: Message.h:217
void setMessageType(uint8_t v)
Sets the message type field in the current message.
Definition: Message.h:115
void setSyncData(uint32_t v)
For Sync data: Set sync message data (24 bit field)
Definition: Message.h:168
void assign(const Message &src)
assign
Definition: Message.h:78
uint16_t getRocNumber() const
Returns the number of the sending ROC.
Definition: Message.h:112
Message & operator=(const Message &src)
assign operator
Definition: Message.h:81
uint8_t getSyncEpochLSB() const
For Sync data: Returns LSB of true epoch (1 bit field)
Definition: Message.h:149
uint8_t getSyncChNum() const
For Sync data: Returns sync channel number (2 bit field)
Definition: Message.h:143
void setSysMesData(uint32_t v)
For SysMes data: Set system message data (32 bit field)
Definition: Message.h:223
uint16_t getSyncTs() const
For Sync data: Returns sync time stamp (13 bit field, 2 ns bins)
Definition: Message.h:146