Merged branch 'msgq' from http://gnuradio.org/git/jblum.git
authorJohnathan Corgan <jcorgan@corganenterprises.com>
Sat, 15 Aug 2009 17:48:39 +0000 (10:48 -0700)
committerJohnathan Corgan <jcorgan@corganenterprises.com>
Sat, 15 Aug 2009 17:48:39 +0000 (10:48 -0700)
This adds the ability to GRC to gave blocks with message ports.

Signed-off-by: Johnathan Corgan <jcorgan@corganenterprises.com>
335 files changed:
.gitignore [new file with mode: 0644]
config/.gitignore [new file with mode: 0644]
config/grc_gnuradio_examples.m4
debian/.gitignore [new file with mode: 0644]
docs/.gitignore [new file with mode: 0644]
docs/doxygen/.gitignore [new file with mode: 0644]
docs/doxygen/other/.gitignore [new file with mode: 0644]
docs/doxygen/xml-swig/.gitignore [new file with mode: 0644]
docs/exploring-gnuradio/.gitignore [new file with mode: 0644]
docs/howto-write-a-block/.gitignore [new file with mode: 0644]
gcell/.gitignore [new file with mode: 0644]
gcell/apps/.gitignore [new file with mode: 0644]
gcell/apps/spu/.gitignore [new file with mode: 0644]
gcell/ibm/.gitignore [new file with mode: 0644]
gcell/include/.gitignore [new file with mode: 0644]
gcell/include/gcell/.gitignore [new file with mode: 0644]
gcell/include/gcell/spu/.gitignore [new file with mode: 0644]
gcell/lib/.gitignore [new file with mode: 0644]
gcell/lib/general/.gitignore [new file with mode: 0644]
gcell/lib/general/spu/.gitignore [new file with mode: 0644]
gcell/lib/runtime/.gitignore [new file with mode: 0644]
gcell/lib/runtime/spu/.gitignore [new file with mode: 0644]
gcell/lib/spu/.gitignore [new file with mode: 0644]
gcell/lib/wrapper/.gitignore [new file with mode: 0644]
gcell/lib/wrapper/spu/.gitignore [new file with mode: 0644]
gnuradio-core/.gitignore [new file with mode: 0644]
gnuradio-core/src/.gitignore [new file with mode: 0644]
gnuradio-core/src/gen_interpolator_taps/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/filter/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/filter/Makefile.am
gnuradio-core/src/lib/filter/filter.i
gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.i [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.cc [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.i [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h [new file with mode: 0644]
gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.i [new file with mode: 0644]
gnuradio-core/src/lib/g72x/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/general/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/gengen/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/hier/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/io/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/missing/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/reed-solomon/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/runtime/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/runtime/Makefile.am
gnuradio-core/src/lib/runtime/gr_basic_block.cc
gnuradio-core/src/lib/runtime/gr_basic_block.h
gnuradio-core/src/lib/runtime/gr_block_detail.cc
gnuradio-core/src/lib/runtime/gr_block_detail.h
gnuradio-core/src/lib/runtime/gr_msg_accepter.cc [new file with mode: 0644]
gnuradio-core/src/lib/runtime/gr_msg_accepter.h [new file with mode: 0644]
gnuradio-core/src/lib/runtime/gr_tpb_detail.cc
gnuradio-core/src/lib/runtime/gr_tpb_detail.h
gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc
gnuradio-core/src/lib/swig/.gitignore [new file with mode: 0644]
gnuradio-core/src/lib/viterbi/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/bin/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/blks2/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/blks2impl/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/blks2impl/pfb_decimator.py [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/blks2impl/pfb_interpolator.py [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/gr/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/gru/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/gruimpl/.gitignore [new file with mode: 0644]
gnuradio-core/src/python/gnuradio/vocoder/.gitignore [new file with mode: 0644]
gnuradio-core/src/tests/.gitignore [new file with mode: 0644]
gnuradio-core/src/utils/.gitignore [new file with mode: 0644]
gnuradio-examples/.gitignore [new file with mode: 0644]
gnuradio-examples/c++/.gitignore [new file with mode: 0644]
gnuradio-examples/c++/dial_tone/.gitignore [new file with mode: 0644]
gnuradio-examples/python/.gitignore [new file with mode: 0644]
gnuradio-examples/python/Makefile.am
gnuradio-examples/python/apps/.gitignore [new file with mode: 0644]
gnuradio-examples/python/apps/hf_explorer/.gitignore [new file with mode: 0644]
gnuradio-examples/python/apps/hf_radio/.gitignore [new file with mode: 0644]
gnuradio-examples/python/audio/.gitignore [new file with mode: 0644]
gnuradio-examples/python/digital-bert/.gitignore [new file with mode: 0644]
gnuradio-examples/python/digital/.gitignore [new file with mode: 0644]
gnuradio-examples/python/digital_voice/.gitignore [new file with mode: 0644]
gnuradio-examples/python/mp-sched/.gitignore [new file with mode: 0644]
gnuradio-examples/python/multi-antenna/.gitignore [new file with mode: 0644]
gnuradio-examples/python/multi_usrp/.gitignore [new file with mode: 0644]
gnuradio-examples/python/network/.gitignore [new file with mode: 0644]
gnuradio-examples/python/ofdm/.gitignore [new file with mode: 0644]
gnuradio-examples/python/pfb/.gitignore [new file with mode: 0644]
gnuradio-examples/python/pfb/Makefile.am [new file with mode: 0644]
gnuradio-examples/python/pfb/channelize.py [new file with mode: 0755]
gnuradio-examples/python/pfb/chirp_channelize.py [new file with mode: 0755]
gnuradio-examples/python/pfb/decimate.py [new file with mode: 0755]
gnuradio-examples/python/pfb/fmtest.py [new file with mode: 0755]
gnuradio-examples/python/pfb/interpolate.py [new file with mode: 0755]
gnuradio-examples/python/usrp/.gitignore [new file with mode: 0644]
gnuradio-examples/python/usrp2/.gitignore [new file with mode: 0644]
gr-atsc/.gitignore [new file with mode: 0644]
gr-atsc/doc/.gitignore [new file with mode: 0644]
gr-atsc/src/.gitignore [new file with mode: 0644]
gr-atsc/src/lib/.gitignore [new file with mode: 0644]
gr-atsc/src/python/.gitignore [new file with mode: 0644]
gr-audio-alsa/.gitignore [new file with mode: 0644]
gr-audio-alsa/src/.gitignore [new file with mode: 0644]
gr-audio-jack/.gitignore [new file with mode: 0644]
gr-audio-jack/src/.gitignore [new file with mode: 0644]
gr-audio-oss/.gitignore [new file with mode: 0644]
gr-audio-oss/src/.gitignore [new file with mode: 0644]
gr-audio-osx/.gitignore [new file with mode: 0644]
gr-audio-osx/src/.gitignore [new file with mode: 0644]
gr-audio-portaudio/.gitignore [new file with mode: 0644]
gr-audio-portaudio/src/.gitignore [new file with mode: 0644]
gr-audio-windows/.gitignore [new file with mode: 0644]
gr-audio-windows/src/.gitignore [new file with mode: 0644]
gr-comedi/.gitignore [new file with mode: 0644]
gr-comedi/src/.gitignore [new file with mode: 0644]
gr-cvsd-vocoder/.gitignore [new file with mode: 0644]
gr-cvsd-vocoder/src/.gitignore [new file with mode: 0644]
gr-cvsd-vocoder/src/lib/.gitignore [new file with mode: 0644]
gr-cvsd-vocoder/src/python/.gitignore [new file with mode: 0644]
gr-gcell/.gitignore [new file with mode: 0644]
gr-gcell/src/.gitignore [new file with mode: 0644]
gr-gcell/src/examples/.gitignore [new file with mode: 0644]
gr-gpio/.gitignore [new file with mode: 0644]
gr-gpio/src/.gitignore [new file with mode: 0644]
gr-gpio/src/fpga/.gitignore [new file with mode: 0644]
gr-gpio/src/fpga/include/.gitignore [new file with mode: 0644]
gr-gpio/src/fpga/lib/.gitignore [new file with mode: 0644]
gr-gpio/src/fpga/rbf/.gitignore [new file with mode: 0644]
gr-gpio/src/fpga/top/.gitignore [new file with mode: 0644]
gr-gpio/src/python/.gitignore [new file with mode: 0644]
gr-gsm-fr-vocoder/.gitignore [new file with mode: 0644]
gr-gsm-fr-vocoder/src/.gitignore [new file with mode: 0644]
gr-gsm-fr-vocoder/src/lib/.gitignore [new file with mode: 0644]
gr-gsm-fr-vocoder/src/lib/gsm/.gitignore [new file with mode: 0644]
gr-gsm-fr-vocoder/src/python/.gitignore [new file with mode: 0644]
gr-howto-write-a-block/.gitignore [new file with mode: 0644]
gr-howto-write-a-block/config/.gitignore [new file with mode: 0644]
gr-howto-write-a-block/doc/.gitignore [new file with mode: 0644]
gr-howto-write-a-block/src/.gitignore [new file with mode: 0644]
gr-howto-write-a-block/src/lib/.gitignore [new file with mode: 0644]
gr-howto-write-a-block/src/python/.gitignore [new file with mode: 0644]
gr-msdd6000/.gitignore [new file with mode: 0644]
gr-msdd6000/src/.gitignore [new file with mode: 0644]
gr-pager/.gitignore [new file with mode: 0644]
gr-pager/src/.gitignore [new file with mode: 0644]
gr-qtgui/.gitignore [new file with mode: 0644]
gr-qtgui/src/.gitignore [new file with mode: 0644]
gr-qtgui/src/lib/.gitignore [new file with mode: 0644]
gr-qtgui/src/lib/ConstellationDisplayPlot.cc
gr-qtgui/src/lib/ConstellationDisplayPlot.h
gr-qtgui/src/lib/FrequencyDisplayPlot.cc
gr-qtgui/src/lib/FrequencyDisplayPlot.h
gr-qtgui/src/lib/SpectrumGUIClass.cc
gr-qtgui/src/lib/SpectrumGUIClass.h
gr-qtgui/src/lib/TimeDomainDisplayPlot.cc
gr-qtgui/src/lib/TimeDomainDisplayPlot.h
gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc
gr-qtgui/src/lib/Waterfall3DDisplayPlot.h
gr-qtgui/src/lib/WaterfallDisplayPlot.cc
gr-qtgui/src/lib/WaterfallDisplayPlot.h
gr-qtgui/src/lib/qtgui.i
gr-qtgui/src/lib/qtgui_sink_c.cc
gr-qtgui/src/lib/qtgui_sink_c.h
gr-qtgui/src/lib/qtgui_sink_f.cc
gr-qtgui/src/lib/qtgui_sink_f.h
gr-qtgui/src/lib/spectrumdisplayform.cc
gr-qtgui/src/lib/spectrumdisplayform.h
gr-qtgui/src/lib/spectrumdisplayform.ui
gr-qtgui/src/python/.gitignore [new file with mode: 0644]
gr-radar-mono/.gitignore [new file with mode: 0644]
gr-radar-mono/doc/.gitignore [new file with mode: 0644]
gr-radar-mono/src/.gitignore [new file with mode: 0644]
gr-radar-mono/src/fpga/.gitignore [new file with mode: 0644]
gr-radar-mono/src/fpga/lib/.gitignore [new file with mode: 0644]
gr-radar-mono/src/fpga/models/.gitignore [new file with mode: 0644]
gr-radar-mono/src/fpga/tb/.gitignore [new file with mode: 0644]
gr-radar-mono/src/fpga/top/.gitignore [new file with mode: 0644]
gr-radar-mono/src/lib/.gitignore [new file with mode: 0644]
gr-radar-mono/src/python/.gitignore [new file with mode: 0644]
gr-radio-astronomy/.gitignore [new file with mode: 0644]
gr-radio-astronomy/src/.gitignore [new file with mode: 0644]
gr-radio-astronomy/src/lib/.gitignore [new file with mode: 0644]
gr-radio-astronomy/src/python/.gitignore [new file with mode: 0644]
gr-sounder/.gitignore [new file with mode: 0644]
gr-sounder/doc/.gitignore [new file with mode: 0644]
gr-sounder/src/.gitignore [new file with mode: 0644]
gr-sounder/src/fpga/.gitignore [new file with mode: 0644]
gr-sounder/src/fpga/lib/.gitignore [new file with mode: 0644]
gr-sounder/src/fpga/tb/.gitignore [new file with mode: 0644]
gr-sounder/src/fpga/top/.gitignore [new file with mode: 0644]
gr-sounder/src/lib/.gitignore [new file with mode: 0644]
gr-sounder/src/python/.gitignore [new file with mode: 0644]
gr-trellis/.gitignore [new file with mode: 0644]
gr-trellis/doc/.gitignore [new file with mode: 0644]
gr-trellis/src/.gitignore [new file with mode: 0644]
gr-trellis/src/examples/.gitignore [new file with mode: 0644]
gr-trellis/src/examples/fsm_files/.gitignore [new file with mode: 0644]
gr-trellis/src/lib/.gitignore [new file with mode: 0644]
gr-trellis/src/python/.gitignore [new file with mode: 0644]
gr-usrp/.gitignore [new file with mode: 0644]
gr-usrp/apps/.gitignore [new file with mode: 0644]
gr-usrp/src/.gitignore [new file with mode: 0644]
gr-usrp2/.gitignore [new file with mode: 0644]
gr-usrp2/src/.gitignore [new file with mode: 0644]
gr-utils/.gitignore [new file with mode: 0644]
gr-utils/src/.gitignore [new file with mode: 0644]
gr-utils/src/lib/.gitignore [new file with mode: 0644]
gr-utils/src/python/.gitignore [new file with mode: 0644]
gr-utils/src/python/gr_plot_const.py
gr-utils/src/python/gr_plot_fft.py
gr-utils/src/python/gr_plot_iq.py
gr-utils/src/python/gr_plot_psd.py
gr-utils/src/python/plot_data.py
gr-video-sdl/.gitignore [new file with mode: 0644]
gr-video-sdl/src/.gitignore [new file with mode: 0644]
gr-wxgui/.gitignore [new file with mode: 0644]
gr-wxgui/src/.gitignore [new file with mode: 0644]
gr-wxgui/src/python/.gitignore [new file with mode: 0644]
gr-wxgui/src/python/forms/.gitignore [new file with mode: 0644]
gr-wxgui/src/python/plotter/.gitignore [new file with mode: 0644]
grc/.gitignore [new file with mode: 0644]
grc/base/.gitignore [new file with mode: 0644]
grc/blocks/.gitignore [new file with mode: 0644]
grc/examples/.gitignore [new file with mode: 0644]
grc/examples/audio/.gitignore [new file with mode: 0644]
grc/examples/simple/.gitignore [new file with mode: 0644]
grc/examples/trellis/.gitignore [new file with mode: 0644]
grc/examples/usrp/.gitignore [new file with mode: 0644]
grc/examples/xmlrpc/.gitignore [new file with mode: 0644]
grc/freedesktop/.gitignore [new file with mode: 0644]
grc/grc_gnuradio/.gitignore [new file with mode: 0644]
grc/gui/.gitignore [new file with mode: 0644]
grc/python/.gitignore [new file with mode: 0644]
grc/scripts/.gitignore [new file with mode: 0644]
gruel/.gitignore [new file with mode: 0644]
gruel/src/.gitignore [new file with mode: 0644]
gruel/src/include/.gitignore [new file with mode: 0644]
gruel/src/include/gruel/.gitignore [new file with mode: 0644]
gruel/src/include/gruel/Makefile.am
gruel/src/include/gruel/msg_accepter.h
gruel/src/include/gruel/msg_accepter_msgq.h
gruel/src/include/gruel/pmt.h
gruel/src/include/gruel/send.h [new file with mode: 0644]
gruel/src/lib/.gitignore [new file with mode: 0644]
gruel/src/lib/msg/.gitignore [new file with mode: 0644]
gruel/src/lib/pmt/.gitignore [new file with mode: 0644]
gruel/src/lib/pmt/pmt.cc
gruel/src/lib/pmt/pmt_int.h
gruel/src/lib/pmt/pmt_io.cc
gruel/src/lib/pmt/qa_pmt_prims.cc
gruel/src/lib/pmt/qa_pmt_prims.h
gruel/src/scheme/.gitignore [new file with mode: 0644]
gruel/src/scheme/gnuradio/.gitignore [new file with mode: 0644]
mblock/.gitignore [new file with mode: 0644]
mblock/doc/.gitignore [new file with mode: 0644]
mblock/src/.gitignore [new file with mode: 0644]
mblock/src/include/.gitignore [new file with mode: 0644]
mblock/src/include/mblock/.gitignore [new file with mode: 0644]
mblock/src/lib/.gitignore [new file with mode: 0644]
mblock/src/scheme/.gitignore [new file with mode: 0644]
mblock/src/scheme/gnuradio/.gitignore [new file with mode: 0644]
omnithread/.gitignore [new file with mode: 0644]
omnithread/gnuradio/.gitignore [new file with mode: 0644]
usrp/.gitignore [new file with mode: 0644]
usrp/doc/.gitignore [new file with mode: 0644]
usrp/doc/other/.gitignore [new file with mode: 0644]
usrp/firmware/.gitignore [new file with mode: 0644]
usrp/firmware/include/.gitignore [new file with mode: 0644]
usrp/firmware/lib/.gitignore [new file with mode: 0644]
usrp/firmware/src/.gitignore [new file with mode: 0644]
usrp/firmware/src/common/.gitignore [new file with mode: 0644]
usrp/firmware/src/usrp2/.gitignore [new file with mode: 0644]
usrp/fpga/.gitignore [new file with mode: 0644]
usrp/fpga/megacells/.gitignore [new file with mode: 0644]
usrp/fpga/rbf/.gitignore [new file with mode: 0644]
usrp/fpga/rbf/rev2/.gitignore [new file with mode: 0644]
usrp/fpga/rbf/rev4/.gitignore [new file with mode: 0644]
usrp/fpga/sdr_lib/.gitignore [new file with mode: 0644]
usrp/fpga/tb/.gitignore [new file with mode: 0644]
usrp/fpga/toplevel/mrfm/.gitignore [new file with mode: 0644]
usrp/fpga/toplevel/sizetest/.gitignore [new file with mode: 0644]
usrp/fpga/toplevel/usrp_inband_usb/.gitignore [new file with mode: 0644]
usrp/fpga/toplevel/usrp_multi/.gitignore [new file with mode: 0644]
usrp/fpga/toplevel/usrp_std/.gitignore [new file with mode: 0644]
usrp/host/.gitignore [new file with mode: 0644]
usrp/host/apps/.gitignore [new file with mode: 0644]
usrp/host/include/.gitignore [new file with mode: 0644]
usrp/host/include/usrp/.gitignore [new file with mode: 0644]
usrp/host/lib/.gitignore [new file with mode: 0644]
usrp/host/misc/.gitignore [new file with mode: 0644]
usrp/host/swig/.gitignore [new file with mode: 0644]
usrp/limbo/apps-inband/.gitignore [new file with mode: 0644]
usrp/limbo/inband/.gitignore [new file with mode: 0644]
usrp2/.gitignore [new file with mode: 0644]
usrp2/firmware/.gitignore [new file with mode: 0644]
usrp2/firmware/apps/.gitignore [new file with mode: 0644]
usrp2/firmware/config/.gitignore [new file with mode: 0644]
usrp2/firmware/include/.gitignore [new file with mode: 0644]
usrp2/firmware/lib/.gitignore [new file with mode: 0644]
usrp2/fpga/boot_cpld/.gitignore [new file with mode: 0644]
usrp2/fpga/control_lib/.gitignore [new file with mode: 0644]
usrp2/fpga/coregen/.gitignore [new file with mode: 0644]
usrp2/fpga/eth/bench/verilog/.gitignore [new file with mode: 0644]
usrp2/fpga/extram/.gitignore [new file with mode: 0644]
usrp2/fpga/opencores/8b10b/.gitignore [new file with mode: 0644]
usrp2/fpga/opencores/aemb/CVS/.gitignore [new file with mode: 0644]
usrp2/fpga/opencores/aemb/rtl/verilog/.gitignore [new file with mode: 0644]
usrp2/fpga/opencores/aemb/sim/.gitignore [new file with mode: 0644]
usrp2/fpga/opencores/ethernet_tri_mode/.gitignore [new file with mode: 0644]
usrp2/fpga/sdr_lib/.gitignore [new file with mode: 0644]
usrp2/fpga/simple_gemac/.gitignore [new file with mode: 0644]
usrp2/fpga/testbench/.gitignore [new file with mode: 0644]
usrp2/fpga/timing/.gitignore [new file with mode: 0644]
usrp2/fpga/top/.gitignore [new file with mode: 0644]
usrp2/fpga/top/eth_test/.gitignore [new file with mode: 0644]
usrp2/fpga/top/u2_core/.gitignore [new file with mode: 0644]
usrp2/fpga/top/u2_fpga/.gitignore [new file with mode: 0644]
usrp2/fpga/top/u2_rev2/.gitignore [new file with mode: 0644]
usrp2/fpga/top/u2_rev3/.gitignore [new file with mode: 0644]
usrp2/fpga/top/u2_rev3_iad/.gitignore [new file with mode: 0644]
usrp2/host/.gitignore [new file with mode: 0644]
usrp2/host/apps/.gitignore [new file with mode: 0644]
usrp2/host/include/.gitignore [new file with mode: 0644]
usrp2/host/include/usrp2/.gitignore [new file with mode: 0644]
usrp2/host/lib/.gitignore [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..b11bb11
--- /dev/null
@@ -0,0 +1,20 @@
+/configure
+/Makefile.in
+/config.log
+/config.h
+/ltmain.sh
+/Makefile
+/config.status
+/stamp-h1
+/config.h.in
+/autom4te.cache
+/libtool
+/missing
+/aclocal.m4
+/install-sh
+/depcomp
+/py-compile
+/compile
+/build
+/run_tests.sh
+/*-stamp
diff --git a/config/.gitignore b/config/.gitignore
new file mode 100644 (file)
index 0000000..16f775e
--- /dev/null
@@ -0,0 +1,15 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/libtool.m4
+/lt~obsolete.m4
+/ltsugar.m4
+/ltversion.m4
+/ltoptions.m4
index 7de55666d18cab9f2257051f6c3fa3a13ae9c763..3225f3ab510f130d5dd7723b3df39de1b2bf3403 100644 (file)
@@ -39,6 +39,7 @@ AC_DEFUN([GRC_GNURADIO_EXAMPLES],[
        gnuradio-examples/python/multi_usrp/Makefile \
        gnuradio-examples/python/network/Makefile \
        gnuradio-examples/python/ofdm/Makefile \
+       gnuradio-examples/python/pfb/Makefile \
        gnuradio-examples/python/usrp/Makefile \
        gnuradio-examples/python/usrp2/Makefile \
     ])
diff --git a/debian/.gitignore b/debian/.gitignore
new file mode 100644 (file)
index 0000000..ca16313
--- /dev/null
@@ -0,0 +1,2 @@
+/changelog
+/*.log
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644 (file)
index 0000000..9ee6454
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile.in
+/Makefile
diff --git a/docs/doxygen/.gitignore b/docs/doxygen/.gitignore
new file mode 100644 (file)
index 0000000..f44627c
--- /dev/null
@@ -0,0 +1,13 @@
+/Makefile
+/Makefile.in
+/html
+/latex
+/xml
+/man
+/Doxyfile
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/docs/doxygen/other/.gitignore b/docs/doxygen/other/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/docs/doxygen/xml-swig/.gitignore b/docs/doxygen/xml-swig/.gitignore
new file mode 100644 (file)
index 0000000..4671390
--- /dev/null
@@ -0,0 +1,16 @@
+/Makefile
+/Makefile.in
+/html
+/latex
+/man
+/Doxyfile
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.xml
+/combine.xslt
+/compound.xsd
+/index.xsd
diff --git a/docs/exploring-gnuradio/.gitignore b/docs/exploring-gnuradio/.gitignore
new file mode 100644 (file)
index 0000000..b6e6030
--- /dev/null
@@ -0,0 +1 @@
+/exploring-gnuradio.html
diff --git a/docs/howto-write-a-block/.gitignore b/docs/howto-write-a-block/.gitignore
new file mode 100644 (file)
index 0000000..719ea5d
--- /dev/null
@@ -0,0 +1 @@
+/howto-write-a-block.html
diff --git a/gcell/.gitignore b/gcell/.gitignore
new file mode 100644 (file)
index 0000000..a553089
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/gcell.pc
+/gcell_spu.pc
diff --git a/gcell/apps/.gitignore b/gcell/apps/.gitignore
new file mode 100644 (file)
index 0000000..b80e1a9
--- /dev/null
@@ -0,0 +1,12 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/test_all
+/benchmark_nop
+/benchmark_dma
+/benchmark_roundtrip
diff --git a/gcell/apps/spu/.gitignore b/gcell/apps/spu/.gitignore
new file mode 100644 (file)
index 0000000..c50e521
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/*.a
+/*.la
+/*.lo
+/.deps
+/.libs
+/benchmark_procs
diff --git a/gcell/ibm/.gitignore b/gcell/ibm/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gcell/include/.gitignore b/gcell/include/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gcell/include/gcell/.gitignore b/gcell/include/gcell/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gcell/include/gcell/spu/.gitignore b/gcell/include/gcell/spu/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gcell/lib/.gitignore b/gcell/lib/.gitignore
new file mode 100644 (file)
index 0000000..3531485
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.a
+/*.o
diff --git a/gcell/lib/general/.gitignore b/gcell/lib/general/.gitignore
new file mode 100644 (file)
index 0000000..3531485
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.a
+/*.o
diff --git a/gcell/lib/general/spu/.gitignore b/gcell/lib/general/spu/.gitignore
new file mode 100644 (file)
index 0000000..3531485
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.a
+/*.o
diff --git a/gcell/lib/runtime/.gitignore b/gcell/lib/runtime/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gcell/lib/runtime/spu/.gitignore b/gcell/lib/runtime/spu/.gitignore
new file mode 100644 (file)
index 0000000..36b5755
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/*.a
+/*.la
+/*.lo
+/.deps
+/.libs
+/test_spu
+/gcell_spu_main
+/gcell_qa
diff --git a/gcell/lib/spu/.gitignore b/gcell/lib/spu/.gitignore
new file mode 100644 (file)
index 0000000..547d220
--- /dev/null
@@ -0,0 +1,11 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.a
+/*.o
+/gcell_general_qa
+/gcell_runtime_qa
+/gcell_all
diff --git a/gcell/lib/wrapper/.gitignore b/gcell/lib/wrapper/.gitignore
new file mode 100644 (file)
index 0000000..3531485
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.a
+/*.o
diff --git a/gcell/lib/wrapper/spu/.gitignore b/gcell/lib/wrapper/spu/.gitignore
new file mode 100644 (file)
index 0000000..3531485
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.a
+/*.o
diff --git a/gnuradio-core/.gitignore b/gnuradio-core/.gitignore
new file mode 100644 (file)
index 0000000..53edad3
--- /dev/null
@@ -0,0 +1,32 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
diff --git a/gnuradio-core/src/.gitignore b/gnuradio-core/src/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gnuradio-core/src/gen_interpolator_taps/.gitignore b/gnuradio-core/src/gen_interpolator_taps/.gitignore
new file mode 100644 (file)
index 0000000..363c633
--- /dev/null
@@ -0,0 +1,7 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/gen_interpolator_taps
diff --git a/gnuradio-core/src/lib/.gitignore b/gnuradio-core/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..e3bc1ee
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/gnuradio-config-info
diff --git a/gnuradio-core/src/lib/filter/.gitignore b/gnuradio-core/src/lib/filter/.gitignore
new file mode 100644 (file)
index 0000000..2d009f1
--- /dev/null
@@ -0,0 +1,214 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/generate-stamp
+/#
+/---
+/generate
+/files:
+/don't
+/go
+/in
+/CVS
+/---
+/GrFIRfilterCCC.cc
+/GrFIRfilterCCC.h
+/GrFIRfilterCCF.cc
+/GrFIRfilterCCF.h
+/GrFIRfilterFCC.cc
+/GrFIRfilterFCC.h
+/GrFIRfilterFFF.cc
+/GrFIRfilterFFF.h
+/GrFIRfilterFSF.cc
+/GrFIRfilterFSF.h
+/GrFIRfilterSCC.cc
+/GrFIRfilterSCC.h
+/GrFIRfilterSIS.cc
+/GrFIRfilterSIS.h
+/GrFreqXlatingFIRfilterCCC.cc
+/GrFreqXlatingFIRfilterCCC.h
+/GrFreqXlatingFIRfilterCCF.cc
+/GrFreqXlatingFIRfilterCCF.h
+/GrFreqXlatingFIRfilterFCC.cc
+/GrFreqXlatingFIRfilterFCC.h
+/GrFreqXlatingFIRfilterFCF.cc
+/GrFreqXlatingFIRfilterFCF.h
+/GrFreqXlatingFIRfilterSCC.cc
+/GrFreqXlatingFIRfilterSCC.h
+/GrFreqXlatingFIRfilterSCF.cc
+/GrFreqXlatingFIRfilterSCF.h
+/gr_fir_CCC.cc
+/gr_fir_CCC.h
+/gr_fir_CCC_generic.cc
+/gr_fir_CCC_generic.h
+/gr_fir_CCF.cc
+/gr_fir_CCF.h
+/gr_fir_CCF_generic.cc
+/gr_fir_CCF_generic.h
+/gr_fir_FCC.cc
+/gr_fir_FCC.h
+/gr_fir_FCC_generic.cc
+/gr_fir_FCC_generic.h
+/gr_fir_FFF.cc
+/gr_fir_FFF.h
+/gr_fir_FFF_generic.cc
+/gr_fir_FFF_generic.h
+/gr_fir_FSF.cc
+/gr_fir_FSF.h
+/gr_fir_FSF_generic.cc
+/gr_fir_FSF_generic.h
+/gr_fir_SCC.cc
+/gr_fir_SCC.h
+/gr_fir_SCC_generic.cc
+/gr_fir_SCC_generic.h
+/gr_fir_SIS.cc
+/gr_fir_SIS.h
+/gr_fir_SIS_generic.cc
+/gr_fir_SIS_generic.h
+/gr_fir_sysconfig.cc
+/gr_fir_sysconfig.h
+/gr_fir_sysconfig_generic.cc
+/gr_fir_sysconfig_generic.h
+/gr_fir_util.cc
+/gr_fir_util.h
+/GrFIRfilterCCC.i
+/GrFIRfilterCCF.i
+/GrFIRfilterFCC.i
+/GrFIRfilterFFF.i
+/GrFIRfilterFSF.i
+/GrFIRfilterSCC.i
+/GrFIRfilterSIS.i
+/GrFreqXlatingFIRfilterCCC.i
+/GrFreqXlatingFIRfilterCCF.i
+/GrFreqXlatingFIRfilterFCC.i
+/GrFreqXlatingFIRfilterFCF.i
+/GrFreqXlatingFIRfilterSCC.i
+/GrFreqXlatingFIRfilterSCF.i
+/#
+/---
+/end
+/generated
+/files
+/---
+/filter_generated.i
+/gr_fir_ccc.cc
+/gr_fir_ccc.h
+/gr_fir_ccc_generic.cc
+/gr_fir_ccc_generic.h
+/gr_fir_ccf.cc
+/gr_fir_ccf.h
+/gr_fir_ccf_generic.cc
+/gr_fir_ccf_generic.h
+/gr_fir_fcc.cc
+/gr_fir_fcc.h
+/gr_fir_fcc_generic.cc
+/gr_fir_fcc_generic.h
+/gr_fir_fff.cc
+/gr_fir_fff.h
+/gr_fir_fff_generic.cc
+/gr_fir_fff_generic.h
+/gr_fir_fsf.cc
+/gr_fir_fsf.h
+/gr_fir_fsf_generic.cc
+/gr_fir_fsf_generic.h
+/gr_fir_scc.cc
+/gr_fir_scc.h
+/gr_fir_scc_generic.cc
+/gr_fir_scc_generic.h
+/gr_fir_filter_ccc.cc
+/gr_fir_filter_ccc.h
+/gr_fir_filter_ccc.i
+/gr_fir_filter_ccf.cc
+/gr_fir_filter_ccf.h
+/gr_fir_filter_ccf.i
+/gr_fir_filter_fcc.cc
+/gr_fir_filter_fcc.h
+/gr_fir_filter_fcc.i
+/gr_fir_filter_fff.cc
+/gr_fir_filter_fff.h
+/gr_fir_filter_fff.i
+/gr_fir_filter_fsf.cc
+/gr_fir_filter_fsf.h
+/gr_fir_filter_fsf.i
+/gr_fir_filter_scc.cc
+/gr_fir_filter_scc.h
+/gr_fir_filter_scc.i
+/gr_freq_xlating_fir_filter_ccc.cc
+/gr_freq_xlating_fir_filter_ccc.h
+/gr_freq_xlating_fir_filter_ccc.i
+/gr_freq_xlating_fir_filter_ccf.cc
+/gr_freq_xlating_fir_filter_ccf.h
+/gr_freq_xlating_fir_filter_ccf.i
+/gr_freq_xlating_fir_filter_fcc.cc
+/gr_freq_xlating_fir_filter_fcc.h
+/gr_freq_xlating_fir_filter_fcc.i
+/gr_freq_xlating_fir_filter_fcf.cc
+/gr_freq_xlating_fir_filter_fcf.h
+/gr_freq_xlating_fir_filter_fcf.i
+/gr_freq_xlating_fir_filter_scc.cc
+/gr_freq_xlating_fir_filter_scc.h
+/gr_freq_xlating_fir_filter_scc.i
+/gr_freq_xlating_fir_filter_scf.cc
+/gr_freq_xlating_fir_filter_scf.h
+/gr_freq_xlating_fir_filter_scf.i
+/gr_interp_fir_filter_ccc.cc
+/gr_interp_fir_filter_ccc.h
+/gr_interp_fir_filter_ccc.i
+/gr_interp_fir_filter_ccf.cc
+/gr_interp_fir_filter_ccf.h
+/gr_interp_fir_filter_ccf.i
+/gr_interp_fir_filter_fcc.cc
+/gr_interp_fir_filter_fcc.h
+/gr_interp_fir_filter_fcc.i
+/gr_interp_fir_filter_fff.cc
+/gr_interp_fir_filter_fff.h
+/gr_interp_fir_filter_fff.i
+/gr_interp_fir_filter_fsf.cc
+/gr_interp_fir_filter_fsf.h
+/gr_interp_fir_filter_fsf.i
+/gr_interp_fir_filter_scc.cc
+/gr_interp_fir_filter_scc.h
+/gr_interp_fir_filter_scc.i
+/gr_rational_resampler_ccc.cc
+/gr_rational_resampler_ccc.h
+/gr_rational_resampler_ccc.i
+/gr_rational_resampler_ccf.cc
+/gr_rational_resampler_ccf.h
+/gr_rational_resampler_ccf.i
+/gr_rational_resampler_fcc.cc
+/gr_rational_resampler_fcc.h
+/gr_rational_resampler_fcc.i
+/gr_rational_resampler_fff.cc
+/gr_rational_resampler_fff.h
+/gr_rational_resampler_fff.i
+/gr_rational_resampler_fsf.cc
+/gr_rational_resampler_fsf.h
+/gr_rational_resampler_fsf.i
+/gr_rational_resampler_scc.cc
+/gr_rational_resampler_scc.h
+/gr_rational_resampler_scc.i
+/gr_rational_resampler_base_ccc.cc
+/gr_rational_resampler_base_ccc.h
+/gr_rational_resampler_base_ccc.i
+/gr_rational_resampler_base_ccf.cc
+/gr_rational_resampler_base_ccf.h
+/gr_rational_resampler_base_ccf.i
+/gr_rational_resampler_base_fcc.cc
+/gr_rational_resampler_base_fcc.h
+/gr_rational_resampler_base_fcc.i
+/gr_rational_resampler_base_fff.cc
+/gr_rational_resampler_base_fff.h
+/gr_rational_resampler_base_fff.i
+/gr_rational_resampler_base_fsf.cc
+/gr_rational_resampler_base_fsf.h
+/gr_rational_resampler_base_fsf.i
+/gr_rational_resampler_base_scc.cc
+/gr_rational_resampler_base_scc.h
+/gr_rational_resampler_base_scc.i
+/stamp-*
index e230e88b52c564858f3e4dbf40c8d8570f95223f..838f69b92d39163d50c70719e664bef960121eb3 100644 (file)
@@ -201,7 +201,11 @@ libfilter_la_common_SOURCES =              \
        complex_dotprod_generic.cc      \
        ccomplex_dotprod_generic.cc     \
        float_dotprod_generic.c         \
-       short_dotprod_generic.c         
+       short_dotprod_generic.c         \
+       gr_pfb_channelizer_ccf.cc       \
+       gr_pfb_decimator_ccf.cc         \
+       gr_pfb_interpolator_ccf.cc      \
+       gr_pfb_arb_resampler_ccf.cc
 
 libfilter_qa_la_common_SOURCES =       \
        qa_filter.cc                    \
@@ -276,7 +280,11 @@ grinclude_HEADERS =                        \
        qa_filter.h                     \
        short_dotprod_generic.h         \
        short_dotprod_x86.h             \
-       sse_debug.h
+       sse_debug.h                     \
+       gr_pfb_channelizer_ccf.h        \
+       gr_pfb_decimator_ccf.h          \
+       gr_pfb_interpolator_ccf.h       \
+       gr_pfb_arb_resampler_ccf.h
 
 noinst_HEADERS =                       \
        assembly.h                      \
@@ -327,6 +335,10 @@ swiginclude_HEADERS =                      \
        gr_iir_filter_ffd.i             \
        gr_single_pole_iir_filter_ff.i  \
        gr_single_pole_iir_filter_cc.i  \
+       gr_pfb_channelizer_ccf.i        \
+       gr_pfb_decimator_ccf.i          \
+       gr_pfb_interpolator_ccf.i       \
+       gr_pfb_arb_resampler_ccf.i      \
        $(GENERATED_I)
 endif
 
index 7931a4d534475a1ca2f1cf64aa77345d90016ce7..16b8005be5072b272895588a96d31591fc7c1e58 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2004,2005,2006,2007 Free Software Foundation, Inc.
+ * Copyright 2004,2005,2006,2007,2009 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
 #include <gr_fractional_interpolator_cc.h>
 #include <gr_goertzel_fc.h>
 #include <gr_cma_equalizer_cc.h>
+#include <gr_pfb_channelizer_ccf.h>
+#include <gr_pfb_decimator_ccf.h>
+#include <gr_pfb_interpolator_ccf.h>
+#include <gr_pfb_arb_resampler_ccf.h>
 %}
 
 %include "gr_iir_filter_ffd.i"
 %include "gr_fractional_interpolator_cc.i"
 %include "gr_goertzel_fc.i"
 %include "gr_cma_equalizer_cc.i"
+%include "gr_pfb_channelizer_ccf.i"
+%include "gr_pfb_decimator_ccf.i"
+%include "gr_pfb_interpolator_ccf.i"
+%include "gr_pfb_arb_resampler_ccf.i"
+%include "gr_pfb_decimator_ccf.i"
+%include "gr_pfb_interpolator_ccf.i"
+%include "gr_pfb_arb_resampler_ccf.i"
 
 %include "filter_generated.i"
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc
new file mode 100644 (file)
index 0000000..bfc4c04
--- /dev/null
@@ -0,0 +1,196 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_pfb_arb_resampler_ccf.h>
+#include <gr_fir_ccf.h>
+#include <gr_fir_util.h>
+#include <gr_io_signature.h>
+
+gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate, 
+                                                            const std::vector<float> &taps,
+                                                            unsigned int filter_size)
+{
+  return gr_pfb_arb_resampler_ccf_sptr (new gr_pfb_arb_resampler_ccf (rate, taps,
+                                                                     filter_size));
+}
+
+
+gr_pfb_arb_resampler_ccf::gr_pfb_arb_resampler_ccf (float rate, 
+                                                   const std::vector<float> &taps,
+                                                   unsigned int filter_size)
+  : gr_block ("pfb_arb_resampler_ccf",
+             gr_make_io_signature (1, 1, sizeof(gr_complex)),
+             gr_make_io_signature (1, 1, sizeof(gr_complex))),
+    d_updated (false)
+{
+  /* The number of filters is specified by the user as the filter size;
+     this is also the interpolation rate of the filter. We use it and the
+     rate provided to determine the decimation rate. This acts as a
+     rational resampler. The flt_rate is calculated as the residual
+     between the integer decimation rate and the real decimation rate and
+     will be used to determine to interpolation point of the resampling
+     process.
+  */
+  d_int_rate = filter_size;
+  d_dec_rate = (unsigned int)floor(d_int_rate/rate);
+  d_flt_rate = (d_int_rate/rate) - d_dec_rate;
+
+  // The accumulator keeps track of overflow to increment the stride correctly.
+  d_acc = 0;
+
+  // Store the last filter between calls to work
+  d_last_filter = 0;
+  
+  d_filters = std::vector<gr_fir_ccf*>(d_int_rate);
+
+  // Create an FIR filter for each channel and zero out the taps
+  std::vector<float> vtaps(0, d_int_rate);
+  for(unsigned int i = 0; i < d_int_rate; i++) {
+    d_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps);
+  }
+
+  // Now, actually set the filters' taps
+  set_taps(taps);
+}
+
+gr_pfb_arb_resampler_ccf::~gr_pfb_arb_resampler_ccf ()
+{
+  for(unsigned int i = 0; i < d_int_rate; i++) {
+    delete d_filters[i];
+  }
+}
+
+void
+gr_pfb_arb_resampler_ccf::set_taps (const std::vector<float> &taps)
+{
+  unsigned int i,j;
+
+  unsigned int ntaps = taps.size();
+  d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_int_rate);
+
+  // Create d_numchan vectors to store each channel's taps
+  d_taps.resize(d_int_rate);
+
+  // Make a vector of the taps plus fill it out with 0's to fill
+  // each polyphase filter with exactly d_taps_per_filter
+  std::vector<float> tmp_taps;
+  tmp_taps = taps;
+  while((float)(tmp_taps.size()) < d_int_rate*d_taps_per_filter) {
+    tmp_taps.push_back(0.0);
+  }
+  
+  // Partition the filter
+  for(i = 0; i < d_int_rate; i++) {
+    // Each channel uses all d_taps_per_filter with 0's if not enough taps to fill out
+    d_taps[i] = std::vector<float>(d_taps_per_filter, 0);
+    for(j = 0; j < d_taps_per_filter; j++) {
+      d_taps[i][j] = tmp_taps[i + j*d_int_rate];  // add taps to channels in reverse order
+    }
+    
+    // Build a filter for each channel and add it's taps to it
+    d_filters[i]->set_taps(d_taps[i]);
+  }
+
+  // Set the history to ensure enough input items for each filter
+  set_history (d_taps_per_filter);
+
+  d_updated = true;
+}
+
+void
+gr_pfb_arb_resampler_ccf::print_taps()
+{
+  unsigned int i, j;
+  for(i = 0; i < d_int_rate; i++) {
+    printf("filter[%d]: [", i);
+    for(j = 0; j < d_taps_per_filter; j++) {
+      printf(" %.4e", d_taps[i][j]);
+    }
+    printf("]\n");
+  }
+}
+
+int
+gr_pfb_arb_resampler_ccf::general_work (int noutput_items,
+                                       gr_vector_int &ninput_items,
+                                       gr_vector_const_void_star &input_items,
+                                       gr_vector_void_star &output_items)
+{
+  gr_complex *in = (gr_complex *) input_items[0];
+  gr_complex *out = (gr_complex *) output_items[0];
+
+  if (d_updated) {
+    d_updated = false;
+    return 0;               // history requirements may have changed.
+  }
+
+  int i = 0, j, count = 0;
+  gr_complex o0, o1;
+
+  // Restore the last filter position
+  j = d_last_filter;
+
+  // produce output as long as we can and there are enough input samples
+  while((i < noutput_items) && (count < ninput_items[0]-1)) {
+
+    // start j by wrapping around mod the number of channels
+    while((j < d_int_rate) && (i < noutput_items)) {
+      // Take the current filter output
+      o0 = d_filters[j]->filter(&in[count]);
+
+      // Take the next filter output; wrap around to 0 if necessary
+      if(j+1 == d_int_rate)
+       // Use the sample of the next input item through the first filter
+       o1 = d_filters[0]->filter(&in[count+1]);
+      else {
+       // Use the sample from the current input item through the nex filter
+       o1 = d_filters[j+1]->filter(&in[count]);
+      }
+
+      //out[i] = o0;                     // nearest-neighbor approach
+      out[i] = o0 + (o1 - o0)*d_acc;     // linearly interpolate between samples
+      i++;
+      
+      // Accumulate the position in the stream for the interpolated point.
+      // If it goes above 1, roll around to zero and increment the stride
+      // length this time by the decimation rate plus 1 for the increment
+      // due to the acculated position.
+      d_acc += d_flt_rate;
+      j += d_dec_rate + (int)floor(d_acc);
+      d_acc = fmodf(d_acc, 1.0);
+    }
+    if(i < noutput_items) {              // keep state for next entry
+      count++;                           // we have fully consumed another input
+      j = j % d_int_rate;                // roll filter around
+    }
+  }
+
+  // Store the current filter position
+  d_last_filter = j;
+
+  consume_each(count);
+  return i;
+}
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h
new file mode 100644 (file)
index 0000000..b79a89f
--- /dev/null
@@ -0,0 +1,158 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GR_PFB_ARB_RESAMPLER_CCF_H
+#define        INCLUDED_GR_PFB_ARB_RESAMPLER_CCF_H
+
+#include <gr_block.h>
+
+class gr_pfb_arb_resampler_ccf;
+typedef boost::shared_ptr<gr_pfb_arb_resampler_ccf> gr_pfb_arb_resampler_ccf_sptr;
+gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
+                                                            const std::vector<float> &taps,
+                                                            unsigned int filter_size=32);
+
+class gr_fir_ccf;
+
+/*!
+ * \class gr_pfb_arb_resampler_ccf
+ *
+ * \brief Polyphase filterbank arbitrary resampler with 
+ *        gr_complex input, gr_complex output and float taps
+ *
+ * \ingroup filter_blk
+ * 
+ * This block takes in a signal stream and performs arbitrary
+ * resampling. The resampling rate can be any real
+ * number <EM>r</EM>. The resampling is done by constructing
+ * <EM>N</EM> filters where <EM>N</EM> is the interpolation rate.  We
+ * then calculate <EM>D</EM> where <EM>D = floor(N/r)</EM>.
+ *
+ * Using <EM>N</EM> and <EM>D</EM>, we can perform rational resampling
+ * where <EM>N/D</EM> is a rational number close to the input rate
+ * <EM>r</EM> where we have <EM>N</EM> filters and we cycle through
+ * them as a polyphase filterbank with a stride of <EM>D</EM> so that
+ * <EM>i+1 = (i + D) % N</EM>.
+ *
+ * To get the arbitrary rate, we want to interpolate between two
+ * points. For each value out, we take an output from the current
+ * filter, <EM>i</EM>, and the next filter <EM>i+1</EM> and then
+ * linearly interpolate between the two based on the real resampling
+ * rate we want.
+ *
+ * The linear interpolation only provides us with an approximation to
+ * the real sampling rate specified. The error is a quantization error
+ * between the two filters we used as our interpolation points.  To
+ * this end, the number of filters, <EM>N</EM>, used determines the
+ * quantization error; the larger <EM>N</EM>, the smaller the
+ * noise. You can design for a specified noise floor by setting the
+ * filter size (parameters <EM>filter_size</EM>). The size defaults to
+ * 32 filters, which is about as good as most implementations need.
+ *
+ * The trick with designing this filter is in how to specify the taps
+ * of the prototype filter. Like the PFB interpolator, the taps are
+ * specified using the interpolated filter rate. In this case, that
+ * rate is the input sample rate multiplied by the number of filters
+ * in the filterbank, which is also the interpolation rate. All other
+ * values should be relative to this rate.
+ *
+ * For example, for a 32-filter arbitrary resampler and using the
+ * GNU Radio's firdes utility to build the filter, we build a low-pass
+ * filter with a sampling rate of <EM>fs</EM>, a 3-dB bandwidth of
+ * <EM>BW</EM> and a transition bandwidth of <EM>TB</EM>. We can also
+ * specify the out-of-band attenuation to use, <EM>ATT</EM>, and the
+ * filter window function (a Blackman-harris window in this case). The
+ * first input is the gain of the filter, which we specify here as the
+ * interpolation rate (<EM>32</EM>).
+ *
+ *      <B><EM>self._taps = gr.firdes.low_pass_2(32, 32*fs, BW, TB, 
+ *           attenuation_dB=ATT, window=gr.firdes.WIN_BLACKMAN_hARRIS)</EM></B>
+ *
+ * The theory behind this block can be found in Chapter 7.5 of 
+ * the following book.
+ *
+ *    <B><EM>f. harris, Multirate Signal Processing for Communication 
+ *       Systems," Upper Saddle River, NJ: Prentice Hall, Inc. 2004.</EM></B>
+ */
+
+class gr_pfb_arb_resampler_ccf : public gr_block
+{
+ private:
+  /*!
+   * Build the polyphase filterbank arbitray resampler.
+   * \param rate  (float) Specifies the resampling rate to use
+   * \param taps  (vector/list of floats) The prototype filter to populate the filterbank. The taps
+   *                                      should be generated at the filter_size sampling rate.
+   * \param filter_size (unsigned int) The number of filters in the filter bank. This is directly
+                                       related to quantization noise introduced during the resampling.
+                                      Defaults to 32 filters.
+   */
+  friend gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
+                                                                     const std::vector<float> &taps,
+                                                                     unsigned int filter_size);
+
+  std::vector<gr_fir_ccf*> d_filters;
+  std::vector< std::vector<float> > d_taps;
+  unsigned int             d_int_rate;          // the number of filters (interpolation rate)
+  unsigned int             d_dec_rate;          // the stride through the filters (decimation rate)
+  float                    d_flt_rate;          // residual rate for the linear interpolation
+  float                    d_acc;
+  unsigned int             d_last_filter;
+  unsigned int             d_taps_per_filter;
+  bool                    d_updated;
+
+  /*!
+   * Build the polyphase filterbank arbitray resampler.
+   * \param rate  (float) Specifies the resampling rate to use
+   * \param taps  (vector/list of floats) The prototype filter to populate the filterbank. The taps
+   *                                      should be generated at the filter_size sampling rate.
+   * \param filter_size (unsigned int) The number of filters in the filter bank. This is directly
+                                       related to quantization noise introduced during the resampling.
+                                      Defaults to 32 filters.
+   */
+  gr_pfb_arb_resampler_ccf (float rate, 
+                           const std::vector<float> &taps,
+                           unsigned int filter_size);
+  
+public:
+  ~gr_pfb_arb_resampler_ccf ();
+  
+  /*!
+   * Resets the filterbank's filter taps with the new prototype filter
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank. The taps
+   *                                        should be generated at the interpolated sampling rate.
+   */
+  void set_taps (const std::vector<float> &taps);
+
+  /*!
+   * Print all of the filterbank taps to screen.
+   */
+  void print_taps();
+  
+  int general_work (int noutput_items,
+                   gr_vector_int &ninput_items,
+                   gr_vector_const_void_star &input_items,
+                   gr_vector_void_star &output_items);
+};
+
+#endif
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.i b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.i
new file mode 100644 (file)
index 0000000..e365e03
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,pfb_arb_resampler_ccf);
+
+gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
+                                                            const std::vector<float> &taps,
+                                                            unsigned int filter_size=32);
+
+class gr_pfb_arb_resampler_ccf : public gr_block
+{
+ private:
+  gr_pfb_arb_resampler_ccf (float rate,
+                           const std::vector<float> &taps,
+                           unsigned int filter_size);
+
+ public:
+  ~gr_pfb_arb_resampler_ccf ();
+
+  void set_taps (const std::vector<float> &taps);
+  void print_taps();
+};
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc
new file mode 100644 (file)
index 0000000..7be611e
--- /dev/null
@@ -0,0 +1,150 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_pfb_channelizer_ccf.h>
+#include <gr_fir_ccf.h>
+#include <gr_fir_util.h>
+#include <gri_fft.h>
+#include <gr_io_signature.h>
+
+gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans, 
+                                                        const std::vector<float> &taps)
+{
+  return gr_pfb_channelizer_ccf_sptr (new gr_pfb_channelizer_ccf (numchans, taps));
+}
+
+
+gr_pfb_channelizer_ccf::gr_pfb_channelizer_ccf (unsigned int numchans, 
+                                     const std::vector<float> &taps)
+  : gr_sync_block ("pfb_channelizer_ccf",
+                  gr_make_io_signature (numchans, numchans, sizeof(gr_complex)),
+                  gr_make_io_signature (1, 1, numchans*sizeof(gr_complex))),
+    d_updated (false)
+{
+  d_numchans = numchans;
+  d_filters = std::vector<gr_fir_ccf*>(d_numchans);
+
+  // Create an FIR filter for each channel and zero out the taps
+  std::vector<float> vtaps(0, d_numchans);
+  for(unsigned int i = 0; i < d_numchans; i++) {
+    d_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps);
+  }
+
+  // Now, actually set the filters' taps
+  set_taps(taps);
+
+  // Create the FFT to handle the output de-spinning of the channels
+  d_fft = new gri_fft_complex (d_numchans, false);
+}
+
+gr_pfb_channelizer_ccf::~gr_pfb_channelizer_ccf ()
+{
+  for(unsigned int i = 0; i < d_numchans; i++) {
+    delete d_filters[i];
+  }
+}
+
+void
+gr_pfb_channelizer_ccf::set_taps (const std::vector<float> &taps)
+{
+  unsigned int i,j;
+
+  unsigned int ntaps = taps.size();
+  d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_numchans);
+
+  // Create d_numchan vectors to store each channel's taps
+  d_taps.resize(d_numchans);
+
+  // Make a vector of the taps plus fill it out with 0's to fill
+  // each polyphase filter with exactly d_taps_per_filter
+  std::vector<float> tmp_taps;
+  tmp_taps = taps;
+  while((float)(tmp_taps.size()) < d_numchans*d_taps_per_filter) {
+    tmp_taps.push_back(0.0);
+  }
+  // Partition the filter
+  for(i = 0; i < d_numchans; i++) {
+    // Each channel uses all d_taps_per_filter with 0's if not enough taps to fill out
+    d_taps[i] = std::vector<float>(d_taps_per_filter, 0);
+    for(j = 0; j < d_taps_per_filter; j++) {
+      d_taps[i][j] = tmp_taps[i + j*d_numchans];  // add taps to channels in reverse order
+    }
+    
+    // Build a filter for each channel and add it's taps to it
+    d_filters[i]->set_taps(d_taps[i]);
+  }
+
+  // Set the history to ensure enough input items for each filter
+  set_history (d_taps_per_filter);
+
+  d_updated = true;
+}
+
+void
+gr_pfb_channelizer_ccf::print_taps()
+{
+  unsigned int i, j;
+  for(i = 0; i < d_numchans; i++) {
+    printf("filter[%d]: [", i);
+    for(j = 0; j < d_taps_per_filter; j++) {
+      printf(" %.4e", d_taps[i][j]);
+    }
+    printf("]\n\n");
+  }
+}
+
+
+int
+gr_pfb_channelizer_ccf::work (int noutput_items,
+                             gr_vector_const_void_star &input_items,
+                             gr_vector_void_star &output_items)
+{
+  gr_complex *in = (gr_complex *) input_items[0];
+  gr_complex *out = (gr_complex *) output_items[0];
+
+  if (d_updated) {
+    d_updated = false;
+    return 0;               // history requirements may have changed.
+  }
+
+  for(int i = 0; i < noutput_items; i++) {
+    // Move through filters from bottom to top
+    for(int j = d_numchans-1; j >= 0; j--) {
+      // Take in the items from the first input stream to d_numchans
+      in = (gr_complex*)input_items[d_numchans - 1 - j];
+
+      // Filter current input stream from bottom filter to top
+      d_fft->get_inbuf()[j] = d_filters[j]->filter(&in[i]);
+    }
+
+    // despin through FFT
+    d_fft->execute();
+    memcpy(&out[d_numchans*i], d_fft->get_outbuf(), d_numchans*sizeof(gr_complex));
+  }
+  
+  return noutput_items;
+}
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
new file mode 100644 (file)
index 0000000..7d0a31c
--- /dev/null
@@ -0,0 +1,144 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GR_PFB_CHANNELIZER_CCF_H
+#define        INCLUDED_GR_PFB_CHANNELIZER_CCF_H
+
+#include <gr_sync_block.h>
+
+class gr_pfb_channelizer_ccf;
+typedef boost::shared_ptr<gr_pfb_channelizer_ccf> gr_pfb_channelizer_ccf_sptr;
+gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans, 
+                                                        const std::vector<float> &taps);
+
+class gr_fir_ccf;
+class gri_fft_complex;
+
+
+/*!
+ * \class gr_pfb_channelizer_ccf
+ *
+ * \brief Polyphase filterbank channelizer with 
+ *        gr_complex input, gr_complex output and float taps
+ *
+ * \ingroup filter_blk
+ *
+ * This block takes in complex inputs and channelizes it to <EM>M</EM>
+ * channels of equal bandwidth. Each of the resulting channels is
+ * decimated to the new rate that is the input sampling rate
+ * <EM>fs</EM> divided by the number of channels, <EM>M</EM>.
+ *
+ * The PFB channelizer code takes the taps generated above and builds
+ * a set of filters. The set contains <EM>M</EM> number of filters
+ * and each filter contains ceil(taps.size()/decim) number of taps.
+ * Each tap from the filter prototype is sequentially inserted into
+ * the next filter. When all of the input taps are used, the remaining
+ * filters in the filterbank are filled out with 0's to make sure each
+ * filter has the same number of taps.
+ *
+ * Each filter operates using the gr_fir filter classs of GNU Radio,
+ * which takes the input stream at <EM>i</EM> and performs the inner
+ * product calculation to <EM>i+(n-1)</EM> where <EM>n</EM> is the
+ * number of filter taps. To efficiently handle this in the GNU Radio
+ * structure, each filter input must come from its own input
+ * stream. So the channelizer must be provided with <EM>M</EM> streams
+ * where the input stream has been deinterleaved. This is most easily
+ * done using the gr_stream_to_streams block.
+ *
+ * The output is then produced as a vector, where index <EM>i</EM> in
+ * the vector is the next sample from the <EM>i</EM>th channel. This
+ * is most easily handled by sending the output to a
+ * gr_vector_to_streams block to handle the conversion and passing
+ * <EM>M</EM> streams out.
+ *
+ * The input and output formatting is done using a hier_block2 called
+ * pfb_channelizer_ccf. This can take in a single stream and outputs
+ * <EM>M</EM> streams based on the behavior described above.
+ *
+ * The filter's taps should be based on the input sampling rate.
+ *
+ * For example, using the GNU Radio's firdes utility to building
+ * filters, we build a low-pass filter with a sampling rate of 
+ * <EM>fs</EM>, a 3-dB bandwidth of <EM>BW</EM> and a transition
+ * bandwidth of <EM>TB</EM>. We can also specify the out-of-band
+ * attenuation to use, <EM>ATT</EM>, and the filter window
+ * function (a Blackman-harris window in this case). The first input
+ *  is the gain of the filter, which we specify here as unity.
+ *
+ *      <B><EM>self._taps = gr.firdes.low_pass_2(1, fs, BW, TB, 
+ *           attenuation_dB=ATT, window=gr.firdes.WIN_BLACKMAN_hARRIS)</EM></B>
+ *
+ * The theory behind this block can be found in Chapter 6 of 
+ * the following book.
+ *
+ *    <B><EM>f. harris, Multirate Signal Processing for Communication 
+ *       Systems," Upper Saddle River, NJ: Prentice Hall, Inc. 2004.
+ *
+ */
+
+class gr_pfb_channelizer_ccf : public gr_sync_block
+{
+ private:
+  /*!
+   * Build the polyphase filterbank decimator.
+   * \param numchans (unsigned integer) Specifies the number of channels <EM>M</EM>
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank.
+   */
+  friend gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans,
+                                                                 const std::vector<float> &taps);
+
+  std::vector<gr_fir_ccf*> d_filters;
+  std::vector< std::vector<float> > d_taps;
+  gri_fft_complex         *d_fft;
+  unsigned int             d_numchans;
+  unsigned int             d_taps_per_filter;
+  bool                    d_updated;
+
+  /*!
+   * Build the polyphase filterbank decimator.
+   * \param numchans (unsigned integer) Specifies the number of channels <EM>M</EM>
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank.
+   */
+  gr_pfb_channelizer_ccf (unsigned int numchans, 
+                         const std::vector<float> &taps);
+
+public:
+  ~gr_pfb_channelizer_ccf ();
+  
+  /*!
+   * Resets the filterbank's filter taps with the new prototype filter
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank.
+   */
+  void set_taps (const std::vector<float> &taps);
+
+  /*!
+   * Print all of the filterbank taps to screen.
+   */
+  void print_taps();
+  
+  int work (int noutput_items,
+           gr_vector_const_void_star &input_items,
+           gr_vector_void_star &output_items);
+};
+
+#endif
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i
new file mode 100644 (file)
index 0000000..4bef90e
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,pfb_channelizer_ccf);
+
+gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans,
+                                                        const std::vector<float> &taps);
+
+class gr_pfb_channelizer_ccf : public gr_sync_block
+{
+ private:
+  gr_pfb_channelizer_ccf (unsigned int numchans,
+                         const std::vector<float> &taps);
+
+ public:
+  ~gr_pfb_channelizer_ccf ();
+
+  void set_taps (const std::vector<float> &taps);
+};
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.cc
new file mode 100644 (file)
index 0000000..b334f58
--- /dev/null
@@ -0,0 +1,174 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_pfb_decimator_ccf.h>
+#include <gr_fir_ccf.h>
+#include <gr_fir_util.h>
+#include <gri_fft.h>
+#include <gr_io_signature.h>
+#include <gr_expj.h>
+
+gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim, 
+                                                    const std::vector<float> &taps,
+                                                    unsigned int channel)
+{
+  return gr_pfb_decimator_ccf_sptr (new gr_pfb_decimator_ccf (decim, taps, channel));
+}
+
+
+gr_pfb_decimator_ccf::gr_pfb_decimator_ccf (unsigned int decim, 
+                                           const std::vector<float> &taps,
+                                           unsigned int channel)
+  : gr_sync_block ("pfb_decimator_ccf",
+                  gr_make_io_signature (decim, decim, sizeof(gr_complex)),
+                  gr_make_io_signature (1, 1, sizeof(gr_complex))),
+    d_updated (false)
+{
+  d_rate = decim;
+  d_filters = std::vector<gr_fir_ccf*>(d_rate);
+  d_chan = channel;
+  d_rotator = new gr_complex[d_rate];
+
+  // Create an FIR filter for each channel and zero out the taps
+  std::vector<float> vtaps(0, d_rate);
+  for(unsigned int i = 0; i < d_rate; i++) {
+    d_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps);
+    d_rotator[i] = gr_expj(i*2*M_PI*d_chan/d_rate);
+  }
+
+  // Now, actually set the filters' taps
+  set_taps(taps);
+
+  // Create the FFT to handle the output de-spinning of the channels
+  d_fft = new gri_fft_complex (d_rate, false);
+}
+
+gr_pfb_decimator_ccf::~gr_pfb_decimator_ccf ()
+{
+  for(unsigned int i = 0; i < d_rate; i++) {
+    delete d_filters[i];
+  }
+}
+
+void
+gr_pfb_decimator_ccf::set_taps (const std::vector<float> &taps)
+{
+  unsigned int i,j;
+
+  unsigned int ntaps = taps.size();
+  d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_rate);
+
+  // Create d_numchan vectors to store each channel's taps
+  d_taps.resize(d_rate);
+
+  // Make a vector of the taps plus fill it out with 0's to fill
+  // each polyphase filter with exactly d_taps_per_filter
+  std::vector<float> tmp_taps;
+  tmp_taps = taps;
+  while((float)(tmp_taps.size()) < d_rate*d_taps_per_filter) {
+    tmp_taps.push_back(0.0);
+  }
+  
+  // Partition the filter
+  for(i = 0; i < d_rate; i++) {
+    // Each channel uses all d_taps_per_filter with 0's if not enough taps to fill out
+    d_taps[i] = std::vector<float>(d_taps_per_filter, 0);
+    for(j = 0; j < d_taps_per_filter; j++) {
+      d_taps[i][j] = tmp_taps[i + j*d_rate];  // add taps to channels in reverse order
+    }
+    
+    // Build a filter for each channel and add it's taps to it
+    d_filters[i]->set_taps(d_taps[i]);
+  }
+
+  // Set the history to ensure enough input items for each filter
+  set_history (d_taps_per_filter);
+
+  d_updated = true;
+}
+
+void
+gr_pfb_decimator_ccf::print_taps()
+{
+  unsigned int i, j;
+  for(i = 0; i < d_rate; i++) {
+    printf("filter[%d]: [", i);
+    for(j = 0; j < d_taps_per_filter; j++) {
+      printf(" %.4e", d_taps[i][j]);
+    }
+    printf("]\n\n");
+  }
+}
+
+#define ROTATEFFT
+
+int
+gr_pfb_decimator_ccf::work (int noutput_items,
+                           gr_vector_const_void_star &input_items,
+                           gr_vector_void_star &output_items)
+{
+  gr_complex *in;
+  gr_complex *out = (gr_complex *) output_items[0];
+
+  if (d_updated) {
+    d_updated = false;
+    return 0;               // history requirements may have changed.
+  }
+
+  int i;
+  for(i = 0; i < noutput_items; i++) {
+    // Move through filters from bottom to top
+    out[i] = 0;
+    for(int j = d_rate-1; j >= 0; j--) {
+      // Take in the items from the first input stream to d_rate
+      in = (gr_complex*)input_items[d_rate - 1 - j];
+
+      // Filter current input stream from bottom filter to top
+      // The rotate them by expj(j*k*2pi/M) where M is the number of filters
+      // (the decimation rate) and k is the channel number to extract
+      
+      // This is the real math that goes on; we abuse the FFT to do this quickly
+      // for decimation rates > N where N is a small number (~5):
+      //       out[i] += d_filters[j]->filter(&in[i])*gr_expj(j*d_chan*2*M_PI/d_rate);
+#ifdef ROTATEFFT
+      d_fft->get_inbuf()[j] = d_filters[j]->filter(&in[i]);
+#else
+      out[i] += d_filters[j]->filter(&in[i])*d_rotator[i];
+#endif
+    }
+
+#ifdef ROTATEFFT
+    // Perform the FFT to do the complex multiply despinning for all channels
+    d_fft->execute();
+
+    // Select only the desired channel out
+    out[i] = d_fft->get_outbuf()[d_chan];
+#endif
+    
+  }
+  
+  return noutput_items;
+}
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h
new file mode 100644 (file)
index 0000000..83997c0
--- /dev/null
@@ -0,0 +1,148 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GR_PFB_DECIMATOR_CCF_H
+#define        INCLUDED_GR_PFB_DECIMATOR_CCF_H
+
+#include <gr_sync_block.h>
+
+class gr_pfb_decimator_ccf;
+typedef boost::shared_ptr<gr_pfb_decimator_ccf> gr_pfb_decimator_ccf_sptr;
+gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim, 
+                                                    const std::vector<float> &taps,
+                                                    unsigned int channel=0);
+
+class gr_fir_ccf;
+class gri_fft_complex;
+
+/*!
+ * \class gr_pfb_decimator_ccf
+ * \brief Polyphase filterbank bandpass decimator with gr_complex 
+ *        input, gr_complex output and float taps
+ *
+ * \ingroup filter_blk
+ * 
+ * This block takes in a signal stream and performs interger down-
+ * sampling (decimation) with a polyphase filterbank. The first input
+ * is the integer specifying how much to decimate by. The second
+ * input is a vector (Python list) of floating-point taps of the 
+ * prototype filter. The third input specifies the channel to extract.
+ * By default, the zeroth channel is used, which is the baseband 
+ * channel (first Nyquist zone).
+ *
+ * The <EM>channel</EM> parameter specifies which channel to use since
+ * this class is capable of bandpass decimation. Given a complex input
+ * stream at a sampling rate of <EM>fs</EM> and a decimation rate of
+ * <EM>decim</EM>, the input frequency domain is split into 
+ * <EM>decim</EM> channels that represent the Nyquist zones. Using the
+ * polyphase filterbank, we can select any one of these channels to
+ * decimate.
+ *
+ * The output signal will be the basebanded and decimated signal from
+ * that channel. This concept is very similar to the PFB channelizer
+ * (see #gr_pfb_channelizer_ccf) where only a single channel is 
+ * extracted at a time.
+ *
+ * The filter's taps should be based on the sampling rate before
+ * decimation.
+ *
+ * For example, using the GNU Radio's firdes utility to building
+ * filters, we build a low-pass filter with a sampling rate of 
+ * <EM>fs</EM>, a 3-dB bandwidth of <EM>BW</EM> and a transition
+ * bandwidth of <EM>TB</EM>. We can also specify the out-of-band
+ * attenuation to use, <EM>ATT</EM>, and the filter window
+ * function (a Blackman-harris window in this case). The first input
+ *  is the gain of the filter, which we specify here as unity.
+ *
+ *      <B><EM>self._taps = gr.firdes.low_pass_2(1, fs, BW, TB, 
+ *           attenuation_dB=ATT, window=gr.firdes.WIN_BLACKMAN_hARRIS)</EM></B>
+ *
+ * The PFB decimator code takes the taps generated above and builds a
+ * set of filters. The set contains <EM>decim</EM> number of filters
+ * and each filter contains ceil(taps.size()/decim) number of taps.
+ * Each tap from the filter prototype is sequentially inserted into
+ * the next filter. When all of the input taps are used, the remaining
+ * filters in the filterbank are filled out with 0's to make sure each 
+ * filter has the same number of taps.
+ *
+ * The theory behind this block can be found in Chapter 6 of 
+ * the following book.
+ *
+ *    <B><EM>f. harris, Multirate Signal Processing for Communication 
+ *       Systems," Upper Saddle River, NJ: Prentice Hall, Inc. 2004.</EM></B>
+ */
+
+class gr_pfb_decimator_ccf : public gr_sync_block
+{
+ private:
+  /*!
+   * Build the polyphase filterbank decimator.
+   * \param decim   (unsigned integer) Specifies the decimation rate to use
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank.
+   * \param channel (unsigned integer) Selects the channel to return [default=0].
+   */
+  friend gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim,
+                                                             const std::vector<float> &taps,
+                                                             unsigned int channel);
+
+  std::vector<gr_fir_ccf*> d_filters;
+  std::vector< std::vector<float> > d_taps;
+  gri_fft_complex         *d_fft;
+  unsigned int             d_rate;
+  unsigned int             d_chan;
+  unsigned int             d_taps_per_filter;
+  bool                    d_updated;
+  gr_complex              *d_rotator;
+
+  /*!
+   * Build the polyphase filterbank decimator.
+   * \param decim   (unsigned integer) Specifies the decimation rate to use
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank.
+   * \param channel (unsigned integer) Selects the channel to return [default=0].
+   */
+  gr_pfb_decimator_ccf (unsigned int decim, 
+                       const std::vector<float> &taps,
+                       unsigned int channel);
+
+public:
+  ~gr_pfb_decimator_ccf ();
+  
+  /*!
+   * Resets the filterbank's filter taps with the new prototype filter
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank.
+   */
+   void set_taps (const std::vector<float> &taps);
+
+  /*!
+   * Print all of the filterbank taps to screen.
+   */
+  void print_taps();
+   
+ //void set_channel (unsigned int channel);
+
+  int work (int noutput_items,
+           gr_vector_const_void_star &input_items,
+           gr_vector_void_star &output_items);
+};
+
+#endif
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.i b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.i
new file mode 100644 (file)
index 0000000..c4215fc
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,pfb_decimator_ccf);
+
+gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim,
+                                                    const std::vector<float> &taps,
+                                                    unsigned int channel);
+
+class gr_pfb_decimator_ccf : public gr_sync_block
+{
+ private:
+  gr_pfb_decimator_ccf (unsigned int decim,
+                       const std::vector<float> &taps,
+                       unsigned int channel);
+
+ public:
+  ~gr_pfb_decimator_ccf ();
+
+  void set_taps (const std::vector<float> &taps);
+  //void set_channel (unsigned int channel);
+};
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc
new file mode 100644 (file)
index 0000000..d5eba88
--- /dev/null
@@ -0,0 +1,142 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_pfb_interpolator_ccf.h>
+#include <gr_fir_ccf.h>
+#include <gr_fir_util.h>
+#include <gr_io_signature.h>
+
+gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp, 
+                                                          const std::vector<float> &taps)
+{
+  return gr_pfb_interpolator_ccf_sptr (new gr_pfb_interpolator_ccf (interp, taps));
+}
+
+
+gr_pfb_interpolator_ccf::gr_pfb_interpolator_ccf (unsigned int interp, 
+                                                 const std::vector<float> &taps)
+  : gr_sync_interpolator ("pfb_interpolator_ccf",
+                         gr_make_io_signature (1, 1, sizeof(gr_complex)),
+                         gr_make_io_signature (1, 1, sizeof(gr_complex)),
+                         interp),
+    d_updated (false)
+{
+  d_rate = interp;
+  d_filters = std::vector<gr_fir_ccf*>(d_rate);
+
+  // Create an FIR filter for each channel and zero out the taps
+  std::vector<float> vtaps(0, d_rate);
+  for(unsigned int i = 0; i < d_rate; i++) {
+    d_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps);
+  }
+
+  // Now, actually set the filters' taps
+  set_taps(taps);
+}
+
+gr_pfb_interpolator_ccf::~gr_pfb_interpolator_ccf ()
+{
+  for(unsigned int i = 0; i < d_rate; i++) {
+    delete d_filters[i];
+  }
+}
+
+void
+gr_pfb_interpolator_ccf::set_taps (const std::vector<float> &taps)
+{
+  unsigned int i,j;
+
+  unsigned int ntaps = taps.size();
+  d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_rate);
+
+  // Create d_numchan vectors to store each channel's taps
+  //std::vector< std::vector<float> > vtaps(d_rate);
+  d_taps.resize(d_rate);
+
+  // Make a vector of the taps plus fill it out with 0's to fill
+  // each polyphase filter with exactly d_taps_per_filter
+  std::vector<float> tmp_taps;
+  tmp_taps = taps;
+  while((float)(tmp_taps.size()) < d_rate*d_taps_per_filter) {
+    tmp_taps.push_back(0.0);
+  }
+  
+  // Partition the filter
+  for(i = 0; i < d_rate; i++) {
+    // Each channel uses all d_taps_per_filter with 0's if not enough taps to fill out
+    d_taps[i] = std::vector<float>(d_taps_per_filter, 0);
+    for(j = 0; j < d_taps_per_filter; j++) {
+      d_taps[i][j] = tmp_taps[i + j*d_rate];  // add taps to channels in reverse order
+    }
+    
+    // Build a filter for each channel and add it's taps to it
+    d_filters[i]->set_taps(d_taps[i]);
+  }
+
+  // Set the history to ensure enough input items for each filter
+  set_history (d_taps_per_filter);
+
+  d_updated = true;
+}
+
+void
+gr_pfb_interpolator_ccf::print_taps()
+{
+  unsigned int i, j;
+  for(i = 0; i < d_rate; i++) {
+    printf("filter[%d]: [", i);
+    for(j = 0; j < d_taps_per_filter; j++) {
+      printf(" %.4e", d_taps[i][j]);
+    }
+    printf("]\n\n");
+  }
+}
+
+int
+gr_pfb_interpolator_ccf::work (int noutput_items,
+                              gr_vector_const_void_star &input_items,
+                              gr_vector_void_star &output_items)
+{
+  gr_complex *in = (gr_complex *) input_items[0];
+  gr_complex *out = (gr_complex *) output_items[0];
+
+  if (d_updated) {
+    d_updated = false;
+    return 0;               // history requirements may have changed.
+  }
+
+  int i = 0, count = 0;
+
+  while(i < noutput_items) {
+    for(int j = 0; j < d_rate; j++) {
+      out[i] = d_filters[j]->filter(&in[count]);
+      i++;
+    }
+    count++;
+  }
+  
+  return i;
+}
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h
new file mode 100644 (file)
index 0000000..50849d5
--- /dev/null
@@ -0,0 +1,129 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GR_PFB_INTERPOLATOR_CCF_H
+#define        INCLUDED_GR_PFB_INTERPOLATOR_CCF_H
+
+#include <gr_sync_interpolator.h>
+
+class gr_pfb_interpolator_ccf;
+typedef boost::shared_ptr<gr_pfb_interpolator_ccf> gr_pfb_interpolator_ccf_sptr;
+gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp, 
+                                                          const std::vector<float> &taps);
+
+class gr_fir_ccf;
+
+/*!
+ * \class gr_pfb_interpolator_ccf
+ * \brief Polyphase filterbank interpolator with gr_complex input,
+ * gr_complex output and float taps
+ *
+ * \ingroup filter_blk
+ * 
+ * This block takes in a signal stream and performs interger up-
+ * sampling (interpolation) with a polyphase filterbank. The first
+ * input is the integer specifying how much to interpolate by. The
+ * second input is a vector (Python list) of floating-point taps of
+ * the prototype filter.
+ *
+ * The filter's taps should be based on the interpolation rate
+ * specified. That is, the bandwidth specified is relative to the
+ * bandwidth after interpolation.
+ *
+ * For example, using the GNU Radio's firdes utility to building
+ * filters, we build a low-pass filter with a sampling rate of
+ * <EM>fs</EM>, a 3-dB bandwidth of <EM>BW</EM> and a transition
+ * bandwidth of <EM>TB</EM>. We can also specify the out-of-band
+ * attenuation to use, ATT, and the filter window function (a
+ * Blackman-harris window in this case). The first input is the gain,
+ * which is also specified as the interpolation rate so that the
+ * output levels are the same as the input (this creates an overall
+ * increase in power).
+ *
+ *      <B><EM>self._taps = gr.firdes.low_pass_2(interp, interp*fs, BW, TB, 
+ *           attenuation_dB=ATT, window=gr.firdes.WIN_BLACKMAN_hARRIS)</EM></B>
+ *
+ * The PFB interpolator code takes the taps generated above and builds
+ * a set of filters. The set contains <EM>interp</EM> number of
+ * filters and each filter contains ceil(taps.size()/interp) number of
+ * taps. Each tap from the filter prototype is sequentially inserted
+ * into the next filter. When all of the input taps are used, the
+ * remaining filters in the filterbank are filled out with 0's to make
+ * sure each filter has the same number of taps.
+ *
+ * The theory behind this block can be found in Chapter 7.1 of the
+ * following book.
+ *
+ *    <B><EM>f. harris, <EM>Multirate Signal Processing for Communication
+ *       Systems</EM>," Upper Saddle River, NJ: Prentice Hall,
+ *       Inc. 2004.</EM></B>
+ */
+
+class gr_pfb_interpolator_ccf : public gr_sync_interpolator
+{
+ private:
+  /*!
+   * Build the polyphase filterbank interpolator.
+   * \param interp  (unsigned integer) Specifies the interpolation rate to use
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank. The taps
+   *                                        should be generated at the interpolated sampling rate.
+   */
+  friend gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp,
+                                                                   const std::vector<float> &taps);
+
+  std::vector<gr_fir_ccf*> d_filters;
+  std::vector< std::vector<float> > d_taps;
+  unsigned int             d_rate;
+  unsigned int             d_taps_per_filter;
+  bool                    d_updated;
+
+  /*!
+   * Construct a Polyphase filterbank interpolator
+   * \param interp  (unsigned integer) Specifies the interpolation rate to use
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank. The taps
+   *                                        should be generated at the interpolated sampling rate.
+   */
+  gr_pfb_interpolator_ccf (unsigned int interp, 
+                          const std::vector<float> &taps);
+  
+public:
+  ~gr_pfb_interpolator_ccf ();
+  
+  /*!
+   * Resets the filterbank's filter taps with the new prototype filter
+   * \param taps    (vector/list of floats) The prototype filter to populate the filterbank. The taps
+   *                                        should be generated at the interpolated sampling rate.
+   */
+  void set_taps (const std::vector<float> &taps);
+
+  /*!
+   * Print all of the filterbank taps to screen.
+   */
+  void print_taps();
+  
+  int work (int noutput_items,
+           gr_vector_const_void_star &input_items,
+           gr_vector_void_star &output_items);
+};
+
+#endif
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.i b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.i
new file mode 100644 (file)
index 0000000..cf4302d
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,pfb_interpolator_ccf);
+
+gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp,
+                                                          const std::vector<float> &taps);
+
+class gr_pfb_interpolator_ccf : public gr_sync_interpolator
+{
+ private:
+  gr_pfb_interpolator_ccf (unsigned int interp,
+                          const std::vector<float> &taps);
+
+ public:
+  ~gr_pfb_interpolator_ccf ();
+
+  void set_taps (const std::vector<float> &taps);
+  void print_taps();
+};
diff --git a/gnuradio-core/src/lib/g72x/.gitignore b/gnuradio-core/src/lib/g72x/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gnuradio-core/src/lib/general/.gitignore b/gnuradio-core/src/lib/general/.gitignore
new file mode 100644 (file)
index 0000000..4f3696f
--- /dev/null
@@ -0,0 +1,323 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/generate-stamp
+/gr_constants.cc
+/GrFIRfilterCCC.cc
+/GrFIRfilterCCC.h
+/GrFIRfilterCCF.cc
+/GrFIRfilterCCF.h
+/GrFIRfilterFCC.cc
+/GrFIRfilterFCC.h
+/GrFIRfilterFFF.cc
+/GrFIRfilterFFF.h
+/GrFIRfilterFSF.cc
+/GrFIRfilterFSF.h
+/GrFIRfilterSCC.cc
+/GrFIRfilterSCC.h
+/GrFIRfilterSIS.cc
+/GrFIRfilterSIS.h
+/GrFreqXlatingFIRfilterCCC.cc
+/GrFreqXlatingFIRfilterCCC.h
+/GrFreqXlatingFIRfilterCCF.cc
+/GrFreqXlatingFIRfilterCCF.h
+/GrFreqXlatingFIRfilterFCC.cc
+/GrFreqXlatingFIRfilterFCC.h
+/GrFreqXlatingFIRfilterFCF.cc
+/GrFreqXlatingFIRfilterFCF.h
+/GrFreqXlatingFIRfilterSCC.cc
+/GrFreqXlatingFIRfilterSCC.h
+/GrFreqXlatingFIRfilterSCF.cc
+/GrFreqXlatingFIRfilterSCF.h
+/gr_fir_CCC.cc
+/gr_fir_CCC.h
+/gr_fir_CCC_generic.cc
+/gr_fir_CCC_generic.h
+/gr_fir_CCF.cc
+/gr_fir_CCF.h
+/gr_fir_CCF_generic.cc
+/gr_fir_CCF_generic.h
+/gr_fir_FCC.cc
+/gr_fir_FCC.h
+/gr_fir_FCC_generic.cc
+/gr_fir_FCC_generic.h
+/gr_fir_FFF.cc
+/gr_fir_FFF.h
+/gr_fir_FFF_generic.cc
+/gr_fir_FFF_generic.h
+/gr_fir_FSF.cc
+/gr_fir_FSF.h
+/gr_fir_FSF_generic.cc
+/gr_fir_FSF_generic.h
+/gr_fir_SCC.cc
+/gr_fir_SCC.h
+/gr_fir_SCC_generic.cc
+/gr_fir_SCC_generic.h
+/gr_fir_SIS.cc
+/gr_fir_SIS.h
+/gr_fir_SIS_generic.cc
+/gr_fir_SIS_generic.h
+/gr_fir_sysconfig.cc
+/gr_fir_sysconfig.h
+/gr_fir_sysconfig_generic.cc
+/gr_fir_sysconfig_generic.h
+/gr_fir_util.cc
+/gr_fir_util.h
+/GrFIRfilterCCC.i
+/GrFIRfilterCCF.i
+/GrFIRfilterFCC.i
+/GrFIRfilterFFF.i
+/GrFIRfilterFSF.i
+/GrFIRfilterSCC.i
+/GrFIRfilterSIS.i
+/GrFreqXlatingFIRfilterCCC.i
+/GrFreqXlatingFIRfilterCCF.i
+/GrFreqXlatingFIRfilterFCC.i
+/GrFreqXlatingFIRfilterFCF.i
+/GrFreqXlatingFIRfilterSCC.i
+/GrFreqXlatingFIRfilterSCF.i
+/# --- generated files ---
+/gr_add_cc.cc
+/gr_add_cc.h
+/gr_add_cc.i
+/gr_add_const_c.cc
+/gr_add_const_c.h
+/gr_add_const_c.i
+/gr_add_const_cc.cc
+/gr_add_const_cc.h
+/gr_add_const_cc.i
+/gr_add_const_f.cc
+/gr_add_const_f.h
+/gr_add_const_f.i
+/gr_add_const_ff.cc
+/gr_add_const_ff.h
+/gr_add_const_ff.i
+/gr_add_const_i.cc
+/gr_add_const_i.h
+/gr_add_const_i.i
+/gr_add_const_ii.cc
+/gr_add_const_ii.h
+/gr_add_const_ii.i
+/gr_add_const_s.cc
+/gr_add_const_s.h
+/gr_add_const_s.i
+/gr_add_const_sf.cc
+/gr_add_const_sf.h
+/gr_add_const_sf.i
+/gr_add_const_ss.cc
+/gr_add_const_ss.h
+/gr_add_const_ss.i
+/gr_add_const_vcc.cc
+/gr_add_const_vcc.h
+/gr_add_const_vcc.i
+/gr_add_const_vff.cc
+/gr_add_const_vff.h
+/gr_add_const_vff.i
+/gr_add_const_vii.cc
+/gr_add_const_vii.h
+/gr_add_const_vii.i
+/gr_add_const_vss.cc
+/gr_add_const_vss.h
+/gr_add_const_vss.i
+/gr_add_ff.cc
+/gr_add_ff.h
+/gr_add_ff.i
+/gr_add_ii.cc
+/gr_add_ii.h
+/gr_add_ii.i
+/gr_add_ss.cc
+/gr_add_ss.h
+/gr_add_ss.i
+/gr_add_vcc.cc
+/gr_add_vcc.h
+/gr_add_vcc.i
+/gr_add_vff.cc
+/gr_add_vff.h
+/gr_add_vff.i
+/gr_add_vii.cc
+/gr_add_vii.h
+/gr_add_vii.i
+/gr_add_vss.cc
+/gr_add_vss.h
+/gr_add_vss.i
+/gr_divide_cc.cc
+/gr_divide_cc.h
+/gr_divide_cc.i
+/gr_divide_ff.cc
+/gr_divide_ff.h
+/gr_divide_ff.i
+/gr_divide_ii.cc
+/gr_divide_ii.h
+/gr_divide_ii.i
+/gr_divide_ss.cc
+/gr_divide_ss.h
+/gr_divide_ss.i
+/gr_multiply_cc.cc
+/gr_multiply_cc.h
+/gr_multiply_cc.i
+/gr_multiply_const_cc.cc
+/gr_multiply_const_cc.h
+/gr_multiply_const_cc.i
+/gr_multiply_const_ff.cc
+/gr_multiply_const_ff.h
+/gr_multiply_const_ff.i
+/gr_multiply_const_ii.cc
+/gr_multiply_const_ii.h
+/gr_multiply_const_ii.i
+/gr_multiply_const_ss.cc
+/gr_multiply_const_ss.h
+/gr_multiply_const_ss.i
+/gr_multiply_ff.cc
+/gr_multiply_ff.h
+/gr_multiply_ff.i
+/gr_multiply_ii.cc
+/gr_multiply_ii.h
+/gr_multiply_ii.i
+/gr_multiply_ss.cc
+/gr_multiply_ss.h
+/gr_multiply_ss.i
+/gr_multiply_vcc.cc
+/gr_multiply_vcc.h
+/gr_multiply_vcc.i
+/gr_multiply_vff.cc
+/gr_multiply_vff.h
+/gr_multiply_vff.i
+/gr_multiply_vii.cc
+/gr_multiply_vii.h
+/gr_multiply_vii.i
+/gr_multiply_vss.cc
+/gr_multiply_vss.h
+/gr_multiply_vss.i
+/gr_multiply_const_vcc.cc
+/gr_multiply_const_vcc.h
+/gr_multiply_const_vcc.i
+/gr_multiply_const_vff.cc
+/gr_multiply_const_vff.h
+/gr_multiply_const_vff.i
+/gr_multiply_const_vii.cc
+/gr_multiply_const_vii.h
+/gr_multiply_const_vii.i
+/gr_multiply_const_vss.cc
+/gr_multiply_const_vss.h
+/gr_multiply_const_vss.i
+/gr_noise_source_c.cc
+/gr_noise_source_c.h
+/gr_noise_source_c.i
+/gr_noise_source_f.cc
+/gr_noise_source_f.h
+/gr_noise_source_f.i
+/gr_noise_source_i.cc
+/gr_noise_source_i.h
+/gr_noise_source_i.i
+/gr_noise_source_s.cc
+/gr_noise_source_s.h
+/gr_noise_source_s.i
+/gr_sig_source_c.cc
+/gr_sig_source_c.h
+/gr_sig_source_c.i
+/gr_sig_source_f.cc
+/gr_sig_source_f.h
+/gr_sig_source_f.i
+/gr_sig_source_i.cc
+/gr_sig_source_i.h
+/gr_sig_source_i.i
+/gr_sig_source_s.cc
+/gr_sig_source_s.h
+/gr_sig_source_s.i
+/gr_sub_cc.cc
+/gr_sub_cc.h
+/gr_sub_cc.i
+/gr_sub_ff.cc
+/gr_sub_ff.h
+/gr_sub_ff.i
+/gr_sub_ii.cc
+/gr_sub_ii.h
+/gr_sub_ii.i
+/gr_sub_ss.cc
+/gr_sub_ss.h
+/gr_sub_ss.i
+/gr_vector_sink_b.cc
+/gr_vector_sink_b.h
+/gr_vector_sink_b.i
+/gr_vector_sink_c.cc
+/gr_vector_sink_c.h
+/gr_vector_sink_c.i
+/gr_vector_sink_f.cc
+/gr_vector_sink_f.h
+/gr_vector_sink_f.i
+/gr_vector_sink_i.cc
+/gr_vector_sink_i.h
+/gr_vector_sink_i.i
+/gr_vector_sink_s.cc
+/gr_vector_sink_s.h
+/gr_vector_sink_s.i
+/gr_vector_source_b.cc
+/gr_vector_source_b.h
+/gr_vector_source_b.i
+/gr_vector_source_c.cc
+/gr_vector_source_c.h
+/gr_vector_source_c.i
+/gr_vector_source_f.cc
+/gr_vector_source_f.h
+/gr_vector_source_f.i
+/gr_vector_source_i.cc
+/gr_vector_source_i.h
+/gr_vector_source_i.i
+/gr_vector_source_s.cc
+/gr_vector_source_s.h
+/gr_vector_source_s.i
+/gr_mute_cc.cc
+/gr_mute_cc.h
+/gr_mute_cc.i
+/gr_mute_ff.cc
+/gr_mute_ff.h
+/gr_mute_ff.i
+/gr_mute_ii.cc
+/gr_mute_ii.h
+/gr_mute_ii.i
+/gr_mute_ss.cc
+/gr_mute_ss.h
+/gr_mute_ss.i
+/gr_chunks_to_symbols_bc.cc
+/gr_chunks_to_symbols_bc.h
+/gr_chunks_to_symbols_bc.i
+/gr_chunks_to_symbols_bf.cc
+/gr_chunks_to_symbols_bf.h
+/gr_chunks_to_symbols_bf.i
+/gr_chunks_to_symbols_ic.cc
+/gr_chunks_to_symbols_ic.h
+/gr_chunks_to_symbols_ic.i
+/gr_chunks_to_symbols_if.cc
+/gr_chunks_to_symbols_if.h
+/gr_chunks_to_symbols_if.i
+/gr_chunks_to_symbols_sc.cc
+/gr_chunks_to_symbols_sc.h
+/gr_chunks_to_symbols_sc.i
+/gr_chunks_to_symbols_sf.cc
+/gr_chunks_to_symbols_sf.h
+/gr_chunks_to_symbols_sf.i
+/gr_packed_to_unpacked_bb.cc
+/gr_packed_to_unpacked_bb.h
+/gr_packed_to_unpacked_bb.i
+/gr_packed_to_unpacked_ii.cc
+/gr_packed_to_unpacked_ii.h
+/gr_packed_to_unpacked_ii.i
+/gr_packed_to_unpacked_ss.cc
+/gr_packed_to_unpacked_ss.h
+/gr_packed_to_unpacked_ss.i
+/gr_unpacked_to_packed_bb.cc
+/gr_unpacked_to_packed_bb.h
+/gr_unpacked_to_packed_bb.i
+/gr_unpacked_to_packed_ii.cc
+/gr_unpacked_to_packed_ii.h
+/gr_unpacked_to_packed_ii.i
+/gr_unpacked_to_packed_ss.cc
+/gr_unpacked_to_packed_ss.h
+/gr_unpacked_to_packed_ss.i
+/# --- end generated files ---
diff --git a/gnuradio-core/src/lib/gengen/.gitignore b/gnuradio-core/src/lib/gengen/.gitignore
new file mode 100644 (file)
index 0000000..ecd4cb0
--- /dev/null
@@ -0,0 +1,418 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/generate-stamp
+/GrFIRfilterCCC.cc
+/GrFIRfilterCCC.h
+/GrFIRfilterCCF.cc
+/GrFIRfilterCCF.h
+/GrFIRfilterFCC.cc
+/GrFIRfilterFCC.h
+/GrFIRfilterFFF.cc
+/GrFIRfilterFFF.h
+/GrFIRfilterFSF.cc
+/GrFIRfilterFSF.h
+/GrFIRfilterSCC.cc
+/GrFIRfilterSCC.h
+/GrFIRfilterSIS.cc
+/GrFIRfilterSIS.h
+/GrFreqXlatingFIRfilterCCC.cc
+/GrFreqXlatingFIRfilterCCC.h
+/GrFreqXlatingFIRfilterCCF.cc
+/GrFreqXlatingFIRfilterCCF.h
+/GrFreqXlatingFIRfilterFCC.cc
+/GrFreqXlatingFIRfilterFCC.h
+/GrFreqXlatingFIRfilterFCF.cc
+/GrFreqXlatingFIRfilterFCF.h
+/GrFreqXlatingFIRfilterSCC.cc
+/GrFreqXlatingFIRfilterSCC.h
+/GrFreqXlatingFIRfilterSCF.cc
+/GrFreqXlatingFIRfilterSCF.h
+/gr_fir_CCC.cc
+/gr_fir_CCC.h
+/gr_fir_CCC_generic.cc
+/gr_fir_CCC_generic.h
+/gr_fir_CCF.cc
+/gr_fir_CCF.h
+/gr_fir_CCF_generic.cc
+/gr_fir_CCF_generic.h
+/gr_fir_FCC.cc
+/gr_fir_FCC.h
+/gr_fir_FCC_generic.cc
+/gr_fir_FCC_generic.h
+/gr_fir_FFF.cc
+/gr_fir_FFF.h
+/gr_fir_FFF_generic.cc
+/gr_fir_FFF_generic.h
+/gr_fir_FSF.cc
+/gr_fir_FSF.h
+/gr_fir_FSF_generic.cc
+/gr_fir_FSF_generic.h
+/gr_fir_SCC.cc
+/gr_fir_SCC.h
+/gr_fir_SCC_generic.cc
+/gr_fir_SCC_generic.h
+/gr_fir_SIS.cc
+/gr_fir_SIS.h
+/gr_fir_SIS_generic.cc
+/gr_fir_SIS_generic.h
+/gr_fir_sysconfig.cc
+/gr_fir_sysconfig.h
+/gr_fir_sysconfig_generic.cc
+/gr_fir_sysconfig_generic.h
+/gr_fir_util.cc
+/gr_fir_util.h
+/GrFIRfilterCCC.i
+/GrFIRfilterCCF.i
+/GrFIRfilterFCC.i
+/GrFIRfilterFFF.i
+/GrFIRfilterFSF.i
+/GrFIRfilterSCC.i
+/GrFIRfilterSIS.i
+/GrFreqXlatingFIRfilterCCC.i
+/GrFreqXlatingFIRfilterCCF.i
+/GrFreqXlatingFIRfilterFCC.i
+/GrFreqXlatingFIRfilterFCF.i
+/GrFreqXlatingFIRfilterSCC.i
+/GrFreqXlatingFIRfilterSCF.i
+/# --- generated files ---
+/gr_add_cc.cc
+/gr_add_cc.h
+/gr_add_cc.i
+/gr_add_const_c.cc
+/gr_add_const_cc.cc
+/gr_add_const_cc.h
+/gr_add_const_cc.i
+/gr_add_const_c.h
+/gr_add_const_c.i
+/gr_add_const_f.cc
+/gr_add_const_ff.cc
+/gr_add_const_ff.h
+/gr_add_const_ff.i
+/gr_add_const_f.h
+/gr_add_const_f.i
+/gr_add_const_i.cc
+/gr_add_const_i.h
+/gr_add_const_i.i
+/gr_add_const_ii.cc
+/gr_add_const_ii.h
+/gr_add_const_ii.i
+/gr_add_const_s.cc
+/gr_add_const_sf.cc
+/gr_add_const_sf.h
+/gr_add_const_sf.i
+/gr_add_const_s.h
+/gr_add_const_s.i
+/gr_add_const_ss.cc
+/gr_add_const_ss.h
+/gr_add_const_ss.i
+/gr_add_const_vcc.cc
+/gr_add_const_vcc.h
+/gr_add_const_vcc.i
+/gr_add_const_vff.cc
+/gr_add_const_vff.h
+/gr_add_const_vff.i
+/gr_add_const_vii.cc
+/gr_add_const_vii.h
+/gr_add_const_vii.i
+/gr_add_const_vss.cc
+/gr_add_const_vss.h
+/gr_add_const_vss.i
+/gr_add_ff.cc
+/gr_add_ff.h
+/gr_add_ff.i
+/gr_add_ii.cc
+/gr_add_ii.h
+/gr_add_ii.i
+/gr_add_ss.cc
+/gr_add_ss.h
+/gr_add_ss.i
+/gr_and_bb.cc
+/gr_and_bb.h
+/gr_and_bb.i
+/gr_and_ii.cc
+/gr_and_ii.h
+/gr_and_ii.i
+/gr_and_ss.cc
+/gr_and_ss.h
+/gr_and_ss.i
+/gr_argmax_fs.cc
+/gr_argmax_fs.h
+/gr_argmax_fs.i
+/gr_argmax_is.cc
+/gr_argmax_is.h
+/gr_argmax_is.i
+/gr_argmax_ss.cc
+/gr_argmax_ss.h
+/gr_argmax_ss.i
+/gr_chunks_to_symbols_bc.cc
+/gr_chunks_to_symbols_bc.h
+/gr_chunks_to_symbols_bc.i
+/gr_chunks_to_symbols_bf.cc
+/gr_chunks_to_symbols_bf.h
+/gr_chunks_to_symbols_bf.i
+/gr_chunks_to_symbols_ic.cc
+/gr_chunks_to_symbols_ic.h
+/gr_chunks_to_symbols_ic.i
+/gr_chunks_to_symbols_if.cc
+/gr_chunks_to_symbols_if.h
+/gr_chunks_to_symbols_if.i
+/gr_chunks_to_symbols_sc.cc
+/gr_chunks_to_symbols_sc.h
+/gr_chunks_to_symbols_sc.i
+/gr_chunks_to_symbols_sf.cc
+/gr_chunks_to_symbols_sf.h
+/gr_chunks_to_symbols_sf.i
+/gr_divide_cc.cc
+/gr_divide_cc.h
+/gr_divide_cc.i
+/gr_divide_ff.cc
+/gr_divide_ff.h
+/gr_divide_ff.i
+/gr_divide_ii.cc
+/gr_divide_ii.h
+/gr_divide_ii.i
+/gr_divide_ss.cc
+/gr_divide_ss.h
+/gr_divide_ss.i
+/gr_integrate_cc.cc
+/gr_integrate_cc.h
+/gr_integrate_cc.i
+/gr_integrate_ff.cc
+/gr_integrate_ff.h
+/gr_integrate_ff.i
+/gr_integrate_ii.cc
+/gr_integrate_ii.h
+/gr_integrate_ii.i
+/gr_integrate_ss.cc
+/gr_integrate_ss.h
+/gr_integrate_ss.i
+/gr_max_ff.cc
+/gr_max_ff.h
+/gr_max_ff.i
+/gr_max_ii.cc
+/gr_max_ii.h
+/gr_max_ii.i
+/gr_max_ss.cc
+/gr_max_ss.h
+/gr_max_ss.i
+/gr_multiply_cc.cc
+/gr_multiply_cc.h
+/gr_multiply_cc.i
+/gr_multiply_const_cc.cc
+/gr_multiply_const_cc.h
+/gr_multiply_const_cc.i
+/gr_multiply_const_ff.cc
+/gr_multiply_const_ff.h
+/gr_multiply_const_ff.i
+/gr_multiply_const_ii.cc
+/gr_multiply_const_ii.h
+/gr_multiply_const_ii.i
+/gr_multiply_const_ss.cc
+/gr_multiply_const_ss.h
+/gr_multiply_const_ss.i
+/gr_multiply_const_vcc.cc
+/gr_multiply_const_vcc.h
+/gr_multiply_const_vcc.i
+/gr_multiply_const_vff.cc
+/gr_multiply_const_vff.h
+/gr_multiply_const_vff.i
+/gr_multiply_const_vii.cc
+/gr_multiply_const_vii.h
+/gr_multiply_const_vii.i
+/gr_multiply_const_vss.cc
+/gr_multiply_const_vss.h
+/gr_multiply_const_vss.i
+/gr_multiply_ff.cc
+/gr_multiply_ff.h
+/gr_multiply_ff.i
+/gr_multiply_ii.cc
+/gr_multiply_ii.h
+/gr_multiply_ii.i
+/gr_multiply_ss.cc
+/gr_multiply_ss.h
+/gr_multiply_ss.i
+/gr_mute_cc.cc
+/gr_mute_cc.h
+/gr_mute_cc.i
+/gr_mute_ff.cc
+/gr_mute_ff.h
+/gr_mute_ff.i
+/gr_mute_ii.cc
+/gr_mute_ii.h
+/gr_mute_ii.i
+/gr_mute_ss.cc
+/gr_mute_ss.h
+/gr_mute_ss.i
+/gr_noise_source_c.cc
+/gr_noise_source_c.h
+/gr_noise_source_c.i
+/gr_noise_source_f.cc
+/gr_noise_source_f.h
+/gr_noise_source_f.i
+/gr_noise_source_i.cc
+/gr_noise_source_i.h
+/gr_noise_source_i.i
+/gr_noise_source_s.cc
+/gr_noise_source_s.h
+/gr_noise_source_s.i
+/gr_not_bb.cc
+/gr_not_bb.h
+/gr_not_bb.i
+/gr_not_ii.cc
+/gr_not_ii.h
+/gr_not_ii.i
+/gr_not_ss.cc
+/gr_not_ss.h
+/gr_not_ss.i
+/gr_or_bb.cc
+/gr_or_bb.h
+/gr_or_bb.i
+/gr_or_ii.cc
+/gr_or_ii.h
+/gr_or_ii.i
+/gr_or_ss.cc
+/gr_or_ss.h
+/gr_or_ss.i
+/gr_packed_to_unpacked_bb.cc
+/gr_packed_to_unpacked_bb.h
+/gr_packed_to_unpacked_bb.i
+/gr_packed_to_unpacked_ii.cc
+/gr_packed_to_unpacked_ii.h
+/gr_packed_to_unpacked_ii.i
+/gr_packed_to_unpacked_ss.cc
+/gr_packed_to_unpacked_ss.h
+/gr_packed_to_unpacked_ss.i
+/gr_peak_detector_fb.cc
+/gr_peak_detector_fb.h
+/gr_peak_detector_fb.i
+/gr_peak_detector_ff.cc
+/gr_peak_detector_ff.h
+/gr_peak_detector_ff.i
+/gr_peak_detector_ib.cc
+/gr_peak_detector_ib.h
+/gr_peak_detector_ib.i
+/gr_peak_detector_ii.cc
+/gr_peak_detector_ii.h
+/gr_peak_detector_ii.i
+/gr_peak_detector_sb.cc
+/gr_peak_detector_sb.h
+/gr_peak_detector_sb.i
+/gr_peak_detector_ss.cc
+/gr_peak_detector_ss.h
+/gr_peak_detector_ss.i
+/gr_prefix.cc
+/gr_sample_and_hold_bb.cc
+/gr_sample_and_hold_bb.h
+/gr_sample_and_hold_bb.i
+/gr_sample_and_hold_ff.cc
+/gr_sample_and_hold_ff.h
+/gr_sample_and_hold_ff.i
+/gr_sample_and_hold_ii.cc
+/gr_sample_and_hold_ii.h
+/gr_sample_and_hold_ii.i
+/gr_sample_and_hold_ss.cc
+/gr_sample_and_hold_ss.h
+/gr_sample_and_hold_ss.i
+/gr_sig_source_c.cc
+/gr_sig_source_c.h
+/gr_sig_source_c.i
+/gr_sig_source_f.cc
+/gr_sig_source_f.h
+/gr_sig_source_f.i
+/gr_sig_source_i.cc
+/gr_sig_source_i.h
+/gr_sig_source_i.i
+/gr_sig_source_s.cc
+/gr_sig_source_s.h
+/gr_sig_source_s.i
+/gr_sub_cc.cc
+/gr_sub_cc.h
+/gr_sub_cc.i
+/gr_sub_ff.cc
+/gr_sub_ff.h
+/gr_sub_ff.i
+/gr_sub_ii.cc
+/gr_sub_ii.h
+/gr_sub_ii.i
+/gr_sub_ss.cc
+/gr_sub_ss.h
+/gr_sub_ss.i
+/gr_unpacked_to_packed_bb.cc
+/gr_unpacked_to_packed_bb.h
+/gr_unpacked_to_packed_bb.i
+/gr_unpacked_to_packed_ii.cc
+/gr_unpacked_to_packed_ii.h
+/gr_unpacked_to_packed_ii.i
+/gr_unpacked_to_packed_ss.cc
+/gr_unpacked_to_packed_ss.h
+/gr_unpacked_to_packed_ss.i
+/gr_vector_sink_b.cc
+/gr_vector_sink_b.h
+/gr_vector_sink_b.i
+/gr_vector_sink_c.cc
+/gr_vector_sink_c.h
+/gr_vector_sink_c.i
+/gr_vector_sink_f.cc
+/gr_vector_sink_f.h
+/gr_vector_sink_f.i
+/gr_vector_sink_i.cc
+/gr_vector_sink_i.h
+/gr_vector_sink_i.i
+/gr_vector_sink_s.cc
+/gr_vector_sink_s.h
+/gr_vector_sink_s.i
+/gr_vector_source_b.cc
+/gr_vector_source_b.h
+/gr_vector_source_b.i
+/gr_vector_source_c.cc
+/gr_vector_source_c.h
+/gr_vector_source_c.i
+/gr_vector_source_f.cc
+/gr_vector_source_f.h
+/gr_vector_source_f.i
+/gr_vector_source_i.cc
+/gr_vector_source_i.h
+/gr_vector_source_i.i
+/gr_vector_source_s.cc
+/gr_vector_source_s.h
+/gr_vector_source_s.i
+/gr_xor_bb.cc
+/gr_xor_bb.h
+/gr_xor_bb.i
+/gr_xor_ii.cc
+/gr_xor_ii.h
+/gr_xor_ii.i
+/gr_xor_ss.cc
+/gr_xor_ss.h
+/gr_xor_ss.i
+/gr_moving_average_cc.cc
+/gr_moving_average_cc.h
+/gr_moving_average_cc.i
+/gr_moving_average_ff.cc
+/gr_moving_average_ff.h
+/gr_moving_average_ff.i
+/gr_moving_average_ss.cc
+/gr_moving_average_ss.h
+/gr_moving_average_ss.i
+/gr_moving_average_ii.cc
+/gr_moving_average_ii.h
+/gr_moving_average_ii.i
+/gr_and_const_bb.cc
+/gr_and_const_ss.h
+/gr_and_const_ss.i
+/gr_and_const_ii.cc
+/gr_and_const_bb.h
+/gr_and_const_ss.cc
+/gr_and_const_bb.i
+/gr_and_const_ii.h
+/gr_and_const_ii.i
+/# --- end generated files ---
+/stamp-*
+/gengen_generated.i
diff --git a/gnuradio-core/src/lib/hier/.gitignore b/gnuradio-core/src/lib/hier/.gitignore
new file mode 100644 (file)
index 0000000..89a768d
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
diff --git a/gnuradio-core/src/lib/io/.gitignore b/gnuradio-core/src/lib/io/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gnuradio-core/src/lib/missing/.gitignore b/gnuradio-core/src/lib/missing/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gnuradio-core/src/lib/reed-solomon/.gitignore b/gnuradio-core/src/lib/reed-solomon/.gitignore
new file mode 100644 (file)
index 0000000..f137f5c
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/rstest
diff --git a/gnuradio-core/src/lib/runtime/.gitignore b/gnuradio-core/src/lib/runtime/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
index 14ab464ad257835cdc579cf896386b004dd04b1d..b0e80427700c649efbb25bf0e674a96be839e775 100644 (file)
@@ -44,6 +44,7 @@ libruntime_la_SOURCES =                       \
        gr_io_signature.cc                      \
        gr_local_sighandler.cc                  \
        gr_message.cc                           \
