Add USRP2 clock source parameter to GRC blocks.
[debian/gnuradio] / README.organization
index 15d9b24ff341582cb4a0a10e6243c110c732977f..138d90189a5d07f95551d86552d428e596991951 100644 (file)
@@ -1,9 +1,13 @@
 [This file is currently not baked and does not claim to represent
 consensus.]
 
 [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.
 
 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
 The big issues are:
 
 1) Should we separate by "code needed to implement protocol/modulation
@@ -21,9 +25,24 @@ 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?
 
 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
 
 The immediate question is how to integrate the 802.11 implementation
-done by BBN, available at:
+done by BBN (and assigned to FSF), available at:
 
   http://acert.ir.bbn.com/viewvc/adroitgrdevel/adroitgrdevel/gr-bbn/
 
 
   http://acert.ir.bbn.com/viewvc/adroitgrdevel/adroitgrdevel/gr-bbn/
 
@@ -31,4 +50,190 @@ 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.
 
 that putting them in an 802.11 module will lead to less reuse and less
 of a tendency to generalize.
 
-[need pointers to existing documentation of big picture and what's where]
+* 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