summaryrefslogtreecommitdiff
path: root/gnuradio-runtime/lib/top_block.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-runtime/lib/top_block.cc')
-rw-r--r--gnuradio-runtime/lib/top_block.cc167
1 files changed, 167 insertions, 0 deletions
diff --git a/gnuradio-runtime/lib/top_block.cc b/gnuradio-runtime/lib/top_block.cc
new file mode 100644
index 0000000000..8d2e42bb12
--- /dev/null
+++ b/gnuradio-runtime/lib/top_block.cc
@@ -0,0 +1,167 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2007,2013 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 "top_block_impl.h"
+#include <gnuradio/top_block.h>
+#include <gnuradio/io_signature.h>
+#include <gnuradio/prefs.h>
+#include <unistd.h>
+#include <iostream>
+
+namespace gr {
+ top_block_sptr
+ make_top_block(const std::string &name)
+ {
+ return gnuradio::get_initial_sptr
+ (new top_block(name));
+ }
+
+ top_block::top_block(const std::string &name)
+ : hier_block2(name,
+ io_signature::make(0,0,0),
+ io_signature::make(0,0,0))
+ {
+ d_impl = new top_block_impl(this);
+ }
+
+ top_block::~top_block()
+ {
+ stop();
+ wait();
+
+ delete d_impl;
+ }
+
+ void
+ top_block::start(int max_noutput_items)
+ {
+ d_impl->start(max_noutput_items);
+
+ if(prefs::singleton()->get_bool("ControlPort", "on", false)) {
+ setup_rpc();
+ }
+ }
+
+ void
+ top_block::stop()
+ {
+ d_impl->stop();
+ }
+
+ void
+ top_block::wait()
+ {
+ d_impl->wait();
+ }
+
+ void
+ top_block::run(int max_noutput_items)
+ {
+ start(max_noutput_items);
+ wait();
+ }
+
+ void
+ top_block::lock()
+ {
+ d_impl->lock();
+ }
+
+ void
+ top_block::unlock()
+ {
+ d_impl->unlock();
+ }
+
+ std::string
+ top_block::edge_list()
+ {
+ return d_impl->edge_list();
+ }
+
+ void
+ top_block::dump()
+ {
+ d_impl->dump();
+ }
+
+ int
+ top_block::max_noutput_items()
+ {
+ return d_impl->max_noutput_items();
+ }
+
+ void
+ top_block::set_max_noutput_items(int nmax)
+ {
+ d_impl->set_max_noutput_items(nmax);
+ }
+
+ top_block_sptr
+ top_block::to_top_block()
+ {
+ return cast_to_top_block_sptr(shared_from_this());
+ }
+
+ void
+ top_block::setup_rpc()
+ {
+#ifdef GR_CTRLPORT
+ if(is_rpc_set())
+ return;
+
+ // Getters
+ add_rpc_variable(
+ rpcbasic_sptr(new rpcbasic_register_get<top_block, int>(
+ alias(), "max noutput_items",
+ &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(prefs::singleton()->get_bool("ControlPort", "edges_list", false)) {
+ add_rpc_variable(
+ rpcbasic_sptr(new rpcbasic_register_get<top_block, std::string>(
+ alias(), "edge list",
+ &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<top_block, int>(
+ alias(), "max noutput_items",
+ &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 */
+ }
+
+} /* namespace gr */