Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
FrameGenerator Class Reference

#include <frame_generator.hh>

Public Member Functions

 FrameGenerator (const DOMRange_t &dom_range, unsigned int time_slice_duration, unsigned int run_number, unsigned int MTU, unsigned int hitR)
 
void getNext (raw_data_t &target)
 

Private Attributes

unsigned int m_max_seqnumber
 
unsigned int m_delta_ts
 
unsigned int m_payload_size
 
unsigned int m_selected
 
timeval m_tv
 
std::vector< CLBCommonHeaderm_headers
 

Detailed Description

Definition at line 17 of file frame_generator.hh.

Constructor & Destructor Documentation

◆ FrameGenerator()

FrameGenerator::FrameGenerator ( const DOMRange_t & dom_range,
unsigned int time_slice_duration,
unsigned int run_number,
unsigned int MTU,
unsigned int hitR )

Definition at line 25 of file frame_generator.cc.

31 :
32 m_delta_ts(time_slice_duration),
33 m_selected((srand(time(0)), rand() % dom_range.size()))
34{
35 m_headers.reserve(dom_range.size());
36
37 for (unsigned int i = 0; i < dom_range.size(); i++) {
38 CLBCommonHeader header;
39 header.RunNumber = htonl(run_number);
40 header.DataType = htonl(ttdc);
41 header.UDPSequenceNumber = 0;
42 header.Timestamp.Sec = time(0);
43 header.Timestamp.Tics = 0;
44 header.DOMIdentifier = htonl(dom_range[i]);
45 header.DOMStatus1 = 128;
46 header.DOMStatus2 = 0;
47 header.DOMStatus3 = 0;
48 header.DOMStatus4 = 0;
49
50 m_headers.push_back(header);
51 }
52
53// max seqnumber = NPMT * kHz * Bytes/Hit * ms TS duration / (MTU - size of CLB Common Header)
54 m_max_seqnumber = 31 * hitR * 6 * time_slice_duration / (MTU - sizeof(CLBCommonHeader)) + 1;
55 m_payload_size = 6 * ((MTU - sizeof(CLBCommonHeader)) / 6);
56 m_tv.tv_sec = 0;
57 m_tv.tv_usec = 0;
58}
unsigned int m_payload_size
std::vector< CLBCommonHeader > m_headers
unsigned int m_selected
unsigned int m_max_seqnumber
unsigned int m_delta_ts
static const unsigned int ttdc
uint32_t Sec
Definition utctime.hh:14
uint32_t Tics
Definition utctime.hh:15

Member Function Documentation

◆ getNext()

void FrameGenerator::getNext ( raw_data_t & target)

Definition at line 60 of file frame_generator.cc.

61{
62 ++m_selected;
63 m_selected %= m_headers.size();
64
65 CLBCommonHeader& common_header = m_headers[m_selected];
66
67 common_header.UDPSequenceNumber = common_header.UDPSequenceNumber + 1;
68
69 if (common_header.UDPSequenceNumber == m_max_seqnumber) {
70 common_header.DOMStatus2 = 128;
71
72 target.resize(sizeof(common_header));
73 } else if (common_header.UDPSequenceNumber == m_max_seqnumber + 1) {
74 if (isTrailer(common_header)) {
75 common_header.UDPSequenceNumber = 0;
76 common_header.DOMStatus2 = 0;
77 common_header.Timestamp.Tics += 62500 * m_delta_ts;
78 if (common_header.Timestamp.Tics >= 62500000) {
79 ++common_header.Timestamp.Sec;
80 common_header.Timestamp.Tics = 0;
81 }
82 } else {
83 assert(!"Programming error: UDPSequenceNumber and trailer not respected.");
84 }
85
86 target.resize(sizeof(CLBCommonHeader) + m_payload_size);
87 }
88
89 memcpy(target.data(), &common_header, sizeof(CLBCommonHeader));
90
92 *static_cast<CLBCommonHeader*>(
93 static_cast<void*>(
94 target.data()
95 )
96 )
97 );
98
99 if (common_header.UDPSequenceNumber == 0 && m_selected == 0) {
100 int sleep_time = m_delta_ts * 1000;
101
102 if (m_tv.tv_sec) {
103 timeval tv;
104 gettimeofday(&tv, 0);
105 sleep_time -=
106 (tv.tv_sec - m_tv.tv_sec) * 1000000
107 + (tv.tv_usec - m_tv.tv_usec);
108 }
109
110 if (sleep_time > 0) {
111 usleep(sleep_time);
112 }
113
114 gettimeofday(&m_tv, 0);
115 }
116}
bool isTrailer(CLBCommonHeader const &header)
void swap_endianness(CLBCommonHeader &header)

Member Data Documentation

◆ m_max_seqnumber

unsigned int FrameGenerator::m_max_seqnumber
private

Definition at line 19 of file frame_generator.hh.

◆ m_delta_ts

unsigned int FrameGenerator::m_delta_ts
private

Definition at line 20 of file frame_generator.hh.

◆ m_payload_size

unsigned int FrameGenerator::m_payload_size
private

Definition at line 21 of file frame_generator.hh.

◆ m_selected

unsigned int FrameGenerator::m_selected
private

Definition at line 22 of file frame_generator.hh.

◆ m_tv

timeval FrameGenerator::m_tv
private

Definition at line 23 of file frame_generator.hh.

◆ m_headers

std::vector<CLBCommonHeader> FrameGenerator::m_headers
private

Definition at line 24 of file frame_generator.hh.


The documentation for this class was generated from the following files: