Jpp  17.3.2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Attributes | List of all members
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 ( 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_selected
unsigned int m_delta_ts
uint32_t UDPSequenceNumber
unsigned int m_payload_size
std::vector< CLBCommonHeader > m_headers
unsigned int const ttdc
Definition: datatypes.cpp:7
unsigned int m_max_seqnumber
uint32_t Tics
Definition: utctime.hh:15
uint32_t Sec
Definition: utctime.hh:14

Member Function Documentation

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 }
unsigned int m_selected
unsigned int m_delta_ts
uint32_t UDPSequenceNumber
unsigned int m_payload_size
std::vector< CLBCommonHeader > m_headers
bool isTrailer(CLBCommonHeader const &header)
unsigned int m_max_seqnumber
uint32_t Tics
Definition: utctime.hh:15
uint32_t Sec
Definition: utctime.hh:14
void swap_endianness(CLBCommonHeader &header)

Member Data Documentation

unsigned int FrameGenerator::m_max_seqnumber
private

Definition at line 19 of file frame_generator.hh.

unsigned int FrameGenerator::m_delta_ts
private

Definition at line 20 of file frame_generator.hh.

unsigned int FrameGenerator::m_payload_size
private

Definition at line 21 of file frame_generator.hh.

unsigned int FrameGenerator::m_selected
private

Definition at line 22 of file frame_generator.hh.

timeval FrameGenerator::m_tv
private

Definition at line 23 of file frame_generator.hh.

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: