diff options
Diffstat (limited to 'gr-iio/lib/pluto_utils.cc')
-rw-r--r-- | gr-iio/lib/pluto_utils.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gr-iio/lib/pluto_utils.cc b/gr-iio/lib/pluto_utils.cc new file mode 100644 index 0000000000..2d8f2fed35 --- /dev/null +++ b/gr-iio/lib/pluto_utils.cc @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2017 Analog Devices Inc. + * Author: Paul Cercueil <paul.cercueil@analog.com> + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include <gnuradio/iio/pluto_utils.h> +#include <iio.h> +#include <stdexcept> + +namespace gr { +namespace iio { + +std::string get_pluto_uri() +{ + iio_scan_context* ctx = iio_create_scan_context("usb", 0); + if (!ctx) + throw std::runtime_error("Unable to create scan context"); + + iio_context_info** info; + int ret = iio_scan_context_get_info_list(ctx, &info); + if (ret < 0) { + iio_scan_context_destroy(ctx); + throw std::runtime_error("Unable to scan for Pluto devices"); + } + + if (ret == 0) { + iio_context_info_list_free(info); + iio_scan_context_destroy(ctx); + throw std::runtime_error("No Pluto device found"); + } + + if (ret > 1) { + printf("More than one Pluto found:\n"); + + for (unsigned int i = 0; i < (size_t)ret; i++) { + printf("\t%d: %s [%s]\n", + i, + iio_context_info_get_description(info[i]), + iio_context_info_get_uri(info[i])); + } + + printf("We will use the first one.\n"); + } + + std::string uri(iio_context_info_get_uri(info[0])); + iio_context_info_list_free(info); + iio_scan_context_destroy(ctx); + + return uri; +} +} // namespace iio +} // namespace gr |