+       gr_msg_accepter.cc                      \
        gr_msg_handler.cc                       \
        gr_msg_queue.cc                         \
        gr_pagesize.cc                          \
@@ -96,6 +97,7 @@ grinclude_HEADERS =                           \
        gr_io_signature.h                       \
        gr_local_sighandler.h                   \
        gr_message.h                            \
+       gr_msg_accepter.h                       \
        gr_msg_handler.h                        \
        gr_msg_queue.h                          \
        gr_pagesize.h                           \
index 71ccc02454c591d21eb31efd094c7da063de5725..2fa1066cb9b99f5045d48d5de7dbd4a059d0f582 100644 (file)
@@ -41,8 +41,7 @@ gr_basic_block_ncurrently_allocated()
 gr_basic_block::gr_basic_block(const std::string &name,
                                gr_io_signature_sptr input_signature,
                                gr_io_signature_sptr output_signature) 
-  : gruel::msg_accepter_msgq(gruel::make_msg_queue(0)),
-    d_name(name),
+  : d_name(name),
     d_input_signature(input_signature),
     d_output_signature(output_signature),
     d_unique_id(s_next_id++),
index 27ec0fd89b1d44ed39745fd835956cb92122b307..b8797fdc678038d49075b0faf94cce8176ca5267 100644 (file)
@@ -26,7 +26,7 @@
 #include <gr_runtime_types.h>
 #include <gr_sptr_magic.h>
 #include <boost/enable_shared_from_this.hpp>
