+ self._u = None
+ self._trans = None
+ self._rcvr = None
+ self._transmitting = False
+ self._receiving = False
+
+ if options.transmit:
+ print "Creating sounder transmitter."
+ self._trans = usrp.sink_s(fpga_filename='usrp_sounder.rbf')
+ self._trans_subdev_spec = usrp.pick_tx_subdevice(self._trans)
+ self._trans_subdev = usrp.selected_subdev(self._trans, self._trans_subdev_spec)
+ self._trans.start()
+ self._u = self._trans
+
+ if options.receive:
+ print "Creating sounder receiver."
+ self._fg = gr.flow_graph()
+ self._rcvr = usrp.source_s(fpga_filename='usrp_sounder.rbf', decim_rate=128)
+ self._rcvr_subdev_spec = usrp.pick_rx_subdevice(self._rcvr)
+ self._rcvr_subdev = usrp.selected_subdev(self._rcvr, self._rcvr_subdev_spec)
+ self._sink = gr.file_sink(gr.sizeof_short, "output.dat")
+
+ if options.samples >= 0:
+ self._head = gr.head(gr.sizeof_short, options.samples*gr.sizeof_short)
+ self._fg.connect(self._rcvr, self._head, self._sink)
+ else:
+ self._fg.connect(self._rcvr, self._sink)
+ self._u = self._rcvr # either receiver or transmitter object will do
+
+ self.set_reset(True)
+ self.set_freq(options.frequency)
+ self.set_degree(options.degree)
+ self.set_loopback(options.loopback)
+ self.set_reset(False)
+
+ def set_freq(self, frequency):
+ print "Setting center frequency to", n2s(frequency)
+ if self._rcvr:
+ self._rcvr.tune(0, self._rcvr_subdev, frequency)
+
+ if self._trans:
+ self._trans.tune(0, self._trans_subdev, frequency)
+
+ def set_degree(self, degree):
+ print "Setting PN code degree to", degree
+ self._u._write_fpga_reg(FR_DEGREE, degree);
+
+ def _write_mode(self):
+ print "Writing mode register with:", hex(self._mode)
+ self._u._write_fpga_reg(FR_MODE, self._mode)
+
+ def enable_tx(self, value):
+ if value:
+ print "Enabling transmitter."
+ self._mode |= bmFR_MODE_TX
+ self._transmitting = True
+ else:
+ print "Disabling transmitter."
+ self._mode &= ~bmFR_MODE_TX
+ self._write_mode()
+
+ def enable_rx(self, value):
+ if value:
+ print "Starting receiver flow graph."
+ self._mode |= bmFR_MODE_RX
+ self._write_mode()
+ self._fg.start()
+ self._receiving = True
+ if self._options.samples >= 0:
+ self._fg.wait()
+ else:
+ print "Stopping receiver flow graph."
+ if self._options.samples < 0:
+ self._fg.stop()
+ print "Waiting for threads..."
+ self._fg.wait()
+ print "Receiver flow graph stopped."
+ self._mode &= ~bmFR_MODE_RX
+ self._write_mode()
+ self._receiving = False
+