diff options
Diffstat (limited to 'host/lib/usrp/multi_usrp.cpp')
-rw-r--r-- | host/lib/usrp/multi_usrp.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp index 285799674..f27d0ca03 100644 --- a/host/lib/usrp/multi_usrp.cpp +++ b/host/lib/usrp/multi_usrp.cpp @@ -1380,6 +1380,10 @@ public: _tree->access<uhd::soft_regmap_accessor_t::sptr>(mb_root(mboard) / "registers").get(); uhd::soft_register_base& reg = accessor->lookup(path); + if (not reg.is_writable()) { + throw uhd::runtime_error("multi_usrp::write_register - register not writable: " + path); + } + switch (reg.get_bitwidth()) { case 16: if (reg.is_readable()) @@ -1403,11 +1407,11 @@ public: break; default: - throw uhd::assertion_error("register has invalid bitwidth"); + throw uhd::assertion_error("multi_usrp::write_register - register has invalid bitwidth"); } } else { - throw uhd::not_implemented_error("register IO not supported for this device"); + throw uhd::not_implemented_error("multi_usrp::write_register - register IO not supported for this device"); } } @@ -1419,6 +1423,10 @@ public: _tree->access<uhd::soft_regmap_accessor_t::sptr>(mb_root(mboard) / "registers").get(); uhd::soft_register_base& reg = accessor->lookup(path); + if (not reg.is_readable()) { + throw uhd::runtime_error("multi_usrp::read_register - register not readable: " + path); + } + switch (reg.get_bitwidth()) { case 16: if (reg.is_writable()) @@ -1442,10 +1450,10 @@ public: break; default: - throw uhd::assertion_error("register has invalid bitwidth: " + path); + throw uhd::assertion_error("multi_usrp::read_register - register has invalid bitwidth: " + path); } } else { - throw uhd::not_implemented_error("register IO not supported for this device"); + throw uhd::not_implemented_error("multi_usrp::read_register - register IO not supported for this device"); } } @@ -1461,6 +1469,24 @@ public: } } + register_info_t get_register_info(const std::string &path, const size_t mboard = 0) + { + if (_tree->exists(mb_root(mboard) / "registers")) + { + uhd::soft_regmap_accessor_t::sptr accessor = + _tree->access<uhd::soft_regmap_accessor_t::sptr>(mb_root(mboard) / "registers").get(); + uhd::soft_register_base& reg = accessor->lookup(path); + + register_info_t info; + info.bitwidth = reg.get_bitwidth(); + info.readable = reg.is_readable(); + info.writable = reg.is_writable(); + return info; + } else { + throw uhd::not_implemented_error("multi_usrp::read_register - register IO not supported for this device"); + } + } + private: device::sptr _dev; property_tree::sptr _tree; |