Statistics
| Branch: | Tag: | Revision:

root / README.organization @ 0bf2128a

History | View | Annotate | Download (7.1 kB)

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