11 #include "STMDAQ-TestBeam/utils/dataVars.hh"
13 #include "STMDAQ-TestBeam/utils/UDPsocket.hh"
28 int try_push(
int chan, int16_t *
data,
int n);
31 void push(
int chan, int16_t *
data,
int n);
34 uint64_t try_pull(
int chan, int16_t *&
data);
37 uint64_t pull(
bool *timeout,
int chan, int16_t *&
data);
40 int32_t make_int32_t(int16_t p0, int16_t p1){
41 return (p1 & 0xFFFF) << 16 | p0 & 0xFFFF;
70 std::atomic<int64_t> tail[CHNUM];
72 std::atomic<int64_t> head[CHNUM];
74 std::atomic<int64_t> occupancy[CHNUM];
86 int64_t current_tail[CHNUM];
87 int64_t current_head[CHNUM];
90 int64_t write_num[CHNUM];
91 int64_t read_num[CHNUM];
102 static const int32_t INT32_T_MAX = 2147483647;
106 static const int64_t RING_BUFFER_NUM = pow(2,17);
109 static const int64_t RING_BUFFER_LEN = RING_BUFFER_NUM*UDPsocket::MAX_UDP_LEN;
114 int16_t* data_buffer[CHNUM];
117 int64_t increment(
int n,
int x){
118 return (n + x) % RING_BUFFER_LEN;