Files
openairinterface5g/radio/zmq/ring_buffer.h
T
Bartosz Podrygajlo 46c120651f ZMQ radio
This commit introduces ZMQ-based radio library. Each pair of RX/TX antennas is
represented by a ZMQ REQ/REP socket pair which streams continuous IQ samples
from radio start until stop.

Usage:
Simplest configuration is to connect OAI NR UE to OAI GNB with the same number
of antennas - by inverting the RX and TX channels in ZMQ radio configuration the
gNBs TX is mapped to UEs RX antennas and vice versa.
2026-04-22 22:34:02 +02:00

47 lines
1.1 KiB
C++

/*
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
*/
#pragma once
#include <vector>
#include <mutex>
#include <memory>
#include "common/platform_types.h"
// A basic cirular sample buffer class
class ring_buffer {
private:
std::unique_ptr<cf_t[]> buffer_;
size_t head_ = 0;
size_t tail_ = 0;
size_t size_ = 0;
size_t max_size_;
public:
ring_buffer(size_t max_size = 614400);
size_t push_samples(const cf_t *samples, size_t nsamps);
size_t push_zeros(size_t num_zeros);
size_t pop_samples(cf_t *samples, size_t num_samples);
void reset();
void clear_samples();
size_t size() const;
};
// A thread-safe wrapper around ring_buffer that counts overflows
class overflow_buffer {
ring_buffer buffer_;
size_t zeros_to_send_;
std::mutex mutex_;
public:
overflow_buffer(size_t max_size = 614400) : buffer_(max_size), zeros_to_send_(0)
{
}
size_t push_samples(const cf_t *samples, size_t nsamps);
size_t push_zeros(size_t num_zeros);
size_t pop_samples(cf_t *samples, size_t num_samples);
void reset();
void clear_samples();
size_t size();
};