Jpp
19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
software
DataQueue
DataFormats
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
17
struct
CLBCommonHeader
18
{
19
uint32_t
DataType
;
20
uint32_t
RunNumber
;
21
uint32_t
UDPSequenceNumber
;
22
UTCTime
Timestamp
;
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
44
UTCTime
timeStamp
()
const
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
72
inline
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
85
typedef
uint64_t
frame_idx_t
;
86
87
inline
88
std::pair<uint32_t, bool>
seq_number
(
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
100
inline
101
frame_idx_t
data2idx
(
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
113
inline
114
uint32_t
dom_id
(
frame_idx_t
idx)
115
{
116
frame_idx_t
const
mask = 0x00000000FFFFFFFF;
117
118
return
idx & mask;
119
}
120
121
inline
122
bool
validTimeStamp
(
CLBCommonHeader
const
& header)
123
{
124
const
static
uint32_t mask = 0x80000000;
125
126
return
header.
domStatus
() & mask;
127
}
128
129
inline
130
bool
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::pair
Definition
JSTDTypes.hh:18
operator<<
std::ostream & operator<<(std::ostream &stream, const CLBCommonHeader &header)
Definition
clb_common_header.hh:72
seq_number
std::pair< uint32_t, bool > seq_number(CLBCommonHeader const &header, uint64_t start_run_ms, int ts_duration_ms)
Definition
clb_common_header.hh:88
isTrailer
bool isTrailer(CLBCommonHeader const &header)
Definition
clb_common_header.hh:130
data2idx
frame_idx_t data2idx(CLBCommonHeader const &header, uint64_t start_run_ms, int ts_duration_ms)
Definition
clb_common_header.hh:101
validTimeStamp
bool validTimeStamp(CLBCommonHeader const &header)
Definition
clb_common_header.hh:122
frame_idx_t
uint64_t frame_idx_t
Definition
clb_common_header.hh:85
dom_id
uint32_t dom_id(frame_idx_t idx)
Definition
clb_common_header.hh:114
CLBCommonHeader
Definition
clb_common_header.hh:18
CLBCommonHeader::DOMStatus4
uint32_t DOMStatus4
Definition
clb_common_header.hh:27
CLBCommonHeader::dataType
uint32_t dataType() const
Definition
clb_common_header.hh:29
CLBCommonHeader::DOMIdentifier
uint32_t DOMIdentifier
Definition
clb_common_header.hh:23
CLBCommonHeader::udpSequenceNumber
uint32_t udpSequenceNumber() const
Definition
clb_common_header.hh:39
CLBCommonHeader::RunNumber
uint32_t RunNumber
Definition
clb_common_header.hh:20
CLBCommonHeader::timeStamp
UTCTime timeStamp() const
Definition
clb_common_header.hh:44
CLBCommonHeader::DataType
uint32_t DataType
Definition
clb_common_header.hh:19
CLBCommonHeader::UDPSequenceNumber
uint32_t UDPSequenceNumber
Definition
clb_common_header.hh:21
CLBCommonHeader::DOMStatus2
uint32_t DOMStatus2
Definition
clb_common_header.hh:25
CLBCommonHeader::Timestamp
UTCTime Timestamp
Definition
clb_common_header.hh:22
CLBCommonHeader::DOMStatus1
uint32_t DOMStatus1
Definition
clb_common_header.hh:24
CLBCommonHeader::runNumber
uint32_t runNumber() const
Definition
clb_common_header.hh:34
CLBCommonHeader::domIdentifier
uint32_t domIdentifier() const
Definition
clb_common_header.hh:49
CLBCommonHeader::DOMStatus3
uint32_t DOMStatus3
Definition
clb_common_header.hh:26
CLBCommonHeader::domStatus
uint32_t domStatus(int n=1) const
Definition
clb_common_header.hh:54
UTCTime
Definition
utctime.hh:13
UTCTime::inMilliSeconds
uint64_t inMilliSeconds() const
Definition
utctime.hh:27
utctime.hh
Generated by
1.12.0