diff options
Diffstat (limited to 'gnuradio-runtime/include/gr_block_detail.h')
-rw-r--r-- | gnuradio-runtime/include/gr_block_detail.h | 248 |
1 files changed, 0 insertions, 248 deletions
diff --git a/gnuradio-runtime/include/gr_block_detail.h b/gnuradio-runtime/include/gr_block_detail.h deleted file mode 100644 index 14886c0a74..0000000000 --- a/gnuradio-runtime/include/gr_block_detail.h +++ /dev/null @@ -1,248 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2009,2010 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 detail. - * - * 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. - */ - -#ifndef INCLUDED_GR_BLOCK_DETAIL_H -#define INCLUDED_GR_BLOCK_DETAIL_H - -#include <gr_runtime_api.h> -#include <gr_runtime_types.h> -#include <gr_tpb_detail.h> -#include <gr_tags.h> -#include <high_res_timer.h> -#include <stdexcept> - -/*! - * \brief Implementation details to support the signal processing abstraction - * \ingroup internal - * - * This class contains implementation detail that should be "out of sight" - * of almost all users of GNU Radio. This decoupling also means that - * we can make changes to the guts without having to recompile everything. - */ -class GR_RUNTIME_API gr_block_detail { - public: - ~gr_block_detail (); - - int ninputs () const { return d_ninputs; } - int noutputs () const { return d_noutputs; } - bool sink_p () const { return d_noutputs == 0; } - bool source_p () const { return d_ninputs == 0; } - - void set_done (bool done); - bool done () const { return d_done; } - - void set_input (unsigned int which, gr_buffer_reader_sptr reader); - gr_buffer_reader_sptr input (unsigned int which) - { - if (which >= d_ninputs) - throw std::invalid_argument ("gr_block_detail::input"); - return d_input[which]; - } - - void set_output (unsigned int which, gr_buffer_sptr buffer); - gr_buffer_sptr output (unsigned int which) - { - if (which >= d_noutputs) - throw std::invalid_argument ("gr_block_detail::output"); - return d_output[which]; - } - - /*! - * \brief Tell the scheduler \p how_many_items of input stream \p which_input were consumed. - */ - void consume (int which_input, int how_many_items); - - /*! - * \brief Tell the scheduler \p how_many_items were consumed on each input stream. - */ - void consume_each (int how_many_items); - - /*! - * \brief Tell the scheduler \p how_many_items were produced on output stream \p which_output. - */ - void produce (int which_output, int how_many_items); - - /*! - * \brief Tell the scheduler \p how_many_items were produced on each output stream. - */ - void produce_each (int how_many_items); - - // Return the number of items read on input stream which_input - uint64_t nitems_read(unsigned int which_input); - - // Return the number of items written on output stream which_output - uint64_t nitems_written(unsigned int which_output); - - - /*! - * \brief Adds a new tag to the given output stream. - * - * Calls gr_buffer::add_item_tag(), - * which appends the tag onto its deque. - * - * \param which_output an integer of which output stream to attach the tag - * \param tag the tag object to add - */ - void add_item_tag(unsigned int which_output, const gr_tag_t &tag); - - /*! - * \brief Removes a tag from the given input stream. - * - * Calls gr_buffer::remove_item_tag(), which removes the tag from its deque. - * - * \param which_input an integer of which input stream to remove the tag from - * \param tag the tag object to add - */ - void remove_item_tag(unsigned int which_input, const gr_tag_t &tag); - - /*! - * \brief Given a [start,end), returns a vector of all tags in the range. - * - * Pass-through function to gr_buffer_reader to get a vector of tags - * in given range. Range of counts is from start to end-1. - * - * Tags are tuples of: - * (item count, source id, key, value) - * - * \param v a vector reference to return tags into - * \param which_input an integer of which input stream to pull from - * \param abs_start a uint64 count of the start of the range of interest - * \param abs_end a uint64 count of the end of the range of interest - */ - void get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end); - - /*! - * \brief Given a [start,end), returns a vector of all tags in the range - * with a given key. - * - * Calls get_tags_in_range(which_input, abs_start, abs_end) to get a vector of - * tags from the buffers. This function then provides a secondary filter to - * the tags to extract only tags with the given 'key'. - * - * Tags are tuples of: - * (item count, source id, key, value) - * - * \param v a vector reference to return tags into - * \param which_input an integer of which input stream to pull from - * \param abs_start a uint64 count of the start of the range of interest - * \param abs_end a uint64 count of the end of the range of interest - * \param key a PMT symbol to select only tags of this key - */ - void get_tags_in_range(std::vector<gr_tag_t> &v, - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end, - const pmt::pmt_t &key); - - /*! - * \brief Set core affinity of block to the cores in the vector mask. - * - * \param mask a vector of ints of the core numbers available to this block. - */ - void set_processor_affinity(const std::vector<int> &mask); - - /*! - * \brief Unset core affinity. - */ - void unset_processor_affinity(); - - bool threaded; // set if thread is currently running. - gr::thread::gr_thread_t thread; // portable thread handle - - void start_perf_counters(); - void stop_perf_counters(int noutput_items, int nproduced); - void reset_perf_counters(); - - // Calls to get performance counter items - float pc_noutput_items(); - float pc_nproduced(); - float pc_input_buffers_full(size_t which); - std::vector<float> pc_input_buffers_full(); - float pc_output_buffers_full(size_t which); - std::vector<float> pc_output_buffers_full(); - float pc_work_time(); - - float pc_noutput_items_avg(); - float pc_nproduced_avg(); - float pc_input_buffers_full_avg(size_t which); - std::vector<float> pc_input_buffers_full_avg(); - float pc_output_buffers_full_avg(size_t which); - std::vector<float> pc_output_buffers_full_avg(); - float pc_work_time_avg(); - - float pc_noutput_items_var(); - float pc_nproduced_var(); - float pc_input_buffers_full_var(size_t which); - std::vector<float> pc_input_buffers_full_var(); - float pc_output_buffers_full_var(size_t which); - std::vector<float> pc_output_buffers_full_var(); - float pc_work_time_var(); - - gr_tpb_detail d_tpb; // used by thread-per-block scheduler - int d_produce_or; - - // ---------------------------------------------------------------------------- - - private: - unsigned int d_ninputs; - unsigned int d_noutputs; - std::vector<gr_buffer_reader_sptr> d_input; - std::vector<gr_buffer_sptr> d_output; - bool d_done; - - // Performance counters - float d_ins_noutput_items; - float d_avg_noutput_items; - float d_var_noutput_items; - float d_ins_nproduced; - float d_avg_nproduced; - float d_var_nproduced; - std::vector<float> d_ins_input_buffers_full; - std::vector<float> d_avg_input_buffers_full; - std::vector<float> d_var_input_buffers_full; - std::vector<float> d_ins_output_buffers_full; - std::vector<float> d_avg_output_buffers_full; - std::vector<float> d_var_output_buffers_full; - gr::high_res_timer_type d_start_of_work, d_end_of_work; - float d_ins_work_time; - float d_avg_work_time; - float d_var_work_time; - float d_pc_counter; - - gr_block_detail (unsigned int ninputs, unsigned int noutputs); - - friend struct gr_tpb_detail; - - friend GR_RUNTIME_API gr_block_detail_sptr - gr_make_block_detail (unsigned int ninputs, unsigned int noutputs); -}; - -GR_RUNTIME_API gr_block_detail_sptr -gr_make_block_detail (unsigned int ninputs, unsigned int noutputs); - -GR_RUNTIME_API long -gr_block_detail_ncurrently_allocated (); - -#endif /* INCLUDED_GR_BLOCK_DETAIL_H */ |