diff options
Diffstat (limited to 'gr-ezdop/src')
-rw-r--r-- | gr-ezdop/src/Makefile.am | 22 | ||||
-rw-r--r-- | gr-ezdop/src/lib/Makefile.am | 102 | ||||
-rw-r--r-- | gr-ezdop/src/lib/ezdop.i | 46 | ||||
-rw-r--r-- | gr-ezdop/src/lib/ezdop_source_c.cc | 113 | ||||
-rw-r--r-- | gr-ezdop/src/lib/ezdop_source_c.h | 58 | ||||
-rw-r--r-- | gr-ezdop/src/python/Makefile.am | 32 | ||||
-rwxr-xr-x | gr-ezdop/src/python/qa_ezdop.py | 52 | ||||
-rw-r--r-- | gr-ezdop/src/python/run_tests.in | 51 |
8 files changed, 476 insertions, 0 deletions
diff --git a/gr-ezdop/src/Makefile.am b/gr-ezdop/src/Makefile.am new file mode 100644 index 000000000..ab35b4531 --- /dev/null +++ b/gr-ezdop/src/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2006 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 2, 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., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# + +SUBDIRS = lib python diff --git a/gr-ezdop/src/lib/Makefile.am b/gr-ezdop/src/lib/Makefile.am new file mode 100644 index 000000000..b22d134ec --- /dev/null +++ b/gr-ezdop/src/lib/Makefile.am @@ -0,0 +1,102 @@ +# +# Copyright 2004,2005,2006 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 2, 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., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# + +include $(top_srcdir)/Makefile.common + +# Install this stuff so that it ends up as the gnuradio.ezdop module +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio + +ourpythondir = $(grpythondir) +ourlibdir = $(grpyexecdir) + +EZDOP_INCLUDES = \ + -I$(top_srcdir)/ezdop/src/firmware \ + -I$(top_srcdir)/ezdop/src/host/ezdop + +EZDOP_LIBS = -L$(top_builddir)/ezdop/src/host/ezdop/ -lezdop + +INCLUDES = \ + $(STD_DEFINES_AND_INCLUDES) \ + $(PYTHON_CPPFLAGS) \ + $(EZDOP_INCLUDES) + +SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) + +ALL_IFILES = \ + $(LOCAL_IFILES) \ + $(NON_LOCAL_IFILES) + +NON_LOCAL_IFILES = \ + $(GNURADIO_I) + + +LOCAL_IFILES = \ + ezdop.i + +# These files are built by SWIG. The first is the C++ glue. +# The second is the python wrapper that loads the _ezdop shared library +# and knows how to call our extensions. + +BUILT_SOURCES = \ + ezdop.cc \ + ezdop.py + +# This gets ezdop.py installed in the right place +ourpython_PYTHON = \ + ezdop.py + +ourlib_LTLIBRARIES = _ezdop.la + +# These are the source files that go into the shared library +_ezdop_la_SOURCES = \ + ezdop.cc \ + ezdop_source_c.cc + +# magic flags +_ezdop_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version + +# link the library against some comon swig runtime code and the +# c++ standard library +_ezdop_la_LIBADD = \ + $(PYTHON_LDFLAGS) \ + $(GNURADIO_CORE_LIBS) \ + $(EZDOP_LIBS) \ + -lstdc++ + +ezdop.cc ezdop.py: $(ALL_IFILES) + $(SWIG) $(SWIGPYTHONARGS) -module ezdop -o ezdop.cc $< + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + ezdop_source_c.h + + +# These swig headers get installed in ${prefix}/include/gnuradio/swig +swiginclude_HEADERS = \ + $(LOCAL_IFILES) + +MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc + +# Don't distribute output of swig +dist-hook: + @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done + @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done diff --git a/gr-ezdop/src/lib/ezdop.i b/gr-ezdop/src/lib/ezdop.i new file mode 100644 index 000000000..d267b5ca7 --- /dev/null +++ b/gr-ezdop/src/lib/ezdop.i @@ -0,0 +1,46 @@ +/* + * Copyright 2004,2006 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 2, 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +//%feature("autodoc", "1"); // generate python docstrings + +%include "exception.i" +%import "gnuradio.i" // the common stuff + +%{ +#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix +#include "ezdop_source_c.h" +%} + +GR_SWIG_BLOCK_MAGIC(ezdop,source_c); + +ezdop_source_c_sptr ezdop_make_source_c(); + +class ezdop_source_c : public gr_sync_block +{ +private: + ezdop_source_c() throw (std::runtime_error); + +public: + int rate(); + bool set_rate(int rate); + bool rotate(); + bool stop_rotating(); +}; diff --git a/gr-ezdop/src/lib/ezdop_source_c.cc b/gr-ezdop/src/lib/ezdop_source_c.cc new file mode 100644 index 000000000..38cb5dd07 --- /dev/null +++ b/gr-ezdop/src/lib/ezdop_source_c.cc @@ -0,0 +1,113 @@ +/* + * Copyright 2004,2006 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 2, 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <ezdop_source_c.h> +#include <gr_io_signature.h> + +ezdop_source_c_sptr ezdop_make_source_c() +{ + return ezdop_source_c_sptr(new ezdop_source_c()); +} + +ezdop_source_c::ezdop_source_c() throw (std::runtime_error) : + gr_sync_block("ezdop_source_c", + gr_make_io_signature(0, 0, 0), + gr_make_io_signature(1, 1, sizeof (gr_complex)) + ) +{ + d_ezdop = new ezdop(); + + if (!d_ezdop->init()) + throw std::runtime_error("unable to init ezdop hardware"); + if (!d_ezdop->reset()) + throw std::runtime_error("unable to reset ezdop hardware"); +} + +ezdop_source_c::~ezdop_source_c() +{ + assert(d_ezdop); + d_ezdop->finish(); + delete d_ezdop; +} + +bool ezdop_source_c::start() +{ + assert(d_ezdop); + bool success = d_ezdop->stream(); + if (!success) + fprintf(stderr, "ezdop_source_c::start(): unable to start streaming\n"); + return success; +} + +bool ezdop_source_c::stop() +{ + assert(d_ezdop); + bool success = d_ezdop->stop_streaming(); + if (!success) + fprintf(stderr, "ezdop_source_c::start(): unable to stop streaming\n"); + return success; +} + +int ezdop_source_c::rate() +{ + assert(d_ezdop); + return d_ezdop->rate(); +} + +bool ezdop_source_c::set_rate(int rate) +{ + assert(d_ezdop); + if (rate <= 0 || rate > 2000) + return false; + bool success = d_ezdop->set_rate(rate); + return success; +} + +bool ezdop_source_c::rotate() +{ + assert(d_ezdop); + bool success = d_ezdop->rotate(); + if (!success) + fprintf(stderr, "ezdop_source_c::rotate(): unable to start rotating\n"); + return success; +} + +bool ezdop_source_c::stop_rotating() +{ + assert(d_ezdop); + bool success = d_ezdop->stop_rotating(); + if (!success) + fprintf(stderr, "ezdop_source_c::stop_rotating(): unable to stop rotating\n"); + return success; +} + +int ezdop_source_c::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert(d_ezdop); + gr_complex *out = (gr_complex *)output_items[0]; + return d_ezdop->read_iq(out, noutput_items); +} diff --git a/gr-ezdop/src/lib/ezdop_source_c.h b/gr-ezdop/src/lib/ezdop_source_c.h new file mode 100644 index 000000000..dd56cdf16 --- /dev/null +++ b/gr-ezdop/src/lib/ezdop_source_c.h @@ -0,0 +1,58 @@ +/* + * Copyright 2004,2006 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 2, 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef INCLUDED_EZDOP_SOURCE_C_H +#define INCLUDED_EZDOP_SOURCE_C_H + +#include <gr_sync_block.h> +#include <ezdop.h> +#include <stdexcept> + +class ezdop_source_c; +typedef boost::shared_ptr<ezdop_source_c> ezdop_source_c_sptr; + +ezdop_source_c_sptr ezdop_make_source_c(); + +class ezdop_source_c : public gr_sync_block { +private: + friend ezdop_source_c_sptr ezdop_make_source_c(); + ezdop_source_c() throw (std::runtime_error); + + ezdop *d_ezdop; + +public: + virtual bool start(); // Called by runtime + virtual bool stop(); // Called by runtime + + int rate(); + bool set_rate(int rate); // Any integer divisor of 2000 Hz + + bool rotate(); + bool stop_rotating(); + + ~ezdop_source_c(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_EZDOP_SOURCE_C_H */ diff --git a/gr-ezdop/src/python/Makefile.am b/gr-ezdop/src/python/Makefile.am new file mode 100644 index 000000000..dc40b4040 --- /dev/null +++ b/gr-ezdop/src/python/Makefile.am @@ -0,0 +1,32 @@ +# +# Copyright 2004 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 2, 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., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = run_tests.in + + +TESTS = \ + run_tests + + +noinst_PYTHON = \ + qa_ezdop.py diff --git a/gr-ezdop/src/python/qa_ezdop.py b/gr-ezdop/src/python/qa_ezdop.py new file mode 100755 index 000000000..47d26a791 --- /dev/null +++ b/gr-ezdop/src/python/qa_ezdop.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# +# Copyright 2004 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 2, 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., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# + +from gnuradio import gr, gr_unittest +import ezdop + +class qa_ezdop(gr_unittest.TestCase): + + def setUp (self): + self.fg = gr.flow_graph () + + def tearDown (self): + self.fg = None +""" + def test_001_installed(self): + DOP = ezdop.source_c(); + + def test_002_start_stop(self): + DOP = ezdop.source_c(); + DOP.set_rate(1000); + print "rate =", DOP.rate() + DOP.rotate(); + + self.fg.connect(DOP, gr.null_sink(gr.sizeof_gr_complex)) + try: + self.fg.run() + except KeyboardInterrupt: + pass + DOP.stop_rotating(); +""" + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gr-ezdop/src/python/run_tests.in b/gr-ezdop/src/python/run_tests.in new file mode 100644 index 000000000..728da1de1 --- /dev/null +++ b/gr-ezdop/src/python/run_tests.in @@ -0,0 +1,51 @@ +#!/bin/sh + +# All this strange PYTHONPATH manipulation is required to run our +# tests using our just built shared library and swig-generated python +# code prior to installation. + +# build tree == src tree unless you're doing a VPATH build. +# If you don't know what a VPATH build is, you're not doing one. Relax... + +prefix=@prefix@ +exec_prefix=@exec_prefix@ + +# Where to look in the build tree for our shared library +libbld=@abs_top_builddir@/gr-ezdop/src/lib +# Where to look in the src tree for swig generated python code +libsrc=@abs_top_srcdir@/gr-ezdop/src/lib +# Where to look in the src tree for hand written python code +py=@abs_top_srcdir@/gr-ezdop/src/lib + +# Where to look for GNU Radio python modules in current build tree +grbld=@abs_top_srcdir@/gnuradio-core/src/python +grbld=$grbld:@abs_top_builddir@/gnuradio-core/src/lib/swig +grbld=$grbld:@abs_top_builddir@/gnuradio-core/src/lib/swig/.libs + +PYTHONPATH="$grbld:$libbld:$libbld/.libs:$libsrc:$py:$PYTHONPATH" +export PYTHONPATH + +# For OS/X +DYLD_LIBRARY_PATH=@abs_top_builddir@/gnuradio-core/src/lib/.libs:@abs_top_builddir@/ezdop/src/host/ezdop/.libs +export DYLD_LIBRARY_PATH + +# +# This is the simple part... +# Run everything that matches qa_*.py and return the final result. +# + +ok=yes +for file in @srcdir@/qa_*.py +do + if ! $file + then + ok=no + fi +done + +if [ $ok = yes ] +then + exit 0 +else + exit 1 +fi |