summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore20
-rw-r--r--config/.gitignore15
-rw-r--r--config/grc_gnuradio_examples.m41
-rw-r--r--debian/.gitignore2
-rw-r--r--docs/.gitignore2
-rw-r--r--docs/doxygen/.gitignore13
-rw-r--r--docs/doxygen/other/.gitignore8
-rw-r--r--docs/doxygen/xml-swig/.gitignore16
-rw-r--r--docs/exploring-gnuradio/.gitignore1
-rw-r--r--docs/howto-write-a-block/.gitignore1
-rw-r--r--gcell/.gitignore10
-rw-r--r--gcell/apps/.gitignore12
-rw-r--r--gcell/apps/spu/.gitignore8
-rw-r--r--gcell/ibm/.gitignore8
-rw-r--r--gcell/include/.gitignore8
-rw-r--r--gcell/include/gcell/.gitignore2
-rw-r--r--gcell/include/gcell/spu/.gitignore8
-rw-r--r--gcell/lib/.gitignore8
-rw-r--r--gcell/lib/general/.gitignore8
-rw-r--r--gcell/lib/general/spu/.gitignore8
-rw-r--r--gcell/lib/runtime/.gitignore8
-rw-r--r--gcell/lib/runtime/spu/.gitignore10
-rw-r--r--gcell/lib/spu/.gitignore11
-rw-r--r--gcell/lib/wrapper/.gitignore8
-rw-r--r--gcell/lib/wrapper/spu/.gitignore8
-rw-r--r--gnuradio-core/.gitignore32
-rw-r--r--gnuradio-core/src/.gitignore8
-rw-r--r--gnuradio-core/src/gen_interpolator_taps/.gitignore7
-rw-r--r--gnuradio-core/src/lib/.gitignore9
-rw-r--r--gnuradio-core/src/lib/filter/.gitignore214
-rw-r--r--gnuradio-core/src/lib/filter/Makefile.am16
-rw-r--r--gnuradio-core/src/lib/filter/filter.i13
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc196
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h158
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.i41
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc150
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h144
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i38
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.cc174
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h148
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.i41
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc142
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h129
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.i39
-rw-r--r--gnuradio-core/src/lib/g72x/.gitignore8
-rw-r--r--gnuradio-core/src/lib/general/.gitignore323
-rw-r--r--gnuradio-core/src/lib/gengen/.gitignore418
-rw-r--r--gnuradio-core/src/lib/hier/.gitignore4
-rw-r--r--gnuradio-core/src/lib/io/.gitignore8
-rw-r--r--gnuradio-core/src/lib/missing/.gitignore8
-rw-r--r--gnuradio-core/src/lib/reed-solomon/.gitignore9
-rw-r--r--gnuradio-core/src/lib/runtime/.gitignore8
-rw-r--r--gnuradio-core/src/lib/runtime/Makefile.am2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_basic_block.cc3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_basic_block.h4
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block_detail.cc7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block_detail.h6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_msg_accepter.cc59
-rw-r--r--gnuradio-core/src/lib/runtime/gr_msg_accepter.h42
-rw-r--r--gnuradio-core/src/lib/runtime/gr_tpb_detail.cc45
-rw-r--r--gnuradio-core/src/lib/runtime/gr_tpb_detail.h26
-rw-r--r--gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc42
-rw-r--r--gnuradio-core/src/lib/swig/.gitignore36
-rw-r--r--gnuradio-core/src/lib/viterbi/.gitignore6
-rw-r--r--gnuradio-core/src/python/.gitignore8
-rw-r--r--gnuradio-core/src/python/bin/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2/.gitignore3
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am4
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py50
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py57
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/pfb_decimator.py49
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/pfb_interpolator.py49
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/.gitignore9
-rw-r--r--gnuradio-core/src/python/gnuradio/gru/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/gruimpl/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/vocoder/.gitignore2
-rw-r--r--gnuradio-core/src/tests/.gitignore28
-rw-r--r--gnuradio-core/src/utils/.gitignore8
-rw-r--r--gnuradio-examples/.gitignore25
-rw-r--r--gnuradio-examples/c++/.gitignore5
-rw-r--r--gnuradio-examples/c++/dial_tone/.gitignore5
-rw-r--r--gnuradio-examples/python/.gitignore10
-rw-r--r--gnuradio-examples/python/Makefile.am1
-rw-r--r--gnuradio-examples/python/apps/.gitignore2
-rw-r--r--gnuradio-examples/python/apps/hf_explorer/.gitignore3
-rw-r--r--gnuradio-examples/python/apps/hf_radio/.gitignore3
-rw-r--r--gnuradio-examples/python/audio/.gitignore10
-rw-r--r--gnuradio-examples/python/digital-bert/.gitignore2
-rw-r--r--gnuradio-examples/python/digital/.gitignore11
-rw-r--r--gnuradio-examples/python/digital_voice/.gitignore10
-rw-r--r--gnuradio-examples/python/mp-sched/.gitignore10
-rw-r--r--gnuradio-examples/python/multi-antenna/.gitignore11
-rw-r--r--gnuradio-examples/python/multi_usrp/.gitignore10
-rw-r--r--gnuradio-examples/python/network/.gitignore2
-rw-r--r--gnuradio-examples/python/ofdm/.gitignore4
-rw-r--r--gnuradio-examples/python/pfb/.gitignore2
-rw-r--r--gnuradio-examples/python/pfb/Makefile.am31
-rwxr-xr-xgnuradio-examples/python/pfb/channelize.py177
-rwxr-xr-xgnuradio-examples/python/pfb/chirp_channelize.py192
-rwxr-xr-xgnuradio-examples/python/pfb/decimate.py171
-rwxr-xr-xgnuradio-examples/python/pfb/fmtest.py197
-rwxr-xr-xgnuradio-examples/python/pfb/interpolate.py226
-rw-r--r--gnuradio-examples/python/usrp/.gitignore10
-rw-r--r--gnuradio-examples/python/usrp2/.gitignore2
-rw-r--r--gr-atsc/.gitignore23
-rw-r--r--gr-atsc/doc/.gitignore10
-rw-r--r--gr-atsc/src/.gitignore10
-rw-r--r--gr-atsc/src/lib/.gitignore14
-rw-r--r--gr-atsc/src/python/.gitignore9
-rw-r--r--gr-audio-alsa/.gitignore30
-rw-r--r--gr-audio-alsa/src/.gitignore16
-rw-r--r--gr-audio-jack/.gitignore30
-rw-r--r--gr-audio-jack/src/.gitignore12
-rw-r--r--gr-audio-oss/.gitignore30
-rw-r--r--gr-audio-oss/src/.gitignore14
-rw-r--r--gr-audio-osx/.gitignore30
-rw-r--r--gr-audio-osx/src/.gitignore13
-rw-r--r--gr-audio-portaudio/.gitignore32
-rw-r--r--gr-audio-portaudio/src/.gitignore17
-rw-r--r--gr-audio-windows/.gitignore32
-rw-r--r--gr-audio-windows/src/.gitignore35
-rw-r--r--gr-comedi/.gitignore32
-rw-r--r--gr-comedi/src/.gitignore12
-rw-r--r--gr-cvsd-vocoder/.gitignore3
-rw-r--r--gr-cvsd-vocoder/src/.gitignore2
-rw-r--r--gr-cvsd-vocoder/src/lib/.gitignore6
-rw-r--r--gr-cvsd-vocoder/src/python/.gitignore3
-rw-r--r--gr-gcell/.gitignore32
-rw-r--r--gr-gcell/src/.gitignore36
-rw-r--r--gr-gcell/src/examples/.gitignore32
-rw-r--r--gr-gpio/.gitignore2
-rw-r--r--gr-gpio/src/.gitignore2
-rw-r--r--gr-gpio/src/fpga/.gitignore2
-rw-r--r--gr-gpio/src/fpga/include/.gitignore2
-rw-r--r--gr-gpio/src/fpga/lib/.gitignore2
-rw-r--r--gr-gpio/src/fpga/rbf/.gitignore2
-rw-r--r--gr-gpio/src/fpga/top/.gitignore11
-rw-r--r--gr-gpio/src/python/.gitignore4
-rw-r--r--gr-gsm-fr-vocoder/.gitignore23
-rw-r--r--gr-gsm-fr-vocoder/src/.gitignore10
-rw-r--r--gr-gsm-fr-vocoder/src/lib/.gitignore11
-rw-r--r--gr-gsm-fr-vocoder/src/lib/gsm/.gitignore8
-rw-r--r--gr-gsm-fr-vocoder/src/python/.gitignore9
-rw-r--r--gr-howto-write-a-block/.gitignore26
-rw-r--r--gr-howto-write-a-block/config/.gitignore15
-rw-r--r--gr-howto-write-a-block/doc/.gitignore18
-rw-r--r--gr-howto-write-a-block/src/.gitignore10
-rw-r--r--gr-howto-write-a-block/src/lib/.gitignore11
-rw-r--r--gr-howto-write-a-block/src/python/.gitignore9
-rw-r--r--gr-msdd6000/.gitignore3
-rw-r--r--gr-msdd6000/src/.gitignore6
-rw-r--r--gr-pager/.gitignore4
-rw-r--r--gr-pager/src/.gitignore8
-rw-r--r--gr-qtgui/.gitignore2
-rw-r--r--gr-qtgui/src/.gitignore2
-rw-r--r--gr-qtgui/src/lib/.gitignore13
-rw-r--r--gr-qtgui/src/lib/ConstellationDisplayPlot.cc35
-rw-r--r--gr-qtgui/src/lib/ConstellationDisplayPlot.h11
-rw-r--r--gr-qtgui/src/lib/FrequencyDisplayPlot.cc8
-rw-r--r--gr-qtgui/src/lib/FrequencyDisplayPlot.h2
-rw-r--r--gr-qtgui/src/lib/SpectrumGUIClass.cc6
-rw-r--r--gr-qtgui/src/lib/SpectrumGUIClass.h1
-rw-r--r--gr-qtgui/src/lib/TimeDomainDisplayPlot.cc13
-rw-r--r--gr-qtgui/src/lib/TimeDomainDisplayPlot.h3
-rw-r--r--gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc91
-rw-r--r--gr-qtgui/src/lib/Waterfall3DDisplayPlot.h29
-rw-r--r--gr-qtgui/src/lib/WaterfallDisplayPlot.cc149
-rw-r--r--gr-qtgui/src/lib/WaterfallDisplayPlot.h3
-rw-r--r--gr-qtgui/src/lib/qtgui.i2
-rw-r--r--gr-qtgui/src/lib/qtgui_sink_c.cc7
-rw-r--r--gr-qtgui/src/lib/qtgui_sink_c.h1
-rw-r--r--gr-qtgui/src/lib/qtgui_sink_f.cc7
-rw-r--r--gr-qtgui/src/lib/qtgui_sink_f.h1
-rw-r--r--gr-qtgui/src/lib/spectrumdisplayform.ccbin30549 -> 27362 bytes
-rw-r--r--gr-qtgui/src/lib/spectrumdisplayform.h3
-rw-r--r--gr-qtgui/src/lib/spectrumdisplayform.ui1388
-rw-r--r--gr-qtgui/src/python/.gitignore2
-rw-r--r--gr-radar-mono/.gitignore2
-rw-r--r--gr-radar-mono/doc/.gitignore2
-rw-r--r--gr-radar-mono/src/.gitignore2
-rw-r--r--gr-radar-mono/src/fpga/.gitignore2
-rw-r--r--gr-radar-mono/src/fpga/lib/.gitignore2
-rw-r--r--gr-radar-mono/src/fpga/models/.gitignore2
-rw-r--r--gr-radar-mono/src/fpga/tb/.gitignore6
-rw-r--r--gr-radar-mono/src/fpga/top/.gitignore21
-rw-r--r--gr-radar-mono/src/lib/.gitignore2
-rw-r--r--gr-radar-mono/src/python/.gitignore4
-rw-r--r--gr-radio-astronomy/.gitignore22
-rw-r--r--gr-radio-astronomy/src/.gitignore10
-rw-r--r--gr-radio-astronomy/src/lib/.gitignore13
-rw-r--r--gr-radio-astronomy/src/python/.gitignore9
-rw-r--r--gr-sounder/.gitignore2
-rw-r--r--gr-sounder/doc/.gitignore2
-rw-r--r--gr-sounder/src/.gitignore2
-rw-r--r--gr-sounder/src/fpga/.gitignore2
-rw-r--r--gr-sounder/src/fpga/lib/.gitignore2
-rw-r--r--gr-sounder/src/fpga/tb/.gitignore5
-rw-r--r--gr-sounder/src/fpga/top/.gitignore11
-rw-r--r--gr-sounder/src/lib/.gitignore2
-rw-r--r--gr-sounder/src/python/.gitignore5
-rw-r--r--gr-trellis/.gitignore23
-rw-r--r--gr-trellis/doc/.gitignore3
-rw-r--r--gr-trellis/src/.gitignore10
-rw-r--r--gr-trellis/src/examples/.gitignore10
-rw-r--r--gr-trellis/src/examples/fsm_files/.gitignore2
-rw-r--r--gr-trellis/src/lib/.gitignore99
-rw-r--r--gr-trellis/src/python/.gitignore9
-rw-r--r--gr-usrp/.gitignore30
-rw-r--r--gr-usrp/apps/.gitignore6
-rw-r--r--gr-usrp/src/.gitignore11
-rw-r--r--gr-usrp2/.gitignore3
-rw-r--r--gr-usrp2/src/.gitignore9
-rw-r--r--gr-utils/.gitignore2
-rw-r--r--gr-utils/src/.gitignore2
-rw-r--r--gr-utils/src/lib/.gitignore2
-rw-r--r--gr-utils/src/python/.gitignore3
-rwxr-xr-xgr-utils/src/python/gr_plot_const.py8
-rwxr-xr-xgr-utils/src/python/gr_plot_fft.py13
-rwxr-xr-xgr-utils/src/python/gr_plot_iq.py7
-rwxr-xr-xgr-utils/src/python/gr_plot_psd.py13
-rw-r--r--gr-utils/src/python/plot_data.py3
-rw-r--r--gr-video-sdl/.gitignore32
-rw-r--r--gr-video-sdl/src/.gitignore12
-rw-r--r--gr-wxgui/.gitignore30
-rw-r--r--gr-wxgui/src/.gitignore8
-rw-r--r--gr-wxgui/src/python/.gitignore8
-rw-r--r--gr-wxgui/src/python/forms/.gitignore1
-rw-r--r--gr-wxgui/src/python/plotter/.gitignore3
-rw-r--r--grc/.gitignore3
-rw-r--r--grc/base/.gitignore2
-rw-r--r--grc/blocks/.gitignore2
-rw-r--r--grc/examples/.gitignore2
-rw-r--r--grc/examples/audio/.gitignore2
-rw-r--r--grc/examples/simple/.gitignore2
-rw-r--r--grc/examples/trellis/.gitignore2
-rw-r--r--grc/examples/usrp/.gitignore2
-rw-r--r--grc/examples/xmlrpc/.gitignore2
-rw-r--r--grc/freedesktop/.gitignore3
-rw-r--r--grc/grc_gnuradio/.gitignore3
-rw-r--r--grc/gui/.gitignore2
-rw-r--r--grc/python/.gitignore2
-rw-r--r--grc/scripts/.gitignore2
-rw-r--r--gruel/.gitignore3
-rw-r--r--gruel/src/.gitignore2
-rw-r--r--gruel/src/include/.gitignore2
-rw-r--r--gruel/src/include/gruel/.gitignore4
-rw-r--r--gruel/src/include/gruel/Makefile.am1
-rw-r--r--gruel/src/include/gruel/msg_accepter.h13
-rw-r--r--gruel/src/include/gruel/msg_accepter_msgq.h3
-rw-r--r--gruel/src/include/gruel/pmt.h42
-rw-r--r--gruel/src/include/gruel/send.h49
-rw-r--r--gruel/src/lib/.gitignore4
-rw-r--r--gruel/src/lib/msg/.gitignore4
-rw-r--r--gruel/src/lib/pmt/.gitignore10
-rw-r--r--gruel/src/lib/pmt/pmt.cc224
-rw-r--r--gruel/src/lib/pmt/pmt_int.h25
-rw-r--r--gruel/src/lib/pmt/pmt_io.cc25
-rw-r--r--gruel/src/lib/pmt/qa_pmt_prims.cc86
-rw-r--r--gruel/src/lib/pmt/qa_pmt_prims.h2
-rw-r--r--gruel/src/scheme/.gitignore8
-rw-r--r--gruel/src/scheme/gnuradio/.gitignore8
-rw-r--r--mblock/.gitignore3
-rw-r--r--mblock/doc/.gitignore18
-rw-r--r--mblock/src/.gitignore10
-rw-r--r--mblock/src/include/.gitignore2
-rw-r--r--mblock/src/include/mblock/.gitignore2
-rw-r--r--mblock/src/lib/.gitignore12
-rw-r--r--mblock/src/scheme/.gitignore8
-rw-r--r--mblock/src/scheme/gnuradio/.gitignore8
-rw-r--r--omnithread/.gitignore9
-rw-r--r--omnithread/gnuradio/.gitignore2
-rw-r--r--usrp/.gitignore31
-rw-r--r--usrp/doc/.gitignore14
-rw-r--r--usrp/doc/other/.gitignore2
-rw-r--r--usrp/firmware/.gitignore25
-rw-r--r--usrp/firmware/include/.gitignore25
-rw-r--r--usrp/firmware/lib/.gitignore18
-rw-r--r--usrp/firmware/src/.gitignore17
-rw-r--r--usrp/firmware/src/common/.gitignore17
-rw-r--r--usrp/firmware/src/usrp2/.gitignore20
-rw-r--r--usrp/fpga/.gitignore2
-rw-r--r--usrp/fpga/megacells/.gitignore1
-rw-r--r--usrp/fpga/rbf/.gitignore4
-rw-r--r--usrp/fpga/rbf/rev2/.gitignore2
-rw-r--r--usrp/fpga/rbf/rev4/.gitignore2
-rw-r--r--usrp/fpga/sdr_lib/.gitignore2
-rw-r--r--usrp/fpga/tb/.gitignore3
-rw-r--r--usrp/fpga/toplevel/mrfm/.gitignore17
-rw-r--r--usrp/fpga/toplevel/sizetest/.gitignore15
-rw-r--r--usrp/fpga/toplevel/usrp_inband_usb/.gitignore16
-rw-r--r--usrp/fpga/toplevel/usrp_multi/.gitignore16
-rw-r--r--usrp/fpga/toplevel/usrp_std/.gitignore17
-rw-r--r--usrp/host/.gitignore8
-rw-r--r--usrp/host/apps/.gitignore27
-rw-r--r--usrp/host/include/.gitignore2
-rw-r--r--usrp/host/include/usrp/.gitignore3
-rw-r--r--usrp/host/lib/.gitignore14
-rw-r--r--usrp/host/misc/.gitignore8
-rw-r--r--usrp/host/swig/.gitignore14
-rw-r--r--usrp/limbo/apps-inband/.gitignore35
-rw-r--r--usrp/limbo/inband/.gitignore20
-rw-r--r--usrp2/.gitignore2
-rw-r--r--usrp2/firmware/.gitignore40
-rw-r--r--usrp2/firmware/apps/.gitignore77
-rw-r--r--usrp2/firmware/config/.gitignore20
-rw-r--r--usrp2/firmware/include/.gitignore2
-rw-r--r--usrp2/firmware/lib/.gitignore39
-rw-r--r--usrp2/fpga/boot_cpld/.gitignore38
-rw-r--r--usrp2/fpga/control_lib/.gitignore5
-rw-r--r--usrp2/fpga/coregen/.gitignore3
-rw-r--r--usrp2/fpga/eth/bench/verilog/.gitignore4
-rw-r--r--usrp2/fpga/extram/.gitignore1
-rw-r--r--usrp2/fpga/opencores/8b10b/.gitignore2
-rw-r--r--usrp2/fpga/opencores/aemb/CVS/.gitignore1
-rw-r--r--usrp2/fpga/opencores/aemb/rtl/verilog/.gitignore1
-rw-r--r--usrp2/fpga/opencores/aemb/sim/.gitignore4
-rw-r--r--usrp2/fpga/opencores/ethernet_tri_mode/.gitignore2
-rw-r--r--usrp2/fpga/sdr_lib/.gitignore3
-rw-r--r--usrp2/fpga/simple_gemac/.gitignore3
-rw-r--r--usrp2/fpga/testbench/.gitignore5
-rw-r--r--usrp2/fpga/timing/.gitignore2
-rw-r--r--usrp2/fpga/top/.gitignore1
-rw-r--r--usrp2/fpga/top/eth_test/.gitignore43
-rw-r--r--usrp2/fpga/top/u2_core/.gitignore43
-rw-r--r--usrp2/fpga/top/u2_fpga/.gitignore52
-rw-r--r--usrp2/fpga/top/u2_rev2/.gitignore57
-rw-r--r--usrp2/fpga/top/u2_rev3/.gitignore57
-rw-r--r--usrp2/fpga/top/u2_rev3_iad/.gitignore4
-rw-r--r--usrp2/host/.gitignore20
-rw-r--r--usrp2/host/apps/.gitignore16
-rw-r--r--usrp2/host/include/.gitignore2
-rw-r--r--usrp2/host/include/usrp2/.gitignore2
-rw-r--r--usrp2/host/lib/.gitignore5
335 files changed, 8155 insertions, 810 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..b11bb113a
--- /dev/null
+++ b/.gitignore
@@ -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
index 000000000..16f775e32
--- /dev/null
+++ b/config/.gitignore
@@ -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/config/grc_gnuradio_examples.m4 b/config/grc_gnuradio_examples.m4
index 7de55666d..3225f3ab5 100644
--- a/config/grc_gnuradio_examples.m4
+++ b/config/grc_gnuradio_examples.m4
@@ -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
index 000000000..ca163135c
--- /dev/null
+++ b/debian/.gitignore
@@ -0,0 +1,2 @@
+/changelog
+/*.log
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 000000000..9ee645401
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,2 @@
+/Makefile.in
+/Makefile
diff --git a/docs/doxygen/.gitignore b/docs/doxygen/.gitignore
new file mode 100644
index 000000000..f44627c9d
--- /dev/null
+++ b/docs/doxygen/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/docs/doxygen/other/.gitignore
@@ -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
index 000000000..4671390b0
--- /dev/null
+++ b/docs/doxygen/xml-swig/.gitignore
@@ -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
index 000000000..b6e6030ca
--- /dev/null
+++ b/docs/exploring-gnuradio/.gitignore
@@ -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
index 000000000..719ea5d4f
--- /dev/null
+++ b/docs/howto-write-a-block/.gitignore
@@ -0,0 +1 @@
+/howto-write-a-block.html
diff --git a/gcell/.gitignore b/gcell/.gitignore
new file mode 100644
index 000000000..a55308950
--- /dev/null
+++ b/gcell/.gitignore
@@ -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
index 000000000..b80e1a92c
--- /dev/null
+++ b/gcell/apps/.gitignore
@@ -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
index 000000000..c50e521a3
--- /dev/null
+++ b/gcell/apps/spu/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gcell/ibm/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gcell/include/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gcell/include/gcell/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gcell/include/gcell/spu/.gitignore
@@ -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
index 000000000..3531485fb
--- /dev/null
+++ b/gcell/lib/.gitignore
@@ -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
index 000000000..3531485fb
--- /dev/null
+++ b/gcell/lib/general/.gitignore
@@ -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
index 000000000..3531485fb
--- /dev/null
+++ b/gcell/lib/general/spu/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gcell/lib/runtime/.gitignore
@@ -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
index 000000000..36b575570
--- /dev/null
+++ b/gcell/lib/runtime/spu/.gitignore
@@ -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
index 000000000..547d22090
--- /dev/null
+++ b/gcell/lib/spu/.gitignore
@@ -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
index 000000000..3531485fb
--- /dev/null
+++ b/gcell/lib/wrapper/.gitignore
@@ -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
index 000000000..3531485fb
--- /dev/null
+++ b/gcell/lib/wrapper/spu/.gitignore
@@ -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
index 000000000..53edad32f
--- /dev/null
+++ b/gnuradio-core/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gnuradio-core/src/.gitignore
@@ -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
index 000000000..363c633e1
--- /dev/null
+++ b/gnuradio-core/src/gen_interpolator_taps/.gitignore
@@ -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
index 000000000..e3bc1ee6a
--- /dev/null
+++ b/gnuradio-core/src/lib/.gitignore
@@ -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
index 000000000..2d009f154
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/.gitignore
@@ -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-*
diff --git a/gnuradio-core/src/lib/filter/Makefile.am b/gnuradio-core/src/lib/filter/Makefile.am
index e230e88b5..838f69b92 100644
--- a/gnuradio-core/src/lib/filter/Makefile.am
+++ b/gnuradio-core/src/lib/filter/Makefile.am
@@ -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
diff --git a/gnuradio-core/src/lib/filter/filter.i b/gnuradio-core/src/lib/filter/filter.i
index 7931a4d53..16b8005be 100644
--- a/gnuradio-core/src/lib/filter/filter.i
+++ b/gnuradio-core/src/lib/filter/filter.i
@@ -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
*
@@ -32,6 +32,10 @@
#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"
@@ -45,5 +49,12 @@
%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
index 000000000..bfc4c0467
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc
@@ -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
index 000000000..b79a89fe9
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h
@@ -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
index 000000000..e365e0314
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.i
@@ -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
index 000000000..7be611e23
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc
@@ -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
index 000000000..7d0a31c59
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
@@ -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
index 000000000..4bef90e22
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i
@@ -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
index 000000000..b334f5878
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.cc
@@ -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
index 000000000..83997c0c9
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h
@@ -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
index 000000000..c4215fce1
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.i
@@ -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
index 000000000..d5eba885c
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc
@@ -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
index 000000000..50849d510
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h
@@ -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
index 000000000..cf4302d45
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.i
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gnuradio-core/src/lib/g72x/.gitignore
@@ -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
index 000000000..4f3696f58
--- /dev/null
+++ b/gnuradio-core/src/lib/general/.gitignore
@@ -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
index 000000000..ecd4cb0d5
--- /dev/null
+++ b/gnuradio-core/src/lib/gengen/.gitignore
@@ -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
index 000000000..89a768d46
--- /dev/null
+++ b/gnuradio-core/src/lib/hier/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gnuradio-core/src/lib/io/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gnuradio-core/src/lib/missing/.gitignore
@@ -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
index 000000000..f137f5c67
--- /dev/null
+++ b/gnuradio-core/src/lib/reed-solomon/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gnuradio-core/src/lib/runtime/.gitignore
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
diff --git a/gnuradio-core/src/lib/runtime/Makefile.am b/gnuradio-core/src/lib/runtime/Makefile.am
index 14ab464ad..b0e804277 100644
--- a/gnuradio-core/src/lib/runtime/Makefile.am
+++ b/gnuradio-core/src/lib/runtime/Makefile.am
@@ -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 \
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.cc b/gnuradio-core/src/lib/runtime/gr_basic_block.cc
index 71ccc0245..2fa1066cb 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.cc
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.cc
@@ -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++),
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.h b/gnuradio-core/src/lib/runtime/gr_basic_block.h
index 27ec0fd89..b8797fdc6 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.h
@@ -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;
diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.cc b/gnuradio-core/src/lib/runtime/gr_block_detail.cc
index ae1ea2562..d33dfed84 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_detail.cc
+++ b/gnuradio-core/src/lib/runtime/gr_block_detail.cc
@@ -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);
+}
diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.h b/gnuradio-core/src/lib/runtime/gr_block_detail.h
index 2856c402c..9d6358602 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_detail.h
+++ b/gnuradio-core/src/lib/runtime/gr_block_detail.h
@@ -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
index 000000000..89876ae29
--- /dev/null
+++ b/gnuradio-core/src/lib/runtime/gr_msg_accepter.cc
@@ -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
index 000000000..79a631f3a
--- /dev/null
+++ b/gnuradio-core/src/lib/runtime/gr_msg_accepter.h
@@ -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 */
diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc b/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc
index 02e8deed8..c6311ccaa 100644
--- a/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc
+++ b/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc
@@ -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;
+}
diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
index ab955240b..acfa264c7 100644
--- a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
+++ b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
@@ -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:
diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc
index 458b16d64..03eef17d9 100644
--- a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc
+++ b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc
@@ -24,17 +24,26 @@
#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
index 000000000..9d7d01056
--- /dev/null
+++ b/gnuradio-core/src/lib/swig/.gitignore
@@ -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
index 000000000..85bb5cc04
--- /dev/null
+++ b/gnuradio-core/src/lib/viterbi/.gitignore
@@ -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
index 000000000..f9c5da0db
--- /dev/null
+++ b/gnuradio-core/src/python/.gitignore
@@ -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
index 000000000..f9c5da0db
--- /dev/null
+++ b/gnuradio-core/src/python/bin/.gitignore
@@ -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
index 000000000..f9c5da0db
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/.gitignore
@@ -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
index 000000000..b6950912c
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/blks2/.gitignore
@@ -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
index 000000000..f9c5da0db
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/.gitignore
@@ -0,0 +1,8 @@
+/Makefile
+/Makefile.in
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am b/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
index f07abd4c4..17be09cc7 100644
--- a/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
@@ -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
index 000000000..b1b3dfcab
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py
@@ -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
index 000000000..c45ae4d1a
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py
@@ -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
index 000000000..176d0473e
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_decimator.py
@@ -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
index 000000000..db2944042
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_interpolator.py
@@ -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
index 000000000..bf03975bb
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/gr/.gitignore
@@ -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
index 000000000..f9c5da0db
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/gru/.gitignore
@@ -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
index 000000000..f9c5da0db
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/gruimpl/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/vocoder/.gitignore
@@ -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
index 000000000..8687003d4
--- /dev/null
+++ b/gnuradio-core/src/tests/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gnuradio-core/src/utils/.gitignore
@@ -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
index 000000000..29ec71e01
--- /dev/null
+++ b/gnuradio-examples/.gitignore
@@ -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
index 000000000..19dd0e0a5
--- /dev/null
+++ b/gnuradio-examples/c++/.gitignore
@@ -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
index 000000000..c5e345858
--- /dev/null
+++ b/gnuradio-examples/c++/dial_tone/.gitignore
@@ -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
index 000000000..c400497f5
--- /dev/null
+++ b/gnuradio-examples/python/.gitignore
@@ -0,0 +1,10 @@
+/Makefile
+/Makefile.in
+/.la
+/.lo
+/.deps
+/.libs
+/*.la
+/*.lo
+/*.pyc
+/*.pyo
diff --git a/gnuradio-examples/python/Makefile.am b/gnuradio-examples/python/Makefile.am
index 3a1acf51d..ea03b438f 100644
--- a/gnuradio-examples/python/Makefile.am
+++ b/gnuradio-examples/python/Makefile.am
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gnuradio-examples/python/apps/.gitignore
@@ -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
index 000000000..b6950912c
--- /dev/null
+++ b/gnuradio-examples/python/apps/hf_explorer/.gitignore
@@ -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
index 000000000..b6950912c
--- /dev/null
+++ b/gnuradio-examples/python/apps/hf_radio/.gitignore
@@ -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
index 000000000..c400497f5
--- /dev/null
+++ b/gnuradio-examples/python/audio/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gnuradio-examples/python/digital-bert/.gitignore
@@ -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
index 000000000..ff40c06f3
--- /dev/null
+++ b/gnuradio-examples/python/digital/.gitignore
@@ -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
index 000000000..c400497f5
--- /dev/null
+++ b/gnuradio-examples/python/digital_voice/.gitignore
@@ -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
index 000000000..c400497f5
--- /dev/null
+++ b/gnuradio-examples/python/mp-sched/.gitignore
@@ -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
index 000000000..ff40c06f3
--- /dev/null
+++ b/gnuradio-examples/python/multi-antenna/.gitignore
@@ -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
index 000000000..c400497f5
--- /dev/null
+++ b/gnuradio-examples/python/multi_usrp/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gnuradio-examples/python/network/.gitignore
@@ -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
index 000000000..2f6a10e95
--- /dev/null
+++ b/gnuradio-examples/python/ofdm/.gitignore
@@ -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
index 000000000..282522db0
--- /dev/null
+++ b/gnuradio-examples/python/pfb/.gitignore
@@ -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
index 000000000..4aa9248ea
--- /dev/null
+++ b/gnuradio-examples/python/pfb/Makefile.am
@@ -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
index 000000000..bc83fae27
--- /dev/null
+++ b/gnuradio-examples/python/pfb/channelize.py
@@ -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
index 000000000..edebf5f59
--- /dev/null
+++ b/gnuradio-examples/python/pfb/chirp_channelize.py
@@ -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
index 000000000..cb5d61b72
--- /dev/null
+++ b/gnuradio-examples/python/pfb/decimate.py
@@ -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
index 000000000..97df0e0f5
--- /dev/null
+++ b/gnuradio-examples/python/pfb/fmtest.py
@@ -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
index 000000000..a7a2522f8
--- /dev/null
+++ b/gnuradio-examples/python/pfb/interpolate.py
@@ -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
index 000000000..c400497f5
--- /dev/null
+++ b/gnuradio-examples/python/usrp/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gnuradio-examples/python/usrp2/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-atsc/.gitignore b/gr-atsc/.gitignore
new file mode 100644
index 000000000..16905156d
--- /dev/null
+++ b/gr-atsc/.gitignore
@@ -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
index 000000000..bb3f27777
--- /dev/null
+++ b/gr-atsc/doc/.gitignore
@@ -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
index 000000000..bb3f27777
--- /dev/null
+++ b/gr-atsc/src/.gitignore
@@ -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
index 000000000..01e4ffe9a
--- /dev/null
+++ b/gr-atsc/src/lib/.gitignore
@@ -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
index 000000000..bf03975bb
--- /dev/null
+++ b/gr-atsc/src/python/.gitignore
@@ -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
index 000000000..cdcf41b15
--- /dev/null
+++ b/gr-audio-alsa/.gitignore
@@ -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
index 000000000..b751c6731
--- /dev/null
+++ b/gr-audio-alsa/src/.gitignore
@@ -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
index 000000000..cdcf41b15
--- /dev/null
+++ b/gr-audio-jack/.gitignore
@@ -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
index 000000000..46103bc25
--- /dev/null
+++ b/gr-audio-jack/src/.gitignore
@@ -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
index 000000000..cdcf41b15
--- /dev/null
+++ b/gr-audio-oss/.gitignore
@@ -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
index 000000000..ac39b2a0a
--- /dev/null
+++ b/gr-audio-oss/src/.gitignore
@@ -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
index 000000000..cdcf41b15
--- /dev/null
+++ b/gr-audio-osx/.gitignore
@@ -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
index 000000000..5a5590a64
--- /dev/null
+++ b/gr-audio-osx/src/.gitignore
@@ -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
index 000000000..53edad32f
--- /dev/null
+++ b/gr-audio-portaudio/.gitignore
@@ -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
index 000000000..8c29d3577
--- /dev/null
+++ b/gr-audio-portaudio/src/.gitignore
@@ -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
index 000000000..53edad32f
--- /dev/null
+++ b/gr-audio-windows/.gitignore
@@ -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
index 000000000..087446597
--- /dev/null
+++ b/gr-audio-windows/src/.gitignore
@@ -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
index 000000000..53edad32f
--- /dev/null
+++ b/gr-comedi/.gitignore
@@ -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
index 000000000..d95b6dc4f
--- /dev/null
+++ b/gr-comedi/src/.gitignore
@@ -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
index 000000000..a37fc0c1a
--- /dev/null
+++ b/gr-cvsd-vocoder/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-cvsd-vocoder/src/.gitignore
@@ -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
index 000000000..306156d5f
--- /dev/null
+++ b/gr-cvsd-vocoder/src/lib/.gitignore
@@ -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
index 000000000..604b402c5
--- /dev/null
+++ b/gr-cvsd-vocoder/src/python/.gitignore
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/run_tests
diff --git a/gr-gcell/.gitignore b/gr-gcell/.gitignore
new file mode 100644
index 000000000..53edad32f
--- /dev/null
+++ b/gr-gcell/.gitignore
@@ -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
index 000000000..8f9e3f05b
--- /dev/null
+++ b/gr-gcell/src/.gitignore
@@ -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
index 000000000..53edad32f
--- /dev/null
+++ b/gr-gcell/src/examples/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-gpio/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-gpio/src/.gitignore b/gr-gpio/src/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-gpio/src/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-gpio/src/fpga/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-gpio/src/fpga/include/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-gpio/src/fpga/lib/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-gpio/src/fpga/rbf/.gitignore
@@ -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
index 000000000..28be78cfc
--- /dev/null
+++ b/gr-gpio/src/fpga/top/.gitignore
@@ -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
index 000000000..b9e19a979
--- /dev/null
+++ b/gr-gpio/src/python/.gitignore
@@ -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
index 000000000..f3462d009
--- /dev/null
+++ b/gr-gsm-fr-vocoder/.gitignore
@@ -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
index 000000000..bb3f27777
--- /dev/null
+++ b/gr-gsm-fr-vocoder/src/.gitignore
@@ -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
index 000000000..81a82de9a
--- /dev/null
+++ b/gr-gsm-fr-vocoder/src/lib/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gr-gsm-fr-vocoder/src/lib/gsm/.gitignore
@@ -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
index 000000000..bf03975bb
--- /dev/null
+++ b/gr-gsm-fr-vocoder/src/python/.gitignore
@@ -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
index 000000000..543c391df
--- /dev/null
+++ b/gr-howto-write-a-block/.gitignore
@@ -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
index 000000000..16f775e32
--- /dev/null
+++ b/gr-howto-write-a-block/config/.gitignore
@@ -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
index 000000000..f65ab6cf7
--- /dev/null
+++ b/gr-howto-write-a-block/doc/.gitignore
@@ -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
index 000000000..bb3f27777
--- /dev/null
+++ b/gr-howto-write-a-block/src/.gitignore
@@ -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
index 000000000..d957a6821
--- /dev/null
+++ b/gr-howto-write-a-block/src/lib/.gitignore
@@ -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
index 000000000..bf03975bb
--- /dev/null
+++ b/gr-howto-write-a-block/src/python/.gitignore
@@ -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
index 000000000..a37fc0c1a
--- /dev/null
+++ b/gr-msdd6000/.gitignore
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pc
diff --git a/gr-msdd6000/src/.gitignore b/gr-msdd6000/src/.gitignore
new file mode 100644
index 000000000..33061d3ab
--- /dev/null
+++ b/gr-msdd6000/src/.gitignore
@@ -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
index 000000000..27ff67327
--- /dev/null
+++ b/gr-pager/.gitignore
@@ -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
index 000000000..3e806d690
--- /dev/null
+++ b/gr-pager/src/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-qtgui/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-qtgui/src/.gitignore b/gr-qtgui/src/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-qtgui/src/.gitignore
@@ -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
index 000000000..58c8081e5
--- /dev/null
+++ b/gr-qtgui/src/lib/.gitignore
@@ -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
diff --git a/gr-qtgui/src/lib/ConstellationDisplayPlot.cc b/gr-qtgui/src/lib/ConstellationDisplayPlot.cc
index 10355f9f0..80bf4503f 100644
--- a/gr-qtgui/src/lib/ConstellationDisplayPlot.cc
+++ b/gr-qtgui/src/lib/ConstellationDisplayPlot.cc
@@ -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);
}
diff --git a/gr-qtgui/src/lib/ConstellationDisplayPlot.h b/gr-qtgui/src/lib/ConstellationDisplayPlot.h
index 612cd2b39..99ae566e0 100644
--- a/gr-qtgui/src/lib/ConstellationDisplayPlot.h
+++ b/gr-qtgui/src/lib/ConstellationDisplayPlot.h
@@ -14,14 +14,16 @@
#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;
};
diff --git a/gr-qtgui/src/lib/FrequencyDisplayPlot.cc b/gr-qtgui/src/lib/FrequencyDisplayPlot.cc
index e299157f5..7deff8543 100644
--- a/gr-qtgui/src/lib/FrequencyDisplayPlot.cc
+++ b/gr-qtgui/src/lib/FrequencyDisplayPlot.cc
@@ -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,
diff --git a/gr-qtgui/src/lib/FrequencyDisplayPlot.h b/gr-qtgui/src/lib/FrequencyDisplayPlot.h
index 5e8282962..785efe694 100644
--- a/gr-qtgui/src/lib/FrequencyDisplayPlot.h
+++ b/gr-qtgui/src/lib/FrequencyDisplayPlot.h
@@ -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;
diff --git a/gr-qtgui/src/lib/SpectrumGUIClass.cc b/gr-qtgui/src/lib/SpectrumGUIClass.cc
index 34062209e..4cb71a31a 100644
--- a/gr-qtgui/src/lib/SpectrumGUIClass.cc
+++ b/gr-qtgui/src/lib/SpectrumGUIClass.cc
@@ -449,6 +449,12 @@ SpectrumGUIClass::SetConstellationAxis(double xmin, double xmax,
}
void
+SpectrumGUIClass::SetConstellationPenSize(int size){
+ _spectrumDisplayForm->SetConstellationPenSize(size);
+}
+
+
+void
SpectrumGUIClass::SetFrequencyAxis(double min, double max)
{
_spectrumDisplayForm->SetFrequencyAxis(min, max);
diff --git a/gr-qtgui/src/lib/SpectrumGUIClass.h b/gr-qtgui/src/lib/SpectrumGUIClass.h
index 9a55271df..d8dcb2769 100644
--- a/gr-qtgui/src/lib/SpectrumGUIClass.h
+++ b/gr-qtgui/src/lib/SpectrumGUIClass.h
@@ -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:
diff --git a/gr-qtgui/src/lib/TimeDomainDisplayPlot.cc b/gr-qtgui/src/lib/TimeDomainDisplayPlot.cc
index 6d8ef6ee4..cb18b4418 100644
--- a/gr-qtgui/src/lib/TimeDomainDisplayPlot.cc
+++ b/gr-qtgui/src/lib/TimeDomainDisplayPlot.cc
@@ -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){
diff --git a/gr-qtgui/src/lib/TimeDomainDisplayPlot.h b/gr-qtgui/src/lib/TimeDomainDisplayPlot.h
index 56d44539d..8d98abac6 100644
--- a/gr-qtgui/src/lib/TimeDomainDisplayPlot.h
+++ b/gr-qtgui/src/lib/TimeDomainDisplayPlot.h
@@ -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);
diff --git a/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc
index 1b6650613..f676cb4af 100644
--- a/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc
+++ b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc
@@ -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;
}
diff --git a/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h
index f46f260e3..272bdf697 100644
--- a/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h
+++ b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h
@@ -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);
diff --git a/gr-qtgui/src/lib/WaterfallDisplayPlot.cc b/gr-qtgui/src/lib/WaterfallDisplayPlot.cc
index ad167f097..f6d0cc0ba 100644
--- a/gr-qtgui/src/lib/WaterfallDisplayPlot.cc
+++ b/gr-qtgui/src/lib/WaterfallDisplayPlot.cc
@@ -15,28 +15,33 @@
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);
diff --git a/gr-qtgui/src/lib/WaterfallDisplayPlot.h b/gr-qtgui/src/lib/WaterfallDisplayPlot.h
index fbbb69a5b..bb87fb09f 100644
--- a/gr-qtgui/src/lib/WaterfallDisplayPlot.h
+++ b/gr-qtgui/src/lib/WaterfallDisplayPlot.h
@@ -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);
diff --git a/gr-qtgui/src/lib/qtgui.i b/gr-qtgui/src/lib/qtgui.i
index d2f734fdf..1f50bf43c 100644
--- a/gr-qtgui/src/lib/qtgui.i
+++ b/gr-qtgui/src/lib/qtgui.i
@@ -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);
};
diff --git a/gr-qtgui/src/lib/qtgui_sink_c.cc b/gr-qtgui/src/lib/qtgui_sink_c.cc
index bfb464119..7340141a6 100644
--- a/gr-qtgui/src/lib/qtgui_sink_c.cc
+++ b/gr-qtgui/src/lib/qtgui_sink_c.cc
@@ -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)
{
diff --git a/gr-qtgui/src/lib/qtgui_sink_c.h b/gr-qtgui/src/lib/qtgui_sink_c.h
index e36c8c9b0..91c6b03e6 100644
--- a/gr-qtgui/src/lib/qtgui_sink_c.h
+++ b/gr-qtgui/src/lib/qtgui_sink_c.h
@@ -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;
diff --git a/gr-qtgui/src/lib/qtgui_sink_f.cc b/gr-qtgui/src/lib/qtgui_sink_f.cc
index d0ce24274..6fbb2f381 100644
--- a/gr-qtgui/src/lib/qtgui_sink_f.cc
+++ b/gr-qtgui/src/lib/qtgui_sink_f.cc
@@ -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)
{
diff --git a/gr-qtgui/src/lib/qtgui_sink_f.h b/gr-qtgui/src/lib/qtgui_sink_f.h
index 027b89bea..47c928d17 100644
--- a/gr-qtgui/src/lib/qtgui_sink_f.h
+++ b/gr-qtgui/src/lib/qtgui_sink_f.h
@@ -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;
diff --git a/gr-qtgui/src/lib/spectrumdisplayform.cc b/gr-qtgui/src/lib/spectrumdisplayform.cc
index 36097d975..b27292193 100644
--- a/gr-qtgui/src/lib/spectrumdisplayform.cc
+++ b/gr-qtgui/src/lib/spectrumdisplayform.cc
Binary files differ
diff --git a/gr-qtgui/src/lib/spectrumdisplayform.h b/gr-qtgui/src/lib/spectrumdisplayform.h
index dbbf2567e..d89141f1e 100644
--- a/gr-qtgui/src/lib/spectrumdisplayform.h
+++ b/gr-qtgui/src/lib/spectrumdisplayform.h
@@ -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:
diff --git a/gr-qtgui/src/lib/spectrumdisplayform.ui b/gr-qtgui/src/lib/spectrumdisplayform.ui
index 9324f150b..1458488a0 100644
--- a/gr-qtgui/src/lib/spectrumdisplayform.ui
+++ b/gr-qtgui/src/lib/spectrumdisplayform.ui
@@ -5,687 +5,758 @@
<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>
@@ -698,14 +769,7 @@
</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>
@@ -787,22 +851,6 @@
</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>
<receiver>SpectrumDisplayForm</receiver>
@@ -1010,5 +1058,21 @@
</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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-qtgui/src/python/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-radar-mono/.gitignore b/gr-radar-mono/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-radar-mono/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-radar-mono/doc/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-radar-mono/src/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-radar-mono/src/fpga/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-radar-mono/src/fpga/lib/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-radar-mono/src/fpga/models/.gitignore
@@ -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
index 000000000..d709d8c29
--- /dev/null
+++ b/gr-radar-mono/src/fpga/tb/.gitignore
@@ -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
index 000000000..40492321d
--- /dev/null
+++ b/gr-radar-mono/src/fpga/top/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-radar-mono/src/lib/.gitignore
@@ -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
index 000000000..f104c5892
--- /dev/null
+++ b/gr-radar-mono/src/python/.gitignore
@@ -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
index 000000000..8736aba7f
--- /dev/null
+++ b/gr-radio-astronomy/.gitignore
@@ -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
index 000000000..bb3f27777
--- /dev/null
+++ b/gr-radio-astronomy/src/.gitignore
@@ -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
index 000000000..6fc7d943b
--- /dev/null
+++ b/gr-radio-astronomy/src/lib/.gitignore
@@ -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
index 000000000..bf03975bb
--- /dev/null
+++ b/gr-radio-astronomy/src/python/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-sounder/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-sounder/doc/.gitignore b/gr-sounder/doc/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-sounder/doc/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-sounder/src/.gitignore b/gr-sounder/src/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-sounder/src/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-sounder/src/fpga/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-sounder/src/fpga/lib/.gitignore
@@ -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
index 000000000..b05ab62aa
--- /dev/null
+++ b/gr-sounder/src/fpga/tb/.gitignore
@@ -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
index 000000000..2c9458cf2
--- /dev/null
+++ b/gr-sounder/src/fpga/top/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-sounder/src/lib/.gitignore
@@ -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
index 000000000..8ac573ba1
--- /dev/null
+++ b/gr-sounder/src/python/.gitignore
@@ -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
index 000000000..f3462d009
--- /dev/null
+++ b/gr-trellis/.gitignore
@@ -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
index 000000000..98c25189f
--- /dev/null
+++ b/gr-trellis/doc/.gitignore
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.html
diff --git a/gr-trellis/src/.gitignore b/gr-trellis/src/.gitignore
new file mode 100644
index 000000000..bb3f27777
--- /dev/null
+++ b/gr-trellis/src/.gitignore
@@ -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
index 000000000..c400497f5
--- /dev/null
+++ b/gr-trellis/src/examples/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-trellis/src/examples/fsm_files/.gitignore
@@ -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
index 000000000..8932c3611
--- /dev/null
+++ b/gr-trellis/src/lib/.gitignore
@@ -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
index 000000000..bf03975bb
--- /dev/null
+++ b/gr-trellis/src/python/.gitignore
@@ -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
index 000000000..cdcf41b15
--- /dev/null
+++ b/gr-usrp/.gitignore
@@ -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
index 000000000..2d01df25f
--- /dev/null
+++ b/gr-usrp/apps/.gitignore
@@ -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
index 000000000..68abaf8aa
--- /dev/null
+++ b/gr-usrp/src/.gitignore
@@ -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
index 000000000..a43ae9c69
--- /dev/null
+++ b/gr-usrp2/.gitignore
@@ -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
index 000000000..6f241fe83
--- /dev/null
+++ b/gr-usrp2/src/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-utils/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-utils/src/.gitignore b/gr-utils/src/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-utils/src/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-utils/src/lib/.gitignore
@@ -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
index 000000000..b6950912c
--- /dev/null
+++ b/gr-utils/src/python/.gitignore
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pyc
diff --git a/gr-utils/src/python/gr_plot_const.py b/gr-utils/src/python/gr_plot_const.py
index 355309955..ec2272c74 100755
--- a/gr-utils/src/python/gr_plot_const.py
+++ b/gr-utils/src/python/gr_plot_const.py
@@ -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]))]
diff --git a/gr-utils/src/python/gr_plot_fft.py b/gr-utils/src/python/gr_plot_fft.py
index 59a3f286b..a9c1417f9 100755
--- a/gr-utils/src/python/gr_plot_fft.py
+++ b/gr-utils/src/python/gr_plot_fft.py
@@ -21,14 +21,6 @@
#
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
except ImportError:
@@ -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))
diff --git a/gr-utils/src/python/gr_plot_iq.py b/gr-utils/src/python/gr_plot_iq.py
index 2a4142a81..371ce3b79 100755
--- a/gr-utils/src/python/gr_plot_iq.py
+++ b/gr-utils/src/python/gr_plot_iq.py
@@ -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:
diff --git a/gr-utils/src/python/gr_plot_psd.py b/gr-utils/src/python/gr_plot_psd.py
index 669d7b573..0e3dbecd9 100755
--- a/gr-utils/src/python/gr_plot_psd.py
+++ b/gr-utils/src/python/gr_plot_psd.py
@@ -21,14 +21,6 @@
#
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
except ImportError:
@@ -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))
diff --git a/gr-utils/src/python/plot_data.py b/gr-utils/src/python/plot_data.py
index 7c79e1714..08cdd6030 100644
--- a/gr-utils/src/python/plot_data.py
+++ b/gr-utils/src/python/plot_data.py
@@ -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
index 000000000..53edad32f
--- /dev/null
+++ b/gr-video-sdl/.gitignore
@@ -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
index 000000000..e068ddb44
--- /dev/null
+++ b/gr-video-sdl/src/.gitignore
@@ -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
index 000000000..cdcf41b15
--- /dev/null
+++ b/gr-wxgui/.gitignore
@@ -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
index 000000000..f9c5da0db
--- /dev/null
+++ b/gr-wxgui/src/.gitignore
@@ -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
index 000000000..f9c5da0db
--- /dev/null
+++ b/gr-wxgui/src/python/.gitignore
@@ -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
index 000000000..a74b07aee
--- /dev/null
+++ b/gr-wxgui/src/python/forms/.gitignore
@@ -0,0 +1 @@
+/*.pyc
diff --git a/gr-wxgui/src/python/plotter/.gitignore b/gr-wxgui/src/python/plotter/.gitignore
new file mode 100644
index 000000000..b6950912c
--- /dev/null
+++ b/gr-wxgui/src/python/plotter/.gitignore
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/*.pyc
diff --git a/grc/.gitignore b/grc/.gitignore
new file mode 100644
index 000000000..8e70007d6
--- /dev/null
+++ b/grc/.gitignore
@@ -0,0 +1,3 @@
+/grc.conf
+/Makefile
+/Makefile.in
diff --git a/grc/base/.gitignore b/grc/base/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/base/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/blocks/.gitignore b/grc/blocks/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/blocks/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/.gitignore b/grc/examples/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/examples/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/audio/.gitignore b/grc/examples/audio/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/examples/audio/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/simple/.gitignore b/grc/examples/simple/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/examples/simple/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/trellis/.gitignore b/grc/examples/trellis/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/examples/trellis/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/usrp/.gitignore b/grc/examples/usrp/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/examples/usrp/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/examples/xmlrpc/.gitignore b/grc/examples/xmlrpc/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/examples/xmlrpc/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/freedesktop/.gitignore b/grc/freedesktop/.gitignore
new file mode 100644
index 000000000..ff07a101f
--- /dev/null
+++ b/grc/freedesktop/.gitignore
@@ -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
index 000000000..908cf90b8
--- /dev/null
+++ b/grc/grc_gnuradio/.gitignore
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/Constants.py
diff --git a/grc/gui/.gitignore b/grc/gui/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/gui/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/python/.gitignore b/grc/python/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/python/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/grc/scripts/.gitignore b/grc/scripts/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/grc/scripts/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gruel/.gitignore b/gruel/.gitignore
new file mode 100644
index 000000000..ede973f11
--- /dev/null
+++ b/gruel/.gitignore
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/gruel.pc
diff --git a/gruel/src/.gitignore b/gruel/src/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gruel/src/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gruel/src/include/.gitignore b/gruel/src/include/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gruel/src/include/.gitignore
@@ -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
index 000000000..bbe96391c
--- /dev/null
+++ b/gruel/src/include/gruel/.gitignore
@@ -0,0 +1,4 @@
+/Makefile
+/Makefile.in
+/inet.h
+/pmt_serial_tags.h
diff --git a/gruel/src/include/gruel/Makefile.am b/gruel/src/include/gruel/Makefile.am
index c38c7fa38..9f50cb619 100644
--- a/gruel/src/include/gruel/Makefile.am
+++ b/gruel/src/include/gruel/Makefile.am
@@ -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 \
diff --git a/gruel/src/include/gruel/msg_accepter.h b/gruel/src/include/gruel/msg_accepter.h
index bc287afae..3afd6dde0 100644
--- a/gruel/src/include/gruel/msg_accepter.h
+++ b/gruel/src/include/gruel/msg_accepter.h
@@ -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 */
diff --git a/gruel/src/include/gruel/msg_accepter_msgq.h b/gruel/src/include/gruel/msg_accepter_msgq.h
index b14049d54..bf1762e92 100644
--- a/gruel/src/include/gruel/msg_accepter_msgq.h
+++ b/gruel/src/include/gruel/msg_accepter_msgq.h
@@ -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; }
};
diff --git a/gruel/src/include/gruel/pmt.h b/gruel/src/include/gruel/pmt.h
index de0998b5e..240359301 100644
--- a/gruel/src/include/gruel/pmt.h
+++ b/gruel/src/include/gruel/pmt.h
@@ -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
{
@@ -237,6 +239,42 @@ 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
*
* These vectors can hold any kind of objects. Indexing is zero based.
diff --git a/gruel/src/include/gruel/send.h b/gruel/src/include/gruel/send.h
new file mode 100644
index 000000000..292017d45
--- /dev/null
+++ b/gruel/src/include/gruel/send.h
@@ -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
index 000000000..89a768d46
--- /dev/null
+++ b/gruel/src/lib/.gitignore
@@ -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
index 000000000..c026fd667
--- /dev/null
+++ b/gruel/src/lib/msg/.gitignore
@@ -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
index 000000000..035c0316b
--- /dev/null
+++ b/gruel/src/lib/pmt/.gitignore
@@ -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
diff --git a/gruel/src/lib/pmt/pmt.cc b/gruel/src/lib/pmt/pmt.cc
index fbf557be1..f0e3c30a2 100644
--- a/gruel/src/lib/pmt/pmt.cc
+++ b/gruel/src/lib/pmt/pmt.cc
@@ -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)
{
@@ -495,6 +503,201 @@ pmt_vector_fill(pmt_t vector, pmt_t 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);
diff --git a/gruel/src/lib/pmt/pmt_int.h b/gruel/src/lib/pmt/pmt_int.h
index 9aac322a7..7581845f8 100644
--- a/gruel/src/lib/pmt/pmt_int.h
+++ b/gruel/src/lib/pmt/pmt_int.h
@@ -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!
@@ -35,8 +36,10 @@
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
diff --git a/gruel/src/lib/pmt/pmt_io.cc b/gruel/src/lib/pmt/pmt_io.cc
index f5a82de0e..179e6b72c 100644
--- a/gruel/src/lib/pmt/pmt_io.cc
+++ b/gruel/src/lib/pmt/pmt_io.cc
@@ -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 << ">";
diff --git a/gruel/src/lib/pmt/qa_pmt_prims.cc b/gruel/src/lib/pmt/qa_pmt_prims.cc
index b81354721..899674bbb 100644
--- a/gruel/src/lib/pmt/qa_pmt_prims.cc
+++ b/gruel/src/lib/pmt/qa_pmt_prims.cc
@@ -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));
}
+
diff --git a/gruel/src/lib/pmt/qa_pmt_prims.h b/gruel/src/lib/pmt/qa_pmt_prims.h
index effb3a097..2fe473c43 100644
--- a/gruel/src/lib/pmt/qa_pmt_prims.h
+++ b/gruel/src/lib/pmt/qa_pmt_prims.h
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gruel/src/scheme/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/gruel/src/scheme/gnuradio/.gitignore
@@ -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
index 000000000..36b77742f
--- /dev/null
+++ b/mblock/.gitignore
@@ -0,0 +1,3 @@
+/Makefile
+/Makefile.in
+/mblock.pc
diff --git a/mblock/doc/.gitignore b/mblock/doc/.gitignore
new file mode 100644
index 000000000..f65ab6cf7
--- /dev/null
+++ b/mblock/doc/.gitignore
@@ -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
index 000000000..bb3f27777
--- /dev/null
+++ b/mblock/src/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/mblock/src/include/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/mblock/src/include/mblock/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/mblock/src/lib/.gitignore b/mblock/src/lib/.gitignore
new file mode 100644
index 000000000..b2a2f45a7
--- /dev/null
+++ b/mblock/src/lib/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/mblock/src/scheme/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/mblock/src/scheme/gnuradio/.gitignore
@@ -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
index 000000000..5a51e3bc3
--- /dev/null
+++ b/omnithread/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/omnithread/gnuradio/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/.gitignore b/usrp/.gitignore
new file mode 100644
index 000000000..4af69afee
--- /dev/null
+++ b/usrp/.gitignore
@@ -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
index 000000000..fdf7036a8
--- /dev/null
+++ b/usrp/doc/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp/doc/other/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/firmware/.gitignore b/usrp/firmware/.gitignore
new file mode 100644
index 000000000..75bb241c8
--- /dev/null
+++ b/usrp/firmware/.gitignore
@@ -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
index 000000000..75bb241c8
--- /dev/null
+++ b/usrp/firmware/include/.gitignore
@@ -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
index 000000000..04f253234
--- /dev/null
+++ b/usrp/firmware/lib/.gitignore
@@ -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
index 000000000..d46c52c00
--- /dev/null
+++ b/usrp/firmware/src/.gitignore
@@ -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
index 000000000..d46c52c00
--- /dev/null
+++ b/usrp/firmware/src/common/.gitignore
@@ -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
index 000000000..54a9e9415
--- /dev/null
+++ b/usrp/firmware/src/usrp2/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp/fpga/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp/fpga/megacells/.gitignore b/usrp/fpga/megacells/.gitignore
new file mode 100644
index 000000000..c2de89b27
--- /dev/null
+++ b/usrp/fpga/megacells/.gitignore
@@ -0,0 +1 @@
+/db
diff --git a/usrp/fpga/rbf/.gitignore b/usrp/fpga/rbf/.gitignore
new file mode 100644
index 000000000..eb58a95f5
--- /dev/null
+++ b/usrp/fpga/rbf/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp/fpga/rbf/rev2/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp/fpga/rbf/rev4/.gitignore
@@ -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
index 000000000..e7fc78c42
--- /dev/null
+++ b/usrp/fpga/sdr_lib/.gitignore
@@ -0,0 +1,2 @@
+/db
+/*.vcd
diff --git a/usrp/fpga/tb/.gitignore b/usrp/fpga/tb/.gitignore
new file mode 100644
index 000000000..6bc85aa2d
--- /dev/null
+++ b/usrp/fpga/tb/.gitignore
@@ -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
index 000000000..fe06aad0d
--- /dev/null
+++ b/usrp/fpga/toplevel/mrfm/.gitignore
@@ -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
index 000000000..201434ddc
--- /dev/null
+++ b/usrp/fpga/toplevel/sizetest/.gitignore
@@ -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
index 000000000..2cc25f0f2
--- /dev/null
+++ b/usrp/fpga/toplevel/usrp_inband_usb/.gitignore
@@ -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
index 000000000..2cc25f0f2
--- /dev/null
+++ b/usrp/fpga/toplevel/usrp_multi/.gitignore
@@ -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
index 000000000..31d6ea9ef
--- /dev/null
+++ b/usrp/fpga/toplevel/usrp_std/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/usrp/host/.gitignore
@@ -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
index 000000000..16fdf27ad
--- /dev/null
+++ b/usrp/host/apps/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp/host/include/.gitignore
@@ -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
index 000000000..25b2cae79
--- /dev/null
+++ b/usrp/host/include/usrp/.gitignore
@@ -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
index 000000000..e0e4208db
--- /dev/null
+++ b/usrp/host/lib/.gitignore
@@ -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
index 000000000..a02b6ff73
--- /dev/null
+++ b/usrp/host/misc/.gitignore
@@ -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
index 000000000..3a0816517
--- /dev/null
+++ b/usrp/host/swig/.gitignore
@@ -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
index 000000000..f62d9e1de
--- /dev/null
+++ b/usrp/limbo/apps-inband/.gitignore
@@ -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
index 000000000..a228dcdc1
--- /dev/null
+++ b/usrp/limbo/inband/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp2/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp2/firmware/.gitignore b/usrp2/firmware/.gitignore
new file mode 100644
index 000000000..2381f1328
--- /dev/null
+++ b/usrp2/firmware/.gitignore
@@ -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
index 000000000..b8ab0dc8d
--- /dev/null
+++ b/usrp2/firmware/apps/.gitignore
@@ -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
index 000000000..b11bb113a
--- /dev/null
+++ b/usrp2/firmware/config/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp2/firmware/include/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp2/firmware/lib/.gitignore b/usrp2/firmware/lib/.gitignore
new file mode 100644
index 000000000..f1cc2bf73
--- /dev/null
+++ b/usrp2/firmware/lib/.gitignore
@@ -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
index 000000000..45cf9a86b
--- /dev/null
+++ b/usrp2/fpga/boot_cpld/.gitignore
@@ -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
index 000000000..025385cff
--- /dev/null
+++ b/usrp2/fpga/control_lib/.gitignore
@@ -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
index 000000000..956cab52b
--- /dev/null
+++ b/usrp2/fpga/coregen/.gitignore
@@ -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
index 000000000..86fc44f92
--- /dev/null
+++ b/usrp2/fpga/eth/bench/verilog/.gitignore
@@ -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
index 000000000..7fc71ccb6
--- /dev/null
+++ b/usrp2/fpga/extram/.gitignore
@@ -0,0 +1 @@
+/a.out
diff --git a/usrp2/fpga/opencores/8b10b/.gitignore b/usrp2/fpga/opencores/8b10b/.gitignore
new file mode 100644
index 000000000..548539d61
--- /dev/null
+++ b/usrp2/fpga/opencores/8b10b/.gitignore
@@ -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
index 000000000..b693d7c72
--- /dev/null
+++ b/usrp2/fpga/opencores/aemb/CVS/.gitignore
@@ -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
index 000000000..6b09f5cc9
--- /dev/null
+++ b/usrp2/fpga/opencores/aemb/rtl/verilog/.gitignore
@@ -0,0 +1 @@
+/aeMB2*
diff --git a/usrp2/fpga/opencores/aemb/sim/.gitignore b/usrp2/fpga/opencores/aemb/sim/.gitignore
new file mode 100644
index 000000000..4ef5da542
--- /dev/null
+++ b/usrp2/fpga/opencores/aemb/sim/.gitignore
@@ -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
index 000000000..ae1609754
--- /dev/null
+++ b/usrp2/fpga/opencores/ethernet_tri_mode/.gitignore
@@ -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
index 000000000..3c782d589
--- /dev/null
+++ b/usrp2/fpga/sdr_lib/.gitignore
@@ -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
index 000000000..61e120cff
--- /dev/null
+++ b/usrp2/fpga/simple_gemac/.gitignore
@@ -0,0 +1,3 @@
+/a.out
+/*~
+/*.vcd
diff --git a/usrp2/fpga/testbench/.gitignore b/usrp2/fpga/testbench/.gitignore
new file mode 100644
index 000000000..eedcf9652
--- /dev/null
+++ b/usrp2/fpga/testbench/.gitignore
@@ -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
index 000000000..515552fdb
--- /dev/null
+++ b/usrp2/fpga/timing/.gitignore
@@ -0,0 +1,2 @@
+/a.out
+/*.vcd
diff --git a/usrp2/fpga/top/.gitignore b/usrp2/fpga/top/.gitignore
new file mode 100644
index 000000000..bf1b77066
--- /dev/null
+++ b/usrp2/fpga/top/.gitignore
@@ -0,0 +1 @@
+/*.sav
diff --git a/usrp2/fpga/top/eth_test/.gitignore b/usrp2/fpga/top/eth_test/.gitignore
new file mode 100644
index 000000000..b30397081
--- /dev/null
+++ b/usrp2/fpga/top/eth_test/.gitignore
@@ -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
index 000000000..b30397081
--- /dev/null
+++ b/usrp2/fpga/top/u2_core/.gitignore
@@ -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
index 000000000..de5b50277
--- /dev/null
+++ b/usrp2/fpga/top/u2_fpga/.gitignore
@@ -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
index 000000000..432f8fd58
--- /dev/null
+++ b/usrp2/fpga/top/u2_rev2/.gitignore
@@ -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
index 000000000..432f8fd58
--- /dev/null
+++ b/usrp2/fpga/top/u2_rev3/.gitignore
@@ -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
index 000000000..e4daaf1ea
--- /dev/null
+++ b/usrp2/fpga/top/u2_rev3_iad/.gitignore
@@ -0,0 +1,4 @@
+/build
+/*.vcd
+/dsp_core_tb
+/*.dat
diff --git a/usrp2/host/.gitignore b/usrp2/host/.gitignore
new file mode 100644
index 000000000..605b6fe86
--- /dev/null
+++ b/usrp2/host/.gitignore
@@ -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
index 000000000..4b66ac0f9
--- /dev/null
+++ b/usrp2/host/apps/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp2/host/include/.gitignore
@@ -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
index 000000000..b336cc7ce
--- /dev/null
+++ b/usrp2/host/include/usrp2/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/usrp2/host/lib/.gitignore b/usrp2/host/lib/.gitignore
new file mode 100644
index 000000000..8f5500b33
--- /dev/null
+++ b/usrp2/host/lib/.gitignore
@@ -0,0 +1,5 @@
+/.libs
+/.deps
+/Makefile
+/Makefile.in
+/usrp2_socket_opener