1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
|
[This file is currently not baked and does not claim to represent
consensus.]
* Introduction
This file describes the current organization of the GNU Radio source
tree. It is intended to be both descriptive and normative.
* Unresolved issues in organization
The big issues are:
1) Should we separate by "code needed to implement protocol/modulation
foo", or related blocks. to (that are therefore not so likely to be
used together).
2) How do m-blocks impact organization? If m-blocks are in a separate
module, which seems reasonable, then do we have most modules depend on
m-blocks rather than just core, or do we have two versions of blocks -
the classic continuous block and the m-block wrapped block? If
m-blocks become the main path, what will be less awkward?
3) Because some (ADROIT at BBN) have proposed to implement MACs in
click instead of GNU Radio, should we have a clean separation of
MAC/PHY within GNU Radio, to facilitate using MACs implemented in
various places?
4) Examples abound, and many are in gnuradio-examples. It might be
better to put examples near the code they use, and to separate useful
programs (like USRP benchmarks) from true examples. Examples should
probably be installed in $prefix/share/examples/gnuradio.
* Plan (normative) [[NOT BAKED!!! NO CONSENSUS!!!]]
Create a new module gr-packet, to hold blocks generally relevant to
sending blocks of data. Create subdirectories within gr-packet for
specific protocols (e.g. 802.11, GNU Radio's GMSK "protocol").
Convert tunnel.py to be OS-independent and a general source/sink
block, decoupling modulation from OS plumbing.
* Pointers to code to be integrated
The immediate question is how to integrate the 802.11 implementation
done by BBN (and assigned to FSF), available at:
http://acert.ir.bbn.com/viewvc/adroitgrdevel/adroitgrdevel/gr-bbn/
This contains blocks at various places in the stack, and gdt believs
that putting them in an 802.11 module will lead to less reuse and less
of a tendency to generalize.
* Organization of the GNU Radio source tree (mostly descriptive)
The GNU Radio source tree is rooted at the directory containing this
file; see README for how to get it if you're using a release or
tarball.
Within this directory, there are a number of subdirectories, most of
which can be enabled or disabled independently. See README for how to
do that; this document is concerned with describing what each module
does enough to help someone who is familiar enough with GNU Radio to
write new code to choose where to put it. The list is not exhaustive.
The description of some modules also lists things that don't belong,
tagged with ?M.
** gnuradio-core [foundational code for the rest of GNU Radio]
(gen_interpolator_taps is not installed. Why? How is it used?)
doc: glue to use with doxygen
?M doc/other/tv-channel-frequencies: (TV specific)
?M src/lib/g72x:
G.711 family codec
src/lib/filter:
implementation and coefficient generation
src/lib/general:
foundational blocks not specific to any technology:
type conversion, {de,}vectorization, add, sub
rms power, throttle, sources, sinks, squelch base class
general blocks:
agc, pll, sync, costas loop, power squelch, quadrature demod
?M framer/correlator
?M packet source/sink
src/lib/io:
basic file io, message io
oscope (trigger support)
i2c bus
?M microtune eval board (like USRP; should probably have own module)
?M SDR1000
src/lib/omnithread:
portable threading library (for when POSIX isn't portable enough)
src/lib/reed-solomon:
reed-solomon implementation. Unclear how/whether it's wrapped into
blocks.
src/lib/runtime:
blocks (basic, hier) and associated buffering
flowgraphs
timers
doubly-mapped circular buffers
src/lib/swig:
code to wrap the rest in python
?M atsc.i (cruft? moved?)
src/python:
build utilities
src/python/bin:
?M microtune.py: microtune control program (installed and EXTRA_DIST!)
src/python/gnuradio:
audio base class
engineering notation support
test harness support
test code (not installed)
basic block/flow_graph
src/tests:
test code
?M test_atsc.cc (# in Makefile.am, but still present)
src/utils:
octave and Scheme scripts (not installed)
** usrp
This contains code to deal with the USRP, but not GNU Radio support.
?M fusb
The "fusb" abstraction is arguably useful for all interface devices
that use USB, not just the USRP.
** gr-usrp
Code to use the USRP with GNU Radio.
?M Arguably the Gnu Radio/USRP benchmarks belong here, but are in -examples
** gr-audio-alsa
** gr-audio-jack
** gr-audio-oss
** gr-audio-osx
** gr-audio-portaudio
** gr-audio-windows
[All of these support audio for some particular audio backend.
** gr-atsc
ATSC (HDTV) transmitter and receiver.
All blocks seem to be specific to ATSC.
?M Perhaps some blocks should be abstracted out for reuse with other
than ATSC parameters.
** gr-comedi
This module is missing a README that explains what it does.
http://www.comedi.org/
** gr-gsm-fr-vocoder
GSM 06.10 full rate vocoder, and gsm library
(Note that the presence of this argues for moving the G.711 code discussed above.)
** gr-pager
POCSAG and FLEX
(gdt suspects there are blocks in here that could be generalized.)
** gr-radio-astronomy
seems to use only standard blocks from python
** gr-trellis
This module provides trellis code support, and appears generic.
** gr-video-sdl
This appears to be like the audio modules, but for video and
specifically for SDL. Unlike audio which has a base class, there
does not appear to be an abstract video class in gnuradio-core.
** gr-wxgui
Support for using wxwidgets from python.
?M (Linux-specific??) code to use the Griffin Powermate (and hook it to a GUI)
glue to connect FFT and scope to gui
** pmt
polymorphic types (building block)
** mblock
Message block implementation.
Note that mblock being a module means that signal processing blocks
that are mblock-aware must depend on this module and thus probably
cannot be in gnuradio-core. Thus, m-block wrappers for the blocks
in gnuradio-core must be elsewhere and it is maybe a good idea to
move them to someplace like gnuradio-common where the streaming and
m-block versions can be together.
** ezdop
Code to deal with the ezdop direction-finding hardware.
** gr-ezdop
Glue code to use the ezdop from GNU Radio.
** gr-rdf
(Currently empty) code to perform direction finding.
** gnuradio-examples
It's arguable that all of these are misplaced, and that examples
belong with the code that they use.
Bona fide examples (code not intended to be useful except for reading):
c++/dial_tone (how to do things only in C++)
python/audio
Test programs:
python/channel-coding
python/digital-voice
python/multi-antenna (?)
Programs in between test and useful:
python/digital
?M tunnel.py: glue to get packets to Linux, conflates modulation
and packet handling
python/multi_usrp
python/networking/measurement_slave (goes with what?)
?M Programs intended to be useful
python/apps/hf_{explorer,radio}
?M Kitchen sink:
python/usrp
benchmarks, test, basic fm/wfm/tv receivers, spectrum sensing,
fft, oscope
|