Agora  1.2.0
Agora project
TxRxWorkerHw Class Reference

#include <txrx_worker_hw.h>

Inheritance diagram for TxRxWorkerHw:
Collaboration diagram for TxRxWorkerHw:

Public Member Functions

 TxRxWorkerHw (size_t core_offset, size_t tid, size_t interface_count, size_t interface_offset, Config *const config, size_t *rx_frame_start, moodycamel::ConcurrentQueue< EventData > *event_notify_q, moodycamel::ConcurrentQueue< EventData > *tx_pending_q, moodycamel::ProducerToken &tx_producer, moodycamel::ProducerToken &notify_producer, std::vector< RxPacket > &rx_memory, std::byte *const tx_memory, std::mutex &sync_mutex, std::condition_variable &sync_cond, std::atomic< bool > &can_proceed, RadioConfig &radio_config)
 
 TxRxWorkerHw ()=delete
 
 ~TxRxWorkerHw () final
 
void DoTxRx () final
 
- Public Member Functions inherited from TxRxWorker
 TxRxWorker (size_t core_offset, size_t tid, size_t interface_count, size_t interface_offset, size_t channels_per_interface, Config *const config, size_t *rx_frame_start, moodycamel::ConcurrentQueue< EventData > *event_notify_q, moodycamel::ConcurrentQueue< EventData > *tx_pending_q, moodycamel::ProducerToken &tx_producer, moodycamel::ProducerToken &notify_producer, std::vector< RxPacket > &rx_memory, std::byte *const tx_memory, std::mutex &sync_mutex, std::condition_variable &sync_cond, std::atomic< bool > &can_proceed)
 
 TxRxWorker ()=delete
 
virtual ~TxRxWorker ()
 
virtual void Start ()
 
virtual void Stop ()
 
size_t Id () const
 
bool Started () const
 
bool Running () const
 

Private Member Functions

size_t DoTx (long long time0)
 
std::vector< RxPacket * > DoRx (size_t interface_id, size_t &global_frame_id, size_t &global_symbol_id)
 
void ScheduleTxInit (size_t frames_to_schedule, long long time0)
 
void TxDownlinkZeros (size_t frame_id, size_t radio_id, long long time0)
 
void TxReciprocityCalibPilots (size_t frame_id, size_t radio_id, long long time0)
 
void TxBeaconHw (size_t frame_id, size_t interface_id, long long time0)
 
bool IsTxSymbolNext (size_t radio_id, size_t current_symbol)
 
Radio::TxFlags GetTxFlags (size_t radio_id, size_t tx_symbol_id)
 
long long int GetHwTime ()
 
bool IsRxSymbol (size_t interface, size_t symbol_id)
 
void InitRxStatus ()
 
void ResetRxStatus (size_t interface, bool reuse_memory)
 
TxRxWorkerRx::RxParameters UpdateRxInterface (const TxRxWorkerRx::RxParameters &last_rx)
 Returns the next symbol and interface. More...
 
void PrintRxSymbolTiming (std::vector< TxRxWorkerRx::RxTimeTracker > &rx_times, size_t current_frame, size_t current_symbol, size_t next_symbol)
 

Private Attributes

RadioConfigradio_config_
 
size_t program_start_ticks_
 
const double freq_ghz_
 
std::vector< std::complex< int16_t > > zeros_
 
std::vector< TxRxWorkerRx::RxStatusTrackerrx_status_
 
std::vector< bool > first_symbol_
 

Additional Inherited Members

- Static Public Attributes inherited from TxRxWorker
static constexpr bool kDebugTxMemory = false
 
- Protected Member Functions inherited from TxRxWorker
void WaitSync ()
 Using a latch might be better but adds c++20 requirement. More...
 
ConfigConfiguration ()
 
bool NotifyComplete (const EventData &complete_event)
 
std::vector< EventDataGetPendingTxEvents (size_t max_events=0)
 
RxPacketGetRxPacket ()
 
void ReturnRxPacket (RxPacket &unused_packet)
 
PacketGetTxPacket (size_t frame, size_t symbol, size_t ant)
 
PacketGetUlTxPacket (size_t frame, size_t symbol, size_t ant)
 
- Protected Attributes inherited from TxRxWorker
const size_t tid_
 
const size_t core_offset_
 
const size_t num_interfaces_
 
