Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
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 <utility>
5#include <ostream>
6#include <stdint.h>
7#include <cassert>
8#include <cstdlib>
9#include <arpa/inet.h>
10
11#include "utctime.hh"
12
13/**
14 * \author cpellegrino
15 */
16
18{
19 uint32_t DataType;
20 uint32_t RunNumber;
23 uint32_t DOMIdentifier;
24 uint32_t DOMStatus1;
25 uint32_t DOMStatus2;
26 uint32_t DOMStatus3;
27 uint32_t DOMStatus4;
28
29 uint32_t dataType() const
30 {
31 return ntohl(DataType);
32 }
33
34 uint32_t runNumber() const
35 {
36 return ntohl(RunNumber);
37 }
38
39 uint32_t udpSequenceNumber() const
40 {
41 return ntohl(UDPSequenceNumber);
42 }
43
45 {
46 return Timestamp;
47 }
48
49 uint32_t domIdentifier() const
50 {
51 return ntohl(DOMIdentifier);
52 }
53
54 uint32_t domStatus(int n = 1) const
55 {
56 switch (n) {
57 case 1:
58 return ntohl(DOMStatus1);
59 case 2:
60 return ntohl(DOMStatus2);
61 case 3:
62 return ntohl(DOMStatus3);
63 case 4:
64 return ntohl(DOMStatus4);
65 default:
66 assert(!"Programming error: invalid field requested");
67 abort();
68 }
69 }
70};
71
72inline std::ostream& operator <<(std::ostream& stream, const CLBCommonHeader& header)
73{
74 return stream << "DataType: " << header.dataType() << '\n'
75 << "RunNumber: " << header.runNumber() << '\n'
76 << "UDPSequenceNumber: " << header.udpSequenceNumber() << '\n'
77 << "Timestamp: \n" << header.timeStamp() << '\n'
78 << "DOMIdentifier: " << header.domIdentifier() << '\n'
79 << "DOMStatus1: " << header.domStatus(1) << '\n'
80 << "DOMStatus2: " << header.domStatus(2) << '\n'
81 << "DOMStatus3: " << header.domStatus(3) << '\n'
82 << "DOMStatus4: " << header.domStatus(4);
83}
84
85typedef uint64_t frame_idx_t;
86
87inline
89 CLBCommonHeader const& header,
90 uint64_t start_run_ms,
91 int ts_duration_ms)
92{
93 uint64_t const tstamp_ms = header.timeStamp().inMilliSeconds();
94
95 return std::make_pair(
96 (tstamp_ms - start_run_ms) / ts_duration_ms,
97 tstamp_ms > start_run_ms);
98}
99
100inline
102 CLBCommonHeader const& header,
103 uint64_t start_run_ms,
104 int ts_duration_ms)
105{
106 std::pair<uint32_t, bool> const seq_num = seq_number(header, start_run_ms, ts_duration_ms);
107 frame_idx_t value = seq_num.first;
108 value <<= 32;
109 value += header.domIdentifier();
110 return value;
111}
112
113inline
114uint32_t dom_id(frame_idx_t idx)
115{
116 frame_idx_t const mask = 0x00000000FFFFFFFF;
117
118 return idx & mask;
119}
120
121inline
123{
124 const static uint32_t mask = 0x80000000;
125
126 return header.domStatus() & mask;
127}
128
129inline
130bool isTrailer(CLBCommonHeader const& header)
131{
132 const static uint32_t mask = 0x80000000;
133
134 return header.domStatus(2) & mask;
135}
136
137#endif // DATAQUEUE_DATAFORMATS_CLB_COMMON_HEADER_HH
std::ostream & operator<<(std::ostream &stream, const CLBCommonHeader &header)
std::pair< uint32_t, bool > seq_number(CLBCommonHeader const &header, uint64_t start_run_ms, int ts_duration_ms)
bool isTrailer(CLBCommonHeader const &header)
frame_idx_t data2idx(CLBCommonHeader const &header, uint64_t start_run_ms, int ts_duration_ms)
bool validTimeStamp(CLBCommonHeader const &header)
uint64_t frame_idx_t
uint32_t dom_id(frame_idx_t idx)
uint32_t dataType() const
uint32_t udpSequenceNumber() const
UTCTime timeStamp() const
uint32_t runNumber() const
uint32_t domIdentifier() const
uint32_t domStatus(int n=1) const
uint64_t inMilliSeconds() const
Definition utctime.hh:27