summaryrefslogtreecommitdiff
path: root/gr-uhd/lib/uhd_simple_sink.cc
diff options
context:
space:
mode:
authorJohnathan Corgan2010-05-21 18:12:41 -0700
committerJohnathan Corgan2010-05-21 18:12:41 -0700
commit16c0a87dc5c53ca28071b76f50b31317d4c519f1 (patch)
tree54b06374c5a9640f95a19977d4b0b4acd91211b0 /gr-uhd/lib/uhd_simple_sink.cc
parent58a6e6c74dcc85979682f029ccbb6039cf20ae56 (diff)
parent2c4bb0b5ea22ed73f3de6cac8a27083d950879bb (diff)
downloadgnuradio-16c0a87dc5c53ca28071b76f50b31317d4c519f1.tar.gz
gnuradio-16c0a87dc5c53ca28071b76f50b31317d4c519f1.tar.bz2
gnuradio-16c0a87dc5c53ca28071b76f50b31317d4c519f1.zip
Merge remote branch 'jblum/uhd' into next
* jblum/uhd: using the send and recv full buffer modes, avoids extra loop in implementation Added call to get access to the underlying uhd simple usrp object. added docs to uhd grc blocks, added pkg config path to make support easier typo fix, called variable ant, not antenna added to uhd grc files, also removed warning for grc generator with uhd blocks added more access methods to uhd source and sink fix for paradigm shift Use simple usrp from uhd. gr-uhd working with io type added swig includes and tune result return using new streaming api added set center freq call Added samp rate param and using the simple device from uhd removed timeout from here Got the source and sink working with current uhd. Added the uhd simple sink lib block, swig wrapper, grc wrapper. using samples prop, added unchecked in files for utils and grc rx wrapper recv noise with uhd Created simple source (with nothing in it) and some swig build stuff. Created gr uhd skeleton build.
Diffstat (limited to 'gr-uhd/lib/uhd_simple_sink.cc')
-rw-r--r--gr-uhd/lib/uhd_simple_sink.cc130
1 files changed, 130 insertions, 0 deletions
diff --git a/gr-uhd/lib/uhd_simple_sink.cc b/gr-uhd/lib/uhd_simple_sink.cc
new file mode 100644
index 000000000..ccec0e29c
--- /dev/null
+++ b/gr-uhd/lib/uhd_simple_sink.cc
@@ -0,0 +1,130 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 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.
+ */
+
+#include <uhd_simple_sink.h>
+#include <gr_io_signature.h>
+#include <stdexcept>
+#include "utils.h"
+
+/***********************************************************************
+ * UHD Sink
+ **********************************************************************/
+uhd_simple_sink::uhd_simple_sink(gr_io_signature_sptr sig)
+:gr_sync_block("uhd sink", sig, gr_make_io_signature(0, 0, 0)){
+ /* NOP */
+}
+
+/***********************************************************************
+ * UHD Sink Impl
+ **********************************************************************/
+class uhd_simple_sink_impl : public uhd_simple_sink{
+public:
+ uhd_simple_sink_impl(
+ const std::string &args,
+ const uhd::io_type_t &type
+ ) : uhd_simple_sink(gr_make_io_signature(1, 1, type.size)), _type(type)
+ {
+ _dev = uhd::usrp::simple_usrp::make(args);
+ }
+
+ ~uhd_simple_sink_impl(void){
+ //NOP
+ }
+
+ void set_samp_rate(double rate){
+ _dev->set_tx_rate(rate);
+ do_samp_rate_error_message(rate, get_samp_rate());
+ }
+
+ double get_samp_rate(void){
+ return _dev->get_tx_rate();
+ }
+
+ uhd::tune_result_t set_center_freq(double freq){
+ return _dev->set_tx_freq(freq);
+ }
+
+ uhd::freq_range_t get_freq_range(void){
+ return _dev->get_tx_freq_range();
+ }
+
+ void set_gain(float gain){
+ return _dev->set_tx_gain(gain);
+ }
+
+ float get_gain(void){
+ return _dev->get_tx_gain();
+ }
+
+ uhd::gain_range_t get_gain_range(void){
+ return _dev->get_tx_gain_range();
+ }
+
+ void set_antenna(const std::string &ant){
+ return _dev->set_tx_antenna(ant);
+ }
+
+ std::string get_antenna(void){
+ return _dev->get_tx_antenna();
+ }
+
+ std::vector<std::string> get_antennas(void){
+ return _dev->get_tx_antennas();
+ }
+
+ uhd::usrp::simple_usrp::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
+ ){
+ uhd::tx_metadata_t metadata;
+ metadata.start_of_burst = true;
+
+ return _dev->get_device()->send(
+ boost::asio::buffer(input_items[0], noutput_items*_type.size),
+ metadata, _type, uhd::device::SEND_MODE_FULL_BUFF
+ );
+ }
+
+protected:
+ uhd::usrp::simple_usrp::sptr _dev;
+ const uhd::io_type_t _type;
+};
+
+/***********************************************************************
+ * Make UHD Sink
+ **********************************************************************/
+boost::shared_ptr<uhd_simple_sink> uhd_make_simple_sink(
+ const std::string &args,
+ const uhd::io_type_t::tid_t &type
+){
+ return boost::shared_ptr<uhd_simple_sink>(
+ new uhd_simple_sink_impl(args, type)
+ );
+}