1 [This file is currently not baked and does not claim to represent
6 This file describes the current organization of the GNU Radio source
7 tree. It is intended to be both descriptive and normative.
9 * Unresolved issues in organization
13 1) Should we separate by "code needed to implement protocol/modulation
14 foo", or related blocks. to (that are therefore not so likely to be
17 2) How do m-blocks impact organization? If m-blocks are in a separate
18 module, which seems reasonable, then do we have most modules depend on
19 m-blocks rather than just core, or do we have two versions of blocks -
20 the classic continuous block and the m-block wrapped block? If
21 m-blocks become the main path, what will be less awkward?
23 3) Because some (ADROIT at BBN) have proposed to implement MACs in
24 click instead of GNU Radio, should we have a clean separation of
25 MAC/PHY within GNU Radio, to facilitate using MACs implemented in
28 4) Examples abound, and many are in gnuradio-examples. It might be
29 better to put examples near the code they use, and to separate useful
30 programs (like USRP benchmarks) from true examples. Examples should
31 probably be installed in $prefix/share/examples/gnuradio.
33 * Plan (normative) [[NOT BAKED!!! NO CONSENSUS!!!]]
35 Create a new module gr-packet, to hold blocks generally relevant to
36 sending blocks of data. Create subdirectories within gr-packet for
37 specific protocols (e.g. 802.11, GNU Radio's GMSK "protocol").
39 Convert tunnel.py to be OS-independent and a general source/sink
40 block, decoupling modulation from OS plumbing.
42 * Pointers to code to be integrated
44 The immediate question is how to integrate the 802.11 implementation
45 done by BBN (and assigned to FSF), available at:
47 http://acert.ir.bbn.com/viewvc/adroitgrdevel/adroitgrdevel/gr-bbn/
49 This contains blocks at various places in the stack, and gdt believs
50 that putting them in an 802.11 module will lead to less reuse and less
51 of a tendency to generalize.
53 * Organization of the GNU Radio source tree (mostly descriptive)
55 The GNU Radio source tree is rooted at the directory containing this
56 file; see README for how to get it if you're using a release or
59 Within this directory, there are a number of subdirectories, most of
60 which can be enabled or disabled independently. See README for how to
61 do that; this document is concerned with describing what each module
62 does enough to help someone who is familiar enough with GNU Radio to
63 write new code to choose where to put it. The list is not exhaustive.
64 The description of some modules also lists things that don't belong,
67 ** gnuradio-core [foundational code for the rest of GNU Radio]
69 (gen_interpolator_taps is not installed. Why? How is it used?)
71 doc: glue to use with doxygen
73 ?M doc/other/tv-channel-frequencies: (TV specific)
79 implementation and coefficient generation
81 foundational blocks not specific to any technology:
82 type conversion, {de,}vectorization, add, sub
83 rms power, throttle, sources, sinks, squelch base class
86 agc, pll, sync, costas loop, power squelch, quadrature demod
92 basic file io, message io
93 oscope (trigger support)
95 ?M microtune eval board (like USRP; should probably have own module)
99 portable threading library (for when POSIX isn't portable enough)
101 src/lib/reed-solomon:
102 reed-solomon implementation. Unclear how/whether it's wrapped into
106 blocks (basic, hier) and associated buffering
109 doubly-mapped circular buffers
112 code to wrap the rest in python
113 ?M atsc.i (cruft? moved?)
119 ?M microtune.py: microtune control program (installed and EXTRA_DIST!)
123 engineering notation support
125 test code (not installed)
126 basic block/flow_graph
130 ?M test_atsc.cc (# in Makefile.am, but still present)
133 octave and Scheme scripts (not installed)
137 This contains code to deal with the USRP, but not GNU Radio support.
140 The "fusb" abstraction is arguably useful for all interface devices
141 that use USB, not just the USRP.
145 Code to use the USRP with GNU Radio.
147 ?M Arguably the Gnu Radio/USRP benchmarks belong here, but are in -examples
153 ** gr-audio-portaudio
155 [All of these support audio for some particular audio backend.
158 ATSC (HDTV) transmitter and receiver.
159 All blocks seem to be specific to ATSC.
160 ?M Perhaps some blocks should be abstracted out for reuse with other
161 than ATSC parameters.
164 This module is missing a README that explains what it does.
165 http://www.comedi.org/
168 GSM 06.10 full rate vocoder, and gsm library
169 (Note that the presence of this argues for moving the G.711 code discussed above.)
173 (gdt suspects there are blocks in here that could be generalized.)
175 ** gr-radio-astronomy
176 seems to use only standard blocks from python
179 This module provides trellis code support, and appears generic.
182 This appears to be like the audio modules, but for video and
183 specifically for SDL. Unlike audio which has a base class, there
184 does not appear to be an abstract video class in gnuradio-core.
187 Support for using wxwidgets from python.
188 ?M (Linux-specific??) code to use the Griffin Powermate (and hook it to a GUI)
189 glue to connect FFT and scope to gui
192 polymorphic types (building block)
195 Message block implementation.
196 Note that mblock being a module means that signal processing blocks
197 that are mblock-aware must depend on this module and thus probably
198 cannot be in gnuradio-core. Thus, m-block wrappers for the blocks
199 in gnuradio-core must be elsewhere and it is maybe a good idea to
200 move them to someplace like gnuradio-common where the streaming and
201 m-block versions can be together.
204 Code to deal with the ezdop direction-finding hardware.
207 Glue code to use the ezdop from GNU Radio.
210 (Currently empty) code to perform direction finding.
214 It's arguable that all of these are misplaced, and that examples
215 belong with the code that they use.
217 Bona fide examples (code not intended to be useful except for reading):
218 c++/dial_tone (how to do things only in C++)
222 python/channel-coding
224 python/multi-antenna (?)
226 Programs in between test and useful:
228 ?M tunnel.py: glue to get packets to Linux, conflates modulation
231 python/networking/measurement_slave (goes with what?)
233 ?M Programs intended to be useful
234 python/apps/hf_{explorer,radio}
238 benchmarks, test, basic fm/wfm/tv receivers, spectrum sensing,