const size_t interface_offset_
 
const size_t channels_per_interface_
 
size_t *const rx_frame_start_
 
bool running_
 
std::mutex & mutex_
 Owned by the parent TxRx object for sync. More...
 
std::condition_variable & cond_
 
std::atomic< bool > & can_proceed_
 

Constructor & Destructor Documentation

◆ TxRxWorkerHw() [1/2]

TxRxWorkerHw::TxRxWorkerHw ( size_t  core_offset,
size_t  tid,
size_t  interface_count,
size_t  interface_offset,
Config *const  config,
size_t *  rx_frame_start,
moodycamel::ConcurrentQueue< EventData > *  event_notify_q,
moodycamel::ConcurrentQueue< EventData > *  tx_pending_q,
moodycamel::ProducerToken tx_producer,
moodycamel::ProducerToken notify_producer,
std::vector< RxPacket > &  rx_memory,
std::byte *const  tx_memory,
std::mutex &  sync_mutex,
std::condition_variable &  sync_cond,
std::atomic< bool > &  can_proceed,
RadioConfig radio_config 
)
Here is the call graph for this function:

◆ TxRxWorkerHw() [2/2]

TxRxWorkerHw::TxRxWorkerHw ( )
delete

◆ ~TxRxWorkerHw()

TxRxWorkerHw::~TxRxWorkerHw ( )
finaldefault

Member Function Documentation

◆ DoRx()

std::vector< RxPacket * > TxRxWorkerHw::DoRx ( size_t  interface_id,
size_t &  global_frame_id,
size_t &  global_symbol_id 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DoTx()

size_t TxRxWorkerHw::DoTx ( long long  time0)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DoTxRx()

void TxRxWorkerHw::DoTxRx ( )
finalvirtual

ignore

Implements TxRxWorker.

Here is the call graph for this function:

◆ GetHwTime()

long long int TxRxWorkerHw::GetHwTime ( )
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTxFlags()

Radio::TxFlags TxRxWorkerHw::GetTxFlags ( size_t  radio_id,
size_t  tx_symbol_id 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitRxStatus()

void TxRxWorkerHw::InitRxStatus ( )
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsRxSymbol()

bool TxRxWorkerHw::IsRxSymbol ( size_t  interface,
size_t  symbol_id 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsTxSymbolNext()

bool TxRxWorkerHw::IsTxSymbolNext ( size_t  radio_id,
size_t  current_symbol 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PrintRxSymbolTiming()

void TxRxWorkerHw::PrintRxSymbolTiming ( std::vector< TxRxWorkerRx::RxTimeTracker > &  rx_times,
size_t  current_frame,
size_t  current_symbol,
size_t  next_symbol 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ResetRxStatus()

void TxRxWorkerHw::ResetRxStatus ( size_t  interface,
bool  reuse_memory 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ScheduleTxInit()

void TxRxWorkerHw::ScheduleTxInit ( size_t  frames_to_schedule,
long long  time0 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TxBeaconHw()

void TxRxWorkerHw::TxBeaconHw ( size_t  frame_id,
size_t  interface_id,
long long  time0 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TxDownlinkZeros()

void TxRxWorkerHw::TxDownlinkZeros ( size_t  frame_id,
size_t  radio_id,
long long  time0 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TxReciprocityCalibPilots()

void TxRxWorkerHw::TxReciprocityCalibPilots ( size_t  frame_id,
size_t  radio_id,
long long  time0 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateRxInterface()

TxRxWorkerRx::RxParameters TxRxWorkerHw::UpdateRxInterface ( const TxRxWorkerRx::RxParameters last_rx)
private

Returns the next symbol and interface.

Todo:
Need to add an infinate loop catcher
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ first_symbol_

std::vector<bool> TxRxWorkerHw::first_symbol_
private

◆ freq_ghz_

const double TxRxWorkerHw::freq_ghz_
private

◆ program_start_ticks_

size_t TxRxWorkerHw::program_start_ticks_
private

◆ radio_config_

RadioConfig& TxRxWorkerHw::radio_config_
private

◆ rx_status_

std::vector<TxRxWorkerRx::RxStatusTracker> TxRxWorkerHw::rx_status_
private

◆ zeros_

std::vector<std::complex<int16_t> > TxRxWorkerHw::zeros_
private

The documentation for this class was generated from the following files: