diff options
Diffstat (limited to 'gnuradio-runtime/lib/gr_top_block.cc')
-rw-r--r-- | gnuradio-runtime/lib/gr_top_block.cc | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/gnuradio-runtime/lib/gr_top_block.cc b/gnuradio-runtime/lib/gr_top_block.cc new file mode 100644 index 0000000000..362057aadb --- /dev/null +++ b/gnuradio-runtime/lib/gr_top_block.cc @@ -0,0 +1,162 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio 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, or (at your option) + * any later version. + * + * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <unistd.h> +#include <gr_top_block.h> +#include <gr_top_block_impl.h> +#include <gr_io_signature.h> +#include <gr_prefs.h> +#include <iostream> + +gr_top_block_sptr +gr_make_top_block(const std::string &name) +{ + return gnuradio::get_initial_sptr(new gr_top_block(name)); +} + +gr_top_block::gr_top_block(const std::string &name) + : gr_hier_block2(name, + gr_make_io_signature(0,0,0), + gr_make_io_signature(0,0,0)) + +{ + d_impl = new gr_top_block_impl(this); +} + +gr_top_block::~gr_top_block() +{ + stop(); + wait(); + + delete d_impl; +} + +void +gr_top_block::start(int max_noutput_items) +{ + d_impl->start(max_noutput_items); + + if(gr_prefs::singleton()->get_bool("ControlPort", "on", false)) { + setup_rpc(); + } +} + +void +gr_top_block::stop() +{ + d_impl->stop(); +} + +void +gr_top_block::wait() +{ + d_impl->wait(); +} + +void +gr_top_block::run(int max_noutput_items) +{ + start(max_noutput_items); + wait(); +} + +void +gr_top_block::lock() +{ + d_impl->lock(); +} + +void +gr_top_block::unlock() +{ + d_impl->unlock(); +} + +std::string +gr_top_block::edge_list() +{ + return d_impl->edge_list(); +} + +void +gr_top_block::dump() +{ + d_impl->dump(); +} + +int +gr_top_block::max_noutput_items() +{ + return d_impl->max_noutput_items(); +} + +void +gr_top_block::set_max_noutput_items(int nmax) +{ + d_impl->set_max_noutput_items(nmax); +} + +gr_top_block_sptr +gr_top_block::to_top_block() +{ + return cast_to_top_block_sptr(shared_from_this()); +} + +void +gr_top_block::setup_rpc() +{ +#ifdef GR_CTRLPORT + if(is_rpc_set()) return; + // Getters + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_get<gr_top_block, int>( + alias(), "max noutput_items", + &gr_top_block::max_noutput_items, + pmt::mp(0), pmt::mp(8192), pmt::mp(8192), + "items", "Max number of output items", + RPC_PRIVLVL_MIN, DISPNULL))); + + if(gr_prefs::singleton()->get_bool("ControlPort", "edges_list", false)) { + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_get<gr_top_block, std::string>( + alias(), "edge list", + &gr_top_block::edge_list, + pmt::mp(""), pmt::mp(""), pmt::mp(""), + "edges", "List of edges in the graph", + RPC_PRIVLVL_MIN, DISPNULL))); + } + + // Setters + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_set<gr_top_block, int>( + alias(), "max noutput_items", + &gr_top_block::set_max_noutput_items, + pmt::mp(0), pmt::mp(8192), pmt::mp(8192), + "items", "Max number of output items", + RPC_PRIVLVL_MIN, DISPNULL))); + rpc_set(); +#endif /* GR_CTRLPORT */ +} |