Agora  1.2.0
Agora project
packet_txrx.h
Go to the documentation of this file.
1 
7 #ifndef PACKETTXRX_H_
8 #define PACKETTXRX_H_
9 
10 #include <vector>
11 
12 #include "common_typedef_sdk.h"
13 #include "concurrentqueue.h"
14 #include "config.h"
15 #include "message.h"
16 #include "txrx_worker.h"
17 
18 namespace AgoraTxRx {
20 }
21 
34 class PacketTxRx {
35  public:
36  PacketTxRx(AgoraTxRx::TxRxTypes type, Config* const cfg, size_t core_offset,
39  moodycamel::ProducerToken** notify_producer_tokens,
40  moodycamel::ProducerToken** tx_producer_tokens,
41  Table<char>& rx_buffer, size_t packet_num_in_buffer,
42  Table<size_t>& frame_start, char* tx_buffer);
43  virtual ~PacketTxRx();
44 
51  virtual bool StartTxRx(Table<complex_float>& calib_dl_buffer,
52  Table<complex_float>& calib_ul_buffer);
53 
61  size_t AntNumToWorkerId(size_t ant_num) const;
62 
63  protected:
64  bool StopTxRx();
65  //Align all worker threads to common start event (this call)
66  void NotifyWorkers();
67  inline size_t NumberTotalWorkers() const { return worker_thread_count_; }
68  inline size_t NumberTotalInterfaces() const {
69  return interface_to_worker_.size();
70  }
71  inline const size_t& InterfaceToWorker(size_t interface) const {
72  return interface_to_worker_.at(interface);
73  }
74  inline size_t NumChannels() const { return num_channels_; }
75 
76  std::vector<std::unique_ptr<TxRxWorker>> worker_threads_;
77  Config* const cfg_;
78 
79  const size_t core_offset_;
82 
83  //Producer tokens for posting messages to event_notify_q_
85  //Producers assigned to tx_pending_q (used for retrieving messages)
87 
89  std::mutex mutex_;
90  std::condition_variable cond_;
91  std::atomic<bool> proceed_;
92 
93  private:
94  virtual bool CreateWorker(size_t tid, size_t interface_count,
95  size_t interface_offset, size_t* rx_frame_start,
96  std::vector<RxPacket>& rx_memory,
97  std::byte* const tx_memory) = 0;
98 
99  // Dimension 1: socket_thread
100  // Dimension 2: rx_packet
101  std::vector<std::vector<RxPacket>> rx_packets_;
104 
106  std::vector<size_t> interface_to_worker_;
109 };
110 
111 #endif // PACKETTXRX_H_
AgoraTxRx
Definition: packet_txrx.h:18
PacketTxRx::interface_to_worker_
std::vector< size_t > interface_to_worker_
Definition: packet_txrx.h:106
PacketTxRx::cond_
std::condition_variable cond_
Definition: packet_txrx.h:90
Config::SocketThreadNum
size_t SocketThreadNum() const
Definition: config.h:182
fmt::v8::detail::byte
byte
Definition: core.h:388
PacketTxRx::mutex_
std::mutex mutex_
Owned by this class and shared with the workers.
Definition: packet_txrx.h:89
PacketTxRx::worker_threads_
std::vector< std::unique_ptr< TxRxWorker > > worker_threads_
Definition: packet_txrx.h:76
AgoraTxRx::kUserEquiptment
@ kUserEquiptment
Definition: packet_txrx.h:19
moodycamel::ProducerToken
Definition: concurrentqueue.h:630
Config::Running
void Running(bool value)
Definition: config.h:33
PacketTxRx::type_
const AgoraTxRx::TxRxTypes type_
Definition: packet_txrx.h:107
ant_num
for ant_num
Definition: parse_all_dl.m:12
PacketTxRx::frame_start_
Table< size_t > & frame_start_
Definition: packet_txrx.h:103
AgoraTxRx::TxRxTypes
TxRxTypes
Definition: packet_txrx.h:19
Config::UeSocketThreadNum
size_t UeSocketThreadNum() const
Definition: config.h:187
kWorkerStartWaitMs
static constexpr size_t kWorkerStartWaitMs
Definition: packet_txrx.cc:12
Config::NumChannels
size_t NumChannels() const
Definition: config.h:98
PacketTxRx::tx_producer_tokens_
moodycamel::ProducerToken ** tx_producer_tokens_
Definition: packet_txrx.h:86
unused
#define unused(x)
Definition: utils.h:14
PacketTxRx::~PacketTxRx
virtual ~PacketTxRx()
Definition: packet_txrx.cc:107
PacketTxRx::CreateWorker
virtual bool CreateWorker(size_t tid, size_t interface_count, size_t interface_offset, size_t *rx_frame_start, std::vector< RxPacket > &rx_memory, std::byte *const tx_memory)=0
PacketTxRx::PacketTxRx
PacketTxRx(AgoraTxRx::TxRxTypes type, Config *const cfg, size_t core_offset, moodycamel::ConcurrentQueue< EventData > *event_notify_q, moodycamel::ConcurrentQueue< EventData > *tx_pending_q, moodycamel::ProducerToken **notify_producer_tokens, moodycamel::ProducerToken **tx_producer_tokens, Table< char > &rx_buffer, size_t packet_num_in_buffer, Table< size_t > &frame_start, char *tx_buffer)
Definition: packet_txrx.cc:15
packet_txrx.h
Common definations for PacketTxRx. Including datapath functions for communicating with simulators.
PacketTxRx::StopTxRx
bool StopTxRx()
Definition: packet_txrx.cc:109
PacketTxRx::cfg_
Config *const cfg_
Definition: packet_txrx.h:77
AGORA_LOG_TRACE
#define AGORA_LOG_TRACE(...)
Definition: logger.h:92
PacketTxRx::proceed_
std::atomic< bool > proceed_
Definition: packet_txrx.h:91
Table< char >
PacketTxRx::tx_memory_
std::byte *const tx_memory_
Definition: packet_txrx.h:102
kNotifyWaitMs
static constexpr size_t kNotifyWaitMs
Definition: packet_txrx.cc:11
Config::UeNum
size_t UeNum() const
Definition: config.h:40
PacketTxRx::NotifyWorkers
void NotifyWorkers()
Definition: packet_txrx.cc:173
PacketTxRx::worker_thread_count_
size_t worker_thread_count_
Definition: packet_txrx.h:105
message.h
Self defined functions for message storage and passing.
PacketTxRx::NumberTotalWorkers
size_t NumberTotalWorkers() const
Definition: packet_txrx.h:67
PacketTxRx::rx_packets_
std::vector< std::vector< RxPacket > > rx_packets_
Definition: packet_txrx.h:101
Packet
Definition: message.h:164
PacketTxRx::StartTxRx
virtual bool StartTxRx(Table< complex_float > &calib_dl_buffer, Table< complex_float > &calib_ul_buffer)
Start the network I/O threads.
Definition: packet_txrx.cc:117
PacketTxRx::NumberTotalInterfaces
size_t NumberTotalInterfaces() const
Definition: packet_txrx.h:68
PacketTxRx
Implementations of this class provide packet I/O for Agora.
Definition: packet_txrx.h:34
PacketTxRx::AntNumToWorkerId
size_t AntNumToWorkerId(size_t ant_num) const
Convert the antenna id to txrx worker id.
Definition: packet_txrx.cc:169
moodycamel::ConcurrentQueue< EventData >
PacketTxRx::event_notify_q_
moodycamel::ConcurrentQueue< EventData > * event_notify_q_
Definition: packet_txrx.h:80
kWorkerStartWaitMsMax
static constexpr size_t kWorkerStartWaitMsMax
Definition: packet_txrx.cc:13
frame_start
frame_start
Definition: parse_dl_file.m:6
PacketTxRx::notify_producer_tokens_
moodycamel::ProducerToken ** notify_producer_tokens_
Definition: packet_txrx.h:84
Config::NumUeChannels
size_t NumUeChannels() const
Definition: config.h:99
Config
Definition: config.h:26
AGORA_LOG_INFO
#define AGORA_LOG_INFO(...)
Definition: logger.h:62
std
Definition: json.hpp:5213
AGORA_LOG_FRAME
#define AGORA_LOG_FRAME(...)
Definition: logger.h:72
AGORA_LOG_WARN
#define AGORA_LOG_WARN(...)
Definition: logger.h:53
PacketTxRx::core_offset_
const size_t core_offset_
Definition: packet_txrx.h:79
config.h
Declaration file for the configuration class which importants json configuration values into class va...
PacketTxRx::InterfaceToWorker
const size_t & InterfaceToWorker(size_t interface) const
Definition: packet_txrx.h:71
Config::PacketLength
size_t PacketLength() const
Definition: config.h:238
txrx_worker.h
txrx worker thread definition. This is the parent / interface
Config::NumRadios
size_t NumRadios() const
Definition: config.h:95
PacketTxRx::num_channels_
size_t num_channels_
Definition: packet_txrx.h:108
concurrentqueue.h
PacketTxRx::tx_pending_q_
moodycamel::ConcurrentQueue< EventData > * tx_pending_q_
Definition: packet_txrx.h:81
AgoraTxRx::kBaseStation
@ kBaseStation
Definition: packet_txrx.h:19
fmt::v8::detail::type
type
Definition: core.h:1131
PacketTxRx::NumChannels
size_t NumChannels() const
Definition: packet_txrx.h:74