-#include <gruel/msg_accepter_msgq.h>
+#include <gr_msg_accepter.h>
 #include <string>
 
 /*!
@@ -40,7 +40,7 @@
  * signal processing functions.
  */
 
-class gr_basic_block : gruel::msg_accepter_msgq, public boost::enable_shared_from_this<gr_basic_block>
+class gr_basic_block : public gr_msg_accepter, public boost::enable_shared_from_this<gr_basic_block>
 {
 protected:
     friend class gr_flowgraph;
index ae1ea25628d63631df41dcd4924fa85cdfa1a8ed..d33dfed8461da2903be450d20b8de9fd4316de53 100644 (file)
@@ -106,3 +106,10 @@ gr_block_detail::produce_each (int how_many_items)
     for (int i = 0; i < noutputs (); i++)
       d_output[i]->update_write_pointer (how_many_items);
 }
+
+
+void
+gr_block_detail::_post(pmt::pmt_t msg)
+{
+  d_tpb.insert_tail(msg);
+}
index 2856c402c7a7925a5d8f762adc9d2eb7f5861633..9d63586024fd57030557951a2286476b4c1a2687 100644 (file)
@@ -79,6 +79,12 @@ class gr_block_detail {
   void produce_each (int how_many_items);
 
 
+  /*!
+   * Accept msg, place in queue, arrange for thread to be awakened if it's not already.
+   */
+  void _post(pmt::pmt_t msg);
+
+
   gr_tpb_detail                             d_tpb;     // used by thread-per-block scheduler
 
   // ----------------------------------------------------------------------------
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_accepter.cc b/gnuradio-core/src/lib/runtime/gr_msg_accepter.cc
new file mode 100644 (file)
index 0000000..89876ae
--- /dev/null
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gr_msg_accepter.h>
+#include <gr_block.h>
+#include <gr_block_detail.h>
+#include <gr_hier_block2.h>
+#include <stdexcept>
+
+using namespace pmt;
+
+gr_msg_accepter::gr_msg_accepter()
+{
+}
+
+gr_msg_accepter::~gr_msg_accepter()
+{
+  // NOP, required as virtual destructor
+}
+
+void
+gr_msg_accepter::post(pmt_t msg)
+{
+  // Notify derived class, handled case by case
+  gr_block *p = dynamic_cast<gr_block *>(this);
+  if (p) { 
+    p->detail()->_post(msg);
+    return;
+  }
+  gr_hier_block2 *p2 = dynamic_cast<gr_hier_block2 *>(this);
+  if (p2){
+    // FIXME do the right thing
+    return;
+  }
+
+  throw std::runtime_error("unknown derived class");
+}
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_accepter.h b/gnuradio-core/src/lib/runtime/gr_msg_accepter.h
new file mode 100644 (file)
index 0000000..79a631f
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef INCLUDED_GR_MSG_ACCEPTER_H
+#define INCLUDED_GR_MSG_ACCEPTER_H
+
+#include <gruel/msg_accepter.h>
+#include <gruel/pmt.h>
+
+/*!
+ * \brief Accepts messages and inserts them into a message queue, then notifies
+ * subclass gr_basic_block there is a message pending.
+ */
+class gr_msg_accepter : public gruel::msg_accepter
+{
+public:
+  gr_msg_accepter();
+  ~gr_msg_accepter();
+
+  void post(pmt::pmt_t msg);
+
+};
+
+#endif /* INCLUDED_GR_MSG_ACCEPTER_H */
index 02e8deed88b90a8fda7326977ab6279c918995fe..c6311ccaa3efefd9ef62342231b0ad73aadab789 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2008 Free Software Foundation, Inc.
+ * Copyright 2008,2009 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
@@ -27,6 +27,8 @@
 #include <gr_block_detail.h>
 #include <gr_buffer.h>
 
+using namespace pmt;
+
 /*
  * We assume that no worker threads are ever running when the
  * graph structure is being manipulated, thus it's safe for us to poke
@@ -65,3 +67,44 @@ gr_tpb_detail::notify_neighbors(gr_block_detail *d)
   notify_downstream(d);
   notify_upstream(d);
 }
+
+void
+gr_tpb_detail::insert_tail(pmt::pmt_t msg)
+{
+  gruel::scoped_lock guard(mutex);
+
+  msg_queue.push_back(msg);
+
+  // wake up thread if BLKD_IN or BLKD_OUT
+  input_cond.notify_one();
+  output_cond.notify_one();
+}
+
+pmt_t 
+gr_tpb_detail::delete_head_nowait()
+{
+  gruel::scoped_lock guard(mutex);
+
+  if (empty_p())
+    return pmt_t();
+
+  pmt_t m(msg_queue.front());
+  msg_queue.pop_front();
+
+  return m;
+}
+
+/*
+ * Caller must already be holding the mutex
+ */
+pmt_t 
+gr_tpb_detail::delete_head_nowait_already_holding_mutex()
+{
+  if (empty_p())
+    return pmt_t();
+
+  pmt_t m(msg_queue.front());
+  msg_queue.pop_front();
+
+  return m;
+}
index ab955240b3ad0daaad399ed12cccd1080c41b57f..acfa264c7c412d02a39ce3f6d1c7e32dd48f92dc 100644 (file)
@@ -22,6 +22,8 @@
 #define INCLUDED_GR_TPB_DETAIL_H
 
 #include <gruel/thread.h>
+#include <deque>
+#include <gruel/pmt.h>
 
 class gr_block_detail;
 
@@ -36,9 +38,12 @@ struct gr_tpb_detail {
   bool                         output_changed;
   gruel::condition_variable    output_cond;
 
-  gr_tpb_detail()
-    : input_changed(false), output_changed(false) {}
+private:
+  std::deque<pmt::pmt_t>       msg_queue;
 
+public:
+  gr_tpb_detail()
+    : input_changed(false), output_changed(false) { }
 
   //! Called by us to tell all our upstream blocks that their output may have changed.
   void notify_upstream(gr_block_detail *d);
@@ -56,6 +61,23 @@ struct gr_tpb_detail {
     input_changed = false;
     output_changed = false;
   }
+  
+  //! is the queue empty?
+  bool empty_p() const { return msg_queue.empty(); }
+
+  //| Acquires and release the mutex   
+  void insert_tail(pmt::pmt_t msg);
+
+  /*!
+   * \returns returns pmt at head of queue or pmt_t() if empty.
+   */
+  pmt::pmt_t delete_head_nowait();
+
+  /*!
+   * \returns returns pmt at head of queue or pmt_t() if empty.
+   * Caller must already be holding the mutex
+   */
+  pmt::pmt_t delete_head_nowait_already_holding_mutex();
 
 private:
 
index 458b16d64cd436ee38f052f68aa8fa1071523d79..03eef17d937f63927f4723bc623b0474af17357c 100644 (file)
 #include <gr_tpb_thread_body.h>
 #include <iostream>
 #include <boost/thread.hpp>
+#include <gruel/pmt.h>
+
+using namespace pmt;
 
 gr_tpb_thread_body::gr_tpb_thread_body(gr_block_sptr block)
   : d_exec(block)
 {
   // std::cerr << "gr_tpb_thread_body: " << block << std::endl;
 
-  gr_block_detail      *d = block->detail().get();
+  gr_block_detail *d = block->detail().get();
   gr_block_executor::state s;
+  pmt_t msg;
+
 
   while (1){
     boost::this_thread::interruption_point();
+    // handle any queued up messages
+    while ((msg = d->d_tpb.delete_head_nowait()))
+      block->handle_msg(msg);
 
     d->d_tpb.clear_changed();
     s = d_exec.run_one_iteration();
@@ -55,16 +64,39 @@ gr_tpb_thread_body::gr_tpb_thread_body(gr_block_sptr block)
     case gr_block_executor::BLKD_IN:           // Wait for input.
       {
        gruel::scoped_lock guard(d->d_tpb.mutex);
-       while(!d->d_tpb.input_changed)
-         d->d_tpb.input_cond.wait(guard);
+       while (!d->d_tpb.input_changed){
+         
+         // wait for input or message
+         while(!d->d_tpb.input_changed && d->d_tpb.empty_p())
+           d->d_tpb.input_cond.wait(guard);
+
+         // handle all pending messages
+         while ((msg = d->d_tpb.delete_head_nowait_already_holding_mutex())){
+           guard.unlock();                     // release lock while processing msg
+           block->handle_msg(msg);
+           guard.lock();
+         }
+       }
       }
       break;
+
       
     case gr_block_executor::BLKD_OUT:          // Wait for output buffer space.
       {
        gruel::scoped_lock guard(d->d_tpb.mutex);
-       while(!d->d_tpb.output_changed)
-         d->d_tpb.output_cond.wait(guard);
+       while (!d->d_tpb.output_changed){
+         
+         // wait for output room or message
+         while(!d->d_tpb.output_changed && d->d_tpb.empty_p())
+           d->d_tpb.output_cond.wait(guard);
+
+         // handle all pending messages
+         while ((msg = d->d_tpb.delete_head_nowait_already_holding_mutex())){
+           guard.unlock();                     // release lock while processing msg
+           block->handle_msg(msg);
+           guard.lock();
+         }
+       }
       }
       break;
 
diff --git a/gnuradio-core/src/lib/swig/.gitignore b/gnuradio-core/src/lib/swig/.gitignore
new file mode 100644 (file)
index 0000000..9d7d010
--- /dev/null
@@ -0,0 +1,36 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/swigrun.py
+/swigrun_wrap.c
+/Makefile.swigdeps.new
+/gnuradio_swig_py_runtime.d
+/gnuradio_swig_py_general.d
+/gnuradio_swig_py_gengen.d
+/gnuradio_swig_py_filter.d
+/gnuradio_swig_py_io.d
+/gnuradio_swig_bug_workaround.h
+/gnuradio_swig_py_runtime.cc
+/gnuradio_swig_py_runtime.h
+/gnuradio_swig_py_runtime.py
+/gnuradio_swig_py_general.cc
+/gnuradio_swig_py_general.h
+/gnuradio_swig_py_general.py
+/gnuradio_swig_py_gengen.cc
+/gnuradio_swig_py_gengen.h
+/gnuradio_swig_py_gengen.py
+/gnuradio_swig_py_filter.cc
+/gnuradio_swig_py_filter.h
+/gnuradio_swig_py_filter.py
+/gnuradio_swig_py_io.cc
+/gnuradio_swig_py_io.h
+/gnuradio_swig_py_io.py
+/gnuradio_swig_py_hier.cc
+/gnuradio_swig_py_hier.h
+/gnuradio_swig_py_hier.py
diff --git a/gnuradio-core/src/lib/viterbi/.gitignore b/gnuradio-core/src/lib/viterbi/.gitignore
new file mode 100644 (file)
index 0000000..85bb5cc
--- /dev/null
@@ -0,0 +1,6 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
+/encode
+/decode
diff --git a/gnuradio-core/src/python/.gitignore b/gnuradio-core/src/python/.gitignore
new file mode 100644 (file)
index 0000000..f9c5da0
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-core/src/python/bin/.gitignore b/gnuradio-core/src/python/bin/.gitignore
new file mode 100644 (file)
index 0000000..f9c5da0
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/.gitignore b/gnuradio-core/src/python/gnuradio/.gitignore
new file mode 100644 (file)
index 0000000..f9c5da0
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/blks2/.gitignore b/gnuradio-core/src/python/gnuradio/blks2/.gitignore
new file mode 100644 (file)
index 0000000..b695091
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pyc
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/.gitignore b/gnuradio-core/src/python/gnuradio/blks2impl/.gitignore
new file mode 100644 (file)
index 0000000..f9c5da0
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
index f07abd4c4b13d74b5ed4338839c6b41fd6d00b1e..17be09cc73b35ed9239c97700db5e3b463823f5c 100644 (file)
@@ -47,6 +47,10 @@ grblkspython_PYTHON =                \
        ofdm_sync_pn.py         \
        ofdm_sync_pnac.py       \
        ofdm_sync_ml.py         \
+       pfb_arb_resampler.py    \
+       pfb_channelizer.py      \
+       pfb_decimator.py        \
+       pfb_interpolator.py     \
        pkt.py                  \
        psk.py                  \
        qam.py                  \
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py
new file mode 100644 (file)
index 0000000..b1b3dfc
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr
+
+class pfb_arb_resampler_ccf(gr.hier_block2):
+    '''
+    Convinience wrapper for the polyphase filterbank arbitrary resampler.
+
+    The block takes a single complex stream in and outputs a single complex
+    stream out. As such, it requires no extra glue to handle the input/output
+    streams. This block is provided to be consistent with the interface to the
+    other PFB block.
+    '''
+    def __init__(self, rate, taps, flt_size=32):
+       gr.hier_block2.__init__(self, "pfb_arb_resampler_ccf",
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
+        
+        self._rate = rate
+        self._taps = taps
+        self._size = flt_size
+
+        self.pfb = gr.pfb_arb_resampler_ccf(self._rate, self._taps, self._size)
+
+        self.connect(self, self.pfb)
+        self.connect(self.pfb, self)
+        
+        
+        
+        
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py
new file mode 100644 (file)
index 0000000..c45ae4d
--- /dev/null
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr
+
+class pfb_channelizer_ccf(gr.hier_block2):
+    '''
+    Make a Polyphase Filter channelizer (complex in, complex out, floating-point taps)
+
+    This simplifies the interface by allowing a single input stream to connect to this block.
+    It will then output a stream for each channel.
+    '''
+    def __init__(self, numchans, taps):
+       gr.hier_block2.__init__(self, "pfb_channelizer_ccf",
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+                               gr.io_signature(numchans, numchans, gr.sizeof_gr_complex)) # Output signature
+
+        self._numchans = numchans
+        self._taps = taps
+
+        self.s2ss = gr.stream_to_streams(gr.sizeof_gr_complex, self._numchans)
+        self.pfb = gr.pfb_channelizer_ccf(self._numchans, self._taps)
+        self.v2s = gr.vector_to_streams(gr.sizeof_gr_complex, self._numchans)
+
+        self.connect(self, self.s2ss)
+
+        for i in xrange(self._numchans):
+            self.connect((self.s2ss,i), (self.pfb,i))
+
+        # Get independent streams from the filterbank and send them out
+        self.connect(self.pfb, self.v2s)
+
+        for i in xrange(self._numchans):
+            self.connect((self.v2s,i), (self,i))
+
+        
+        
+        
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/pfb_decimator.py b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_decimator.py
new file mode 100644 (file)
index 0000000..176d047
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr
+
+class pfb_decimator_ccf(gr.hier_block2):
+    '''
+    Make a Polyphase Filter decimator (complex in, complex out, floating-point taps)
+
+    This simplifies the interface by allowing a single input stream to connect to this block.
+    It will then output a stream that is the decimated output stream.
+    '''
+    def __init__(self, decim, taps, channel=0):
+       gr.hier_block2.__init__(self, "pfb_decimator_ccf",
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
+
+        self._decim = decim
+        self._taps = taps
+        self._channel = channel
+
+        self.s2ss = gr.stream_to_streams(gr.sizeof_gr_complex, self._decim)
+        self.pfb = gr.pfb_decimator_ccf(self._decim, self._taps, self._channel)
+
+        self.connect(self, self.s2ss)
+
+        for i in xrange(self._decim):
+            self.connect((self.s2ss,i), (self.pfb,i))
+
+        self.connect(self.pfb, self)
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/pfb_interpolator.py b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_interpolator.py
new file mode 100644 (file)
index 0000000..db29440
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr
+
+class pfb_interpolator_ccf(gr.hier_block2):
+    '''
+    Make a Polyphase Filter interpolator (complex in, complex out, floating-point taps)
+
+    The block takes a single complex stream in and outputs a single complex
+    stream out. As such, it requires no extra glue to handle the input/output
+    streams. This block is provided to be consistent with the interface to the
+    other PFB block.
+    '''
+    def __init__(self, interp, taps):
+       gr.hier_block2.__init__(self, "pfb_interpolator_ccf",
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
+
+        self._interp = interp
+        self._taps = taps
+
+        self.pfb = gr.pfb_interpolator_ccf(self._interp, self._taps)
+
+        self.connect(self, self.pfb)
+        self.connect(self.pfb, self)
+        
+        
+        
+        
diff --git a/gnuradio-core/src/python/gnuradio/gr/.gitignore b/gnuradio-core/src/python/gnuradio/gr/.gitignore
new file mode 100644 (file)
index 0000000..bf03975
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/run_tests
diff --git a/gnuradio-core/src/python/gnuradio/gru/.gitignore b/gnuradio-core/src/python/gnuradio/gru/.gitignore
new file mode 100644 (file)
index 0000000..f9c5da0
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/gruimpl/.gitignore b/gnuradio-core/src/python/gnuradio/gruimpl/.gitignore
new file mode 100644 (file)
index 0000000..f9c5da0
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/vocoder/.gitignore b/gnuradio-core/src/python/gnuradio/vocoder/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gnuradio-core/src/tests/.gitignore b/gnuradio-core/src/tests/.gitignore
new file mode 100644 (file)
index 0000000..8687003
--- /dev/null
@@ -0,0 +1,28 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/t1
+/test_dtv
+/check_dups
+/test_gr
+/test_all
+/exercise_correlator
+/test_grbase
+/test_vmcircbuf
+/test_atsc
+/test_general
+/test_runtime
+/test_filter
+/benchmark_dotprod_fff
+/benchmark_dotprod_ccc
+/benchmark_dotprod_fcc
+/benchmark_dotprod_scc
+/benchmark_nco
+/benchmark_dotprod_ccf
+/benchmark_dotprod_fsf
+/benchmark_vco
diff --git a/gnuradio-core/src/utils/.gitignore b/gnuradio-core/src/utils/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gnuradio-examples/.gitignore b/gnuradio-examples/.gitignore
new file mode 100644 (file)
index 0000000..29ec71e
--- /dev/null
@@ -0,0 +1,25 @@
+/Makefile
+/Makefile.in
+/aclocal.m4
+/configure
+/config.h.in
+/stamp-h.in
+/libtool
+/config.log
+/config.h
+/config.cache
+/config.status
+/missing
+/stamp-h
+/stamp-h1
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/missing
+/make.log
+/gnuradio.pc
diff --git a/gnuradio-examples/c++/.gitignore b/gnuradio-examples/c++/.gitignore
new file mode 100644 (file)
index 0000000..19dd0e0
--- /dev/null
@@ -0,0 +1,5 @@
+/.deps
+/.libs
+/Makefile
+/Makefile.in
+/dialtone
diff --git a/gnuradio-examples/c++/dial_tone/.gitignore b/gnuradio-examples/c++/dial_tone/.gitignore
new file mode 100644 (file)
index 0000000..c5e3458
--- /dev/null
@@ -0,0 +1,5 @@
+/.deps
+/.libs
+/Makefile
+/Makefile.in
+/dial_tone
diff --git a/gnuradio-examples/python/.gitignore b/gnuradio-examples/python/.gitignore
new file mode 100644 (file)
index 0000000..c400497
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
index 3a1acf51da21d46368a5d52edfaac999a33196f6..ea03b438f035c328177a6be12290e846aec48f19 100644 (file)
@@ -32,5 +32,6 @@ SUBDIRS = \
        multi_usrp \
        network \
        ofdm \
+       pfb \
        usrp \
        usrp2
diff --git a/gnuradio-examples/python/apps/.gitignore b/gnuradio-examples/python/apps/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gnuradio-examples/python/apps/hf_explorer/.gitignore b/gnuradio-examples/python/apps/hf_explorer/.gitignore
new file mode 100644 (file)
index 0000000..b695091
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pyc
diff --git a/gnuradio-examples/python/apps/hf_radio/.gitignore b/gnuradio-examples/python/apps/hf_radio/.gitignore
new file mode 100644 (file)
index 0000000..b695091
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pyc
diff --git a/gnuradio-examples/python/audio/.gitignore b/gnuradio-examples/python/audio/.gitignore
new file mode 100644 (file)
index 0000000..c400497
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-examples/python/digital-bert/.gitignore b/gnuradio-examples/python/digital-bert/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gnuradio-examples/python/digital/.gitignore b/gnuradio-examples/python/digital/.gitignore
new file mode 100644 (file)
index 0000000..ff40c06
--- /dev/null
@@ -0,0 +1,11 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/*.dat
diff --git a/gnuradio-examples/python/digital_voice/.gitignore b/gnuradio-examples/python/digital_voice/.gitignore
new file mode 100644 (file)
index 0000000..c400497
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-examples/python/mp-sched/.gitignore b/gnuradio-examples/python/mp-sched/.gitignore
new file mode 100644 (file)
index 0000000..c400497
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-examples/python/multi-antenna/.gitignore b/gnuradio-examples/python/multi-antenna/.gitignore
new file mode 100644 (file)
index 0000000..ff40c06
--- /dev/null
@@ -0,0 +1,11 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/*.dat
diff --git a/gnuradio-examples/python/multi_usrp/.gitignore b/gnuradio-examples/python/multi_usrp/.gitignore
new file mode 100644 (file)
index 0000000..c400497
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-examples/python/network/.gitignore b/gnuradio-examples/python/network/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gnuradio-examples/python/ofdm/.gitignore b/gnuradio-examples/python/ofdm/.gitignore
new file mode 100644 (file)
index 0000000..2f6a10e
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/*.pyc
+/*.dat
diff --git a/gnuradio-examples/python/pfb/.gitignore b/gnuradio-examples/python/pfb/.gitignore
new file mode 100644 (file)
index 0000000..282522d
--- /dev/null
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/gnuradio-examples/python/pfb/Makefile.am b/gnuradio-examples/python/pfb/Makefile.am
new file mode 100644 (file)
index 0000000..4aa9248
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+include $(top_srcdir)/Makefile.common
+
+ourdatadir = $(exampledir)/pfb
+
+dist_ourdata_SCRIPTS =         \
+       channelize.py           \
+       chirp_channelize.py     \
+       decimate.py             \
+       interpolate.py          \
+       fmtest.py
diff --git a/gnuradio-examples/python/pfb/channelize.py b/gnuradio-examples/python/pfb/channelize.py
new file mode 100755 (executable)
index 0000000..bc83fae
--- /dev/null
@@ -0,0 +1,177 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr, blks2
+import os, time
+import scipy, pylab
+from scipy import fftpack
+from pylab import mlab
+
+class pfb_top_block(gr.top_block):
+    def __init__(self):
+        gr.top_block.__init__(self)
+
+        self._N = 2000000        # number of samples to use
+        self._fs = 9000          # initial sampling rate
+        self._M = 9              # Number of channels to channelize
+
+        # Create a set of taps for the PFB channelizer
+        self._taps = gr.firdes.low_pass_2(1, self._fs, 475.50, 50, 
+                                          attenuation_dB=10, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+        # Calculate the number of taps per channel for our own information
+        tpc = scipy.ceil(float(len(self._taps)) /  float(self._M))
+        print "Number of taps:     ", len(self._taps)
+        print "Number of channels: ", self._M
+        print "Taps per channel:   ", tpc
+        
+        # Create a set of signals at different frequencies
+        #   freqs lists the frequencies of the signals that get stored 
+        #   in the list "signals", which then get summed together
+        self.signals = list()
+        self.add = gr.add_cc()
+        freqs = [-4070, -3050, -2030, -1010, 10, 1020, 2040, 3060, 4080]
+        for i in xrange(len(freqs)):
+            self.signals.append(gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freqs[i], 1))
+            self.connect(self.signals[i], (self.add,i))
+
+        self.head = gr.head(gr.sizeof_gr_complex, self._N)
+
+        # Construct the channelizer filter
+        self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps)
+
+        # Construct a vector sink for the input signal to the channelizer
+        self.snk_i = gr.vector_sink_c()
+
+        # Connect the blocks
+        self.connect(self.add, self.head, self.pfb)
+        self.connect(self.add, self.snk_i)
+
+        # Create a vector sink for each of M output channels of the filter and connect it
+        self.snks = list()
+        for i in xrange(self._M):
+            self.snks.append(gr.vector_sink_c())
+            self.connect((self.pfb, i), self.snks[i])
+                             
+
+def main():
+    tstart = time.time()
+    
+    tb = pfb_top_block()
+    tb.run()
+
+    tend = time.time()
+    print "Run time: %f" % (tend - tstart)
+
+    if 1:
+        fig_in = pylab.figure(1, figsize=(16,9), facecolor="w")
+        fig1 = pylab.figure(2, figsize=(16,9), facecolor="w")
+        fig2 = pylab.figure(3, figsize=(16,9), facecolor="w")
+        
+        Ns = 1000
+        Ne = 10000
+
+        fftlen = 8192
+        winfunc = scipy.blackman
+        fs = tb._fs
+
+        # Plot the input signal on its own figure
+        d = tb.snk_i.data()[Ns:Ne]
+        spin_f = fig_in.add_subplot(2, 1, 1)
+
+        X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+                          window = lambda d: d*winfunc(fftlen),
+                          scale_by_freq=True)
+        X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+        f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+        pin_f = spin_f.plot(f_in, X_in, "b")
+        spin_f.set_xlim([min(f_in), max(f_in)+1]) 
+        spin_f.set_ylim([-200.0, 50.0]) 
+
+        spin_f.set_title("Input Signal", weight="bold")
+        spin_f.set_xlabel("Frequency (Hz)")
+        spin_f.set_ylabel("Power (dBW)")
+
+
+        Ts = 1.0/fs
+        Tmax = len(d)*Ts
+        
+        t_in = scipy.arange(0, Tmax, Ts)
+        x_in = scipy.array(d)
+        spin_t = fig_in.add_subplot(2, 1, 2)
+        pin_t = spin_t.plot(t_in, x_in.real, "b")
+        pin_t = spin_t.plot(t_in, x_in.imag, "r")
+
+        spin_t.set_xlabel("Time (s)")
+        spin_t.set_ylabel("Amplitude")
+
+        Ncols = int(scipy.floor(scipy.sqrt(tb._M)))
+        Nrows = int(scipy.floor(tb._M / Ncols))
+        if(tb._M % Ncols != 0):
+            Nrows += 1
+
+        # Plot each of the channels outputs. Frequencies on Figure 2 and
+        # time signals on Figure 3
+        fs_o = tb._fs / tb._M
+        Ts_o = 1.0/fs_o
+        Tmax_o = len(d)*Ts_o
+        for i in xrange(len(tb.snks)):
+            # remove issues with the transients at the beginning
+            # also remove some corruption at the end of the stream
+            #    this is a bug, probably due to the corner cases
+            d = tb.snks[i].data()[Ns:Ne]
+
+            sp1_f = fig1.add_subplot(Nrows, Ncols, 1+i)
+            X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
+                              window = lambda d: d*winfunc(fftlen),
+                              scale_by_freq=True)
+            X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+            f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
+            p2_f = sp1_f.plot(f_o, X_o, "b")
+            sp1_f.set_xlim([min(f_o), max(f_o)+1]) 
+            sp1_f.set_ylim([-200.0, 50.0]) 
+
+            sp1_f.set_title(("Channel %d" % i), weight="bold")
+            sp1_f.set_xlabel("Frequency (Hz)")
+            sp1_f.set_ylabel("Power (dBW)")
+
+            x_o = scipy.array(d)
+            t_o = scipy.arange(0, Tmax_o, Ts_o)
+            sp2_o = fig2.add_subplot(Nrows, Ncols, 1+i)
+            p2_o = sp2_o.plot(t_o, x_o.real, "b")
+            p2_o = sp2_o.plot(t_o, x_o.imag, "r")
+            sp2_o.set_xlim([min(t_o), max(t_o)+1]) 
+            sp2_o.set_ylim([-2, 2]) 
+
+            sp2_o.set_title(("Channel %d" % i), weight="bold")
+            sp2_o.set_xlabel("Time (s)")
+            sp2_o.set_ylabel("Amplitude")
+
+        pylab.show()
+
+
+if __name__ == "__main__":
+    try:
+        main()
+    except KeyboardInterrupt:
+        pass
+    
diff --git a/gnuradio-examples/python/pfb/chirp_channelize.py b/gnuradio-examples/python/pfb/chirp_channelize.py
new file mode 100755 (executable)
index 0000000..edebf5f
--- /dev/null
@@ -0,0 +1,192 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr, blks2
+import os, time
+import scipy, pylab
+from scipy import fftpack
+from pylab import mlab
+
+class pfb_top_block(gr.top_block):
+    def __init__(self):
+        gr.top_block.__init__(self)
+
+        self._N = 200000         # number of samples to use
+        self._fs = 9000          # initial sampling rate
+        self._M = 9              # Number of channels to channelize
+
+        # Create a set of taps for the PFB channelizer
+        self._taps = gr.firdes.low_pass_2(1, self._fs, 500, 20, 
+                                          attenuation_dB=10, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+        # Calculate the number of taps per channel for our own information
+        tpc = scipy.ceil(float(len(self._taps)) /  float(self._M))
+        print "Number of taps:     ", len(self._taps)
+        print "Number of channels: ", self._M
+        print "Taps per channel:   ", tpc
+
+        repeated = True
+        if(repeated):
+            self.vco_input = gr.sig_source_f(self._fs, gr.GR_SIN_WAVE, 0.25, 110)
+        else:
+            amp = 100
+            data = scipy.arange(0, amp, amp/float(self._N))
+            self.vco_input = gr.vector_source_f(data, False)
+            
+        # Build a VCO controlled by either the sinusoid or single chirp tone
+        # Then convert this to a complex signal
+        self.vco = gr.vco_f(self._fs, 225, 1)
+        self.f2c = gr.float_to_complex()
+
+        self.head = gr.head(gr.sizeof_gr_complex, self._N)
+
+        # Construct the channelizer filter
+        self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps)
+
+        # Construct a vector sink for the input signal to the channelizer
+        self.snk_i = gr.vector_sink_c()
+
+        # Connect the blocks
+        self.connect(self.vco_input, self.vco, self.f2c)
+        self.connect(self.f2c, self.head, self.pfb)
+        self.connect(self.f2c, self.snk_i)
+
+        # Create a vector sink for each of M output channels of the filter and connect it
+        self.snks = list()
+        for i in xrange(self._M):
+            self.snks.append(gr.vector_sink_c())
+            self.connect((self.pfb, i), self.snks[i])
+                             
+
+def main():
+    tstart = time.time()
+    
+    tb = pfb_top_block()
+    tb.run()
+
+    tend = time.time()
+    print "Run time: %f" % (tend - tstart)
+
+    if 1:
+        fig_in = pylab.figure(1, figsize=(16,9), facecolor="w")
+        fig1 = pylab.figure(2, figsize=(16,9), facecolor="w")
+        fig2 = pylab.figure(3, figsize=(16,9), facecolor="w")
+        fig3 = pylab.figure(4, figsize=(16,9), facecolor="w")
+        
+        Ns = 650
+        Ne = 20000
+
+        fftlen = 8192
+        winfunc = scipy.blackman
+        fs = tb._fs
+
+        # Plot the input signal on its own figure
+        d = tb.snk_i.data()[Ns:Ne]
+        spin_f = fig_in.add_subplot(2, 1, 1)
+
+        X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+                          window = lambda d: d*winfunc(fftlen),
+                          scale_by_freq=True)
+        X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+        f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+        pin_f = spin_f.plot(f_in, X_in, "b")
+        spin_f.set_xlim([min(f_in), max(f_in)+1]) 
+        spin_f.set_ylim([-200.0, 50.0]) 
+
+        spin_f.set_title("Input Signal", weight="bold")
+        spin_f.set_xlabel("Frequency (Hz)")
+        spin_f.set_ylabel("Power (dBW)")
+
+
+        Ts = 1.0/fs
+        Tmax = len(d)*Ts
+        
+        t_in = scipy.arange(0, Tmax, Ts)
+        x_in = scipy.array(d)
+        spin_t = fig_in.add_subplot(2, 1, 2)
+        pin_t = spin_t.plot(t_in, x_in.real, "b")
+        pin_t = spin_t.plot(t_in, x_in.imag, "r")
+
+        spin_t.set_xlabel("Time (s)")
+        spin_t.set_ylabel("Amplitude")
+
+        Ncols = int(scipy.floor(scipy.sqrt(tb._M)))
+        Nrows = int(scipy.floor(tb._M / Ncols))
+        if(tb._M % Ncols != 0):
+            Nrows += 1
+
+        # Plot each of the channels outputs. Frequencies on Figure 2 and
+        # time signals on Figure 3
+        fs_o = tb._fs / tb._M
+        Ts_o = 1.0/fs_o
+        Tmax_o = len(d)*Ts_o
+        for i in xrange(len(tb.snks)):
+            # remove issues with the transients at the beginning
+            # also remove some corruption at the end of the stream
+            #    this is a bug, probably due to the corner cases
+            d = tb.snks[i].data()[Ns:Ne]
+
+            sp1_f = fig1.add_subplot(Nrows, Ncols, 1+i)
+            X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
+                              window = lambda d: d*winfunc(fftlen),
+                              scale_by_freq=True)
+            X_o = 10.0*scipy.log10(abs(X))
+            f_o = freq
+            p2_f = sp1_f.plot(f_o, X_o, "b")
+            sp1_f.set_xlim([min(f_o), max(f_o)+1]) 
+            sp1_f.set_ylim([-200.0, 50.0]) 
+
+            sp1_f.set_title(("Channel %d" % i), weight="bold")
+            sp1_f.set_xlabel("Frequency (Hz)")
+            sp1_f.set_ylabel("Power (dBW)")
+
+            x_o = scipy.array(d)
+            t_o = scipy.arange(0, Tmax_o, Ts_o)
+            sp2_o = fig2.add_subplot(Nrows, Ncols, 1+i)
+            p2_o = sp2_o.plot(t_o, x_o.real, "b")
+            p2_o = sp2_o.plot(t_o, x_o.imag, "r")
+            sp2_o.set_xlim([min(t_o), max(t_o)+1]) 
+            sp2_o.set_ylim([-2, 2]) 
+
+            sp2_o.set_title(("Channel %d" % i), weight="bold")
+            sp2_o.set_xlabel("Time (s)")
+            sp2_o.set_ylabel("Amplitude")
+
+
+            sp3 = fig3.add_subplot(1,1,1)
+            p3 = sp3.plot(t_o, x_o.real)
+            sp3.set_xlim([min(t_o), max(t_o)+1]) 
+            sp3.set_ylim([-2, 2]) 
+
+        sp3.set_title("All Channels")
+        sp3.set_xlabel("Time (s)")
+        sp3.set_ylabel("Amplitude") 
+
+        pylab.show()
+
+
+if __name__ == "__main__":
+    try:
+        main()
+    except KeyboardInterrupt:
+        pass
+    
diff --git a/gnuradio-examples/python/pfb/decimate.py b/gnuradio-examples/python/pfb/decimate.py
new file mode 100755 (executable)
index 0000000..cb5d61b
--- /dev/null
@@ -0,0 +1,171 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr, blks2
+import os
+import scipy, pylab
+from scipy import fftpack
+from pylab import mlab
+import time
+
+#print os.getpid()
+#raw_input()
+
+class pfb_top_block(gr.top_block):
+    def __init__(self):
+        gr.top_block.__init__(self)
+
+        self._N = 10000000      # number of samples to use
+        self._fs = 10000        # initial sampling rate
+        self._decim = 20        # Decimation rate
+        
+        # Generate the prototype filter taps for the decimators with a 200 Hz bandwidth
+        self._taps = gr.firdes.low_pass_2(1, self._fs, 200, 150,
+                                          attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+        # Calculate the number of taps per channel for our own information
+        tpc = scipy.ceil(float(len(self._taps)) /  float(self._decim))
+        print "Number of taps:     ", len(self._taps)
+        print "Number of filters:  ", self._decim
+        print "Taps per channel:   ", tpc
+        
+        # Build the input signal source
+        # We create a list of freqs, and a sine wave is generated and added to the source
+        # for each one of these frequencies.
+        self.signals = list()
+        self.add = gr.add_cc()
+        freqs = [10, 20, 2040]
+        for i in xrange(len(freqs)):
+            self.signals.append(gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freqs[i], 1))
+            self.connect(self.signals[i], (self.add,i))
+
+        self.head = gr.head(gr.sizeof_gr_complex, self._N)
+        
+        # Construct a PFB decimator filter
+        self.pfb = blks2.pfb_decimator_ccf(self._decim, self._taps, 0)
+
+        # Construct a standard FIR decimating filter
+        self.dec = gr.fir_filter_ccf(self._decim, self._taps)
+
+        self.snk_i = gr.vector_sink_c()
+
+        # Connect the blocks
+        self.connect(self.add, self.head, self.pfb)
+        self.connect(self.add, self.snk_i)
+
+        # Create the sink for the decimated siganl
+        self.snk = gr.vector_sink_c()
+        self.connect(self.pfb, self.snk)
+                             
+
+def main():
+    tb = pfb_top_block()
+
+    tstart = time.time()    
+    tb.run()
+    tend = time.time()
+    print "Run time: %f" % (tend - tstart)
+
+    if 1:
+        fig1 = pylab.figure(1, figsize=(16,9))
+        fig2 = pylab.figure(2, figsize=(16,9))
+        
+        Ns = 10000
+        Ne = 10000
+
+        fftlen = 8192
+        winfunc = scipy.blackman
+        fs = tb._fs
+
+        # Plot the input to the decimator
+
+        d = tb.snk_i.data()[Ns:Ns+Ne]
+        sp1_f = fig1.add_subplot(2, 1, 1)
+
+        X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+                          window = lambda d: d*winfunc(fftlen),
+                          scale_by_freq=True)
+        X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+        f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+        p1_f = sp1_f.plot(f_in, X_in, "b")
+        sp1_f.set_xlim([min(f_in), max(f_in)+1]) 
+        sp1_f.set_ylim([-200.0, 50.0]) 
+
+        sp1_f.set_title("Input Signal", weight="bold")
+        sp1_f.set_xlabel("Frequency (Hz)")
+        sp1_f.set_ylabel("Power (dBW)")
+        
+        Ts = 1.0/fs
+        Tmax = len(d)*Ts
+
+        t_in = scipy.arange(0, Tmax, Ts)
+        x_in = scipy.array(d)
+        sp1_t = fig1.add_subplot(2, 1, 2)
+        p1_t = sp1_t.plot(t_in, x_in.real, "b")
+        p1_t = sp1_t.plot(t_in, x_in.imag, "r")
+        sp1_t.set_ylim([-tb._decim*1.1, tb._decim*1.1])
+
+        sp1_t.set_xlabel("Time (s)")
+        sp1_t.set_ylabel("Amplitude")
+
+        
+        # Plot the output of the decimator
+        fs_o = tb._fs / tb._decim
+
+        sp2_f = fig2.add_subplot(2, 1, 1)
+        d = tb.snk.data()[Ns:Ns+Ne]
+        X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
+                          window = lambda d: d*winfunc(fftlen),
+                          scale_by_freq=True)
+        X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+        f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
+        p2_f = sp2_f.plot(f_o, X_o, "b")
+        sp2_f.set_xlim([min(f_o), max(f_o)+1]) 
+        sp2_f.set_ylim([-200.0, 50.0]) 
+
+        sp2_f.set_title("PFB Decimated Signal", weight="bold")
+        sp2_f.set_xlabel("Frequency (Hz)")
+        sp2_f.set_ylabel("Power (dBW)")
+        
+
+        Ts_o = 1.0/fs_o
+        Tmax_o = len(d)*Ts_o
+
+        x_o = scipy.array(d)
+        t_o = scipy.arange(0, Tmax_o, Ts_o)
+        sp2_t = fig2.add_subplot(2, 1, 2)
+        p2_t = sp2_t.plot(t_o, x_o.real, "b-o")
+        p2_t = sp2_t.plot(t_o, x_o.imag, "r-o")
+        sp2_t.set_ylim([-2.5, 2.5])
+
+        sp2_t.set_xlabel("Time (s)")
+        sp2_t.set_ylabel("Amplitude")
+
+        pylab.show()
+
+
+if __name__ == "__main__":
+    try:
+        main()
+    except KeyboardInterrupt:
+        pass
+    
diff --git a/gnuradio-examples/python/pfb/fmtest.py b/gnuradio-examples/python/pfb/fmtest.py
new file mode 100755 (executable)
index 0000000..97df0e0
--- /dev/null
@@ -0,0 +1,197 @@
+#!/usr/bin/env python
+#
+
+
+from gnuradio import gr, eng_notation
+from gnuradio import blks2
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+import math, time, sys, scipy, pylab
+from scipy import fftpack
+
+class fmtx(gr.hier_block2):
+    def __init__(self, lo_freq, audio_rate, if_rate):
+
+        gr.hier_block2.__init__(self, "build_fm",
+                                gr.io_signature(1, 1, gr.sizeof_float),      # Input signature
+                                gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
+
+        fmtx = blks2.nbfm_tx (audio_rate, if_rate, max_dev=5e3, tau=75e-6)
+        
+        # Local oscillator
+        lo = gr.sig_source_c (if_rate,        # sample rate
+                              gr.GR_SIN_WAVE, # waveform type
+                              lo_freq,        #frequency
+                              1.0,            # amplitude
+                              0)              # DC Offset
+        mixer = gr.multiply_cc ()
+    
+        self.connect (self, fmtx, (mixer, 0))
+        self.connect (lo, (mixer, 1))
+        self.connect (mixer, self)
+
+class fmtest(gr.top_block):
+    def __init__(self):
+        gr.top_block.__init__(self)
+
+        self._nsamples = 1000000
+        self._audio_rate = 8000
+
+        # Set up N channels with their own baseband and IF frequencies
+        self._N = 5
+        chspacing = 16000
+        freq = [10, 20, 30, 40, 50]
+        f_lo = [0, 1*chspacing, -1*chspacing, 2*chspacing, -2*chspacing]
+
+        self._if_rate = 4*self._N*self._audio_rate
+
+        # Create a signal source and frequency modulate it
+        self.sum = gr.add_cc ()
+        for n in xrange(self._N):
+            sig = gr.sig_source_f(self._audio_rate, gr.GR_SIN_WAVE, freq[n], 0.5)
+            fm = fmtx(f_lo[n], self._audio_rate, self._if_rate)
+            self.connect(sig, fm)
+            self.connect(fm, (self.sum, n))
+
+        self.head = gr.head(gr.sizeof_gr_complex, self._nsamples)
+        self.snk_tx = gr.vector_sink_c()
+        self.channel = blks2.channel_model(0.1)
+
+        self.connect(self.sum, self.head, self.channel, self.snk_tx)
+
+
+        # Design the channlizer
+        self._M = 10
+        bw = chspacing/2.0
+        t_bw = chspacing/10.0
+        self._chan_rate = self._if_rate / self._M
+        self._taps = gr.firdes.low_pass_2(1, self._if_rate, bw, t_bw, 
+                                          attenuation_dB=100,
+                                          window=gr.firdes.WIN_BLACKMAN_hARRIS)
+        tpc = math.ceil(float(len(self._taps)) /  float(self._M))
+
+        print "Number of taps:     ", len(self._taps)
+        print "Number of channels: ", self._M
+        print "Taps per channel:   ", tpc
+        
+        self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps)
+        
+        self.connect(self.channel, self.pfb)
+        
+        # Create a file sink for each of M output channels of the filter and connect it
+        self.fmdet = list()
+        self.squelch = list()
+        self.snks = list()
+        for i in xrange(self._M):
+            self.fmdet.append(blks2.nbfm_rx(self._audio_rate, self._chan_rate))
+            self.squelch.append(blks2.standard_squelch(self._audio_rate*10))
+            self.snks.append(gr.vector_sink_f())
+            self.connect((self.pfb, i), self.fmdet[i], self.squelch[i], self.snks[i])
+
+    def num_tx_channels(self):
+        return self._N
+
+    def num_rx_channels(self):
+        return self._M
+
+def main():
+
+    fm = fmtest()
+
+    tstart = time.time()
+    fm.run()
+    tend = time.time()
+
+    if 1:
+        fig1 = pylab.figure(1, figsize=(12,10), facecolor="w")
+        fig2 = pylab.figure(2, figsize=(12,10), facecolor="w")
+        fig3 = pylab.figure(3, figsize=(12,10), facecolor="w")
+
+        Ns = 10000
+        Ne = 100000
+
+        fftlen = 8192
+        winfunc = scipy.blackman
+
+        # Plot transmitted signal
+        fs = fm._if_rate
+
+        d = fm.snk_tx.data()[Ns:Ns+Ne]
+        sp1_f = fig1.add_subplot(2, 1, 1)
+
+        X,freq = sp1_f.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+                           window = lambda d: d*winfunc(fftlen),
+                           visible=False)
+        X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+        f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+        p1_f = sp1_f.plot(f_in, X_in, "b")
+        sp1_f.set_xlim([min(f_in), max(f_in)+1]) 
+        sp1_f.set_ylim([-120.0, 20.0]) 
+
+        sp1_f.set_title("Input Signal", weight="bold")
+        sp1_f.set_xlabel("Frequency (Hz)")
+        sp1_f.set_ylabel("Power (dBW)")
+
+        Ts = 1.0/fs
+        Tmax = len(d)*Ts
+        
+        t_in = scipy.arange(0, Tmax, Ts)
+        x_in = scipy.array(d)
+        sp1_t = fig1.add_subplot(2, 1, 2)
+        p1_t = sp1_t.plot(t_in, x_in.real, "b-o")
+        #p1_t = sp1_t.plot(t_in, x_in.imag, "r-o")
+        sp1_t.set_ylim([-5, 5])
+
+        # Set up the number of rows and columns for plotting the subfigures
+        Ncols = int(scipy.floor(scipy.sqrt(fm.num_rx_channels())))
+        Nrows = int(scipy.floor(fm.num_rx_channels() / Ncols))
+        if(fm.num_rx_channels() % Ncols != 0):
+            Nrows += 1
+
+        # Plot each of the channels outputs. Frequencies on Figure 2 and
+        # time signals on Figure 3
+        fs_o = fm._audio_rate
+        for i in xrange(len(fm.snks)):
+            # remove issues with the transients at the beginning
+            # also remove some corruption at the end of the stream
+            #    this is a bug, probably due to the corner cases
+            d = fm.snks[i].data()[Ns:Ne]
+
+            sp2_f = fig2.add_subplot(Nrows, Ncols, 1+i)
+            X,freq = sp2_f.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
+                               window = lambda d: d*winfunc(fftlen),
+                               visible=False)
+            #X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+            X_o = 10.0*scipy.log10(abs(X))
+            #f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
+            f_o = scipy.arange(0, fs_o/2.0, fs_o/2.0/float(X_o.size))
+            p2_f = sp2_f.plot(f_o, X_o, "b")
+            sp2_f.set_xlim([min(f_o), max(f_o)+0.1]) 
+            sp2_f.set_ylim([-120.0, 20.0]) 
+            sp2_f.grid(True)
+
+            sp2_f.set_title(("Channel %d" % i), weight="bold")
+            sp2_f.set_xlabel("Frequency (kHz)")
+            sp2_f.set_ylabel("Power (dBW)")
+
+
+            Ts = 1.0/fs_o
+            Tmax = len(d)*Ts
+            t_o = scipy.arange(0, Tmax, Ts)
+
+            x_t = scipy.array(d)
+            sp2_t = fig3.add_subplot(Nrows, Ncols, 1+i)
+            p2_t = sp2_t.plot(t_o, x_t.real, "b")
+            p2_t = sp2_t.plot(t_o, x_t.imag, "r")
+            sp2_t.set_xlim([min(t_o), max(t_o)+1]) 
+            sp2_t.set_ylim([-1, 1]) 
+
+            sp2_t.set_xlabel("Time (s)")
+            sp2_t.set_ylabel("Amplitude")
+
+
+        pylab.show()
+
+
+if __name__ == "__main__":
+    main()
diff --git a/gnuradio-examples/python/pfb/interpolate.py b/gnuradio-examples/python/pfb/interpolate.py
new file mode 100755 (executable)
index 0000000..a7a2522
--- /dev/null
@@ -0,0 +1,226 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr, blks2
+import os
+import scipy, pylab
+from scipy import fftpack
+from pylab import mlab
+import time
+
+#print os.getpid()
+#raw_input()
+
+class pfb_top_block(gr.top_block):
+    def __init__(self):
+        gr.top_block.__init__(self)
+
+        self._N = 100000        # number of samples to use
+        self._fs = 2000         # initial sampling rate
+        self._interp = 5        # Interpolation rate for PFB interpolator
+        self._ainterp = 5.5       # Resampling rate for the PFB arbitrary resampler
+
+        # Frequencies of the signals we construct 
+        freq1 = 100
+        freq2 = 200
+
+        # Create a set of taps for the PFB interpolator
+        # This is based on the post-interpolation sample rate
+        self._taps = gr.firdes.low_pass_2(self._interp, self._interp*self._fs, freq2+50, 50, 
+                                          attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+        # Create a set of taps for the PFB arbitrary resampler
+        # The filter size is the number of filters in the filterbank; 32 will give very low side-lobes,
+        # and larger numbers will reduce these even farther
+        # The taps in this filter are based on a sampling rate of the filter size since it acts
+        # internally as an interpolator.
+        flt_size = 32
+        self._taps2 = gr.firdes.low_pass_2(flt_size, flt_size*self._fs, freq2+50, 150, 
+                                           attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+        # Calculate the number of taps per channel for our own information
+        tpc = scipy.ceil(float(len(self._taps)) /  float(self._interp))
+        print "Number of taps:     ", len(self._taps)
+        print "Number of filters:  ", self._interp
+        print "Taps per channel:   ", tpc
+
+        # Create a couple of signals at different frequencies
+        self.signal1 = gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freq1, 0.5)
+        self.signal2 = gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freq2, 0.5)
+        self.signal = gr.add_cc()
+        
+        self.head = gr.head(gr.sizeof_gr_complex, self._N)
+
+        # Construct the PFB interpolator filter
+        self.pfb = blks2.pfb_interpolator_ccf(self._interp, self._taps)
+
+        # Construct the PFB arbitrary resampler filter
+        self.pfb_ar = blks2.pfb_arb_resampler_ccf(self._ainterp, self._taps2, flt_size)
+        self.snk_i = gr.vector_sink_c()
+
+        #self.pfb_ar.pfb.print_taps()
+        #self.pfb.pfb.print_taps()
+        
+        # Connect the blocks
+        self.connect(self.signal1, self.head, (self.signal,0))
+        self.connect(self.signal2, (self.signal,1))
+        self.connect(self.signal, self.pfb)
+        self.connect(self.signal, self.pfb_ar)
+        self.connect(self.signal, self.snk_i)
+
+        # Create the sink for the interpolated signals
+        self.snk1 = gr.vector_sink_c()
+        self.snk2 = gr.vector_sink_c()
+        self.connect(self.pfb, self.snk1)
+        self.connect(self.pfb_ar, self.snk2)
+                             
+
+def main():
+    tb = pfb_top_block()
+
+    tstart = time.time()
+    tb.run()
+    tend = time.time()
+    print "Run time: %f" % (tend - tstart)
+
+
+    if 1:
+        fig1 = pylab.figure(1, figsize=(12,10), facecolor="w")
+        fig2 = pylab.figure(2, figsize=(12,10), facecolor="w")
+        fig3 = pylab.figure(3, figsize=(12,10), facecolor="w")
+        
+        Ns = 10000
+        Ne = 10000
+
+        fftlen = 8192
+        winfunc = scipy.blackman
+
+        # Plot input signal
+        fs = tb._fs
+
+        d = tb.snk_i.data()[Ns:Ns+Ne]
+        sp1_f = fig1.add_subplot(2, 1, 1)
+
+        X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+                          window = lambda d: d*winfunc(fftlen),
+                          scale_by_freq=True)
+        X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+        f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+        p1_f = sp1_f.plot(f_in, X_in, "b")
+        sp1_f.set_xlim([min(f_in), max(f_in)+1]) 
+        sp1_f.set_ylim([-200.0, 50.0]) 
+
+
+        sp1_f.set_title("Input Signal", weight="bold")
+        sp1_f.set_xlabel("Frequency (Hz)")
+        sp1_f.set_ylabel("Power (dBW)")
+
+        Ts = 1.0/fs
+        Tmax = len(d)*Ts
+        
+        t_in = scipy.arange(0, Tmax, Ts)
+        x_in = scipy.array(d)
+        sp1_t = fig1.add_subplot(2, 1, 2)
+        p1_t = sp1_t.plot(t_in, x_in.real, "b-o")
+        #p1_t = sp1_t.plot(t_in, x_in.imag, "r-o")
+        sp1_t.set_ylim([-2.5, 2.5])
+
+        sp1_t.set_title("Input Signal", weight="bold")
+        sp1_t.set_xlabel("Time (s)")
+        sp1_t.set_ylabel("Amplitude")
+
+
+        # Plot output of PFB interpolator
+        fs_int = tb._fs*tb._interp
+
+        sp2_f = fig2.add_subplot(2, 1, 1)
+        d = tb.snk1.data()[Ns:Ns+(tb._interp*Ne)]
+        X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+                          window = lambda d: d*winfunc(fftlen),
+                          scale_by_freq=True)
+        X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+        f_o = scipy.arange(-fs_int/2.0, fs_int/2.0, fs_int/float(X_o.size))
+        p2_f = sp2_f.plot(f_o, X_o, "b")
+        sp2_f.set_xlim([min(f_o), max(f_o)+1]) 
+        sp2_f.set_ylim([-200.0, 50.0]) 
+
+        sp2_f.set_title("Output Signal from PFB Interpolator", weight="bold")
+        sp2_f.set_xlabel("Frequency (Hz)")
+        sp2_f.set_ylabel("Power (dBW)")
+
+        Ts_int = 1.0/fs_int
+        Tmax = len(d)*Ts_int
+
+        t_o = scipy.arange(0, Tmax, Ts_int)
+        x_o1 = scipy.array(d)
+        sp2_t = fig2.add_subplot(2, 1, 2)
+        p2_t = sp2_t.plot(t_o, x_o1.real, "b-o")
+        #p2_t = sp2_t.plot(t_o, x_o.imag, "r-o")
+        sp2_t.set_ylim([-2.5, 2.5])
+
+        sp2_t.set_title("Output Signal from PFB Interpolator", weight="bold")
+        sp2_t.set_xlabel("Time (s)")
+        sp2_t.set_ylabel("Amplitude")
+
+
+        # Plot output of PFB arbitrary resampler
+        fs_aint = tb._fs * tb._ainterp
+
+        sp3_f = fig3.add_subplot(2, 1, 1)
+        d = tb.snk2.data()[Ns:Ns+(tb._interp*Ne)]
+        X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+                          window = lambda d: d*winfunc(fftlen),
+                          scale_by_freq=True)
+        X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+        f_o = scipy.arange(-fs_aint/2.0, fs_aint/2.0, fs_aint/float(X_o.size))
+        p3_f = sp3_f.plot(f_o, X_o, "b")
+        sp3_f.set_xlim([min(f_o), max(f_o)+1]) 
+        sp3_f.set_ylim([-200.0, 50.0]) 
+
+        sp3_f.set_title("Output Signal from PFB Arbitrary Resampler", weight="bold")
+        sp3_f.set_xlabel("Frequency (Hz)")
+        sp3_f.set_ylabel("Power (dBW)")
+
+        Ts_aint = 1.0/fs_aint
+        Tmax = len(d)*Ts_aint
+
+        t_o = scipy.arange(0, Tmax, Ts_aint)
+        x_o2 = scipy.array(d)
+        sp3_f = fig3.add_subplot(2, 1, 2)
+        p3_f = sp3_f.plot(t_o, x_o2.real, "b-o")
+        p3_f = sp3_f.plot(t_o, x_o1.real, "m-o")
+        #p3_f = sp3_f.plot(t_o, x_o2.imag, "r-o")
+        sp3_f.set_ylim([-2.5, 2.5])
+        
+        sp3_f.set_title("Output Signal from PFB Arbitrary Resampler", weight="bold")
+        sp3_f.set_xlabel("Time (s)")
+        sp3_f.set_ylabel("Amplitude")
+
+        pylab.show()
+
+
+if __name__ == "__main__":
+    try:
+        main()
+    except KeyboardInterrupt:
+        pass
+    
diff --git a/gnuradio-examples/python/usrp/.gitignore b/gnuradio-examples/python/usrp/.gitignore
new file mode 100644 (file)
index 0000000..c400497
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-examples/python/usrp2/.gitignore b/gnuradio-examples/python/usrp2/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-atsc/.gitignore b/gr-atsc/.gitignore
new file mode 100644 (file)
index 0000000..1690515
--- /dev/null
@@ -0,0 +1,23 @@
+/Makefile
+/Makefile.in
+/aclocal.m4
+/configure
+/config.h.in
+/stamp-h.in
+/libtool
+/config.log
+/config.h
+/config.cache
+/config.status
+/missing
+/stamp-h
+/stamp-h1
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/missing
+/make.log
+/gnuradio-atsc.pc
diff --git a/gr-atsc/doc/.gitignore b/gr-atsc/doc/.gitignore
new file mode 100644 (file)
index 0000000..bb3f277
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/howto.cc
+/howto.py
diff --git a/gr-atsc/src/.gitignore b/gr-atsc/src/.gitignore
new file mode 100644 (file)
index 0000000..bb3f277
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/howto.cc
+/howto.py
diff --git a/gr-atsc/src/lib/.gitignore b/gr-atsc/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..01e4ffe
--- /dev/null
@@ -0,0 +1,14 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/atsc.cc
+/atsc.py
+/atsci_viterbi_gen
+/atsci_viterbi_mux.cc
+/test_atsci
+/*.pyc
diff --git a/gr-atsc/src/python/.gitignore b/gr-atsc/src/python/.gitignore
new file mode 100644 (file)
index 0000000..bf03975
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/run_tests
diff --git a/gr-audio-alsa/.gitignore b/gr-audio-alsa/.gitignore
new file mode 100644 (file)
index 0000000..cdcf41b
--- /dev/null
@@ -0,0 +1,30 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
diff --git a/gr-audio-alsa/src/.gitignore b/gr-audio-alsa/src/.gitignore
new file mode 100644 (file)
index 0000000..b751c67
--- /dev/null
@@ -0,0 +1,16 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/usrp.py
+/usrp.cc
+/audio_oss.cc
+/audio_oss.py
+/audio_alsa.py
+/audio_alsa.cc
+/run_tests
+/*.pyc
diff --git a/gr-audio-jack/.gitignore b/gr-audio-jack/.gitignore
new file mode 100644 (file)
index 0000000..cdcf41b
--- /dev/null
@@ -0,0 +1,30 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
diff --git a/gr-audio-jack/src/.gitignore b/gr-audio-jack/src/.gitignore
new file mode 100644 (file)
index 0000000..46103bc
--- /dev/null
@@ -0,0 +1,12 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/audio_jack.cc
+/audio_jack.py
+/run_tests
diff --git a/gr-audio-oss/.gitignore b/gr-audio-oss/.gitignore
new file mode 100644 (file)
index 0000000..cdcf41b
--- /dev/null
@@ -0,0 +1,30 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
diff --git a/gr-audio-oss/src/.gitignore b/gr-audio-oss/src/.gitignore
new file mode 100644 (file)
index 0000000..ac39b2a
--- /dev/null
@@ -0,0 +1,14 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/usrp.py
+/usrp.cc
+/audio_oss.cc
+/audio_oss.py
+/run_tests
+/*.pyc
diff --git a/gr-audio-osx/.gitignore b/gr-audio-osx/.gitignore
new file mode 100644 (file)
index 0000000..cdcf41b
--- /dev/null
@@ -0,0 +1,30 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
diff --git a/gr-audio-osx/src/.gitignore b/gr-audio-osx/src/.gitignore
new file mode 100644 (file)
index 0000000..5a5590a
--- /dev/null
@@ -0,0 +1,13 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/usrp.py
+/usrp.cc
+/audio_osx.cc
+/audio_osx.py
+/run_tests
diff --git a/gr-audio-portaudio/.gitignore b/gr-audio-portaudio/.gitignore
new file mode 100644 (file)
index 0000000..53edad3
--- /dev/null
@@ -0,0 +1,32 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
diff --git a/gr-audio-portaudio/src/.gitignore b/gr-audio-portaudio/src/.gitignore
new file mode 100644 (file)
index 0000000..8c29d35
--- /dev/null
@@ -0,0 +1,17 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/usrp.py
+/usrp.cc
+/audio_oss.cc
+/audio_oss.py
+/audio_portaudio.py
+/audio_portaudio.cc
+/run_tests
diff --git a/gr-audio-windows/.gitignore b/gr-audio-windows/.gitignore
new file mode 100644 (file)
index 0000000..53edad3
--- /dev/null
@@ -0,0 +1,32 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
diff --git a/gr-audio-windows/src/.gitignore b/gr-audio-windows/src/.gitignore
new file mode 100644 (file)
index 0000000..0874465
--- /dev/null
@@ -0,0 +1,35 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
+/run_tests
+/audio_windows.cc
+/audio_windows.py
diff --git a/gr-comedi/.gitignore b/gr-comedi/.gitignore
new file mode 100644 (file)
index 0000000..53edad3
--- /dev/null
@@ -0,0 +1,32 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
diff --git a/gr-comedi/src/.gitignore b/gr-comedi/src/.gitignore
new file mode 100644 (file)
index 0000000..d95b6dc
--- /dev/null
@@ -0,0 +1,12 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/comedi.cc
+/*.pyc
+/comedi.py
+/run_tests
diff --git a/gr-cvsd-vocoder/.gitignore b/gr-cvsd-vocoder/.gitignore
new file mode 100644 (file)
index 0000000..a37fc0c
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pc
diff --git a/gr-cvsd-vocoder/src/.gitignore b/gr-cvsd-vocoder/src/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-cvsd-vocoder/src/lib/.gitignore b/gr-cvsd-vocoder/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..306156d
--- /dev/null
@@ -0,0 +1,6 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
+/cvsd_vocoder.cc
+/cvsd_vocoder.py*
diff --git a/gr-cvsd-vocoder/src/python/.gitignore b/gr-cvsd-vocoder/src/python/.gitignore
new file mode 100644 (file)
index 0000000..604b402
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/run_tests
diff --git a/gr-gcell/.gitignore b/gr-gcell/.gitignore
new file mode 100644 (file)
index 0000000..53edad3
--- /dev/null
@@ -0,0 +1,32 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
diff --git a/gr-gcell/src/.gitignore b/gr-gcell/src/.gitignore
new file mode 100644 (file)
index 0000000..8f9e3f0
--- /dev/null
@@ -0,0 +1,36 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
+/run_tests
+/gcell.d
+/gcell.cc
+/gcell.py
diff --git a/gr-gcell/src/examples/.gitignore b/gr-gcell/src/examples/.gitignore
new file mode 100644 (file)
index 0000000..53edad3
--- /dev/null
@@ -0,0 +1,32 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
diff --git a/gr-gpio/.gitignore b/gr-gpio/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-gpio/src/.gitignore b/gr-gpio/src/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-gpio/src/fpga/.gitignore b/gr-gpio/src/fpga/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-gpio/src/fpga/include/.gitignore b/gr-gpio/src/fpga/include/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-gpio/src/fpga/lib/.gitignore b/gr-gpio/src/fpga/lib/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-gpio/src/fpga/rbf/.gitignore b/gr-gpio/src/fpga/rbf/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-gpio/src/fpga/top/.gitignore b/gr-gpio/src/fpga/top/.gitignore
new file mode 100644 (file)
index 0000000..28be78c
--- /dev/null
@@ -0,0 +1,11 @@
+/Makefile
+/Makefile.in
+/db
+/prev*.*
+/*.summary
+/*.qws
+/*.rpt
+/*.done
+/*.pin
+/*.sof
+/*.rbf
diff --git a/gr-gpio/src/python/.gitignore b/gr-gpio/src/python/.gitignore
new file mode 100644 (file)
index 0000000..b9e19a9
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/*.pyc
+/run_tests
diff --git a/gr-gsm-fr-vocoder/.gitignore b/gr-gsm-fr-vocoder/.gitignore
new file mode 100644 (file)
index 0000000..f3462d0
--- /dev/null
@@ -0,0 +1,23 @@
+/Makefile
+/Makefile.in
+/aclocal.m4
+/configure
+/config.h.in
+/stamp-h.in
+/libtool
+/config.log
+/config.h
+/config.cache
+/config.status
+/missing
+/stamp-h
+/stamp-h1
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/missing
+/make.log
+/*.pc
diff --git a/gr-gsm-fr-vocoder/src/.gitignore b/gr-gsm-fr-vocoder/src/.gitignore
new file mode 100644 (file)
index 0000000..bb3f277
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/howto.cc
+/howto.py
diff --git a/gr-gsm-fr-vocoder/src/lib/.gitignore b/gr-gsm-fr-vocoder/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..81a82de
--- /dev/null
@@ -0,0 +1,11 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/gsm_full_rate.py
+/gsm_full_rate.cc
+/*.pyc
diff --git a/gr-gsm-fr-vocoder/src/lib/gsm/.gitignore b/gr-gsm-fr-vocoder/src/lib/gsm/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gr-gsm-fr-vocoder/src/python/.gitignore b/gr-gsm-fr-vocoder/src/python/.gitignore
new file mode 100644 (file)
index 0000000..bf03975
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/run_tests
diff --git a/gr-howto-write-a-block/.gitignore b/gr-howto-write-a-block/.gitignore
new file mode 100644 (file)
index 0000000..543c391
--- /dev/null
@@ -0,0 +1,26 @@
+/Makefile
+/Makefile.in
+/aclocal.m4
+/configure
+/config.h.in
+/stamp-h.in
+/libtool
+/config.log
+/config.h
+/config.cache
+/config.status
+/missing
+/stamp-h
+/stamp-h1
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/missing
+/make.log
+/py-compile
+/depcomp
+/ltmain.sh
+/install-sh
diff --git a/gr-howto-write-a-block/config/.gitignore b/gr-howto-write-a-block/config/.gitignore
new file mode 100644 (file)
index 0000000..16f775e
--- /dev/null
@@ -0,0 +1,15 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/libtool.m4
+/lt~obsolete.m4
+/ltsugar.m4
+/ltversion.m4
+/ltoptions.m4
diff --git a/gr-howto-write-a-block/doc/.gitignore b/gr-howto-write-a-block/doc/.gitignore
new file mode 100644 (file)
index 0000000..f65ab6c
--- /dev/null
@@ -0,0 +1,18 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/howto-write-a-block.html
+/gr_block.h.xml
+/howto_1.i.xml
+/howto_square_ff.cc.xml
+/howto_square_ff.h.xml
+/qa_howto_1.py.xml
+/src_lib_Makefile_1.am.xml
+/src_lib_Makefile_2.am.xml
+/howto_square2_ff.cc.xml
+/howto_square2_ff.h.xml
diff --git a/gr-howto-write-a-block/src/.gitignore b/gr-howto-write-a-block/src/.gitignore
new file mode 100644 (file)
index 0000000..bb3f277
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/howto.cc
+/howto.py
diff --git a/gr-howto-write-a-block/src/lib/.gitignore b/gr-howto-write-a-block/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..d957a68
--- /dev/null
@@ -0,0 +1,11 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/howto.cc
+/howto.py
diff --git a/gr-howto-write-a-block/src/python/.gitignore b/gr-howto-write-a-block/src/python/.gitignore
new file mode 100644 (file)
index 0000000..bf03975
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/run_tests
diff --git a/gr-msdd6000/.gitignore b/gr-msdd6000/.gitignore
new file mode 100644 (file)
index 0000000..a37fc0c
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pc
diff --git a/gr-msdd6000/src/.gitignore b/gr-msdd6000/src/.gitignore
new file mode 100644 (file)
index 0000000..33061d3
--- /dev/null
@@ -0,0 +1,6 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
+/msdd.cc
+/msdd.py
diff --git a/gr-pager/.gitignore b/gr-pager/.gitignore
new file mode 100644 (file)
index 0000000..27ff673
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/data
+/*.pc
diff --git a/gr-pager/src/.gitignore b/gr-pager/src/.gitignore
new file mode 100644 (file)
index 0000000..3e806d6
--- /dev/null
@@ -0,0 +1,8 @@
+/.libs
+/.deps
+/Makefile
+/Makefile.in
+/pager_swig.py
+/pager_swig.cc
+/*.pyc
+/run_tests
diff --git a/gr-qtgui/.gitignore b/gr-qtgui/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-qtgui/src/.gitignore b/gr-qtgui/src/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-qtgui/src/lib/.gitignore b/gr-qtgui/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..58c8081
--- /dev/null
@@ -0,0 +1,13 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
+/qtgui.cc
+/qtgui.py
+/WaterfallDisplayPlot_moc.cc
+/Waterfall3DDisplayPlot_moc.cc
+/TimeDomainDisplayPlot_moc.cc
+/spectrumdisplayform_moc.cc
+/spectrumdisplayform_ui.h
+/FrequencyDisplayPlot_moc.cc
+/ConstellationDisplayPlot_moc.cc
index 10355f9f0bf4eccd12510ddb2e2f87d01e5d14b3..80bf4503f50fb3edb6ca17a06d01c931cf8b1201 100644 (file)
@@ -32,7 +32,9 @@ protected:
   }
 };
 
-ConstellationDisplayPlot::ConstellationDisplayPlot(QWidget* parent):QwtPlot(parent){
+ConstellationDisplayPlot::ConstellationDisplayPlot(QWidget* parent)
+  : QwtPlot(parent)
+{
   timespec_reset(&_lastReplot);
 
   resize(parent->width(), parent->height());
@@ -40,6 +42,7 @@ ConstellationDisplayPlot::ConstellationDisplayPlot(QWidget* parent):QwtPlot(pare
   _displayIntervalTime = (1.0/10.0); // 1/10 of a second between updates
 
   _numPoints = 1024;
+  _penSize = 5;
   _realDataPoints = new double[_numPoints];
   _imagDataPoints = new double[_numPoints];
 
@@ -67,7 +70,7 @@ ConstellationDisplayPlot::ConstellationDisplayPlot(QWidget* parent):QwtPlot(pare
   // Automatically deleted when parent is deleted
   _plot_curve = new QwtPlotCurve("Constellation Points");
   _plot_curve->attach(this);
-  _plot_curve->setPen(QPen(Qt::blue, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+  _plot_curve->setPen(QPen(Qt::blue, _penSize, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
   _plot_curve->setStyle(QwtPlotCurve::Dots);
   _plot_curve->setRawData(_realDataPoints, _imagDataPoints, _numPoints);
 
@@ -106,7 +109,8 @@ ConstellationDisplayPlot::ConstellationDisplayPlot(QWidget* parent):QwtPlot(pare
          this, SLOT( LegendEntryChecked(QwtPlotItem *, bool ) ));
 }
 
-ConstellationDisplayPlot::~ConstellationDisplayPlot(){
+ConstellationDisplayPlot::~ConstellationDisplayPlot()
+{
   delete[] _realDataPoints;
   delete[] _imagDataPoints;
 
@@ -114,6 +118,16 @@ ConstellationDisplayPlot::~ConstellationDisplayPlot(){
   // _zoomer and _panner deleted when parent deleted
 }
 
+void 
+ConstellationDisplayPlot::set_pen_size(int size)
+{
+  if(size > 0 && size < 30){
+    _penSize = size;
+    _plot_curve->setPen(QPen(Qt::blue, _penSize, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+  }
+}
+
+
 void
 ConstellationDisplayPlot::set_xaxis(double min, double max)
 {
@@ -149,7 +163,16 @@ void ConstellationDisplayPlot::replot(){
   }
 }
 
-void ConstellationDisplayPlot::PlotNewData(const double* realDataPoints, const double* imagDataPoints, const int64_t numDataPoints){
+void
+ConstellationDisplayPlot::resizeSlot( QSize *s )
+{
+  resize(s->width(), s->height());
+}
+
+void ConstellationDisplayPlot::PlotNewData(const double* realDataPoints,
+                                          const double* imagDataPoints,
+                                          const int64_t numDataPoints)
+{
   if(numDataPoints > 0){
 
     if(numDataPoints != _numPoints){
@@ -177,7 +200,9 @@ void ConstellationDisplayPlot::PlotNewData(const double* realDataPoints, const d
   }
 }
 
-void ConstellationDisplayPlot::LegendEntryChecked(QwtPlotItem* plotItem, bool on){
+void
+ConstellationDisplayPlot::LegendEntryChecked(QwtPlotItem* plotItem, bool on)
+{
   plotItem->setVisible(!on);
 }
 
index 612cd2b3933c4d463e7ca282a950115a04abd83d..99ae566e0a8eca90a3ff210064b6a22dc86343bb 100644 (file)
 #include <highResTimeFunctions.h>
 #include <qwt_symbol.h>
 
-class ConstellationDisplayPlot:public QwtPlot{
+class ConstellationDisplayPlot : public QwtPlot
+{
   Q_OBJECT
 
 public:
   ConstellationDisplayPlot(QWidget*);
   virtual ~ConstellationDisplayPlot();
 
-  void PlotNewData(const double* realDataPoints, const double* imagDataPoints, 
+  void PlotNewData(const double* realDataPoints, 
+                  const double* imagDataPoints, 
                   const int64_t numDataPoints);
     
   virtual void replot();
@@ -30,6 +32,10 @@ public:
   void set_yaxis(double min, double max);
   void set_axis(double xmin, double xmax,
                double ymin, double ymax);
+  void set_pen_size(int size);
+
+public slots:
+  void resizeSlot( QSize *s );
 
 protected slots:
   void LegendEntryChecked(QwtPlotItem *plotItem, bool on);
@@ -48,6 +54,7 @@ private:
   timespec _lastReplot;
 
   int64_t _numPoints;
+  int64_t _penSize;
 
   double _displayIntervalTime;
 };
index e299157f515a34f3378a17923f1a83bbeba11d36..7deff85436e6f9cac600c8bf01b1d0ec68dce073 100644 (file)
@@ -93,7 +93,7 @@ FrequencyDisplayPlot::FrequencyDisplayPlot(QWidget* parent)
   timespec_reset(&_lastReplot);
 
   resize(parent->width(), parent->height());
-
+  
   _displayIntervalTime = (1.0/10.0); // 1/10 of a second between updates
 
   _useCenterFrequencyFlag = false;
@@ -314,6 +314,12 @@ FrequencyDisplayPlot::replot()
     _displayIntervalTime = differenceTime;
   }
 }
+void
+FrequencyDisplayPlot::resizeSlot( QSize *s )
+{
+  resize(s->width(), s->height());
+}
 
 void
 FrequencyDisplayPlot::PlotNewData(const double* dataPoints, const int64_t numDataPoints,
index 5e828296211df72016aa3294285f988d7eb29075..785efe694b531729e699d868b29c3921bd92e3a3 100644 (file)
@@ -43,12 +43,14 @@ public:
   void set_yaxis(double min, double max);
 
 public slots:
+  void resizeSlot( QSize *e );
   void SetLowerIntensityLevel(const double);
   void SetUpperIntensityLevel(const double);
 
 protected:
 
 private:
+
   void _resetXAxisPoints();
   
   double _startFrequency;
index 34062209e5c0978cba37bc1d02b112aea9c7e29d..4cb71a31a055e5f7c227d6eba79be8993a026a41 100644 (file)
@@ -448,6 +448,12 @@ SpectrumGUIClass::SetConstellationAxis(double xmin, double xmax,
 
 }
 
+void
+SpectrumGUIClass::SetConstellationPenSize(int size){
+  _spectrumDisplayForm->SetConstellationPenSize(size);
+}
+
+
 void
 SpectrumGUIClass::SetFrequencyAxis(double min, double max)
 {
index 9a55271dfbe13dd7ef1460688aaf62b0f8f4205f..d8dcb27691ade1396a58319b0f75e0755332c0a4 100644 (file)
@@ -76,6 +76,7 @@ public:
   void SetTimeDomainAxis(double min, double max);
   void SetConstellationAxis(double xmin, double xmax,
                            double ymin, double ymax);
+  void SetConstellationPenSize(int size);
   void SetFrequencyAxis(double min, double max);
 
 protected:
index 6d8ef6ee40e6b4c1ff672eb58eca617d687d4dd0..cb18b44184db14dfdb1f2e4301bf56cfff112908 100644 (file)
@@ -141,8 +141,8 @@ TimeDomainDisplayPlot::set_xaxis(double min, double max)
 }
 
 
-void TimeDomainDisplayPlot::replot(){
-
+void TimeDomainDisplayPlot::replot()
+{
   const timespec startTime = get_highres_clock();
   
   QwtPlot::replot();
@@ -156,9 +156,16 @@ void TimeDomainDisplayPlot::replot(){
   }
 }
 
+void
+TimeDomainDisplayPlot::resizeSlot( QSize *s )
+{
+  resize(s->width(), s->height());
+}
+
 void TimeDomainDisplayPlot::PlotNewData(const double* realDataPoints,
                                        const double* imagDataPoints,
-                                       const int64_t numDataPoints){
+                                       const int64_t numDataPoints)
+{
   if(numDataPoints > 0){
 
     if(numDataPoints != _numPoints){
index 56d44539d8936b01977a08d34d6497612771db45..8d98abac6d422ee99881c665cfe76ae73f427a49 100644 (file)
@@ -30,6 +30,9 @@ public:
   void set_yaxis(double min, double max);
   void set_xaxis(double min, double max);
 
+public slots:
+  void resizeSlot( QSize *s );
+
 protected slots:
   void LegendEntryChecked(QwtPlotItem *plotItem, bool on);
 
index 1b6650613190b827e1a9b38762d08fc98311fd8c..f676cb4af2ac529de9295b7bf428ebfd9b8972e7 100644 (file)
@@ -15,15 +15,21 @@ Waterfall3DColorMap::~Waterfall3DColorMap(){
 
 }
 
-Qwt3D::RGBA Waterfall3DColorMap::operator()(double, double, double z)const{
+Qwt3D::RGBA
+Waterfall3DColorMap::operator()(double, double, double z) const
+{
   return Qwt3D::RGBA(Qwt3D::Qt2GL(color(_interval, z)));
 }
 
-void Waterfall3DColorMap::SetInterval(const double minValue, const double maxValue){
+void
+Waterfall3DColorMap::SetInterval(const double minValue, const double maxValue)
+{
   _interval.setInterval(minValue, maxValue);
 }
 
-Qwt3D::ColorVector& Waterfall3DColorMap::createVector(Qwt3D::ColorVector& vec) { 
+Qwt3D::ColorVector&
+Waterfall3DColorMap::createVector(Qwt3D::ColorVector& vec)
+{
   // Generate 100 interval values and then return those
   Qwt3D::ColorVector colorVec;
   for(unsigned int number = 0; number < 100; number++){
@@ -41,7 +47,8 @@ const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_BLACK_HOT;
 const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_INCANDESCENT;
 const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_USER_DEFINED;
 
-Waterfall3DDisplayPlot::Waterfall3DDisplayPlot(QWidget* parent):Qwt3D::SurfacePlot(parent){
+Waterfall3DDisplayPlot::Waterfall3DDisplayPlot(QWidget* parent):Qwt3D::SurfacePlot(parent)
+{
   _startFrequency = 0;
   _stopFrequency = 4000;
 
@@ -76,11 +83,14 @@ Waterfall3DDisplayPlot::Waterfall3DDisplayPlot(QWidget* parent):Qwt3D::SurfacePl
   enableMouse(true);  
 }
 
-Waterfall3DDisplayPlot::~Waterfall3DDisplayPlot(){
+Waterfall3DDisplayPlot::~Waterfall3DDisplayPlot()
+{
   delete _waterfallData;
 }
 
-void Waterfall3DDisplayPlot::Init(){
+void
+Waterfall3DDisplayPlot::Init()
+{
   if(!_initialized && initializedGL()){
     resize(parentWidget()->width(), parentWidget()->height());
 
@@ -97,7 +107,9 @@ void Waterfall3DDisplayPlot::Init(){
   }
 }
 
-void Waterfall3DDisplayPlot::Reset(){
+void
+Waterfall3DDisplayPlot::Reset()
+{
   _waterfallData->ResizeData(_startFrequency, _stopFrequency, _numPoints);
   _waterfallData->Reset();
 
@@ -116,7 +128,8 @@ Waterfall3DDisplayPlot::SetFrequencyRange(const double constStartFreq,
                                          const double constStopFreq,
                                          const double constCenterFreq,
                                          const bool useCenterFrequencyFlag,
-                                         const double units, const std::string &strunits)
+                                         const double units,
+                                         const std::string &strunits)
 {
   double startFreq = constStartFreq / units;
   double stopFreq = constStopFreq / units;
@@ -138,8 +151,10 @@ Waterfall3DDisplayPlot::SetFrequencyRange(const double constStartFreq,
   }
 }
 
-bool Waterfall3DDisplayPlot::loadFromData(double** data, unsigned int columns, unsigned int rows
-                                         ,double minx, double maxx, double miny, double maxy){
+bool
+Waterfall3DDisplayPlot::loadFromData(double** data, unsigned int columns, unsigned int rows
+                                    ,double minx, double maxx, double miny, double maxy)
+{
 
   Qwt3D::GridData* gridPtr = (Qwt3D::GridData*)actualData_p;
   
@@ -196,15 +211,25 @@ bool Waterfall3DDisplayPlot::loadFromData(double** data, unsigned int columns, u
   return true;
 }
 
-double Waterfall3DDisplayPlot::GetStartFrequency()const{
+double
+Waterfall3DDisplayPlot::GetStartFrequency() const
+{
   return _startFrequency;
 }
 
-double Waterfall3DDisplayPlot::GetStopFrequency()const{
+double
+Waterfall3DDisplayPlot::GetStopFrequency() const
+{
   return _stopFrequency;
 }
 
-void Waterfall3DDisplayPlot::PlotNewData(const double* dataPoints, const int64_t numDataPoints, const double timePerFFT, const timespec timestamp, const int droppedFrames){
+void
+Waterfall3DDisplayPlot::PlotNewData(const double* dataPoints,
+                                   const int64_t numDataPoints,
+                                   const double timePerFFT,
+                                   const timespec timestamp,
+                                   const int droppedFrames)
+{
   if(numDataPoints > 0){
     if(numDataPoints != _numPoints){
       _numPoints = numDataPoints;
@@ -238,7 +263,10 @@ void Waterfall3DDisplayPlot::PlotNewData(const double* dataPoints, const int64_t
   }
 }
 
-void Waterfall3DDisplayPlot::SetIntensityRange(const double minIntensity, const double maxIntensity){
+void
+Waterfall3DDisplayPlot::SetIntensityRange(const double minIntensity,
+                                         const double maxIntensity)
+{
   _waterfallData->SetFloorValue(minIntensity);
   _waterfallData->setMinZ(0);
   _waterfallData->setMaxZ(maxIntensity-minIntensity);
@@ -248,11 +276,14 @@ void Waterfall3DDisplayPlot::SetIntensityRange(const double minIntensity, const
   emit UpdatedLowerIntensityLevel(minIntensity);
   emit UpdatedUpperIntensityLevel(maxIntensity);
 
-  SetIntensityColorMapType(_intensityColorMapType, _userDefinedLowIntensityColor, _userDefinedLowIntensityColor, true);
+  SetIntensityColorMapType(_intensityColorMapType,
+                          _userDefinedLowIntensityColor,
+                          _userDefinedLowIntensityColor, true);
 }
 
-void Waterfall3DDisplayPlot::replot(){
-
+void
+Waterfall3DDisplayPlot::replot()
+{
   if(!_initialized){
     Init();
   }
@@ -283,11 +314,25 @@ void Waterfall3DDisplayPlot::replot(){
   }
 }
 
-int Waterfall3DDisplayPlot::GetIntensityColorMapType()const{
+void
+Waterfall3DDisplayPlot::resizeSlot( QSize *s )
+{
+  resize(s->width(), s->height());
+}
+
+int
+Waterfall3DDisplayPlot::GetIntensityColorMapType() const
+{
   return _intensityColorMapType;
 }
 
-void Waterfall3DDisplayPlot::SetIntensityColorMapType(const int newType, const QColor lowColor, const QColor highColor, const bool forceFlag, const bool noReplotFlag){
+void
+Waterfall3DDisplayPlot::SetIntensityColorMapType(const int newType,
+                                                const QColor lowColor,
+                                                const QColor highColor,
+                                                const bool forceFlag,
+                                                const bool noReplotFlag)
+{
   if(((_intensityColorMapType != newType) || forceFlag) || 
      ((newType == INTENSITY_COLOR_MAP_TYPE_USER_DEFINED) &&
       (lowColor.isValid() && highColor.isValid()))){
@@ -350,11 +395,15 @@ void Waterfall3DDisplayPlot::SetIntensityColorMapType(const int newType, const Q
   }
 }
 
-const QColor Waterfall3DDisplayPlot::GetUserDefinedLowIntensityColor()const{
+const QColor
+Waterfall3DDisplayPlot::GetUserDefinedLowIntensityColor() const
+{
   return _userDefinedLowIntensityColor;
 }
 
-const QColor Waterfall3DDisplayPlot::GetUserDefinedHighIntensityColor()const{
+const QColor
+Waterfall3DDisplayPlot::GetUserDefinedHighIntensityColor() const
+{
   return _userDefinedHighIntensityColor;
 }
 
index f46f260e37cd6cd0e2268f4d452a033dc9f55550..272bdf69706561d1b6af34df105363c3c5a902ad 100644 (file)
@@ -10,7 +10,8 @@
 #include <qwt3d_color.h>
 #include <qwt_color_map.h>
 
-class Waterfall3DColorMap:public Qwt3D::Color, public QwtLinearColorMap{
+class Waterfall3DColorMap: public Qwt3D::Color, public QwtLinearColorMap
+{
 public:
   Waterfall3DColorMap();
   virtual ~Waterfall3DColorMap();
@@ -75,12 +76,14 @@ class Waterfall3DDisplayPlot:public Qwt3D::SurfacePlot{
     virtual QString ticLabel(unsigned int idx) const{
       if (idx<majors_p.size())
        {
-         const timespec markerTime = timespec_add(_plot->_dataTimestamp, -(_plot->_timePerFFT) * majors_p[idx]);
+         const timespec markerTime = timespec_add(_plot->_dataTimestamp,
+                                                  -(_plot->_timePerFFT) * majors_p[idx]);
          struct tm timeTm;
          gmtime_r(&markerTime.tv_sec, &timeTm);
          
          char* timeBuffer = new char[128];
-         snprintf(timeBuffer, 128, "%02d:%02d:%02d.%03ld", timeTm.tm_hour, timeTm.tm_min, timeTm.tm_sec, (markerTime.tv_nsec / 1000000));
+         snprintf(timeBuffer, 128, "%02d:%02d:%02d.%03ld", timeTm.tm_hour,
+                  timeTm.tm_min, timeTm.tm_sec, (markerTime.tv_nsec / 1000000));
          QString returnBuffer(timeBuffer);
          delete[] timeBuffer;
          return returnBuffer;
@@ -100,10 +103,14 @@ class Waterfall3DDisplayPlot:public Qwt3D::SurfacePlot{
     double _centerFrequency;
     bool _useCenterFrequencyFlag;
   public:
-    FrequencyScale(bool useCenterFrequencyFlag, double centerFrequency):_centerFrequency(centerFrequency),_useCenterFrequencyFlag(useCenterFrequencyFlag){}
+    FrequencyScale(bool useCenterFrequencyFlag, double centerFrequency)
+      : _centerFrequency(centerFrequency),_useCenterFrequencyFlag(useCenterFrequencyFlag)
+      {}
+
     virtual ~FrequencyScale(){}
 
-    virtual QString ticLabel(unsigned int idx) const{
+    virtual QString ticLabel(unsigned int idx) const
+    {
       if (idx<majors_p.size())
        {
          if(!_useCenterFrequencyFlag){
@@ -137,14 +144,18 @@ public:
   double GetStartFrequency()const;
   double GetStopFrequency()const;
 
-  void PlotNewData(const double* dataPoints, const int64_t numDataPoints, const double timePerFFT, const timespec timestamp, const int droppedFrames);
+  void PlotNewData(const double* dataPoints, const int64_t numDataPoints,
+                  const double timePerFFT, const timespec timestamp,
+                  const int droppedFrames);
 
   void SetIntensityRange(const double minIntensity, const double maxIntensity);
 
   virtual void replot(void);
 
   int GetIntensityColorMapType()const;
-  void SetIntensityColorMapType( const int, const QColor, const QColor, const bool forceFlag = false, const bool noReplotFlag = false );
+  void SetIntensityColorMapType( const int, const QColor,
+                                const QColor, const bool forceFlag = false,
+                                const bool noReplotFlag = false );
   const QColor GetUserDefinedLowIntensityColor()const;
   const QColor GetUserDefinedHighIntensityColor()const;
 
@@ -154,6 +165,10 @@ public:
   static const int INTENSITY_COLOR_MAP_TYPE_INCANDESCENT = 3;
   static const int INTENSITY_COLOR_MAP_TYPE_USER_DEFINED = 4;
 
+public slots:
+  void resizeSlot( QSize *s );
+
+
 signals:
   void UpdatedLowerIntensityLevel(const double);
   void UpdatedUpperIntensityLevel(const double);
index ad167f097aa3cc00643aec1f0a8ed7fe4f896a37..f6d0cc0ba77c5e67e3cad8b44cb68b37a3f5424d 100644 (file)
 class FreqOffsetAndPrecisionClass
 {
 public:
-  FreqOffsetAndPrecisionClass(const int freqPrecision){
+  FreqOffsetAndPrecisionClass(const int freqPrecision)
+  {
     _frequencyPrecision = freqPrecision;
     _centerFrequency = 0;
   }
 
-  virtual ~FreqOffsetAndPrecisionClass(){
-
+  virtual ~FreqOffsetAndPrecisionClass()
+  {
   }
 
-  virtual unsigned int GetFrequencyPrecision()const{
+  virtual unsigned int GetFrequencyPrecision() const
+  {
     return _frequencyPrecision;
   }
 
-  virtual void SetFrequencyPrecision(const unsigned int newPrecision){
+  virtual void SetFrequencyPrecision(const unsigned int newPrecision)
+  {
     _frequencyPrecision = newPrecision;
   }
 
-  virtual double GetCenterFrequency()const{
+  virtual double GetCenterFrequency() const
+  {
     return _centerFrequency;
   }
 
-  virtual void SetCenterFrequency(const double newFreq){
+  virtual void SetCenterFrequency(const double newFreq)
+  {
     _centerFrequency = newFreq;
   }
 
@@ -50,19 +55,23 @@ private:
 
 class WaterfallFreqDisplayScaleDraw: public QwtScaleDraw, public FreqOffsetAndPrecisionClass{
 public:
-  WaterfallFreqDisplayScaleDraw(const unsigned int precision):QwtScaleDraw(), FreqOffsetAndPrecisionClass(precision){
-
+  WaterfallFreqDisplayScaleDraw(const unsigned int precision)
+    : QwtScaleDraw(), FreqOffsetAndPrecisionClass(precision)
+  {
   }
 
-  virtual ~WaterfallFreqDisplayScaleDraw(){
-
+  virtual ~WaterfallFreqDisplayScaleDraw()
+  {
   }
 
-  QwtText label(double value)const{
-    return QString("%1").arg((value + GetCenterFrequency()) / ((GetFrequencyPrecision() == 0) ? 1.0 : 1000.0), 0, 'f', GetFrequencyPrecision());
+  QwtText label(double value) const
+  {
+    return QString("%1").arg((value + GetCenterFrequency()) / ((GetFrequencyPrecision() == 0) ? 1.0 : 1000.0), 
+                            0, 'f', GetFrequencyPrecision());
   }
 
-  virtual void initiateUpdate(){
+  virtual void initiateUpdate()
+  {
     invalidateCache();
   }
 
@@ -75,29 +84,33 @@ private:
 class TimeScaleData
 {
 public:
-  TimeScaleData(){
+  TimeScaleData()
+  {
     timespec_reset(&_zeroTime);
     _secondsPerLine = 1.0;
-    
   }
   
-  virtual ~TimeScaleData(){
-    
+  virtual ~TimeScaleData()
+  {    
   }
 
-  virtual timespec GetZeroTime()const{
+  virtual timespec GetZeroTime() const
+  {
     return _zeroTime;
   }
   
-  virtual void SetZeroTime(const timespec newTime){
+  virtual void SetZeroTime(const timespec newTime)
+  {
     _zeroTime = newTime;
   }
 
-  virtual void SetSecondsPerLine(const double newTime){
+  virtual void SetSecondsPerLine(const double newTime)
+  {
     _secondsPerLine = newTime;
   }
 
-  virtual double GetSecondsPerLine()const{
+  virtual double GetSecondsPerLine() const
+  {
     return _secondsPerLine;
   }
 
@@ -113,27 +126,32 @@ private:
 class QwtTimeScaleDraw: public QwtScaleDraw, public TimeScaleData
 {
 public:
-  QwtTimeScaleDraw():QwtScaleDraw(),TimeScaleData(){
-    
+  QwtTimeScaleDraw():QwtScaleDraw(),TimeScaleData()
+  {    
   }
 
-  virtual ~QwtTimeScaleDraw(){
-    
+  virtual ~QwtTimeScaleDraw()
+  {    
   }
 
-  virtual QwtText label(double value)const{
+  virtual QwtText label(double value) const
+  {
     QwtText returnLabel("");
 
     timespec lineTime = timespec_add(GetZeroTime(), (-value) * GetSecondsPerLine());
     struct tm timeTm;
     gmtime_r(&lineTime.tv_sec, &timeTm);
-    returnLabel = (QString("").sprintf("%04d/%02d/%02d\n%02d:%02d:%02d.%03ld", timeTm.tm_year+1900, timeTm.tm_mon+1, timeTm.tm_mday, timeTm.tm_hour, timeTm.tm_min, timeTm.tm_sec, lineTime.tv_nsec/1000000));
-    
+    returnLabel = (QString("").sprintf("%04d/%02d/%02d\n%02d:%02d:%02d.%03ld",
+                                      timeTm.tm_year+1900, timeTm.tm_mon+1,
+                                      timeTm.tm_mday, timeTm.tm_hour, timeTm.tm_min,
+                                      timeTm.tm_sec, lineTime.tv_nsec/1000000));
     return returnLabel;
   }
 
-  virtual void initiateUpdate(){
-    // Do this in one call rather than when zeroTime and secondsPerLine updates is to prevent the display from being updated too often...
+  virtual void initiateUpdate()
+  {
+    // Do this in one call rather than when zeroTime and secondsPerLine
+    // updates is to prevent the display from being updated too often...
     invalidateCache();
   }
   
@@ -146,16 +164,19 @@ private:
 class WaterfallZoomer: public QwtPlotZoomer, public TimeScaleData, public FreqOffsetAndPrecisionClass
 {
 public:
-  WaterfallZoomer(QwtPlotCanvas* canvas, const unsigned int freqPrecision):QwtPlotZoomer(canvas), TimeScaleData(), FreqOffsetAndPrecisionClass(freqPrecision)
+  WaterfallZoomer(QwtPlotCanvas* canvas, const unsigned int freqPrecision)
+    : QwtPlotZoomer(canvas), TimeScaleData(), 
+      FreqOffsetAndPrecisionClass(freqPrecision)
   {
     setTrackerMode(QwtPicker::AlwaysOn);
   }
 
-  virtual ~WaterfallZoomer(){
-
+  virtual ~WaterfallZoomer()
+  {
   }
   
-  virtual void updateTrackerText(){
+  virtual void updateTrackerText()
+  {
     updateDisplay();
   }
 
@@ -167,7 +188,10 @@ protected:
     timespec lineTime = timespec_add(GetZeroTime(), (-p.y()) * GetSecondsPerLine());
     struct tm timeTm;
     gmtime_r(&lineTime.tv_sec, &timeTm);
-    yLabel = (QString("").sprintf("%04d/%02d/%02d %02d:%02d:%02d.%03ld", timeTm.tm_year+1900, timeTm.tm_mon+1, timeTm.tm_mday, timeTm.tm_hour, timeTm.tm_min, timeTm.tm_sec, lineTime.tv_nsec/1000000));
+    yLabel = (QString("").sprintf("%04d/%02d/%02d %02d:%02d:%02d.%03ld",
+                                 timeTm.tm_year+1900, timeTm.tm_mon+1,
+                                 timeTm.tm_mday, timeTm.tm_hour, timeTm.tm_min,
+                                 timeTm.tm_sec, lineTime.tv_nsec/1000000));
 
     QwtText t(QString("%1 %2, %3").arg((p.x() + GetCenterFrequency()) / ((GetFrequencyPrecision() == 0) ? 1.0 : 1000.0), 0, 'f', GetFrequencyPrecision()).arg( (GetFrequencyPrecision() == 0) ? "Hz" : "kHz").arg(yLabel));
 
@@ -312,15 +336,25 @@ WaterfallDisplayPlot::SetFrequencyRange(const double constStartFreq,
 }
 
 
-double WaterfallDisplayPlot::GetStartFrequency()const{
+double
+WaterfallDisplayPlot::GetStartFrequency() const
+{
   return _startFrequency;
 }
 
-double WaterfallDisplayPlot::GetStopFrequency()const{
+double
+WaterfallDisplayPlot::GetStopFrequency() const
+{
   return _stopFrequency;
 }
 
-void WaterfallDisplayPlot::PlotNewData(const double* dataPoints, const int64_t numDataPoints, const double timePerFFT, const timespec timestamp, const int droppedFrames){
+void
+WaterfallDisplayPlot::PlotNewData(const double* dataPoints, 
+                                      const int64_t numDataPoints,
+                                      const double timePerFFT,
+                                      const timespec timestamp,
+                                      const int droppedFrames)
+{
   if(numDataPoints > 0){
     if(numDataPoints != _numPoints){
       _numPoints = numDataPoints;
@@ -363,7 +397,10 @@ void WaterfallDisplayPlot::PlotNewData(const double* dataPoints, const int64_t n
   }
 }
 
-void WaterfallDisplayPlot::SetIntensityRange(const double minIntensity, const double maxIntensity){
+void
+WaterfallDisplayPlot::SetIntensityRange(const double minIntensity, 
+                                            const double maxIntensity)
+{
   _waterfallData->setRange(QwtDoubleInterval(minIntensity, maxIntensity));
 
   emit UpdatedLowerIntensityLevel(minIntensity);
@@ -372,7 +409,9 @@ void WaterfallDisplayPlot::SetIntensityRange(const double minIntensity, const do
   _UpdateIntensityRangeDisplay();
 }
 
-void WaterfallDisplayPlot::replot(){
+void
+WaterfallDisplayPlot::replot()
+{
   const timespec startTime = get_highres_clock();
 
   QwtTimeScaleDraw* timeScale = (QwtTimeScaleDraw*)axisScaleDraw(QwtPlot::yLeft);
@@ -406,11 +445,23 @@ void WaterfallDisplayPlot::replot(){
   }
 }
 
-int WaterfallDisplayPlot::GetIntensityColorMapType()const{
+void
+WaterfallDisplayPlot::resizeSlot( QSize *s )
+{
+  resize(s->width(), s->height());
+}
+
+int
+WaterfallDisplayPlot::GetIntensityColorMapType() const
+{
   return _intensityColorMapType;
 }
 
-void WaterfallDisplayPlot::SetIntensityColorMapType(const int newType, const QColor lowColor, const QColor highColor){
+void
+WaterfallDisplayPlot::SetIntensityColorMapType(const int newType, 
+                                              const QColor lowColor, 
+                                              const QColor highColor)
+{
   if((_intensityColorMapType != newType) || 
      ((newType == INTENSITY_COLOR_MAP_TYPE_USER_DEFINED) &&
       (lowColor.isValid() && highColor.isValid()))){
@@ -458,15 +509,21 @@ void WaterfallDisplayPlot::SetIntensityColorMapType(const int newType, const QCo
   }
 }
 
-const QColor WaterfallDisplayPlot::GetUserDefinedLowIntensityColor()const{
+const QColor
+WaterfallDisplayPlot::GetUserDefinedLowIntensityColor() const
+{
   return _userDefinedLowIntensityColor;
 }
 
-const QColor WaterfallDisplayPlot::GetUserDefinedHighIntensityColor()const{
+const QColor
+WaterfallDisplayPlot::GetUserDefinedHighIntensityColor() const
+{
   return _userDefinedHighIntensityColor;
 }
 
-void WaterfallDisplayPlot::_UpdateIntensityRangeDisplay(){
+void
+WaterfallDisplayPlot::_UpdateIntensityRangeDisplay()
+{
   QwtScaleWidget *rightAxis = axisWidget(QwtPlot::yRight);
   rightAxis->setTitle("Intensity (dB)");
   rightAxis->setColorBarEnabled(true);
index fbbb69a5bd7ed77a142fd449b4eac579b6646821..bb87fb09f4944fbcd7474db0b4b798eb9e10e89e 100644 (file)
@@ -45,6 +45,9 @@ public:
   static const int INTENSITY_COLOR_MAP_TYPE_INCANDESCENT = 3;
   static const int INTENSITY_COLOR_MAP_TYPE_USER_DEFINED = 4;
 
+public slots:
+  void resizeSlot( QSize *s );
+
 signals:
   void UpdatedLowerIntensityLevel(const double);
   void UpdatedUpperIntensityLevel(const double);
index d2f734fdffd0774f6d8e5927edafbdbd709e34dc..1f50bf43c91db0cfccfd087ce02ff67d0e829602 100644 (file)
@@ -68,6 +68,7 @@ public:
   void set_constellation_axis(double xmin, double xmax,
                              double ymin, double ymax);
   void set_frequency_axis(double min, double max);
+  void set_constellation_pen_size(int size);
 };
 
 
@@ -116,5 +117,6 @@ public:
   void set_constellation_axis(double xmin, double xmax,
                              double ymin, double ymax);
   void set_frequency_axis(double min, double max);
+  void set_constellation_pen_size(int size);
 };
 
index bfb4641192a42a125da39dc3fdcd330432c863dc..7340141a697b599f78f866f6153ac7a18a0618c4 100644 (file)
@@ -194,6 +194,13 @@ qtgui_sink_c::set_constellation_axis(double xmin, double xmax,
   d_main_gui->SetConstellationAxis(xmin, xmax, ymin, ymax);
 }
 
+void 
+qtgui_sink_c::set_constellation_pen_size(int size)
+{
+  d_main_gui->SetConstellationPenSize(size);
+}
+
+
 void
 qtgui_sink_c::set_frequency_axis(double min, double max)
 {
index e36c8c9b00a33bf35c11eefa42b87c1c5ec39498..91c6b03e61e146816b642b0f8596695a0a20b9d9 100644 (file)
@@ -108,6 +108,7 @@ public:
   void set_time_domain_axis(double min, double max);
   void set_constellation_axis(double xmin, double xmax,
                              double ymin, double ymax);
+  void set_constellation_pen_size(int size);
   void set_frequency_axis(double min, double max);
 
   QApplication *d_qApplication;
index d0ce242742075cefea87571681f11da95efc13bb..6fbb2f381ce26e251320602f42ab91f41bddeb83 100644 (file)
@@ -188,6 +188,13 @@ qtgui_sink_f::set_constellation_axis(double xmin, double xmax,
   d_main_gui->SetConstellationAxis(xmin, xmax, ymin, ymax);
 }
 
+void 
+qtgui_sink_f::set_constellation_pen_size(int size)
+{
+  d_main_gui->SetConstellationPenSize(size);
+}
+
+
 void
 qtgui_sink_f::set_frequency_axis(double min, double max)
 {
index 027b89beae476e9cb4f2c33aa8f2587c0b864294..47c928d17ce55e0ab508b506ff26471c8c6bc8ee 100644 (file)
@@ -106,6 +106,7 @@ public:
   void set_time_domain_axis(double min, double max);
   void set_constellation_axis(double xmin, double xmax,
                              double ymin, double ymax);
+  void set_constellation_pen_size(int size);
   void set_frequency_axis(double min, double max);
 
   QApplication *d_qApplication;
index 36097d9758344fc48f3fd7816c33e1999c5d540c..b2729219382d10b6462da1be71afb5a0737fbb47 100644 (file)
Binary files a/gr-qtgui/src/lib/spectrumdisplayform.cc and b/gr-qtgui/src/lib/spectrumdisplayform.cc differ
index dbbf2567e23ed5043ef1da72e33ab2959c9675bf..d89141f1ed096132b231a9cffc5f13a91c43a483 100644 (file)
@@ -36,7 +36,7 @@ class SpectrumDisplayForm : public QWidget, public Ui::SpectrumDisplayForm
 public slots:
   void resizeEvent( QResizeEvent * e );
   void customEvent( QEvent * e );
-  void AvgLineEdit_textChanged( const QString & valueString );
+  void AvgLineEdit_valueChanged( int valueString );
   void MaxHoldCheckBox_toggled( bool newState );
   void MinHoldCheckBox_toggled( bool newState );
   void MinHoldResetBtn_clicked();
@@ -69,6 +69,7 @@ public slots:
   void SetTimeDomainAxis(double min, double max);
   void SetConstellationAxis(double xmin, double xmax,
                            double ymin, double ymax);
+  void SetConstellationPenSize(int size);
   void SetFrequencyAxis(double min, double max);
 
 private slots:
index 9324f150b2df35447493890e95f5e2d1faa55396..1458488a0dcd49be1cc5a67c38496e6073b302c3 100644 (file)
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>633</width>
-    <height>436</height>
+    <width>657</width>
+    <height>536</height>
    </rect>
   </property>
   <property name="windowTitle" >
    <string>Spectrum Display</string>
   </property>
-  <widget class="QCheckBox" name="UseRFFrequenciesCheckBox" >
-   <property name="geometry" >
-    <rect>
-     <x>10</x>
-     <y>385</y>
-     <width>180</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string>Display RF Frequencies</string>
-   </property>
-  </widget>
-  <widget class="QComboBox" name="WindowComboBox" >
-   <property name="geometry" >
-    <rect>
-     <x>105</x>
-     <y>410</y>
-     <width>170</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="font" >
-    <font>
-     <pointsize>9</pointsize>
-    </font>
-   </property>
-   <item>
-    <property name="text" >
-     <string>Hamming</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>Hann</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>Blackman</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>Rectangular</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>Kaiser</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>Blackman-harris</string>
-    </property>
-   </item>
-  </widget>
-  <widget class="QLabel" name="WindowLbl" >
-   <property name="geometry" >
-    <rect>
-     <x>10</x>
-     <y>410</y>
-     <width>90</width>
-     <height>17</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string>Window:</string>
-   </property>
-   <property name="alignment" >
-    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-   </property>
-   <property name="wordWrap" >
-    <bool>false</bool>
-   </property>
-  </widget>
-  <widget class="QLabel" name="FFTSizeLabel" >
-   <property name="geometry" >
-    <rect>
-     <x>405</x>
-     <y>385</y>
-     <width>116</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string>FFT Size:</string>
-   </property>
-   <property name="alignment" >
-    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-   </property>
-   <property name="wordWrap" >
-    <bool>false</bool>
-   </property>
-  </widget>
-  <widget class="QComboBox" name="FFTSizeComboBox" >
-   <property name="geometry" >
-    <rect>
-     <x>525</x>
-     <y>385</y>
-     <width>100</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <item>
-    <property name="text" >
-     <string>1024</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>2048</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>4096</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>8192</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>16384</string>
-    </property>
-   </item>
-   <item>
-    <property name="text" >
-     <string>32768</string>
-    </property>
-   </item>
-  </widget>
-  <widget class="QTabWidget" name="SpectrumTypeTab" >
-   <property name="geometry" >
-    <rect>
-     <x>0</x>
-     <y>0</y>
-     <width>630</width>
-     <height>380</height>
-    </rect>
-   </property>
-   <property name="currentIndex" >
-    <number>0</number>
-   </property>
-   <widget class="QWidget" name="FrequencyPage" >
-    <attribute name="title" >
-     <string>Frequency Display</string>
-    </attribute>
-    <widget class="QLineEdit" name="PowerLineEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>480</x>
-       <y>320</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>1</string>
-     </property>
-    </widget>
-    <widget class="QCheckBox" name="MinHoldCheckBox" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>325</y>
-       <width>95</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Min Hold</string>
-     </property>
-     <property name="checked" >
-      <bool>false</bool>
-     </property>
-    </widget>
-    <widget class="QLabel" name="AvgLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>545</x>
-       <y>300</y>
-       <width>72</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Average</string>
-     </property>
-     <property name="alignment" >
-      <set>Qt::AlignCenter</set>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
-     </property>
-    </widget>
-    <widget class="QPushButton" name="MinHoldResetBtn" >
-     <property name="geometry" >
-      <rect>
-       <x>105</x>
-       <y>325</y>
-       <width>61</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Reset</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="AvgLineEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>550</x>
-       <y>320</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>0</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="PowerLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>475</x>
-       <y>300</y>
-       <width>72</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Power</string>
-     </property>
-     <property name="alignment" >
-      <set>Qt::AlignCenter</set>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
-     </property>
-    </widget>
-    <widget class="QPushButton" name="MaxHoldResetBtn" >
-     <property name="geometry" >
-      <rect>
-       <x>105</x>
-       <y>300</y>
-       <width>61</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Reset</string>
-     </property>
-    </widget>
-    <widget class="QCheckBox" name="MaxHoldCheckBox" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>300</y>
-       <width>95</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Max Hold</string>
-     </property>
-     <property name="checked" >
-      <bool>false</bool>
-     </property>
-    </widget>
-    <widget class="QFrame" name="FrequencyPlotDisplayFrame" >
-     <property name="geometry" >
-      <rect>
-       <x>5</x>
-       <y>5</y>
-       <width>620</width>
-       <height>290</height>
-      </rect>
-     </property>
-     <property name="frameShape" >
-      <enum>QFrame::NoFrame</enum>
-     </property>
-     <property name="frameShadow" >
-      <enum>QFrame::Plain</enum>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QWidget" name="WaterfallPage" >
-    <attribute name="title" >
-     <string>Waterfall Display</string>
-    </attribute>
-    <widget class="QLabel" name="textLabel1" >
-     <property name="geometry" >
-      <rect>
-       <x>5</x>
-       <y>0</y>
-       <width>85</width>
-       <height>21</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>&lt;font size="-2">Intensity Display:&lt;/font></string>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
-     </property>
-    </widget>
-    <widget class="QComboBox" name="WaterfallIntensityComboBox" >
-     <property name="geometry" >
-      <rect>
-       <x>90</x>
-       <y>0</y>
-       <width>121</width>
-       <height>25</height>
-      </rect>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="1" column="3" >
+    <widget class="QComboBox" name="FFTSizeComboBox" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="maximumSize" >
+      <size>
+       <width>120</width>
+       <height>16777215</height>
+      </size>
      </property>
      <item>
       <property name="text" >
-       <string>Color</string>
+       <string>1024</string>
       </property>
      </item>
      <item>
       <property name="text" >
-       <string>White Hot</string>
+       <string>2048</string>
       </property>
      </item>
      <item>
       <property name="text" >
-       <string>Black Hot</string>
+       <string>4096</string>
       </property>
      </item>
      <item>
       <property name="text" >
-       <string>Incandescent</string>
+       <string>8192</string>
       </property>
      </item>
      <item>
       <property name="text" >
-       <string>User Defined</string>
+       <string>16384</string>
+      </property>
+     </item>
+     <item>
+      <property name="text" >
+       <string>32768</string>
       </property>
      </item>
     </widget>
-    <widget class="QwtWheel" name="WaterfallMaximumIntensityWheel" >
-     <property name="geometry" >
-      <rect>
-       <x>215</x>
-       <y>0</y>
-       <width>335</width>
-       <height>24</height>
-      </rect>
-     </property>
-     <property name="mouseTracking" >
-      <bool>true</bool>
-     </property>
-     <property name="focusPolicy" >
-      <enum>Qt::WheelFocus</enum>
-     </property>
-     <property name="valid" >
-      <bool>true</bool>
-     </property>
-     <property name="totalAngle" >
-      <double>200.000000000000000</double>
-     </property>
-     <property name="viewAngle" >
-      <double>20.000000000000000</double>
-     </property>
-     <property name="mass" >
-      <double>0.000000000000000</double>
-     </property>
-    </widget>
-    <widget class="QLabel" name="WaterfallMaximumIntensityLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>563</x>
-       <y>3</y>
-       <width>55</width>
-       <height>21</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>100 dB</string>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
-     </property>
-    </widget>
-    <widget class="QFrame" name="WaterfallPlotDisplayFrame" >
-     <property name="geometry" >
-      <rect>
-       <x>5</x>
-       <y>30</y>
-       <width>615</width>
-       <height>295</height>
-      </rect>
-     </property>
-     <property name="frameShape" >
-      <enum>QFrame::NoFrame</enum>
-     </property>
-     <property name="frameShadow" >
-      <enum>QFrame::Plain</enum>
-     </property>
-    </widget>
-    <widget class="QwtWheel" name="WaterfallMinimumIntensityWheel" >
-     <property name="geometry" >
-      <rect>
-       <x>215</x>
-       <y>325</y>
-       <width>335</width>
-       <height>24</height>
-      </rect>
-     </property>
-     <property name="valid" >
-      <bool>true</bool>
-     </property>
-     <property name="totalAngle" >
-      <double>200.000000000000000</double>
-     </property>
-     <property name="viewAngle" >
-      <double>20.000000000000000</double>
-     </property>
-     <property name="mass" >
-      <double>0.000000000000000</double>
-     </property>
-    </widget>
-    <widget class="QLabel" name="WaterfallMinimumIntensityLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>565</x>
-       <y>325</y>
-       <width>55</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>-100 dB</string>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
-     </property>
-    </widget>
-    <widget class="QPushButton" name="WaterfallAutoScaleBtn" >
-     <property name="geometry" >
-      <rect>
-       <x>0</x>
-       <y>325</y>
-       <width>135</width>
-       <height>21</height>
-      </rect>
-     </property>
-     <property name="toolTip" >
-      <string>Scales the Intensity to the current data extremes.</string>
-     </property>
-     <property name="text" >
-      <string>Auto Scale</string>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QWidget" name="Waterfall3DPage" >
-    <attribute name="title" >
-     <string>3D Waterfall Display</string>
-    </attribute>
-    <widget class="QLabel" name="textLabel1_2" >
-     <property name="geometry" >
-      <rect>
-       <x>5</x>
-       <y>0</y>
-       <width>85</width>
-       <height>21</height>
-      </rect>
-     </property>
+   </item>
+   <item row="1" column="2" >
+    <widget class="QLabel" name="FFTSizeLabel" >
      <property name="text" >
-      <string>&lt;font size="-2">Intensity Display:&lt;/font></string>
+      <string>FFT Size:</string>
      </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
-     </property>
-    </widget>
-    <widget class="QLabel" name="Waterfall3DMaximumIntensityLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>563</x>
-       <y>3</y>
-       <width>55</width>
-       <height>21</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>100 dB</string>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
      </property>
      <property name="wordWrap" >
       <bool>false</bool>
      </property>
     </widget>
-    <widget class="QPushButton" name="Waterfall3DAutoScaleBtn" >
-     <property name="geometry" >
-      <rect>
-       <x>0</x>
-       <y>325</y>
-       <width>135</width>
-       <height>21</height>
-      </rect>
-     </property>
-     <property name="toolTip" >
-      <string>Scales the Intensity to the current data extremes.</string>
-     </property>
-     <property name="text" >
-      <string>Auto Scale</string>
-     </property>
-    </widget>
-    <widget class="QwtWheel" name="Waterfall3DMinimumIntensityWheel" >
-     <property name="geometry" >
-      <rect>
-       <x>215</x>
-       <y>325</y>
-       <width>335</width>
-       <height>24</height>
-      </rect>
-     </property>
-     <property name="valid" >
-      <bool>true</bool>
-     </property>
-     <property name="totalAngle" >
-      <double>200.000000000000000</double>
-     </property>
-     <property name="viewAngle" >
-      <double>20.000000000000000</double>
-     </property>
-     <property name="mass" >
-      <double>0.000000000000000</double>
-     </property>
-    </widget>
-    <widget class="QLabel" name="Waterfall3DMinimumIntensityLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>565</x>
-       <y>325</y>
-       <width>55</width>
-       <height>20</height>
-      </rect>
-     </property>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QCheckBox" name="UseRFFrequenciesCheckBox" >
      <property name="text" >
-      <string>-100 dB</string>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
+      <string>Display RF Frequencies</string>
      </property>
     </widget>
-    <widget class="QFrame" name="Waterfall3DPlotDisplayFrame" >
-     <property name="geometry" >
-      <rect>
-       <x>5</x>
-       <y>30</y>
-       <width>615</width>
-       <height>295</height>
-      </rect>
-     </property>
-     <property name="frameShape" >
-      <enum>QFrame::NoFrame</enum>
-     </property>
-     <property name="frameShadow" >
-      <enum>QFrame::Plain</enum>
-     </property>
-    </widget>
-    <widget class="QComboBox" name="Waterfall3DIntensityComboBox" >
-     <property name="geometry" >
-      <rect>
-       <x>90</x>
-       <y>0</y>
-       <width>121</width>
-       <height>25</height>
-      </rect>
-     </property>
-     <item>
-      <property name="text" >
-       <string>Color</string>
-      </property>
-     </item>
-     <item>
-      <property name="text" >
-       <string>White Hot</string>
-      </property>
-     </item>
-     <item>
-      <property name="text" >
-       <string>Black Hot</string>
-      </property>
-     </item>
+   </item>
+   <item row="3" column="0" >
+    <layout class="QHBoxLayout" name="horizontalLayout" >
      <item>
-      <property name="text" >
-       <string>Incandescent</string>
-      </property>
+      <widget class="QLabel" name="WindowLbl" >
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text" >
+        <string>Window:</string>
+       </property>
+       <property name="alignment" >
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+       <property name="wordWrap" >
+        <bool>false</bool>
+       </property>
+      </widget>
      </item>
      <item>
-      <property name="text" >
-       <string>User Defined</string>
-      </property>
+      <widget class="QComboBox" name="WindowComboBox" >
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize" >
+        <size>
+         <width>120</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize" >
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font" >
+        <font>
+         <pointsize>9</pointsize>
+        </font>
+       </property>
+       <item>
+        <property name="text" >
+         <string>Hamming</string>
+        </property>
+       </item>
+       <item>
+        <property name="text" >
+         <string>Hann</string>
+        </property>
+       </item>
+       <item>
+        <property name="text" >
+         <string>Blackman</string>
+        </property>
+       </item>
+       <item>
+        <property name="text" >
+         <string>Rectangular</string>
+        </property>
+       </item>
+       <item>
+        <property name="text" >
+         <string>Kaiser</string>
+        </property>
+       </item>
+       <item>
+        <property name="text" >
+         <string>Blackman-harris</string>
+        </property>
+       </item>
+      </widget>
      </item>
+    </layout>
+   </item>
+   <item row="0" column="0" colspan="4" >
+    <widget class="QTabWidget" name="SpectrumTypeTab" >
+     <property name="currentIndex" >
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="FrequencyPage" >
+      <attribute name="title" >
+       <string>Frequency Display</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout" >
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_2" >
+         <item>
+          <widget class="QFrame" name="FrequencyPlotDisplayFrame" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize" >
+            <size>
+             <width>615</width>
+             <height>332</height>
+            </size>
+           </property>
+           <property name="sizeIncrement" >
+            <size>
+             <width>1</width>
+             <height>1</height>
+            </size>
+           </property>
+           <property name="frameShape" >
+            <enum>QFrame::NoFrame</enum>
+           </property>
+           <property name="frameShadow" >
+            <enum>QFrame::Plain</enum>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QGridLayout" name="gridLayout_2" >
+           <item row="1" column="0" >
+            <widget class="QCheckBox" name="MaxHoldCheckBox" >
+             <property name="text" >
+              <string>Max Hold</string>
+             </property>
+             <property name="checked" >
+              <bool>false</bool>
+             </property>
+            </widget>
+           </item>
+           <item row="2" column="0" >
+            <widget class="QCheckBox" name="MinHoldCheckBox" >
+             <property name="text" >
+              <string>Min Hold</string>
+             </property>
+             <property name="checked" >
+              <bool>false</bool>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="3" >
+            <widget class="QLabel" name="PowerLabel" >
+             <property name="minimumSize" >
+              <size>
+               <width>50</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="maximumSize" >
+              <size>
+               <width>50</width>
+               <height>16777215</height>
+              </size>
+             </property>
+             <property name="text" >
+              <string>Power</string>
+             </property>
+             <property name="alignment" >
+              <set>Qt::AlignCenter</set>
+             </property>
+             <property name="wordWrap" >
+              <bool>false</bool>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1" >
+            <widget class="QPushButton" name="MaxHoldResetBtn" >
+             <property name="sizePolicy" >
+              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="minimumSize" >
+              <size>
+               <width>25</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="text" >
+              <string>Reset</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="4" >
+            <widget class="QLabel" name="AvgLabel" >
+             <property name="sizePolicy" >
+              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="minimumSize" >
+              <size>
+               <width>62</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="text" >
+              <string>Average</string>
+             </property>
+             <property name="alignment" >
+              <set>Qt::AlignCenter</set>
+             </property>
+             <property name="wordWrap" >
+              <bool>false</bool>
+             </property>
+            </widget>
+           </item>
+           <item row="2" column="1" >
+            <widget class="QPushButton" name="MinHoldResetBtn" >
+             <property name="text" >
+              <string>Reset</string>
+             </property>
+            </widget>
+           </item>
+           <item row="2" column="4" >
+            <widget class="QSpinBox" name="AvgLineEdit" />
+           </item>
+           <item row="2" column="3" >
+            <widget class="QLineEdit" name="PowerLineEdit" >
+             <property name="sizePolicy" >
+              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="minimumSize" >
+              <size>
+               <width>50</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="maximumSize" >
+              <size>
+               <width>50</width>
+               <height>16777215</height>
+              </size>
+             </property>
+             <property name="text" >
+              <string>1</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="2" >
+            <spacer name="horizontalSpacer_2" >
+             <property name="orientation" >
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0" >
+              <size>
+               <width>325</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="WaterfallPage" >
+      <attribute name="title" >
+       <string>Waterfall Display</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_3" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1" >
+         <property name="maximumSize" >
+          <size>
+           <width>100</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Intensity Display:</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="2" >
+        <widget class="QwtWheel" name="WaterfallMaximumIntensityWheel" >
+         <property name="minimumSize" >
+          <size>
+           <width>200</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="mouseTracking" >
+          <bool>true</bool>
+         </property>
+         <property name="focusPolicy" >
+          <enum>Qt::WheelFocus</enum>
+         </property>
+         <property name="valid" >
+          <bool>true</bool>
+         </property>
+         <property name="totalAngle" >
+          <double>200.000000000000000</double>
+         </property>
+         <property name="viewAngle" >
+          <double>20.000000000000000</double>
+         </property>
+         <property name="mass" >
+          <double>0.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="3" >
+        <widget class="QLabel" name="WaterfallMaximumIntensityLabel" >
+         <property name="maximumSize" >
+          <size>
+           <width>100</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>100 dB</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" colspan="4" >
+        <widget class="QFrame" name="WaterfallPlotDisplayFrame" >
+         <property name="minimumSize" >
+          <size>
+           <width>617</width>
+           <height>338</height>
+          </size>
+         </property>
+         <property name="frameShape" >
+          <enum>QFrame::NoFrame</enum>
+         </property>
+         <property name="frameShadow" >
+          <enum>QFrame::Plain</enum>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="2" >
+        <widget class="QwtWheel" name="WaterfallMinimumIntensityWheel" >
+         <property name="minimumSize" >
+          <size>
+           <width>200</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="valid" >
+          <bool>true</bool>
+         </property>
+         <property name="totalAngle" >
+          <double>200.000000000000000</double>
+         </property>
+         <property name="viewAngle" >
+          <double>20.000000000000000</double>
+         </property>
+         <property name="mass" >
+          <double>0.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="3" >
+        <widget class="QLabel" name="WaterfallMinimumIntensityLabel" >
+         <property name="maximumSize" >
+          <size>
+           <width>100</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>-100 dB</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="2" >
+        <widget class="QPushButton" name="WaterfallAutoScaleBtn" >
+         <property name="maximumSize" >
+          <size>
+           <width>80</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>Scales the Intensity to the current data extremes.</string>
+         </property>
+         <property name="text" >
+          <string>Auto Scale</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" >
+        <widget class="QComboBox" name="WaterfallIntensityComboBox" >
+         <property name="maximumSize" >
+          <size>
+           <width>100</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <item>
+          <property name="text" >
+           <string>Color</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>White Hot</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Black Hot</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Incandescent</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>User Defined</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+      </layout>
+      <zorder>textLabel1</zorder>
+      <zorder>WaterfallMaximumIntensityWheel</zorder>
+      <zorder>WaterfallMaximumIntensityLabel</zorder>
+      <zorder>WaterfallPlotDisplayFrame</zorder>
+      <zorder>WaterfallMinimumIntensityWheel</zorder>
+      <zorder>WaterfallMinimumIntensityLabel</zorder>
+      <zorder>WaterfallAutoScaleBtn</zorder>
+      <zorder>WaterfallIntensityComboBox</zorder>
+     </widget>
+     <widget class="QWidget" name="Waterfall3DPage" >
+      <attribute name="title" >
+       <string>3D Waterfall Display</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_6" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1_2" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="maximumSize" >
+          <size>
+           <width>100</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Intensity Display:</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" >
+        <widget class="QComboBox" name="Waterfall3DIntensityComboBox" >
+         <property name="maximumSize" >
+          <size>
+           <width>100</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <item>
+          <property name="text" >
+           <string>Color</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>White Hot</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Black Hot</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Incandescent</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>User Defined</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item row="0" column="2" >
+        <widget class="QwtWheel" name="Waterfall3DMaximumIntensityWheel" >
+         <property name="minimumSize" >
+          <size>
+           <width>200</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="mouseTracking" >
+          <bool>true</bool>
+         </property>
+         <property name="focusPolicy" >
+          <enum>Qt::WheelFocus</enum>
+         </property>
+         <property name="valid" >
+          <bool>true</bool>
+         </property>
+         <property name="totalAngle" >
+          <double>200.000000000000000</double>
+         </property>
+         <property name="viewAngle" >
+          <double>20.000000000000000</double>
+         </property>
+         <property name="mass" >
+          <double>0.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="3" >
+        <widget class="QLabel" name="Waterfall3DMaximumIntensityLabel" >
+         <property name="maximumSize" >
+          <size>
+           <width>100</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>100 dB</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" colspan="4" >
+        <widget class="QFrame" name="Waterfall3DPlotDisplayFrame" >
+         <property name="frameShape" >
+          <enum>QFrame::NoFrame</enum>
+         </property>
+         <property name="frameShadow" >
+          <enum>QFrame::Plain</enum>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="2" >
+        <widget class="QPushButton" name="Waterfall3DAutoScaleBtn" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="maximumSize" >
+          <size>
+           <width>80</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="sizeIncrement" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>Scales the Intensity to the current data extremes.</string>
+         </property>
+         <property name="text" >
+          <string>Auto Scale</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="2" >
+        <widget class="QwtWheel" name="Waterfall3DMinimumIntensityWheel" >
+         <property name="minimumSize" >
+          <size>
+           <width>200</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="valid" >
+          <bool>true</bool>
+         </property>
+         <property name="totalAngle" >
+          <double>200.000000000000000</double>
+         </property>
+         <property name="viewAngle" >
+          <double>20.000000000000000</double>
+         </property>
+         <property name="mass" >
+          <double>0.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="3" >
+        <widget class="QLabel" name="Waterfall3DMinimumIntensityLabel" >
+         <property name="maximumSize" >
+          <size>
+           <width>100</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>-100 dB</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="TimeDomainPage" >
+      <attribute name="title" >
+       <string>Time Domain Display</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_4" >
+       <item row="0" column="0" >
+        <widget class="QFrame" name="TimeDomainDisplayFrame" >
+         <property name="minimumSize" >
+          <size>
+           <width>617</width>
+           <height>404</height>
+          </size>
+         </property>
+         <property name="frameShape" >
+          <enum>QFrame::NoFrame</enum>
+         </property>
+         <property name="frameShadow" >
+          <enum>QFrame::Plain</enum>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="ConstellationPage" >
+      <attribute name="title" >
+       <string>Constellation Display</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_5" >
+       <item row="0" column="0" >
+        <widget class="QFrame" name="ConstellationDisplayFrame" >
+         <property name="minimumSize" >
+          <size>
+           <width>617</width>
+           <height>406</height>
+          </size>
+         </property>
+         <property name="frameShape" >
+          <enum>QFrame::StyledPanel</enum>
+         </property>
+         <property name="frameShadow" >
+          <enum>QFrame::Raised</enum>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
     </widget>
-    <widget class="QwtWheel" name="Waterfall3DMaximumIntensityWheel" >
-     <property name="geometry" >
-      <rect>
-       <x>215</x>
-       <y>0</y>
-       <width>335</width>
-       <height>24</height>
-      </rect>
-     </property>
-     <property name="mouseTracking" >
-      <bool>true</bool>
-     </property>
-     <property name="focusPolicy" >
-      <enum>Qt::WheelFocus</enum>
-     </property>
-     <property name="valid" >
-      <bool>true</bool>
-     </property>
-     <property name="totalAngle" >
-      <double>200.000000000000000</double>
-     </property>
-     <property name="viewAngle" >
-      <double>20.000000000000000</double>
-     </property>
-     <property name="mass" >
-      <double>0.000000000000000</double>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QWidget" name="TimeDomainPage" >
-    <attribute name="title" >
-     <string>Time Domain Display</string>
-    </attribute>
-    <widget class="QFrame" name="TimeDomainDisplayFrame" >
-     <property name="geometry" >
-      <rect>
-       <x>5</x>
-       <y>5</y>
-       <width>620</width>
-       <height>340</height>
-      </rect>
-     </property>
-     <property name="frameShape" >
-      <enum>QFrame::NoFrame</enum>
-     </property>
-     <property name="frameShadow" >
-      <enum>QFrame::Plain</enum>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QWidget" name="ConstellationPage" >
-    <attribute name="title" >
-     <string>Constellation Display</string>
-    </attribute>
-    <widget class="QFrame" name="ConstellationDisplayFrame" >
-     <property name="geometry" >
-      <rect>
-       <x>5</x>
-       <y>5</y>
-       <width>620</width>
-       <height>340</height>
-      </rect>
-     </property>
-     <property name="frameShape" >
-      <enum>QFrame::StyledPanel</enum>
-     </property>
-     <property name="frameShadow" >
-      <enum>QFrame::Raised</enum>
-     </property>
-    </widget>
-   </widget>
-  </widget>
+   </item>
+  </layout>
  </widget>
  <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  </customwidgets>
  <tabstops>
   <tabstop>SpectrumTypeTab</tabstop>
-  <tabstop>MaxHoldCheckBox</tabstop>
-  <tabstop>MaxHoldResetBtn</tabstop>
-  <tabstop>MinHoldCheckBox</tabstop>
-  <tabstop>MinHoldResetBtn</tabstop>
-  <tabstop>PowerLineEdit</tabstop>
-  <tabstop>AvgLineEdit</tabstop>
   <tabstop>UseRFFrequenciesCheckBox</tabstop>
-  <tabstop>WindowComboBox</tabstop>
   <tabstop>FFTSizeComboBox</tabstop>
   <tabstop>WaterfallMaximumIntensityWheel</tabstop>
   <tabstop>WaterfallMinimumIntensityWheel</tabstop>
     </hint>
    </hints>
   </connection>
-  <connection>
-   <sender>AvgLineEdit</sender>
-   <signal>textChanged(QString)</signal>
-   <receiver>SpectrumDisplayForm</receiver>
-   <slot>AvgLineEdit_textChanged(QString)</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>552</x>
-     <y>344</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>20</x>
-     <y>20</y>
-    </hint>
-   </hints>
-  </connection>
   <connection>
    <sender>PowerLineEdit</sender>
    <signal>textChanged(QString)</signal>
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>AvgLineEdit</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>SpectrumDisplayForm</receiver>
+   <slot>AvgLineEdit_valueChanged(int)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>604</x>
+     <y>421</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>328</x>
+     <y>260</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>
diff --git a/gr-qtgui/src/python/.gitignore b/gr-qtgui/src/python/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/.gitignore b/gr-radar-mono/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/doc/.gitignore b/gr-radar-mono/doc/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/src/.gitignore b/gr-radar-mono/src/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/src/fpga/.gitignore b/gr-radar-mono/src/fpga/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/src/fpga/lib/.gitignore b/gr-radar-mono/src/fpga/lib/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/src/fpga/models/.gitignore b/gr-radar-mono/src/fpga/models/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/src/fpga/tb/.gitignore b/gr-radar-mono/src/fpga/tb/.gitignore
new file mode 100644 (file)
index 0000000..d709d8c
--- /dev/null
@@ -0,0 +1,6 @@
+/Makefile
+/Makefile.in
+/radar_tb
+/out
+/*.out*
+/*.vcd
diff --git a/gr-radar-mono/src/fpga/top/.gitignore b/gr-radar-mono/src/fpga/top/.gitignore
new file mode 100644 (file)
index 0000000..4049232
--- /dev/null
@@ -0,0 +1,21 @@
+/*.qmsg
+/*.qws
+/*.eqn
+/*.done
+/*.htm
+/*.rpt
+/*.ini
+/*.fsf
+/*.jam
+/*.jbc
+/*.pin
+/*.pof
+/*.rbf
+/*.smsg
+/*.sof
+/*.ttf
+/*.summary
+/undo_redo.txt
+/db
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/src/lib/.gitignore b/gr-radar-mono/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/src/python/.gitignore b/gr-radar-mono/src/python/.gitignore
new file mode 100644 (file)
index 0000000..f104c58
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/run_tests
+/*.pyc
diff --git a/gr-radio-astronomy/.gitignore b/gr-radio-astronomy/.gitignore
new file mode 100644 (file)
index 0000000..8736aba
--- /dev/null
@@ -0,0 +1,22 @@
+/Makefile
+/Makefile.in
+/aclocal.m4
+/configure
+/config.h.in
+/stamp-h.in
+/libtool
+/config.log
+/config.h
+/config.cache
+/config.status
+/missing
+/stamp-h
+/stamp-h1
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/missing
+/make.log
diff --git a/gr-radio-astronomy/src/.gitignore b/gr-radio-astronomy/src/.gitignore
new file mode 100644 (file)
index 0000000..bb3f277
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/howto.cc
+/howto.py
diff --git a/gr-radio-astronomy/src/lib/.gitignore b/gr-radio-astronomy/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..6fc7d94
--- /dev/null
@@ -0,0 +1,13 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/howto.cc
+/howto.py
+/ra.cc
+/ra.py
+/*.pyc
diff --git a/gr-radio-astronomy/src/python/.gitignore b/gr-radio-astronomy/src/python/.gitignore
new file mode 100644 (file)
index 0000000..bf03975
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/run_tests
diff --git a/gr-sounder/.gitignore b/gr-sounder/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-sounder/doc/.gitignore b/gr-sounder/doc/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-sounder/src/.gitignore b/gr-sounder/src/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-sounder/src/fpga/.gitignore b/gr-sounder/src/fpga/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-sounder/src/fpga/lib/.gitignore b/gr-sounder/src/fpga/lib/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-sounder/src/fpga/tb/.gitignore b/gr-sounder/src/fpga/tb/.gitignore
new file mode 100644 (file)
index 0000000..b05ab62
--- /dev/null
@@ -0,0 +1,5 @@
+/Makefile
+/Makefile.in
+/*.vcd
+/sounder_tb
+/*.out*
diff --git a/gr-sounder/src/fpga/top/.gitignore b/gr-sounder/src/fpga/top/.gitignore
new file mode 100644 (file)
index 0000000..2c9458c
--- /dev/null
@@ -0,0 +1,11 @@
+/Makefile
+/Makefile.in
+/db
+/*.rpt
+/*.summary
+/*.rbf
+/*.qws
+/*.smsg
+/*.done
+/*.pin
+/*.sof
diff --git a/gr-sounder/src/lib/.gitignore b/gr-sounder/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-sounder/src/python/.gitignore b/gr-sounder/src/python/.gitignore
new file mode 100644 (file)
index 0000000..8ac573b
--- /dev/null
@@ -0,0 +1,5 @@
+/Makefile
+/Makefile.in
+/run_tests
+/*.pyc
+/loopback.dat
diff --git a/gr-trellis/.gitignore b/gr-trellis/.gitignore
new file mode 100644 (file)
index 0000000..f3462d0
--- /dev/null
@@ -0,0 +1,23 @@
+/Makefile
+/Makefile.in
+/aclocal.m4
+/configure
+/config.h.in
+/stamp-h.in
+/libtool
+/config.log
+/config.h
+/config.cache
+/config.status
+/missing
+/stamp-h
+/stamp-h1
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/missing
+/make.log
+/*.pc
diff --git a/gr-trellis/doc/.gitignore b/gr-trellis/doc/.gitignore
new file mode 100644 (file)
index 0000000..98c2518
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.html
diff --git a/gr-trellis/src/.gitignore b/gr-trellis/src/.gitignore
new file mode 100644 (file)
index 0000000..bb3f277
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/howto.cc
+/howto.py
diff --git a/gr-trellis/src/examples/.gitignore b/gr-trellis/src/examples/.gitignore
new file mode 100644 (file)
index 0000000..c400497
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gr-trellis/src/examples/fsm_files/.gitignore b/gr-trellis/src/examples/fsm_files/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-trellis/src/lib/.gitignore b/gr-trellis/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..8932c36
--- /dev/null
@@ -0,0 +1,99 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/trellis.cc
+/trellis.py
+/wip
+/trellis_encoder_bs.cc
+/trellis_metrics_c.h
+/trellis_metrics_c.i
+/trellis_metrics_f.cc
+/trellis_viterbi_i.h
+/trellis_viterbi_combined_i.h
+/trellis_viterbi_i.i
+/trellis_viterbi_combined_i.i
+/trellis_metrics_i.h
+/trellis_metrics_i.i
+/trellis_encoder_bb.cc
+/trellis_encoder_ss.cc
+/trellis_viterbi_combined_s.h
+/trellis_viterbi_s.h
+/trellis_viterbi_combined_s.i
+/trellis_viterbi_s.i
+/trellis_metrics_s.h
+/trellis_metrics_s.i
+/trellis_encoder_si.h
+/trellis_encoder_si.i
+/trellis_metrics_i.cc
+/trellis_viterbi_s.cc
+/trellis_viterbi_combined_s.cc
+/trellis_encoder_ss.h
+/trellis_encoder_ss.i
+/trellis_encoder_bi.cc
+/trellis_encoder_bi.h
+/trellis_encoder_bi.i
+/trellis_encoder_ii.cc
+/trellis_viterbi_combined_b.cc
+/trellis_viterbi_b.cc
+/trellis_encoder_bs.h
+/trellis_encoder_bs.i
+/trellis_viterbi_combined_b.h
+/trellis_viterbi_b.h
+/trellis_viterbi_combined_b.i
+/trellis_viterbi_b.i
+/trellis_encoder_si.cc
+/trellis_metrics_f.h
+/trellis_metrics_f.i
+/trellis_encoder_ii.h
+/trellis_encoder_ii.i
+/trellis_metrics_c.cc
+/trellis_viterbi_combined_i.cc
+/trellis_viterbi_i.cc
+/trellis_encoder_bb.h
+/trellis_encoder_bb.i
+/trellis_metrics_s.cc
+/trellis_viterbi_combined_fs.h
+/trellis_viterbi_combined_fs.i
+/trellis_viterbi_combined_fi.cc
+/trellis_viterbi_combined_is.h
+/trellis_viterbi_combined_is.i
+/trellis_viterbi_combined_ci.h
+/trellis_viterbi_combined_ci.i
+/trellis_viterbi_combined_cs.cc
+/trellis_viterbi_combined_is.cc
+/trellis_viterbi_combined_si.h
+/trellis_viterbi_combined_si.i
+/trellis_viterbi_combined_ss.cc
+/trellis_viterbi_combined_fb.cc
+/trellis_viterbi_combined_fi.h
+/trellis_viterbi_combined_fi.i
+/trellis_viterbi_combined_cb.h
+/trellis_viterbi_combined_cb.i
+/trellis_viterbi_combined_ci.cc
+/trellis_viterbi_combined_ii.cc
+/trellis_viterbi_combined_ii.h
+/trellis_viterbi_combined_ii.i
+/trellis_viterbi_combined_sb.h
+/trellis_viterbi_combined_sb.i
+/trellis_viterbi_combined_si.cc
+/trellis_viterbi_combined_fb.h
+/trellis_viterbi_combined_fb.i
+/trellis_viterbi_combined_ib.h
+/trellis_viterbi_combined_ib.i
+/trellis_viterbi_combined_cs.h
+/trellis_viterbi_combined_cs.i
+/trellis_viterbi_combined_fs.cc
+/trellis_viterbi_combined_cb.cc
+/trellis_viterbi_combined_ss.h
+/trellis_viterbi_combined_ss.i
+/trellis_viterbi_combined_ib.cc
+/trellis_viterbi_combined_sb.cc
+/trellis_generated.i
+/generate-stamp
+/stamp-*
diff --git a/gr-trellis/src/python/.gitignore b/gr-trellis/src/python/.gitignore
new file mode 100644 (file)
index 0000000..bf03975
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
+/run_tests
diff --git a/gr-usrp/.gitignore b/gr-usrp/.gitignore
new file mode 100644 (file)
index 0000000..cdcf41b
--- /dev/null
@@ -0,0 +1,30 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
diff --git a/gr-usrp/apps/.gitignore b/gr-usrp/apps/.gitignore
new file mode 100644 (file)
index 0000000..2d01df2
--- /dev/null
@@ -0,0 +1,6 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
+/usrp_siggen
+/usrp_rx_cfile
diff --git a/gr-usrp/src/.gitignore b/gr-usrp/src/.gitignore
new file mode 100644 (file)
index 0000000..68abaf8
--- /dev/null
@@ -0,0 +1,11 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/usrp_swig.cc
+/usrp_swig.py
+/run_tests
+/usrp_dbids.py
+/*.pyc
diff --git a/gr-usrp2/.gitignore b/gr-usrp2/.gitignore
new file mode 100644 (file)
index 0000000..a43ae9c
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/gnuradio-usrp2.pc
diff --git a/gr-usrp2/src/.gitignore b/gr-usrp2/src/.gitignore
new file mode 100644 (file)
index 0000000..6f241fe
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
+/usrp2.py
+/usrp2.cc
+/run_tests
+/test_gr_usrp2
+/*.pyc
diff --git a/gr-utils/.gitignore b/gr-utils/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-utils/src/.gitignore b/gr-utils/src/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-utils/src/lib/.gitignore b/gr-utils/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-utils/src/python/.gitignore b/gr-utils/src/python/.gitignore
new file mode 100644 (file)
index 0000000..b695091
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pyc
index 3553099552b75281c2140a9452acf094abd34d03..ec2272c744f3b2dd712b8819dcf0b76e8feac475 100755 (executable)
@@ -35,9 +35,6 @@ except ImportError:
 
 from optparse import OptionParser
 
-matplotlib.interactive(True)
-matplotlib.use('TkAgg')
-
 class draw_constellation:
     def __init__(self, filename, options):
         self.hfile = open(filename, "r")
@@ -139,8 +136,9 @@ class draw_constellation:
         draw()
         
     def zoom(self, event):
-        newxlim = self.sp_iq.get_xlim()
-        if(newxlim.all() != self.xlim.all()):
+        newxlim = scipy.array(self.sp_iq.get_xlim())
+        curxlim = scipy.array(self.xlim)
+        if(newxlim.all() != curxlim.all()):
             self.xlim = newxlim
             r = self.reals[int(ceil(self.xlim[0])) : int(ceil(self.xlim[1]))]
             i = self.imags[int(ceil(self.xlim[0])) : int(ceil(self.xlim[1]))]
index 59a3f286b65fc3a7ae4189fe5200092355722d6b..a9c1417f9b308993cfaa09ebc0a78c3461ef4118 100755 (executable)
 # Boston, MA 02110-1301, USA.
 # 
 
-try:
-    import matplotlib
-    matplotlib.use('TkAgg')
-    matplotlib.interactive(True)
-except ImportError:
-    print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)"
-    raise SystemExit, 1
-
 try:
     import scipy
     from scipy import fftpack
@@ -164,8 +156,9 @@ class gr_plot_fft:
         draw()
         
     def zoom(self, event):
-        newxlim = self.sp_iq.get_xlim()
-        if(newxlim.all() != self.xlim.all()):
+        newxlim = scipy.array(self.sp_iq.get_xlim())
+        curxlim = scipy.array(self.xlim)
+        if(newxlim.all() != curxlim.all()):
             self.xlim = newxlim
             xmin = max(0, int(ceil(self.sample_rate*(self.xlim[0] - self.position))))
             xmax = min(int(ceil(self.sample_rate*(self.xlim[1] - self.position))), len(self.iq))
index 2a4142a815863c71c5d14f63079313f51b6b875b..371ce3b7991b55137c7cb177180a23494d608a3e 100755 (executable)
@@ -34,10 +34,7 @@ except ImportError:
 
 from optparse import OptionParser
 
-matplotlib.interactive(True)
-matplotlib.use('TkAgg')
-
-class draw_fft:
+class draw_iq:
     def __init__(self, filename, options):
         self.hfile = open(filename, "r")
         self.block_length = options.block
@@ -168,7 +165,7 @@ def main():
         raise SystemExit, 1
     filename = args[0]
 
-    dc = draw_fft(filename, options)
+    dc = draw_iq(filename, options)
 
 if __name__ == "__main__":
     try:
index 669d7b573a4e0b6cfe5e0b0a8c98dadf41c26171..0e3dbecd944f583d126364d76f215f244063d57d 100755 (executable)
 # Boston, MA 02110-1301, USA.
 # 
 
-try:
-    import matplotlib
-    matplotlib.use('TkAgg')
-    matplotlib.interactive(True)
-except ImportError:
-    print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)"
-    raise SystemExit, 1
-
 try:
     import scipy
     from scipy import fftpack
@@ -187,8 +179,9 @@ class gr_plot_psd:
         draw()
         
     def zoom(self, event):
-        newxlim = self.sp_iq.get_xlim()
-        if(newxlim.all() != self.xlim.all()):
+        newxlim = scipy.array(self.sp_iq.get_xlim())
+        curxlim = scipy.array(self.xlim)
+        if(newxlim.all() != curxlim.all()):
             self.xlim = newxlim
             xmin = max(0, int(ceil(self.sample_rate*(self.xlim[0] - self.position))))
             xmax = min(int(ceil(self.sample_rate*(self.xlim[1] - self.position))), len(self.iq))
index 7c79e17143d6d2b5be8bbbf81d37499ca2c1bc1f..08cdd60306bfb0b20e69d24431fc1b9659212850 100644 (file)
@@ -33,9 +33,6 @@ except ImportError:
 
 from optparse import OptionParser
 
-matplotlib.interactive(True)
-matplotlib.use('TkAgg')
-
 class plot_data:
     def __init__(self, datatype, filenames, options):
         self.hfile = list()
diff --git a/gr-video-sdl/.gitignore b/gr-video-sdl/.gitignore
new file mode 100644 (file)
index 0000000..53edad3
--- /dev/null
@@ -0,0 +1,32 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
+/stamp-h1.in
+/stamp-h2.in
diff --git a/gr-video-sdl/src/.gitignore b/gr-video-sdl/src/.gitignore
new file mode 100644 (file)
index 0000000..e068ddb
--- /dev/null
@@ -0,0 +1,12 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/video_sdl.cc
+/video_sdl.py
+/run_tests
diff --git a/gr-wxgui/.gitignore b/gr-wxgui/.gitignore
new file mode 100644 (file)
index 0000000..cdcf41b
--- /dev/null
@@ -0,0 +1,30 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/mkinstalldirs
+/py-compile
+/stamp-h
+/stamp-h.in
+/stamp-h1
diff --git a/gr-wxgui/src/.gitignore b/gr-wxgui/src/.gitignore
new file mode 100644 (file)
index 0000000..f9c5da0
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gr-wxgui/src/python/.gitignore b/gr-wxgui/src/python/.gitignore
new file mode 100644 (file)
index 0000000..f9c5da0
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gr-wxgui/src/python/forms/.gitignore b/gr-wxgui/src/python/forms/.gitignore
new file mode 100644 (file)
index 0000000..a74b07a
--- /dev/null
@@ -0,0 +1 @@
+/*.pyc
diff --git a/gr-wxgui/src/python/plotter/.gitignore b/gr-wxgui/src/python/plotter/.gitignore
new file mode 100644 (file)
index 0000000..b695091
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pyc
diff --git a/grc/.gitignore b/grc/.gitignore
new file mode 100644 (file)
index 0000000..8e70007
--- /dev/null
@@ -0,0 +1,3 @@
+/grc.conf
+/Makefile
+/Makefile.in
diff --git a/grc/base/.gitignore b/grc/base/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/blocks/.gitignore b/grc/blocks/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/.gitignore b/grc/examples/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/audio/.gitignore b/grc/examples/audio/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/simple/.gitignore b/grc/examples/simple/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/trellis/.gitignore b/grc/examples/trellis/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/usrp/.gitignore b/grc/examples/usrp/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/xmlrpc/.gitignore b/grc/examples/xmlrpc/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/freedesktop/.gitignore b/grc/freedesktop/.gitignore
new file mode 100644 (file)
index 0000000..ff07a10
--- /dev/null
@@ -0,0 +1,3 @@
+/grc_setup_freedesktop
+/Makefile
+/Makefile.in
diff --git a/grc/grc_gnuradio/.gitignore b/grc/grc_gnuradio/.gitignore
new file mode 100644 (file)
index 0000000..908cf90
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/Constants.py
diff --git a/grc/gui/.gitignore b/grc/gui/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/python/.gitignore b/grc/python/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/scripts/.gitignore b/grc/scripts/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gruel/.gitignore b/gruel/.gitignore
new file mode 100644 (file)
index 0000000..ede973f
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/gruel.pc
diff --git a/gruel/src/.gitignore b/gruel/src/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gruel/src/include/.gitignore b/gruel/src/include/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gruel/src/include/gruel/.gitignore b/gruel/src/include/gruel/.gitignore
new file mode 100644 (file)
index 0000000..bbe9639
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/inet.h
+/pmt_serial_tags.h
index c38c7fa3833d842a75e423446867ea6155492a90..9f50cb619f3e391cfa406d8a1611c4a2ae3d5790 100644 (file)
@@ -35,6 +35,7 @@ gruelinclude_HEADERS = \
        pmt_pool.h \
        pmt_serial_tags.h \
        realtime.h \
+       send.h \
        sys_pri.h \
        thread_body_wrapper.h \
        thread_group.h \
index bc287afae7c825fd84b0c5f7d2b4be7ccaa3c624..3afd6dde08fb4616354c6af017fc8968e8246277 100644 (file)
@@ -18,8 +18,8 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
-#ifndef INCLUDED_MSG_ACCEPTER_H
-#define INCLUDED_MSG_ACCEPTER_H
+#ifndef INCLUDED_GRUEL_MSG_ACCEPTER_H
+#define INCLUDED_GRUEL_MSG_ACCEPTER_H
 
 #include <gruel/pmt.h>
 
@@ -34,9 +34,16 @@ namespace gruel {
     msg_accepter() {};
     virtual ~msg_accepter();
 
+    /*!
+     * \brief send \p msg to \p msg_accepter
+     *
+     * Sending a message is an asynchronous operation.  The \p post
+     * call will not wait for the message either to arrive at the
+     * destination or to be received.
+     */
     virtual void post(pmt::pmt_t msg) = 0;
   };
 
 } /* namespace gruel */
 
-#endif /* INCLUDED_MSG_ACCEPTER_H */
+#endif /* INCLUDED_GRUEL_MSG_ACCEPTER_H */
index b14049d54f8ff134839ec10b3342a29e2676ba98..bf1762e925e5ab2e09f219d5a2b16794f83737f3 100644 (file)
@@ -32,13 +32,14 @@ namespace gruel {
    */
   class msg_accepter_msgq : public msg_accepter 
   {
+  protected:
     msg_queue_sptr d_msg_queue;
     
   public:
     msg_accepter_msgq(msg_queue_sptr msgq);
     ~msg_accepter_msgq();
 
-    void post(pmt::pmt_t msg);
+    virtual void post(pmt::pmt_t msg);
 
     msg_queue_sptr msg_queue() const { return d_msg_queue; }
   };
index de0998b5e1bf6e51cc58da7e7ac2182c47ce648f..2403593017f52ea79265e6a632f935d932465a28 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef INCLUDED_PMT_H
 #define INCLUDED_PMT_H
 
-#include <boost/shared_ptr.hpp>
+#include <boost/intrusive_ptr.hpp>
 #include <boost/any.hpp>
 #include <complex>
 #include <string>
@@ -50,8 +50,10 @@ class pmt_base;
  * \brief typedef for shared pointer (transparent reference counting).
  * See http://www.boost.org/libs/smart_ptr/smart_ptr.htm
  */
-typedef boost::shared_ptr<pmt_base> pmt_t;
+typedef boost::intrusive_ptr<pmt_base> pmt_t;
 
+extern void intrusive_ptr_add_ref(pmt_base*);
+extern void intrusive_ptr_release(pmt_base*);
 
 class pmt_exception : public std::logic_error
 {
@@ -235,6 +237,42 @@ pmt_t pmt_cddr(pmt_t pair);
 pmt_t pmt_caddr(pmt_t pair);
 pmt_t pmt_cadddr(pmt_t pair);
 
+/*
+ * ------------------------------------------------------------------------
+ *                               Tuples
+ *
+ * Store a fixed number of objects.  Tuples are not modifiable, and thus
+ * are excellent for use as messages.  Indexing is zero based.
+ * Access time to an element is O(1).
+ * ------------------------------------------------------------------------
+ */
+
+//! Return true if \p x is a tuple, othewise false.
+bool pmt_is_tuple(pmt_t x);
+
+pmt_t pmt_make_tuple();
+pmt_t pmt_make_tuple(const pmt_t &e0);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7, const pmt_t &e8);
+pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7, const pmt_t &e8, const pmt_t &e9);
+
+/*!
+ * If \p x is a vector or proper list, return a tuple containing the elements of x
+ */
+pmt_t pmt_to_tuple(const pmt_t &x);
+
+/*!
+ * Return the contents of position \p k of \p tuple.
+ * \p k must be a valid index of \p tuple.
+ */
+pmt_t pmt_tuple_ref(const pmt_t &tuple, size_t k);
+
 /*
  * ------------------------------------------------------------------------
  *                            Vectors
diff --git a/gruel/src/include/gruel/send.h b/gruel/src/include/gruel/send.h
new file mode 100644 (file)
index 0000000..292017d
--- /dev/null
@@ -0,0 +1,49 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2009 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#ifndef INCLUDED_GRUEL_SEND_H
+#define INCLUDED_GRUEL_SEND_H
+
+#include <gruel/msg_accepter.h>
+
+namespace gruel {
+
+
+  /*!
+   * \brief send \p msg to \p msg_accepter
+   *
+   * Sending a message is an asynchronous operation.  The \p send
+   * call will not wait for the message either to arrive at the
+   * destination or to be received.
+   *
+   * \returns msg
+   */
+  static inline pmt::pmt_t
+  send(msg_accepter &acc, pmt::pmt_t msg)
+  {
+    return acc.post(msg);
+  }
+
+
+
+} /* namespace gruel */
+
+
+#endif /* INCLUDED_SEND_H */
diff --git a/gruel/src/lib/.gitignore b/gruel/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..89a768d
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
diff --git a/gruel/src/lib/msg/.gitignore b/gruel/src/lib/msg/.gitignore
new file mode 100644 (file)
index 0000000..c026fd6
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
diff --git a/gruel/src/lib/pmt/.gitignore b/gruel/src/lib/pmt/.gitignore
new file mode 100644 (file)
index 0000000..035c031
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
+/test_pmt
+/qa_pmt_unv.cc
+/qa_pmt_unv.h
+/pmt_unv_int.h
+/pmt_unv.cc
+/stamp-sources-generate
index fbf557be1e2577a3074928e7ddfba315a6b3e340..f0e3c30a266f630a78252e0c4a2a35f2cfb7a918 100644 (file)
@@ -56,6 +56,8 @@ pmt_base::operator delete(void *p, size_t size)
 
 #endif
 
+void intrusive_ptr_add_ref(pmt_base* p) { ++(p->count_); }
+void intrusive_ptr_release(pmt_base* p) { if (--(p->count_) == 0 ) delete p; }
 
 pmt_base::~pmt_base()
 {
@@ -126,6 +128,12 @@ _vector(pmt_t x)
   return dynamic_cast<pmt_vector*>(x.get());
 }
 
+static pmt_tuple *
+_tuple(pmt_t x)
+{
+  return dynamic_cast<pmt_tuple*>(x.get());
+}
+
 static pmt_uniform_vector *
 _uniform_vector(pmt_t x)
 {
@@ -494,6 +502,201 @@ pmt_vector_fill(pmt_t vector, pmt_t obj)
   _vector(vector)->fill(obj);
 }
 
+////////////////////////////////////////////////////////////////////////////
+//                             Tuples
+////////////////////////////////////////////////////////////////////////////
+
+pmt_tuple::pmt_tuple(size_t len)
+  : d_v(len)
+{
+}
+
+pmt_t
+pmt_tuple::ref(size_t k) const
+{
+  if (k >= length())
+    throw pmt_out_of_range("pmt_tuple_ref", pmt_from_long(k));
+  return d_v[k];
+}
+
+bool
+pmt_is_tuple(pmt_t obj)
+{
+  return obj->is_tuple();
+}
+
+pmt_t
+pmt_tuple_ref(const pmt_t &tuple, size_t k)
+{
+  if (!tuple->is_tuple())
+    throw pmt_wrong_type("pmt_tuple_ref", tuple);
+  return _tuple(tuple)->ref(k);
+}
+
+// for (i=0; i < 10; i++)
+//   make_constructor()
+
+pmt_t
+pmt_make_tuple()
+{
+  return pmt_t(new pmt_tuple(0));
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0)
+{
+  pmt_tuple *t = new pmt_tuple(1);
+  t->_set(0, e0);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1)
+{
+  pmt_tuple *t = new pmt_tuple(2);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2)
+{
+  pmt_tuple *t = new pmt_tuple(3);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  t->_set(2, e2);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3)
+{
+  pmt_tuple *t = new pmt_tuple(4);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  t->_set(2, e2);
+  t->_set(3, e3);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4)
+{
+  pmt_tuple *t = new pmt_tuple(5);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  t->_set(2, e2);
+  t->_set(3, e3);
+  t->_set(4, e4);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5)
+{
+  pmt_tuple *t = new pmt_tuple(6);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  t->_set(2, e2);
+  t->_set(3, e3);
+  t->_set(4, e4);
+  t->_set(5, e5);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6)
+{
+  pmt_tuple *t = new pmt_tuple(7);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  t->_set(2, e2);
+  t->_set(3, e3);
+  t->_set(4, e4);
+  t->_set(5, e5);
+  t->_set(6, e6);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7)
+{
+  pmt_tuple *t = new pmt_tuple(8);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  t->_set(2, e2);
+  t->_set(3, e3);
+  t->_set(4, e4);
+  t->_set(5, e5);
+  t->_set(6, e6);
+  t->_set(7, e7);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7, const pmt_t &e8)
+{
+  pmt_tuple *t = new pmt_tuple(9);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  t->_set(2, e2);
+  t->_set(3, e3);
+  t->_set(4, e4);
+  t->_set(5, e5);
+  t->_set(6, e6);
+  t->_set(7, e7);
+  t->_set(8, e8);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7, const pmt_t &e8, const pmt_t &e9)
+{
+  pmt_tuple *t = new pmt_tuple(10);
+  t->_set(0, e0);
+  t->_set(1, e1);
+  t->_set(2, e2);
+  t->_set(3, e3);
+  t->_set(4, e4);
+  t->_set(5, e5);
+  t->_set(6, e6);
+  t->_set(7, e7);
+  t->_set(8, e8);
+  t->_set(9, e9);
+  return pmt_t(t);
+}
+
+pmt_t
+pmt_to_tuple(const pmt_t &x)
+{
+  if (x->is_tuple())           // already one
+    return x;
+
+  size_t len = pmt_length(x);
+  pmt_tuple *t = new pmt_tuple(len);
+  pmt_t r = pmt_t(t);
+
+  if (x->is_vector()){
+    for (size_t i = 0; i < len; i++)
+      t->_set(i, _vector(x)->ref(i));
+    return r;
+  }
+
+  if (x->is_pair()){
+    pmt_t y = x;
+    for (size_t i = 0; i < len; i++){
+      t->_set(i, pmt_car(y));
+      y = pmt_cdr(y);
+    }
+    return r;
+  }
+
+  throw pmt_wrong_type("pmt_to_tuple", x);
+}
+
+
+
 ////////////////////////////////////////////////////////////////////////////
 //                       Uniform Numeric Vectors
 ////////////////////////////////////////////////////////////////////////////
@@ -728,6 +931,19 @@ pmt_equal(const pmt_t& x, const pmt_t& y)
     return true;
   }
 
+  if (x->is_tuple() && y->is_tuple()){
+    pmt_tuple *xv = _tuple(x);
+    pmt_tuple *yv = _tuple(y);
+    if (xv->length() != yv->length())
+      return false;
+
+    for (unsigned i = 0; i < xv->length(); i++)
+      if (!pmt_equal(xv->_ref(i), yv->_ref(i)))
+       return false;
+
+    return true;
+  }
+
   if (x->is_uniform_vector() && y->is_uniform_vector()){
     pmt_uniform_vector *xv = _uniform_vector(x);
     pmt_uniform_vector *yv = _uniform_vector(y);
@@ -757,11 +973,15 @@ pmt_length(const pmt_t& x)
   if (x->is_uniform_vector())
     return _uniform_vector(x)->length();
 
-  if (x->is_null()) return 0;
+  if (x->is_tuple())
+    return _tuple(x)->length();
+
+  if (x->is_null())
+    return 0;
 
   if (x->is_pair()) {
     size_t length=1;
-       pmt_t it = pmt_cdr(x);
+    pmt_t it = pmt_cdr(x);
     while (pmt_is_pair(it)){
       length++;
       it = pmt_cdr(it);
index 9aac322a7fc7085cce6b56f97f21d653a590152e..7581845f825df373a65951c7d8241e8b60e1f5f9 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <gruel/pmt.h>
 #include <boost/utility.hpp>
+#include <boost/detail/atomic_count.hpp>
 
 /*
  * EVERYTHING IN THIS FILE IS PRIVATE TO THE IMPLEMENTATION!
 namespace pmt {
 
 class pmt_base : boost::noncopyable {
+  mutable boost::detail::atomic_count count_;
+
 protected:
-  pmt_base(){};
+  pmt_base() : count_(0) {};
   virtual ~pmt_base();
 
 public:
@@ -48,6 +51,7 @@ public:
   virtual bool is_complex() const { return false; }
   virtual bool is_null()    const { return false; }
   virtual bool is_pair()    const { return false; }
+  virtual bool is_tuple()   const { return false; }
   virtual bool is_vector()  const { return false; }
   virtual bool is_dict()    const { return false; }
   virtual bool is_any()     const { return false; }
@@ -66,6 +70,9 @@ public:
   virtual bool is_c32vector() const { return false; }
   virtual bool is_c64vector() const { return false; }
 
+  friend void intrusive_ptr_add_ref(pmt_base* p);
+  friend void intrusive_ptr_release(pmt_base* p);
+
 # if (PMT_LOCAL_ALLOCATOR)
   void *operator new(size_t);
   void operator delete(void *, size_t);
@@ -180,6 +187,22 @@ public:
   pmt_t _ref(size_t k) const { return d_v[k]; }
 };
 
+class pmt_tuple : public pmt_base
+{
+  std::vector<pmt_t>   d_v;
+
+public:
+  pmt_tuple(size_t len);
+  //~pmt_tuple();
+
+  bool is_tuple() const { return true; }
+  pmt_t ref(size_t k) const;
+  size_t length() const { return d_v.size(); }
+
+  pmt_t _ref(size_t k) const { return d_v[k]; }
+  void _set(size_t k, pmt_t v) { d_v[k] = v; }
+};
+
 class pmt_dict : public pmt_base
 {
   pmt_t                d_alist;        // list of (key . value) pairs
index f5a82de0e020e07cea3bbba01b6e6a4cb317756f..179e6b72cb4f0450bfde2ced2e9711e38d717b79 100644 (file)
@@ -80,16 +80,31 @@ pmt_write(pmt_t obj, std::ostream &port)
     port << "(";
     pmt_write_list_tail(obj, port);
   }
+  else if (pmt_is_tuple(obj)){
+    port << "{";
+    size_t len = pmt_length(obj);
+    if (len > 0){
+      port << pmt_tuple_ref(obj, 0);
+      for (size_t i = 1; i < len; i++)
+       port << " " << pmt_tuple_ref(obj, i);
+    }
+    port << "}";
+  }
+  else if (pmt_is_vector(obj)){
+    port << "#(";
+    size_t len = pmt_length(obj);
+    if (len > 0){
+      port << pmt_vector_ref(obj, 0);
+      for (size_t i = 1; i < len; i++)
+       port << " " << pmt_vector_ref(obj, i);
+    }
+    port << ")";
+  }
   else if (pmt_is_dict(obj)){
     // FIXME
     // port << "#<dict " << obj << ">";
     port << "#<dict>";
   }
-  else if (pmt_is_vector(obj)){
-    // FIXME
-    // port << "#<vector " << obj << ">";
-    port << "#<vector>";
-  }
   else if (pmt_is_uniform_vector(obj)){
     // FIXME
     // port << "#<uniform-vector " << obj << ">";
index b81354721dbad1b664fad64936991aecdf3ab14f..899674bbb18b4d2deaaff8cb60902c927b7a2f33 100644 (file)
@@ -193,6 +193,91 @@ qa_pmt_prims::test_vectors()
     CPPUNIT_ASSERT_EQUAL(s0, pmt_vector_ref(v1, i));
 }
 
+static void
+check_tuple(size_t len, const std::vector<pmt_t> &s, pmt_t t)
+{
+  CPPUNIT_ASSERT_EQUAL(true, pmt_is_tuple(t));
+  CPPUNIT_ASSERT_EQUAL(len, pmt_length(t));
+
+  for (size_t i = 0; i < len; i++)
+    CPPUNIT_ASSERT_EQUAL(s[i], pmt_tuple_ref(t, i));
+
+}
+
+void
+qa_pmt_prims::test_tuples()
+{
+  pmt_t v = pmt_make_vector(10, PMT_NIL);
+  std::vector<pmt_t> s(10);
+  for (size_t i = 0; i < 10; i++){
+    std::ostringstream os;
+    os << "s" << i;
+    s[i] = pmt_string_to_symbol(os.str());
+    pmt_vector_set(v, i, s[i]);
+  }
+
+
+  pmt_t t;
+
+  t = pmt_make_tuple();
+  check_tuple(0, s, t);
+
+  t = pmt_make_tuple(s[0]);
+  check_tuple(1, s, t);
+
+  CPPUNIT_ASSERT(pmt_is_vector(v));
+  CPPUNIT_ASSERT(!pmt_is_tuple(v));
+  CPPUNIT_ASSERT(pmt_is_tuple(t));
+  CPPUNIT_ASSERT(!pmt_is_vector(t));
+
+  t = pmt_make_tuple(s[0], s[1]);
+  check_tuple(2, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2]);
+  check_tuple(3, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2], s[3]);
+  check_tuple(4, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2], s[3], s[4]);
+  check_tuple(5, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2], s[3], s[4], s[5]);
+  check_tuple(6, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2], s[3], s[4], s[5], s[6]);
+  check_tuple(7, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7]);
+  check_tuple(8, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8]);
+  check_tuple(9, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9]);
+  check_tuple(10, s, t);
+
+  t = pmt_make_tuple(s[0], s[1], s[2]);
+  CPPUNIT_ASSERT_THROW(pmt_tuple_ref(t, 3), pmt_out_of_range);
+  CPPUNIT_ASSERT_THROW(pmt_vector_ref(t, 0), pmt_wrong_type);
+  CPPUNIT_ASSERT_THROW(pmt_tuple_ref(v, 0), pmt_wrong_type);
+
+  t = pmt_make_tuple(s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9]);
+  pmt_t t2 = pmt_to_tuple(v);
+  CPPUNIT_ASSERT_EQUAL(size_t(10), pmt_length(v));
+  CPPUNIT_ASSERT(pmt_equal(t, t2));
+  //std::cout << v << std::endl;
+  //std::cout << t2 << std::endl;
+
+  
+  t = pmt_make_tuple(s[0], s[1], s[2]);
+  pmt_t list0 = pmt_list3(s[0], s[1], s[2]);
+  CPPUNIT_ASSERT_EQUAL(size_t(3), pmt_length(list0));
+  t2 = pmt_to_tuple(list0);
+  CPPUNIT_ASSERT_EQUAL(size_t(3), pmt_length(t2));
+  CPPUNIT_ASSERT(pmt_equal(t, t2));
+}
+
 void
 qa_pmt_prims::test_equivalence()
 {
@@ -436,3 +521,4 @@ qa_pmt_prims::test_sets()
   CPPUNIT_ASSERT(!pmt_subsetp(l2,l1));
   CPPUNIT_ASSERT(!pmt_subsetp(l3,l2));
 }
+
index effb3a097a635fad976257a0d1d11436defd7f52..2fe473c43b5c81888f7124916c7ad6adc3401c7d 100644 (file)
@@ -35,6 +35,7 @@ class qa_pmt_prims : public CppUnit::TestCase {
   CPPUNIT_TEST(test_complexes);
   CPPUNIT_TEST(test_pairs);
   CPPUNIT_TEST(test_vectors);
+  CPPUNIT_TEST(test_tuples);
   CPPUNIT_TEST(test_equivalence);
   CPPUNIT_TEST(test_misc);
   CPPUNIT_TEST(test_dict);
@@ -53,6 +54,7 @@ class qa_pmt_prims : public CppUnit::TestCase {
   void test_complexes();
   void test_pairs();
   void test_vectors();
+  void test_tuples();
   void test_equivalence();
   void test_misc();
   void test_dict();
diff --git a/gruel/src/scheme/.gitignore b/gruel/src/scheme/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gruel/src/scheme/gnuradio/.gitignore b/gruel/src/scheme/gnuradio/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/mblock/.gitignore b/mblock/.gitignore
new file mode 100644 (file)
index 0000000..36b7774
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/mblock.pc
diff --git a/mblock/doc/.gitignore b/mblock/doc/.gitignore
new file mode 100644 (file)
index 0000000..f65ab6c
--- /dev/null
@@ -0,0 +1,18 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/howto-write-a-block.html
+/gr_block.h.xml
+/howto_1.i.xml
+/howto_square_ff.cc.xml
+/howto_square_ff.h.xml
+/qa_howto_1.py.xml
+/src_lib_Makefile_1.am.xml
+/src_lib_Makefile_2.am.xml
+/howto_square2_ff.cc.xml
+/howto_square2_ff.h.xml
diff --git a/mblock/src/.gitignore b/mblock/src/.gitignore
new file mode 100644 (file)
index 0000000..bb3f277
--- /dev/null
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/howto.cc
+/howto.py
diff --git a/mblock/src/include/.gitignore b/mblock/src/include/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/mblock/src/include/mblock/.gitignore b/mblock/src/include/mblock/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/mblock/src/lib/.gitignore b/mblock/src/lib/.gitignore
new file mode 100644 (file)
index 0000000..b2a2f45
--- /dev/null
@@ -0,0 +1,12 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/test_mblock
+/qa_bitset_mbh.cc
+/benchmark_send
+/getres
diff --git a/mblock/src/scheme/.gitignore b/mblock/src/scheme/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/mblock/src/scheme/gnuradio/.gitignore b/mblock/src/scheme/gnuradio/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/omnithread/.gitignore b/omnithread/.gitignore
new file mode 100644 (file)
index 0000000..5a51e3b
--- /dev/null
@@ -0,0 +1,9 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/gnuradio-omnithread.pc
diff --git a/omnithread/gnuradio/.gitignore b/omnithread/gnuradio/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/.gitignore b/usrp/.gitignore
new file mode 100644 (file)
index 0000000..4af69af
--- /dev/null
@@ -0,0 +1,31 @@
+/*.cache
+/*.la
+/*.lo
+/*.pc
+/.deps
+/.la
+/.libs
+/.lo
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/config.cache
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/install-sh
+/ltmain.sh
+/libtool
+/ltmain.sh
+/make.log
+/missing
+/missing
+/stamp-h
+/py-compile
+/stamp-h.in
+/stamp-h1
+/usrp.iss
diff --git a/usrp/doc/.gitignore b/usrp/doc/.gitignore
new file mode 100644 (file)
index 0000000..fdf7036
--- /dev/null
@@ -0,0 +1,14 @@
+/Makefile
+/Makefile.in
+/html
+/latex
+/man
+/Doxyfile
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/xml
+/usrp_guide.html
diff --git a/usrp/doc/other/.gitignore b/usrp/doc/other/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/firmware/.gitignore b/usrp/firmware/.gitignore
new file mode 100644 (file)
index 0000000..75bb241
--- /dev/null
@@ -0,0 +1,25 @@
+/Makefile
+/Makefile.in
+/aclocal.m4
+/configure
+/config.h.in
+/stamp-h.in
+/libtool
+/config.log
+/config.h
+/config.cache
+/config.status
+/missing
+/stamp-h
+/stamp-h1
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/missing
+/make.log
+/usrp.pc
diff --git a/usrp/firmware/include/.gitignore b/usrp/firmware/include/.gitignore
new file mode 100644 (file)
index 0000000..75bb241
--- /dev/null
@@ -0,0 +1,25 @@
+/Makefile
+/Makefile.in
+/aclocal.m4
+/configure
+/config.h.in
+/stamp-h.in
+/libtool
+/config.log
+/config.h
+/config.cache
+/config.status
+/missing
+/stamp-h
+/stamp-h1
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/autom4te.cache
+/*.cache
+/missing
+/make.log
+/usrp.pc
diff --git a/usrp/firmware/lib/.gitignore b/usrp/firmware/lib/.gitignore
new file mode 100644 (file)
index 0000000..04f2532
--- /dev/null
@@ -0,0 +1,18 @@
+/*.ihx
+/*.lnk
+/*.lst
+/*.map
+/*.mem
+/*.rel
+/*.rst
+/*.sym
+/blink_leds.asm
+/usrp_common.asm
+/command_loop.asm
+/fpga.asm
+/*.asm
+/usrp_gpif.c
+/usrp_gpif_inline.h
+/*.lib
+/Makefile
+/Makefile.in
diff --git a/usrp/firmware/src/.gitignore b/usrp/firmware/src/.gitignore
new file mode 100644 (file)
index 0000000..d46c52c
--- /dev/null
@@ -0,0 +1,17 @@
+/*.ihx
+/*.lnk
+/*.lst
+/*.map
+/*.mem
+/*.rel
+/*.rst
+/*.sym
+/blink_leds.asm
+/usrp_common.asm
+/command_loop.asm
+/fpga.asm
+/*.asm
+/usrp_gpif.c
+/usrp_gpif_inline.h
+/Makefile
+/Makefile.in
diff --git a/usrp/firmware/src/common/.gitignore b/usrp/firmware/src/common/.gitignore
new file mode 100644 (file)
index 0000000..d46c52c
--- /dev/null
@@ -0,0 +1,17 @@
+/*.ihx
+/*.lnk
+/*.lst
+/*.map
+/*.mem
+/*.rel
+/*.rst
+/*.sym
+/blink_leds.asm
+/usrp_common.asm
+/command_loop.asm
+/fpga.asm
+/*.asm
+/usrp_gpif.c
+/usrp_gpif_inline.h
+/Makefile
+/Makefile.in
diff --git a/usrp/firmware/src/usrp2/.gitignore b/usrp/firmware/src/usrp2/.gitignore
new file mode 100644 (file)
index 0000000..54a9e94
--- /dev/null
@@ -0,0 +1,20 @@
+/*.ihx
+/*.lnk
+/*.lst
+/*.map
+/*.mem
+/*.rel
+/*.rst
+/*.sym
+/blink_leds.asm
+/usrp_common.asm
+/command_loop.asm
+/fpga.asm
+/*.asm
+/Makefile
+/Makefile.in
+/usrp_gpif.c
+/usrp_gpif_inline.h
+/Makefile.in
+/burn-usrp2-eeprom
+/burn-usrp4-eeprom
diff --git a/usrp/fpga/.gitignore b/usrp/fpga/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/fpga/megacells/.gitignore b/usrp/fpga/megacells/.gitignore
new file mode 100644 (file)
index 0000000..c2de89b
--- /dev/null
@@ -0,0 +1 @@
+/db
diff --git a/usrp/fpga/rbf/.gitignore b/usrp/fpga/rbf/.gitignore
new file mode 100644 (file)
index 0000000..eb58a95
--- /dev/null
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/usrp_fpga_rev1.rbf
+/usrp_fpga_rev2.rbf
diff --git a/usrp/fpga/rbf/rev2/.gitignore b/usrp/fpga/rbf/rev2/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/fpga/rbf/rev4/.gitignore b/usrp/fpga/rbf/rev4/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/fpga/sdr_lib/.gitignore b/usrp/fpga/sdr_lib/.gitignore
new file mode 100644 (file)
index 0000000..e7fc78c
--- /dev/null
@@ -0,0 +1,2 @@
+/db
+/*.vcd
diff --git a/usrp/fpga/tb/.gitignore b/usrp/fpga/tb/.gitignore
new file mode 100644 (file)
index 0000000..6bc85aa
--- /dev/null
@@ -0,0 +1,3 @@
+/*.vcd
+/*.out
+/fullchip_tb
diff --git a/usrp/fpga/toplevel/mrfm/.gitignore b/usrp/fpga/toplevel/mrfm/.gitignore
new file mode 100644 (file)
index 0000000..fe06aad
--- /dev/null
@@ -0,0 +1,17 @@
+/*.qws
+/*.eqn
+/*.done
+/*.htm
+/*.rpt
+/*.ini
+/*.fsf
+/*.jam
+/*.jbc
+/*.pin
+/*.pof
+/*.sof
+/*.rbf
+/*.ttf
+/*.summary
+/a.out
+/db
diff --git a/usrp/fpga/toplevel/sizetest/.gitignore b/usrp/fpga/toplevel/sizetest/.gitignore
new file mode 100644 (file)
index 0000000..201434d
--- /dev/null
@@ -0,0 +1,15 @@
+/*.qws
+/*.eqn
+/*.done
+/*.htm
+/*.rpt
+/*.ini
+/*.fsf
+/*.jam
+/*.jbc
+/*.pin
+/*.pof
+/*.sof
+/*.rbf
+/*.ttf
+/db
diff --git a/usrp/fpga/toplevel/usrp_inband_usb/.gitignore b/usrp/fpga/toplevel/usrp_inband_usb/.gitignore
new file mode 100644 (file)
index 0000000..2cc25f0
--- /dev/null
@@ -0,0 +1,16 @@
+/*.qws
+/*.eqn
+/*.done
+/*.htm
+/*.rpt
+/*.ini
+/*.fsf
+/*.jam
+/*.jbc
+/*.pin
+/*.pof
+/*.sof
+/*.rbf
+/*.ttf
+/*.summary
+/db
diff --git a/usrp/fpga/toplevel/usrp_multi/.gitignore b/usrp/fpga/toplevel/usrp_multi/.gitignore
new file mode 100644 (file)
index 0000000..2cc25f0
--- /dev/null
@@ -0,0 +1,16 @@
+/*.qws
+/*.eqn
+/*.done
+/*.htm
+/*.rpt
+/*.ini
+/*.fsf
+/*.jam
+/*.jbc
+/*.pin
+/*.pof
+/*.sof
+/*.rbf
+/*.ttf
+/*.summary
+/db
diff --git a/usrp/fpga/toplevel/usrp_std/.gitignore b/usrp/fpga/toplevel/usrp_std/.gitignore
new file mode 100644 (file)
index 0000000..31d6ea9
--- /dev/null
@@ -0,0 +1,17 @@
+/*.qws
+/*.eqn
+/*.done
+/*.htm
+/*.rpt
+/*.ini
+/*.fsf
+/*.jam
+/*.jbc
+/*.pin
+/*.pof
+/*.sof
+/*.rbf
+/*.ttf
+/*.summary
+/prev*
+/db
diff --git a/usrp/host/.gitignore b/usrp/host/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/usrp/host/apps/.gitignore b/usrp/host/apps/.gitignore
new file mode 100644 (file)
index 0000000..16fdf27
--- /dev/null
@@ -0,0 +1,27 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.dat
+/usrper
+/usrper2
+/test_input
+/test_fusb
+/test_usrp
+/test_usrp0
+/test_usrp_standard_rx
+/test_usrp_standard_tx
+/test_usrp_inband_timestamps
+/test_usrp_inband_registers
+/test_usrp_inband_rx
+/test_usrp_inband_tx
+/test_usrp_basic_rx
+/check_order_quickly
+/usrp_cal_dc_offset
+/test_usrp_inband_cs
+/read_packets
+/test_usrp_inband_ping
diff --git a/usrp/host/include/.gitignore b/usrp/host/include/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/host/include/usrp/.gitignore b/usrp/host/include/usrp/.gitignore
new file mode 100644 (file)
index 0000000..25b2cae
--- /dev/null
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/usrp_dbid.h
diff --git a/usrp/host/lib/.gitignore b/usrp/host/lib/.gitignore
new file mode 100644 (file)
index 0000000..e0e4208
--- /dev/null
@@ -0,0 +1,14 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/test_fusb
+/std_paths.h
+/usrp_dbid.py
+/usrp_dbid.h
+/usrp_dbid.cc
+/stamp-*
diff --git a/usrp/host/misc/.gitignore b/usrp/host/misc/.gitignore
new file mode 100644 (file)
index 0000000..a02b6ff
--- /dev/null
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/usrp/host/swig/.gitignore b/usrp/host/swig/.gitignore
new file mode 100644 (file)
index 0000000..3a08165
--- /dev/null
@@ -0,0 +1,14 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/gnuradio_swig_python.cc
+/gnuradio_swig_python.py
+/usrp_prims.cc
+/usrp_prims.py
+/prims.cc
+/prims.py
diff --git a/usrp/limbo/apps-inband/.gitignore b/usrp/limbo/apps-inband/.gitignore
new file mode 100644 (file)
index 0000000..f62d9e1
--- /dev/null
@@ -0,0 +1,35 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.dat
+/.*.swp
+/usrper
+/usrper2
+/test_input
+/test_fusb
+/test_usrp
+/test_usrp0
+/test_usrp_standard_rx
+/test_usrp_standard_tx
+/test_usrp_standard_2tx
+/test_usrp_inband_timestamps
+/test_usrp_inband_registers
+/test_usrp_inband_rx
+/test_usrp_inband_2rx
+/test_usrp_inband_tx
+/test_usrp_inband_2tx
+/test_usrp_basic_rx
+/check_order_quickly
+/usrp_cal_dc_offset
+/test_usrp_inband_cs
+/read_packets
+/test_usrp_inband_ping
+/test_usrp_inband_underrun
+/test_usrp_inband_overrun
+/gmac_mbh.cc
+/test_gmac_tx
diff --git a/usrp/limbo/inband/.gitignore b/usrp/limbo/inband/.gitignore
new file mode 100644 (file)
index 0000000..a228dcd
--- /dev/null
@@ -0,0 +1,20 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.swp
+/*.dat
+/test_fusb
+/std_paths.h
+/usrp_dbid.py
+/usrp_dbid.h
+/usrp_dbid.cc
+/usrp_server_mbh.cc
+/test_inband
+/test_usrp_inband
+/test_usrp_tx
+/*_mbh.cc
diff --git a/usrp2/.gitignore b/usrp2/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp2/firmware/.gitignore b/usrp2/firmware/.gitignore
new file mode 100644 (file)
index 0000000..2381f13
--- /dev/null
@@ -0,0 +1,40 @@
+/*-stamp
+/*.a
+/*.bin
+/*.dump
+/*.log
+/*.rom
+/.deps
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/blink_leds
+/blink_leds2
+/build
+/compile
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/eth_test
+/gen_eth_packets
+/ibs_rx_test
+/ibs_tx_test
+/install-sh
+/libtool
+/ltmain.sh
+/missing
+/py-compile
+/rcv_eth_packets
+/run_tests.sh
+/stamp-h1
+/test1
+/test_phy_comm
+/timer_test
+/buf_ram_test
+/buf_ram_zero
+/hello
+/configure.lineno
diff --git a/usrp2/firmware/apps/.gitignore b/usrp2/firmware/apps/.gitignore
new file mode 100644 (file)
index 0000000..b8ab0dc
--- /dev/null
@@ -0,0 +1,77 @@
+/*-stamp
+/*.a
+/*.bin
+/*.dump
+/*.log
+/*.rom
+/*.map
+/.deps
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/blink_leds
+/blink_leds2
+/build
+/compile
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/echo
+/eth_test
+/gen_eth_packets
+/ibs_rx_test
+/ibs_tx_test
+/install-sh
+/libtool
+/ltmain.sh
+/missing
+/py-compile
+/rcv_eth_packets
+/run_tests.sh
+/stamp-h1
+/test1
+/test_phy_comm
+/timer_test
+/buf_ram_test
+/buf_ram_zero
+/hello
+/test_printf
+/test_spi
+/test_i2c
+/gen_pause_frames
+/test_serdes
+/rx_only
+/tx_only
+/tx_standalone
+/tx_drop
+/tx_drop2
+/tx_drop_rate_limited
+/test_lsdac
+/test_lsadc
+/read_dbids
+/test_db_spi
+/ramp_lsdac
+/eth_to_serdes
+/serdes_to_dsp
+/sd_gentest
+/sd_bounce
+/can_i_sub
+/tx_only_v2
+/rx_only_v2
+/txrx
+/eth_serdes
+/serdes_txrx
+/set_hw_rev
+/test_sd
+/factory_test
+/test_ram
+/mimo_tx
+/mimo_tx_slave
+/burn_dbsrx_eeprom
+/burnrev30
+/burnrev31
+/burnrev40
diff --git a/usrp2/firmware/config/.gitignore b/usrp2/firmware/config/.gitignore
new file mode 100644 (file)
index 0000000..b11bb11
--- /dev/null
@@ -0,0 +1,20 @@
+/configure
+/Makefile.in
+/config.log
+/config.h
+/ltmain.sh
+/Makefile
+/config.status
+/stamp-h1
+/config.h.in
+/autom4te.cache
+/libtool
+/missing
+/aclocal.m4
+/install-sh
+/depcomp
+/py-compile
+/compile
+/build
+/run_tests.sh
+/*-stamp
diff --git a/usrp2/firmware/include/.gitignore b/usrp2/firmware/include/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp2/firmware/lib/.gitignore b/usrp2/firmware/lib/.gitignore
new file mode 100644 (file)
index 0000000..f1cc2bf
--- /dev/null
@@ -0,0 +1,39 @@
+/*-stamp
+/*.a
+/*.bin
+/*.dump
+/*.log
+/*.rom
+/.deps
+/Makefile
+/Makefile.in
+/aclocal.m4
+/autom4te.cache
+/blink_leds
+/blink_leds2
+/build
+/compile
+/config.h
+/config.h.in
+/config.log
+/config.status
+/configure
+/depcomp
+/eth_test
+/gen_eth_packets
+/ibs_rx_test
+/ibs_tx_test
+/install-sh
+/libtool
+/ltmain.sh
+/missing
+/py-compile
+/rcv_eth_packets
+/run_tests.sh
+/stamp-h1
+/test1
+/test_phy_comm
+/timer_test
+/buf_ram_test
+/buf_ram_zero
+/hello
diff --git a/usrp2/fpga/boot_cpld/.gitignore b/usrp2/fpga/boot_cpld/.gitignore
new file mode 100644 (file)
index 0000000..45cf9a8
--- /dev/null
@@ -0,0 +1,38 @@
+/*_xdb
+/*.restore
+/*.xrpt
+/*.zip
+/xst
+/_ngo
+/_xmsgs
+/*.log
+/*.stx
+/*.tspec
+/*.xml
+/*.gyd
+/*.ngr
+/*.tim
+/*.err
+/*.lso
+/*.bld
+/*.cmd_log
+/*.ise_ISE_Backup
+/*.ipf_ISE_Backup
+/*.mfd
+/*.vm6
+/*.syr
+/*.xst
+/*.csv
+/*.html
+/*.jed
+/*.pad
+/*.ng*
+/*.pnx
+/*.rpt
+/*.prj
+/*_html
+/*.cel
+/_pace.ucf
+/*.lock
+/*.tfi
+/templates
diff --git a/usrp2/fpga/control_lib/.gitignore b/usrp2/fpga/control_lib/.gitignore
new file mode 100644 (file)
index 0000000..025385c
--- /dev/null
@@ -0,0 +1,5 @@
+/a.out
+/*.vcd
+/*.lxt
+/*.sav
+/*.log
diff --git a/usrp2/fpga/coregen/.gitignore b/usrp2/fpga/coregen/.gitignore
new file mode 100644 (file)
index 0000000..956cab5
--- /dev/null
@@ -0,0 +1,3 @@
+/xlnx_auto*
+/*log
+/tmp
diff --git a/usrp2/fpga/eth/bench/verilog/.gitignore b/usrp2/fpga/eth/bench/verilog/.gitignore
new file mode 100644 (file)
index 0000000..86fc44f
--- /dev/null
@@ -0,0 +1,4 @@
+/a.out
+/*.vcd
+/*.sav
+/*.lxt
diff --git a/usrp2/fpga/extram/.gitignore b/usrp2/fpga/extram/.gitignore
new file mode 100644 (file)
index 0000000..7fc71cc
--- /dev/null
@@ -0,0 +1 @@
+/a.out
diff --git a/usrp2/fpga/opencores/8b10b/.gitignore b/usrp2/fpga/opencores/8b10b/.gitignore
new file mode 100644 (file)
index 0000000..548539d
--- /dev/null
@@ -0,0 +1,2 @@
+/dump.vcd
+/a.out
diff --git a/usrp2/fpga/opencores/aemb/CVS/.gitignore b/usrp2/fpga/opencores/aemb/CVS/.gitignore
new file mode 100644 (file)
index 0000000..b693d7c
--- /dev/null
@@ -0,0 +1 @@
+/Entries.Log
diff --git a/usrp2/fpga/opencores/aemb/rtl/verilog/.gitignore b/usrp2/fpga/opencores/aemb/rtl/verilog/.gitignore
new file mode 100644 (file)
index 0000000..6b09f5c
--- /dev/null
@@ -0,0 +1 @@
+/aeMB2*
diff --git a/usrp2/fpga/opencores/aemb/sim/.gitignore b/usrp2/fpga/opencores/aemb/sim/.gitignore
new file mode 100644 (file)
index 0000000..4ef5da5
--- /dev/null
@@ -0,0 +1,4 @@
+/*.bin
+/*.dump
+/*.vcd
+/*.rom
diff --git a/usrp2/fpga/opencores/ethernet_tri_mode/.gitignore b/usrp2/fpga/opencores/ethernet_tri_mode/.gitignore
new file mode 100644 (file)
index 0000000..ae16097
--- /dev/null
@@ -0,0 +1,2 @@
+/verilog.log
+/a.out
diff --git a/usrp2/fpga/sdr_lib/.gitignore b/usrp2/fpga/sdr_lib/.gitignore
new file mode 100644 (file)
index 0000000..3c782d5
--- /dev/null
@@ -0,0 +1,3 @@
+/a.out
+/db
+/*.vcd
diff --git a/usrp2/fpga/simple_gemac/.gitignore b/usrp2/fpga/simple_gemac/.gitignore
new file mode 100644 (file)
index 0000000..61e120c
--- /dev/null
@@ -0,0 +1,3 @@
+/a.out
+/*~
+/*.vcd
diff --git a/usrp2/fpga/testbench/.gitignore b/usrp2/fpga/testbench/.gitignore
new file mode 100644 (file)
index 0000000..eedcf96
--- /dev/null
@@ -0,0 +1,5 @@
+/single_u2_sim
+/dual_u2_sim
+/*.lxt
+/*.vcd
+/*.sav
diff --git a/usrp2/fpga/timing/.gitignore b/usrp2/fpga/timing/.gitignore
new file mode 100644 (file)
index 0000000..515552f
--- /dev/null
@@ -0,0 +1,2 @@
+/a.out
+/*.vcd
diff --git a/usrp2/fpga/top/.gitignore b/usrp2/fpga/top/.gitignore
new file mode 100644 (file)
index 0000000..bf1b770
--- /dev/null
@@ -0,0 +1 @@
+/*.sav
diff --git a/usrp2/fpga/top/eth_test/.gitignore b/usrp2/fpga/top/eth_test/.gitignore
new file mode 100644 (file)
index 0000000..b303970
--- /dev/null
@@ -0,0 +1,43 @@
+/xst
+/_ngo
+/_xmsgs
+/*.stx
+/*.tspec
+/*.xml
+/*.gyd
+/*.ngr
+/*.tim
+/*.err
+/*.lso
+/*.bld
+/*.cmd_log
+/*.ise_ISE_Backup
+/*.mfd
+/*.vm6
+/*.syr
+/*.xst
+/*.csv
+/*.html
+/*.jed
+/*.pad
+/*.ng*
+/*.pnx
+/*.rpt
+/*.prj
+/*_html
+/*_log
+/*.lfp
+/*.bit
+/*.bin
+/*.vcd
+/*.unroutes
+/*.drc
+/*_map.*
+/*_guide.*
+/*.twr
+/*.twx
+/a.out
+/*.xpi
+/*_pad.txt
+/*.bgn
+/*.par
diff --git a/usrp2/fpga/top/u2_core/.gitignore b/usrp2/fpga/top/u2_core/.gitignore
new file mode 100644 (file)
index 0000000..b303970
--- /dev/null
@@ -0,0 +1,43 @@
+/xst
+/_ngo
+/_xmsgs
+/*.stx
+/*.tspec
+/*.xml
+/*.gyd
+/*.ngr
+/*.tim
+/*.err
+/*.lso
+/*.bld
+/*.cmd_log
+/*.ise_ISE_Backup
+/*.mfd
+/*.vm6
+/*.syr
+/*.xst
+/*.csv
+/*.html
+/*.jed
+/*.pad
+/*.ng*
+/*.pnx
+/*.rpt
+/*.prj
+/*_html
+/*_log
+/*.lfp
+/*.bit
+/*.bin
+/*.vcd
+/*.unroutes
+/*.drc
+/*_map.*
+/*_guide.*
+/*.twr
+/*.twx
+/a.out
+/*.xpi
+/*_pad.txt
+/*.bgn
+/*.par
diff --git a/usrp2/fpga/top/u2_fpga/.gitignore b/usrp2/fpga/top/u2_fpga/.gitignore
new file mode 100644 (file)
index 0000000..de5b502
--- /dev/null
@@ -0,0 +1,52 @@
+/templates
+/netgen
+/_ngo
+/_xmsgs
+/_pace.ucf
+/*.cmd
+/*.ibs
+/*.lfp
+/*.mfp
+/*.bit
+/*.bin
+/*.stx
+/*.par
+/*.unroutes
+/*.ntrc_log
+/*.ngr
+/*.mrp
+/*.html
+/*.lso
+/*.twr
+/*.bld
+/*.ncd
+/*.txt
+/*.cmd_log
+/*.drc
+/*.map
+/*.twr
+/*.xml
+/*.syr
+/*.ngm
+/*.xst
+/*.csv
+/*.html
+/*.lock
+/*.ncd
+/*.twx
+/*.ise_ISE_Backup
+/*.xml
+/*.ut
+/*.xpi
+/*.ngd
+/*.ncd
+/*.pad
+/*.bgn
+/*.ngc
+/*.pcf
+/*.ngd
+/xst
+/*.log
+/*.rpt
+/*.cel
+/*.restore
diff --git a/usrp2/fpga/top/u2_rev2/.gitignore b/usrp2/fpga/top/u2_rev2/.gitignore
new file mode 100644 (file)
index 0000000..432f8fd
--- /dev/null
@@ -0,0 +1,57 @@
+/*.ptwx
+/*.xrpt
+/*.zip
+/*_xdb
+/templates
+/netgen
+/_ngo
+/_xmsgs
+/_pace.ucf
+/*.cmd
+/*.ibs
+/*.lfp
+/*.mfp
+/*.bit
+/*.bin
+/*.stx
+/*.par
+/*.unroutes
+/*.ntrc_log
+/*.ngr
+/*.mrp
+/*.html
+/*.lso
+/*.twr
+/*.bld
+/*.ncd
+/*.txt
+/*.cmd_log
+/*.drc
+/*.map
+/*.twr
+/*.xml
+/*.syr
+/*.ngm
+/*.xst
+/*.csv
+/*.html
+/*.lock
+/*.ncd
+/*.twx
+/*.ise_ISE_Backup
+/*.xml
+/*.ut
+/*.xpi
+/*.ngd
+/*.ncd
+/*.pad
+/*.bgn
+/*.ngc
+/*.pcf
+/*.ngd
+/xst
+/*.log
+/*.rpt
+/*.cel
+/*.restore
+/build
diff --git a/usrp2/fpga/top/u2_rev3/.gitignore b/usrp2/fpga/top/u2_rev3/.gitignore
new file mode 100644 (file)
index 0000000..432f8fd
--- /dev/null
@@ -0,0 +1,57 @@
+/*.ptwx
+/*.xrpt
+/*.zip
+/*_xdb
+/templates
+/netgen
+/_ngo
+/_xmsgs
+/_pace.ucf
+/*.cmd
+/*.ibs
+/*.lfp
+/*.mfp
+/*.bit
+/*.bin
+/*.stx
+/*.par
+/*.unroutes
+/*.ntrc_log
+/*.ngr
+/*.mrp
+/*.html
+/*.lso
+/*.twr
+/*.bld
+/*.ncd
+/*.txt
+/*.cmd_log
+/*.drc
+/*.map
+/*.twr
+/*.xml
+/*.syr
+/*.ngm
+/*.xst
+/*.csv
+/*.html
+/*.lock
+/*.ncd
+/*.twx
+/*.ise_ISE_Backup
+/*.xml
+/*.ut
+/*.xpi
+/*.ngd
+/*.ncd
+/*.pad
+/*.bgn
+/*.ngc
+/*.pcf
+/*.ngd
+/xst
+/*.log
+/*.rpt
+/*.cel
+/*.restore
+/build
diff --git a/usrp2/fpga/top/u2_rev3_iad/.gitignore b/usrp2/fpga/top/u2_rev3_iad/.gitignore
new file mode 100644 (file)
index 0000000..e4daaf1
--- /dev/null
@@ -0,0 +1,4 @@
+/build
+/*.vcd
+/dsp_core_tb
+/*.dat
diff --git a/usrp2/host/.gitignore b/usrp2/host/.gitignore
new file mode 100644 (file)
index 0000000..605b6fe
--- /dev/null
@@ -0,0 +1,20 @@
+/configure
+/Makefile.in
+/config.log
+/config.status
+/config.guess
+/stamp-h1
+/config.h
+/ltmain.sh
+/config.sub
+/config.h.in
+/libtool
+/autom4te.cache
+/missing
+/aclocal.m4
+/Makefile
+/install-sh
+/depcomp
+/usrp2*.tar.gz
+/py-compile
+/usrp2.pc
diff --git a/usrp2/host/apps/.gitignore b/usrp2/host/apps/.gitignore
new file mode 100644 (file)
index 0000000..4b66ac0
--- /dev/null
@@ -0,0 +1,16 @@
+/Makefile
+/Makefile.in
+/.libs
+/.deps
+/test_eth
+/test_usrp2
+/gen_const
+/find_usrps
+/cerr
+/*.sh
+/tx_samples
+/rx_streaming_samples
+/u2_burn_mac_addr
+/usrp2_burn_mac_addr
+/test_mimo_tx
+/gpio
diff --git a/usrp2/host/include/.gitignore b/usrp2/host/include/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp2/host/include/usrp2/.gitignore b/usrp2/host/include/usrp2/.gitignore
new file mode 100644 (file)
index 0000000..b336cc7
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp2/host/lib/.gitignore b/usrp2/host/lib/.gitignore
new file mode 100644 (file)
index 0000000..8f5500b
--- /dev/null
@@ -0,0 +1,5 @@
+/.libs
+/.deps
+/Makefile
+/Makefile.in
+/usrp2_socket_opener