18 #ifndef INCLUDED_LIBUHD_BLOCK_CTRL_BASE_HPP 19 #define INCLUDED_LIBUHD_BLOCK_CTRL_BASE_HPP 32 #include <boost/cstdint.hpp> 33 #include <boost/shared_ptr.hpp> 34 #include <boost/lexical_cast.hpp> 74 #define UHD_RFNOC_BLOCK_OBJECT(class_name) \ 75 typedef boost::shared_ptr< class_name > sptr; 78 #define UHD_RFNOC_BLOCK_CONSTRUCTOR(CLASS_NAME) \ 80 const make_args_t &make_args \ 81 ) : block_ctrl_base(make_args) 85 #define UHD_RFNOC_BLOCK_REGISTER(CLASS_NAME, BLOCK_NAME) \ 86 block_ctrl_base::sptr CLASS_NAME##_make( \ 87 const make_args_t &make_args \ 89 return block_ctrl_base::sptr(new CLASS_NAME##_impl(make_args)); \ 91 UHD_STATIC_BLOCK(register_rfnoc_##CLASS_NAME) \ 93 uhd::rfnoc::block_ctrl_base::register_block(&CLASS_NAME##_make, BLOCK_NAME); \ 112 typedef boost::shared_ptr<block_ctrl_base>
sptr;
113 typedef boost::function<sptr(const make_args_t &)>
make_t;
129 static void register_block(
const make_t &make,
const std::string &name);
145 static sptr make(
const make_args_t &make_args, boost::uint64_t noc_id = ~0);
155 boost::uint32_t get_address(
size_t block_port=0);
163 std::string
unique_id()
const {
return _block_id.to_string(); };
171 std::vector<size_t> get_ctrl_ports()
const;
181 void sr_write(
const boost::uint32_t reg,
const boost::uint32_t data,
const size_t port = 0);
192 void sr_write(
const std::string ®,
const boost::uint32_t data,
const size_t port = 0);
219 boost::uint64_t user_reg_read64(
const boost::uint32_t addr,
const size_t port = 0);
231 boost::uint64_t user_reg_read64(
const std::string ®,
const size_t port = 0);
242 boost::uint32_t user_reg_read32(
const boost::uint32_t addr,
const size_t port = 0);
254 boost::uint32_t user_reg_read32(
const std::string ®,
const size_t port = 0);
262 void set_command_time(
const time_spec_t &time_spec,
const size_t port = ANY_PORT);
268 time_spec_t get_command_time(
const size_t port = 0);
274 void set_command_tick_rate(
const double tick_rate,
const size_t port = ANY_PORT);
283 void clear_command_time(
const size_t port);
303 void clear(
const size_t port = 0);
317 void set_arg(
const std::string &key,
const std::string &val,
const size_t port = 0);
320 template <
typename T>
321 void set_arg(
const std::string &key,
const T &val,
const size_t port = 0) {
322 _tree->access<T>(get_arg_path(key, port) /
"value").
set(val);
329 std::string get_arg(
const std::string &key,
const size_t port = 0)
const;
332 template <
typename T>
333 T
get_arg(
const std::string &key,
const size_t port = 0)
const {
334 return _tree->access<T>(get_arg_path(key, port) /
"value").
get();
337 std::string get_arg_type(
const std::string &key,
const size_t port = 0)
const;
363 return _root_path /
"args" / port / key;
376 virtual void _clear(
const size_t port = 0);
396 void _init_port_defs(
397 const std::string &direction,
399 const size_t first_port_index=0
403 void _init_block_args();
409 std::map<size_t, wb_iface::sptr> _ctrl_ifaces;
412 uint32_t _base_address;
418 boost::shared_ptr<nocscript::block_iface> _nocscript_iface;
uhd::property_tree::sptr _tree
Property sub-tree.
Definition: block_ctrl_base.hpp:383
void set_arg(const std::string &key, const T &val, const size_t port=0)
Direct access to set a block argument.
Definition: block_ctrl_base.hpp:321
boost::shared_ptr< wb_iface > sptr
Definition: wb_iface.hpp:32
std::string block_name
The name of the block as it will be addressed.
Definition: block_ctrl_base.hpp:67
std::map< size_t, uhd::wb_iface::sptr > ctrl_ifaces
A valid interface that allows us to do peeks and pokes.
Definition: block_ctrl_base.hpp:56
Definition: property_tree.hpp:204
make_args_t(const std::string &key="")
Definition: block_ctrl_base.hpp:48
bool is_big_endian
Definition: block_ctrl_base.hpp:65
Definition: time_spec.hpp:39
blockdef::sptr _block_def
Block definition (stores info about the block such as ports)
Definition: block_ctrl_base.hpp:392
uint32_t base_address
This block's base address (address of block port 0)
Definition: block_ctrl_base.hpp:58
Definition: block_ctrl_base.hpp:106
boost::function< sptr(const make_args_t &)> make_t
Definition: block_ctrl_base.hpp:113
uhd::fs_path _root_path
Root node of this block's properties.
Definition: block_ctrl_base.hpp:386
settingsbus_reg_t
Settings register readback.
Definition: constants.hpp:76
boost::shared_ptr< property_tree > sptr
Definition: property_tree.hpp:220
block_id_t get_block_id() const
Definition: block_ctrl_base.hpp:159
Definition: block_id.hpp:49
uhd::fs_path get_arg_path(const std::string &key, size_t port=0) const
Return the property tree path to a block argument on port.
Definition: block_ctrl_base.hpp:362
bool _transport_is_big_endian
Endianness of underlying transport (for data transport)
Definition: block_ctrl_base.hpp:389
Definition: build_info.hpp:25
std::string unique_id() const
Definition: block_ctrl_base.hpp:163
class UHD_RFNOC_API block_ctrl_base
Base class for all RFNoC block controller objects.
Definition: block_ctrl_base.hpp:105
std::string block_key
The key of the block, i.e. how it was registered.
Definition: block_ctrl_base.hpp:69
#define UHD_RFNOC_API
Definition: config.hpp:103
Definition: block_ctrl_base.hpp:46
uhd::property_tree::sptr tree
A property tree for this motherboard. Example: If the root a device's.
Definition: block_ctrl_base.hpp:64
T get_arg(const std::string &key, const size_t port=0) const
Direct access to get a block argument.
Definition: block_ctrl_base.hpp:333
boost::shared_ptr< block_ctrl_base > sptr
Definition: block_ctrl_base.hpp:112
boost::shared_ptr< blockdef > sptr
Definition: blockdef.hpp:35
block_ctrl_base(void)
Definition: block_ctrl_base.hpp:343
Describes port options for a block definition.
Definition: blockdef.hpp:44
Definition: stream_sig.hpp:33
std::vector< port_t > ports_t
Definition: blockdef.hpp:61
Definition: device_addr.hpp:47
size_t device_index
The device index (or motherboard index).
Definition: block_ctrl_base.hpp:60
Definition: node_ctrl_base.hpp:41