diff options
author | Andrej Rode <andrej.rode@ettus.com> | 2017-03-21 19:46:50 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:03:44 -0800 |
commit | ef6326a174e6880be5e2eaeac26a2c5de0768807 (patch) | |
tree | c949545e02390745c3a373e657bcf2404e62e191 /mpm/lib/xbar_iface.hpp | |
parent | b29246a9e2d7ed1e03e44cfc6804615fcfa5a5d8 (diff) | |
download | uhd-ef6326a174e6880be5e2eaeac26a2c5de0768807.tar.gz uhd-ef6326a174e6880be5e2eaeac26a2c5de0768807.tar.bz2 uhd-ef6326a174e6880be5e2eaeac26a2c5de0768807.zip |
mpm: python refactoring
Diffstat (limited to 'mpm/lib/xbar_iface.hpp')
-rw-r--r-- | mpm/lib/xbar_iface.hpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/mpm/lib/xbar_iface.hpp b/mpm/lib/xbar_iface.hpp new file mode 100644 index 000000000..9b17ed97b --- /dev/null +++ b/mpm/lib/xbar_iface.hpp @@ -0,0 +1,69 @@ +// +// Copyright 2017 Ettus Research (National Instruments) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// +#pragma once +#include <boost/noncopyable.hpp> +#include <memory> +#include <mutex> +#include <cstdint> + +namespace mpm{ + +/*! + * Crossbar route command + */ +using rfnoc_crossbar_cmd = struct rfnoc_crossbar_cmd { + /*! destination address */ + uint8_t dest_addr; + /*! destination port */ + uint8_t dest_port; +}; + +#define RFNCBWROUTIOC _IOW('R', 1, struct rfnoc_crossbar_cmd) +#define RFNCDELROUTIOC _IOW('D', 1, struct rfnoc_crossbar_cmd) + +/*! + * Crossbar interface class holding a crossbar context + */ +class xbar_iface: boost::noncopyable{ +public: + // use static mutex! lock_guard + using sptr = std::shared_ptr<xbar_iface>; + static sptr make(const std::string &device); + void set_route(uint8_t dst_addr, uint8_t dst_port); + void del_route(uint8_t dst_addr, uint8_t dst_port); + ~xbar_iface(); + xbar_iface(const std::string &device); + +private: + static std::mutex _lock; + int _fd; +}; +} + + +#ifdef LIBMPM_PYTHON +void export_xbar(){ + LIBMPM_BOOST_PREAMBLE("xbar") + bp::class_<mpm::xbar_iface, boost::noncopyable, std::shared_ptr<mpm::xbar_iface> >("xbar", bp::no_init) + .def("make", &mpm::xbar_iface::make) + .staticmethod("make") + .def("set_route", &mpm::xbar_iface::set_route) + .def("del_route", &mpm::xbar_iface::del_route) + ; +} +#endif + |