Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
clb_common_header.hh
Go to the documentation of this file.
1 #ifndef DATAQUEUE_DATAFORMATS_CLB_COMMON_HEADER_HH
2 #define DATAQUEUE_DATAFORMATS_CLB_COMMON_HEADER_HH
3 
4 #include <ostream>
5 #include <stdint.h>
6 #include <cassert>
7 #include <cstdlib>
8 #include <arpa/inet.h>
9 
10 #include "utctime.hh"
11 
12 /**
13  * \author cpellegrino
14  */
15 
17 {
18  uint32_t DataType;
19  uint32_t RunNumber;
22  uint32_t DOMIdentifier;
23  uint32_t DOMStatus1;
24  uint32_t DOMStatus2;
25  uint32_t DOMStatus3;
26  uint32_t DOMStatus4;
27 
28  uint32_t dataType() const
29  {
30  return ntohl(DataType);
31  }
32 
33  uint32_t runNumber() const
34  {
35  return ntohl(RunNumber);
36  }
37 
38  uint32_t udpSequenceNumber() const
39  {
40  return ntohl(UDPSequenceNumber);
41  }
42 
44  {
45  return Timestamp;
46  }
47 
48  uint32_t domIdentifier() const
49  {
50  return ntohl(DOMIdentifier);
51  }
52 
53  uint32_t domStatus(int n = 1) const
54  {
55  switch (n) {
56  case 1:
57  return ntohl(DOMStatus1);
58  case 2:
59  return ntohl(DOMStatus2);
60  case 3:
61  return ntohl(DOMStatus3);
62  case 4:
63  return ntohl(DOMStatus4);
64  default:
65  assert(!"Programming error: invalid field requested");
66  abort();
67  }
68  }
69 };
70 
71 inline std::ostream& operator <<(std::ostream& stream, const CLBCommonHeader& header)
72 {
73  return stream << "DataType: " << header.dataType() << '\n'
74  << "RunNumber: " << header.runNumber() << '\n'
75  << "UDPSequenceNumber: " << header.udpSequenceNumber() << '\n'
76  << "Timestamp: \n" << header.timeStamp() << '\n'
77  << "DOMIdentifier: " << header.domIdentifier() << '\n'
78  << "DOMStatus1: " << header.domStatus(1) << '\n'
79  << "DOMStatus2: " << header.domStatus(2) << '\n'
80  << "DOMStatus3: " << header.domStatus(3) << '\n'
81  << "DOMStatus4: " << header.domStatus(4);
82 }
83 
84 typedef uint64_t frame_idx_t;
85 
86 inline
87 int32_t seq_number(
88  CLBCommonHeader const& header,
89  uint64_t start_run_ms,
90  int ts_duration_ms)
91 {
92  return (header.timeStamp().inMilliSeconds() - start_run_ms) / ts_duration_ms;
93 }
94 
95 inline
97  CLBCommonHeader const& header,
98  uint64_t start_run_ms,
99  int ts_duration_ms)
100 {
101  frame_idx_t value = seq_number(header, start_run_ms, ts_duration_ms);
102  value <<= 32;
103  value += header.domIdentifier();
104  return value;
105 }
106 
107 inline
108 uint32_t dom_id(frame_idx_t idx)
109 {
110  frame_idx_t const mask = 0x00000000FFFFFFFF;
111 
112  return idx & mask;
113 }
114 
115 inline
116 bool validTimeStamp(CLBCommonHeader const& header)
117 {
118  const static uint32_t mask = 0x80000000;
119 
120  return header.domStatus() & mask;
121 }
122 
123 inline
124 bool isTrailer(CLBCommonHeader const& header)
125 {
126  const static uint32_t mask = 0x80000000;
127 
128  return header.domStatus(2) & mask;
129 }
130 
131 #endif // DATAQUEUE_DATAFORMATS_CLB_COMMON_HEADER_HH
uint32_t dom_id(frame_idx_t idx)
uint32_t domIdentifier() const
uint32_t runNumber() const
frame_idx_t data2idx(CLBCommonHeader const &header, uint64_t start_run_ms, int ts_duration_ms)
UTCTime timeStamp() const
uint32_t UDPSequenceNumber
uint64_t frame_idx_t
uint32_t domStatus(int n=1) const
bool validTimeStamp(CLBCommonHeader const &header)
uint32_t udpSequenceNumber() const
bool isTrailer(CLBCommonHeader const &header)
int32_t seq_number(CLBCommonHeader const &header, uint64_t start_run_ms, int ts_duration_ms)
uint32_t dataType() const
std::ostream & operator<<(std::ostream &stream, const CLBCommonHeader &header)
uint64_t inMilliSeconds() const
Definition: utctime.hh:27