[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5559 - gnuradio/branches/developers/jcorgan/snd/gr-so
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r5559 - gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python |
Date: |
Mon, 28 May 2007 15:41:22 -0600 (MDT) |
Author: jcorgan
Date: 2007-05-28 15:41:22 -0600 (Mon, 28 May 2007)
New Revision: 5559
Added:
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder.py
Removed:
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/test_lp.sh
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/test_rx.sh
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/test_tx.sh
Modified:
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/Makefile.am
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/usrp_sounder.py
Log:
Work in progress.
Modified:
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/Makefile.am
===================================================================
--- gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/Makefile.am
2007-05-28 20:38:36 UTC (rev 5558)
+++ gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/Makefile.am
2007-05-28 21:41:22 UTC (rev 5559)
@@ -21,12 +21,21 @@
include $(top_srcdir)/Makefile.common
+# Install this stuff so that it ends up as the gnuradio.sounder module
+# This usually ends up at:
+# ${prefix}/lib/python${python_version}/site-packages/gnuradio
+
+ourpythondir = $(grpythondir)
+ourlibdir = $(grpyexecdir)
+
EXTRA_DIST = \
- usrp_sounder.py \
qa_nothing.py \
run_tests.in
bin_SCRIPTS = \
usrp_sounder.py
-MOSTLYCLEANFILES = *~ *.pyc *.pyo output.*
+ourpython_PYTHON = \
+ sounder.py
+
+MOSTLYCLEANFILES = *~ *.pyc *.pyo
\ No newline at end of file
Added: gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder.py
===================================================================
--- gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder.py
(rev 0)
+++ gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder.py
2007-05-28 21:41:22 UTC (rev 5559)
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+#
+# Copyright 2007 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., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from gnuradio import gr, usrp
+from gnuradio import eng_notation
+
+n2s = eng_notation.num_to_str
+
+FR_MODE = usrp.FR_USER_0
+bmFR_MODE_RESET = 1 << 0 # bit 0: active high reset
+bmFR_MODE_TX = 1 << 1 # bit 1: enable transmitter
+bmFR_MODE_RX = 1 << 2 # bit 2: enable receiver
+bmFR_MODE_LP = 1 << 3 # bit 3: enable digital loopback
+
+FR_DEGREE = usrp.FR_USER_1
+
+def pick_subdevice(u):
+ """
+ The user didn't specify a subdevice on the command line.
+ If there's a daughterboard on A, select A.
+ If there's a daughterboard on B, select B.
+ Otherwise, select A.
+ """
+ if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a
problem
+ return (0, 0)
+ if u.db[1][0].dbid() >= 0:
+ return (1, 0)
+ return (0, 0)
+
+class sounder_tx:
+ def __init__(self, verbose=False):
+ self._verbose = verbose
+ self._u = usrp.sink_s(fpga_filename='usrp_sounder.rbf')
+ self._subdev_spec = usrp.pick_tx_subdevice(self._u)
+ self._subdev = usrp.selected_subdev(self._u, self._subdev_spec)
+ if self._verbose:
+ print "Using", self._subdev.name(), "for sounder transmitter."
+ self._u.start()
+
+ def tune(self, frequency):
+ if self._verbose:
+ print "Setting transmitter frequency to", n2s(frequency)
+ result = self._u.tune(0, self._subdev, frequency)
+ if result == False:
+ raise RuntimeError("Failed to set transmitter frequency.")
+
+class sounder_rx:
+ def __init__(self, subdev_spec=None, samples=-1, verbose=False,
debug=False):
+ self._subdev_spec = subdev_spec
+ self._samples = samples
+ self._verbose = verbose
+ self._debug = debug
+
+ self._fg = gr.flow_graph()
+ self._u = usrp.source_c(fpga_filename='usrp_sounder.rbf')
+ if self._subdev_spec == None:
+ self._subdev_spec = pick_subdevice(self._u)
+ self._u.set_mux(usrp.determine_rx_mux_value(self._u,
self._subdev_spec))
+ self._subdev = usrp.selected_subdev(self._u, self._subdev_spec)
+ if self._verbose:
+ print "Using", self._subdev.name(), "for sounder receiver."
+ self._sink = gr.file_sink(gr.sizeof_gr_complex, "output.dat")
+
+ if self._samples >= 0:
+ self._head = gr.head(gr.sizeof_gr_complex, self._samples)
+ self._fg.connect(self._u, self._head, self._sink)
+ else:
+ self._fg.connect(self._u, self._sink)
+
+ def tune(self, frequency):
+ if self._verbose:
+ print "Setting receiver frequency to", n2s(frequency)
+ result = self._u.tune(0, self._subdev, frequency)
+ if result == False:
+ raise RuntimeError("Failed to set receiver frequency.")
+
+ def start(self):
+ if self._debug:
+ print "Starting receiver flow graph."
+ self._fg.start()
+
+ def wait(self):
+ if self._debug:
+ print "Waiting for threads..."
+ self._fg.wait()
+
+ def stop(self):
+ if self._debug:
+ print "Stopping receiver flow graph."
+ self._fg.stop()
+ self.wait()
+ if self._debug:
+ print "Receiver flow graph stopped."
+
+
+class sounder:
+ def __init__(self,transmit=False,receive=False,loopback=False,
+
rx_subdev_spec=None,frequency=0.0,degree=10,samples=-1,verbose=False,debug=False):
+ self._transmit = transmit
+ self._receive = receive
+ self._loopback = loopback
+ self._rx_subdev_spec = rx_subdev_spec
+ self._frequency = frequency
+ self._degree = degree
+ self._samples = samples
+ self._verbose = verbose
+ self._debug = debug
+
+ self._mode = 0
+ self._u = None
+ self._trans = None
+ self._rcvr = None
+ self._transmitting = False
+ self._receiving = False
+
+ if self._transmit:
+ self._trans = sounder_tx(verbose=self._verbose)
+ self._u = self._trans._u
+
+ if self._receive:
+ self._rcvr = sounder_rx(subdev_spec=self._rx_subdev_spec,
samples=self._samples,
+ verbose=self._verbose, debug=self._debug)
+ self._u = self._rcvr._u # either receiver or transmitter object
will do
+
+ self.set_reset(True)
+ if self._loopback == False:
+ self.tune(self._frequency)
+ self.set_degree(self._degree)
+ self.set_loopback(self._loopback)
+ self.set_reset(False)
+
+ def tune(self, frequency):
+ self._frequency = frequency
+ print self._rcvr
+ if self._rcvr:
+ self._rcvr.tune(frequency)
+ if self._trans:
+ self._trans.tune(frequency)
+
+ def set_degree(self, degree):
+ if self._verbose:
+ print "Setting PN code degree to", degree
+ self._u._write_fpga_reg(FR_DEGREE, degree);
+
+ def _write_mode(self):
+ if self._debug:
+ print "Writing mode register with:", hex(self._mode)
+ self._u._write_fpga_reg(FR_MODE, self._mode)
+
+ def enable_tx(self, value):
+ if value:
+ if self._verbose:
+ print "Enabling transmitter."
+ self._mode |= bmFR_MODE_TX
+ self._transmitting = True
+ else:
+ if self._verbose:
+ print "Disabling transmitter."
+ self._mode &= ~bmFR_MODE_TX
+ self._write_mode()
+
+ def enable_rx(self, value):
+ if value:
+ self._mode |= bmFR_MODE_RX
+ self._write_mode()
+ self._rcvr.start()
+ self._receiving = True
+ if self._samples >= 0:
+ self._rcvr.wait()
+ else:
+ if self._samples < 0:
+ self._rcvr.stop()
+ self._mode &= ~bmFR_MODE_RX
+ self._write_mode()
+ self._receiving = False
+
+ def set_loopback(self, value):
+ if value:
+ if self._verbose:
+ print "Enabling digital loopback."
+ self._mode |= bmFR_MODE_LP
+ else:
+ if self._verbose:
+ print "Disabling digital loopback."
+ self._mode &= ~bmFR_MODE_LP
+ self._write_mode()
+
+ def set_reset(self, value):
+ if value:
+ if self._debug:
+ print "Asserting reset."
+ self._mode |= bmFR_MODE_RESET
+ else:
+ if self._debug:
+ print "De-asserting reset."
+ self._mode &= ~bmFR_MODE_RESET
+ self._write_mode()
+
+ def start(self):
+ self.enable_tx(self._transmit)
+ self.enable_rx(self._receive)
+
+ def __del__(self):
+ if self._transmitting:
+ self.enable_tx(False)
+
+ if self._receiving:
+ self.enable_rx(False)
+
Deleted:
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/test_lp.sh
Deleted:
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/test_rx.sh
Deleted:
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/test_tx.sh
Modified:
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/usrp_sounder.py
===================================================================
---
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/usrp_sounder.py
2007-05-28 20:38:36 UTC (rev 5558)
+++
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/usrp_sounder.py
2007-05-28 21:41:22 UTC (rev 5559)
@@ -20,197 +20,14 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, usrp
+from gnuradio.sounder import sounder
from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-import sys, time
+import sys
n2s = eng_notation.num_to_str
-FR_MODE = usrp.FR_USER_0
-bmFR_MODE_RESET = 1 << 0 # bit 0: active high reset
-bmFR_MODE_TX = 1 << 1 # bit 1: enable transmitter
-bmFR_MODE_RX = 1 << 2 # bit 2: enable receiver
-bmFR_MODE_LP = 1 << 3 # bit 3: enable digital loopback
-
-FR_DEGREE = usrp.FR_USER_1
-
-def pick_subdevice(u):
- """
- The user didn't specify a subdevice on the command line.
- If there's a daughterboard on A, select A.
- If there's a daughterboard on B, select B.
- Otherwise, select A.
- """
- if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a
problem
- return (0, 0)
- if u.db[1][0].dbid() >= 0:
- return (1, 0)
- return (0, 0)
-
-class sounder_tx:
- def __init__(self, options):
- self._options = options
- self._u = usrp.sink_s(fpga_filename='usrp_sounder.rbf')
- self._subdev_spec = usrp.pick_tx_subdevice(self._u)
- self._subdev = usrp.selected_subdev(self._u, self._subdev_spec)
- if options.verbose:
- print "Using", self._subdev.name(), "for sounder transmitter."
- self._u.start()
-
- def tune(self, frequency):
- if self._options.verbose:
- print "Setting transmitter frequency to", n2s(frequency)
- result = self._u.tune(0, self._subdev, frequency)
- if result == False:
- raise RuntimeError("Failed to set transmitter frequency.")
-
-class sounder_rx:
- def __init__(self, options):
- self._options = options
- self._fg = gr.flow_graph()
- self._u = usrp.source_c(fpga_filename='usrp_sounder.rbf')
- if options.rx_subdev_spec == None:
- options.rx_subdev_spec = usrp.pick_rx_subdevice(self._u)
- self._u.set_mux(usrp.determine_rx_mux_value(self._u,
options.rx_subdev_spec))
- self._subdev = usrp.selected_subdev(self._u, options.rx_subdev_spec)
- if options.verbose:
- print "Using", self._subdev.name(), "for sounder receiver."
- self._sink = gr.file_sink(gr.sizeof_gr_complex, "output.dat")
-
- if options.samples >= 0:
- self._head = gr.head(gr.sizeof_gr_complex, options.samples)
- self._fg.connect(self._u, self._head, self._sink)
- else:
- self._fg.connect(self._u, self._sink)
-
- def tune(self, frequency):
- if self._options.verbose:
- print "Setting receiver frequency to", n2s(frequency)
- result = self._u.tune(0, self._subdev, frequency)
- if result == False:
- raise RuntimeError("Failed to set receiver frequency.")
-
- def start(self):
- if self._options.debug:
- print "Starting receiver flow graph."
- self._fg.start()
-
- def wait(self):
- self._fg.wait()
-
- def stop(self):
- if self._options.debug:
- print "Stopping receiver flow graph."
- self._fg.stop()
- if self._options.debug:
- print "Waiting for threads..."
- self._fg.wait()
- if self._options.debug:
- print "Receiver flow graph stopped."
-
-
-class sounder:
- def __init__(self, options):
- self._options = options
- self._mode = 0
-
- self._u = None
- self._trans = None
- self._rcvr = None
- self._transmitting = False
- self._receiving = False
-
- if options.transmit:
- self._trans = sounder_tx(options)
- self._u = self._trans._u
-
- if options.receive:
- self._rcvr = sounder_rx(options)
- self._u = self._rcvr._u # either receiver or transmitter object
will do
-
- self.set_reset(True)
- if options.loopback == False:
- self.tune(options.frequency)
- self.set_degree(options.degree)
- self.set_loopback(options.loopback)
- self.set_reset(False)
-
- def tune(self, frequency):
- if self._rcvr:
- self._rcvr.tune(frequency)
- if self._trans:
- self._trans.tune(frequency)
-
- def set_degree(self, degree):
- if self._options.verbose:
- print "Setting PN code degree to", degree
- self._u._write_fpga_reg(FR_DEGREE, degree);
-
- def _write_mode(self):
- if self._options.debug:
- print "Writing mode register with:", hex(self._mode)
- self._u._write_fpga_reg(FR_MODE, self._mode)
-
- def enable_tx(self, value):
- if value:
- if self._options.verbose:
- print "Enabling transmitter."
- self._mode |= bmFR_MODE_TX
- self._transmitting = True
- else:
- if self._options.verbose:
- print "Disabling transmitter."
- self._mode &= ~bmFR_MODE_TX
- self._write_mode()
-
- def enable_rx(self, value):
- if value:
- self._mode |= bmFR_MODE_RX
- self._write_mode()
- self._rcvr.start()
- self._receiving = True
- if self._options.samples >= 0:
- self._rcvr.wait()
- else:
- if self._options.samples < 0:
- self._rcvr.stop()
- self._mode &= ~bmFR_MODE_RX
- self._write_mode()
- self._receiving = False
-
- def set_loopback(self, value):
- if value:
- if self._options.verbose:
- print "Enabling digital loopback."
- self._mode |= bmFR_MODE_LP
- else:
- if self._options.verbose:
- print "Disabling digital loopback."
- self._mode &= ~bmFR_MODE_LP
- self._write_mode()
-
- def set_reset(self, value):
- if value:
- if self._options.debug:
- print "Asserting reset."
- self._mode |= bmFR_MODE_RESET
- else:
- if self._options.debug:
- print "De-asserting reset."
- self._mode &= ~bmFR_MODE_RESET
- self._write_mode()
-
- def __del__(self):
- if self._transmitting:
- self.enable_tx(False)
-
- if self._receiving:
- self.enable_rx(False)
-
-#
------------------------------------------------------------------------------
-
def main():
parser = OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0),
@@ -243,14 +60,11 @@
if options.loopback == False:
print "Sounding frequency range is", n2s(options.frequency-16e6),
"to", n2s(options.frequency+16e6)
- s = sounder(options)
+ s =
sounder(transmit=options.transmit,receive=options.receive,loopback=options.loopback,
+
rx_subdev_spec=options.rx_subdev_spec,frequency=options.frequency,degree=options.degree,
+
samples=options.samples,verbose=options.verbose,debug=options.debug)
- if options.transmit:
- s.enable_tx(True)
-
- if options.receive:
- s.enable_rx(True)
-
+ s.start()
if options.samples < 0:
raw_input("Press enter to exit.")
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5559 - gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python,
jcorgan <=