#include <uhd/rfnoc/source_block_ctrl_base.hpp>
Public Types | |
typedef boost::shared_ptr< source_block_ctrl_base > | sptr |
Public Types inherited from uhd::rfnoc::block_ctrl_base | |
typedef boost::shared_ptr< block_ctrl_base > | sptr |
typedef boost::function< sptr(const make_args_t &)> | make_t |
Public Types inherited from uhd::rfnoc::node_ctrl_base | |
typedef boost::shared_ptr< node_ctrl_base > | sptr |
typedef boost::weak_ptr< node_ctrl_base > | wptr |
typedef std::map< size_t, wptr > | node_map_t |
typedef std::pair< size_t, wptr > | node_map_pair_t |
typedef boost::function< void(void)> | graph_update_cb_t |
Public Types inherited from uhd::rfnoc::source_node_ctrl | |
typedef boost::shared_ptr< source_node_ctrl > | sptr |
typedef std::map< size_t, boost::weak_ptr< source_node_ctrl > > | node_map_t |
typedef std::pair< size_t, boost::weak_ptr< source_node_ctrl > > | node_map_pair_t |
Public Member Functions | |
virtual void | issue_stream_cmd (const uhd::stream_cmd_t &stream_cmd, const size_t chan=0) |
stream_sig_t | get_output_signature (size_t block_port=0) const |
std::vector< size_t > | get_output_ports () const |
virtual void | set_destination (uint32_t next_address, size_t output_block_port=0) |
virtual void | configure_flow_control_out (const bool enable_output, const bool lossless_link, const size_t buf_size_bytes, const size_t pkt_limit=0, const size_t block_port=0, const uhd::sid_t &sid=uhd::sid_t()) |
size_t | get_mtu (size_t block_port=0) const |
Public Member Functions inherited from uhd::rfnoc::block_ctrl_base | |
uint32_t | get_address (size_t block_port=0) |
block_id_t | get_block_id () const |
std::string | unique_id () const |
std::vector< size_t > | get_ctrl_ports () const |
void | sr_write (const uint32_t reg, const uint32_t data, const size_t port=0) |
void | sr_write (const std::string ®, const uint32_t data, const size_t port=0) |
uint64_t | sr_read64 (const settingsbus_reg_t reg, const size_t port=0) |
uint32_t | sr_read32 (const settingsbus_reg_t reg, const size_t port=0) |
uint64_t | user_reg_read64 (const uint32_t addr, const size_t port=0) |
uint64_t | user_reg_read64 (const std::string ®, const size_t port=0) |
uint32_t | user_reg_read32 (const uint32_t addr, const size_t port=0) |
uint32_t | user_reg_read32 (const std::string ®, const size_t port=0) |
void | set_command_time (const time_spec_t &time_spec, const size_t port=ANY_PORT) |
time_spec_t | get_command_time (const size_t port=0) |
void | set_command_tick_rate (const double tick_rate, const size_t port=ANY_PORT) |
void | clear_command_time (const size_t port) |
void | clear () |
void | set_args (const uhd::device_addr_t &args, const size_t port=0) |
void | set_arg (const std::string &key, const std::string &val, const size_t port=0) |
Set a specific block argument. val is converted to the corresponding. More... | |
template<typename T > | |
void | set_arg (const std::string &key, const T &val, const size_t port=0) |
Direct access to set a block argument. More... | |
uhd::device_addr_t | get_args (const size_t port=0) const |
Return all block arguments as a device_addr_t. More... | |
std::string | get_arg (const std::string &key, const size_t port=0) const |
Return a single block argument in string format. More... | |
template<typename T > | |
T | get_arg (const std::string &key, const size_t port=0) const |
Direct access to get a block argument. More... | |
std::string | get_arg_type (const std::string &key, const size_t port=0) const |
Public Member Functions inherited from uhd::rfnoc::node_ctrl_base | |
node_map_t | list_downstream_nodes () |
node_map_t | list_upstream_nodes () |
void | disconnect () |
void | disconnect_output_port (const size_t output_port) |
void | disconnect_input_port (const size_t input_port) |
void | set_downstream_port (const size_t this_port, const size_t remote_port) |
size_t | get_downstream_port (const size_t this_port) |
void | set_upstream_port (const size_t this_port, const size_t remote_port) |
size_t | get_upstream_port (const size_t this_port) |
template<typename T > | |
UHD_INLINE std::vector< boost::shared_ptr< T > > | find_downstream_node (bool active_only=false) |
template<typename T > | |
UHD_INLINE std::vector< boost::shared_ptr< T > > | find_upstream_node (bool active_only=false) |
template<typename T , typename value_type > | |
UHD_INLINE value_type | find_downstream_unique_property (boost::function< value_type(boost::shared_ptr< T > node, size_t port)> get_property, value_type null_value, const std::set< boost::shared_ptr< T > > &exclude_nodes=std::set< boost::shared_ptr< T > >()) |
template<typename T , typename value_type > | |
UHD_INLINE value_type | find_upstream_unique_property (boost::function< value_type(boost::shared_ptr< T > node, size_t port)> get_property, value_type null_value, const std::set< boost::shared_ptr< T > > &exclude_nodes=std::set< boost::shared_ptr< T > >()) |
Public Member Functions inherited from uhd::rfnoc::source_node_ctrl | |
size_t | connect_downstream (node_ctrl_base::sptr downstream_node, size_t port=ANY_PORT, const uhd::device_addr_t &args=uhd::device_addr_t()) |
virtual void | set_rx_streamer (bool active, const size_t port) |
Protected Member Functions | |
virtual size_t | _request_output_port (const size_t suggested_port, const uhd::device_addr_t &args) const |
Protected Member Functions inherited from uhd::rfnoc::block_ctrl_base | |
block_ctrl_base (void) | |
virtual | ~block_ctrl_base () |
block_ctrl_base (const make_args_t &make_args) | |
stream_sig_t | _resolve_port_def (const blockdef::port_t &port_def) const |
uhd::fs_path | get_arg_path (const std::string &key, size_t port=0) const |
Return the property tree path to a block argument key on port . More... | |
timed_wb_iface::sptr | get_ctrl_iface (const size_t block_port) |
Get a control interface object for block port block_port . More... | |
virtual void | _clear (const size_t port=0) |
Override this function if your block does something else. More... | |
virtual void | _set_command_time (const time_spec_t &time_spec, const size_t port=ANY_PORT) |
Override this function if your block needs to specially handle. More... | |
Protected Member Functions inherited from uhd::rfnoc::node_ctrl_base | |
node_ctrl_base (void) | |
virtual | ~node_ctrl_base () |
virtual void | _register_upstream_node (node_ctrl_base::sptr upstream_node, size_t port) |
void | update_graph () |
Additional Inherited Members | |
Static Public Member Functions inherited from uhd::rfnoc::block_ctrl_base | |
static void | register_block (const make_t &make, const std::string &name) |
static sptr | make (const make_args_t &make_args, uint64_t noc_id=~0) |
Create a block controller class given a NoC-ID or a block name. More... | |
Protected Attributes inherited from uhd::rfnoc::block_ctrl_base | |
uhd::property_tree::sptr | _tree |
Property sub-tree. More... | |
uhd::fs_path | _root_path |
Root node of this block's properties. More... | |
blockdef::sptr | _block_def |
Block definition (stores info about the block such as ports) More... | |
Protected Attributes inherited from uhd::rfnoc::node_ctrl_base | |
uhd::device_addr_t | _args |
Stores default arguments. More... | |
node_map_t | _upstream_nodes |
List of upstream nodes. More... | |
node_map_t | _downstream_nodes |
List of downstream nodes. More... | |
size_t | _num_input_ports |
size_t | _num_output_ports |
std::map< size_t, bool > | _rx_streamer_active |
std::map< size_t, bool > | _tx_streamer_active |
typedef boost::shared_ptr<source_block_ctrl_base> uhd::rfnoc::source_block_ctrl_base::sptr |
|
protectedvirtual |
Like source_node_ctrl::_request_output_port(), but also checks if the port has an output signature.
Reimplemented from uhd::rfnoc::source_node_ctrl.
|
virtual |
Configure flow control for outgoing streams.
In the default implementation, this just sets registers SR_FLOW_CTRL_BUF_SIZE and SR_FLOW_CTRL_ENABLE accordingly; block_port and sid
are ignored.
Override this function if your block has port-specific flow control settings.
enable_output | Enable flow control module's output. If disabled, no packets will be output regardless of flow control state. |
buf_size_bytes | The size of the downstream block's input FIFO size in number of bytes. Setting this to zero disables byte based flow control. If both byte based flow control and the packet limit are set to zero, the block will then produce data as fast as it can. Warning: This can cause head-of-line blocking, and potentially lock up your device! |
lossless_link | The link for the connection is lossless. Periodic sync packets will be disabled. |
pkt_limit | Limit the maximum number of packets in flight. Setting this to zero disables packet limiting. Usually kept disabled except for special case connections (such as DMA) that support only a finite number of packets in flight. |
block_port | Specify on which outgoing port this setting is valid. |
sid | The SID for which this is valid. This is meant for cases where the outgoing block port is not sufficient to set the flow control, and as such is rarely used. |
size_t uhd::rfnoc::source_block_ctrl_base::get_mtu | ( | size_t | block_port = 0 | ) | const |
Return the MTU size on a given block port.
This is necessary for setting up transports, among other things.
If the block port is not defined, it will return 0, and not throw.
block_port | The block port (0 through 15). |
Returns the MTU in bytes.
std::vector<size_t> uhd::rfnoc::source_block_ctrl_base::get_output_ports | ( | ) | const |
Return a list of valid output ports.
stream_sig_t uhd::rfnoc::source_block_ctrl_base::get_output_signature | ( | size_t | block_port = 0 | ) | const |
Return the output stream signature for a given block port.
The actual signature is determined by the current configuration and the block definition file. The value returned here is calculated on-the-fly and is only valid as long as the configuration does not change.
block_port
uhd::runtime_error | if block_port is not a valid port |
|
virtual |
Issue a stream command for this block.
There is no guaranteed action for this command. The default implementation is to send this command to the next upstream block, or issue a warning if there is no upstream block registered.
However, implementations of block_ctrl_base might choose to do whatever seems appropriate, including throwing exceptions. This may also be true for some stream commands and not for others (i.e. STREAM_MODE_START_CONTINUOUS may be implemented, and STREAM_MODE_NUM_SAMPS_AND_DONE may be not).
This function does not check for infinite loops. Example: Say you have two blocks, which are both registered as upstream from one another. If they both use block_ctrl_base::issue_stream_cmd(), then the stream command will be passed from one block to another indefinitely. This will not happen if one the block's controller classes overrides this function and actually handles it.
See also register_upstream_block().
stream_cmd | The stream command. |
chan | Channel for which this command is meant (data shall be produced on this channel). |
Implements uhd::rfnoc::source_node_ctrl.
|
virtual |
Configures data flowing from port output_block_port
to go to next_address
next_address | Address of the downstream block |
output_block_port | Port for which this is valid |
In the default implementation, this will write the value in next_address
to register SR_NEXT_DST of this blocks settings bus. The value will also have bit 16 set to 1, since some blocks require this to respect this value.