11 static const int CHNUM = 2;
12 static const int packet_size = 8198;
13 static const int packet_len = packet_size/2;
24 int16_t header[packet_len] = {};
28 int try_push(
int chan, uint64_t** sizes, int16_t *
data,
int n,
int index);
31 void push(
int chan, uint64_t** sizes, int16_t *
data,
int n);
34 int try_pull(
int chan, uint64_t*& sizes, int16_t *&
data);
37 int pull(
bool *timeout,
int chan, uint64_t*& sizes, int16_t *&
data);
40 int32_t make_int32_t(int16_t p0, int16_t p1){
41 return (p1 & 0xFFFF) << 16 | p0 & 0xFFFF;
46 std::atomic<uint32_t> occupancy_size[CHNUM];
47 std::atomic<uint32_t> occupancy_data[CHNUM];
70 std::atomic<tail> tail_[CHNUM];
72 std::atomic<head> head_[CHNUM];
75 tail current_tail[CHNUM];
76 int32_t current_tail_size[CHNUM];
77 int32_t current_tail_data[CHNUM];
79 head current_head[CHNUM];
80 int32_t current_head_size[CHNUM];
81 int32_t current_head_data[CHNUM];
84 int32_t write_num_size[CHNUM];
85 int32_t write_num_data[CHNUM];
86 int32_t read_num_size[CHNUM];
87 int32_t read_num_data[CHNUM];
90 static const uint SIZE_INDEX = 0;
91 static const uint ACC_SIZE_INDEX = 1;
94 static const int32_t INT32_T_MAX = 2147483647;
97 static const uint64_t RING_BUFFER_NUM = 65536;
100 static const uint32_t RING_BUFFER_LEN = RING_BUFFER_NUM*packet_len;
104 uint64_t* size_buffer[CHNUM];
106 int16_t* data_buffer[CHNUM];
109 int64_t increment(
int n,
int x, uint32_t buffer_size){
110 return (n + x) % buffer_size;