GNU Radio C++ API
gr_top_block.h
Go to the documentation of this file.
1
/* -*- c++ -*- */
2
/*
3
* Copyright 2007,2008,2009 Free Software Foundation, Inc.
4
*
5
* This file is part of GNU Radio
6
*
7
* GNU Radio is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 3, or (at your option)
10
* any later version.
11
*
12
* GNU Radio is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with GNU Radio; see the file COPYING. If not, write to
19
* the Free Software Foundation, Inc., 51 Franklin Street,
20
* Boston, MA 02110-1301, USA.
21
*/
22
23
#ifndef INCLUDED_GR_TOP_BLOCK_H
24
#define INCLUDED_GR_TOP_BLOCK_H
25
26
#include <
gr_core_api.h
>
27
#include <
gr_hier_block2.h
>
28
29
class
gr_top_block_impl
;
30
31
GR_CORE_API
gr_top_block_sptr
gr_make_top_block
(
const
std::string &name);
32
33
/*!
34
*\brief Top-level hierarchical block representing a flowgraph
35
* \ingroup container_blk
36
*
37
*/
38
class
GR_CORE_API
gr_top_block
:
public
gr_hier_block2
39
{
40
private
:
41
friend
GR_CORE_API
gr_top_block_sptr
gr_make_top_block
(
const
std::string &name);
42
43
gr_top_block_impl
*d_impl;
44
45
protected
:
46
gr_top_block
(
const
std::string &name);
47
48
public
:
49
~
gr_top_block
();
50
51
/*!
52
* \brief The simple interface to running a flowgraph.
53
*
54
* Calls start() then wait(). Used to run a flowgraph that will stop
55
* on its own, or when another thread will call stop().
56
*/
57
void
run();
58
59
/*!
60
* Start the contained flowgraph. Creates one or more threads to
61
* execute the flow graph. Returns to the caller once the threads
62
* are created. Calling start() on a top_block that is already
63
* started IS an error.
64
*/
65
void
start();
66
67
/*!
68
* Stop the running flowgraph. Notifies each thread created by the
69
* scheduler to shutdown, then returns to caller. Calling stop() on
70
* a top_block that is already stopped IS NOT an error.
71
*/
72
void
stop();
73
74
/*!
75
* Wait for a flowgraph to complete. Flowgraphs complete when
76
* either (1) all blocks indicate that they are done (typically only
77
* when using gr.file_source, or gr.head, or (2) after stop() has been
78
* called to request shutdown. Calling wait on a top_block that is
79
* not running IS NOT an error (wait returns w/o blocking).
80
*/
81
void
wait();
82
83
/*!
84
* Lock a flowgraph in preparation for reconfiguration. When an equal
85
* number of calls to lock() and unlock() have occurred, the flowgraph
86
* will be reconfigured.
87
*
88
* N.B. lock() and unlock() may not be called from a flowgraph thread
89
* (E.g., gr_block::work method) or deadlock will occur when
90
* reconfiguration happens.
91
*/
92
virtual
void
lock
();
93
94
/*!
95
* Unlock a flowgraph in preparation for reconfiguration. When an equal
96
* number of calls to lock() and unlock() have occurred, the flowgraph
97
* will be reconfigured.
98
*
99
* N.B. lock() and unlock() may not be called from a flowgraph thread
100
* (E.g., gr_block::work method) or deadlock will occur when
101
* reconfiguration happens.
102
*/
103
virtual
void
unlock
();
104
105
/*!
106
* Displays flattened flowgraph edges and block connectivity
107
*/
108
void
dump();
109
110
gr_top_block_sptr
to_top_block();
// Needed for Python/Guile type coercion
111
};
112
113
inline
gr_top_block_sptr
cast_to_top_block_sptr(
gr_basic_block_sptr
block) {
114
return
boost::dynamic_pointer_cast<
gr_top_block
,
gr_basic_block
>(block);
115
}
116
117
118
#endif
/* INCLUDED_GR_TOP_BLOCK_H */
gnuradio-core
src
lib
runtime
gr_top_block.h
Generated on Mon Jul 8 2013 17:07:43 for GNU Radio C++ API by
1.8.4