diff options
author | Grant Meyerhoff <grant.meyerhoff@ni.com> | 2021-08-19 14:26:35 -0500 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2021-09-02 13:34:02 -0500 |
commit | 18de8c32716f04fb394822921a1482aa64a0b87d (patch) | |
tree | 87b6223857474ade95188b04d16dc060e1542d01 /host/lib | |
parent | 570b4c6ab30be081a0119a2bf2f1d8ee7fb7f5b9 (diff) | |
download | uhd-18de8c32716f04fb394822921a1482aa64a0b87d.tar.gz uhd-18de8c32716f04fb394822921a1482aa64a0b87d.tar.bz2 uhd-18de8c32716f04fb394822921a1482aa64a0b87d.zip |
mpmd: Add discoverable feature for trig i/o mode
Diffstat (limited to 'host/lib')
-rw-r--r-- | host/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp | 17 | ||||
-rw-r--r-- | host/lib/usrp/mpmd/mpmd_mb_controller.cpp | 27 |
2 files changed, 43 insertions, 1 deletions
diff --git a/host/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp b/host/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp index e7498b9f5..2d751a4e5 100644 --- a/host/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp +++ b/host/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp @@ -7,10 +7,11 @@ #pragma once #include <uhd/features/ref_clk_calibration_iface.hpp> +#include <uhd/features/trig_io_mode_iface.hpp> #include <uhd/rfnoc/mb_controller.hpp> -#include <uhdlib/usrp/common/rpc.hpp> #include <uhdlib/features/discoverable_feature_registry.hpp> #include <uhdlib/features/fpga_load_notification_iface.hpp> +#include <uhdlib/usrp/common/rpc.hpp> #include <uhdlib/utils/rpc.hpp> #include <memory> @@ -155,8 +156,22 @@ public: uhd::usrp::mpmd_rpc_iface::sptr _rpcc; }; + class trig_io_mode : public uhd::features::trig_io_mode_iface + { + public: + using sptr = std::shared_ptr<trig_io_mode>; + + trig_io_mode(uhd::usrp::mpmd_rpc_iface::sptr rpcc); + + void set_trig_io_mode(const uhd::trig_io_mode_t mode) override; + + private: + uhd::usrp::mpmd_rpc_iface::sptr _rpcc; + }; + fpga_onload::sptr _fpga_onload; ref_clk_calibration::sptr _ref_clk_cal; + trig_io_mode::sptr _trig_io_mode; }; }} // namespace uhd::rfnoc diff --git a/host/lib/usrp/mpmd/mpmd_mb_controller.cpp b/host/lib/usrp/mpmd/mpmd_mb_controller.cpp index 665a38152..b79abcee0 100644 --- a/host/lib/usrp/mpmd/mpmd_mb_controller.cpp +++ b/host/lib/usrp/mpmd/mpmd_mb_controller.cpp @@ -52,6 +52,28 @@ void mpmd_mb_controller::ref_clk_calibration::store_ref_clk_tuning_word(uint32_t _rpcc->store_ref_clk_tuning_word(tuning_word); } +mpmd_mb_controller::trig_io_mode::trig_io_mode(uhd::usrp::mpmd_rpc_iface::sptr rpcc) + : _rpcc(rpcc) +{ +} + +void mpmd_mb_controller::trig_io_mode::set_trig_io_mode(const uhd::trig_io_mode_t mode) +{ + switch (mode) { + case uhd::trig_io_mode_t::PPS_OUTPUT: + _rpcc->set_trigger_io("pps_output"); + break; + case uhd::trig_io_mode_t::INPUT: + _rpcc->set_trigger_io("input"); + break; + case uhd::trig_io_mode_t::OFF: + _rpcc->set_trigger_io("off"); + break; + default: + throw uhd::value_error("set_trig_io_mode: Requested mode is invalid."); + } +} + mpmd_mb_controller::mpmd_mb_controller( uhd::usrp::mpmd_rpc_iface::sptr rpcc, uhd::device_addr_t device_info) : _rpc(rpcc), _device_info(device_info) @@ -79,6 +101,11 @@ mpmd_mb_controller::mpmd_mb_controller( _ref_clk_cal = std::make_shared<ref_clk_calibration>(_rpc); register_feature(_ref_clk_cal); } + + if (_rpc->supports_feature("trig_io_mode")) { + _trig_io_mode = std::make_shared<trig_io_mode>(_rpc); + register_feature(_trig_io_mode); + } } /****************************************************************************** |