13 #include <pxd/dataobjects/PXDErrorFlags.h>
15 #include <boost/spirit/home/support/detail/endian.hpp>
30 using boost::spirit::endian::ubig16_t;
31 using boost::spirit::endian::ubig32_t;
32 using Belle2::PXD::PXDError::PXDErrorFlags;
38 struct dhc_frame_header_word0 {
43 inline ubig16_t
getData(
void)
const
50 return (
data & 0x7800) >> 11;
55 return (
data & 0x8000) >> 15;
72 const ubig16_t trigger_nr_lo;
73 const ubig16_t trigger_nr_hi;
74 const ubig16_t time_tag_lo_and_type;
75 const ubig16_t time_tag_mid;
76 const ubig16_t time_tag_hi;
77 const ubig16_t run_subrun;
78 const ubig16_t exp_run;
79 const unsigned int crc32;
82 inline unsigned short getRunSubrun(
void)
const {
return run_subrun; };
83 inline unsigned short getExpRun(
void)
const {
return exp_run; };
84 inline unsigned short getEventNrLo(
void)
const {
return trigger_nr_lo; };
85 inline unsigned short getEventNrHi(
void)
const {
return trigger_nr_hi; };
87 bool isFakedData(
void)
const;
88 inline unsigned int getFixedSize(
void)
const
92 void print(
void)
const;
93 inline unsigned short get_active_dhe_mask(
void)
const {
return word0.getMisc() & 0x1F;};
94 inline unsigned short get_dhc_id(
void)
const {
return (word0.getMisc() >> 5) & 0xF;};
95 inline unsigned short get_subrun(
void)
const {
return run_subrun & 0x00FF;};
96 inline unsigned short get_run(
void)
const {
return (((run_subrun & 0xFF00) >> 8) | ((exp_run & 0x003F) << 8));};
97 inline unsigned short get_experiment(
void)
const {
return (exp_run & 0xFFC0) >> 6 ;};
98 inline unsigned short get_gated_flag(
void)
const {
return (word0.getMisc() & 0x200) != 0;};
99 inline unsigned short get_gated_isher(
void)
const {
return (word0.getMisc() & 0x400) != 0; ;};
106 struct dhc_dhe_start_frame {
107 const dhc_frame_header_word0 word0;
108 const ubig16_t trigger_nr_lo;
109 const ubig16_t trigger_nr_hi;
110 const ubig16_t dhe_time_tag_lo;
111 const ubig16_t dhe_time_tag_hi;
112 const ubig16_t sfnr_offset;
113 const unsigned int crc32;
116 inline unsigned short getEventNrLo(
void)
const {
return trigger_nr_lo; };
117 inline unsigned short getEventNrHi(
void)
const {
return trigger_nr_hi; };
118 inline unsigned short getStartFrameNr(
void)
const {
return (sfnr_offset & 0xFC00) >> 10; };
119 inline unsigned short getTriggerGate(
void)
const {
return sfnr_offset & 0xFF; };
120 inline unsigned int getFixedSize(
void)
const {
return 16; };
122 void print(
void)
const;
123 inline unsigned int getActiveDHPMask(
void)
const {
return word0.getMisc() & 0xF;};
124 inline unsigned int getDHEId(
void)
const {
return (word0.getMisc() >> 4) & 0x3F;};
132 struct dhc_commode_frame {
133 const dhc_frame_header_word0 word0;
134 const ubig16_t trigger_nr_lo;
135 const ubig16_t data[96];
136 const unsigned int crc32;
139 inline unsigned short getEventNrLo(
void)
const {
return trigger_nr_lo; };
140 inline unsigned int getFixedSize(
void)
const {
return (4 + 96) * 2; };
141 inline unsigned int getDHEId(
void)
const {
return (word0.getMisc() >> 4) & 0x3F;};
150 const ubig16_t trigger_nr_lo;
154 inline unsigned short getEventNrLo(
void)
const {
return trigger_nr_lo; };
155 void print(
void)
const;
156 inline unsigned short getDHEId(
void)
const {
return (word0.getMisc() >> 4) & 0x3F;};
157 inline unsigned short getDHPPort(
void)
const {
return (word0.getMisc()) & 0x3;};
158 inline bool getDataReformattedFlag(
void)
const {
return (word0.getMisc() >> 3) & 0x1;};
172 struct dhc_direct_readout_frame_zsd :
public dhc_direct_readout_frame {
179 struct dhc_onsen_trigger_frame {
180 const dhc_frame_header_word0 word0;
181 const ubig16_t trignr0;
182 const ubig32_t magic1;
188 const unsigned int crc32;
190 inline unsigned int getFixedSize(
void)
const {
return 32; };
191 inline unsigned short get_trig_nr0(
void)
const {
return trignr0; };
192 inline unsigned int get_trig_nr1(
void)
const {
return trignr1; };
193 inline unsigned int get_trig_nr2(
void)
const {
return trignr2; };
194 inline unsigned int get_trig_tag1(
void)
const {
return trigtag1; };
195 inline unsigned int get_trig_tag2(
void)
const {
return trigtag2; };
196 inline unsigned short get_subrun1(
void)
const {
return trigtag1 & 0xFF;};
197 inline unsigned short get_run1(
void)
const {
return ((
trigtag1 & 0x003FFF00) >> 8);};
198 inline unsigned short get_experiment1(
void)
const {
return (
trigtag1 & 0xFFC00000) >> 22 ;};
199 inline unsigned short get_subrun2(
void)
const {
return trigtag2 & 0xFF;};
200 inline unsigned short get_run2(
void)
const {
return ((
trigtag2 & 0x003FFF00) >> 8);};
201 inline unsigned short get_experiment2(
void)
const {
return (
trigtag2 & 0xFFC00000) >> 22 ;};
202 void print(
void)
const;
203 PXDError::PXDErrorFlags check_error(
bool ignore_datcon_flag =
false,
bool ignore_hltroi_magic_flag =
false,
204 bool ignore_merger_mm_flag =
false)
const;
206 inline bool is_fake_datcon(
void)
const {
return (
magic2 == 0xCAFE0000 &&
trignr2 == 0x00000000 &&
trigtag2 == 0x00000000);};
207 inline bool is_Accepted(
void)
const {
return (magic1 & 0x8000) != 0; };
208 inline bool is_SendROIs(
void)
const {
return (magic1 & 0x2000) != 0; }
209 inline bool is_SendUnfiltered(
void)
const {
return (magic1 & 0x4000) != 0; };
216 struct dhc_onsen_roi_frame {
217 const dhc_frame_header_word0 word0;
223 inline unsigned short get_trig_nr0(
void)
const {
return trignr0; };
224 PXDError::PXDErrorFlags check_error(
int length,
bool ignore_inv_size_flag =
false)
const;
225 void print(
void)
const;
227 inline int getMinSize(
void)
const {
return 4 + 4 + 4;};
228 unsigned int check_inner_crc(
unsigned int )
const
243 const ubig16_t trigger_nr_lo;
244 const unsigned int crc32;
247 inline unsigned int getFixedSize(
void)
const {
return 8; };
248 void print(
void)
const;
249 inline unsigned short getDHEId(
void)
const {
return (word0.getMisc() >> 4) & 0x3F;};
250 inline unsigned short getDHPPort(
void)
const {
return (word0.getMisc()) & 0x3;};
251 unsigned short getErrorBits(
void)
const;
260 const ubig16_t trigger_nr_lo;
261 const ubig32_t wordsinevent;
262 const ubig32_t errorinfo;
263 const unsigned int crc32;
266 unsigned int get_words(
void)
const {
return wordsinevent; }
267 inline unsigned int getFixedSize(
void)
const {
return 16; };
268 bool isFakedData(
void)
const;
269 void print(
void)
const;
270 inline unsigned int get_dhc_id(
void)
const {
return (word0.getMisc() >> 5) & 0xF;};
271 inline unsigned int getErrorInfo(
void)
const {
return errorinfo;};
278 struct dhc_dhe_end_frame {
279 const dhc_frame_header_word0 word0;
280 const ubig16_t trigger_nr_lo;
282 const ubig16_t wordsineventhi;
284 const unsigned int crc32;
287 unsigned int get_words(
void)
const {
return wordsineventlo | ((
unsigned int)wordsineventhi << 16); }
288 inline unsigned int getFixedSize(
void)
const {
return 16; };
289 void print(
void)
const;
290 inline unsigned int getDHEId(
void)
const {
return (word0.getMisc() >> 4) & 0x3F;};
291 inline unsigned int getErrorInfo(
void)
const {
return errorinfo;};
292 unsigned int getErrorStateMachineDHP(
int dhpid)
const;
293 unsigned int getErrorStateMachineStartDHP(
int dhpid)
const;
294 unsigned int getErrorStateMachineEndDHP(
int dhpid)
const;
323 unsigned int datasize;
334 int getFrameType(
void)
338 void set(
const void* d,
unsigned int t)
344 void set(
const void* d,
unsigned int t,
unsigned int l)
350 void set(
const void* d)
353 type =
reinterpret_cast <const dhc_frame_header_word0*
>(data)->getFrameType();
356 inline unsigned int getEventNrLo(
void)
const {
return ((ubig16_t*)data)[1]; };
359 PXDError::PXDErrorFlags check_crc(
bool ignore_crc_flag =
false);