diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | docs/doxygen/Doxyfile.in | 2 | ||||
-rw-r--r-- | docs/doxygen/other/extra_pages.dox | 3 | ||||
-rw-r--r-- | gr-shd/CMakeLists.txt | 132 | ||||
-rw-r--r-- | gr-shd/apps/CMakeLists.txt | 32 | ||||
-rwxr-xr-x | gr-shd/apps/shd_fft | 280 | ||||
-rwxr-xr-x | gr-shd/apps/shd_rx_cfile | 153 | ||||
-rwxr-xr-x | gr-shd/apps/shd_siggen | 122 | ||||
-rw-r--r-- | gr-shd/gnuradio-shd.pc.in | 11 | ||||
-rw-r--r-- | gr-shd/grc/CMakeLists.txt | 45 | ||||
-rw-r--r-- | gr-shd/grc/gen_shd_smini_blocks.py | 297 | ||||
-rw-r--r-- | gr-shd/grc/shd_block_tree.xml | 14 | ||||
-rw-r--r-- | gr-shd/include/CMakeLists.txt | 29 | ||||
-rw-r--r-- | gr-shd/include/gr_shd_api.h | 33 | ||||
-rw-r--r-- | gr-shd/include/gr_shd_smini_sink.h | 282 | ||||
-rw-r--r-- | gr-shd/include/gr_shd_smini_source.h | 286 | ||||
-rw-r--r-- | gr-shd/lib/CMakeLists.txt | 67 | ||||
-rw-r--r-- | gr-shd/lib/gnuradio-shd.rc.in | 55 | ||||
-rw-r--r-- | gr-shd/lib/gr_shd_smini_sink.cc | 276 | ||||
-rw-r--r-- | gr-shd/lib/gr_shd_smini_source.cc | 299 | ||||
-rw-r--r-- | gr-shd/swig/CMakeLists.txt | 66 | ||||
-rw-r--r-- | gr-shd/swig/__init__.py | 92 | ||||
-rw-r--r-- | gr-shd/swig/gnuradio/shd.scm | 27 | ||||
-rwxr-xr-x | gr-shd/swig/qa_shd.py | 40 | ||||
-rw-r--r-- | gr-shd/swig/shd_swig.i | 126 |
25 files changed, 0 insertions, 2770 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e31005b1f6..b55ce851ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -290,7 +290,6 @@ add_subdirectory(gr-pager) add_subdirectory(gr-qtgui) add_subdirectory(gr-trellis) add_subdirectory(gr-uhd) -add_subdirectory(gr-shd) add_subdirectory(gr-utils) add_subdirectory(gr-video-sdl) add_subdirectory(gr-vocoder) diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in index 7d7c03357d..cad6a52efa 100644 --- a/docs/doxygen/Doxyfile.in +++ b/docs/doxygen/Doxyfile.in @@ -629,8 +629,6 @@ EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ @abs_top_builddir@/gr-pager/lib \ @abs_top_srcdir@/gr-qtgui/lib \ @abs_top_builddir@/gr-qtgui/lib \ - @abs_top_srcdir@/gr-shd/lib \ - @abs_top_builddir@/gr-shd/lib \ @abs_top_srcdir@/gr-trellis/lib \ @abs_top_builddir@/gr-trellis/lib \ @abs_top_srcdir@/gr-uhd/lib \ diff --git a/docs/doxygen/other/extra_pages.dox b/docs/doxygen/other/extra_pages.dox index 8d9b69a87b..617e00d553 100644 --- a/docs/doxygen/other/extra_pages.dox +++ b/docs/doxygen/other/extra_pages.dox @@ -70,9 +70,6 @@ audio-osx and audio-windows to be either satisfied or built. \subsection dep_uhd uhd: The Ettus USRP Hardware Driver Interface \li uhd (>= 3.0.0) http://code.ettus.com/redmine/ettus/projects/uhd/wiki -\subsection dep_shd shd: The Symplex Hardware Driver Interface -\li shd (>= 3.0.0) - \subsection dep_gr_video_sdl gr-video-sdl: PAL and NTSC display \li SDL (>= 1.2.0) http://www.libsdl.org/download-1.2.php diff --git a/gr-shd/CMakeLists.txt b/gr-shd/CMakeLists.txt deleted file mode 100644 index 688546416e..0000000000 --- a/gr-shd/CMakeLists.txt +++ /dev/null @@ -1,132 +0,0 @@ -# Copyright 2011 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. - -######################################################################## -# Setup dependencies -######################################################################## -include(GrBoost) - -PKG_CHECK_MODULES(PC_SHD shd) -FIND_PATH( - SHD_INCLUDE_DIRS - NAMES shd/config.hpp - HINTS $ENV{SHD_DIR}/include - ${PC_SHD_INCLUDE_DIRS} - PATHS /usr/local/include - /usr/include -) - -FIND_LIBRARY( - SHD_LIBRARIES - NAMES shd - HINTS $ENV{SHD_DIR}/lib - ${PC_SHD_LIBRARIES} - PATHS /usr/local/lib - /usr/lib -) - -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SHD DEFAULT_MSG SHD_LIBRARIES SHD_INCLUDE_DIRS) -MARK_AS_ADVANCED(SHD_LIBRARIES SHD_INCLUDE_DIRS) - -if(ENABLE_GR_CTRLPORT) - ADD_DEFINITIONS(-DGR_CTRLPORT) - include_directories(${ICE_INCLUDE_DIR}) -endif(ENABLE_GR_CTRLPORT) - -######################################################################## -# Register component -######################################################################## -include(GrComponent) -GR_REGISTER_COMPONENT("gr-shd" ENABLE_GR_SHD - Boost_FOUND - SHD_FOUND - ENABLE_GNURADIO_RUNTIME - ENABLE_GR_ANALOG -) - -GR_SET_GLOBAL(GR_SHD_INCLUDE_DIRS - ${CMAKE_CURRENT_SOURCE_DIR}/include -) - -######################################################################## -# Begin conditional configuration -######################################################################## -if(ENABLE_GR_SHD) - -######################################################################## -# Setup CPack components -######################################################################## -include(GrPackage) -CPACK_SET(CPACK_COMPONENT_GROUP_SHD_DESCRIPTION "GNU Radio SHD Blocks") - -CPACK_COMPONENT("shd_runtime" - GROUP "SHD" - DISPLAY_NAME "Runtime" - DESCRIPTION "Runtime" - DEPENDS "runtime_runtime" -) - -CPACK_COMPONENT("shd_devel" - GROUP "SHD" - DISPLAY_NAME "Development" - DESCRIPTION "C++ headers, package config, import libraries" - DEPENDS "runtime_devel" -) - -CPACK_COMPONENT("shd_python" - GROUP "SHD" - DISPLAY_NAME "Python" - DESCRIPTION "Python modules for runtime; GRC xml files" - DEPENDS "runtime_python;shd_runtime" -) - -CPACK_COMPONENT("shd_swig" - GROUP "SHD" - DISPLAY_NAME "SWIG" - DESCRIPTION "SWIG development .i files" - DEPENDS "runtime_swig;shd_python;shd_devel" -) - -######################################################################## -# Add subdirectories -######################################################################## -add_subdirectory(include) -add_subdirectory(lib) -if(ENABLE_PYTHON) - add_subdirectory(swig) - add_subdirectory(grc) - add_subdirectory(apps) -endif(ENABLE_PYTHON) - -######################################################################## -# Create Pkg Config File -######################################################################## -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-shd.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-shd.pc -@ONLY) - -install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-shd.pc - DESTINATION ${GR_LIBRARY_DIR}/pkgconfig - COMPONENT "shd_devel" -) - -endif(ENABLE_GR_SHD) diff --git a/gr-shd/apps/CMakeLists.txt b/gr-shd/apps/CMakeLists.txt deleted file mode 100644 index d36121da10..0000000000 --- a/gr-shd/apps/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2011 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(GrPython) - -######################################################################## -# Install some shd apps -######################################################################## -GR_PYTHON_INSTALL( - PROGRAMS - shd_fft - shd_rx_cfile - shd_siggen - DESTINATION ${GR_RUNTIME_DIR} - COMPONENT "shd_python" -) diff --git a/gr-shd/apps/shd_fft b/gr-shd/apps/shd_fft deleted file mode 100755 index 60d07e55ee..0000000000 --- a/gr-shd/apps/shd_fft +++ /dev/null @@ -1,280 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2011 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, gru -from gnuradio import shd -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2 -from gnuradio.wxgui import scopesink2, form, slider -from optparse import OptionParser -import wx -import sys -import numpy - -class app_top_block(stdgui2.std_top_block): - def __init__(self, frame, panel, vbox, argv): - stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) - - self.frame = frame - self.panel = panel - - parser = OptionParser(option_class=eng_option) - parser.add_option("-a", "--address", type="string", - default="type=xmini", - help="Address of SHD device, [default=%default]") - parser.add_option("-A", "--antenna", type="string", default=None, - help="select Rx Antenna where appropriate") - parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6, - help="set sample rate (bandwidth) [default=%default]") - parser.add_option("-f", "--freq", type="eng_float", default=None, - help="set frequency to FREQ", metavar="FREQ") - parser.add_option("-g", "--gain", type="eng_float", default=None, - help="set gain in dB (default is midpoint)") - parser.add_option("-W", "--waterfall", action="store_true", default=False, - help="Enable waterfall display") - parser.add_option("-S", "--oscilloscope", action="store_true", default=False, - help="Enable oscilloscope display") - parser.add_option("", "--avg-alpha", type="eng_float", default=1e-1, - help="Set fftsink averaging factor, default=[%default]") - parser.add_option("", "--ref-scale", type="eng_float", default=1.0, - help="Set dBFS=0dB input value, default=[%default]") - parser.add_option("--fft-size", type="int", default=1024, - help="Set number of FFT bins [default=%default]") - (options, args) = parser.parse_args() - if len(args) != 0: - parser.print_help() - sys.exit(1) - self.options = options - self.show_debug_info = True - - self.src = shd.smini_source(device_addr=options.address, - io_type=shd.io_type.COMPLEX_FLOAT32, - num_channels=1) - - if(options.antenna): - self.src.set_antenna(options.antenna, 0) - - self.src.set_samp_rate(options.samp_rate) - input_rate = self.src.get_samp_rate() - - if options.waterfall: - self.scope = \ - waterfallsink2.waterfall_sink_c (panel, fft_size=1024, - sample_rate=input_rate) - self.frame.SetMinSize((800, 420)) - elif options.oscilloscope: - self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate) - self.frame.SetMinSize((800, 600)) - else: - self.scope = fftsink2.fft_sink_c (panel, - fft_size=options.fft_size, - sample_rate=input_rate, - ref_scale=options.ref_scale, - ref_level=20.0, - y_divs = 12, - avg_alpha=options.avg_alpha) - self.frame.SetMinSize((800, 420)) - - self.connect(self.src, self.scope) - - self._build_gui(vbox) - self._setup_events() - - - # set initial values - - if options.gain is None: - # if no gain was specified, use the mid-point in dB - g = self.src.get_gain_range() - options.gain = float(g.start()+g.stop())/2 - - if options.freq is None: - # if no freq was specified, use the mid-point - r = self.src.get_freq_range() - options.freq = float(r.start()+r.stop())/2 - - self.set_gain(options.gain) - - if self.show_debug_info: - self.myform['samprate'].set_value(self.src.get_samp_rate()) - self.myform['fs@gbe'].set_value(input_rate) - self.myform['baseband'].set_value(0) - self.myform['ddc'].set_value(0) - - if not(self.set_freq(options.freq)): - self._set_status_msg("Failed to set initial frequency") - - print "Center Freq: ", self.src.get_center_freq() - print "Freq Range: ", self.src.get_freq_range() - print "Gain: ", self.src.get_gain() - print "Gain Names: ", self.src.get_gain_names() - print "Gain Range: ", self.src.get_gain_range() - - def _set_status_msg(self, msg): - self.frame.GetStatusBar().SetStatusText(msg, 0) - - def _build_gui(self, vbox): - - def _form_set_freq(kv): - return self.set_freq(kv['freq']) - - vbox.Add(self.scope.win, 10, wx.EXPAND) - - # add control area at the bottom - self.myform = myform = form.form() - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add((5,0), 0, 0) - myform['freq'] = form.float_field( - parent=self.panel, sizer=hbox, label="Center freq", weight=1, - callback=myform.check_input_and_call(_form_set_freq, - self._set_status_msg)) - - hbox.Add((5,0), 0, 0) - g = self.src.get_gain_range() - - # some configurations don't have gain control - if g.stop() > g.start(): - myform['gain'] = form.slider_field(parent=self.panel, - sizer=hbox, label="Gain", - weight=3, - min=int(g.start()), - max=int(g.stop()), - callback=self.set_gain) - - hbox.Add((5,0), 0, 0) - vbox.Add(hbox, 0, wx.EXPAND) - - self._build_subpanel(vbox) - - def _build_subpanel(self, vbox_arg): - # build a secondary information panel (sometimes hidden) - - # FIXME figure out how to have this be a subpanel that is always - # created, but has its visibility controlled by foo.Show(True/False) - - def _form_set_samp_rate(kv): - return self.set_samp_rate(kv['samprate']) - - if not(self.show_debug_info): - return - - panel = self.panel - vbox = vbox_arg - myform = self.myform - - hbox = wx.BoxSizer(wx.HORIZONTAL) - - hbox.Add((5,0), 0) - myform['samprate'] = form.float_field( - parent=panel, sizer=hbox, label="Sample Rate", - callback=myform.check_input_and_call(_form_set_samp_rate, - self._set_status_msg)) - - hbox.Add((5,0), 1) - myform['fs@gbe'] = form.static_float_field( - parent=panel, sizer=hbox, label="Fs@GbE") - - hbox.Add((5,0), 1) - myform['baseband'] = form.static_float_field( - parent=panel, sizer=hbox, label="Analog BB") - - hbox.Add((5,0), 1) - myform['ddc'] = form.static_float_field( - parent=panel, sizer=hbox, label="DDC") - - hbox.Add((5,0), 0) - vbox.Add(hbox, 0, wx.EXPAND) - - def set_freq(self, target_freq): - """ - Set the center frequency we're interested in. - - @param target_freq: frequency in Hz - @rypte: bool - - Tuning is a two step process. First we ask the front-end to - tune as close to the desired frequency as it can. Then we use - the result of that operation and our target_frequency to - determine the value for the digital down converter. - """ - r = self.src.set_center_freq(target_freq, 0) - - if r: - self.myform['freq'].set_value(target_freq) # update displayed value - if self.show_debug_info: - self.myform['baseband'].set_value(r.actual_rf_freq) - self.myform['ddc'].set_value(r.actual_dsp_freq) - if not self.options.oscilloscope: - self.scope.set_baseband_freq(target_freq) - return True - - return False - - def set_gain(self, gain): - if self.myform.has_key('gain'): - self.myform['gain'].set_value(gain) # update displayed value - self.src.set_gain(gain, 0) - - def set_samp_rate(self, samp_rate): - ok = self.src.set_samp_rate(samp_rate) - input_rate = self.src.get_samp_rate() - self.scope.set_sample_rate(input_rate) - if self.show_debug_info: # update displayed values - self.myform['samprate'].set_value(self.src.get_samp_rate()) - self.myform['fs@gbe'].set_value(input_rate) - - # shd set_samp_rate never fails; always falls back to closest requested. - return True - - def _setup_events(self): - if not self.options.waterfall and not self.options.oscilloscope: - self.scope.win.Bind(wx.EVT_LEFT_DCLICK, self.evt_left_dclick) - - def evt_left_dclick(self, event): - (ux, uy) = self.scope.win.GetXY(event) - if event.CmdDown(): - # Re-center on maximum power - points = self.scope.win._points - if self.scope.win.peak_hold: - if self.scope.win.peak_vals is not None: - ind = numpy.argmax(self.scope.win.peak_vals) - else: - ind = int(points.shape()[0]/2) - else: - ind = numpy.argmax(points[:,1]) - (freq, pwr) = points[ind] - target_freq = freq/self.scope.win._scale_factor - print ind, freq, pwr - self.set_freq(target_freq) - else: - # Re-center on clicked frequency - target_freq = ux/self.scope.win._scale_factor - self.set_freq(target_freq) - - -def main (): - app = stdgui2.stdapp(app_top_block, "SHD FFT", nstatus=1) - app.MainLoop() - -if __name__ == '__main__': - main () diff --git a/gr-shd/apps/shd_rx_cfile b/gr-shd/apps/shd_rx_cfile deleted file mode 100755 index 37eec05e0e..0000000000 --- a/gr-shd/apps/shd_rx_cfile +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2011,2013 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. -# - -""" -Read samples from a SHD device and write to file formatted as binary -outputs single precision complex float values or complex short values -(interleaved 16 bit signed short integers). -""" - -from gnuradio import gr, eng_notation -from gnuradio import blocks -from gnuradio import shd -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import sys - -n2s = eng_notation.num_to_str - -class rx_cfile_block(gr.top_block): - - def __init__(self, options, filename): - gr.top_block.__init__(self) - - # Create a SHD device source - if options.output_shorts: - self._src = shd.smini_source(device_addr=options.address, - io_type=shd.io_type.COMPLEX_INT16, - num_channels=1) - self._sink = blocks.file_sink(gr.sizeof_short*2, filename) - else: - self._src = shd.smini_source(device_addr=options.address, - io_type=shd.io_type.COMPLEX_FLOAT32, - num_channels=1) - self._sink = blocks.file_sink(gr.sizeof_gr_complex, filename) - - # Set receiver sample rate - self._src.set_samp_rate(options.samp_rate) - - # Set receive daughterboard gain - if options.gain is None: - g = self._src.get_gain_range() - options.gain = float(g.start()+g.stop())/2 - print "Using mid-point gain of", \ - options.gain, "(", g.start(), "-", g.stop(), ")" - self._src.set_gain(options.gain) - - # Set the antenna - if(options.antenna): - self._src.set_antenna(options.antenna, 0) - - # Set frequency (tune request takes lo_offset) - if(options.lo_offset is not None): - treq = shd.tune_request(options.freq, options.lo_offset) - else: - treq = shd.tune_request(options.freq) - tr = self._src.set_center_freq(treq) - if tr == None: - sys.stderr.write('Failed to set center frequency\n') - raise SystemExit, 1 - - # Create head block if needed and wire it up - if options.nsamples is None: - self.connect(self._src, self._sink) - else: - if options.output_shorts: - self._head = blocks.head(gr.sizeof_short*2, - int(options.nsamples)) - else: - self._head = blocks.head(gr.sizeof_gr_complex, - int(options.nsamples)) - - self.connect(self._src, self._head, self._sink) - - input_rate = self._src.get_samp_rate() - - if options.verbose: - print "Address:", options.address - print "Rx gain:", options.gain - print "Rx baseband frequency:", n2s(tr.actual_rf_freq) - print "Rx DDC frequency:", n2s(tr.actual_dsp_freq) - print "Rx Sample Rate:", n2s(input_rate) - if options.nsamples is None: - print "Receiving samples until Ctrl-C" - else: - print "Receving", n2s(options.nsamples), "samples" - if options.output_shorts: - print "Writing 16-bit complex shorts" - else: - print "Writing 32-bit complex floats" - print "Output filename:", filename - -def get_options(): - usage="%prog: [options] output_filename" - parser = OptionParser(option_class=eng_option, usage=usage) - parser.add_option("-a", "--address", type="string", default="type=xmini", - help="Address of SHD device, [default=%default]") - parser.add_option("-A", "--antenna", type="string", default=None, - help="select Rx Antenna where appropriate") - parser.add_option("", "--samp-rate", type="eng_float", default=1e6, - help="set sample rate (bandwidth) [default=%default]") - parser.add_option("-f", "--freq", type="eng_float", default=None, - help="set frequency to FREQ", metavar="FREQ") - parser.add_option("-g", "--gain", type="eng_float", default=None, - help="set gain in dB (default is midpoint)") - parser.add_option( "-s","--output-shorts", action="store_true", default=False, - help="output interleaved shorts instead of complex floats") - parser.add_option("-N", "--nsamples", type="eng_float", default=None, - help="number of samples to collect [default=+inf]") - parser.add_option("-v", "--verbose", action="store_true", default=False, - help="verbose output") - parser.add_option("", "--lo-offset", type="eng_float", default=None, - help="set daughterboard LO offset to OFFSET [default=hw default]") - - (options, args) = parser.parse_args () - if len(args) != 1: - parser.print_help() - raise SystemExit, 1 - - if options.freq is None: - parser.print_help() - sys.stderr.write('You must specify the frequency with -f FREQ\n'); - raise SystemExit, 1 - - return (options, args[0]) - - -if __name__ == '__main__': - (options, filename) = get_options() - tb = rx_cfile_block(options, filename) - - try: - tb.run() - except KeyboardInterrupt: - pass diff --git a/gr-shd/apps/shd_siggen b/gr-shd/apps/shd_siggen deleted file mode 100755 index ad44ef4a93..0000000000 --- a/gr-shd/apps/shd_siggen +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2011 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. -# - -""" -Read samples from a SHD device and write to file formatted as binary -outputs single precision complex float values or complex short values -(interleaved 16 bit signed short integers). -""" - -from gnuradio import gr, eng_notation -from gnuradio import analog -from gnuradio import shd -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import sys - -n2s = eng_notation.num_to_str - -class shd_siggen(gr.top_block): - - def __init__(self, options): - gr.top_block.__init__(self) - - self._src = analog.sig_source_c(options.samp_rate, - analog.GR_SIN_WAVE, - 200, 1) - - self._snk = shd.smini_sink(device_addr=options.address, - io_type=shd.io_type.COMPLEX_FLOAT32, - num_channels=1) - - # Set receiver sample rate - self._snk.set_samp_rate(options.samp_rate) - - # Set receive daughterboard gain - if options.gain is None: - g = self._snk.get_gain_range() - options.gain = float(g.start()+g.stop())/2 - print "Using mid-point gain of", \ - options.gain, "(", g.start(), "-", g.stop(), ")" - self._snk.set_gain(options.gain) - - # Set the antenna - if(options.antenna): - self._snk.set_antenna(options.antenna, 0) - - # Set frequency (tune request takes lo_offset) - if(options.lo_offset is not None): - treq = shd.tune_request(options.freq, options.lo_offset) - else: - treq = shd.tune_request(options.freq) - tr = self._snk.set_center_freq(treq) - if tr == None: - sys.stderr.write('Failed to set center frequency\n') - raise SystemExit, 1 - - # Create head block if needed and wire it up - self.connect(self._src, self._snk) - input_rate = self._snk.get_samp_rate() - - if options.verbose: - print "Address:", options.address - print "Rx gain:", options.gain - print "Rx baseband frequency:", n2s(tr.actual_rf_freq) - print "Rx DDC frequency:", n2s(tr.actual_dsp_freq) - print "Rx Sample Rate:", n2s(input_rate) - -def get_options(): - usage="%prog: [options]" - parser = OptionParser(option_class=eng_option, usage=usage) - parser.add_option("-a", "--address", type="string", default="type=xmini", - help="Address of SHD device, [default=%default]") - parser.add_option("-A", "--antenna", type="string", default=None, - help="select Rx Antenna where appropriate") - parser.add_option("", "--samp-rate", type="eng_float", default=1e6, - help="set sample rate (bandwidth) [default=%default]") - parser.add_option("-f", "--freq", type="eng_float", default=None, - help="set frequency to FREQ", metavar="FREQ") - parser.add_option("-g", "--gain", type="eng_float", default=None, - help="set gain in dB (default is midpoint)") - parser.add_option("-v", "--verbose", action="store_true", default=False, - help="verbose output") - parser.add_option("", "--lo-offset", type="eng_float", default=None, - help="set daughterboard LO offset to OFFSET [default=hw default]") - - (options, args) = parser.parse_args () - - if options.freq is None: - parser.print_help() - sys.stderr.write('You must specify the frequency with -f FREQ\n'); - raise SystemExit, 1 - - return (options) - - -if __name__ == '__main__': - options = get_options() - tb = shd_siggen(options) - - try: - tb.run() - except KeyboardInterrupt: - pass diff --git a/gr-shd/gnuradio-shd.pc.in b/gr-shd/gnuradio-shd.pc.in deleted file mode 100644 index 3d103def37..0000000000 --- a/gr-shd/gnuradio-shd.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: gnuradio-shd -Description: GNU Radio blocks for the Symplex Hardware Driver (SHD) -Requires: gnuradio-runtime -Version: @LIBVER@ -Libs: -L${libdir} -lgnuradio-shd -Cflags: -I${includedir} diff --git a/gr-shd/grc/CMakeLists.txt b/gr-shd/grc/CMakeLists.txt deleted file mode 100644 index 67a8fc13f4..0000000000 --- a/gr-shd/grc/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright 2011 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. - -######################################################################## -# Rules for generating the source and sink xml wrappers -######################################################################## -include(GrPython) - -macro(GEN_BLOCK_XML _generator _xml_block) - set(generator ${CMAKE_CURRENT_SOURCE_DIR}/${_generator}) - set(xml_block ${CMAKE_CURRENT_BINARY_DIR}/${_xml_block}) - list(APPEND xml_blocks ${xml_block}) - add_custom_command( - DEPENDS ${generator} OUTPUT ${xml_block} - COMMAND ${PYTHON_EXECUTABLE} ${generator} ${xml_block} - ) -endmacro(GEN_BLOCK_XML) - -GEN_BLOCK_XML(gen_shd_smini_blocks.py shd_smini_source.xml) -GEN_BLOCK_XML(gen_shd_smini_blocks.py shd_smini_sink.xml) - -add_custom_target(shd_grc_xml_blocks ALL DEPENDS ${xml_blocks}) - -install(FILES - ${xml_blocks} - shd_block_tree.xml - DESTINATION ${GRC_BLOCKS_DIR} - COMPONENT "shd_python" -) diff --git a/gr-shd/grc/gen_shd_smini_blocks.py b/gr-shd/grc/gen_shd_smini_blocks.py deleted file mode 100644 index 652b6cf512..0000000000 --- a/gr-shd/grc/gen_shd_smini_blocks.py +++ /dev/null @@ -1,297 +0,0 @@ -""" -Copyright 2011 Free Software Foundation, Inc. - -This file is part of GNU Radio - -GNU Radio Companion 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 2 -of the License, or (at your option) any later version. - -GNU Radio Companion 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 -""" - -MAIN_TMPL = """\ -<?xml version="1.0"?> -<block> - <name>SHD: SMINI $sourk.title()</name> - <key>shd_smini_$(sourk)</key> - <import>from gnuradio import shd</import> - <make>shd.smini_$(sourk)( - device_addr=\$dev_addr, - io_type=shd.io_type.\$type.type, - num_channels=\$nchan, -) -\#if \$clock_rate() -self.\$(id).set_clock_rate(\$clock_rate, shd.ALL_MBOARDS) -\#end if -#for $m in range($max_mboards) -######################################################################## -\#if \$num_mboards() > $m and \$ref_source$(m)() == 'external' -self.\$(id).set_clock_config(shd.clock_config.external(), $m) -\#end if -######################################################################## -\#if \$num_mboards() > $m and \$ref_source$(m)() == 'internal' -self.\$(id).set_clock_config(shd.clock_config.internal(), $m) -\#end if -######################################################################## -\#if \$num_mboards() > $m and \$ref_source$(m)() == 'mimo' -_config = shd.clock_config() -_config.ref_source = shd.clock_config.REF_MIMO -_config.pps_source = shd.clock_config.PPS_MIMO -self.\$(id).set_clock_config(_config, $m) -\#end if -######################################################################## -\#if \$num_mboards() > $m and \$sd_spec$(m)() -self.\$(id).set_subdev_spec(\$sd_spec$(m), $m) -\#end if -######################################################################## -#end for -\#if \$sync() -self.\$(id).set_time_unknown_pps(shd.time_spec()) -\#end if -self.\$(id).set_samp_rate(\$samp_rate) -#for $n in range($max_nchan) -\#if \$nchan() > $n -self.\$(id).set_center_freq(\$center_freq$(n), $n) -self.\$(id).set_gain(\$gain$(n), $n) -\#end if -#end for -</make> - <callback>set_samp_rate(\$samp_rate)</callback> - #for $n in range($max_nchan) - <callback>set_center_freq(\$center_freq$(n), $n)</callback> - <callback>set_gain(\$gain$(n), $n)</callback> - #end for - <param> - <name>$(direction.title())put Type</name> - <key>type</key> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>type:COMPLEX_FLOAT32</opt> - <opt>vlen:1</opt> - </option> - <option> - <name>Short</name> - <key>short</key> - <opt>type:COMPLEX_INT16</opt> - <opt>vlen:2</opt> - </option> - </param> - <param> - <name>Device Addr</name> - <key>dev_addr</key> - <value></value> - <type>string</type> - <hide> - \#if \$dev_addr() - none - \#else - part - \#end if - </hide> - </param> - <param> - <name>Sync</name> - <key>sync</key> - <value></value> - <type>enum</type> - <hide>\#if \$sync() then 'none' else 'part'#</hide> - <option> - <name>unknown PPS</name> - <key>sync</key> - </option> - <option> - <name>don't sync</name> - <key></key> - </option> - </param> - <param> - <name>Clock Rate (Hz)</name> - <key>clock_rate</key> - <value>0.0</value> - <type>real</type> - <hide>\#if \$clock_rate() then 'none' else 'part'#</hide> - <option> - <name>Default</name> - <key>0.0</key> - </option> - </param> - <param> - <name>Num Mboards</name> - <key>num_mboards</key> - <value>1</value> - <type>int</type> - <hide>part</hide> - #for $m in range(1, $max_mboards+1) - <option> - <name>$(m)</name> - <key>$m</key> - </option> - #end for - </param> - #for $m in range($max_mboards) - <param> - <name>Mb$(m): Ref Source</name> - <key>ref_source$(m)</key> - <value></value> - <type>enum</type> - <hide> - \#if not \$num_mboards() > $m - all - \#elif \$ref_source$(m)() - none - \#else - part - \#end if - </hide> - <option><name>Default</name><key></key></option> - <option><name>Internal</name><key>internal</key></option> - <option><name>External</name><key>external</key></option> - <option><name>MIMO Cable</name><key>mimo</key></option> - </param> - <param> - <name>Mb$(m): Subdev Spec</name> - <key>sd_spec$(m)</key> - <value></value> - <type>string</type> - <hide> - \#if not \$num_mboards() > $m - all - \#elif \$sd_spec$(m)() - none - \#else - part - \#end if - </hide> - </param> - #end for - <param> - <name>Num Channels</name> - <key>nchan</key> - <value>1</value> - <type>int</type> - #for $n in range(1, $max_nchan+1) - <option> - <name>$(n)</name> - <key>$n</key> - </option> - #end for - </param> - <param> - <name>Samp Rate (Sps)</name> - <key>samp_rate</key> - <value>samp_rate</value> - <type>real</type> - </param> - $params - <check>$max_nchan >= \$nchan</check> - <check>\$nchan > 0</check> - <check>$max_mboards >= \$num_mboards</check> - <check>\$num_mboards > 0</check> - <check>\$nchan >= \$num_mboards</check> - <$sourk> - <name>$direction</name> - <type>\$type</type> - <vlen>\$type.vlen</vlen> - <nports>\$nchan</nports> - </$sourk> - <doc> -The SHD SMINI $sourk.title() Block: - -Device Address: -The device address is a delimited string used to locate SHD devices on your system. \\ -If left blank, the first SHD device found will be used. \\ -Use the device address to specify a specific device or list of devices. -SMINI1 Example: serial=12345678 -SMINI2 Example: type=xmini - -Num Motherboards: -Selects the number of SMINI motherboards in this device configuration. - -Reference Source: -Where the motherboard should sync its time and clock references. -If source and sink blocks reference the same device, -it is only necessary to set the reference source on one of the blocks. - -Subdevice specification: -Each motherboard should have its own subdevice specification \\ -and all subdevice specifications should be the same length. \\ -Select the subdevice or subdevices for each channel using a markup string. \\ -The markup string consists of a list of dboard_slot:subdev_name pairs (one pair per channel). \\ -If left blank, the SHD will try to select the first subdevice on your system. \\ -See the application notes for further details. -Single channel example: :AB -Dual channel example: :A :B - -Num Channels: -Selects the total number of channels in this multi-SMINI configuration. -Ex: 4 motherboards with 2 channels per board = 8 channels total - -Sample rate: -The sample rate is the number of samples per second input by this block. \\ -The SHD device driver will try its best to match the requested sample rate. \\ -If the requested rate is not possible, the SHD block will print an error at runtime. - -Center frequency: -The center frequency is the overall frequency of the RF chain. \\ -For greater control of how the SHD tunes elements in the RF chain, \\ -pass a tune_request object rather than a simple target frequency. -Tuning with an LO offset example: shd.tune_request(freq, lo_off) - - </doc> -</block> -""" - -PARAMS_TMPL = """ - <param> - <name>Ch$(n): Center Freq (Hz)</name> - <key>center_freq$(n)</key> - <value>0</value> - <type>real</type> - <hide>\#if \$nchan() > $n then 'none' else 'all'#</hide> - </param> - <param> - <name>Ch$(n): Gain (dB)</name> - <key>gain$(n)</key> - <value>0</value> - <type>real</type> - <hide>\#if \$nchan() > $n then 'none' else 'all'#</hide> - </param> -""" - -def parse_tmpl(_tmpl, **kwargs): - from Cheetah import Template - return str(Template.Template(_tmpl, kwargs)) - -max_num_mboards = 8 -max_num_channels = max_num_mboards*4 - -if __name__ == '__main__': - import sys - for file in sys.argv[1:]: - if 'source' in file: - sourk = 'source' - direction = 'out' - elif 'sink' in file: - sourk = 'sink' - direction = 'in' - else: raise Exception, 'is %s a source or sink?'%file - - params = ''.join([parse_tmpl(PARAMS_TMPL, n=n) for n in range(max_num_channels)]) - open(file, 'w').write(parse_tmpl(MAIN_TMPL, - max_nchan=max_num_channels, - max_mboards=max_num_mboards, - params=params, - sourk=sourk, - direction=direction, - )) diff --git a/gr-shd/grc/shd_block_tree.xml b/gr-shd/grc/shd_block_tree.xml deleted file mode 100644 index 5d9786f67e..0000000000 --- a/gr-shd/grc/shd_block_tree.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Block Tree for shd blocks. -################################################### - --> -<cat> - <name></name> <!-- Blank for Root Name --> - <cat> - <name>SHD</name> - <block>shd_smini_source</block> - <block>shd_smini_sink</block> - </cat> -</cat> diff --git a/gr-shd/include/CMakeLists.txt b/gr-shd/include/CMakeLists.txt deleted file mode 100644 index 34349841cf..0000000000 --- a/gr-shd/include/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2011 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. - -######################################################################## -# Install header files -######################################################################## -install(FILES - gr_shd_api.h - gr_shd_smini_source.h - gr_shd_smini_sink.h - DESTINATION ${GR_INCLUDE_DIR}/gnuradio - COMPONENT "shd_devel" -) diff --git a/gr-shd/include/gr_shd_api.h b/gr-shd/include/gr_shd_api.h deleted file mode 100644 index 13b755cbdb..0000000000 --- a/gr-shd/include/gr_shd_api.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2011 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_SHD_API_H -#define INCLUDED_GR_SHD_API_H - -#include <shd/config.hpp> - -#ifdef gnuradio_shd_EXPORTS -# define GR_SHD_API SHD_EXPORT -#else -# define GR_SHD_API SHD_IMPORT -#endif - -#endif /* INCLUDED_GR_SHD_API_H */ diff --git a/gr-shd/include/gr_shd_smini_sink.h b/gr-shd/include/gr_shd_smini_sink.h deleted file mode 100644 index 48389a8c7b..0000000000 --- a/gr-shd/include/gr_shd_smini_sink.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright 2011 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_SHD_SMINI_SINK_H -#define INCLUDED_GR_SHD_SMINI_SINK_H - -#include <gr_shd_api.h> -#include <gnuradio/sync_block.h> -#include <shd/xmini/multi_xmini.hpp> - -class shd_smini_sink; - -GR_SHD_API boost::shared_ptr<shd_smini_sink> shd_make_smini_sink( - const shd::device_addr_t &device_addr, - const shd::io_type_t &io_type, - size_t num_channels -); - -class GR_SHD_API shd_smini_sink : virtual public sync_block -{ - public: - - /*! - * Set the subdevice specification. - * \param spec the subdev spec markup string - * \param mboard the motherboard index 0 to M-1 - */ - virtual void set_subdev_spec(const std::string &spec, size_t mboard = 0) = 0; - - /*! - * Set the sample rate for the smini device. - * \param rate a new rate in Sps - */ - virtual void set_samp_rate(double rate) = 0; - - /*! - * Get the sample rate for the smini device. - * This is the actual sample rate and may differ from the rate set. - * \return the actual rate in Sps - */ - virtual double get_samp_rate(void) = 0; - - /*! - * Tune the smini device to the desired center frequency. - * \param tune_request the tune request instructions - * \param chan the channel index 0 to N-1 - * \return a tune result with the actual frequencies - */ - virtual shd::tune_result_t set_center_freq( - const shd::tune_request_t tune_request, size_t chan = 0 - ) = 0; - - /*! - * Tune the smini device to the desired center frequency. - * This is a wrapper around set center freq so that in this case, - * the user can pass a single frequency in the call through swig. - * \param freq the desired frequency in Hz - * \param chan the channel index 0 to N-1 - * \return a tune result with the actual frequencies - */ - shd::tune_result_t set_center_freq(double freq, size_t chan = 0){ - return set_center_freq(shd::tune_request_t(freq), chan); - } - - /*! - * Get the center frequency. - * \param chan the channel index 0 to N-1 - * \return the frequency in Hz - */ - virtual double get_center_freq(size_t chan = 0) = 0; - - /*! - * Get the tunable frequency range. - * \param chan the channel index 0 to N-1 - * \return the frequency range in Hz - */ - virtual shd::freq_range_t get_freq_range(size_t chan = 0) = 0; - - /*! - * Set the gain for the dboard. - * \param gain the gain in dB - * \param chan the channel index 0 to N-1 - */ - virtual void set_gain(double gain, size_t chan = 0) = 0; - - /*! - * Set the named gain on the dboard. - * \param gain the gain in dB - * \param name the name of the gain stage - * \param chan the channel index 0 to N-1 - */ - virtual void set_gain(double gain, const std::string &name, - size_t chan = 0) = 0; - - /*! - * Get the actual dboard gain setting. - * \param chan the channel index 0 to N-1 - * \return the actual gain in dB - */ - virtual double get_gain(size_t chan = 0) = 0; - - /*! - * Get the actual dboard gain setting of named stage. - * \param name the name of the gain stage - * \param chan the channel index 0 to N-1 - * \return the actual gain in dB - */ - virtual double get_gain(const std::string &name, - size_t chan = 0) = 0; - - /*! - * Get the actual dboard gain setting of named stage. - * \param chan the channel index 0 to N-1 - * \return the actual gain in dB - */ - virtual std::vector<std::string> get_gain_names(size_t chan = 0) = 0; - - /*! - * Get the settable gain range. - * \param chan the channel index 0 to N-1 - * \return the gain range in dB - */ - virtual shd::gain_range_t get_gain_range(size_t chan = 0) = 0; - - /*! - * Get the settable gain range. - * \param name the name of the gain stage - * \param chan the channel index 0 to N-1 - * \return the gain range in dB - */ - virtual shd::gain_range_t get_gain_range(const std::string &name, - size_t chan = 0) = 0; - - /*! - * Set the antenna to use. - * \param ant the antenna string - * \param chan the channel index 0 to N-1 - */ - virtual void set_antenna(const std::string &ant, - size_t chan = 0) = 0; - - /*! - * Get the antenna in use. - * \param chan the channel index 0 to N-1 - * \return the antenna string - */ - virtual std::string get_antenna(size_t chan = 0) = 0; - - /*! - * Get a list of possible antennas. - * \param chan the channel index 0 to N-1 - * \return a vector of antenna strings - */ - virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; - - /*! - * Set the subdevice bandpass filter. - * \param chan the channel index 0 to N-1 - * \param bandwidth the filter bandwidth in Hz - */ - virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0; - - /*! - * Get a daughterboard sensor value. - * \param name the name of the sensor - * \param chan the channel index 0 to N-1 - * \return a sensor value object - */ - virtual shd::sensor_value_t get_dboard_sensor(const std::string &name, - size_t chan = 0) = 0; - - /*! - * Get a list of possible daughterboard sensor names. - * \param chan the channel index 0 to N-1 - * \return a vector of sensor names - */ - virtual std::vector<std::string> get_dboard_sensor_names(size_t chan = 0) = 0; - - /*! - * Get a motherboard sensor value. - * \param name the name of the sensor - * \param mboard the motherboard index 0 to M-1 - * \return a sensor value object - */ - virtual shd::sensor_value_t get_mboard_sensor(const std::string &name, - size_t mboard = 0) = 0; - - /*! - * Get a list of possible motherboard sensor names. - * \param mboard the motherboard index 0 to M-1 - * \return a vector of sensor names - */ - virtual std::vector<std::string> get_mboard_sensor_names(size_t mboard = 0) = 0; - - /*! - * Set the clock configuration. - * \param clock_config the new configuration - * \param mboard the motherboard index 0 to M-1 - */ - virtual void set_clock_config(const shd::clock_config_t &clock_config, - size_t mboard = 0) = 0; - - /*! - * Get the master clock rate. - * \param mboard the motherboard index 0 to M-1 - * \return the clock rate in Hz - */ - virtual double get_clock_rate(size_t mboard = 0) = 0; - - /*! - * Set the master clock rate. - * \param rate the new rate in Hz - * \param mboard the motherboard index 0 to M-1 - */ - virtual void set_clock_rate(double rate, size_t mboard = 0) = 0; - - /*! - * Get the current time registers. - * \param mboard the motherboard index 0 to M-1 - * \return the current smini time - */ - virtual shd::time_spec_t get_time_now(size_t mboard = 0) = 0; - - /*! - * Get the time when the last pps pulse occured. - * \param mboard the motherboard index 0 to M-1 - * \return the current smini time - */ - virtual shd::time_spec_t get_time_last_pps(size_t mboard = 0) = 0; - - /*! - * Sets the time registers immediately. - * \param time_spec the new time - * \param mboard the motherboard index 0 to M-1 - */ - virtual void set_time_now(const shd::time_spec_t &time_spec, - size_t mboard = 0) = 0; - - /*! - * Set the time registers at the next pps. - * \param time_spec the new time - */ - virtual void set_time_next_pps(const shd::time_spec_t &time_spec) = 0; - - /*! - * Sync the time registers with an unknown pps edge. - * \param time_spec the new time - */ - virtual void set_time_unknown_pps(const shd::time_spec_t &time_spec) = 0; - - /*! - * Get access to the underlying shd dboard iface object. - * \return the dboard_iface object - */ - virtual shd::xmini::dboard_iface::sptr get_dboard_iface(size_t chan = 0) = 0; - - /*! - * Get access to the underlying shd device object. - * \return the multi smini device object - */ - virtual shd::xmini::multi_xmini::sptr get_device(void) = 0; -}; - -#endif /* INCLUDED_GR_SHD_SMINI_SINK_H */ diff --git a/gr-shd/include/gr_shd_smini_source.h b/gr-shd/include/gr_shd_smini_source.h deleted file mode 100644 index a397a3b302..0000000000 --- a/gr-shd/include/gr_shd_smini_source.h +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright 2011 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_SHD_SMINI_SOURCE_H -#define INCLUDED_GR_SHD_SMINI_SOURCE_H - -#include <gr_shd_api.h> -#include <gnuradio/sync_block.h> -#include <shd/xmini/multi_xmini.hpp> - -class shd_smini_source; - -GR_SHD_API boost::shared_ptr<shd_smini_source> shd_make_smini_source( - const shd::device_addr_t &device_addr, - const shd::io_type_t &io_type, - size_t num_channels -); - -class GR_SHD_API shd_smini_source : virtual public sync_block -{ - public: - - /*! - * Set the subdevice specification. - * \param spec the subdev spec markup string - * \param mboard the motherboard index 0 to M-1 - */ - virtual void set_subdev_spec(const std::string &spec, - size_t mboard = 0) = 0; - - /*! - * Set the sample rate for the smini device. - * \param rate a new rate in Sps - */ - virtual void set_samp_rate(double rate) = 0; - - /*! - * Get the sample rate for the smini device. - * This is the actual sample rate and may differ from the rate set. - * \return the actual rate in Sps - */ - virtual double get_samp_rate(void) = 0; - - /*! - * Tune the smini device to the desired center frequency. - * \param tune_request the tune request instructions - * \param chan the channel index 0 to N-1 - * \return a tune result with the actual frequencies - */ - virtual shd::tune_result_t set_center_freq( - const shd::tune_request_t tune_request, - size_t chan = 0 - ) = 0; - - /*! - * Tune the smini device to the desired center frequency. - * This is a wrapper around set center freq so that in this case, - * the user can pass a single frequency in the call through swig. - * \param freq the desired frequency in Hz - * \param chan the channel index 0 to N-1 - * \return a tune result with the actual frequencies - */ - shd::tune_result_t set_center_freq(double freq, size_t chan = 0){ - return set_center_freq(shd::tune_request_t(freq), chan); - } - - /*! - * Get the center frequency. - * \param chan the channel index 0 to N-1 - * \return the frequency in Hz - */ - virtual double get_center_freq(size_t chan = 0) = 0; - - /*! - * Get the tunable frequency range. - * \param chan the channel index 0 to N-1 - * \return the frequency range in Hz - */ - virtual shd::freq_range_t get_freq_range(size_t chan = 0) = 0; - - /*! - * Set the gain for the dboard. - * \param gain the gain in dB - * \param chan the channel index 0 to N-1 - */ - virtual void set_gain(double gain, size_t chan = 0) = 0; - - /*! - * Set the named gain on the dboard. - * \param gain the gain in dB - * \param name the name of the gain stage - * \param chan the channel index 0 to N-1 - */ - virtual void set_gain(double gain, const std::string &name, - size_t chan = 0) = 0; - - /*! - * Get the actual dboard gain setting. - * \param chan the channel index 0 to N-1 - * \return the actual gain in dB - */ - virtual double get_gain(size_t chan = 0) = 0; - - /*! - * Get the actual dboard gain setting of named stage. - * \param name the name of the gain stage - * \param chan the channel index 0 to N-1 - * \return the actual gain in dB - */ - virtual double get_gain(const std::string &name, - size_t chan = 0) = 0; - - /*! - * Get the actual dboard gain setting of named stage. - * \param chan the channel index 0 to N-1 - * \return the actual gain in dB - */ - virtual std::vector<std::string> get_gain_names(size_t chan = 0) = 0; - - /*! - * Get the settable gain range. - * \param chan the channel index 0 to N-1 - * \return the gain range in dB - */ - virtual shd::gain_range_t get_gain_range(size_t chan = 0) = 0; - - /*! - * Get the settable gain range. - * \param name the name of the gain stage - * \param chan the channel index 0 to N-1 - * \return the gain range in dB - */ - virtual shd::gain_range_t get_gain_range(const std::string &name, - size_t chan = 0) = 0; - - /*! - * Set the antenna to use. - * \param ant the antenna string - * \param chan the channel index 0 to N-1 - */ - virtual void set_antenna(const std::string &ant, - size_t chan = 0) = 0; - - /*! - * Get the antenna in use. - * \param chan the channel index 0 to N-1 - * \return the antenna string - */ - virtual std::string get_antenna(size_t chan = 0) = 0; - - /*! - * Get a list of possible antennas. - * \param chan the channel index 0 to N-1 - * \return a vector of antenna strings - */ - virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; - - /*! - * Set the subdevice bandpass filter. - * \param bandwidth the filter bandwidth in Hz - * \param chan the channel index 0 to N-1 - */ - virtual void set_bandwidth(double bandwidth, - size_t chan = 0) = 0; - - /*! - * Get a daughterboard sensor value. - * \param name the name of the sensor - * \param chan the channel index 0 to N-1 - * \return a sensor value object - */ - virtual shd::sensor_value_t get_dboard_sensor(const std::string &name, - size_t chan = 0) = 0; - - /*! - * Get a list of possible daughterboard sensor names. - * \param chan the channel index 0 to N-1 - * \return a vector of sensor names - */ - virtual std::vector<std::string> get_dboard_sensor_names(size_t chan = 0) = 0; - - /*! - * Get a motherboard sensor value. - * \param name the name of the sensor - * \param mboard the motherboard index 0 to M-1 - * \return a sensor value object - */ - virtual shd::sensor_value_t get_mboard_sensor(const std::string &name, - size_t mboard = 0) = 0; - - /*! - * Get a list of possible motherboard sensor names. - * \param mboard the motherboard index 0 to M-1 - * \return a vector of sensor names - */ - virtual std::vector<std::string> get_mboard_sensor_names(size_t mboard = 0) = 0; - - /*! - * Set the clock configuration. - * \param clock_config the new configuration - * \param mboard the motherboard index 0 to M-1 - */ - virtual void set_clock_config(const shd::clock_config_t &clock_config, - size_t mboard = 0) = 0; - - /*! - * Get the master clock rate. - * \param mboard the motherboard index 0 to M-1 - * \return the clock rate in Hz - */ - virtual double get_clock_rate(size_t mboard = 0) = 0; - - /*! - * Set the master clock rate. - * \param rate the new rate in Hz - * \param mboard the motherboard index 0 to M-1 - */ - virtual void set_clock_rate(double rate, - size_t mboard = 0) = 0; - - /*! - * Get the current time registers. - * \param mboard the motherboard index 0 to M-1 - * \return the current smini time - */ - virtual shd::time_spec_t get_time_now(size_t mboard = 0) = 0; - - /*! - * Get the time when the last pps pulse occured. - * \param mboard the motherboard index 0 to M-1 - * \return the current smini time - */ - virtual shd::time_spec_t get_time_last_pps(size_t mboard = 0) = 0; - - /*! - * Sets the time registers immediately. - * \param time_spec the new time - * \param mboard the motherboard index 0 to M-1 - */ - virtual void set_time_now(const shd::time_spec_t &time_spec, - size_t mboard = 0) = 0; - - /*! - * Set the time registers at the next pps. - * \param time_spec the new time - */ - virtual void set_time_next_pps(const shd::time_spec_t &time_spec) = 0; - - /*! - * Sync the time registers with an unknown pps edge. - * \param time_spec the new time - */ - virtual void set_time_unknown_pps(const shd::time_spec_t &time_spec) = 0; - - /*! - * Get access to the underlying shd dboard iface object. - * \return the dboard_iface object - */ - virtual shd::xmini::dboard_iface::sptr get_dboard_iface(size_t chan = 0) = 0; - - /*! - * Get access to the underlying shd device object. - * \return the multi smini device object - */ - virtual shd::xmini::multi_xmini::sptr get_device(void) = 0; -}; - -#endif /* INCLUDED_GR_SHD_SMINI_SOURCE_H */ diff --git a/gr-shd/lib/CMakeLists.txt b/gr-shd/lib/CMakeLists.txt deleted file mode 100644 index 63db4acc80..0000000000 --- a/gr-shd/lib/CMakeLists.txt +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2011,2013 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. - -######################################################################## -# Setup the include and linker paths -######################################################################## -include_directories( - ${GR_SHD_INCLUDE_DIRS} - ${GNURADIO_RUNTIME_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} - ${SHD_INCLUDE_DIRS} -} - -link_directories(${SHD_LIBRARY_DIRS}) -link_directories(${Boost_LIBRARY_DIRS}) - -include_directories(${LOG4CPP_INCLUDE_DIRS}) -link_directories(${LOG4CPP_LIBRARY_DIRS}) - -######################################################################## -# Setup library -######################################################################## -list(APPEND gr_shd_sources - gr_shd_smini_source.cc - gr_shd_smini_sink.cc -) - -#Add Windows DLL resource file if using MSVC -if(MSVC) - include(${CMAKE_SOURCE_DIR}/cmake/Modules/GrVersion.cmake) - - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-shd.rc.in - ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-shd.rc - @ONLY) - - list(APPEND gr_shd_sources - ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-shd.rc - ) -endif(MSVC) - -list(APPEND shd_libs - gnuradio-runtime - ${Boost_LIBRARIES} - ${SHD_LIBRARIES} - ${LOG4CPP_LIBRARIES} -) - -add_library(gnuradio-shd SHARED ${gr_shd_sources}) -target_link_libraries(gnuradio-shd ${shd_libs}) -GR_LIBRARY_FOO(gnuradio-shd RUNTIME_COMPONENT "shd_runtime" DEVEL_COMPONENT "shd_devel") diff --git a/gr-shd/lib/gnuradio-shd.rc.in b/gr-shd/lib/gnuradio-shd.rc.in deleted file mode 100644 index 4a3313b0ff..0000000000 --- a/gr-shd/lib/gnuradio-shd.rc.in +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2013 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 <afxres.h> - -VS_VERSION_INFO VERSIONINFO - FILEVERSION @MAJOR_VERSION@,@API_COMPAT@,@RC_MINOR_VERSION@,@RC_MAINT_VERSION@ - PRODUCTVERSION @MAJOR_VERSION@,@API_COMPAT@,@RC_MINOR_VERSION@,@RC_MAINT_VERSION@ - FILEFLAGSMASK 0x3fL -#ifndef NDEBUG - FILEFLAGS 0x0L -#else - FILEFLAGS 0x1L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE VFT2_DRV_INSTALLABLE - BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "FileDescription", "gnuradio-shd" - VALUE "FileVersion", "@VERSION@" - VALUE "InternalName", "gnuradio-shd.dll" - VALUE "LegalCopyright", "Licensed under GPLv3 or any later version" - VALUE "OriginalFilename", "gnuradio-shd.dll" - VALUE "ProductName", "gnuradio-shd" - VALUE "ProductVersion", "@VERSION@" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END - END diff --git a/gr-shd/lib/gr_shd_smini_sink.cc b/gr-shd/lib/gr_shd_smini_sink.cc deleted file mode 100644 index c471873d73..0000000000 --- a/gr-shd/lib/gr_shd_smini_sink.cc +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright 2011 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 <gr_shd_smini_sink.h> -#include <gnuradio/io_signature.h> -#include <stdexcept> - -/********************************************************************* - * SHD Multi SMINI Sink Impl - ********************************************************************/ -class shd_smini_sink_impl : public shd_smini_sink -{ -public: - shd_smini_sink_impl(const shd::device_addr_t &device_addr, - const shd::io_type_t &io_type, - size_t num_channels): - sync_block("gr shd smini sink", - io_signature::make(num_channels, num_channels, io_type.size), - io_signature::make(0, 0, 0)), - _type(io_type), - _nchan(num_channels), - _has_time_spec(_nchan > 1) - { - _dev = shd::xmini::multi_xmini::make(device_addr); - } - - void set_subdev_spec(const std::string &spec, - size_t mboard) - { - return _dev->set_tx_subdev_spec(spec, mboard); - } - - void set_samp_rate(double rate){ - _dev->set_tx_rate(rate); - _sample_rate = this->get_samp_rate(); - } - - double get_samp_rate(void){ - return _dev->get_tx_rate(); - } - - shd::tune_result_t set_center_freq( - const shd::tune_request_t tune_request, size_t chan) - { - return _dev->set_tx_freq(tune_request, chan); - } - - double get_center_freq(size_t chan) - { - return _dev->get_tx_freq(chan); - } - - shd::freq_range_t get_freq_range(size_t chan) - { - return _dev->get_tx_freq_range(chan); - } - - void set_gain(double gain, size_t chan) - { - return _dev->set_tx_gain(gain, chan); - } - - void set_gain(double gain, const std::string &name, - size_t chan) - { - return _dev->set_tx_gain(gain, name, chan); - } - - double get_gain(size_t chan){ - return _dev->get_tx_gain(chan); - } - - double get_gain(const std::string &name, size_t chan) - { - return _dev->get_tx_gain(name, chan); - } - - std::vector<std::string> get_gain_names(size_t chan) - { - return _dev->get_tx_gain_names(chan); - } - - shd::gain_range_t get_gain_range(size_t chan) - { - return _dev->get_tx_gain_range(chan); - } - - shd::gain_range_t get_gain_range(const std::string &name, - size_t chan) - { - return _dev->get_tx_gain_range(name, chan); - } - - void set_antenna(const std::string &ant, size_t chan) - { - return _dev->set_tx_antenna(ant, chan); - } - - std::string get_antenna(size_t chan) - { - return _dev->get_tx_antenna(chan); - } - - std::vector<std::string> get_antennas(size_t chan) - { - return _dev->get_tx_antennas(chan); - } - - void set_bandwidth(double bandwidth, size_t chan) - { - return _dev->set_tx_bandwidth(bandwidth, chan); - } - - shd::sensor_value_t get_dboard_sensor(const std::string &name, - size_t chan) - { - return _dev->get_tx_sensor(name, chan); - } - - std::vector<std::string> get_dboard_sensor_names(size_t chan) - { - return _dev->get_tx_sensor_names(chan); - } - - shd::sensor_value_t get_mboard_sensor(const std::string &name, - size_t mboard) - { - return _dev->get_mboard_sensor(name, mboard); - } - - std::vector<std::string> get_mboard_sensor_names(size_t mboard) - { - return _dev->get_mboard_sensor_names(mboard); - } - - void set_clock_config(const shd::clock_config_t &clock_config, - size_t mboard) - { - return _dev->set_clock_config(clock_config, mboard); - } - - double get_clock_rate(size_t mboard) - { - return _dev->get_master_clock_rate(mboard); - } - - void set_clock_rate(double rate, size_t mboard) - { - return _dev->set_master_clock_rate(rate, mboard); - } - - shd::time_spec_t get_time_now(size_t mboard = 0) - { - return _dev->get_time_now(mboard); - } - - shd::time_spec_t get_time_last_pps(size_t mboard) - { - return _dev->get_time_last_pps(mboard); - } - - void set_time_now(const shd::time_spec_t &time_spec, - size_t mboard) - { - return _dev->set_time_now(time_spec, mboard); - } - - void set_time_next_pps(const shd::time_spec_t &time_spec) - { - return _dev->set_time_next_pps(time_spec); - } - - void set_time_unknown_pps(const shd::time_spec_t &time_spec) - { - return _dev->set_time_unknown_pps(time_spec); - } - - shd::xmini::dboard_iface::sptr get_dboard_iface(size_t chan) - { - return _dev->get_tx_dboard_iface(chan); - } - - shd::xmini::multi_xmini::sptr get_device(void) - { - return _dev; - } - - /******************************************************************* - * Work - ******************************************************************/ - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) - { - //send a mid-burst packet with time spec - _metadata.start_of_burst = false; - _metadata.end_of_burst = false; - _metadata.has_time_spec = _has_time_spec; - - size_t num_sent = _dev->get_device()->send( - input_items, noutput_items, _metadata, - _type, shd::device::SEND_MODE_FULL_BUFF, 1.0); - - //increment the timespec by the number of samples sent - _metadata.time_spec += shd::time_spec_t(0, num_sent, _sample_rate); - return num_sent; - } - - //Send an empty start-of-burst packet to begin streaming. - //Set at a time in the near future to avoid late packets. - bool start(void) - { - _metadata.start_of_burst = true; - _metadata.end_of_burst = false; - _metadata.has_time_spec = _has_time_spec; - _metadata.time_spec = get_time_now() + shd::time_spec_t(0.01); - - _dev->get_device()->send( - gr_vector_const_void_star(_nchan), 0, _metadata, - _type, shd::device::SEND_MODE_ONE_PACKET, 1.0); - return true; - } - - //Send an empty end-of-burst packet to end streaming. - //Ending the burst avoids an underflow error on stop. - bool stop(void) - { - _metadata.start_of_burst = false; - _metadata.end_of_burst = true; - _metadata.has_time_spec = false; - - _dev->get_device()->send( - gr_vector_const_void_star(_nchan), 0, _metadata, - _type, shd::device::SEND_MODE_ONE_PACKET, 1.0); - return true; - } - -protected: - shd::xmini::multi_xmini::sptr _dev; - const shd::io_type_t _type; - size_t _nchan; - bool _has_time_spec; - shd::tx_metadata_t _metadata; - double _sample_rate; -}; - -/********************************************************************* - * Make SHD Multi SMINI Sink - ********************************************************************/ - -boost::shared_ptr<shd_smini_sink> shd_make_smini_sink( - const shd::device_addr_t &device_addr, - const shd::io_type_t &io_type, - size_t num_channels) -{ - return boost::shared_ptr<shd_smini_sink>( - new shd_smini_sink_impl(device_addr, io_type, num_channels)); -} diff --git a/gr-shd/lib/gr_shd_smini_source.cc b/gr-shd/lib/gr_shd_smini_source.cc deleted file mode 100644 index 684eb343b6..0000000000 --- a/gr-shd/lib/gr_shd_smini_source.cc +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright 2011 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 <gr_shd_smini_source.h> -#include <gnuradio/io_signature.h> -#include <stdexcept> -#include <iostream> -#include <boost/format.hpp> - -/********************************************************************* - * SHD Multi S-MINI Source Impl - ********************************************************************/ -class shd_smini_source_impl : public shd_smini_source -{ -public: - shd_smini_source_impl( - const shd::device_addr_t &device_addr, - const shd::io_type_t &io_type, - size_t num_channels - ): - sync_block( - "gr shd smini source", - io_signature::make(0, 0, 0), - io_signature::make(num_channels, num_channels, io_type.size) - ), - _type(io_type), - _nchan(num_channels), - _stream_now(_nchan == 1), - _tmp_buffs(_nchan) - { - _dev = shd::xmini::multi_xmini::make(device_addr); - } - - void set_subdev_spec(const std::string &spec, size_t mboard) - { - return _dev->set_rx_subdev_spec(spec, mboard); - } - - void set_samp_rate(double rate) - { - _dev->set_rx_rate(rate); - } - - double get_samp_rate(void) - { - return _dev->get_rx_rate(); - } - - shd::tune_result_t set_center_freq( - const shd::tune_request_t tune_request, size_t chan) - { - return _dev->set_rx_freq(tune_request, chan); - } - - double get_center_freq(size_t chan) - { - return _dev->get_rx_freq(chan); - } - - shd::freq_range_t get_freq_range(size_t chan) - { - return _dev->get_rx_freq_range(chan); - } - - void set_gain(double gain, size_t chan) - { - return _dev->set_rx_gain(gain, chan); - } - - void set_gain(double gain, const std::string &name, - size_t chan) - { - return _dev->set_rx_gain(gain, name, chan); - } - - double get_gain(size_t chan) - { - return _dev->get_rx_gain(chan); - } - - double get_gain(const std::string &name, size_t chan) - { - return _dev->get_rx_gain(name, chan); - } - - std::vector<std::string> get_gain_names(size_t chan) - { - return _dev->get_rx_gain_names(chan); - } - - shd::gain_range_t get_gain_range(size_t chan) - { - return _dev->get_rx_gain_range(chan); - } - - shd::gain_range_t get_gain_range(const std::string &name, - size_t chan) - { - return _dev->get_rx_gain_range(name, chan); - } - - void set_antenna(const std::string &ant, size_t chan) - { - return _dev->set_rx_antenna(ant, chan); - } - - std::string get_antenna(size_t chan) - { - return _dev->get_rx_antenna(chan); - } - - std::vector<std::string> get_antennas(size_t chan) - { - return _dev->get_rx_antennas(chan); - } - - void set_bandwidth(double bandwidth, size_t chan) - { - return _dev->set_rx_bandwidth(bandwidth, chan); - } - - shd::sensor_value_t get_dboard_sensor(const std::string &name, - size_t chan) - { - return _dev->get_rx_sensor(name, chan); - } - - std::vector<std::string> get_dboard_sensor_names(size_t chan) - { - return _dev->get_rx_sensor_names(chan); - } - - shd::sensor_value_t get_mboard_sensor(const std::string &name, - size_t mboard) - { - return _dev->get_mboard_sensor(name, mboard); - } - - std::vector<std::string> get_mboard_sensor_names(size_t mboard) - { - return _dev->get_mboard_sensor_names(mboard); - } - - void set_clock_config(const shd::clock_config_t &clock_config, - size_t mboard) - { - return _dev->set_clock_config(clock_config, mboard); - } - - double get_clock_rate(size_t mboard) - { - return _dev->get_master_clock_rate(mboard); - } - - void set_clock_rate(double rate, size_t mboard) - { - return _dev->set_master_clock_rate(rate, mboard); - } - - shd::time_spec_t get_time_now(size_t mboard = 0) - { - return _dev->get_time_now(mboard); - } - - shd::time_spec_t get_time_last_pps(size_t mboard) - { - return _dev->get_time_last_pps(mboard); - } - - void set_time_now(const shd::time_spec_t &time_spec, - size_t mboard) - { - return _dev->set_time_now(time_spec, mboard); - } - - void set_time_next_pps(const shd::time_spec_t &time_spec) - { - return _dev->set_time_next_pps(time_spec); - } - - void set_time_unknown_pps(const shd::time_spec_t &time_spec) - { - return _dev->set_time_unknown_pps(time_spec); - } - - shd::xmini::dboard_iface::sptr get_dboard_iface(size_t chan) - { - return _dev->get_rx_dboard_iface(chan); - } - - shd::xmini::multi_xmini::sptr get_device(void) - { - return _dev; - } - - /******************************************************************* - * Work - ******************************************************************/ - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) - { - //In order to allow for low-latency: - //We receive all available packets without timeout. - //This call can timeout under regular operation... - size_t num_samps = _dev->get_device()->recv( - output_items, noutput_items, _metadata, - _type, shd::device::RECV_MODE_FULL_BUFF, 0.0); - - //If receive resulted in a timeout condition: - //We now receive a single packet with a large timeout. - if(_metadata.error_code == shd::rx_metadata_t::ERROR_CODE_TIMEOUT) { - num_samps = _dev->get_device()->recv( - output_items, noutput_items, _metadata, - _type, shd::device::RECV_MODE_ONE_PACKET, 1.0); - } - - //handle possible errors conditions - switch(_metadata.error_code) { - case shd::rx_metadata_t::ERROR_CODE_NONE: - //TODO insert tag for time stamp - break; - - case shd::rx_metadata_t::ERROR_CODE_TIMEOUT: - //Assume that the user called stop() on the flow graph. - //However, a timeout can occur under error conditions. - return WORK_DONE; - - case shd::rx_metadata_t::ERROR_CODE_OVERFLOW: - //ignore overflows and try work again - //TODO insert tag for overflow - return work(noutput_items, input_items, output_items); - - default: - std::cout << boost::format("SHD source block got error code 0x%x" - ) % _metadata.error_code << std::endl; - return num_samps; - } - - return num_samps; - } - - bool start(void) - { - //setup a stream command that starts streaming slightly in the future - static const double reasonable_delay = 0.1; //order of magnitude over RTT - shd::stream_cmd_t stream_cmd(shd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); - stream_cmd.stream_now = _stream_now; - stream_cmd.time_spec = get_time_now() + shd::time_spec_t(reasonable_delay); - _dev->issue_stream_cmd(stream_cmd); - return true; - } - - bool stop(void) - { - _dev->issue_stream_cmd(shd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS); - return true; - } - -private: - shd::xmini::multi_xmini::sptr _dev; - const shd::io_type_t _type; - size_t _nchan; - bool _stream_now; - gr_vector_void_star _tmp_buffs; - shd::rx_metadata_t _metadata; -}; - - -/********************************************************************* - * Make SHD Multi SMINI Source - ********************************************************************/ - -boost::shared_ptr<shd_smini_source> shd_make_smini_source( - const shd::device_addr_t &device_addr, - const shd::io_type_t &io_type, - size_t num_channels) -{ - return boost::shared_ptr<shd_smini_source>( - new shd_smini_source_impl(device_addr, io_type, num_channels)); -} diff --git a/gr-shd/swig/CMakeLists.txt b/gr-shd/swig/CMakeLists.txt deleted file mode 100644 index 51fd55f18a..0000000000 --- a/gr-shd/swig/CMakeLists.txt +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright 2011 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. - -######################################################################## -# Setup swig generation -######################################################################## -include(GrPython) -include(GrSwig) - -set(GR_SWIG_FLAGS -DGR_HAVE_SHD) #needed to parse shd_swig.i - -set(GR_SWIG_INCLUDE_DIRS - ${GR_SHD_INCLUDE_DIRS} - ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} - ${SHD_INCLUDE_DIRS} -) - -if(ENABLE_GR_CTRLPORT) - list(APPEND GR_SWIG_FLAGS "-DGR_CTRLPORT") - list(APPEND GR_SWIG_INCLUDE_DIRS ${ICE_INCLUDE_DIR}) -endif(ENABLE_GR_CTRLPORT) - -set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/shd_swig_doc.i) -set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include) -set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc) - -link_directories(${SHD_LIBRARY_DIRS}) -set(GR_SWIG_LIBRARIES gnuradio-shd ${SHD_LIBRARIES}) - -GR_SWIG_MAKE(shd_swig shd_swig.i) - -GR_SWIG_INSTALL( - TARGETS shd_swig - DESTINATION ${GR_PYTHON_DIR}/gnuradio/shd - COMPONENT "shd_python" -) - -install( - FILES shd_swig.i - ${CMAKE_CURRENT_BINARY_DIR}/shd_swig_doc.i - DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig - COMPONENT "shd_swig" -) - -GR_PYTHON_INSTALL( - FILES __init__.py - DESTINATION ${GR_PYTHON_DIR}/gnuradio/shd - COMPONENT "shd_python" -) diff --git a/gr-shd/swig/__init__.py b/gr-shd/swig/__init__.py deleted file mode 100644 index a9dea94200..0000000000 --- a/gr-shd/swig/__init__.py +++ /dev/null @@ -1,92 +0,0 @@ -# -# Copyright 2011 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. -# - -''' -GNU Radio package for the Symplex Hardware Driver. -''' - -######################################################################## -# Prepare shd swig module to make it more pythonic -######################################################################## -def _prepare_shd_swig(): - import shd_swig - - #some useful typedefs for the user - setattr(shd_swig, 'freq_range_t', shd_swig.meta_range_t) - setattr(shd_swig, 'gain_range_t', shd_swig.meta_range_t) - - #Make the python tune request object inherit from float - #so that it can be passed in GRC as a frequency parameter. - #The type checking in GRC will accept the tune request. - class tune_request_t(shd_swig.tune_request_t, float): - def __new__(self, *args): return float.__new__(self) - def __float__(self): return self.target_freq - setattr(shd_swig, 'tune_request_t', tune_request_t) - - #Make the python tune request object inherit from string - #so that it can be passed in GRC as a string parameter. - #The type checking in GRC will accept the device address. - #Define the set/get item special methods for dict access. - class device_addr_t(shd_swig.device_addr_t, str): - def __new__(self, *args): return str.__new__(self) - def __getitem__(self, key): return self.get(key) - def __setitem__(self, key, val): self.set(key, val) - setattr(shd_swig, 'device_addr_t', device_addr_t) - - #handle general things on all shd_swig attributes - #Install the __str__ and __repr__ handlers if applicable - #Create aliases for shd swig attributes to avoid the "_t" - for attr in dir(shd_swig): - myobj = getattr(shd_swig, attr) - if hasattr(myobj, 'to_string'): myobj.__repr__ = lambda o: o.to_string().strip() - if hasattr(myobj, 'to_pp_string'): myobj.__str__ = lambda o: o.to_pp_string().strip() - if hasattr(myobj, 'to_bool'): myobj.__nonzero__ = lambda o: o.to_bool() - if hasattr(myobj, 'to_int'): myobj.__int__ = lambda o: o.to_int() - if hasattr(myobj, 'to_real'): myobj.__float__ = lambda o: o.to_real() - if attr.endswith('_t'): setattr(shd_swig, attr[:-2], myobj) - - #Cast constructor args (FIXME swig handle overloads?) - for attr in ('smini_source', 'smini_sink'): - def constructor_factory(old_constructor): - def constructor_interceptor(*args, **kwargs): - args = list(args) - kwargs = dict(kwargs) - for index, key, cast in ( - (0, 'device_addr', device_addr), - (1, 'io_type', io_type), - ): - if len(args) > index: args[index] = cast(args[index]) - if kwargs.has_key(key): kwargs[key] = cast(kwargs[key]) - return old_constructor(*args, **kwargs) - return constructor_interceptor - setattr(shd_swig, attr, constructor_factory(getattr(shd_swig, attr))) - - #Aliases for deprecated constructors - setattr(shd_swig, 'single_smini_source', shd_swig.smini_source) - setattr(shd_swig, 'single_smini_sink', shd_swig.smini_sink) - setattr(shd_swig, 'multi_smini_source', shd_swig.smini_source) - setattr(shd_swig, 'multi_smini_sink', shd_swig.smini_sink) - -######################################################################## -# Initialize this module with the contents of shd swig -######################################################################## -_prepare_shd_swig() -from shd_swig import * diff --git a/gr-shd/swig/gnuradio/shd.scm b/gr-shd/swig/gnuradio/shd.scm deleted file mode 100644 index 91af98dd86..0000000000 --- a/gr-shd/swig/gnuradio/shd.scm +++ /dev/null @@ -1,27 +0,0 @@ -;;; -;;; Copyright 2011 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, see <http://www.gnu.org/licenses/>. -;;; - -;;; Semi bogus module that just reexports the shd_swig module - -(define-module (gnuradio shd) - #:use-module (gnuradio export-safely) - #:use-module (gnuradio shd_swig) - #:duplicates (merge-generics replace check)) - -(re-export-all '(gnuradio shd_swig)) diff --git a/gr-shd/swig/qa_shd.py b/gr-shd/swig/qa_shd.py deleted file mode 100755 index a589fee432..0000000000 --- a/gr-shd/swig/qa_shd.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005,2008,2010 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, gr_unittest -import shd_swig - -class test_shd(gr_unittest.TestCase): - - def setUp(self): - self.tb = gr.top_block() - - def tearDown(self): - self.tb = None - - def test_000_nop (self): - """Just see if we can import the module... - They may not have a SHD device connected, etc. Don't try to run anything""" - pass - -if __name__ == '__main__': - gr_unittest.run(test_shd, "test_shd.xml") diff --git a/gr-shd/swig/shd_swig.i b/gr-shd/swig/shd_swig.i deleted file mode 100644 index 7b1c1782ec..0000000000 --- a/gr-shd/swig/shd_swig.i +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011 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. - */ - -// Defined during configure; avoids trying to locate -// header files if SHD was not installed. -#ifdef GR_HAVE_SHD - -#define GR_SHD_API - -//load generated python docstrings -%include "shd_swig_doc.i" - -//////////////////////////////////////////////////////////////////////// -// Language independent exception handler -//////////////////////////////////////////////////////////////////////// -%include exception.i - -%exception { - try { - $action - } - catch(std::exception &e) { - SWIG_exception(SWIG_RuntimeError, e.what()); - } - catch(...) { - SWIG_exception(SWIG_RuntimeError, "Unknown exception"); - } - -} - -//////////////////////////////////////////////////////////////////////// -// standard includes -//////////////////////////////////////////////////////////////////////// -%include "runtime_swig.i" - -//////////////////////////////////////////////////////////////////////// -// block headers -//////////////////////////////////////////////////////////////////////// -%{ -#include <gr_shd_smini_source.h> -#include <gr_shd_smini_sink.h> -%} - -//////////////////////////////////////////////////////////////////////// -// used types -//////////////////////////////////////////////////////////////////////// - -%include <shd/config.hpp> - -%include <shd/utils/pimpl.hpp> - -%ignore shd::dict::operator[]; //ignore warnings about %extend -%include <shd/types/dict.hpp> -%template(string_string_dict_t) shd::dict<std::string, std::string>; //define after dict - -%include <shd/types/device_addr.hpp> - -%include <shd/types/io_type.hpp> - -%template(range_vector_t) std::vector<shd::range_t>; //define before range -%include <shd/types/ranges.hpp> - -%include <shd/types/tune_request.hpp> - -%include <shd/types/tune_result.hpp> - -%include <shd/types/io_type.hpp> - -%include <shd/types/time_spec.hpp> - -%include <shd/types/clock_config.hpp> - -%include <shd/types/metadata.hpp> - -%ignore shd::device::register_device; //causes compile to choke in MSVC -%include <shd/device.hpp> -%template(device_addr_vector_t) std::vector<shd::device_addr_t>; - -%include <shd/types/sensors.hpp> - -//////////////////////////////////////////////////////////////////////// -// swig dboard_iface for python access -//////////////////////////////////////////////////////////////////////// -%include stdint.i -%include <shd/types/serial.hpp> -%include <shd/xmini/dboard_iface.hpp> - -%template(dboard_iface_sptr) boost::shared_ptr<shd::xmini::dboard_iface>; - -//////////////////////////////////////////////////////////////////////// -// block magic -//////////////////////////////////////////////////////////////////////// -GR_SWIG_BLOCK_MAGIC(shd,smini_source) -%include <gr_shd_smini_source.h> - -GR_SWIG_BLOCK_MAGIC(shd,smini_sink) -%include <gr_shd_smini_sink.h> - -//////////////////////////////////////////////////////////////////////// -// helpful constants -//////////////////////////////////////////////////////////////////////// -%{ -static const size_t ALL_MBOARDS = shd::xmini::multi_xmini::ALL_MBOARDS; -%} -static const size_t ALL_MBOARDS; - -#endif /* GR_HAVE_SHD */ |